@akcelik/strct 1.11.0 → 1.13.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": "1.11.0",
3
+ "version": "1.13.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",
@@ -330,9 +330,17 @@ declare class StrctIcon {
330
330
  private readonly sanitizer;
331
331
  /**
332
332
  * Icon name. Typed to autocomplete the built-in set while still accepting
333
- * any string, since `registerStrctIcon` can add names at runtime.
333
+ * any string, since `registerStrctIcon` can add names at runtime. For a
334
+ * compile-time guarantee use `strictName` instead.
334
335
  */
335
336
  readonly name: _angular_core.InputSignal<StrctIconName | (string & {})>;
337
+ /**
338
+ * Strict alternative to `name`: typed as the bare `StrctIconName` union, so
339
+ * a mistyped built-in name is a BUILD error under strict templates —
340
+ * `strictName="sheildCheck"` fails to compile. Wins over `name` when both
341
+ * are set. Use `name` for runtime-registered custom icons.
342
+ */
343
+ readonly strictName: _angular_core.InputSignal<StrctIconName | null>;
336
344
  /** Icon size in pixels. */
337
345
  readonly size: _angular_core.InputSignal<number>;
338
346
  /** Stroke width for outline icons. */
@@ -341,12 +349,14 @@ declare class StrctIcon {
341
349
  readonly badge: _angular_core.InputSignal<StrctIconBadge>;
342
350
  /** Accessible label for the icon. When empty the icon is hidden from assistive tech. */
343
351
  readonly ariaLabel: _angular_core.InputSignal<string>;
352
+ /** The effective name: `strictName` wins when set. */
353
+ protected readonly iconName: _angular_core.Signal<StrctIconName | (string & {})>;
344
354
  /** True when the named icon is a full-SVG (raw) icon registered by the app. */
345
355
  protected readonly isRaw: _angular_core.Signal<boolean>;
346
356
  protected readonly svg: _angular_core.Signal<SafeHtml>;
347
357
  protected readonly rawSvg: _angular_core.Signal<SafeHtml>;
348
358
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctIcon, never>;
349
- 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>;
359
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctIcon, "strct-icon", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "strictName": { "alias": "strictName"; "required": false; "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>;
350
360
  }
351
361
 
352
362
  /** Overlay positioning strategies. */
@@ -2063,11 +2073,24 @@ declare class StrctInputOtp implements ControlValueAccessor {
2063
2073
  readonly length: _angular_core.InputSignal<number>;
2064
2074
  /** Mask each box as a password dot. */
2065
2075
  readonly masked: _angular_core.InputSignal<boolean>;
2076
+ /**
2077
+ * Focus box 0 on first render — the "second-factor step just appeared"
2078
+ * case, declaratively.
2079
+ */
2080
+ readonly autofocus: _angular_core.InputSignalWithTransform<boolean, unknown>;
2081
+ /**
2082
+ * Insert a visual separator every N boxes (0 = none): `groupSize=3` renders
2083
+ * `nnn – nnn`, mirroring how authenticator apps display the code.
2084
+ */
2085
+ readonly groupSize: _angular_core.InputSignal<number>;
2066
2086
  readonly slots: _angular_core.WritableSignal<string[]>;
2067
2087
  readonly isDisabled: _angular_core.WritableSignal<boolean>;
2068
2088
  protected readonly indices: _angular_core.Signal<number[]>;
2069
2089
  private onChange;
2070
2090
  private onTouched;
2091
+ constructor();
2092
+ /** Move the caret to a box — e.g. back to 0 after clearing a rejected code. */
2093
+ focus(index?: number): void;
2071
2094
  onInput(i: number, event: Event): void;
2072
2095
  onKeydown(i: number, event: KeyboardEvent): void;
2073
2096
  onPaste(event: ClipboardEvent): void;
@@ -2079,7 +2102,7 @@ declare class StrctInputOtp implements ControlValueAccessor {
2079
2102
  registerOnTouched(fn: () => void): void;
2080
2103
  setDisabledState(isDisabled: boolean): void;
2081
2104
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctInputOtp, never>;
2082
- 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>;
2105
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctInputOtp, "strct-input-otp", never, { "length": { "alias": "length"; "required": false; "isSignal": true; }; "masked": { "alias": "masked"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "groupSize": { "alias": "groupSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2083
2106
  }
2084
2107
 
2085
2108
  /** Knob accent color variants. */
@@ -2702,6 +2725,13 @@ declare class StrctDatagrid {
2702
2725
  readonly quickFilterFields: _angular_core.InputSignal<string[] | null>;
2703
2726
  /** Render the built-in quick-filter searchbox in the toolbar. */
2704
2727
  readonly quickFilterable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2728
+ /**
2729
+ * Where the built-in box sits in the toolbar. `'end'` (default) follows the
2730
+ * console convention: action verbs lead on the left, view controls sit at
2731
+ * the far right — and the box keeps a stable position across grids whose
2732
+ * button sets differ.
2733
+ */
2734
+ readonly quickFilterAlign: _angular_core.InputSignal<"end" | "start">;
2705
2735
  /**
2706
2736
  * Tree-grid: the row property holding a row's children array. Rows render
2707
2737
  * hierarchically with indent + carets; sorting applies per sibling level;
@@ -2799,6 +2829,14 @@ declare class StrctDatagrid {
2799
2829
  protected startEdit(row: StrctRow, col: StrctDatagridColumn): void;
2800
2830
  protected commitEdit(row: StrctRow, col: StrctDatagridColumn, event: Event): void;
2801
2831
  protected cancelEdit(event?: Event): void;
2832
+ /**
2833
+ * `singleLine` reveal: hovering a cell whose content is actually clipped
2834
+ * gets the full text as a native `title`. Hover-lazy (one delegated
2835
+ * listener, zero render cost — virtual grids pay nothing for unhovered
2836
+ * cells), covers plain and `strctCell`-templated cells alike via
2837
+ * `textContent`, and self-corrects after a column resize.
2838
+ */
2839
+ protected revealIfClipped(event: Event): void;
2802
2840
  /** Active (non-empty) filter entries. */
2803
2841
  private readonly activeFilters;
2804
2842
  private readonly quickTerm;
@@ -2886,7 +2924,7 @@ declare class StrctDatagrid {
2886
2924
  private commitSelection;
2887
2925
  private compare;
2888
2926
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDatagrid, never>;
2889
- 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; }; "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>;
2927
+ 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>;
2890
2928
  }
2891
2929
 
2892
2930
  /** Timeline node state colors. */