@akcelik/strct 4.7.0 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akcelik/strct",
3
- "version": "4.7.0",
3
+ "version": "4.8.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",
@@ -3413,6 +3413,8 @@ interface StrctDatagridLabels {
3413
3413
  /** Row-checkbox label factory: receives the row's id (`rowId`) or its
3414
3414
  * 1-based index, so every row's checkbox gets a distinct name. */
3415
3415
  selectRowFor: (id: string) => string;
3416
+ /** Label of a group header's select-all checkbox (`groupSelect`). */
3417
+ selectAllInGroup: (group: string) => string;
3416
3418
  openDetail: string;
3417
3419
  toggleDetail: string;
3418
3420
  closeDetail: string;
@@ -3555,6 +3557,23 @@ declare class StrctDatagrid {
3555
3557
  * that replace the row objects. Defaults to object identity.
3556
3558
  */
3557
3559
  readonly rowId: _angular_core.InputSignal<StrctRowId | null>;
3560
+ /**
3561
+ * How many rows a user may pick. `selectable` remains the boolean for
3562
+ * `multiple`, so nothing changes for a grid that already uses it; picking
3563
+ * exactly one row is grid behaviour rather than a column of radios the
3564
+ * consumer builds and wires by hand.
3565
+ */
3566
+ readonly selectionMode: _angular_core.InputSignal<"none" | "multiple" | "single">;
3567
+ /** Two-way single selection: the row id (per `rowId`), or null. */
3568
+ readonly selectedId: _angular_core.ModelSignal<unknown>;
3569
+ /**
3570
+ * Whether a row may be picked. Return `false` to lock it, or a string to lock
3571
+ * it AND say why — shown as the row's tooltip and given to assistive tech as
3572
+ * the control's description, following the `hint` convention.
3573
+ */
3574
+ readonly rowSelectable: _angular_core.InputSignal<((row: StrctRow) => boolean | string) | null>;
3575
+ /** With `groupBy` and multiple selection: a tri-state checkbox per group. */
3576
+ readonly groupSelect: _angular_core.InputSignalWithTransform<boolean, unknown>;
3558
3577
  /**
3559
3578
  * Per-row action menu resolver. When set, each row gets a trailing actions
3560
3579
  * column with a vertical-dots (kebab) button that opens this row's menu.
@@ -3578,6 +3597,7 @@ declare class StrctDatagrid {
3578
3597
  selectAll: string;
3579
3598
  selectRow: string;
3580
3599
  selectRowFor: (id: string) => string;
3600
+ selectAllInGroup: (group: string) => string;
3581
3601
  openDetail: string;
3582
3602
  toggleDetail: string;
3583
3603
  closeDetail: string;
@@ -3825,6 +3845,27 @@ declare class StrctDatagrid {
3825
3845
  protected readonly somePageSelected: _angular_core.Signal<boolean>;
3826
3846
  /** Dev-mode check that row identities can do their job (see util/dev-warn). */
3827
3847
  private diagnoseIdentity;
3848
+ /** `selectionMode` wins; `selectable` is the pre-4.8 spelling of 'multiple'. */
3849
+ protected readonly mode: _angular_core.Signal<"none" | "multiple" | "single">;
3850
+ protected readonly hasSelectionColumn: _angular_core.Signal<boolean>;
3851
+ /** One radio group per grid instance. */
3852
+ protected readonly radioName: string;
3853
+ /**
3854
+ * Why a row cannot be picked: `null` when it can, `''` when it cannot with no
3855
+ * reason given, or the reason. A locked row keeps its normal colours — a
3856
+ * locked candidate is still worth reading — and stays reachable, so the
3857
+ * reason can be read.
3858
+ */
3859
+ lockedReason(row: StrctRow): string | null;
3860
+ /** Click anywhere on the row picks it, in single mode only. */
3861
+ protected onRowPick(row: StrctRow): void;
3862
+ /** Pick exactly this row. `selectionChange` still fires, with one element. */
3863
+ selectSingle(row: StrctRow): void;
3864
+ /** Rows of one group that are actually pickable. */
3865
+ private groupRows;
3866
+ protected groupAllSelected(key: unknown): boolean;
3867
+ protected groupSomeSelected(key: unknown): boolean;
3868
+ protected toggleGroupSelection(key: unknown): void;
3828
3869
  /** Resolve a row's stable identity: its `rowId` value, or the row object
3829
3870
  * itself when there is no `rowId` or it resolves to null/undefined. */
3830
3871
  private idOf;
@@ -3900,7 +3941,7 @@ declare class StrctDatagrid {
3900
3941
  private commitSelection;
3901
3942
  private compare;
3902
3943
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<StrctDatagrid, never>;
3903
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<StrctDatagrid, "strct-datagrid", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": true; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "detailPane": { "alias": "detailPane"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "singleLine": { "alias": "singleLine"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "columnChooser": { "alias": "columnChooser"; "required": false; "isSignal": true; }; "sync": { "alias": "sync"; "required": false; "isSignal": true; }; "footerActionsDisabled": { "alias": "footerActionsDisabled"; "required": false; "isSignal": true; }; "rowId": { "alias": "rowId"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "initialSelection": { "alias": "initialSelection"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "virtual": { "alias": "virtual"; "required": false; "isSignal": true; }; "viewportHeight": { "alias": "viewportHeight"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "total": { "alias": "total"; "required": false; "isSignal": true; }; "stateKey": { "alias": "stateKey"; "required": false; "isSignal": true; }; "columnState": { "alias": "columnState"; "required": false; "isSignal": true; }; "reorderable": { "alias": "reorderable"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "quickFilter": { "alias": "quickFilter"; "required": false; "isSignal": true; }; "quickFilterFields": { "alias": "quickFilterFields"; "required": false; "isSignal": true; }; "quickFilterable": { "alias": "quickFilterable"; "required": false; "isSignal": true; }; "quickFilterAlign": { "alias": "quickFilterAlign"; "required": false; "isSignal": true; }; "childrenKey": { "alias": "childrenKey"; "required": false; "isSignal": true; }; }, { "columnState": "columnStateChange"; "filters": "filtersChange"; "quickFilter": "quickFilterChange"; "selectionChange": "selectionChange"; "syncChange": "syncChange"; "rowAction": "rowAction"; "lazyLoad": "lazyLoad"; "cellEdit": "cellEdit"; }, ["detailDef", "actionBarDef", "cellDefs"], ["[strctDatagridActionBarCaption]", "[strctDatagridActionBar]"], true, never>;
3944
+ 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; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "selectedId": { "alias": "selectedId"; "required": false; "isSignal": true; }; "rowSelectable": { "alias": "rowSelectable"; "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; }; "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; }; }, { "selectedId": "selectedIdChange"; "columnState": "columnStateChange"; "filters": "filtersChange"; "quickFilter": "quickFilterChange"; "selectionChange": "selectionChange"; "syncChange": "syncChange"; "rowAction": "rowAction"; "lazyLoad": "lazyLoad"; "cellEdit": "cellEdit"; }, ["detailDef", "actionBarDef", "cellDefs"], ["[strctDatagridActionBarCaption]", "[strctDatagridActionBar]"], true, never>;
3904
3945
  }
3905
3946
 
3906
3947
  /** Timeline node state colors. */