@akcelik/strct 0.3.0 → 0.5.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.
@@ -3,8 +3,11 @@ import { OnDestroy, TemplateRef } from '@angular/core';
3
3
  import { SafeHtml } from '@angular/platform-browser';
4
4
  import { ControlValueAccessor } from '@angular/forms';
5
5
 
6
+ /** Available color palettes. */
6
7
  type StrctPalette = 'arctic' | 'ember' | 'sage';
8
+ /** Light or dark mode. */
7
9
  type StrctMode = 'dark' | 'light';
10
+ /** Metadata for a color palette. */
8
11
  interface StrctPaletteInfo {
9
12
  id: StrctPalette;
10
13
  /** Human label, shown in switchers. */
@@ -73,27 +76,34 @@ declare const STRCT_RAW_ICONS: Record<string, string>;
73
76
  declare function registerStrctIcon(name: string, content: string, options?: {
74
77
  raw?: boolean;
75
78
  }): void;
76
- type StrctIconBadge = 'none' | 'ok' | 'warn' | 'crit' | 'off' | 'info';
79
+ /** Icon status dot variants. */
80
+ type StrctIconBadge = 'none' | 'success' | 'warning' | 'critical' | 'off' | 'info';
77
81
  /**
78
- * Inline stroke icon. `<strct-icon name="host" badge="ok" />` renders the host
82
+ * Inline stroke icon. `<strct-icon name="host" badge="success" />` renders the host
79
83
  * glyph with a green status dot (a "running host"). Unknown names render
80
84
  * nothing rather than throwing.
81
85
  */
82
86
  declare class StrctIcon {
83
87
  private readonly sanitizer;
88
+ /** Icon name from the STRCT_ICONS registry. */
84
89
  readonly name: _angular_core.InputSignal<string>;
90
+ /** Icon size in pixels. */
85
91
  readonly size: _angular_core.InputSignal<number>;
92
+ /** Stroke width for outline icons. */
86
93
  readonly strokeWidth: _angular_core.InputSignal<number>;
87
94
  /** Optional status dot overlaid on the glyph (object state). */
88
95
  readonly badge: _angular_core.InputSignal<StrctIconBadge>;
96
+ /** Accessible label for the icon. When empty the icon is hidden from assistive tech. */
97
+ readonly ariaLabel: _angular_core.InputSignal<string>;
89
98
  /** True when the named icon is a full-SVG (raw) icon registered by the app. */
90
99
  protected readonly isRaw: _angular_core.Signal<boolean>;
91
100
  protected readonly svg: _angular_core.Signal<SafeHtml>;
92
101
  protected readonly rawSvg: _angular_core.Signal<SafeHtml>;
93
102
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctIcon, never>;
94
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctIcon, "strct-icon", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
103
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctIcon, "strct-icon", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
95
104
  }
96
105
 
106
+ /** Overlay positioning strategies. */
97
107
  type StrctOverlayPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' | 'right' | 'left';
98
108
  /**
99
109
  * Positions an overlay panel with `position: fixed` relative to an anchor
@@ -111,10 +121,13 @@ type StrctOverlayPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-
111
121
  declare class StrctOverlay implements OnDestroy {
112
122
  private readonly el;
113
123
  private readonly zone;
124
+ /** Anchor element for positioning. */
114
125
  readonly anchor: _angular_core.InputSignal<HTMLElement>;
126
+ /** Preferred placement relative to the anchor. */
115
127
  readonly placement: _angular_core.InputSignal<StrctOverlayPlacement>;
116
128
  /** Match the panel width to the anchor (combobox / date / cascade fields). */
117
129
  readonly matchWidth: _angular_core.InputSignal<boolean>;
130
+ /** Gap between anchor and panel in pixels. */
118
131
  readonly gap: _angular_core.InputSignal<number>;
119
132
  private readonly onScrollResize;
120
133
  private bound;
@@ -138,8 +151,13 @@ declare class StrctShell {
138
151
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctShell, never>;
139
152
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctShell, "strct-shell", never, {}, {}, never, ["strct-header", "*", "strct-footer"], true, never>;
140
153
  }
154
+ /** Shared layout state between shell parts. */
155
+ declare class StrctShellService {
156
+ readonly mobileNavOpen: _angular_core.WritableSignal<boolean>;
157
+ }
141
158
  /** Top application bar. Holds brand on the left and actions on the right. */
142
159
  declare class StrctHeader {
160
+ protected readonly shell: StrctShellService;
143
161
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctHeader, never>;
144
162
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctHeader, "strct-header", never, {}, {}, never, ["*"], true, never>;
145
163
  }
@@ -151,6 +169,7 @@ declare class StrctFooter {
151
169
 
152
170
  /** Scrollable left sidebar surface. Holds the icon nav and/or a tree. */
153
171
  declare class StrctVerticalNav {
172
+ protected readonly shell: StrctShellService;
154
173
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctVerticalNav, never>;
155
174
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctVerticalNav, "strct-vertical-nav", never, {}, {}, never, ["*"], true, never>;
156
175
  }
@@ -161,7 +180,9 @@ declare class StrctNav {
161
180
  }
162
181
  /** A single icon tab inside `<strct-nav>`. */
163
182
  declare class StrctNavItem {
183
+ /** Whether the item is active / selected. */
164
184
  readonly active: _angular_core.InputSignal<boolean>;
185
+ /** Label text. */
165
186
  readonly label: _angular_core.InputSignal<string>;
166
187
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctNavItem, never>;
167
188
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctNavItem, "strct-nav-item", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -179,13 +200,17 @@ declare class StrctNavItem {
179
200
  * </strct-login>
180
201
  */
181
202
  declare class StrctLogin {
203
+ /** Maximum width in pixels. */
182
204
  readonly maxWidth: _angular_core.InputSignal<number>;
205
+ /** Enable two-panel split layout. */
183
206
  readonly split: _angular_core.InputSignalWithTransform<boolean, unknown>;
184
207
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctLogin, never>;
185
208
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctLogin, "strct-login", never, { "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "split": { "alias": "split"; "required": false; "isSignal": true; }; }, {}, never, ["[strctLoginAside]", "[strctLoginMain]", "*"], true, never>;
186
209
  }
187
210
 
188
- type StrctButtonVariant = 'primary' | 'danger' | 'outline' | 'flat' | 'neutral';
211
+ /** Button visual variants. */
212
+ type StrctButtonVariant = 'primary' | 'critical' | 'outline' | 'flat' | 'neutral';
213
+ /** Button size variants. */
189
214
  type StrctButtonSize = 'md' | 'sm' | 'mini';
190
215
  /**
191
216
  * Styles a native `<button>` / `<a>` so it stays fully accessible and form-aware.
@@ -198,10 +223,13 @@ type StrctButtonSize = 'md' | 'sm' | 'mini';
198
223
  * <a strct-button variant="flat" size="sm" href="...">Cancel</a>
199
224
  */
200
225
  declare class StrctButton {
226
+ /** Visual variant. */
201
227
  readonly variant: _angular_core.InputSignal<StrctButtonVariant>;
228
+ /** Size variant. */
202
229
  readonly size: _angular_core.InputSignal<StrctButtonSize>;
203
230
  /** Opt in to a filled surface (use sparingly, for the primary action). */
204
231
  readonly solid: _angular_core.InputSignalWithTransform<boolean, unknown>;
232
+ /** Expand to full width. */
205
233
  readonly block: _angular_core.InputSignalWithTransform<boolean, unknown>;
206
234
  /** Square padding for a single-icon button. */
207
235
  readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -214,9 +242,11 @@ declare class StrctButtonGroup {
214
242
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctButtonGroup, "strct-button-group", never, {}, {}, never, ["*"], true, never>;
215
243
  }
216
244
 
217
- type StrctBadgeStatus = 'neutral' | 'accent' | 'success' | 'warning' | 'danger';
245
+ /** Badge color variants. */
246
+ type StrctBadgeStatus = 'neutral' | 'accent' | 'success' | 'warning' | 'critical';
218
247
  /** Small inline status pill: `<strct-badge status="success">Active</strct-badge>`. */
219
248
  declare class StrctBadge {
249
+ /** Visual status color. */
220
250
  readonly status: _angular_core.InputSignal<StrctBadgeStatus>;
221
251
  /** Opt-in filled style instead of the default outlined style. */
222
252
  readonly solid: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -224,48 +254,63 @@ declare class StrctBadge {
224
254
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctBadge, "strct-badge", never, { "status": { "alias": "status"; "required": false; "isSignal": true; }; "solid": { "alias": "solid"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
225
255
  }
226
256
 
227
- type StrctTagStatus = 'neutral' | 'accent' | 'success' | 'warning' | 'danger';
257
+ /** Tag color variants. */
258
+ type StrctTagStatus = 'neutral' | 'accent' | 'success' | 'warning' | 'critical';
228
259
  /**
229
260
  * Compact, optionally removable chip.
230
261
  * <strct-tag status="accent" removable (removed)="drop()">Frontend</strct-tag>
231
262
  */
232
263
  declare class StrctTag {
264
+ /** Visual status color. */
233
265
  readonly status: _angular_core.InputSignal<StrctTagStatus>;
266
+ /** Show a remove button. */
234
267
  readonly removable: _angular_core.InputSignalWithTransform<boolean, unknown>;
268
+ /** Emitted when the user clicks the remove button. */
235
269
  readonly removed: _angular_core.OutputEmitterRef<void>;
236
270
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctTag, never>;
237
271
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTag, "strct-tag", never, { "status": { "alias": "status"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; }, { "removed": "removed"; }, never, ["*"], true, never>;
238
272
  }
239
273
 
274
+ /** Avatar size variants. */
240
275
  type StrctAvatarSize = 'sm' | 'md' | 'lg';
276
+ /** Avatar presence status variants. */
241
277
  type StrctAvatarStatus = 'none' | 'online' | 'busy' | 'offline';
242
278
  /**
243
279
  * Circular avatar: an image when `src` is set, otherwise initials from `name`.
244
280
  * <strct-avatar name="Ada Lovelace" status="online" />
245
281
  */
246
282
  declare class StrctAvatar {
283
+ /** Image URL. */
247
284
  readonly src: _angular_core.InputSignal<string>;
285
+ /** Display name (used for initials when src is absent). */
248
286
  readonly name: _angular_core.InputSignal<string>;
287
+ /** Size variant. */
249
288
  readonly size: _angular_core.InputSignal<StrctAvatarSize>;
289
+ /** Visual status color. */
250
290
  readonly status: _angular_core.InputSignal<StrctAvatarStatus>;
251
291
  protected readonly initials: _angular_core.Signal<string>;
252
292
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctAvatar, never>;
253
293
  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>;
254
294
  }
255
295
 
256
- type StrctProgressStatus = 'accent' | 'success' | 'warning' | 'danger';
296
+ /** Progress bar color variants. */
297
+ type StrctProgressStatus = 'accent' | 'success' | 'warning' | 'critical';
257
298
  /** Horizontal value/usage bar. `<strct-progress [value]="72" status="warning" />`. */
258
299
  declare class StrctProgress {
300
+ /** Current value. */
259
301
  readonly value: _angular_core.InputSignal<number>;
302
+ /** Visual status color. */
260
303
  readonly status: _angular_core.InputSignal<StrctProgressStatus>;
261
304
  protected readonly clamped: _angular_core.Signal<number>;
262
305
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctProgress, never>;
263
306
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctProgress, "strct-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
264
307
  }
265
308
 
309
+ /** Spinner size variants. */
266
310
  type StrctSpinnerSize = 'sm' | 'md' | 'lg';
267
311
  /** Indeterminate loading ring. `<strct-spinner size="sm" />`. */
268
312
  declare class StrctSpinner {
313
+ /** Size variant. */
269
314
  readonly size: _angular_core.InputSignal<StrctSpinnerSize>;
270
315
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctSpinner, never>;
271
316
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctSpinner, "strct-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -277,13 +322,17 @@ declare class StrctSpinner {
277
322
  * <strct-skeleton circle width="40px" height="40px" />
278
323
  */
279
324
  declare class StrctSkeleton {
325
+ /** Width (CSS length). */
280
326
  readonly width: _angular_core.InputSignal<string>;
327
+ /** Height in pixels. */
281
328
  readonly height: _angular_core.InputSignal<string>;
329
+ /** Circle. */
282
330
  readonly circle: _angular_core.InputSignalWithTransform<boolean, unknown>;
283
331
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctSkeleton, never>;
284
332
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctSkeleton, "strct-skeleton", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "circle": { "alias": "circle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
285
333
  }
286
334
 
335
+ /** Direction the speed-dial actions expand. */
287
336
  type StrctSpeedDialDirection = 'up' | 'down' | 'left' | 'right';
288
337
  /**
289
338
  * Floating action button that fans out to reveal actions. Project icon buttons
@@ -295,7 +344,9 @@ type StrctSpeedDialDirection = 'up' | 'down' | 'left' | 'right';
295
344
  */
296
345
  declare class StrctSpeedDial {
297
346
  private readonly host;
347
+ /** Icon name. */
298
348
  readonly icon: _angular_core.InputSignal<string>;
349
+ /** Direction the actions fan out. */
299
350
  readonly direction: _angular_core.InputSignal<StrctSpeedDialDirection>;
300
351
  readonly open: _angular_core.WritableSignal<boolean>;
301
352
  toggle(): void;
@@ -317,14 +368,17 @@ declare class StrctCard {
317
368
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCard, never>;
318
369
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCard, "strct-card", never, {}, {}, never, ["*"], true, never>;
319
370
  }
371
+ /** Header section of a {@link StrctCard}. */
320
372
  declare class StrctCardHeader {
321
373
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCardHeader, never>;
322
374
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCardHeader, "strct-card-header", never, {}, {}, never, ["*"], true, never>;
323
375
  }
376
+ /** Body section of a {@link StrctCard}. */
324
377
  declare class StrctCardBlock {
325
378
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCardBlock, never>;
326
379
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCardBlock, "strct-card-block", never, {}, {}, never, ["*"], true, never>;
327
380
  }
381
+ /** Footer section of a {@link StrctCard}. */
328
382
  declare class StrctCardFooter {
329
383
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCardFooter, never>;
330
384
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCardFooter, "strct-card-footer", never, {}, {}, never, ["*"], true, never>;
@@ -337,7 +391,9 @@ declare class StrctAccordion {
337
391
  }
338
392
  /** Collapsible panel with a header. `expanded` is two-way bindable. */
339
393
  declare class StrctAccordionPanel {
394
+ /** Panel heading. */
340
395
  readonly heading: _angular_core.InputSignal<string>;
396
+ /** Whether the panel is open (two-way). */
341
397
  readonly expanded: _angular_core.ModelSignal<boolean>;
342
398
  toggle(): void;
343
399
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctAccordionPanel, never>;
@@ -346,7 +402,9 @@ declare class StrctAccordionPanel {
346
402
 
347
403
  /** A single tab. Place inside `<strct-tabs>`; `label` names its button. */
348
404
  declare class StrctTab {
405
+ /** Label text. */
349
406
  readonly label: _angular_core.InputSignal<string>;
407
+ /** Static disable flag. */
350
408
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
351
409
  private readonly _active;
352
410
  readonly active: _angular_core.Signal<boolean>;
@@ -366,6 +424,93 @@ declare class StrctTabs {
366
424
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTabs, "strct-tabs", never, {}, {}, ["tabs"], ["*"], true, never>;
367
425
  }
368
426
 
427
+ /** A single entry in a data-driven menu. */
428
+ interface StrctMenuItem {
429
+ /** Entry text. Optional — omit it for a `divider`, where a label is meaningless. */
430
+ label?: string;
431
+ icon?: string;
432
+ /** Destructive styling. */
433
+ critical?: boolean;
434
+ disabled?: boolean;
435
+ /** Render a separator instead of an entry (label is ignored). */
436
+ divider?: boolean;
437
+ /** Nested submenu. */
438
+ children?: StrctMenuItem[];
439
+ /** Invoked on selection, with the trigger's `strctContextMenuData`. */
440
+ action?: (data?: unknown) => void;
441
+ /** Arbitrary payload. */
442
+ data?: unknown;
443
+ }
444
+ /**
445
+ * Floating menu panel — portaled into `<body>` (so it escapes overflow /
446
+ * transform clipping), positioned by its real measured size, with full keyboard
447
+ * navigation and recursive submenus. Usually created by `[strctContextMenu]`,
448
+ * but can be embedded directly with `submenu`.
449
+ */
450
+ declare class StrctMenuPanel {
451
+ private readonly host;
452
+ /** Menu items to display. */
453
+ readonly items: _angular_core.InputSignal<StrctMenuItem[]>;
454
+ /** Arbitrary payload passed to item actions. */
455
+ readonly data: _angular_core.InputSignal<unknown>;
456
+ /** Horizontal position in pixels. */
457
+ readonly x: _angular_core.InputSignal<number>;
458
+ /** Vertical position in pixels. */
459
+ readonly y: _angular_core.InputSignal<number>;
460
+ /** Render as a nested submenu panel. */
461
+ readonly submenu: _angular_core.InputSignalWithTransform<boolean, unknown>;
462
+ /** Emitted when an item is selected. */
463
+ readonly select: _angular_core.OutputEmitterRef<StrctMenuItem>;
464
+ /** Emitted when the menu requests closing. */
465
+ readonly close: _angular_core.OutputEmitterRef<void>;
466
+ /** ArrowLeft inside a submenu — asks the parent to close it. */
467
+ readonly back: _angular_core.OutputEmitterRef<void>;
468
+ protected readonly posX: _angular_core.WritableSignal<number>;
469
+ protected readonly posY: _angular_core.WritableSignal<number>;
470
+ protected readonly flipLeft: _angular_core.WritableSignal<boolean>;
471
+ protected readonly activeIndex: _angular_core.WritableSignal<number>;
472
+ protected readonly openSubIndex: _angular_core.WritableSignal<number | null>;
473
+ private readonly navIndices;
474
+ constructor();
475
+ private clampToViewport;
476
+ protected focusItem(i: number): void;
477
+ private move;
478
+ protected onHover(i: number): void;
479
+ protected onLeave(i: number): void;
480
+ protected onItemClick(item: StrctMenuItem, i: number, event: Event): void;
481
+ protected closeSub(): void;
482
+ protected onKeydown(event: KeyboardEvent): void;
483
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctMenuPanel, never>;
484
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctMenuPanel, "strct-menu-panel", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": false; "isSignal": true; }; "y": { "alias": "y"; "required": false; "isSignal": true; }; "submenu": { "alias": "submenu"; "required": false; "isSignal": true; }; }, { "select": "select"; "close": "close"; "back": "back"; }, never, never, true, never>;
485
+ }
486
+ /**
487
+ * Right-click (context) menu driven by a data array. Attach to any trigger; the
488
+ * menu portals into `<body>` and runs each item's `action` on selection.
489
+ * <div [strctContextMenu]="menuFor(host)" [strctContextMenuData]="host"
490
+ * (menuSelect)="onPick($event)">…</div>
491
+ */
492
+ declare class StrctContextMenuTrigger implements OnDestroy {
493
+ private readonly appRef;
494
+ private readonly envInjector;
495
+ private readonly zone;
496
+ private readonly doc;
497
+ /** Menu items to display. */
498
+ readonly items: _angular_core.InputSignal<StrctMenuItem[]>;
499
+ /** Arbitrary payload passed to item actions. */
500
+ readonly data: _angular_core.InputSignal<unknown>;
501
+ /** Emitted when a menu item is selected. */
502
+ readonly menuSelect: _angular_core.OutputEmitterRef<StrctMenuItem>;
503
+ private ref;
504
+ private readonly onClose;
505
+ protected onContextMenu(event: MouseEvent): void;
506
+ private openAt;
507
+ private readonly onOutside;
508
+ private closeMenu;
509
+ ngOnDestroy(): void;
510
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctContextMenuTrigger, never>;
511
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctContextMenuTrigger, "[strctContextMenu]", never, { "items": { "alias": "strctContextMenu"; "required": true; "isSignal": true; }; "data": { "alias": "strctContextMenuData"; "required": false; "isSignal": true; }; }, { "menuSelect": "menuSelect"; }, never, never, true, never>;
512
+ }
513
+
369
514
  /** A node in the data-driven tree (`<strct-tree [nodes]="...">`). */
370
515
  interface StrctTreeNodeData {
371
516
  label: string;
@@ -381,28 +526,46 @@ interface StrctTreeNodeData {
381
526
  /** Arbitrary payload returned with (nodeActivated). */
382
527
  data?: unknown;
383
528
  }
529
+ /** Per-node menu resolver for the data-driven tree — returns the items for one node. */
530
+ type StrctTreeNodeMenuFn = (node: StrctTreeNodeData) => StrctMenuItem[];
531
+ /** Payload of (nodeMenuSelect). */
532
+ interface StrctTreeMenuEvent {
533
+ node: StrctTreeNodeData;
534
+ item: StrctMenuItem;
535
+ }
384
536
  /**
385
537
  * Tree node. Two modes:
386
538
  * - **Content:** nest `<strct-tree-node>` children manually.
387
539
  * - **Data:** pass a `[node]` object that recurses over its `children` —
388
540
  * used internally by `<strct-tree [nodes]>`.
389
541
  *
390
- * <strct-tree-node label="Group" icon="layers" badge="ok" [(expanded)]="open">
542
+ * <strct-tree-node label="Group" icon="layers" badge="success" [(expanded)]="open">
391
543
  * <strct-tree-node label="Leaf" icon="vm" [active]="true" />
392
544
  * </strct-tree-node>
393
545
  */
394
546
  declare class StrctTreeNode {
395
547
  /** Data-driven node; when set, label/icon/children come from it. */
396
548
  readonly node: _angular_core.InputSignal<StrctTreeNodeData | null>;
549
+ /** Label text. */
397
550
  readonly label: _angular_core.InputSignal<string>;
551
+ /** Icon name. */
398
552
  readonly icon: _angular_core.InputSignal<string | undefined>;
553
+ /** Status dot variant. */
399
554
  readonly badge: _angular_core.InputSignal<StrctIconBadge>;
555
+ /** Whether the item is active / selected. */
400
556
  readonly active: _angular_core.InputSignal<boolean>;
557
+ /** Whether the panel is open (two-way). */
401
558
  readonly expanded: _angular_core.ModelSignal<boolean>;
559
+ /** Per-node menu resolver (data mode); bubbles down the recursion. */
560
+ readonly nodeMenu: _angular_core.InputSignal<StrctTreeNodeMenuFn | null>;
402
561
  /** Content-mode click. */
403
562
  readonly activated: _angular_core.OutputEmitterRef<void>;
404
563
  /** Data-mode click — carries the activated node (bubbles to the tree). */
405
564
  readonly nodeActivated: _angular_core.OutputEmitterRef<StrctTreeNodeData>;
565
+ /** Data-mode right-click menu selection (bubbles to the tree). */
566
+ readonly nodeMenuSelect: _angular_core.OutputEmitterRef<StrctTreeMenuEvent>;
567
+ /** Right-click menu items for this node ([] when no resolver / not data mode). */
568
+ protected readonly menuItems: _angular_core.Signal<StrctMenuItem[]>;
406
569
  private readonly childNodes;
407
570
  /** Data-mode expansion (seeded from node.expanded on first toggle). */
408
571
  private readonly dataExpanded;
@@ -414,8 +577,9 @@ declare class StrctTreeNode {
414
577
  protected readonly isOpen: _angular_core.Signal<boolean>;
415
578
  toggle(): void;
416
579
  protected onActivate(): void;
580
+ protected onMenuSelect(item: StrctMenuItem): void;
417
581
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctTreeNode, never>;
418
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTreeNode, "strct-tree-node", never, { "node": { "alias": "node"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; "activated": "activated"; "nodeActivated": "nodeActivated"; }, ["childNodes"], ["[strctTreeTrailing]", "*"], true, never>;
582
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTreeNode, "strct-tree-node", never, { "node": { "alias": "node"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "nodeMenu": { "alias": "nodeMenu"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; "activated": "activated"; "nodeActivated": "nodeActivated"; "nodeMenuSelect": "nodeMenuSelect"; }, ["childNodes"], ["[strctTreeTrailing]", "*"], true, never>;
419
583
  }
420
584
  /**
421
585
  * Root container for a tree. Either project `<strct-tree-node>` children, or
@@ -425,12 +589,17 @@ declare class StrctTreeNode {
425
589
  declare class StrctTree {
426
590
  /** Data-driven node list; when set, projected content is ignored. */
427
591
  readonly nodes: _angular_core.InputSignal<StrctTreeNodeData[] | null>;
592
+ /** Per-node right-click menu resolver. */
593
+ readonly nodeMenu: _angular_core.InputSignal<StrctTreeNodeMenuFn | null>;
428
594
  /** Emitted when any data-driven node is clicked. */
429
595
  readonly nodeActivated: _angular_core.OutputEmitterRef<StrctTreeNodeData>;
596
+ /** Emitted when a data-driven node's right-click menu item is chosen. */
597
+ readonly nodeMenuSelect: _angular_core.OutputEmitterRef<StrctTreeMenuEvent>;
430
598
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctTree, never>;
431
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTree, "strct-tree", never, { "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; }, { "nodeActivated": "nodeActivated"; }, never, ["*"], true, never>;
599
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTree, "strct-tree", never, { "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; "nodeMenu": { "alias": "nodeMenu"; "required": false; "isSignal": true; }; }, { "nodeActivated": "nodeActivated"; "nodeMenuSelect": "nodeMenuSelect"; }, never, ["*"], true, never>;
432
600
  }
433
601
 
602
+ /** Modal width presets. */
434
603
  type StrctModalSize = 'sm' | 'md' | 'lg';
435
604
  /**
436
605
  * Overlay dialog with two-way `open`:
@@ -444,12 +613,17 @@ type StrctModalSize = 'sm' | 'md' | 'lg';
444
613
  declare class StrctModal {
445
614
  private readonly elementRef;
446
615
  private readonly doc;
616
+ /** Whether the panel is open (two-way). */
447
617
  readonly open: _angular_core.ModelSignal<boolean>;
618
+ /** Dialog title. */
448
619
  readonly title: _angular_core.InputSignal<string>;
620
+ /** Size variant. */
449
621
  readonly size: _angular_core.InputSignal<StrctModalSize>;
622
+ /** Hide the footer slot. */
450
623
  readonly hideFooter: _angular_core.InputSignalWithTransform<boolean, unknown>;
451
624
  /** Allow closing via backdrop click / Escape. */
452
- readonly dismissable: _angular_core.InputSignalWithTransform<boolean, unknown>;
625
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
626
+ /** Emitted when the alert is dismissed. */
453
627
  readonly closed: _angular_core.OutputEmitterRef<void>;
454
628
  protected readonly titleId: string;
455
629
  /** Element that had focus before the dialog opened, restored on close. */
@@ -466,7 +640,7 @@ declare class StrctModal {
466
640
  private focusable;
467
641
  private focusInitial;
468
642
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctModal, never>;
469
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctModal, "strct-modal", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hideFooter": { "alias": "hideFooter"; "required": false; "isSignal": true; }; "dismissable": { "alias": "dismissable"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*", "[strctModalFooter]"], true, never>;
643
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctModal, "strct-modal", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hideFooter": { "alias": "hideFooter"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*", "[strctModalFooter]"], true, never>;
470
644
  }
471
645
 
472
646
  /**
@@ -474,12 +648,13 @@ declare class StrctModal {
474
648
  * <strct-dropdown align="end">
475
649
  * <button strct-button strctDropdownTrigger>Actions</button>
476
650
  * <strct-dropdown-item>Rename</strct-dropdown-item>
477
- * <strct-dropdown-item danger>Delete</strct-dropdown-item>
651
+ * <strct-dropdown-item critical>Delete</strct-dropdown-item>
478
652
  * </strct-dropdown>
479
653
  */
480
654
  declare class StrctDropdown {
481
655
  private readonly host;
482
- readonly align: _angular_core.InputSignal<"end" | "start">;
656
+ /** Horizontal alignment of the menu. */
657
+ readonly align: _angular_core.InputSignal<"start" | "end">;
483
658
  readonly open: _angular_core.WritableSignal<boolean>;
484
659
  toggle(): void;
485
660
  close(): void;
@@ -490,10 +665,12 @@ declare class StrctDropdown {
490
665
  }
491
666
  /** A selectable row inside a `<strct-dropdown>`. */
492
667
  declare class StrctDropdownItem {
493
- readonly danger: _angular_core.InputSignalWithTransform<boolean, unknown>;
668
+ /** Danger. */
669
+ readonly critical: _angular_core.InputSignalWithTransform<boolean, unknown>;
670
+ /** Static disable flag. */
494
671
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
495
672
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDropdownItem, never>;
496
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctDropdownItem, "strct-dropdown-item", never, { "danger": { "alias": "danger"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
673
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctDropdownItem, "strct-dropdown-item", never, { "critical": { "alias": "critical"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
497
674
  }
498
675
  /** Thin separator between groups of menu items. */
499
676
  declare class StrctDropdownDivider {
@@ -508,7 +685,7 @@ declare class StrctDropdownDivider {
508
685
  * <div>Right-click here</div>
509
686
  * <ng-container strctContextMenuItems>
510
687
  * <strct-dropdown-item>Open</strct-dropdown-item>
511
- * <strct-dropdown-item danger>Delete</strct-dropdown-item>
688
+ * <strct-dropdown-item critical>Delete</strct-dropdown-item>
512
689
  * </ng-container>
513
690
  * </strct-context-menu>
514
691
  */
@@ -539,6 +716,7 @@ declare class StrctContextMenu {
539
716
  */
540
717
  declare class StrctSubmenu {
541
718
  private readonly host;
719
+ /** Label text. */
542
720
  readonly label: _angular_core.InputSignal<string>;
543
721
  /** Optional leading icon; when omitted the icon column is still reserved so
544
722
  * the label stays aligned with sibling items that do have icons. */
@@ -551,84 +729,9 @@ declare class StrctSubmenu {
551
729
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctSubmenu, "strct-submenu", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, ["[strctSubmenuLabel]", "*"], true, never>;
552
730
  }
553
731
 
554
- /** A single entry in a data-driven menu. */
555
- interface StrctMenuItem {
556
- label: string;
557
- icon?: string;
558
- /** Destructive styling. */
559
- danger?: boolean;
560
- disabled?: boolean;
561
- /** Render a separator instead of an entry (label is ignored). */
562
- divider?: boolean;
563
- /** Nested submenu. */
564
- children?: StrctMenuItem[];
565
- /** Invoked on selection, with the trigger's `strctContextMenuData`. */
566
- action?: (data?: unknown) => void;
567
- /** Arbitrary payload. */
568
- data?: unknown;
569
- }
570
- /**
571
- * Floating menu panel — portaled into `<body>` (so it escapes overflow /
572
- * transform clipping), positioned by its real measured size, with full keyboard
573
- * navigation and recursive submenus. Usually created by `[strctContextMenu]`,
574
- * but can be embedded directly with `submenu`.
575
- */
576
- declare class StrctMenuPanel {
577
- private readonly host;
578
- readonly items: _angular_core.InputSignal<StrctMenuItem[]>;
579
- readonly data: _angular_core.InputSignal<unknown>;
580
- readonly x: _angular_core.InputSignal<number>;
581
- readonly y: _angular_core.InputSignal<number>;
582
- readonly submenu: _angular_core.InputSignalWithTransform<boolean, unknown>;
583
- readonly select: _angular_core.OutputEmitterRef<StrctMenuItem>;
584
- readonly close: _angular_core.OutputEmitterRef<void>;
585
- /** ArrowLeft inside a submenu — asks the parent to close it. */
586
- readonly back: _angular_core.OutputEmitterRef<void>;
587
- protected readonly posX: _angular_core.WritableSignal<number>;
588
- protected readonly posY: _angular_core.WritableSignal<number>;
589
- protected readonly flipLeft: _angular_core.WritableSignal<boolean>;
590
- protected readonly activeIndex: _angular_core.WritableSignal<number>;
591
- protected readonly openSubIndex: _angular_core.WritableSignal<number | null>;
592
- private readonly navIndices;
593
- constructor();
594
- private clampToViewport;
595
- protected focusItem(i: number): void;
596
- private move;
597
- protected onHover(i: number): void;
598
- protected onLeave(i: number): void;
599
- protected onItemClick(item: StrctMenuItem, i: number, event: Event): void;
600
- protected closeSub(): void;
601
- protected onKeydown(event: KeyboardEvent): void;
602
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctMenuPanel, never>;
603
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctMenuPanel, "strct-menu-panel", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "x": { "alias": "x"; "required": false; "isSignal": true; }; "y": { "alias": "y"; "required": false; "isSignal": true; }; "submenu": { "alias": "submenu"; "required": false; "isSignal": true; }; }, { "select": "select"; "close": "close"; "back": "back"; }, never, never, true, never>;
604
- }
605
- /**
606
- * Right-click (context) menu driven by a data array. Attach to any trigger; the
607
- * menu portals into `<body>` and runs each item's `action` on selection.
608
- * <div [strctContextMenu]="menuFor(host)" [strctContextMenuData]="host"
609
- * (menuSelect)="onPick($event)">…</div>
610
- */
611
- declare class StrctContextMenuTrigger implements OnDestroy {
612
- private readonly appRef;
613
- private readonly envInjector;
614
- private readonly zone;
615
- private readonly doc;
616
- readonly items: _angular_core.InputSignal<StrctMenuItem[]>;
617
- readonly data: _angular_core.InputSignal<unknown>;
618
- readonly menuSelect: _angular_core.OutputEmitterRef<StrctMenuItem>;
619
- private ref;
620
- private readonly onClose;
621
- protected onContextMenu(event: MouseEvent): void;
622
- private openAt;
623
- private readonly onOutside;
624
- private closeMenu;
625
- ngOnDestroy(): void;
626
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctContextMenuTrigger, never>;
627
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctContextMenuTrigger, "[strctContextMenu]", never, { "items": { "alias": "strctContextMenu"; "required": true; "isSignal": true; }; "data": { "alias": "strctContextMenuData"; "required": false; "isSignal": true; }; }, { "menuSelect": "menuSelect"; }, never, never, true, never>;
628
- }
629
-
630
732
  /** A single wizard step. `label` names it in the step header. */
631
733
  declare class StrctStep {
734
+ /** Label text. */
632
735
  readonly label: _angular_core.InputSignal<string>;
633
736
  /** When false, the wizard's Next / Finish is disabled on this step. */
634
737
  readonly canAdvance: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -649,7 +752,9 @@ declare class StrctWizard {
649
752
  readonly submitting: _angular_core.InputSignalWithTransform<boolean, unknown>;
650
753
  /** Show a Cancel button on the left. */
651
754
  readonly cancelable: _angular_core.InputSignalWithTransform<boolean, unknown>;
755
+ /** Emitted when the user clicks Finish. */
652
756
  readonly finished: _angular_core.OutputEmitterRef<void>;
757
+ /** Emitted when the user clicks Cancel. */
653
758
  readonly cancelled: _angular_core.OutputEmitterRef<void>;
654
759
  /** Emits the new step index after a Back / Next move. */
655
760
  readonly stepChange: _angular_core.OutputEmitterRef<number>;
@@ -671,6 +776,7 @@ declare class StrctWizard {
671
776
  * <strct-divider vertical />
672
777
  */
673
778
  declare class StrctDivider {
779
+ /** Render as a vertical rule. */
674
780
  readonly vertical: _angular_core.InputSignalWithTransform<boolean, unknown>;
675
781
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDivider, never>;
676
782
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctDivider, "strct-divider", never, { "vertical": { "alias": "vertical"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -683,6 +789,7 @@ declare class StrctBreadcrumb {
683
789
  }
684
790
  /** One crumb. Mark the final one `current`. */
685
791
  declare class StrctBreadcrumbItem {
792
+ /** Mark as the current page. */
686
793
  readonly current: _angular_core.InputSignalWithTransform<boolean, unknown>;
687
794
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctBreadcrumbItem, never>;
688
795
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctBreadcrumbItem, "strct-breadcrumb-item", never, { "current": { "alias": "current"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -694,8 +801,11 @@ type PageToken = number | 'dots';
694
801
  * <strct-pagination [total]="240" [pageSize]="20" [(page)]="page" />
695
802
  */
696
803
  declare class StrctPagination {
804
+ /** Total number of items. */
697
805
  readonly total: _angular_core.InputSignal<number>;
806
+ /** Rows per page (0 disables paging). */
698
807
  readonly pageSize: _angular_core.InputSignal<number>;
808
+ /** Current page (two-way). */
699
809
  readonly page: _angular_core.ModelSignal<number>;
700
810
  readonly pageCount: _angular_core.Signal<number>;
701
811
  protected readonly pages: _angular_core.Signal<PageToken[]>;
@@ -714,8 +824,11 @@ declare class StrctPagination {
714
824
  * </strct-field>
715
825
  */
716
826
  declare class StrctField {
827
+ /** Label text. */
717
828
  readonly label: _angular_core.InputSignal<string>;
829
+ /** Show a required marker on the label. */
718
830
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
831
+ /** Helper text shown below the field. */
719
832
  readonly hint: _angular_core.InputSignal<string>;
720
833
  /** Error message (string or first-of array); falsy clears the error state. */
721
834
  readonly error: _angular_core.InputSignal<string | string[] | null | undefined>;
@@ -804,7 +917,9 @@ declare class StrctRadioGroup implements ControlValueAccessor {
804
917
  }
805
918
  /** One option inside a `<strct-radio-group>`. */
806
919
  declare class StrctRadio {
920
+ /** Current value. */
807
921
  readonly value: _angular_core.InputSignal<unknown>;
922
+ /** Static disable flag. */
808
923
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
809
924
  protected readonly group: StrctRadioGroup;
810
925
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctRadio, never>;
@@ -816,10 +931,15 @@ declare class StrctRadio {
816
931
  * <strct-range [min]="0" [max]="100" [(ngModel)]="volume" showValue />
817
932
  */
818
933
  declare class StrctRange implements ControlValueAccessor {
934
+ /** Minimum allowed value. */
819
935
  readonly min: _angular_core.InputSignal<number>;
936
+ /** Maximum allowed value or top of the value axis. */
820
937
  readonly max: _angular_core.InputSignal<number>;
938
+ /** Step increment. */
821
939
  readonly step: _angular_core.InputSignal<number>;
940
+ /** Display the current numeric value. */
822
941
  readonly showValue: _angular_core.InputSignalWithTransform<boolean, unknown>;
942
+ /** Static disable flag. */
823
943
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
824
944
  readonly value: _angular_core.WritableSignal<number>;
825
945
  readonly isDisabled: _angular_core.WritableSignal<boolean>;
@@ -841,8 +961,11 @@ declare class StrctRange implements ControlValueAccessor {
841
961
  * <strct-password [(ngModel)]="pw" meter />
842
962
  */
843
963
  declare class StrctPassword implements ControlValueAccessor {
964
+ /** Placeholder text when empty. */
844
965
  readonly placeholder: _angular_core.InputSignal<string>;
966
+ /** Show a strength meter. */
845
967
  readonly meter: _angular_core.InputSignalWithTransform<boolean, unknown>;
968
+ /** Static disable flag. */
846
969
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
847
970
  readonly value: _angular_core.WritableSignal<string>;
848
971
  readonly revealed: _angular_core.WritableSignal<boolean>;
@@ -868,8 +991,11 @@ declare class StrctPassword implements ControlValueAccessor {
868
991
  * <strct-file [(ngModel)]="files" multiple accept="image/*" />
869
992
  */
870
993
  declare class StrctFile implements ControlValueAccessor {
994
+ /** Multiple. */
871
995
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
996
+ /** Accept. */
872
997
  readonly accept: _angular_core.InputSignal<string>;
998
+ /** Static disable flag. */
873
999
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
874
1000
  readonly files: _angular_core.WritableSignal<File[]>;
875
1001
  readonly dragging: _angular_core.WritableSignal<boolean>;
@@ -892,8 +1018,11 @@ declare class StrctFile implements ControlValueAccessor {
892
1018
 
893
1019
  /** Star rating input. CVA value is the selected count (0–max). */
894
1020
  declare class StrctRating implements ControlValueAccessor {
1021
+ /** Maximum allowed value or top of the value axis. */
895
1022
  readonly max: _angular_core.InputSignal<number>;
1023
+ /** Size variant. */
896
1024
  readonly size: _angular_core.InputSignal<number>;
1025
+ /** Prevent user interaction. */
897
1026
  readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
898
1027
  readonly value: _angular_core.WritableSignal<number>;
899
1028
  readonly hover: _angular_core.WritableSignal<number>;
@@ -916,7 +1045,9 @@ declare class StrctRating implements ControlValueAccessor {
916
1045
  * <strct-chips [(ngModel)]="labels" placeholder="Add a tag…" />
917
1046
  */
918
1047
  declare class StrctChips implements ControlValueAccessor {
1048
+ /** Placeholder text when empty. */
919
1049
  readonly placeholder: _angular_core.InputSignal<string>;
1050
+ /** Allow duplicate tags. */
920
1051
  readonly allowDuplicates: _angular_core.InputSignal<boolean>;
921
1052
  readonly value: _angular_core.WritableSignal<string[]>;
922
1053
  readonly draft: _angular_core.WritableSignal<string>;
@@ -942,7 +1073,9 @@ declare class StrctChips implements ControlValueAccessor {
942
1073
  */
943
1074
  declare class StrctInputOtp implements ControlValueAccessor {
944
1075
  private readonly host;
1076
+ /** Number of OTP boxes. */
945
1077
  readonly length: _angular_core.InputSignal<number>;
1078
+ /** Mask each box as a password dot. */
946
1079
  readonly masked: _angular_core.InputSignal<boolean>;
947
1080
  readonly slots: _angular_core.WritableSignal<string[]>;
948
1081
  readonly isDisabled: _angular_core.WritableSignal<boolean>;
@@ -963,7 +1096,8 @@ declare class StrctInputOtp implements ControlValueAccessor {
963
1096
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctInputOtp, "strct-input-otp", never, { "length": { "alias": "length"; "required": false; "isSignal": true; }; "masked": { "alias": "masked"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
964
1097
  }
965
1098
 
966
- type StrctKnobStatus = 'accent' | 'success' | 'warning' | 'danger';
1099
+ /** Knob accent color variants. */
1100
+ type StrctKnobStatus = 'accent' | 'success' | 'warning' | 'critical';
967
1101
  /**
968
1102
  * Rotary dial input. Drag (up/down), arrow keys, Home/End or the wheel change
969
1103
  * the value. CVA-compatible.
@@ -971,12 +1105,19 @@ type StrctKnobStatus = 'accent' | 'success' | 'warning' | 'danger';
971
1105
  */
972
1106
  declare class StrctKnob implements ControlValueAccessor {
973
1107
  private readonly elementRef;
1108
+ /** Minimum allowed value. */
974
1109
  readonly min: _angular_core.InputSignal<number>;
1110
+ /** Maximum allowed value or top of the value axis. */
975
1111
  readonly max: _angular_core.InputSignal<number>;
1112
+ /** Step increment. */
976
1113
  readonly step: _angular_core.InputSignal<number>;
1114
+ /** Size variant. */
977
1115
  readonly size: _angular_core.InputSignal<number>;
1116
+ /** Stroke thickness in pixels. */
978
1117
  readonly thickness: _angular_core.InputSignal<number>;
1118
+ /** Visual status color. */
979
1119
  readonly status: _angular_core.InputSignal<StrctKnobStatus>;
1120
+ /** Label text. */
980
1121
  readonly label: _angular_core.InputSignal<string>;
981
1122
  readonly value: _angular_core.WritableSignal<number>;
982
1123
  readonly isDisabled: _angular_core.WritableSignal<boolean>;
@@ -1025,7 +1166,9 @@ declare const STRCT_MASKS: {
1025
1166
  * <strct-input-mask mask="HH:HH:HH:HH:HH:HH" uppercase [(ngModel)]="mac" />
1026
1167
  */
1027
1168
  declare class StrctInputMask implements ControlValueAccessor {
1169
+ /** Mask pattern (9=digit, A=letter, H=hex, *=alnum). */
1028
1170
  readonly mask: _angular_core.InputSignal<string>;
1171
+ /** Placeholder text when empty. */
1029
1172
  readonly placeholder: _angular_core.InputSignal<string>;
1030
1173
  /** Upper-case entered letters (handy for hex MAC / WWPN). */
1031
1174
  readonly uppercase: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -1045,6 +1188,7 @@ declare class StrctInputMask implements ControlValueAccessor {
1045
1188
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctInputMask, "strct-input-mask", never, { "mask": { "alias": "mask"; "required": true; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "uppercase": { "alias": "uppercase"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1046
1189
  }
1047
1190
 
1191
+ /** One option in a combobox or similar list. */
1048
1192
  interface StrctOption {
1049
1193
  value: unknown;
1050
1194
  label: string;
@@ -1057,8 +1201,12 @@ interface StrctOption {
1057
1201
  declare class StrctCombobox implements ControlValueAccessor {
1058
1202
  private readonly host;
1059
1203
  protected readonly listId: string;
1204
+ /** Available options. */
1060
1205
  readonly options: _angular_core.InputSignal<StrctOption[]>;
1206
+ /** Placeholder text when empty. */
1061
1207
  readonly placeholder: _angular_core.InputSignal<string>;
1208
+ /** Show a skeleton placeholder while options are loading. */
1209
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
1062
1210
  readonly query: _angular_core.WritableSignal<string>;
1063
1211
  readonly value: _angular_core.WritableSignal<unknown>;
1064
1212
  readonly open: _angular_core.WritableSignal<boolean>;
@@ -1084,7 +1232,7 @@ declare class StrctCombobox implements ControlValueAccessor {
1084
1232
  registerOnTouched(fn: () => void): void;
1085
1233
  setDisabledState(isDisabled: boolean): void;
1086
1234
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCombobox, never>;
1087
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCombobox, "strct-combobox", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1235
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCombobox, "strct-combobox", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1088
1236
  }
1089
1237
 
1090
1238
  interface DayCell {
@@ -1098,6 +1246,7 @@ interface DayCell {
1098
1246
  */
1099
1247
  declare class StrctDatepicker implements ControlValueAccessor {
1100
1248
  private readonly host;
1249
+ /** Placeholder text when empty. */
1101
1250
  readonly placeholder: _angular_core.InputSignal<string>;
1102
1251
  protected readonly dow: string[];
1103
1252
  readonly value: _angular_core.WritableSignal<string>;
@@ -1135,6 +1284,7 @@ declare class StrctDatepicker implements ControlValueAccessor {
1135
1284
  */
1136
1285
  declare class StrctColorPicker implements ControlValueAccessor {
1137
1286
  private readonly host;
1287
+ /** Custom palette swatches. */
1138
1288
  readonly swatches: _angular_core.InputSignal<string[]>;
1139
1289
  readonly value: _angular_core.WritableSignal<string>;
1140
1290
  readonly draft: _angular_core.WritableSignal<string>;
@@ -1157,6 +1307,7 @@ declare class StrctColorPicker implements ControlValueAccessor {
1157
1307
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctColorPicker, "strct-color-picker", never, { "swatches": { "alias": "swatches"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1158
1308
  }
1159
1309
 
1310
+ /** One option in a cascade select. */
1160
1311
  interface StrctCascadeOption {
1161
1312
  label: string;
1162
1313
  value?: unknown;
@@ -1173,6 +1324,7 @@ declare abstract class StrctCascadeHost {
1173
1324
  */
1174
1325
  declare class StrctCascadeNode {
1175
1326
  private readonly host;
1327
+ /** Option. */
1176
1328
  readonly option: _angular_core.InputSignal<StrctCascadeOption>;
1177
1329
  readonly open: _angular_core.WritableSignal<boolean>;
1178
1330
  protected readonly hasChildren: _angular_core.Signal<boolean>;
@@ -1188,7 +1340,9 @@ declare class StrctCascadeNode {
1188
1340
  */
1189
1341
  declare class StrctCascadeSelect extends StrctCascadeHost implements ControlValueAccessor {
1190
1342
  private readonly elementRef;
1343
+ /** Available options. */
1191
1344
  readonly options: _angular_core.InputSignal<StrctCascadeOption[]>;
1345
+ /** Placeholder text when empty. */
1192
1346
  readonly placeholder: _angular_core.InputSignal<string>;
1193
1347
  readonly value: _angular_core.WritableSignal<unknown>;
1194
1348
  readonly open: _angular_core.WritableSignal<boolean>;
@@ -1210,12 +1364,14 @@ declare class StrctCascadeSelect extends StrctCascadeHost implements ControlValu
1210
1364
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCascadeSelect, "strct-cascade-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1211
1365
  }
1212
1366
 
1367
+ /** Column definition for the table. */
1213
1368
  interface StrctColumn {
1214
1369
  key: string;
1215
1370
  label: string;
1216
1371
  align?: 'start' | 'center' | 'end';
1217
1372
  width?: string;
1218
1373
  }
1374
+ /** Shorthand for a record-shaped table/datagrid row. */
1219
1375
  type StrctRow = Record<string, unknown>;
1220
1376
  /** Context passed to a per-column cell template. */
1221
1377
  interface StrctCellContext {
@@ -1231,10 +1387,11 @@ interface StrctCellContext {
1231
1387
  * is the directive value; the row, value and column are the template context:
1232
1388
  *
1233
1389
  * <ng-template strctCell="status" let-row let-value="value">
1234
- * <strct-badge [status]="row['ok'] ? 'success' : 'danger'">{{ value }}</strct-badge>
1390
+ * <strct-badge [status]="row['success'] ? 'success' : 'critical'">{{ value }}</strct-badge>
1235
1391
  * </ng-template>
1236
1392
  */
1237
1393
  declare class StrctCellDef {
1394
+ /** Key. */
1238
1395
  readonly key: _angular_core.InputSignal<string>;
1239
1396
  readonly template: TemplateRef<StrctCellContext>;
1240
1397
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCellDef, never>;
@@ -1246,20 +1403,28 @@ declare class StrctCellDef {
1246
1403
  * <strct-table [columns]="cols" [rows]="data" hover />
1247
1404
  */
1248
1405
  declare class StrctTable {
1406
+ /** Column definitions. */
1249
1407
  readonly columns: _angular_core.InputSignal<StrctColumn[]>;
1408
+ /** Data rows. */
1250
1409
  readonly rows: _angular_core.InputSignal<StrctRow[]>;
1410
+ /** Enable zebra-striping. */
1251
1411
  readonly striped: _angular_core.InputSignalWithTransform<boolean, unknown>;
1412
+ /** Highlight rows on hover. */
1252
1413
  readonly hover: _angular_core.InputSignalWithTransform<boolean, unknown>;
1414
+ /** Message shown when there are no rows. */
1253
1415
  readonly emptyText: _angular_core.InputSignal<string>;
1416
+ /** Show skeleton rows while data is loading. */
1417
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
1254
1418
  private readonly cellDefs;
1255
1419
  private readonly cellMap;
1256
1420
  protected cellTemplate(key: string): TemplateRef<StrctCellContext> | null;
1257
1421
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctTable, never>;
1258
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTable, "strct-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "hover": { "alias": "hover"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; }, {}, ["cellDefs"], never, true, never>;
1422
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTable, "strct-table", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "striped": { "alias": "striped"; "required": false; "isSignal": true; }; "hover": { "alias": "hover"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, {}, ["cellDefs"], never, true, never>;
1259
1423
  }
1260
1424
 
1261
1425
  /** Resolves a stable identity for a row: a property key, or a function. */
1262
1426
  type StrctRowId = string | ((row: StrctRow) => unknown);
1427
+ /** Column definition for the datagrid. */
1263
1428
  interface StrctDatagridColumn {
1264
1429
  key: string;
1265
1430
  label: string;
@@ -1290,23 +1455,32 @@ declare class StrctDatagridActionBar {
1290
1455
  * </strct-datagrid>
1291
1456
  */
1292
1457
  declare class StrctDatagrid {
1458
+ /** Column definitions. */
1293
1459
  readonly columns: _angular_core.InputSignal<StrctDatagridColumn[]>;
1460
+ /** Data rows. */
1294
1461
  readonly rows: _angular_core.InputSignal<StrctRow[]>;
1462
+ /** Rows per page (0 disables paging). */
1295
1463
  readonly pageSize: _angular_core.InputSignal<number>;
1464
+ /** Enable row selection. */
1296
1465
  readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1297
1466
  /** Expand a row in place to reveal its detail template below it. */
1298
1467
  readonly expandable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1299
1468
  /** Collapse the grid to a single column and open a side detail pane for the
1300
1469
  * clicked row (distinct from {@link expandable}). */
1301
1470
  readonly detailPane: _angular_core.InputSignalWithTransform<boolean, unknown>;
1471
+ /** Compact density mode. */
1302
1472
  readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
1473
+ /** Message shown when there are no rows. */
1303
1474
  readonly emptyText: _angular_core.InputSignal<string>;
1475
+ /** Show skeleton rows while data is loading. */
1476
+ readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
1304
1477
  /**
1305
1478
  * Stable row identity (property key or function). Set this for live-refreshing
1306
1479
  * data so selection, expansion and the active detail row survive re-fetches
1307
1480
  * that replace the row objects. Defaults to object identity.
1308
1481
  */
1309
1482
  readonly rowId: _angular_core.InputSignal<StrctRowId | null>;
1483
+ /** Emitted when the selection changes. */
1310
1484
  readonly selectionChange: _angular_core.OutputEmitterRef<StrctRow[]>;
1311
1485
  protected readonly detailDef: _angular_core.Signal<StrctRowDetailDef | undefined>;
1312
1486
  protected readonly actionBarDef: _angular_core.Signal<StrctDatagridActionBar | undefined>;
@@ -1354,10 +1528,11 @@ declare class StrctDatagrid {
1354
1528
  private commitSelection;
1355
1529
  private compare;
1356
1530
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDatagrid, never>;
1357
- 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; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "rowId": { "alias": "rowId"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, ["detailDef", "actionBarDef", "cellDefs"], ["[strctDatagridActionBar]", "[strctDatagridActions]"], true, never>;
1531
+ 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; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "rowId": { "alias": "rowId"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, ["detailDef", "actionBarDef", "cellDefs"], ["[strctDatagridActionBar]", "[strctDatagridActions]"], true, never>;
1358
1532
  }
1359
1533
 
1360
- type StrctTimelineState = 'default' | 'current' | 'success' | 'warning' | 'danger';
1534
+ /** Timeline node state colors. */
1535
+ type StrctTimelineState = 'default' | 'current' | 'success' | 'warning' | 'critical';
1361
1536
  /** Vertical timeline container. Wraps `<strct-timeline-item>` children. */
1362
1537
  declare class StrctTimeline {
1363
1538
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctTimeline, never>;
@@ -1365,7 +1540,9 @@ declare class StrctTimeline {
1365
1540
  }
1366
1541
  /** A timeline entry: a node on the rail plus a title and projected body. */
1367
1542
  declare class StrctTimelineItem {
1543
+ /** Dialog title. */
1368
1544
  readonly title: _angular_core.InputSignal<string>;
1545
+ /** State. */
1369
1546
  readonly state: _angular_core.InputSignal<StrctTimelineState>;
1370
1547
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctTimelineItem, never>;
1371
1548
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTimelineItem, "strct-timeline-item", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -1378,20 +1555,27 @@ declare class StrctStack {
1378
1555
  }
1379
1556
  /** A label + value row. The value is projected content. */
1380
1557
  declare class StrctStackItem {
1558
+ /** Label text. */
1381
1559
  readonly label: _angular_core.InputSignal<string>;
1382
1560
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctStackItem, never>;
1383
1561
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctStackItem, "strct-stack-item", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1384
1562
  }
1385
1563
 
1386
- type StrctChartStatus = 'accent' | 'success' | 'warning' | 'danger';
1564
+ /** Chart / gauge / sparkline status colors. */
1565
+ type StrctChartStatus = 'accent' | 'success' | 'warning' | 'critical';
1387
1566
  /**
1388
1567
  * Tiny inline trend line. `<strct-sparkline [data]="[3,5,4,8,6,9]" area />`.
1389
1568
  */
1390
1569
  declare class StrctSparkline {
1570
+ /** Data array. */
1391
1571
  readonly data: _angular_core.InputSignal<number[]>;
1572
+ /** Visual status color. */
1392
1573
  readonly status: _angular_core.InputSignal<StrctChartStatus>;
1574
+ /** Fill the area under the line. */
1393
1575
  readonly area: _angular_core.InputSignalWithTransform<boolean, unknown>;
1576
+ /** Width (CSS length). */
1394
1577
  readonly width: _angular_core.InputSignal<number>;
1578
+ /** Height in pixels. */
1395
1579
  readonly height: _angular_core.InputSignal<number>;
1396
1580
  protected readonly color: _angular_core.Signal<string>;
1397
1581
  private readonly points;
@@ -1401,16 +1585,22 @@ declare class StrctSparkline {
1401
1585
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctSparkline, "strct-sparkline", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "area": { "alias": "area"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1402
1586
  }
1403
1587
 
1588
+ /** Chart rendering types (line, area, bar). */
1404
1589
  type StrctChartType = 'line' | 'area' | 'bar';
1405
1590
  /**
1406
1591
  * Single-series chart (line / area / bar). Dependency-free SVG, token-coloured.
1407
1592
  * <strct-chart [data]="cpu" type="area" [labels]="hours" status="warning" />
1408
1593
  */
1409
1594
  declare class StrctChart {
1595
+ /** Data array. */
1410
1596
  readonly data: _angular_core.InputSignal<number[]>;
1597
+ /** Visual type / variant. */
1411
1598
  readonly type: _angular_core.InputSignal<StrctChartType>;
1599
+ /** X-axis labels. */
1412
1600
  readonly labels: _angular_core.InputSignal<string[]>;
1601
+ /** Visual status color. */
1413
1602
  readonly status: _angular_core.InputSignal<StrctChartStatus>;
1603
+ /** Height in pixels. */
1414
1604
  readonly height: _angular_core.InputSignal<number>;
1415
1605
  /** Override the top of the value axis (defaults to the data max + headroom). */
1416
1606
  readonly max: _angular_core.InputSignal<number | null>;
@@ -1441,6 +1631,7 @@ declare class StrctChart {
1441
1631
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctChart, "strct-chart", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1442
1632
  }
1443
1633
 
1634
+ /** A single weighted slice of a donut chart. */
1444
1635
  interface StrctDonutSegment {
1445
1636
  value: number;
1446
1637
  label?: string;
@@ -1452,10 +1643,15 @@ interface StrctDonutSegment {
1452
1643
  * centerValue="8" centerLabel="VMs" />
1453
1644
  */
1454
1645
  declare class StrctDonut {
1646
+ /** Weighted segments. */
1455
1647
  readonly segments: _angular_core.InputSignal<StrctDonutSegment[]>;
1648
+ /** Size variant. */
1456
1649
  readonly size: _angular_core.InputSignal<number>;
1650
+ /** Stroke thickness in pixels. */
1457
1651
  readonly thickness: _angular_core.InputSignal<number>;
1652
+ /** Value shown in the donut center. */
1458
1653
  readonly centerValue: _angular_core.InputSignal<string | number>;
1654
+ /** Label shown in the donut center. */
1459
1655
  readonly centerLabel: _angular_core.InputSignal<string>;
1460
1656
  protected readonly half: _angular_core.Signal<number>;
1461
1657
  protected readonly radius: _angular_core.Signal<number>;
@@ -1474,10 +1670,15 @@ declare class StrctDonut {
1474
1670
  * <strct-gauge [value]="72" status="warning" label="CPU" />
1475
1671
  */
1476
1672
  declare class StrctGauge {
1673
+ /** Current value. */
1477
1674
  readonly value: _angular_core.InputSignal<number>;
1675
+ /** Visual status color. */
1478
1676
  readonly status: _angular_core.InputSignal<StrctChartStatus>;
1677
+ /** Label text. */
1479
1678
  readonly label: _angular_core.InputSignal<string>;
1679
+ /** Size variant. */
1480
1680
  readonly size: _angular_core.InputSignal<number>;
1681
+ /** Stroke thickness in pixels. */
1481
1682
  readonly thickness: _angular_core.InputSignal<number>;
1482
1683
  protected readonly clamped: _angular_core.Signal<number>;
1483
1684
  protected readonly half: _angular_core.Signal<number>;
@@ -1490,17 +1691,22 @@ declare class StrctGauge {
1490
1691
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctGauge, "strct-gauge", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "thickness": { "alias": "thickness"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1491
1692
  }
1492
1693
 
1493
- type StrctAlertType = 'info' | 'success' | 'warning' | 'danger';
1694
+ /** Alert visual types. */
1695
+ type StrctAlertType = 'info' | 'success' | 'warning' | 'critical';
1494
1696
  /** Inline contextual banner. `<strct-alert type="warning">…</strct-alert>`. */
1495
1697
  declare class StrctAlert {
1698
+ /** Visual type / variant. */
1496
1699
  readonly type: _angular_core.InputSignal<StrctAlertType>;
1700
+ /** Show a dismiss button. */
1497
1701
  readonly closable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1702
+ /** Emitted when the alert is dismissed. */
1498
1703
  readonly closed: _angular_core.OutputEmitterRef<void>;
1499
- protected readonly icon: _angular_core.Signal<"info" | "success" | "warning" | "danger">;
1704
+ protected readonly icon: _angular_core.Signal<"success" | "warning" | "critical" | "info">;
1500
1705
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctAlert, never>;
1501
1706
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctAlert, "strct-alert", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, ["*"], true, never>;
1502
1707
  }
1503
1708
 
1709
+ /** Tooltip placement relative to the host element. */
1504
1710
  type StrctTooltipPosition = 'top' | 'bottom' | 'left' | 'right';
1505
1711
  /**
1506
1712
  * Lightweight hover/focus tooltip. Renders a fixed-positioned bubble so it is
@@ -1512,7 +1718,9 @@ declare class StrctTooltip {
1512
1718
  private readonly renderer;
1513
1719
  private readonly doc;
1514
1720
  private bubble;
1721
+ /** Tooltip text. */
1515
1722
  readonly strctTooltip: _angular_core.InputSignal<string>;
1723
+ /** Tooltip placement relative to the host. */
1516
1724
  readonly tooltipPosition: _angular_core.InputSignal<StrctTooltipPosition>;
1517
1725
  protected show(): void;
1518
1726
  protected hide(): void;
@@ -1521,6 +1729,7 @@ declare class StrctTooltip {
1521
1729
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<StrctTooltip, "[strctTooltip]", never, { "strctTooltip": { "alias": "strctTooltip"; "required": true; "isSignal": true; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1522
1730
  }
1523
1731
 
1732
+ /** Signpost popover placement. */
1524
1733
  type StrctSignpostPosition = 'top' | 'bottom' | 'left' | 'right';
1525
1734
  /**
1526
1735
  * A click-triggered popover with an arrow, for contextual help / detail.
@@ -1532,6 +1741,7 @@ type StrctSignpostPosition = 'top' | 'bottom' | 'left' | 'right';
1532
1741
  */
1533
1742
  declare class StrctSignpost {
1534
1743
  private readonly host;
1744
+ /** Popover placement relative to the trigger. */
1535
1745
  readonly position: _angular_core.InputSignal<StrctSignpostPosition>;
1536
1746
  readonly open: _angular_core.WritableSignal<boolean>;
1537
1747
  toggle(): void;
@@ -1543,7 +1753,9 @@ declare class StrctSignpost {
1543
1753
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctSignpost, "strct-signpost", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, ["[strctSignpostTrigger]", "*"], true, never>;
1544
1754
  }
1545
1755
 
1546
- type StrctToastType = 'info' | 'success' | 'warning' | 'danger';
1756
+ /** Toast visual types. */
1757
+ type StrctToastType = 'info' | 'success' | 'warning' | 'critical';
1758
+ /** A single toast notification. */
1547
1759
  interface StrctToast {
1548
1760
  id: number;
1549
1761
  type: StrctToastType;
@@ -1551,6 +1763,7 @@ interface StrctToast {
1551
1763
  /** Auto-dismiss after this many ms; 0 keeps it until dismissed. */
1552
1764
  duration: number;
1553
1765
  }
1766
+ /** Options passed when creating a toast. */
1554
1767
  interface StrctToastOptions {
1555
1768
  type?: StrctToastType;
1556
1769
  duration?: number;
@@ -1568,7 +1781,7 @@ declare class StrctToastService {
1568
1781
  info(message: string, duration?: number): number;
1569
1782
  success(message: string, duration?: number): number;
1570
1783
  warning(message: string, duration?: number): number;
1571
- danger(message: string, duration?: number): number;
1784
+ critical(message: string, duration?: number): number;
1572
1785
  dismiss(id: number): void;
1573
1786
  clear(): void;
1574
1787
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctToastService, never>;
@@ -1582,5 +1795,5 @@ declare class StrctToastOutlet {
1582
1795
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctToastOutlet, "strct-toast-outlet", never, {}, {}, never, never, true, never>;
1583
1796
  }
1584
1797
 
1585
- export { STRCT_ICONS, STRCT_ICON_GROUPS, STRCT_MASKS, STRCT_PALETTES, STRCT_RAW_ICONS, StrctAccordion, StrctAccordionPanel, StrctAlert, StrctAvatar, StrctBadge, StrctBreadcrumb, StrctBreadcrumbItem, StrctButton, StrctButtonGroup, StrctCard, StrctCardBlock, StrctCardFooter, StrctCardHeader, StrctCascadeHost, StrctCascadeNode, StrctCascadeSelect, StrctCellDef, StrctChart, StrctCheckbox, StrctChips, StrctColorPicker, StrctCombobox, StrctContextMenu, StrctContextMenuTrigger, StrctDatagrid, StrctDatagridActionBar, StrctDatepicker, StrctDivider, StrctDonut, StrctDropdown, StrctDropdownDivider, StrctDropdownItem, StrctField, StrctFile, StrctFooter, StrctGauge, StrctHeader, StrctIcon, StrctInput, StrctInputMask, StrctInputOtp, StrctKnob, StrctLogin, StrctMenuPanel, StrctModal, StrctNav, StrctNavItem, StrctOverlay, StrctPagination, StrctPassword, StrctProgress, StrctRadio, StrctRadioGroup, StrctRange, StrctRating, StrctRowDetailDef, StrctShell, StrctSignpost, StrctSkeleton, StrctSparkline, StrctSpeedDial, StrctSpinner, StrctStack, StrctStackItem, StrctStep, StrctSubmenu, StrctTab, StrctTable, StrctTabs, StrctTag, StrctThemeService, StrctThemeSwitcher, StrctTimeline, StrctTimelineItem, StrctToastOutlet, StrctToastService, StrctToggle, StrctTooltip, StrctTree, StrctTreeNode, StrctVerticalNav, StrctWizard, registerStrctIcon };
1586
- export type { StrctAlertType, StrctAvatarSize, StrctAvatarStatus, StrctBadgeStatus, StrctButtonSize, StrctButtonVariant, StrctCascadeOption, StrctCellContext, StrctChartStatus, StrctChartType, StrctColumn, StrctDatagridColumn, StrctDonutSegment, StrctIconBadge, StrctKnobStatus, StrctMenuItem, StrctModalSize, StrctMode, StrctOption, StrctOverlayPlacement, StrctPalette, StrctPaletteInfo, StrctProgressStatus, StrctRow, StrctRowId, StrctSignpostPosition, StrctSpeedDialDirection, StrctSpinnerSize, StrctTagStatus, StrctTimelineState, StrctToast, StrctToastOptions, StrctToastType, StrctTooltipPosition, StrctTreeNodeData };
1798
+ export { STRCT_ICONS, STRCT_ICON_GROUPS, STRCT_MASKS, STRCT_PALETTES, STRCT_RAW_ICONS, StrctAccordion, StrctAccordionPanel, StrctAlert, StrctAvatar, StrctBadge, StrctBreadcrumb, StrctBreadcrumbItem, StrctButton, StrctButtonGroup, StrctCard, StrctCardBlock, StrctCardFooter, StrctCardHeader, StrctCascadeHost, StrctCascadeNode, StrctCascadeSelect, StrctCellDef, StrctChart, StrctCheckbox, StrctChips, StrctColorPicker, StrctCombobox, StrctContextMenu, StrctContextMenuTrigger, StrctDatagrid, StrctDatagridActionBar, StrctDatepicker, StrctDivider, StrctDonut, StrctDropdown, StrctDropdownDivider, StrctDropdownItem, StrctField, StrctFile, StrctFooter, StrctGauge, StrctHeader, StrctIcon, StrctInput, StrctInputMask, StrctInputOtp, StrctKnob, StrctLogin, StrctMenuPanel, StrctModal, StrctNav, StrctNavItem, StrctOverlay, StrctPagination, StrctPassword, StrctProgress, StrctRadio, StrctRadioGroup, StrctRange, StrctRating, StrctRowDetailDef, StrctShell, StrctShellService, StrctSignpost, StrctSkeleton, StrctSparkline, StrctSpeedDial, StrctSpinner, StrctStack, StrctStackItem, StrctStep, StrctSubmenu, StrctTab, StrctTable, StrctTabs, StrctTag, StrctThemeService, StrctThemeSwitcher, StrctTimeline, StrctTimelineItem, StrctToastOutlet, StrctToastService, StrctToggle, StrctTooltip, StrctTree, StrctTreeNode, StrctVerticalNav, StrctWizard, registerStrctIcon };
1799
+ export type { StrctAlertType, StrctAvatarSize, StrctAvatarStatus, StrctBadgeStatus, StrctButtonSize, StrctButtonVariant, StrctCascadeOption, StrctCellContext, StrctChartStatus, StrctChartType, StrctColumn, StrctDatagridColumn, StrctDonutSegment, StrctIconBadge, StrctKnobStatus, StrctMenuItem, StrctModalSize, StrctMode, StrctOption, StrctOverlayPlacement, StrctPalette, StrctPaletteInfo, StrctProgressStatus, StrctRow, StrctRowId, StrctSignpostPosition, StrctSpeedDialDirection, StrctSpinnerSize, StrctTagStatus, StrctTimelineState, StrctToast, StrctToastOptions, StrctToastType, StrctTooltipPosition, StrctTreeMenuEvent, StrctTreeNodeData, StrctTreeNodeMenuFn };