@akcelik/strct 1.10.2 → 1.12.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.10.2",
3
+ "version": "1.12.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. */
@@ -2489,6 +2499,7 @@ interface StrctDatagridLabels {
2489
2499
  clearFilter: string;
2490
2500
  editCell: string;
2491
2501
  toggleChildren: string;
2502
+ quickFilter: string;
2492
2503
  }
2493
2504
  /** Resolves a stable identity for a row: a property key, or a function. */
2494
2505
  type StrctRowId = string | ((row: StrctRow) => unknown);
@@ -2531,6 +2542,8 @@ interface StrctDatagridLazyState {
2531
2542
  sortDir: SortDir;
2532
2543
  /** Active per-column filters (empty object when none). */
2533
2544
  filters: StrctDatagridFilters;
2545
+ /** The global quick-filter term ('' when none). */
2546
+ quickFilter: string;
2534
2547
  }
2535
2548
  /** Persistable user column preferences (widths from resize, hidden from the
2536
2549
  * chooser, order from drag-reorder). */
@@ -2644,6 +2657,7 @@ declare class StrctDatagrid {
2644
2657
  clearFilter: string;
2645
2658
  editCell: string;
2646
2659
  toggleChildren: string;
2660
+ quickFilter: string;
2647
2661
  }>;
2648
2662
  /**
2649
2663
  * Virtual scrolling for large data sets: only the rows inside the viewport
@@ -2687,6 +2701,17 @@ declare class StrctDatagrid {
2687
2701
  * mode it is passed through on `lazyLoad` instead.
2688
2702
  */
2689
2703
  readonly filters: _angular_core.ModelSignal<StrctDatagridFilters>;
2704
+ /**
2705
+ * Global quick filter (two-way): one term substring-matched (OR) across
2706
+ * `quickFilterFields` — the console-standard "filter this list fast" box.
2707
+ * Complementary to the per-column `filters` (which AND). Applied before
2708
+ * paging client-side; passed through on `lazyLoad` in server mode.
2709
+ */
2710
+ readonly quickFilter: _angular_core.ModelSignal<string>;
2711
+ /** Columns the quick term scans. Defaults to every column's `key`. */
2712
+ readonly quickFilterFields: _angular_core.InputSignal<string[] | null>;
2713
+ /** Render the built-in quick-filter searchbox in the toolbar. */
2714
+ readonly quickFilterable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2690
2715
  /**
2691
2716
  * Tree-grid: the row property holding a row's children array. Rows render
2692
2717
  * hierarchically with indent + carets; sorting applies per sibling level;
@@ -2784,11 +2809,23 @@ declare class StrctDatagrid {
2784
2809
  protected startEdit(row: StrctRow, col: StrctDatagridColumn): void;
2785
2810
  protected commitEdit(row: StrctRow, col: StrctDatagridColumn, event: Event): void;
2786
2811
  protected cancelEdit(event?: Event): void;
2812
+ /**
2813
+ * `singleLine` reveal: hovering a cell whose content is actually clipped
2814
+ * gets the full text as a native `title`. Hover-lazy (one delegated
2815
+ * listener, zero render cost — virtual grids pay nothing for unhovered
2816
+ * cells), covers plain and `strctCell`-templated cells alike via
2817
+ * `textContent`, and self-corrects after a column resize.
2818
+ */
2819
+ protected revealIfClipped(event: Event): void;
2787
2820
  /** Active (non-empty) filter entries. */
2788
2821
  private readonly activeFilters;
2822
+ private readonly quickTerm;
2823
+ private matchesQuick;
2789
2824
  private matchesFilters;
2790
- /** Rows surviving the per-column filters (client-side modes only). */
2825
+ /** Rows surviving the quick + per-column filters (client-side modes only). */
2791
2826
  private readonly filteredRows;
2827
+ /** "12 / 480" — shown while any client-side filtering narrows the set. */
2828
+ protected readonly filterNote: _angular_core.Signal<string | null>;
2792
2829
  /** Tree mode: flattened visible rows + per-row depth/children/expanded meta. */
2793
2830
  private readonly treeFlat;
2794
2831
  protected readonly sorted: _angular_core.Signal<StrctRow[]>;
@@ -2867,7 +2904,7 @@ declare class StrctDatagrid {
2867
2904
  private commitSelection;
2868
2905
  private compare;
2869
2906
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDatagrid, never>;
2870
- 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; }; "childrenKey": { "alias": "childrenKey"; "required": false; "isSignal": true; }; }, { "columnState": "columnStateChange"; "filters": "filtersChange"; "selectionChange": "selectionChange"; "syncChange": "syncChange"; "rowAction": "rowAction"; "lazyLoad": "lazyLoad"; "cellEdit": "cellEdit"; }, ["detailDef", "actionBarDef", "cellDefs"], ["[strctDatagridActionBar]"], true, never>;
2907
+ 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>;
2871
2908
  }
2872
2909
 
2873
2910
  /** Timeline node state colors. */
@@ -3738,6 +3775,8 @@ declare class StrctTimeRangePicker {
3738
3775
  readonly presets: _angular_core.InputSignal<StrctTimeRangePreset[]>;
3739
3776
  /** Popover alignment, as in strct-dropdown. */
3740
3777
  readonly align: _angular_core.InputSignal<"end" | "start">;
3778
+ /** Trigger size — match it to the toolbar's buttons (sm strips). */
3779
+ readonly size: _angular_core.InputSignal<"md" | "sm">;
3741
3780
  /** Localizable strings. */
3742
3781
  readonly dialogLabel: _angular_core.InputSignal<string>;
3743
3782
  readonly quickLabel: _angular_core.InputSignal<string>;
@@ -3762,7 +3801,7 @@ declare class StrctTimeRangePicker {
3762
3801
  private toLocal;
3763
3802
  private formatStamp;
3764
3803
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctTimeRangePicker, never>;
3765
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTimeRangePicker, "strct-time-range", never, { "range": { "alias": "range"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "dialogLabel": { "alias": "dialogLabel"; "required": false; "isSignal": true; }; "quickLabel": { "alias": "quickLabel"; "required": false; "isSignal": true; }; "absoluteLabel": { "alias": "absoluteLabel"; "required": false; "isSignal": true; }; "fromLabel": { "alias": "fromLabel"; "required": false; "isSignal": true; }; "toLabel": { "alias": "toLabel"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "invalidLabel": { "alias": "invalidLabel"; "required": false; "isSignal": true; }; "placeholderLabel": { "alias": "placeholderLabel"; "required": false; "isSignal": true; }; }, { "range": "rangeChange"; "applied": "applied"; }, never, never, true, never>;
3804
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctTimeRangePicker, "strct-time-range", never, { "range": { "alias": "range"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "dialogLabel": { "alias": "dialogLabel"; "required": false; "isSignal": true; }; "quickLabel": { "alias": "quickLabel"; "required": false; "isSignal": true; }; "absoluteLabel": { "alias": "absoluteLabel"; "required": false; "isSignal": true; }; "fromLabel": { "alias": "fromLabel"; "required": false; "isSignal": true; }; "toLabel": { "alias": "toLabel"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "invalidLabel": { "alias": "invalidLabel"; "required": false; "isSignal": true; }; "placeholderLabel": { "alias": "placeholderLabel"; "required": false; "isSignal": true; }; }, { "range": "rangeChange"; "applied": "applied"; }, never, never, true, never>;
3766
3805
  }
3767
3806
 
3768
3807
  /** A log line: plain text plus an optional severity for tinting. */