@akcelik/strct 5.18.0 → 5.19.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": "5.18.0",
3
+ "version": "5.19.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",
@@ -3084,6 +3084,12 @@ declare class StrctCheckbox implements ControlValueAccessor {
3084
3084
  * the name. `[strctControlDescription]` projects one with markup in it.
3085
3085
  */
3086
3086
  readonly description: _angular_core.InputSignal<string>;
3087
+ /**
3088
+ * Takes the box out of the tab order (`-1`) where something around it owns
3089
+ * the keyboard — a datagrid in grid mode roves its rows and reaches the box
3090
+ * with the arrows. `null` leaves the native order alone.
3091
+ */
3092
+ readonly tabIndex: _angular_core.InputSignal<number | null>;
3087
3093
  private readonly n;
3088
3094
  protected readonly descId: string;
3089
3095
  protected readonly labelId: string;
@@ -3105,7 +3111,7 @@ declare class StrctCheckbox implements ControlValueAccessor {
3105
3111
  registerOnTouched(fn: () => void): void;
3106
3112
  setDisabledState(isDisabled: boolean): void;
3107
3113
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctCheckbox, never>;
3108
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCheckbox, "strct-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, ["projected"], ["[strctControlDescription]", "*"], true, never>;
3114
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctCheckbox, "strct-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "tabIndex": { "alias": "tabIndex"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; }, ["projected"], ["[strctControlDescription]", "*"], true, never>;
3109
3115
  }
3110
3116
 
3111
3117
  /** On/off switch. Works with `[(ngModel)]` / reactive forms. */
@@ -4633,6 +4639,29 @@ declare class StrctDatagrid {
4633
4639
  * Tab walks the interactive elements inside each row as usual.
4634
4640
  */
4635
4641
  readonly childrenKey: _angular_core.InputSignal<string | null>;
4642
+ /**
4643
+ * `'table'` (the default) is what the grid has always been: a table whose
4644
+ * controls each take a tab stop. `'grid'` is the APG grid: the table claims
4645
+ * `role="grid"`, the rows carry a roving tabindex so the whole grid is **one**
4646
+ * tab stop, ↑/↓ move the cursor, Home/End jump, →/← step through the focused
4647
+ * row's own controls and Escape comes back out, Space picks and Enter
4648
+ * activates. It also makes a selected row say so — `aria-selected` on a row
4649
+ * reaches no screen reader outside a grid.
4650
+ *
4651
+ * Opt-in, because it changes what Tab does inside the table.
4652
+ */
4653
+ readonly interactionMode: _angular_core.InputSignal<"grid" | "table">;
4654
+ /**
4655
+ * `'none'` hides the tick / radio column while selection keeps working — a
4656
+ * file list selects by clicking the row, not a control in it. The row is
4657
+ * then the control, so pair it with `interactionMode="grid"`.
4658
+ */
4659
+ readonly selectionColumn: _angular_core.InputSignal<"none" | "auto">;
4660
+ /**
4661
+ * The row was opened: a double-click, or Enter on the focused row in grid
4662
+ * mode. Selection is "which rows do I mean"; activation is "go".
4663
+ */
4664
+ readonly rowActivate: _angular_core.OutputEmitterRef<StrctRow>;
4636
4665
  /** Emitted when the selection changes. */
4637
4666
  readonly selectionChange: _angular_core.OutputEmitterRef<StrctRow[]>;
4638
4667
  /** Emitted when the refresh button is clicked. */
@@ -4752,6 +4781,20 @@ declare class StrctDatagrid {
4752
4781
  private readonly activeTreeRow;
4753
4782
  protected treeRowTabindex(row: StrctRow): number;
4754
4783
  protected onTreeRowKeydown(row: StrctRow, event: KeyboardEvent): void;
4784
+ /** The row the grid's single tab stop is on. */
4785
+ private readonly cursorRow;
4786
+ protected gridRowTabindex(row: StrctRow): number;
4787
+ /** The focused row's own controls, in the order the arrows visit them. */
4788
+ private rowControls;
4789
+ protected onGridRowKeydown(row: StrctRow, event: KeyboardEvent): void;
4790
+ /** Move the cursor to the row at `idx` and focus it once it has rendered. */
4791
+ private focusGridRow;
4792
+ /**
4793
+ * "Go": a double-click, or Enter on the focused row. It opens the detail
4794
+ * pane where there is one — a row click that shows the row is what every
4795
+ * console does — and always tells the consumer.
4796
+ */
4797
+ protected onRowActivate(row: StrctRow): void;
4755
4798
  /** Move the roving tabindex to the row at `idx` and focus its element once
4756
4799
  * the new tabindex has rendered. */
4757
4800
  private focusTreeRow;
@@ -4881,6 +4924,13 @@ declare class StrctDatagrid {
4881
4924
  /** `selectionMode` wins; `selectable` is the pre-4.8 spelling of 'multiple'. */
4882
4925
  protected readonly mode: _angular_core.Signal<"none" | "multiple" | "single">;
4883
4926
  protected readonly hasSelectionColumn: _angular_core.Signal<boolean>;
4927
+ /** The grid interaction model, opt-in. */
4928
+ protected readonly gridMode: _angular_core.Signal<boolean>;
4929
+ /**
4930
+ * In grid mode the row is the tab stop and its controls are reached with the
4931
+ * arrows, so they leave the tab order; in table mode nothing changes.
4932
+ */
4933
+ protected ctlTabindex(): number | null;
4884
4934
  /** One radio group per grid instance. */
4885
4935
  protected readonly radioName: string;
4886
4936
  /**
@@ -5019,7 +5069,7 @@ declare class StrctDatagrid {
5019
5069
  private compareRows;
5020
5070
  private compare;
5021
5071
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDatagrid, never>;
5022
- 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; }; "paneListWidth": { "alias": "paneListWidth"; "required": false; "isSignal": true; }; "paneTakeoverWidth": { "alias": "paneTakeoverWidth"; "required": false; "isSignal": true; }; "activeRowId": { "alias": "activeRowId"; "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; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "selectedId": { "alias": "selectedId"; "required": false; "isSignal": true; }; "rowSelectable": { "alias": "rowSelectable"; "required": false; "isSignal": true; }; "flush": { "alias": "flush"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "paging": { "alias": "paging"; "required": false; "isSignal": true; }; "hasMore": { "alias": "hasMore"; "required": false; "isSignal": true; }; "loadingMore": { "alias": "loadingMore"; "required": false; "isSignal": true; }; "moreTotal": { "alias": "moreTotal"; "required": false; "isSignal": true; }; "groupSelect": { "alias": "groupSelect"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "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; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "editHint": { "alias": "editHint"; "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; }; "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "showEmptyGroups": { "alias": "showEmptyGroups"; "required": false; "isSignal": true; }; "collapsedGroups": { "alias": "collapsedGroups"; "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; }; }, { "activeRowId": "activeRowIdChange"; "selectedId": "selectedIdChange"; "loadMore": "loadMore"; "selectedIds": "selectedIdsChange"; "columnState": "columnStateChange"; "collapsedGroups": "collapsedGroupsChange"; "filters": "filtersChange"; "quickFilter": "quickFilterChange"; "selectionChange": "selectionChange"; "syncChange": "syncChange"; "rowAction": "rowAction"; "lazyLoad": "lazyLoad"; "cellEdit": "cellEdit"; }, ["detailDef", "groupHeaderDef", "paneTitleDef", "actionBarDef", "actionBarCaptionDef", "cellDefs"], ["[strctDatagridActionBarCaption]", "[strctDatagridActionBar]", "[strctDetailPaneTitle]", "[strctDetailPaneMeta]", "[strctDetailPaneActions]"], true, never>;
5072
+ 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; }; "paneListWidth": { "alias": "paneListWidth"; "required": false; "isSignal": true; }; "paneTakeoverWidth": { "alias": "paneTakeoverWidth"; "required": false; "isSignal": true; }; "activeRowId": { "alias": "activeRowId"; "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; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "selectedId": { "alias": "selectedId"; "required": false; "isSignal": true; }; "rowSelectable": { "alias": "rowSelectable"; "required": false; "isSignal": true; }; "flush": { "alias": "flush"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "paging": { "alias": "paging"; "required": false; "isSignal": true; }; "hasMore": { "alias": "hasMore"; "required": false; "isSignal": true; }; "loadingMore": { "alias": "loadingMore"; "required": false; "isSignal": true; }; "moreTotal": { "alias": "moreTotal"; "required": false; "isSignal": true; }; "groupSelect": { "alias": "groupSelect"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "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; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "editHint": { "alias": "editHint"; "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; }; "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "showEmptyGroups": { "alias": "showEmptyGroups"; "required": false; "isSignal": true; }; "collapsedGroups": { "alias": "collapsedGroups"; "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; }; "interactionMode": { "alias": "interactionMode"; "required": false; "isSignal": true; }; "selectionColumn": { "alias": "selectionColumn"; "required": false; "isSignal": true; }; }, { "activeRowId": "activeRowIdChange"; "selectedId": "selectedIdChange"; "loadMore": "loadMore"; "selectedIds": "selectedIdsChange"; "columnState": "columnStateChange"; "collapsedGroups": "collapsedGroupsChange"; "filters": "filtersChange"; "quickFilter": "quickFilterChange"; "rowActivate": "rowActivate"; "selectionChange": "selectionChange"; "syncChange": "syncChange"; "rowAction": "rowAction"; "lazyLoad": "lazyLoad"; "cellEdit": "cellEdit"; }, ["detailDef", "groupHeaderDef", "paneTitleDef", "actionBarDef", "actionBarCaptionDef", "cellDefs"], ["[strctDatagridActionBarCaption]", "[strctDatagridActionBar]", "[strctDetailPaneTitle]", "[strctDetailPaneMeta]", "[strctDetailPaneActions]"], true, never>;
5023
5073
  }
5024
5074
 
5025
5075
  /** Timeline node state colors. */