@akcelik/strct 4.4.1 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akcelik/strct",
3
- "version": "4.4.1",
3
+ "version": "4.6.0",
4
4
  "description": "UIStruct — a standalone Angular component library with a tokenised, multi-palette theme system, built for datacenter / infrastructure management UIs.",
5
5
  "author": "Serkan Akcelik <serkan.akcelik@gmail.com>",
6
6
  "license": "MIT",
package/styles/_base.scss CHANGED
@@ -57,6 +57,56 @@ kbd,
57
57
  font-family: var(--mono);
58
58
  }
59
59
 
60
+ // The three text tones every screen uses. Without them a consumer writes
61
+ // `style="font-size:12.5px;color:var(--t3)"` — 147 times, in one app.
62
+ .strct-text-muted {
63
+ color: var(--t3);
64
+ }
65
+
66
+ .strct-text-hint {
67
+ color: var(--t3);
68
+ font-size: var(--text-sm);
69
+ line-height: 1.5;
70
+ }
71
+
72
+ .strct-text-overline {
73
+ font-size: var(--text-xs);
74
+ font-weight: 600;
75
+ letter-spacing: 0.06em;
76
+ text-transform: uppercase;
77
+ color: var(--t2);
78
+ }
79
+
80
+ // Inline code in running text: horizontal padding only and inherited
81
+ // line-height, so a code span never changes a paragraph's leading.
82
+ .strct-code-inline {
83
+ font-family: var(--mono);
84
+ font-size: var(--text-sm);
85
+ background: var(--bg-2);
86
+ border-radius: var(--radius-sm);
87
+ padding: 0 0.35em;
88
+ line-height: inherit;
89
+ white-space: nowrap;
90
+ }
91
+
92
+ .strct-code-inline--copyable {
93
+ display: inline-flex;
94
+ align-items: center;
95
+ gap: 4px;
96
+ padding-inline-end: 0.15em;
97
+ }
98
+
99
+ .strct-code-inline--copyable .strct-copy {
100
+ padding: 1px 3px;
101
+ }
102
+
103
+ .strct-text-lede {
104
+ color: var(--t2);
105
+ font-size: var(--text-md);
106
+ line-height: 1.55;
107
+ max-width: 72ch;
108
+ }
109
+
60
110
  :focus-visible {
61
111
  outline: 2px solid var(--acc50);
62
112
  outline-offset: 2px;
@@ -562,6 +562,11 @@ declare class StrctPageHeaderActions {
562
562
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctPageHeaderActions, never>;
563
563
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctPageHeaderActions, "[strctPageHeaderActions]", never, {}, {}, never, never, true, never>;
564
564
  }
565
+ /** Sits beside the title, on its baseline — a state badge, a version. */
566
+ declare class StrctPageHeaderTitleMeta {
567
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctPageHeaderTitleMeta, never>;
568
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctPageHeaderTitleMeta, "[strctPageHeaderTitleMeta]", never, {}, {}, never, never, true, never>;
569
+ }
565
570
  /**
566
571
  * Page header — the top of every console object page: an optional breadcrumb
567
572
  * row, a title + subtitle, and actions aligned to the end. Default content
@@ -579,8 +584,53 @@ declare class StrctPageHeader {
579
584
  readonly subtitle: _angular_core.InputSignal<string>;
580
585
  /** Draw a hairline divider under the header. */
581
586
  readonly divider: _angular_core.InputSignalWithTransform<boolean, unknown>;
587
+ /** Heading level — the document outline (a page's h1, a pane's h2). */
588
+ readonly level: _angular_core.InputSignal<1 | 2 | 3>;
589
+ /** `page` — as today; `pane` — the smaller header a side pane wants. */
590
+ readonly size: _angular_core.InputSignal<"page" | "pane">;
591
+ /** Optional leading icon, e.g. the kind of object the page is about. */
592
+ readonly icon: _angular_core.InputSignal<string>;
582
593
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctPageHeader, never>;
583
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctPageHeader, "strct-page-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "divider": { "alias": "divider"; "required": false; "isSignal": true; }; }, {}, never, ["[strctPageHeaderCrumbs]", "[strctPageHeaderActions]", "*"], true, never>;
594
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctPageHeader, "strct-page-header", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "divider": { "alias": "divider"; "required": false; "isSignal": true; }; "level": { "alias": "level"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, ["[strctPageHeaderCrumbs]", "[strctPageHeaderTitleMeta]", "[strctPageHeaderActions]", "*"], true, never>;
595
+ }
596
+
597
+ /** Follows the heading on its line — a badge, a count, a status dot. */
598
+ declare class StrctSectionHeaderMeta {
599
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctSectionHeaderMeta, never>;
600
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctSectionHeaderMeta, "[strctSectionHeaderMeta]", never, {}, {}, never, never, true, never>;
601
+ }
602
+ /** Goes to the end of the heading row (the `strctPageHeaderActions` precedent). */
603
+ declare class StrctSectionHeaderActions {
604
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctSectionHeaderActions, never>;
605
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctSectionHeaderActions, "[strctSectionHeaderActions]", never, {}, {}, never, never, true, never>;
606
+ }
607
+ /**
608
+ * The title of a section within a page. `strct-page-header` is the page's `h1`
609
+ * and `strct-card-header` needs a card; the section between the two had no
610
+ * component, so consumers wrote an uppercase `h3` by hand — the single largest
611
+ * source of hand-written CSS in the app this came from.
612
+ *
613
+ * <strct-section-header heading="Proxy" description="How the appliance reaches the internet." [level]="3">
614
+ * <strct-badge strctSectionHeaderMeta status="success">Tested</strct-badge>
615
+ * <button strct-button strctSectionHeaderActions size="sm" variant="outline">Edit proxy…</button>
616
+ * </strct-section-header>
617
+ *
618
+ * `level` sets the element (`h2`–`h6`) and `appearance` sets the look, so the
619
+ * document outline stays correct whatever the section is styled like.
620
+ */
621
+ declare class StrctSectionHeader {
622
+ /** Section title. */
623
+ readonly heading: _angular_core.InputSignal<string>;
624
+ /** One line under the heading. */
625
+ readonly description: _angular_core.InputSignal<string>;
626
+ /** Heading level — the document outline, independent of `appearance`. */
627
+ readonly level: _angular_core.InputSignal<2 | 3 | 5 | 4 | 6>;
628
+ /** `title` — sentence case; `overline` — uppercase, letter-spaced, quieter. */
629
+ readonly appearance: _angular_core.InputSignal<"title" | "overline">;
630
+ /** Hairline under the header, like `strct-page-header`. */
631
+ readonly divider: _angular_core.InputSignalWithTransform<boolean, unknown>;
632
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctSectionHeader, never>;
633
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctSectionHeader, "strct-section-header", never, { "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "level": { "alias": "level"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "divider": { "alias": "divider"; "required": false; "isSignal": true; }; }, {}, never, ["[strctSectionHeaderMeta]", "[strctSectionHeaderActions]", "*"], true, never>;
584
634
  }
585
635
 
586
636
  /** Button visual variants. */
@@ -672,9 +722,25 @@ declare class StrctAvatar {
672
722
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctAvatar, "strct-avatar", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
673
723
  }
674
724
 
675
- /** Progress bar color variants. */
676
- type StrctProgressStatus = 'accent' | 'success' | 'warning' | 'critical';
677
- /** Horizontal value/usage bar. `<strct-progress [value]="72" status="warning" />`. */
725
+ /** Progress bar color variants. `neutral` is the quiet one: queued, idle, unknown. */
726
+ type StrctProgressStatus = 'neutral' | 'accent' | 'success' | 'warning' | 'critical';
727
+ /** One stacked fill of a multi-value bar (used now, plus what would arrive …). */
728
+ interface StrctProgressSegment {
729
+ value: number;
730
+ status?: StrctProgressStatus;
731
+ /** Names this part in the accessible text ("Used 61%, arriving 22%"). */
732
+ label?: string;
733
+ }
734
+ /**
735
+ * Horizontal value/usage bar. `<strct-progress [value]="72" status="warning" />`.
736
+ *
737
+ * **Meter mode.** A capacity bar says what it measures and how much, next to
738
+ * the bar: `visibleLabel` puts `label` at the start of a row above the track,
739
+ * `showValue` puts `valueText` (default `${value}%`) at its end, and `caption`
740
+ * adds a quiet line under it. `segments` stacks more than one fill, and
741
+ * `indeterminate` is a task that is running but reports no percentage. Every
742
+ * one of these is off by default, so a plain bar renders exactly as before.
743
+ */
678
744
  declare class StrctProgress {
679
745
  /** Current value. */
680
746
  readonly value: _angular_core.InputSignal<number>;
@@ -682,6 +748,18 @@ declare class StrctProgress {
682
748
  readonly label: _angular_core.InputSignal<string>;
683
749
  /** Visual status color. */
684
750
  readonly status: _angular_core.InputSignal<StrctProgressStatus>;
751
+ /** Show `label` above the bar as well as announcing it. */
752
+ readonly visibleLabel: _angular_core.InputSignalWithTransform<boolean, unknown>;
753
+ /** Show the value at the end of the row above the bar. */
754
+ readonly showValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
755
+ /** What `showValue` prints — "293 GB of 512 GB". Defaults to `${value}%`. */
756
+ readonly valueText: _angular_core.InputSignal<string>;
757
+ /** A quiet line under the bar — "219 GB free across 2 nodes". */
758
+ readonly caption: _angular_core.InputSignal<string>;
759
+ /** Running, but with no percentage to report. */
760
+ readonly indeterminate: _angular_core.InputSignalWithTransform<boolean, unknown>;
761
+ /** Stack several fills (used now + what would arrive); clamped to 100 total. */
762
+ readonly segments: _angular_core.InputSignal<StrctProgressSegment[] | null>;
685
763
  /**
686
764
  * Optional value-driven thresholds. When set, the component picks its own
687
765
  * status from the value instead of the caller computing it: `value >= critical`
@@ -691,10 +769,17 @@ declare class StrctProgress {
691
769
  */
692
770
  readonly thresholds: _angular_core.InputSignal<StrctThresholds | null>;
693
771
  protected readonly clamped: _angular_core.Signal<number>;
772
+ /** Segments as widths that together never exceed the track. */
773
+ protected readonly stacked: _angular_core.Signal<{
774
+ width: number;
775
+ status: StrctProgressStatus;
776
+ }[] | null>;
777
+ /** What a screen reader reads instead of the bare number. */
778
+ protected readonly valueDescription: _angular_core.Signal<string | null>;
694
779
  /** Status after applying thresholds (falls back to `status` when none set). */
695
780
  protected readonly resolvedStatus: _angular_core.Signal<StrctProgressStatus>;
696
781
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctProgress, never>;
697
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctProgress, "strct-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "thresholds": { "alias": "thresholds"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
782
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctProgress, "strct-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "visibleLabel": { "alias": "visibleLabel"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "valueText": { "alias": "valueText"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "segments": { "alias": "segments"; "required": false; "isSignal": true; }; "thresholds": { "alias": "thresholds"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
698
783
  }
699
784
 
700
785
  /** Spinner size variants. */
@@ -705,8 +790,14 @@ declare class StrctSpinner {
705
790
  readonly size: _angular_core.InputSignal<StrctSpinnerSize>;
706
791
  /** Accessible label (localizable). */
707
792
  readonly label: _angular_core.InputSignal<string>;
793
+ /**
794
+ * Visible text beside the ring — "Reading…". It becomes the accessible name
795
+ * too, so the spinner is not announced as "Loading" while it says something
796
+ * else on screen.
797
+ */
798
+ readonly caption: _angular_core.InputSignal<string>;
708
799
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctSpinner, never>;
709
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctSpinner, "strct-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
800
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctSpinner, "strct-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
710
801
  }
711
802
 
712
803
  /**
@@ -796,12 +887,31 @@ declare class StrctCard {
796
887
  declare class StrctCardHeader {
797
888
  /** Optional leading icon (StrctIcon set). */
798
889
  readonly icon: _angular_core.InputSignal<string>;
890
+ /** Card title. Left empty, the default slot renders as before. */
891
+ readonly heading: _angular_core.InputSignal<string>;
892
+ /** `title` — as today; `overline` — uppercase, letter-spaced, quieter. */
893
+ readonly appearance: _angular_core.InputSignal<"title" | "overline">;
799
894
  /** Accessible labels for the collapse toggle (localizable). */
800
895
  readonly collapseLabel: _angular_core.InputSignal<string>;
801
896
  readonly expandLabel: _angular_core.InputSignal<string>;
802
897
  protected readonly card: StrctCard | null;
803
898
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCardHeader, never>;
804
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCardHeader, "strct-card-header", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
899
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCardHeader, "strct-card-header", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[strctCardHeaderMeta]", "*", "[strctCardHeaderNote]", "[strctCardHeaderActions]"], true, never>;
900
+ }
901
+ /** Follows the card's heading on its line — a badge, a count. */
902
+ declare class StrctCardHeaderMeta {
903
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCardHeaderMeta, never>;
904
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctCardHeaderMeta, "[strctCardHeaderMeta]", never, {}, {}, never, never, true, never>;
905
+ }
906
+ /** Quiet text at the end of the header row, before the actions; ellipsised. */
907
+ declare class StrctCardHeaderNote {
908
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCardHeaderNote, never>;
909
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctCardHeaderNote, "[strctCardHeaderNote]", never, {}, {}, never, never, true, never>;
910
+ }
911
+ /** Buttons at the end of the header row. */
912
+ declare class StrctCardHeaderActions {
913
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCardHeaderActions, never>;
914
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctCardHeaderActions, "[strctCardHeaderActions]", never, {}, {}, never, never, true, never>;
805
915
  }
806
916
  /** Body section of a {@link StrctCard}. */
807
917
  declare class StrctCardBlock {
@@ -2077,6 +2187,30 @@ declare class StrctCode {
2077
2187
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCode, "strct-code", never, { "code": { "alias": "code"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; "copyable": { "alias": "copyable"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "lineNumbers": { "alias": "lineNumbers"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; "isSignal": true; }; "expandLabel": { "alias": "expandLabel"; "required": false; "isSignal": true; }; "regionLabel": { "alias": "regionLabel"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, never, true, never>;
2078
2188
  }
2079
2189
 
2190
+ /**
2191
+ * A command, a path or an identifier **inside a sentence**, set as code:
2192
+ *
2193
+ * Run <code strctCode>hyperstructctl doctor</code> on the appliance.
2194
+ * <code strctCode copyable>host-01m3e2e0000000000000000001</code>
2195
+ *
2196
+ * `strct-code` is a block and `strct-kbd` means a key on the keyboard, so an
2197
+ * identifier in running text had nothing but hand-written CSS. The padding is
2198
+ * horizontal only and the line-height is inherited, so a code span never
2199
+ * changes the leading of the paragraph it sits in.
2200
+ *
2201
+ * `copyable` appends the library's own `strct-copy` button (icon-only, with its
2202
+ * copied / failed feedback) rather than re-implementing the clipboard.
2203
+ */
2204
+ declare class StrctCodeInline {
2205
+ /** Append a copy button that copies this element's text. */
2206
+ readonly copyable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2207
+ private readonly host;
2208
+ private readonly vcr;
2209
+ constructor();
2210
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCodeInline, never>;
2211
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctCodeInline, "[strctCode]", never, { "copyable": { "alias": "copyable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2212
+ }
2213
+
2080
2214
  /** One active filter chip in a {@link StrctFilterBar}. */
2081
2215
  interface StrctFilterChip {
2082
2216
  /** Stable identity, returned with (removed). */
@@ -3287,6 +3421,11 @@ declare class StrctRowDetailDef {
3287
3421
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctRowDetailDef, never>;
3288
3422
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctRowDetailDef, "[strctRowDetail]", never, {}, {}, never, never, true, never>;
3289
3423
  }
3424
+ /** Muted note inside the action bar, before the buttons. */
3425
+ declare class StrctDatagridActionBarCaption {
3426
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDatagridActionBarCaption, never>;
3427
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctDatagridActionBarCaption, "[strctDatagridActionBarCaption]", never, {}, {}, never, never, true, never>;
3428
+ }
3290
3429
  /** Marks the persistent action-bar (toolbar) content shown above the grid. */
3291
3430
  declare class StrctDatagridActionBar {
3292
3431
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDatagridActionBar, never>;
@@ -3685,7 +3824,7 @@ declare class StrctDatagrid {
3685
3824
  private commitSelection;
3686
3825
  private compare;
3687
3826
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDatagrid, never>;
3688
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctDatagrid, "strct-datagrid", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "detailPane": { "alias": "detailPane"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "singleLine": { "alias": "singleLine"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "columnChooser": { "alias": "columnChooser"; "required": false; "isSignal": true; }; "sync": { "alias": "sync"; "required": false; "isSignal": true; }; "footerActionsDisabled": { "alias": "footerActionsDisabled"; "required": false; "isSignal": true; }; "rowId": { "alias": "rowId"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "viewportHeight": { "alias": "viewportHeight"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "stateKey": { "alias": "stateKey"; "required": false; "isSignal": true; }; "columnState": { "alias": "columnState"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "quickFilter": { "alias": "quickFilter"; "required": false; "isSignal": true; }; "quickFilterFields": { "alias": "quickFilterFields"; "required": false; "isSignal": true; }; "quickFilterable": { "alias": "quickFilterable"; "required": false; "isSignal": true; }; "quickFilterAlign": { "alias": "quickFilterAlign"; "required": false; "isSignal": true; }; "childrenKey": { "alias": "childrenKey"; "required": false; "isSignal": true; }; }, { "columnState": "columnStateChange"; "filters": "filtersChange"; "quickFilter": "quickFilterChange"; "selectionChange": "selectionChange"; "syncChange": "syncChange"; "rowAction": "rowAction"; "lazyLoad": "lazyLoad"; "cellEdit": "cellEdit"; }, ["detailDef", "actionBarDef", "cellDefs"], ["[strctDatagridActionBar]"], true, never>;
3827
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctDatagrid, "strct-datagrid", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "detailPane": { "alias": "detailPane"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "singleLine": { "alias": "singleLine"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "columnChooser": { "alias": "columnChooser"; "required": false; "isSignal": true; }; "sync": { "alias": "sync"; "required": false; "isSignal": true; }; "footerActionsDisabled": { "alias": "footerActionsDisabled"; "required": false; "isSignal": true; }; "rowId": { "alias": "rowId"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "viewportHeight": { "alias": "viewportHeight"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "stateKey": { "alias": "stateKey"; "required": false; "isSignal": true; }; "columnState": { "alias": "columnState"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "quickFilter": { "alias": "quickFilter"; "required": false; "isSignal": true; }; "quickFilterFields": { "alias": "quickFilterFields"; "required": false; "isSignal": true; }; "quickFilterable": { "alias": "quickFilterable"; "required": false; "isSignal": true; }; "quickFilterAlign": { "alias": "quickFilterAlign"; "required": false; "isSignal": true; }; "childrenKey": { "alias": "childrenKey"; "required": false; "isSignal": true; }; }, { "columnState": "columnStateChange"; "filters": "filtersChange"; "quickFilter": "quickFilterChange"; "selectionChange": "selectionChange"; "syncChange": "syncChange"; "rowAction": "rowAction"; "lazyLoad": "lazyLoad"; "cellEdit": "cellEdit"; }, ["detailDef", "actionBarDef", "cellDefs"], ["[strctDatagridActionBarCaption]", "[strctDatagridActionBar]"], true, never>;
3689
3828
  }
3690
3829
 
3691
3830
  /** Timeline node state colors. */
@@ -4554,7 +4693,7 @@ declare class StrctToastOutlet {
4554
4693
  }
4555
4694
 
4556
4695
  /** Preset zero/permission/error states with a sensible icon + tone. */
4557
- type StrctEmptyVariant = 'empty' | 'denied' | 'error' | 'notfound';
4696
+ type StrctEmptyVariant = 'empty' | 'denied' | 'error' | 'notfound' | 'loading';
4558
4697
  /**
4559
4698
  * A centered empty / permission / error state — an icon, a title, an optional
4560
4699
  * description and a slot for call-to-action buttons. Project actions as children.
@@ -4572,11 +4711,16 @@ declare class StrctEmptyState {
4572
4711
  /** Override the preset tone (neutral / warning / critical / accent). */
4573
4712
  readonly tone: _angular_core.InputSignal<string>;
4574
4713
  readonly title: _angular_core.InputSignal<string>;
4714
+ /**
4715
+ * `sm` is the inline row a 240px frame wants: a 16px icon with the title and
4716
+ * description on one line. A page-sized empty state stays `md`.
4717
+ */
4718
+ readonly size: _angular_core.InputSignal<"md" | "sm">;
4575
4719
  readonly description: _angular_core.InputSignal<string>;
4576
4720
  protected readonly resolvedIcon: _angular_core.Signal<string>;
4577
4721
  protected readonly toneClass: _angular_core.Signal<string>;
4578
4722
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctEmptyState, never>;
4579
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctEmptyState, "strct-empty-state", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4723
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctEmptyState, "strct-empty-state", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4580
4724
  }
4581
4725
 
4582
4726
  /**
@@ -5687,6 +5831,11 @@ declare class StrctDatetimePicker implements ControlValueAccessor {
5687
5831
  * `selectionLabel` factory) with a × button that emits `(cleared)`.
5688
5832
  * `strct-toolbar-spacer` pushes following actions to the far end.
5689
5833
  */
5834
+ /** Muted note on the toolbar's row — placed before the spacer. */
5835
+ declare class StrctToolbarCaption {
5836
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctToolbarCaption, never>;
5837
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctToolbarCaption, "[strctToolbarCaption]", never, {}, {}, never, never, true, never>;
5838
+ }
5690
5839
  declare class StrctToolbar {
5691
5840
  private readonly host;
5692
5841
  /** Accessible name of the toolbar (localizable). */
@@ -5708,7 +5857,7 @@ declare class StrctToolbar {
5708
5857
  /** Tabbable controls inside the bar, in DOM order. */
5709
5858
  private items;
5710
5859
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctToolbar, never>;
5711
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctToolbar, "strct-toolbar", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "selectionCount": { "alias": "selectionCount"; "required": false; "isSignal": true; }; "divided": { "alias": "divided"; "required": false; "isSignal": true; }; "selectionLabel": { "alias": "selectionLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; }, { "cleared": "cleared"; }, never, ["*"], true, never>;
5860
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctToolbar, "strct-toolbar", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "selectionCount": { "alias": "selectionCount"; "required": false; "isSignal": true; }; "divided": { "alias": "divided"; "required": false; "isSignal": true; }; "selectionLabel": { "alias": "selectionLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; }, { "cleared": "cleared"; }, never, ["[strctToolbarCaption]", "*"], true, never>;
5712
5861
  }
5713
5862
  /**
5714
5863
  * Flex spacer for `strct-toolbar` — pushes the actions after it to the far
@@ -5972,5 +6121,5 @@ declare class StrctHeatmap {
5972
6121
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctHeatmap, "strct-heatmap", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "cols": { "alias": "cols"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "colLabelEvery": { "alias": "colLabelEvery"; "required": false; "isSignal": true; }; "colLabel": { "alias": "colLabel"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "thresholds": { "alias": "thresholds"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "summaryFormat": { "alias": "summaryFormat"; "required": false; "isSignal": true; }; "cellHeight": { "alias": "cellHeight"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "rowLabelWidth": { "alias": "rowLabelWidth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5973
6122
  }
5974
6123
 
5975
- export { FOCUSABLE_SELECTOR, STRCT_DP_DOW, STRCT_DP_DOW_FULL, STRCT_DP_MONTHS, STRCT_ICONS, STRCT_ICON_GROUPS, STRCT_ICON_NAMES, STRCT_MASKS, STRCT_NOTIFICATION_HISTORY_LIMIT, STRCT_PALETTES, STRCT_RAW_ICONS, STRCT_TIME_RANGE_PRESETS, STRCT_WIZARD_DEFAULTS, StrctAccordion, StrctAccordionPanel, StrctAlert, StrctAnnouncer, StrctAvatar, StrctBadge, StrctBreadcrumb, StrctBreadcrumbItem, StrctButton, StrctButtonGroup, StrctBytesPipe, StrctCard, StrctCardBlock, StrctCardFooter, StrctCardHeader, StrctCascadeColumn, StrctCascadeHost, StrctCascadeSelect, StrctCellDef, StrctCellStatus, StrctChart, StrctCheckbox, StrctChips, StrctCode, StrctColorPicker, StrctCombobox, StrctCommandPalette, StrctConfirmOutlet, StrctConfirmService, StrctContextMenu, StrctContextMenuTrigger, StrctCopy, StrctDatagrid, StrctDatagridActionBar, StrctDatepicker, StrctDatetimePicker, StrctDesc, StrctDescriptionList, StrctDiff, StrctDivider, StrctDonut, StrctDrawer, StrctDrawerFooter, StrctDropdown, StrctDropdownDivider, StrctDropdownItem, StrctDropdownTrigger, StrctDurationPipe, StrctEmptyState, StrctField, StrctFile, StrctFilterBar, StrctFlow, StrctFooter, StrctGauge, StrctHeader, StrctHeatmap, StrctHero, StrctHotkeysHelp, StrctHotkeysService, StrctIcon, StrctInlineEdit, StrctInput, StrctInputMask, StrctInputOtp, StrctKbd, StrctKnob, StrctLogViewer, StrctLogin, StrctMenuPanel, StrctMenuService, StrctMenubar, StrctMetricTile, StrctModal, StrctModalContent, StrctNav, StrctNavItem, StrctNotificationCenter, StrctNumber, StrctOverlay, StrctPageHeader, StrctPageHeaderActions, StrctPageHeaderCrumbs, StrctPagination, StrctPassword, StrctPopover, StrctPopoverTrigger, StrctProgress, StrctRadio, StrctRadioGroup, StrctRail, StrctRange, StrctRatePipe, StrctRating, StrctReorder, StrctReorderItem, StrctRowDetailDef, StrctSearchbox, StrctSectionMenu, StrctSegmented, StrctSelect, StrctShell, StrctShellService, StrctSiPipe, StrctSignpost, StrctSignpostTrigger, StrctSkeleton, StrctSparkline, StrctSpeedDial, StrctSpinner, StrctSplitButton, StrctSplitter, StrctStack, StrctStackItem, StrctStatusDot, StrctStep, StrctSubmenu, StrctTab, StrctTable, StrctTabs, StrctTag, StrctThemeService, StrctThemeSwitcher, StrctTimeRangePicker, StrctTimeline, StrctTimelineItem, StrctToastOutlet, StrctToastService, StrctToggle, StrctToolbar, StrctToolbarSpacer, StrctTooltip, StrctTour, StrctTransfer, StrctTree, StrctTreeNode, StrctTreeSelect, StrctVerticalNav, StrctWatermark, StrctWizard, StrctWizardAside, focusFirstIn, keepTabInside, lockBodyScroll, parseAnsi, provideStrctWizardDefaults, registerStrctIcon, restoreFocus, saveFocusedElement, strctComputeDiff, strctDpPad, strctFormatBytes, strctFormatDuration, strctFormatRate, strctFormatSi, strctValidationIcon, strctValidationTone, unlockBodyScroll };
5976
- export type { StrctAlertType, StrctAvatarSize, StrctAvatarStatus, StrctBadgeStatus, StrctButtonSize, StrctButtonVariant, StrctCascadeOption, StrctCellContext, StrctChartAnnotation, StrctChartColor, StrctChartCurve, StrctChartSeries, StrctChartSlot, StrctChartStatus, StrctChartSummaryInfo, StrctChartThreshold, StrctChartType, StrctColumn, StrctCommandItem, StrctConfirmOptions, StrctConfirmTone, StrctDatagridColumn, StrctDatagridColumnState, StrctDatagridFilters, StrctDatagridLabels, StrctDatagridLazyState, StrctDescAlign, StrctDescItem, StrctDiffRow, StrctDonutSegment, StrctDrawerSide, StrctDrawerSize, StrctEmptyVariant, StrctFilterChip, StrctFlowDirection, StrctFlowNode, StrctFlowOrientation, StrctHeatmapCell, StrctHeatmapSummaryInfo, StrctHotkey, StrctIconBadge, StrctIconName, StrctKnobStatus, StrctLogLine, StrctMenuItem, StrctMenuLink, StrctMenuOpenOptions, StrctMenuSection, StrctMenubarItem, StrctMetricStatus, StrctModalSize, StrctMode, StrctNotification, StrctOption, StrctOverlayPlacement, StrctPalette, StrctPaletteInfo, StrctProgressStatus, StrctRailItem, StrctRailStatus, StrctReorderEvent, StrctRow, StrctRowId, StrctSegmentedOption, StrctSegmentedSize, StrctSignpostPosition, StrctSpeedDialDirection, StrctSpinnerSize, StrctStatus, StrctStatusDotSize, StrctTagStatus, StrctThresholds, StrctTimeRange, StrctTimeRangePreset, StrctTimelineState, StrctToast, StrctToastOptions, StrctToastType, StrctTooltipPosition, StrctTourStep, StrctTransferItem, StrctTreeDropEvent, StrctTreeMenuEvent, StrctTreeNodeData, StrctTreeNodeMenuFn, StrctValidationState, StrctValidationStatus, StrctWizardDefaults };
6124
+ export { FOCUSABLE_SELECTOR, STRCT_DP_DOW, STRCT_DP_DOW_FULL, STRCT_DP_MONTHS, STRCT_ICONS, STRCT_ICON_GROUPS, STRCT_ICON_NAMES, STRCT_MASKS, STRCT_NOTIFICATION_HISTORY_LIMIT, STRCT_PALETTES, STRCT_RAW_ICONS, STRCT_TIME_RANGE_PRESETS, STRCT_WIZARD_DEFAULTS, StrctAccordion, StrctAccordionPanel, StrctAlert, StrctAnnouncer, StrctAvatar, StrctBadge, StrctBreadcrumb, StrctBreadcrumbItem, StrctButton, StrctButtonGroup, StrctBytesPipe, StrctCard, StrctCardBlock, StrctCardFooter, StrctCardHeader, StrctCardHeaderActions, StrctCardHeaderMeta, StrctCardHeaderNote, StrctCascadeColumn, StrctCascadeHost, StrctCascadeSelect, StrctCellDef, StrctCellStatus, StrctChart, StrctCheckbox, StrctChips, StrctCode, StrctCodeInline, StrctColorPicker, StrctCombobox, StrctCommandPalette, StrctConfirmOutlet, StrctConfirmService, StrctContextMenu, StrctContextMenuTrigger, StrctCopy, StrctDatagrid, StrctDatagridActionBar, StrctDatagridActionBarCaption, StrctDatepicker, StrctDatetimePicker, StrctDesc, StrctDescriptionList, StrctDiff, StrctDivider, StrctDonut, StrctDrawer, StrctDrawerFooter, StrctDropdown, StrctDropdownDivider, StrctDropdownItem, StrctDropdownTrigger, StrctDurationPipe, StrctEmptyState, StrctField, StrctFile, StrctFilterBar, StrctFlow, StrctFooter, StrctGauge, StrctHeader, StrctHeatmap, StrctHero, StrctHotkeysHelp, StrctHotkeysService, StrctIcon, StrctInlineEdit, StrctInput, StrctInputMask, StrctInputOtp, StrctKbd, StrctKnob, StrctLogViewer, StrctLogin, StrctMenuPanel, StrctMenuService, StrctMenubar, StrctMetricTile, StrctModal, StrctModalContent, StrctNav, StrctNavItem, StrctNotificationCenter, StrctNumber, StrctOverlay, StrctPageHeader, StrctPageHeaderActions, StrctPageHeaderCrumbs, StrctPageHeaderTitleMeta, StrctPagination, StrctPassword, StrctPopover, StrctPopoverTrigger, StrctProgress, StrctRadio, StrctRadioGroup, StrctRail, StrctRange, StrctRatePipe, StrctRating, StrctReorder, StrctReorderItem, StrctRowDetailDef, StrctSearchbox, StrctSectionHeader, StrctSectionHeaderActions, StrctSectionHeaderMeta, StrctSectionMenu, StrctSegmented, StrctSelect, StrctShell, StrctShellService, StrctSiPipe, StrctSignpost, StrctSignpostTrigger, StrctSkeleton, StrctSparkline, StrctSpeedDial, StrctSpinner, StrctSplitButton, StrctSplitter, StrctStack, StrctStackItem, StrctStatusDot, StrctStep, StrctSubmenu, StrctTab, StrctTable, StrctTabs, StrctTag, StrctThemeService, StrctThemeSwitcher, StrctTimeRangePicker, StrctTimeline, StrctTimelineItem, StrctToastOutlet, StrctToastService, StrctToggle, StrctToolbar, StrctToolbarCaption, StrctToolbarSpacer, StrctTooltip, StrctTour, StrctTransfer, StrctTree, StrctTreeNode, StrctTreeSelect, StrctVerticalNav, StrctWatermark, StrctWizard, StrctWizardAside, focusFirstIn, keepTabInside, lockBodyScroll, parseAnsi, provideStrctWizardDefaults, registerStrctIcon, restoreFocus, saveFocusedElement, strctComputeDiff, strctDpPad, strctFormatBytes, strctFormatDuration, strctFormatRate, strctFormatSi, strctValidationIcon, strctValidationTone, unlockBodyScroll };
6125
+ export type { StrctAlertType, StrctAvatarSize, StrctAvatarStatus, StrctBadgeStatus, StrctButtonSize, StrctButtonVariant, StrctCascadeOption, StrctCellContext, StrctChartAnnotation, StrctChartColor, StrctChartCurve, StrctChartSeries, StrctChartSlot, StrctChartStatus, StrctChartSummaryInfo, StrctChartThreshold, StrctChartType, StrctColumn, StrctCommandItem, StrctConfirmOptions, StrctConfirmTone, StrctDatagridColumn, StrctDatagridColumnState, StrctDatagridFilters, StrctDatagridLabels, StrctDatagridLazyState, StrctDescAlign, StrctDescItem, StrctDiffRow, StrctDonutSegment, StrctDrawerSide, StrctDrawerSize, StrctEmptyVariant, StrctFilterChip, StrctFlowDirection, StrctFlowNode, StrctFlowOrientation, StrctHeatmapCell, StrctHeatmapSummaryInfo, StrctHotkey, StrctIconBadge, StrctIconName, StrctKnobStatus, StrctLogLine, StrctMenuItem, StrctMenuLink, StrctMenuOpenOptions, StrctMenuSection, StrctMenubarItem, StrctMetricStatus, StrctModalSize, StrctMode, StrctNotification, StrctOption, StrctOverlayPlacement, StrctPalette, StrctPaletteInfo, StrctProgressSegment, StrctProgressStatus, StrctRailItem, StrctRailStatus, StrctReorderEvent, StrctRow, StrctRowId, StrctSegmentedOption, StrctSegmentedSize, StrctSignpostPosition, StrctSpeedDialDirection, StrctSpinnerSize, StrctStatus, StrctStatusDotSize, StrctTagStatus, StrctThresholds, StrctTimeRange, StrctTimeRangePreset, StrctTimelineState, StrctToast, StrctToastOptions, StrctToastType, StrctTooltipPosition, StrctTourStep, StrctTransferItem, StrctTreeDropEvent, StrctTreeMenuEvent, StrctTreeNodeData, StrctTreeNodeMenuFn, StrctValidationState, StrctValidationStatus, StrctWizardDefaults };