Removed overflow:hidden from DynamicFormSelectItemsComponent that was hiding the Value/Label table headers and "No options configured" message. Added overflow-visible to nested dynamic-form-properties to prevent clipping in expansion panels.
Add optional roundDown parameter that uses Math.floor instead of
Math.round when abbreviating numbers. This prevents values like
3993979 from rounding up to 4M, showing 3.9M instead.
Also improve typing: replace any with ShortNumberArgs interface
and ensure transform always returns string.
The sanitize function escaped all @, {, } characters to prevent Angular
from interpreting markdown content as template syntax. With Angular 17+
control flow (@if, @for, @switch, @let, @defer), users need these
constructs to be preserved and compiled.
Extract sanitization logic into markdown-sanitize.helper.ts with a
config-driven pipeline:
- Protect <pre> code blocks from processing
- Extract and preserve control flow blocks (@if/@else, @for/@empty,
@switch/@case/@default, @defer/@placeholder/@loading/@error, @let)
- Decode HTML entities (', ", <, >, &) introduced
by markdown parser inside control flow expressions
- Escape @, {, } only in remaining non-Angular text
- Validate @let to avoid false matches in prose (e.g. headings)
- Handle chain keywords with proper whitespace skipping
- Handle optional parenthesized params (@loading (minimum 300ms))
Add OpenFreeMap as a new built-in map provider with Bright, Positron, and
Liberty styles. It becomes the default roadmap layer for new geo map widgets.
No API key required.
Extend the Custom provider with a "Vector tiles" toggle that allows using
MapLibre GL style URLs from providers like OpenFreeMap or MapTiler, alongside
the existing raster tile URL support. Add optional attribution field for
custom providers. Fully backward compatible with existing widget configurations.
When a NO_DATA filter is present, the condition type control gets
disabled. Angular's FormGroup.value excludes disabled controls,
causing the 'type' field to be omitted from the saved result.
This leads to a JSON parse error on the backend.
Explicitly include the type control value in the save output
while keeping unit/value/count excluded when disabled.
Added IWidgetHttpUtils interface and httpUtils property to WidgetContext
so widget action code can use defaultHttpOptionsFromConfig and related
functions without modifying ThingsBoard source code.
- Restore private on TEST_SCRIPT_EXPRESSION in CalculatedFieldController
- Restore @Valid on deprecated alarms field in DeviceProfileData
- Remove broken type guard in getTestScriptDialog (AlarmRuleDefinition
DTO has no type field, causing the dialog to never open)