Sweep every dialog-context <mat-toolbar color="primary"> (105 toolbars across
104 files) to <mat-toolbar class="tb-dialog-header">, preserving any existing
class list. Add a matching .tb-dialog-header rule to styles.scss with a
1px rgba(0,0,0,0.12) bottom border. Table row-selection toolbars
(mat-mdc-table-toolbar) and the app shell / dashboard-page primary toolbars
are intentionally left as-is. The two dialogs that placed a
tb-toggle-select in the header switch from appearance="fill-invert" to "fill"
now that the header is on a light background.
Follow-up to the EntityComponent sweep — ContactBasedComponent extends EntityComponent transitively, so tenant.component.html (4 buttons) and customer.component.html (8 buttons) were missed. Same one-for-one raised → stroked replacement inside the .tb-details-buttons block.
Switch every button inside .tb-details-buttons across all EntityComponent
templates (17 files, 102 buttons) from mat-raised-button to mat-stroked-button,
matching the device.component.html reference. Update the shared
.tb-details-buttons rule in styles.scss so outlined buttons inherit their
border color from the surrounding color context. copy-device-credentials
follows the same treatment and switches its host to display: contents so it
no longer takes layout space.
Drop hardcoded card-grid sizing and inline icon styles in the navigation-card / navigation-cards / home-links templates and stylesheets; tighten menu-models default seed map and menu-service helper accordingly.
The device-install wizard substituted ${...} placeholders via a plain
string replace, so a quoted boolean macro like "cleanSession":
"${mqttCleanSession}" parsed as the string "false" (truthy) instead of
the JSON boolean false. Unchecking a boolean field (e.g. clean session)
therefore had no effect and read as true in the resulting integration.
Add a type-aware resolveTemplateJson() that, using the form-field type
recorded in form.json, emits BOOLEAN/INTEGER placeholders occupying a
whole quoted token as raw JSON values (unquoted) while leaving string
fields and embedded placeholders quoted. Route all template-parse call
sites through it. Fixes cleanSession, ssl, port and connectTimeoutSec
across all existing device packages without any template changes.
Add a MenuId.platform pointing at the existing /settings path with the platform icon, retain MenuId.settings for the smaller "Settings" group, and re-point the SYS_ADMIN sidebar entry + admin-routing breadcrumb at the new platform id so each section can have its own icon and translation.
Reshape MenuId / MenuSection metadata in menu.models.ts so menu-toggle can read the new structure; align the admin/JS library and resources routing/table configs with that shape; tighten js-library-table-header and js-resource templates plus the image-gallery action header; add the matching English locale entries.