@hashicorp/design-system-components 6.4.0 → 6.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.
- package/component-catalog.json +13139 -0
- package/declarations/components/hds/advanced-table/column-manager/index.d.ts +5 -7
- package/declarations/components/hds/advanced-table/column-manager/width.d.ts +17 -20
- package/declarations/components/hds/advanced-table/index.d.ts +3 -2
- package/declarations/components/hds/advanced-table/th-context-menu.d.ts +2 -1
- package/declarations/components/hds/advanced-table/th-resize-handle.d.ts +8 -19
- package/declarations/components/hds/advanced-table/th.d.ts +5 -19
- package/declarations/components/hds/advanced-table/tr.d.ts +3 -0
- package/declarations/components/hds/advanced-table/types.d.ts +1 -1
- package/declarations/components/hds/advanced-table/utils.d.ts +1 -0
- package/declarations/components/hds/composite/index.d.ts +1 -0
- package/declarations/components/hds/icon/index.d.ts +1 -1
- package/declarations/components/hds/segmented-group/index.d.ts +13 -3
- package/declarations/components/hds/stepper/task/indicator.d.ts +1 -1
- package/declarations/components/hds/table/index.d.ts +1 -0
- package/declarations/components/hds/table/tr.d.ts +4 -0
- package/dist/components/hds/advanced-table/column-manager/index.js +1 -1
- package/dist/components/hds/advanced-table/column-manager/index.js.map +1 -1
- package/dist/components/hds/advanced-table/column-manager/order.js +2 -1
- package/dist/components/hds/advanced-table/column-manager/order.js.map +1 -1
- package/dist/components/hds/advanced-table/column-manager/width.js +96 -183
- package/dist/components/hds/advanced-table/column-manager/width.js.map +1 -1
- package/dist/components/hds/advanced-table/index.js +1 -1
- package/dist/components/hds/advanced-table/th-context-menu.js +14 -7
- package/dist/components/hds/advanced-table/th-context-menu.js.map +1 -1
- package/dist/components/hds/advanced-table/th-reorder-drop-target.js +1 -1
- package/dist/components/hds/advanced-table/th-resize-handle.js +1 -1
- package/dist/components/hds/advanced-table/th-selectable.js +1 -1
- package/dist/components/hds/advanced-table/th.js +1 -1
- package/dist/components/hds/advanced-table/tr.js +3 -1
- package/dist/components/hds/advanced-table/tr.js.map +1 -1
- package/dist/components/hds/advanced-table/types.js.map +1 -1
- package/dist/components/hds/advanced-table/utils.js +8 -1
- package/dist/components/hds/advanced-table/utils.js.map +1 -1
- package/dist/components/hds/composite/index.js +6 -0
- package/dist/components/hds/composite/index.js.map +1 -1
- package/dist/components/hds/filter-bar/index.js +1 -1
- package/dist/components/hds/filter-bar/index.js.map +1 -1
- package/dist/components/hds/segmented-group/index.js +36 -13
- package/dist/components/hds/segmented-group/index.js.map +1 -1
- package/dist/components/hds/stepper/list/step.js +6 -2
- package/dist/components/hds/stepper/list/step.js.map +1 -1
- package/dist/components/hds/stepper/nav/step.js +6 -2
- package/dist/components/hds/stepper/nav/step.js.map +1 -1
- package/dist/components/hds/table/index.js +9 -0
- package/dist/components/hds/table/index.js.map +1 -1
- package/dist/components/hds/table/tr.js +27 -15
- package/dist/components/hds/table/tr.js.map +1 -1
- package/dist/components.js +1 -1
- package/dist/{index-DtMB-P9m.js → index-Cx64Nvu4.js} +111 -226
- package/dist/index-Cx64Nvu4.js.map +1 -0
- package/dist/modifiers/hds-scroll-into-view-on-focus.js +4 -0
- package/dist/modifiers/hds-scroll-into-view-on-focus.js.map +1 -1
- package/dist/styles/@hashicorp/design-system-components.css +86 -22
- package/dist/styles/@hashicorp/design-system-components.css.map +1 -1
- package/dist/styles/components/advanced-table.scss +4 -1
- package/dist/styles/components/badge-count.scss +1 -1
- package/dist/styles/components/badge.scss +1 -1
- package/dist/styles/components/filter-bar.scss +10 -2
- package/dist/styles/components/form/character-count.scss +1 -1
- package/dist/styles/components/form/error.scss +1 -1
- package/dist/styles/components/form/helper-text.scss +1 -1
- package/dist/styles/components/form/indicator.scss +1 -1
- package/dist/styles/components/form/label.scss +1 -1
- package/dist/styles/components/form/legend.scss +1 -1
- package/dist/styles/components/icon-tile.scss +1 -1
- package/dist/styles/components/link/standalone.scss +1 -1
- package/dist/styles/components/segmented-group.scss +43 -6
- package/dist/styles/components/tag.scss +1 -1
- package/package.json +7 -4
- package/translations/hds/components/stepper/en-us.yaml +1 -0
- package/dist/index-DtMB-P9m.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/advanced-table/column-manager/index.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { cached } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { TrackedMap } from 'tracked-built-ins';\nimport { hash } from '@ember/helper';\n\nimport HdsAdvancedTableColumnManagerWidth from './width.gts';\nimport HdsAdvancedTableColumnManagerOrder from './order.gts';\n\nimport type { ModifierLike } from '@glint/template';\nimport type { HdsAdvancedTableSyncWidthValuesSignature } from './width.gts';\nimport type { HdsAdvancedTableSyncColumnOrderSignature } from './order.gts';\nimport type {\n HdsAdvancedTableColumn,\n HdsAdvancedTableColumnReorderSide,\n HdsAdvancedTableNormalizedColumn,\n} from '../types.ts';\nimport type { HdsAdvancedTableSignature } from '../index.gts';\n\nexport interface HdsAdvancedTableSyncThElementsSignature {\n Element: HTMLDivElement;\n Args: {\n Positional: [HdsAdvancedTableColumn['key']];\n };\n}\n\nexport interface HdsAdvancedTableColumnManagerSignature {\n Args: {\n columns: HdsAdvancedTableColumn[];\n columnOrder: HdsAdvancedTableSignature['Args']['columnOrder'];\n hasReorderableColumns?: HdsAdvancedTableSignature['Args']['hasReorderableColumns'];\n hasStickyFirstColumn?: HdsAdvancedTableSignature['Args']['hasStickyFirstColumn'];\n isSelectable?: HdsAdvancedTableSignature['Args']['isSelectable'];\n onColumnReorder: HdsAdvancedTableSignature['Args']['onColumnReorder'];\n };\n Blocks: {\n default: [\n {\n columns: HdsAdvancedTableNormalizedColumn[];\n columnOrder: HdsAdvancedTableSignature['Args']['columnOrder'];\n draggedColumnKey: HdsAdvancedTableNormalizedColumn['key'] | null;\n firstColumnKey: HdsAdvancedTableNormalizedColumn['key'] | undefined;\n firstNonStickyColumnKey:\n | HdsAdvancedTableNormalizedColumn['key']\n | undefined;\n gridTemplateColumns: string;\n lastColumnKey: HdsAdvancedTableNormalizedColumn['key'] | undefined;\n orderedColumns: HdsAdvancedTableNormalizedColumn[];\n reorderHoveredColumnKey: HdsAdvancedTableNormalizedColumn['key'] | null;\n syncColumnOrder: ModifierLike<HdsAdvancedTableSyncColumnOrderSignature>;\n syncThElements: ModifierLike<HdsAdvancedTableSyncThElementsSignature>;\n syncWidthValues: ModifierLike<HdsAdvancedTableSyncWidthValuesSignature>;\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/advanced-table/column-manager/index.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { cached } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { TrackedMap } from 'tracked-built-ins';\nimport { hash } from '@ember/helper';\n\nimport HdsAdvancedTableColumnManagerWidth from './width.gts';\nimport HdsAdvancedTableColumnManagerOrder from './order.gts';\n\nimport type { ModifierLike } from '@glint/template';\nimport type { HdsAdvancedTableSyncWidthValuesSignature } from './width.gts';\nimport type { HdsAdvancedTableSyncColumnOrderSignature } from './order.gts';\nimport type {\n HdsAdvancedTableColumn,\n HdsAdvancedTableColumnReorderSide,\n HdsAdvancedTableNormalizedColumn,\n HdsAdvancedTablePixelString,\n} from '../types.ts';\nimport type { HdsAdvancedTableSignature } from '../index.gts';\n\nexport interface HdsAdvancedTableSyncThElementsSignature {\n Element: HTMLDivElement;\n Args: {\n Positional: [HdsAdvancedTableColumn['key']];\n };\n}\n\nexport interface HdsAdvancedTableColumnManagerSignature {\n Args: {\n columns: HdsAdvancedTableColumn[];\n columnOrder: HdsAdvancedTableSignature['Args']['columnOrder'];\n hasReorderableColumns?: HdsAdvancedTableSignature['Args']['hasReorderableColumns'];\n hasStickyFirstColumn?: HdsAdvancedTableSignature['Args']['hasStickyFirstColumn'];\n isSelectable?: HdsAdvancedTableSignature['Args']['isSelectable'];\n onColumnReorder: HdsAdvancedTableSignature['Args']['onColumnReorder'];\n };\n Blocks: {\n default: [\n {\n columns: HdsAdvancedTableNormalizedColumn[];\n columnOrder: HdsAdvancedTableSignature['Args']['columnOrder'];\n draggedColumnKey: HdsAdvancedTableNormalizedColumn['key'] | null;\n firstColumnKey: HdsAdvancedTableNormalizedColumn['key'] | undefined;\n firstNonStickyColumnKey:\n | HdsAdvancedTableNormalizedColumn['key']\n | undefined;\n gridTemplateColumns: string;\n lastColumnKey: HdsAdvancedTableNormalizedColumn['key'] | undefined;\n orderedColumns: HdsAdvancedTableNormalizedColumn[];\n reorderHoveredColumnKey: HdsAdvancedTableNormalizedColumn['key'] | null;\n syncColumnOrder: ModifierLike<HdsAdvancedTableSyncColumnOrderSignature>;\n syncThElements: ModifierLike<HdsAdvancedTableSyncThElementsSignature>;\n syncWidthValues: ModifierLike<HdsAdvancedTableSyncWidthValuesSignature>;\n beginColumnResize: () => void;\n commitColumnWidths: () => void;\n getAppliedWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => HdsAdvancedTableNormalizedColumn['width'];\n getColumnByKey: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => HdsAdvancedTableNormalizedColumn | undefined;\n getRenderedWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => HdsAdvancedTablePixelString | undefined;\n getSiblingColumnKeys: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => {\n previous?: HdsAdvancedTableNormalizedColumn['key'];\n next?: HdsAdvancedTableNormalizedColumn['key'];\n };\n moveColumnToDropTarget: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ) => void;\n moveColumnToTarget: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ) => void;\n moveColumnToTerminalPosition: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n position: 'start' | 'end'\n ) => void;\n resizeColumnByDelta: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n deltaPx: number\n ) => number;\n restoreColumnWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => void;\n setDraggedColumnKey: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n ) => void;\n setReorderHoveredColumnKey: (\n key: HdsAdvancedTableNormalizedColumn['key'] | null\n ) => void;\n resetTransientColumnWidths: () => void;\n stepColumn: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n step: number\n ) => void;\n },\n ];\n };\n}\n\nexport default class HdsAdvancedTableColumnManager extends Component<HdsAdvancedTableColumnManagerSignature> {\n thElements = new TrackedMap<string, HTMLDivElement>();\n\n syncThElements = modifier<HdsAdvancedTableSyncThElementsSignature>(\n (element, [key]) => {\n if (key !== undefined) {\n this.thElements.set(key, element);\n }\n }\n );\n\n @cached\n get normalizedColumns(): HdsAdvancedTableNormalizedColumn[] {\n return this.args.columns.map((column) => {\n return column.key !== undefined\n ? (column as HdsAdvancedTableNormalizedColumn)\n : { ...column, key: guidFor(column) };\n });\n }\n\n getColumnByKey = (\n key: HdsAdvancedTableColumn['key']\n ): HdsAdvancedTableNormalizedColumn | undefined => {\n if (key === undefined) {\n return;\n }\n\n return this.normalizedColumns.find((column) => column.key === key);\n };\n\n <template>\n <HdsAdvancedTableColumnManagerOrder\n @columns={{this.normalizedColumns}}\n @columnOrder={{@columnOrder}}\n @hasReorderableColumns={{@hasReorderableColumns}}\n @hasStickyFirstColumn={{@hasStickyFirstColumn}}\n @onColumnReorder={{@onColumnReorder}}\n @getColumnByKey={{this.getColumnByKey}}\n @thElements={{this.thElements}}\n as |Order|\n >\n <HdsAdvancedTableColumnManagerWidth\n @columns={{this.normalizedColumns}}\n @orderedColumns={{Order.orderedColumns}}\n @columnOrder={{Order.columnOrder}}\n @isSelectable={{@isSelectable}}\n @getColumnByKey={{this.getColumnByKey}}\n @thElements={{this.thElements}}\n as |Width|\n >\n {{yield\n (hash\n columns=this.normalizedColumns\n columnOrder=Order.columnOrder\n draggedColumnKey=Order.draggedColumnKey\n firstColumnKey=Order.firstColumnKey\n firstNonStickyColumnKey=Order.firstNonStickyColumnKey\n gridTemplateColumns=Width.gridTemplateColumns\n lastColumnKey=Order.lastColumnKey\n orderedColumns=Order.orderedColumns\n syncColumnOrder=Order.syncColumnOrder\n syncThElements=this.syncThElements\n syncWidthValues=Width.syncWidthValues\n beginColumnResize=Width.beginColumnResize\n resizeColumnByDelta=Width.resizeColumnByDelta\n commitColumnWidths=Width.commitColumnWidths\n getAppliedWidth=Width.getAppliedWidth\n getColumnByKey=this.getColumnByKey\n getSiblingColumnKeys=Width.getSiblingColumnKeys\n getRenderedWidth=Width.getRenderedWidth\n reorderHoveredColumnKey=Order.reorderHoveredColumnKey\n restoreColumnWidth=Width.restoreColumnWidth\n moveColumnToDropTarget=Order.moveColumnToDropTarget\n moveColumnToTarget=Order.moveColumnToTarget\n moveColumnToTerminalPosition=Order.moveColumnToTerminalPosition\n resetTransientColumnWidths=Width.resetTransientColumnWidths\n stepColumn=Order.stepColumn\n setDraggedColumnKey=Order.setDraggedColumnKey\n setReorderHoveredColumnKey=Order.setReorderHoveredColumnKey\n )\n }}\n </HdsAdvancedTableColumnManagerWidth>\n </HdsAdvancedTableColumnManagerOrder>\n </template>\n}\n"],"names":["HdsAdvancedTableColumnManager","Component","thElements","TrackedMap","syncThElements","modifier","element","key","undefined","set","normalizedColumns","args","columns","map","column","guidFor","n","prototype","cached","getColumnByKey","find","setComponentTemplate","precompileTemplate","strictMode","scope","HdsAdvancedTableColumnManagerOrder","HdsAdvancedTableColumnManagerWidth","hash"],"mappings":";;;;;;;;;;;;AAAA;;;AAGC;AA6Gc,MAAMA,sCAAsCC,SAAA,CAAU;AACnEC,EAAAA,UAAA,GAAa,IAAIC,UAAA,EAAmB;EAEpCC,cAAA,GAAiBC,QAAA,CACf,CAACC,OAAA,EAAS,CAACC,GAAA,CAAI,KAAA;IACb,IAAIA,QAAQC,SAAA,EAAW;MACrB,IAAI,CAACN,UAAU,CAACO,GAAG,CAACF,GAAA,EAAKD,OAAA,CAAA;AAC3B,IAAA;AACF,EAAA,CAAA,CAAA;EAGF,IACII,oBAAwD;IAC1D,OAAO,IAAI,CAACC,IAAI,CAACC,OAAO,CAACC,GAAG,CAAEC,MAAA,IAAA;AAC5B,MAAA,OAAOA,OAAOP,GAAG,KAAKC,YACjBM,MAAA,GACD;AAAE,QAAA,GAAGA,MAAM;QAAEP,GAAA,EAAKQ,OAAA,CAAQD,MAAA;OAAQ;AACxC,IAAA,CAAA,CAAA;AACF,EAAA;AAAA,EAAA;IAAAE,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,mBAAA,EAAA,CAPCC,MAAA,CAAA,CAAA;AAAA;EASDC,cAAA,GACEZ,GAA4B,IACiB;IAC7C,IAAIA,QAAQC,SAAA,EAAW;AACrB,MAAA;AACF,IAAA;AAEA,IAAA,OAAO,IAAI,CAACE,iBAAiB,CAACU,IAAI,CAAEN,MAAA,IAAWA,MAAA,CAAOP,GAAG,KAAKA,GAAA,CAAA;EAChE,CAAA;AAEA,EAAA;IAAAc,oBAAA,CAAAC,kBAAA,CAAA,+zDAAA,EAqDA;MAAAC,UAAA,EAAA,IAAA;AAAAC,MAAAA,KAAA,EAAAA,OAAA;QAAAC,kCAAA;QAAAC,kCAAA;AAAAC,QAAAA;AAAA,OAAA;KAAU,CAAA,EAAV,IAAW,CAAA;AAAD;AACZ;;;;"}
|
|
@@ -7,6 +7,7 @@ import { tracked } from '@glimmer/tracking';
|
|
|
7
7
|
import { modifier } from 'ember-modifier';
|
|
8
8
|
import 'tracked-built-ins';
|
|
9
9
|
import { HdsAdvancedTableColumnReorderSideValues } from '../types.js';
|
|
10
|
+
import { requestAnimationFrameWaiter } from '../utils.js';
|
|
10
11
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
11
12
|
import { setComponentTemplate } from '@ember/component';
|
|
12
13
|
import { g, i } from 'decorator-transforms/runtime';
|
|
@@ -159,7 +160,7 @@ class HdsAdvancedTableColumnManagerOrder extends Component {
|
|
|
159
160
|
updated.splice(adjustedIndex, 0, sourceColumnKey); // Insert at new position
|
|
160
161
|
this.columnOrder = updated;
|
|
161
162
|
// we need to wait until the reposition has finished
|
|
162
|
-
|
|
163
|
+
requestAnimationFrameWaiter(() => {
|
|
163
164
|
const thElement = this.args.thElements.get(sourceColumnKey);
|
|
164
165
|
if (thElement === undefined) {
|
|
165
166
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"order.js","sources":["../../../../../src/components/hds/advanced-table/column-manager/order.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { fn, hash } from '@ember/helper';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { scheduleOnce } from '@ember/runloop';\nimport { tracked } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { TrackedMap } from 'tracked-built-ins';\nimport { HdsAdvancedTableColumnReorderSideValues } from '../types.ts';\n\nimport type {\n HdsAdvancedTableColumnReorderCallback,\n HdsAdvancedTableColumnReorderSide,\n HdsAdvancedTableNormalizedColumn,\n} from '../types.ts';\nimport type { ModifierLike } from '@glint/template';\n\nexport interface HdsAdvancedTableSyncColumnOrderSignature {\n Element: HTMLDivElement;\n Args: {\n Positional: [HdsAdvancedTableNormalizedColumn[], string[] | undefined];\n };\n}\n\ninterface HdsAdvancedTableColumnManagerOrderSignature {\n Args: {\n columns: HdsAdvancedTableNormalizedColumn[];\n columnOrder: string[] | undefined;\n hasReorderableColumns?: boolean;\n hasStickyFirstColumn?: boolean;\n onColumnReorder: HdsAdvancedTableColumnReorderCallback | undefined;\n getColumnByKey: (\n key: string\n ) => HdsAdvancedTableNormalizedColumn | undefined;\n thElements: TrackedMap<string, HTMLDivElement>;\n };\n Blocks: {\n default: [\n {\n orderedColumns: HdsAdvancedTableNormalizedColumn[];\n columnOrder: string[];\n draggedColumnKey: string | null;\n reorderHoveredColumnKey: string | null;\n firstColumnKey: string | undefined;\n firstNonStickyColumnKey: string | undefined;\n lastColumnKey: string | undefined;\n syncColumnOrder: ModifierLike<HdsAdvancedTableSyncColumnOrderSignature>;\n moveColumnToDropTarget: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ) => void;\n moveColumnToTarget: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ) => void;\n moveColumnToTerminalPosition: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n position: 'start' | 'end'\n ) => void;\n stepColumn: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n step: number\n ) => void;\n setDraggedColumnKey: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n ) => void;\n setReorderHoveredColumnKey: (\n key: HdsAdvancedTableNormalizedColumn['key'] | null\n ) => void;\n },\n ];\n };\n}\n\nexport default class HdsAdvancedTableColumnManagerOrder extends Component<HdsAdvancedTableColumnManagerOrderSignature> {\n @tracked draggedColumnKey: HdsAdvancedTableNormalizedColumn['key'] | null =\n null;\n @tracked reorderHoveredColumnKey:\n | HdsAdvancedTableNormalizedColumn['key']\n | null = null;\n @tracked private _columnOrder: string[] = [];\n\n syncColumnOrder = modifier<HdsAdvancedTableSyncColumnOrderSignature>(\n (_element, [columns, columnOrder]) => {\n const columnKeys = columns.map((column) => this._getColumnKey(column));\n\n let nextOrder = this._columnOrder;\n\n if (columnOrder !== undefined) {\n const visibleSet = new Set(columnOrder);\n const hiddenKeys = nextOrder.filter((key) => !visibleSet.has(key));\n\n const reordered: string[] = [];\n\n let visibleIdx = 0;\n let hiddenIdx = 0;\n\n for (let i = 0; i < nextOrder.length; i++) {\n if (hiddenKeys.includes(nextOrder[i]!)) {\n reordered.push(hiddenKeys[hiddenIdx++]!);\n } else {\n reordered.push(columnOrder[visibleIdx++]!);\n }\n }\n\n nextOrder = reordered;\n }\n\n const missingKeys = columnKeys.filter((key) => !nextOrder.includes(key));\n\n if (missingKeys.length > 0) {\n nextOrder = [...nextOrder, ...missingKeys];\n }\n\n const isSame =\n nextOrder.length === this._columnOrder.length &&\n nextOrder.every((value, index) => value === this._columnOrder[index]);\n\n const setColumnOrder = () => (this.columnOrder = nextOrder);\n\n if (!isSame) {\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, setColumnOrder);\n }\n }\n );\n\n get columnOrder(): string[] {\n return this._columnOrder.length > 0\n ? this._columnOrder\n : this.args.columns.map((column) => this._getColumnKey(column));\n }\n set columnOrder(value: string[]) {\n this._columnOrder = value;\n }\n\n get visibleColumnOrder(): string[] {\n const visibleKeys = new Set(\n this.args.columns.map((column) => this._getColumnKey(column))\n );\n\n return this._columnOrder.filter((key) => visibleKeys.has(key));\n }\n\n get orderedColumns(): HdsAdvancedTableNormalizedColumn[] {\n const { hasReorderableColumns, columns } = this.args;\n\n if (hasReorderableColumns && this.columnOrder !== undefined) {\n const columnMap = new Map(columns.map((column) => [column.key, column]));\n\n return this.columnOrder.reduce<HdsAdvancedTableNormalizedColumn[]>(\n (acc, key) => {\n const column = columnMap.get(key);\n\n if (column !== undefined) {\n acc.push(column);\n }\n\n return acc;\n },\n []\n );\n } else {\n return columns;\n }\n }\n\n get firstColumnKey(): HdsAdvancedTableNormalizedColumn['key'] | undefined {\n const firstColumn = this.orderedColumns[0];\n\n return firstColumn?.key;\n }\n\n get firstNonStickyColumnIndex(): number {\n return this.args.hasStickyFirstColumn ? 1 : 0;\n }\n\n get firstNonStickyColumnKey():\n | HdsAdvancedTableNormalizedColumn['key']\n | undefined {\n const firstNonStickyColumn =\n this.orderedColumns[this.firstNonStickyColumnIndex];\n\n return firstNonStickyColumn?.key;\n }\n\n get lastColumnKey(): HdsAdvancedTableNormalizedColumn['key'] | undefined {\n const lastColumn = this.orderedColumns[this.orderedColumns.length - 1];\n\n return lastColumn?.key;\n }\n\n moveColumnToTerminalPosition = (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n position: 'start' | 'end'\n ): void => {\n let targetColumnKey: HdsAdvancedTableNormalizedColumn['key'];\n let side: HdsAdvancedTableColumnReorderSide;\n\n const lastColumn = this.orderedColumns[this.orderedColumns.length - 1];\n\n if (\n this.firstNonStickyColumnKey === undefined ||\n lastColumn === undefined\n ) {\n return;\n }\n\n if (position === 'start') {\n targetColumnKey = this.firstNonStickyColumnKey;\n side = HdsAdvancedTableColumnReorderSideValues.Left;\n } else {\n targetColumnKey = lastColumn.key!;\n side = HdsAdvancedTableColumnReorderSideValues.Right;\n }\n\n // Move the column to the target position\n this.moveColumnToTarget(columnKey, targetColumnKey, side);\n };\n\n stepColumn = (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n step: number\n ): void => {\n const oldIndex = this.columnOrder.indexOf(columnKey);\n const newIndex = oldIndex + step;\n\n // Check if the new position is within the array bounds.\n if (\n newIndex < this.firstNonStickyColumnIndex ||\n newIndex >= this.columnOrder.length\n ) {\n return;\n }\n\n const targetColumnKey = this.columnOrder[newIndex];\n\n if (targetColumnKey === undefined) {\n return;\n }\n\n // Determine the side based on the step direction.\n const side: HdsAdvancedTableColumnReorderSide =\n step > 0\n ? HdsAdvancedTableColumnReorderSideValues.Right\n : HdsAdvancedTableColumnReorderSideValues.Left;\n\n this.moveColumnToTarget(columnKey, targetColumnKey, side);\n };\n\n moveColumnToDropTarget = (\n targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ): void => {\n const sourceColumnKey = this.draggedColumnKey;\n\n if (sourceColumnKey === null || sourceColumnKey === targetColumnKey) {\n return;\n }\n\n this.moveColumnToTarget(sourceColumnKey, targetColumnKey, side);\n };\n\n moveColumnToTarget = (\n sourceColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ): void => {\n const oldIndex = this.columnOrder.indexOf(sourceColumnKey);\n const newIndex = this.columnOrder.indexOf(targetColumnKey);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const updated = [...this.columnOrder];\n\n updated.splice(oldIndex, 1); // Remove from old position\n\n // Calculate the insertion index based on the side\n // If dropping to the right of the target, insert after the target\n // If dropping to the left of the target, insert before the target\n // Adjust for the shift in indices caused by removing the source column\n const adjustedIndex =\n side === HdsAdvancedTableColumnReorderSideValues.Right\n ? newIndex > oldIndex\n ? newIndex\n : newIndex + 1\n : newIndex > oldIndex\n ? newIndex - 1\n : newIndex;\n\n updated.splice(adjustedIndex, 0, sourceColumnKey); // Insert at new position\n\n this.columnOrder = updated;\n\n // we need to wait until the reposition has finished\n requestAnimationFrame(() => {\n const thElement = this.args.thElements.get(sourceColumnKey);\n\n if (thElement === undefined) {\n return;\n }\n\n thElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center',\n });\n\n this.draggedColumnKey = null;\n\n const column = this.args.getColumnByKey(sourceColumnKey);\n\n assert('No column found with that key', column !== undefined);\n\n this.setColumnOrder({\n column,\n newOrder: updated,\n insertedAt: updated.indexOf(sourceColumnKey),\n });\n });\n }\n };\n\n setColumnOrder: HdsAdvancedTableColumnReorderCallback = ({\n column,\n newOrder,\n insertedAt,\n }) => {\n const { onColumnReorder } = this.args;\n\n this.columnOrder = newOrder;\n\n onColumnReorder?.({ column, newOrder, insertedAt });\n };\n\n private _getColumnKey(column: HdsAdvancedTableNormalizedColumn): string {\n return column.key ?? guidFor(column);\n }\n\n <template>\n {{yield\n (hash\n orderedColumns=this.orderedColumns\n columnOrder=this.visibleColumnOrder\n draggedColumnKey=this.draggedColumnKey\n reorderHoveredColumnKey=this.reorderHoveredColumnKey\n firstColumnKey=this.firstColumnKey\n firstNonStickyColumnKey=this.firstNonStickyColumnKey\n lastColumnKey=this.lastColumnKey\n syncColumnOrder=this.syncColumnOrder\n moveColumnToDropTarget=this.moveColumnToDropTarget\n moveColumnToTarget=this.moveColumnToTarget\n moveColumnToTerminalPosition=this.moveColumnToTerminalPosition\n stepColumn=this.stepColumn\n setDraggedColumnKey=(fn (mut this.draggedColumnKey))\n setReorderHoveredColumnKey=(fn (mut this.reorderHoveredColumnKey))\n )\n }}\n </template>\n}\n"],"names":["HdsAdvancedTableColumnManagerOrder","Component","g","prototype","tracked","i","syncColumnOrder","modifier","_element","columns","columnOrder","columnKeys","map","column","_getColumnKey","nextOrder","_columnOrder","undefined","visibleSet","Set","hiddenKeys","filter","key","has","reordered","visibleIdx","hiddenIdx","length","includes","push","missingKeys","isSame","every","value","index","setColumnOrder","scheduleOnce","args","visibleColumnOrder","visibleKeys","orderedColumns","hasReorderableColumns","columnMap","Map","reduce","acc","get","firstColumnKey","firstColumn","firstNonStickyColumnIndex","hasStickyFirstColumn","firstNonStickyColumnKey","firstNonStickyColumn","lastColumnKey","lastColumn","moveColumnToTerminalPosition","columnKey","position","targetColumnKey","side","HdsAdvancedTableColumnReorderSideValues","Left","Right","moveColumnToTarget","stepColumn","step","oldIndex","indexOf","newIndex","moveColumnToDropTarget","sourceColumnKey","draggedColumnKey","updated","splice","adjustedIndex","requestAnimationFrame","thElement","thElements","scrollIntoView","behavior","block","inline","getColumnByKey","assert","newOrder","insertedAt","onColumnReorder","guidFor","setComponentTemplate","precompileTemplate","strictMode","scope","hash","fn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"order.js","sources":["../../../../../src/components/hds/advanced-table/column-manager/order.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { fn, hash } from '@ember/helper';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\nimport { scheduleOnce } from '@ember/runloop';\nimport { tracked } from '@glimmer/tracking';\nimport { modifier } from 'ember-modifier';\nimport { TrackedMap } from 'tracked-built-ins';\nimport { HdsAdvancedTableColumnReorderSideValues } from '../types.ts';\nimport { requestAnimationFrameWaiter } from '../utils.ts';\n\nimport type {\n HdsAdvancedTableColumnReorderCallback,\n HdsAdvancedTableColumnReorderSide,\n HdsAdvancedTableNormalizedColumn,\n} from '../types.ts';\nimport type { ModifierLike } from '@glint/template';\n\nexport interface HdsAdvancedTableSyncColumnOrderSignature {\n Element: HTMLDivElement;\n Args: {\n Positional: [HdsAdvancedTableNormalizedColumn[], string[] | undefined];\n };\n}\n\ninterface HdsAdvancedTableColumnManagerOrderSignature {\n Args: {\n columns: HdsAdvancedTableNormalizedColumn[];\n columnOrder: string[] | undefined;\n hasReorderableColumns?: boolean;\n hasStickyFirstColumn?: boolean;\n onColumnReorder: HdsAdvancedTableColumnReorderCallback | undefined;\n getColumnByKey: (\n key: string\n ) => HdsAdvancedTableNormalizedColumn | undefined;\n thElements: TrackedMap<string, HTMLDivElement>;\n };\n Blocks: {\n default: [\n {\n orderedColumns: HdsAdvancedTableNormalizedColumn[];\n columnOrder: string[];\n draggedColumnKey: string | null;\n reorderHoveredColumnKey: string | null;\n firstColumnKey: string | undefined;\n firstNonStickyColumnKey: string | undefined;\n lastColumnKey: string | undefined;\n syncColumnOrder: ModifierLike<HdsAdvancedTableSyncColumnOrderSignature>;\n moveColumnToDropTarget: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ) => void;\n moveColumnToTarget: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ) => void;\n moveColumnToTerminalPosition: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n position: 'start' | 'end'\n ) => void;\n stepColumn: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n step: number\n ) => void;\n setDraggedColumnKey: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n ) => void;\n setReorderHoveredColumnKey: (\n key: HdsAdvancedTableNormalizedColumn['key'] | null\n ) => void;\n },\n ];\n };\n}\n\nexport default class HdsAdvancedTableColumnManagerOrder extends Component<HdsAdvancedTableColumnManagerOrderSignature> {\n @tracked draggedColumnKey: HdsAdvancedTableNormalizedColumn['key'] | null =\n null;\n @tracked reorderHoveredColumnKey:\n | HdsAdvancedTableNormalizedColumn['key']\n | null = null;\n @tracked private _columnOrder: string[] = [];\n\n syncColumnOrder = modifier<HdsAdvancedTableSyncColumnOrderSignature>(\n (_element, [columns, columnOrder]) => {\n const columnKeys = columns.map((column) => this._getColumnKey(column));\n\n let nextOrder = this._columnOrder;\n\n if (columnOrder !== undefined) {\n const visibleSet = new Set(columnOrder);\n const hiddenKeys = nextOrder.filter((key) => !visibleSet.has(key));\n\n const reordered: string[] = [];\n\n let visibleIdx = 0;\n let hiddenIdx = 0;\n\n for (let i = 0; i < nextOrder.length; i++) {\n if (hiddenKeys.includes(nextOrder[i]!)) {\n reordered.push(hiddenKeys[hiddenIdx++]!);\n } else {\n reordered.push(columnOrder[visibleIdx++]!);\n }\n }\n\n nextOrder = reordered;\n }\n\n const missingKeys = columnKeys.filter((key) => !nextOrder.includes(key));\n\n if (missingKeys.length > 0) {\n nextOrder = [...nextOrder, ...missingKeys];\n }\n\n const isSame =\n nextOrder.length === this._columnOrder.length &&\n nextOrder.every((value, index) => value === this._columnOrder[index]);\n\n const setColumnOrder = () => (this.columnOrder = nextOrder);\n\n if (!isSame) {\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, setColumnOrder);\n }\n }\n );\n\n get columnOrder(): string[] {\n return this._columnOrder.length > 0\n ? this._columnOrder\n : this.args.columns.map((column) => this._getColumnKey(column));\n }\n set columnOrder(value: string[]) {\n this._columnOrder = value;\n }\n\n get visibleColumnOrder(): string[] {\n const visibleKeys = new Set(\n this.args.columns.map((column) => this._getColumnKey(column))\n );\n\n return this._columnOrder.filter((key) => visibleKeys.has(key));\n }\n\n get orderedColumns(): HdsAdvancedTableNormalizedColumn[] {\n const { hasReorderableColumns, columns } = this.args;\n\n if (hasReorderableColumns && this.columnOrder !== undefined) {\n const columnMap = new Map(columns.map((column) => [column.key, column]));\n\n return this.columnOrder.reduce<HdsAdvancedTableNormalizedColumn[]>(\n (acc, key) => {\n const column = columnMap.get(key);\n\n if (column !== undefined) {\n acc.push(column);\n }\n\n return acc;\n },\n []\n );\n } else {\n return columns;\n }\n }\n\n get firstColumnKey(): HdsAdvancedTableNormalizedColumn['key'] | undefined {\n const firstColumn = this.orderedColumns[0];\n\n return firstColumn?.key;\n }\n\n get firstNonStickyColumnIndex(): number {\n return this.args.hasStickyFirstColumn ? 1 : 0;\n }\n\n get firstNonStickyColumnKey():\n | HdsAdvancedTableNormalizedColumn['key']\n | undefined {\n const firstNonStickyColumn =\n this.orderedColumns[this.firstNonStickyColumnIndex];\n\n return firstNonStickyColumn?.key;\n }\n\n get lastColumnKey(): HdsAdvancedTableNormalizedColumn['key'] | undefined {\n const lastColumn = this.orderedColumns[this.orderedColumns.length - 1];\n\n return lastColumn?.key;\n }\n\n moveColumnToTerminalPosition = (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n position: 'start' | 'end'\n ): void => {\n let targetColumnKey: HdsAdvancedTableNormalizedColumn['key'];\n let side: HdsAdvancedTableColumnReorderSide;\n\n const lastColumn = this.orderedColumns[this.orderedColumns.length - 1];\n\n if (\n this.firstNonStickyColumnKey === undefined ||\n lastColumn === undefined\n ) {\n return;\n }\n\n if (position === 'start') {\n targetColumnKey = this.firstNonStickyColumnKey;\n side = HdsAdvancedTableColumnReorderSideValues.Left;\n } else {\n targetColumnKey = lastColumn.key!;\n side = HdsAdvancedTableColumnReorderSideValues.Right;\n }\n\n // Move the column to the target position\n this.moveColumnToTarget(columnKey, targetColumnKey, side);\n };\n\n stepColumn = (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n step: number\n ): void => {\n const oldIndex = this.columnOrder.indexOf(columnKey);\n const newIndex = oldIndex + step;\n\n // Check if the new position is within the array bounds.\n if (\n newIndex < this.firstNonStickyColumnIndex ||\n newIndex >= this.columnOrder.length\n ) {\n return;\n }\n\n const targetColumnKey = this.columnOrder[newIndex];\n\n if (targetColumnKey === undefined) {\n return;\n }\n\n // Determine the side based on the step direction.\n const side: HdsAdvancedTableColumnReorderSide =\n step > 0\n ? HdsAdvancedTableColumnReorderSideValues.Right\n : HdsAdvancedTableColumnReorderSideValues.Left;\n\n this.moveColumnToTarget(columnKey, targetColumnKey, side);\n };\n\n moveColumnToDropTarget = (\n targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ): void => {\n const sourceColumnKey = this.draggedColumnKey;\n\n if (sourceColumnKey === null || sourceColumnKey === targetColumnKey) {\n return;\n }\n\n this.moveColumnToTarget(sourceColumnKey, targetColumnKey, side);\n };\n\n moveColumnToTarget = (\n sourceColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n targetColumnKey: HdsAdvancedTableNormalizedColumn['key'],\n side: HdsAdvancedTableColumnReorderSide\n ): void => {\n const oldIndex = this.columnOrder.indexOf(sourceColumnKey);\n const newIndex = this.columnOrder.indexOf(targetColumnKey);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const updated = [...this.columnOrder];\n\n updated.splice(oldIndex, 1); // Remove from old position\n\n // Calculate the insertion index based on the side\n // If dropping to the right of the target, insert after the target\n // If dropping to the left of the target, insert before the target\n // Adjust for the shift in indices caused by removing the source column\n const adjustedIndex =\n side === HdsAdvancedTableColumnReorderSideValues.Right\n ? newIndex > oldIndex\n ? newIndex\n : newIndex + 1\n : newIndex > oldIndex\n ? newIndex - 1\n : newIndex;\n\n updated.splice(adjustedIndex, 0, sourceColumnKey); // Insert at new position\n\n this.columnOrder = updated;\n\n // we need to wait until the reposition has finished\n requestAnimationFrameWaiter(() => {\n const thElement = this.args.thElements.get(sourceColumnKey);\n\n if (thElement === undefined) {\n return;\n }\n\n thElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'center',\n });\n\n this.draggedColumnKey = null;\n\n const column = this.args.getColumnByKey(sourceColumnKey);\n\n assert('No column found with that key', column !== undefined);\n\n this.setColumnOrder({\n column,\n newOrder: updated,\n insertedAt: updated.indexOf(sourceColumnKey),\n });\n });\n }\n };\n\n setColumnOrder: HdsAdvancedTableColumnReorderCallback = ({\n column,\n newOrder,\n insertedAt,\n }) => {\n const { onColumnReorder } = this.args;\n\n this.columnOrder = newOrder;\n\n onColumnReorder?.({ column, newOrder, insertedAt });\n };\n\n private _getColumnKey(column: HdsAdvancedTableNormalizedColumn): string {\n return column.key ?? guidFor(column);\n }\n\n <template>\n {{yield\n (hash\n orderedColumns=this.orderedColumns\n columnOrder=this.visibleColumnOrder\n draggedColumnKey=this.draggedColumnKey\n reorderHoveredColumnKey=this.reorderHoveredColumnKey\n firstColumnKey=this.firstColumnKey\n firstNonStickyColumnKey=this.firstNonStickyColumnKey\n lastColumnKey=this.lastColumnKey\n syncColumnOrder=this.syncColumnOrder\n moveColumnToDropTarget=this.moveColumnToDropTarget\n moveColumnToTarget=this.moveColumnToTarget\n moveColumnToTerminalPosition=this.moveColumnToTerminalPosition\n stepColumn=this.stepColumn\n setDraggedColumnKey=(fn (mut this.draggedColumnKey))\n setReorderHoveredColumnKey=(fn (mut this.reorderHoveredColumnKey))\n )\n }}\n </template>\n}\n"],"names":["HdsAdvancedTableColumnManagerOrder","Component","g","prototype","tracked","i","syncColumnOrder","modifier","_element","columns","columnOrder","columnKeys","map","column","_getColumnKey","nextOrder","_columnOrder","undefined","visibleSet","Set","hiddenKeys","filter","key","has","reordered","visibleIdx","hiddenIdx","length","includes","push","missingKeys","isSame","every","value","index","setColumnOrder","scheduleOnce","args","visibleColumnOrder","visibleKeys","orderedColumns","hasReorderableColumns","columnMap","Map","reduce","acc","get","firstColumnKey","firstColumn","firstNonStickyColumnIndex","hasStickyFirstColumn","firstNonStickyColumnKey","firstNonStickyColumn","lastColumnKey","lastColumn","moveColumnToTerminalPosition","columnKey","position","targetColumnKey","side","HdsAdvancedTableColumnReorderSideValues","Left","Right","moveColumnToTarget","stepColumn","step","oldIndex","indexOf","newIndex","moveColumnToDropTarget","sourceColumnKey","draggedColumnKey","updated","splice","adjustedIndex","requestAnimationFrameWaiter","thElement","thElements","scrollIntoView","behavior","block","inline","getColumnByKey","assert","newOrder","insertedAt","onColumnReorder","guidFor","setComponentTemplate","precompileTemplate","strictMode","scope","hash","fn"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import Component from '@glimmer/component';
|
|
|
2
2
|
import { modifier } from 'ember-modifier';
|
|
3
3
|
import { TrackedMap } from 'tracked-built-ins';
|
|
4
4
|
import { hash } from '@ember/helper';
|
|
5
|
-
import { isPixelSize, pixelToNumber } from '../utils.js';
|
|
5
|
+
import { isPixelSize, pixelToNumber, measureColumnWidth } from '../utils.js';
|
|
6
6
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
7
7
|
import { setComponentTemplate } from '@ember/component';
|
|
8
8
|
|
|
@@ -12,12 +12,12 @@ import { setComponentTemplate } from '@ember/component';
|
|
|
12
12
|
*/
|
|
13
13
|
const DEFAULT_WIDTH = '1fr'; // default to '1fr' to allow flexible width
|
|
14
14
|
const DEFAULT_MIN_WIDTH = '150px';
|
|
15
|
-
const
|
|
15
|
+
const SUBPIXEL_TOLERANCE = 0.5;
|
|
16
16
|
class HdsAdvancedTableColumnManagerWidth extends Component {
|
|
17
17
|
_columnWidths = new TrackedMap();
|
|
18
18
|
_originalColumnWidths = new TrackedMap();
|
|
19
19
|
_transientColumnWidths = new TrackedMap();
|
|
20
|
-
|
|
20
|
+
_resizeStartWidths = new TrackedMap();
|
|
21
21
|
syncWidthValues = modifier(() => {
|
|
22
22
|
const {
|
|
23
23
|
columns
|
|
@@ -34,8 +34,7 @@ class HdsAdvancedTableColumnManagerWidth extends Component {
|
|
|
34
34
|
} = this.args;
|
|
35
35
|
let style = isSelectable ? 'min-content ' : '';
|
|
36
36
|
for (const col of orderedColumns) {
|
|
37
|
-
|
|
38
|
-
style += ` ${appliedWidth}`;
|
|
37
|
+
style += ` ${this.getAppliedWidth(col.key)}`;
|
|
39
38
|
}
|
|
40
39
|
return style;
|
|
41
40
|
}
|
|
@@ -65,202 +64,116 @@ class HdsAdvancedTableColumnManagerWidth extends Component {
|
|
|
65
64
|
return this.args.thElements.get(key)?.offsetWidth ?? 0;
|
|
66
65
|
}
|
|
67
66
|
}
|
|
68
|
-
|
|
69
|
-
const column = this.args.getColumnByKey(key);
|
|
67
|
+
_colMinPx(column) {
|
|
70
68
|
const minWidth = column?.minWidth ?? DEFAULT_MIN_WIDTH;
|
|
71
69
|
return isPixelSize(minWidth) ? pixelToNumber(minWidth) : 0;
|
|
72
70
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
_colMaxPx(column) {
|
|
72
|
+
const maxWidth = column?.maxWidth;
|
|
73
|
+
return maxWidth !== undefined && isPixelSize(maxWidth) ? pixelToNumber(maxWidth) : Infinity;
|
|
74
|
+
}
|
|
75
|
+
beginColumnResize = () => {
|
|
76
|
+
this._resizeStartWidths.clear();
|
|
77
|
+
for (const key of this.args.columnOrder) {
|
|
78
|
+
const pixelWidth = this._getPxWidth(key);
|
|
79
|
+
this._resizeStartWidths.set(key, pixelWidth);
|
|
80
|
+
this._transientColumnWidths.set(key, `${pixelWidth}px`);
|
|
76
81
|
}
|
|
77
|
-
const transientWidth = this._transientColumnWidths.get(columnKey);
|
|
78
|
-
this._columnWidths.set(columnKey, transientWidth);
|
|
79
82
|
};
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
_distributeWidthChange(keys, amount) {
|
|
84
|
+
let remaining = amount;
|
|
85
|
+
for (const key of keys) {
|
|
86
|
+
const start = this._resizeStartWidths.get(key) ?? 0;
|
|
87
|
+
const column = this.args.getColumnByKey(key);
|
|
88
|
+
let applied = 0;
|
|
89
|
+
if (remaining > 0) {
|
|
90
|
+
applied = Math.min(remaining, Math.max(0, this._colMaxPx(column) - start));
|
|
91
|
+
} else if (remaining < 0) {
|
|
92
|
+
applied = -Math.min(-remaining, Math.max(0, start - this._colMinPx(column)));
|
|
88
93
|
}
|
|
89
|
-
this._transientColumnWidths.set(key, `${
|
|
90
|
-
|
|
91
|
-
};
|
|
92
|
-
resetTransientColumnWidths = () => {
|
|
93
|
-
this._transientColumnWidths.clear();
|
|
94
|
-
};
|
|
95
|
-
setTransientColumnWidth = (columnKey, width, clamped = true) => {
|
|
96
|
-
const column = this.args.getColumnByKey(columnKey);
|
|
97
|
-
if (column === undefined) {
|
|
98
|
-
return;
|
|
94
|
+
this._transientColumnWidths.set(key, `${start + applied}px`);
|
|
95
|
+
remaining -= applied;
|
|
99
96
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
97
|
+
}
|
|
98
|
+
_distributableCapacity(keys, grow) {
|
|
99
|
+
return keys.reduce((sum, key) => {
|
|
100
|
+
const start = this._resizeStartWidths.get(key) ?? 0;
|
|
101
|
+
const column = this.args.getColumnByKey(key);
|
|
102
|
+
return sum + (grow ? Math.max(0, this._colMaxPx(column) - start) : Math.max(0, start - this._colMinPx(column)));
|
|
103
|
+
}, 0);
|
|
104
|
+
}
|
|
105
|
+
resizeColumnByDelta = (columnKey, deltaPx) => {
|
|
106
|
+
const order = this.args.columnOrder;
|
|
107
|
+
const index = order.indexOf(columnKey);
|
|
108
|
+
if (index === -1) {
|
|
109
|
+
return 0;
|
|
110
|
+
}
|
|
111
|
+
const draggedKeys = [columnKey];
|
|
112
|
+
// nearest-to-boundary first, so the cascade grows outward
|
|
113
|
+
const rightKeys = order.slice(index + 1);
|
|
114
|
+
let actualDelta;
|
|
115
|
+
if (deltaPx > 0) {
|
|
116
|
+
const capacity = Math.min(this._distributableCapacity(draggedKeys, true), this._distributableCapacity(rightKeys, false));
|
|
117
|
+
actualDelta = Math.max(0, Math.min(deltaPx, capacity));
|
|
118
|
+
} else if (deltaPx < 0) {
|
|
119
|
+
const capacity = Math.min(this._distributableCapacity(draggedKeys, false), this._distributableCapacity(rightKeys, true));
|
|
120
|
+
actualDelta = Math.min(0, -Math.min(-deltaPx, capacity));
|
|
109
121
|
} else {
|
|
110
|
-
|
|
122
|
+
actualDelta = 0;
|
|
111
123
|
}
|
|
124
|
+
this._distributeWidthChange(draggedKeys, actualDelta);
|
|
125
|
+
this._distributeWidthChange(rightKeys, -actualDelta);
|
|
126
|
+
return actualDelta;
|
|
112
127
|
};
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const borrowerKey = delta > 0 ? columnKey : nextColumnKey;
|
|
125
|
-
const lenderKey = delta > 0 ? nextColumnKey : columnKey;
|
|
126
|
-
let amount = Math.abs(delta);
|
|
127
|
-
// check if lender has existing debt to borrower
|
|
128
|
-
const lenderDebts = this._columnDebts.get(lenderKey) ?? {};
|
|
129
|
-
const existingDebt = lenderDebts[borrowerKey] ?? 0;
|
|
130
|
-
if (existingDebt > 0) {
|
|
131
|
-
const paymentAmount = Math.min(amount, existingDebt);
|
|
132
|
-
const newDebt = existingDebt - paymentAmount;
|
|
133
|
-
const updatedDebts = {
|
|
134
|
-
...lenderDebts
|
|
128
|
+
commitColumnWidths = () => {
|
|
129
|
+
const entries = this.args.columns.map(column => {
|
|
130
|
+
const startPixelWidth = this._resizeStartWidths.get(column.key);
|
|
131
|
+
const transientWidth = this._transientColumnWidths.get(column.key);
|
|
132
|
+
const pixelWidth = transientWidth !== undefined ? pixelToNumber(transientWidth) : this._getPxWidth(column.key);
|
|
133
|
+
return {
|
|
134
|
+
key: column.key,
|
|
135
|
+
pixelWidth,
|
|
136
|
+
startPixelWidth: startPixelWidth ?? pixelWidth,
|
|
137
|
+
frMultiplier: this._parseFrMultiplier(this._columnWidths.get(column.key) ?? DEFAULT_WIDTH),
|
|
138
|
+
hasMoved: startPixelWidth !== undefined && Math.abs(pixelWidth - startPixelWidth) > SUBPIXEL_TOLERANCE
|
|
135
139
|
};
|
|
136
|
-
|
|
137
|
-
|
|
140
|
+
});
|
|
141
|
+
const pxPerFrUnit = this._resolvePxPerFrUnit(entries);
|
|
142
|
+
for (const entry of entries) {
|
|
143
|
+
if (!entry.hasMoved) {
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
if (entry.frMultiplier !== undefined && pxPerFrUnit > 0) {
|
|
147
|
+
const weight = Math.max(0, entry.frMultiplier + (entry.pixelWidth - entry.startPixelWidth) / pxPerFrUnit);
|
|
148
|
+
this._columnWidths.set(entry.key, `${Math.round(weight * 1e6) / 1e6}fr`);
|
|
138
149
|
} else {
|
|
139
|
-
|
|
150
|
+
this._columnWidths.set(entry.key, `${Math.round(entry.pixelWidth)}px`);
|
|
140
151
|
}
|
|
141
|
-
this._columnDebts.set(lenderKey, updatedDebts);
|
|
142
|
-
amount = amount - paymentAmount;
|
|
143
|
-
}
|
|
144
|
-
// if amount remains, create new debt
|
|
145
|
-
if (amount > 0) {
|
|
146
|
-
const borrowerDebts = this._columnDebts.get(borrowerKey) ?? {};
|
|
147
|
-
this._columnDebts.set(borrowerKey, {
|
|
148
|
-
...borrowerDebts,
|
|
149
|
-
[lenderKey]: (borrowerDebts[lenderKey] ?? 0) + amount
|
|
150
|
-
});
|
|
151
152
|
}
|
|
152
153
|
};
|
|
153
|
-
|
|
154
|
+
_resolvePxPerFrUnit(entries) {
|
|
155
|
+
const flexible = entries.filter(entry => entry.frMultiplier !== undefined && entry.frMultiplier > 0);
|
|
156
|
+
const totalWeight = flexible.reduce((sum, entry) => sum + (entry.frMultiplier ?? 0), 0);
|
|
157
|
+
const totalPixels = flexible.reduce((sum, entry) => sum + entry.startPixelWidth, 0);
|
|
158
|
+
return totalWeight > 0 ? totalPixels / totalWeight : 0;
|
|
159
|
+
}
|
|
160
|
+
resetTransientColumnWidths = () => {
|
|
161
|
+
this._transientColumnWidths.clear();
|
|
162
|
+
};
|
|
154
163
|
restoreColumnWidth = columnKey => {
|
|
155
|
-
|
|
156
|
-
this.
|
|
157
|
-
|
|
158
|
-
const originalWidth = this._originalColumnWidths.get(columnKey);
|
|
159
|
-
if (originalWidth) {
|
|
160
|
-
this._columnWidths.set(columnKey, originalWidth);
|
|
161
|
-
this._transientColumnWidths.delete(columnKey);
|
|
162
|
-
}
|
|
164
|
+
const originalWidth = this._originalColumnWidths.get(columnKey) ?? DEFAULT_WIDTH;
|
|
165
|
+
this._transientColumnWidths.delete(columnKey);
|
|
166
|
+
this._columnWidths.set(columnKey, originalWidth);
|
|
163
167
|
};
|
|
164
|
-
|
|
165
|
-
this.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
this.args.columnOrder.forEach(debtorKey => {
|
|
171
|
-
if (debtorKey === collectorKey) {
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
const debtorDebts = this._columnDebts.get(debtorKey);
|
|
175
|
-
const debtToCollect = debtorDebts?.[collectorKey] ?? 0;
|
|
176
|
-
if (debtToCollect <= 0) {
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
// attempt to source funds from the debtor
|
|
180
|
-
const amountPaid = this._sourceFundsForPayment(debtorKey, debtToCollect);
|
|
181
|
-
if (amountPaid > 0) {
|
|
182
|
-
// add funds to collector
|
|
183
|
-
const currentCollectorWidth = this._getPxWidth(collectorKey);
|
|
184
|
-
this._columnWidths.set(collectorKey, `${currentCollectorWidth + amountPaid}px`);
|
|
185
|
-
this._transientColumnWidths.delete(collectorKey);
|
|
186
|
-
// update debtors ledger
|
|
187
|
-
const remainingDebt = debtToCollect - amountPaid;
|
|
188
|
-
const currentDebts = this._columnDebts.get(debtorKey) ?? {};
|
|
189
|
-
const updatedDebts = {
|
|
190
|
-
...currentDebts
|
|
191
|
-
};
|
|
192
|
-
if (remainingDebt > 0) {
|
|
193
|
-
updatedDebts[collectorKey] = remainingDebt;
|
|
194
|
-
} else {
|
|
195
|
-
delete updatedDebts[collectorKey];
|
|
196
|
-
}
|
|
197
|
-
this._columnDebts.set(debtorKey, updatedDebts);
|
|
198
|
-
}
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
_payWidthDebts(payerKey) {
|
|
202
|
-
const debts = this._columnDebts.get(payerKey);
|
|
203
|
-
if (debts === undefined) {
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
Object.entries(debts).forEach(([lenderKey, amount]) => {
|
|
207
|
-
// give width back to lender
|
|
208
|
-
const currentLenderWidth = this._getPxWidth(lenderKey);
|
|
209
|
-
this._columnWidths.set(lenderKey, `${currentLenderWidth + amount}px`);
|
|
210
|
-
this._transientColumnWidths.delete(lenderKey);
|
|
211
|
-
});
|
|
212
|
-
// lear payers debts
|
|
213
|
-
this._columnDebts.delete(payerKey);
|
|
214
|
-
}
|
|
215
|
-
_sourceFundsForPayment(key, amountNeeded) {
|
|
216
|
-
let fundsSourced = 0;
|
|
217
|
-
// preferentially source width from our own surplus first
|
|
218
|
-
const currentWidth = this._getPxWidth(key);
|
|
219
|
-
const minWidth = this._getPxMinWidth(key);
|
|
220
|
-
const surplus = Math.max(0, currentWidth - minWidth);
|
|
221
|
-
const paymentFromSurplus = Math.min(amountNeeded, surplus);
|
|
222
|
-
if (paymentFromSurplus > 0) {
|
|
223
|
-
this._columnWidths.set(key, `${currentWidth - paymentFromSurplus}px`);
|
|
224
|
-
this._transientColumnWidths.delete(key);
|
|
225
|
-
fundsSourced = fundsSourced + paymentFromSurplus;
|
|
226
|
-
}
|
|
227
|
-
// if shortfall, source from our debtors (recursive)
|
|
228
|
-
const shortfall = amountNeeded - fundsSourced;
|
|
229
|
-
if (shortfall > 0) {
|
|
230
|
-
// find who owes this column (key)
|
|
231
|
-
const ourDebtors = this.args.columnOrder.filter(debtorKey => {
|
|
232
|
-
const debtorDebts = this._columnDebts.get(debtorKey);
|
|
233
|
-
return debtorDebts && debtorDebts[key] && debtorDebts[key] > 0;
|
|
234
|
-
});
|
|
235
|
-
for (const subDebtorKey of ourDebtors) {
|
|
236
|
-
const amountStillNeeded = amountNeeded - fundsSourced;
|
|
237
|
-
if (amountStillNeeded <= 0) {
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
const subDebtorDebts = this._columnDebts.get(subDebtorKey);
|
|
241
|
-
const subDebtOwed = subDebtorDebts[key] ?? 0;
|
|
242
|
-
const amountToRequest = Math.min(amountStillNeeded, subDebtOwed);
|
|
243
|
-
const collectedFromSubDebtor = this._sourceFundsForPayment(subDebtorKey, amountToRequest);
|
|
244
|
-
if (collectedFromSubDebtor > 0) {
|
|
245
|
-
fundsSourced = fundsSourced + collectedFromSubDebtor;
|
|
246
|
-
// update sub-debtor ledger
|
|
247
|
-
const remaining = subDebtOwed - collectedFromSubDebtor;
|
|
248
|
-
const updatedSubDebts = {
|
|
249
|
-
...subDebtorDebts
|
|
250
|
-
};
|
|
251
|
-
if (remaining > 0) {
|
|
252
|
-
updatedSubDebts[key] = remaining;
|
|
253
|
-
} else {
|
|
254
|
-
delete updatedSubDebts[key];
|
|
255
|
-
}
|
|
256
|
-
this._columnDebts.set(subDebtorKey, updatedSubDebts);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
return fundsSourced;
|
|
168
|
+
getRenderedWidth = columnKey => {
|
|
169
|
+
return measureColumnWidth(this.args.thElements.get(columnKey));
|
|
170
|
+
};
|
|
171
|
+
_parseFrMultiplier(value) {
|
|
172
|
+
const match = /^(-?\d+(?:\.\d+)?)fr$/.exec(value);
|
|
173
|
+
return match ? Number(match[1]) : undefined;
|
|
261
174
|
}
|
|
262
175
|
static {
|
|
263
|
-
setComponentTemplate(precompileTemplate("{{yield (hash gridTemplateColumns=this.gridTemplateColumns syncWidthValues=this.syncWidthValues
|
|
176
|
+
setComponentTemplate(precompileTemplate("{{yield (hash gridTemplateColumns=this.gridTemplateColumns syncWidthValues=this.syncWidthValues beginColumnResize=this.beginColumnResize resizeColumnByDelta=this.resizeColumnByDelta commitColumnWidths=this.commitColumnWidths getAppliedWidth=this.getAppliedWidth getSiblingColumnKeys=this.getSiblingColumnKeys getRenderedWidth=this.getRenderedWidth restoreColumnWidth=this.restoreColumnWidth resetTransientColumnWidths=this.resetTransientColumnWidths)}}", {
|
|
264
177
|
strictMode: true,
|
|
265
178
|
scope: () => ({
|
|
266
179
|
hash
|
|
@@ -269,5 +182,5 @@ class HdsAdvancedTableColumnManagerWidth extends Component {
|
|
|
269
182
|
}
|
|
270
183
|
}
|
|
271
184
|
|
|
272
|
-
export {
|
|
185
|
+
export { DEFAULT_MIN_WIDTH, DEFAULT_WIDTH, SUBPIXEL_TOLERANCE, HdsAdvancedTableColumnManagerWidth as default };
|
|
273
186
|
//# sourceMappingURL=width.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"width.js","sources":["../../../../../src/components/hds/advanced-table/column-manager/width.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { TrackedMap } from 'tracked-built-ins';\nimport { hash } from '@ember/helper';\nimport { isPixelSize, pixelToNumber } from '../utils.ts';\n\nimport type {\n HdsAdvancedTableNormalizedColumn,\n HdsAdvancedTablePixelString,\n} from '../types.ts';\nimport type { ModifierLike } from '@glint/template';\n\nexport const DEFAULT_WIDTH = '1fr'; // default to '1fr' to allow flexible width\nexport const DEFAULT_MIN_WIDTH = '150px';\nexport const DEFAULT_MAX_WIDTH = '800px';\n\ntype HdsAdvancedTableColumnWidth = HdsAdvancedTableNormalizedColumn['width'];\n\nexport interface HdsAdvancedTableSyncWidthValuesSignature {\n Element: HTMLDivElement;\n}\n\ninterface HdsAdvancedTableColumnManagerWidthSignature {\n Args: {\n columnOrder: string[];\n columns: HdsAdvancedTableNormalizedColumn[];\n orderedColumns: HdsAdvancedTableNormalizedColumn[];\n thElements: TrackedMap<string, HTMLDivElement>;\n isSelectable?: boolean;\n getColumnByKey: (\n key: string\n ) => HdsAdvancedTableNormalizedColumn | undefined;\n };\n Blocks: {\n default: [\n {\n gridTemplateColumns: string;\n syncWidthValues: ModifierLike<HdsAdvancedTableSyncWidthValuesSignature>;\n applyTransientWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => void;\n getAppliedWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => HdsAdvancedTableNormalizedColumn['width'];\n getSiblingColumnKeys: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n ) => {\n previous?: HdsAdvancedTableNormalizedColumn['key'];\n next?: HdsAdvancedTableNormalizedColumn['key'];\n };\n resetTransientColumnWidths: () => void;\n restoreColumnWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => void;\n setTransientColumnWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n width: `${number}px`,\n clamped?: boolean\n ) => void;\n setTransientColumnWidths: (options: { roundValues?: boolean }) => void;\n updateResizeDebt: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n delta: number\n ) => void;\n },\n ];\n };\n}\n\nexport default class HdsAdvancedTableColumnManagerWidth extends Component<HdsAdvancedTableColumnManagerWidthSignature> {\n private _columnWidths = new TrackedMap<string, HdsAdvancedTableColumnWidth>();\n private _originalColumnWidths = new TrackedMap<\n string,\n HdsAdvancedTableColumnWidth\n >();\n private _transientColumnWidths = new TrackedMap<\n string,\n HdsAdvancedTablePixelString\n >();\n private _columnDebts = new TrackedMap<string, Record<string, number>>(); // key -> { lenderKey -> amount }\n\n syncWidthValues = modifier<HdsAdvancedTableSyncWidthValuesSignature>(() => {\n const { columns } = this.args;\n\n for (const column of columns) {\n this._columnWidths.set(column.key, column.width ?? DEFAULT_WIDTH);\n this._originalColumnWidths.set(column.key, column.width ?? DEFAULT_WIDTH);\n }\n });\n\n get gridTemplateColumns(): string {\n const { isSelectable, orderedColumns } = this.args;\n\n let style = isSelectable ? 'min-content ' : '';\n\n for (const col of orderedColumns) {\n const appliedWidth = this.getAppliedWidth(col.key);\n\n style += ` ${appliedWidth}`;\n }\n\n return style;\n }\n\n getAppliedWidth = (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ): HdsAdvancedTableNormalizedColumn['width'] => {\n const width = this._columnWidths.get(columnKey);\n const transientWidth = this._transientColumnWidths.get(columnKey);\n\n return (\n transientWidth ??\n width ??\n `${this.args.thElements.get(columnKey)?.offsetWidth ?? 0}px`\n );\n };\n\n getSiblingColumnKeys = (\n columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n ): {\n previous?: HdsAdvancedTableNormalizedColumn['key'];\n next?: HdsAdvancedTableNormalizedColumn['key'];\n } => {\n if (columnKey === null) {\n return {};\n }\n\n const columnIndex = this.args.columnOrder.indexOf(columnKey);\n\n if (columnIndex === -1) {\n return {};\n }\n\n return {\n previous:\n columnIndex === 0 ? undefined : this.args.columnOrder[columnIndex - 1],\n next:\n columnIndex === this.args.columnOrder.length - 1\n ? undefined\n : this.args.columnOrder[columnIndex + 1],\n };\n };\n\n private _getPxWidth(key: string): number {\n const width = this._columnWidths.get(key);\n\n if (width !== undefined && isPixelSize(width)) {\n return pixelToNumber(width as `${number}px`);\n } else {\n return this.args.thElements.get(key)?.offsetWidth ?? 0;\n }\n }\n\n private _getPxMinWidth(key: string): number {\n const column = this.args.getColumnByKey(key);\n const minWidth = column?.minWidth ?? DEFAULT_MIN_WIDTH;\n\n return isPixelSize(minWidth) ? pixelToNumber(minWidth) : 0;\n }\n\n applyTransientWidth = (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => {\n if (columnKey == undefined) {\n return;\n }\n\n const transientWidth = this._transientColumnWidths.get(columnKey);\n\n this._columnWidths.set(columnKey, transientWidth);\n };\n\n setTransientColumnWidths = (\n options: { roundValues?: boolean } = {}\n ): void => {\n const roundValues = options.roundValues ?? false;\n\n this._columnWidths.forEach((width, key) => {\n let _width: number;\n\n if (width !== undefined && isPixelSize(width)) {\n _width = pixelToNumber(width as `${number}px`);\n } else {\n _width = this.args.thElements.get(key)?.offsetWidth ?? 0;\n }\n\n this._transientColumnWidths.set(\n key,\n `${roundValues ? Math.round(_width) : _width}px`\n );\n });\n };\n\n resetTransientColumnWidths = (): void => {\n this._transientColumnWidths.clear();\n };\n\n setTransientColumnWidth = (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n width: `${number}px`,\n clamped: boolean = true\n ): void => {\n const column = this.args.getColumnByKey(columnKey);\n\n if (column === undefined) {\n return;\n }\n\n if (clamped) {\n const { minWidth, maxWidth } = column;\n\n const minWidthInPixels =\n minWidth === undefined ? 1 : pixelToNumber(minWidth);\n const maxWidthInPixels =\n maxWidth === undefined ? Infinity : pixelToNumber(maxWidth);\n\n const transientColumnWidthInPixels = Math.min(\n Math.max(pixelToNumber(width), minWidthInPixels),\n maxWidthInPixels\n );\n\n this._transientColumnWidths.set(\n columnKey,\n `${transientColumnWidthInPixels}px`\n );\n } else {\n this._transientColumnWidths.set(columnKey, width);\n }\n };\n\n updateResizeDebt = (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n delta: number\n ): void => {\n if (delta === 0) {\n return;\n }\n\n const { next: nextColumnKey } = this.getSiblingColumnKeys(columnKey);\n\n if (nextColumnKey === undefined) {\n return;\n }\n\n // determine borrower and lender\n const borrowerKey = delta > 0 ? columnKey : nextColumnKey;\n const lenderKey = delta > 0 ? nextColumnKey : columnKey;\n let amount = Math.abs(delta);\n\n // check if lender has existing debt to borrower\n const lenderDebts = this._columnDebts.get(lenderKey) ?? {};\n const existingDebt = lenderDebts[borrowerKey] ?? 0;\n\n if (existingDebt > 0) {\n const paymentAmount = Math.min(amount, existingDebt);\n const newDebt = existingDebt - paymentAmount;\n\n const updatedDebts = { ...lenderDebts };\n\n if (newDebt <= 0) {\n delete updatedDebts[borrowerKey];\n } else {\n updatedDebts[borrowerKey] = newDebt;\n }\n\n this._columnDebts.set(lenderKey, updatedDebts);\n\n amount = amount - paymentAmount;\n }\n\n // if amount remains, create new debt\n if (amount > 0) {\n const borrowerDebts = this._columnDebts.get(borrowerKey) ?? {};\n\n this._columnDebts.set(borrowerKey, {\n ...borrowerDebts,\n [lenderKey]: (borrowerDebts[lenderKey] ?? 0) + amount,\n });\n }\n };\n\n // restores a column to its original width, settling all debts first\n restoreColumnWidth = (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ): void => {\n // settle debts (collect from debtors, pay lenders)\n this._settleWidthDebts(columnKey);\n\n // restore original width\n const originalWidth = this._originalColumnWidths.get(columnKey);\n\n if (originalWidth) {\n this._columnWidths.set(columnKey, originalWidth);\n this._transientColumnWidths.delete(columnKey);\n }\n };\n\n private _settleWidthDebts(key: string): void {\n this._collectWidthDebts(key);\n this._payWidthDebts(key);\n }\n\n private _collectWidthDebts(collectorKey: string): void {\n // iterate over all known columns to see if they owe the collector\n this.args.columnOrder.forEach((debtorKey) => {\n if (debtorKey === collectorKey) {\n return;\n }\n\n const debtorDebts = this._columnDebts.get(debtorKey);\n const debtToCollect = debtorDebts?.[collectorKey] ?? 0;\n\n if (debtToCollect <= 0) {\n return;\n }\n\n // attempt to source funds from the debtor\n const amountPaid = this._sourceFundsForPayment(debtorKey, debtToCollect);\n\n if (amountPaid > 0) {\n // add funds to collector\n const currentCollectorWidth = this._getPxWidth(collectorKey);\n\n this._columnWidths.set(\n collectorKey,\n `${currentCollectorWidth + amountPaid}px`\n );\n this._transientColumnWidths.delete(collectorKey);\n\n // update debtors ledger\n const remainingDebt = debtToCollect - amountPaid;\n const currentDebts = this._columnDebts.get(debtorKey) ?? {};\n const updatedDebts = { ...currentDebts };\n\n if (remainingDebt > 0) {\n updatedDebts[collectorKey] = remainingDebt;\n } else {\n delete updatedDebts[collectorKey];\n }\n\n this._columnDebts.set(debtorKey, updatedDebts);\n }\n });\n }\n\n private _payWidthDebts(payerKey: string): void {\n const debts = this._columnDebts.get(payerKey);\n\n if (debts === undefined) {\n return;\n }\n\n Object.entries(debts).forEach(([lenderKey, amount]) => {\n // give width back to lender\n const currentLenderWidth = this._getPxWidth(lenderKey);\n\n this._columnWidths.set(lenderKey, `${currentLenderWidth + amount}px`);\n this._transientColumnWidths.delete(lenderKey);\n });\n\n // lear payers debts\n this._columnDebts.delete(payerKey);\n }\n\n private _sourceFundsForPayment(key: string, amountNeeded: number): number {\n let fundsSourced = 0;\n\n // preferentially source width from our own surplus first\n const currentWidth = this._getPxWidth(key);\n const minWidth = this._getPxMinWidth(key);\n const surplus = Math.max(0, currentWidth - minWidth);\n const paymentFromSurplus = Math.min(amountNeeded, surplus);\n\n if (paymentFromSurplus > 0) {\n this._columnWidths.set(key, `${currentWidth - paymentFromSurplus}px`);\n this._transientColumnWidths.delete(key);\n\n fundsSourced = fundsSourced + paymentFromSurplus;\n }\n\n // if shortfall, source from our debtors (recursive)\n const shortfall = amountNeeded - fundsSourced;\n\n if (shortfall > 0) {\n // find who owes this column (key)\n const ourDebtors = this.args.columnOrder.filter((debtorKey) => {\n const debtorDebts = this._columnDebts.get(debtorKey);\n\n return debtorDebts && debtorDebts[key] && debtorDebts[key] > 0;\n });\n\n for (const subDebtorKey of ourDebtors) {\n const amountStillNeeded = amountNeeded - fundsSourced;\n\n if (amountStillNeeded <= 0) {\n break;\n }\n\n const subDebtorDebts = this._columnDebts.get(subDebtorKey)!;\n const subDebtOwed = subDebtorDebts[key] ?? 0;\n const amountToRequest = Math.min(amountStillNeeded, subDebtOwed);\n\n const collectedFromSubDebtor = this._sourceFundsForPayment(\n subDebtorKey,\n amountToRequest\n );\n\n if (collectedFromSubDebtor > 0) {\n fundsSourced = fundsSourced + collectedFromSubDebtor;\n\n // update sub-debtor ledger\n const remaining = subDebtOwed - collectedFromSubDebtor;\n const updatedSubDebts = { ...subDebtorDebts };\n\n if (remaining > 0) {\n updatedSubDebts[key] = remaining;\n } else {\n delete updatedSubDebts[key];\n }\n\n this._columnDebts.set(subDebtorKey, updatedSubDebts);\n }\n }\n }\n\n return fundsSourced;\n }\n\n <template>\n {{yield\n (hash\n gridTemplateColumns=this.gridTemplateColumns\n syncWidthValues=this.syncWidthValues\n applyTransientWidth=this.applyTransientWidth\n getAppliedWidth=this.getAppliedWidth\n getSiblingColumnKeys=this.getSiblingColumnKeys\n restoreColumnWidth=this.restoreColumnWidth\n setTransientColumnWidths=this.setTransientColumnWidths\n setTransientColumnWidth=this.setTransientColumnWidth\n resetTransientColumnWidths=this.resetTransientColumnWidths\n updateResizeDebt=this.updateResizeDebt\n )\n }}\n </template>\n}\n"],"names":["DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MAX_WIDTH","HdsAdvancedTableColumnManagerWidth","Component","_columnWidths","TrackedMap","_originalColumnWidths","_transientColumnWidths","_columnDebts","syncWidthValues","modifier","columns","args","column","set","key","width","gridTemplateColumns","isSelectable","orderedColumns","style","col","appliedWidth","getAppliedWidth","columnKey","get","transientWidth","thElements","offsetWidth","getSiblingColumnKeys","columnIndex","columnOrder","indexOf","previous","undefined","next","length","_getPxWidth","isPixelSize","pixelToNumber","_getPxMinWidth","getColumnByKey","minWidth","applyTransientWidth","setTransientColumnWidths","options","roundValues","forEach","_width","Math","round","resetTransientColumnWidths","clear","setTransientColumnWidth","clamped","maxWidth","minWidthInPixels","maxWidthInPixels","Infinity","transientColumnWidthInPixels","min","max","updateResizeDebt","delta","nextColumnKey","borrowerKey","lenderKey","amount","abs","lenderDebts","existingDebt","paymentAmount","newDebt","updatedDebts","borrowerDebts","restoreColumnWidth","_settleWidthDebts","originalWidth","delete","_collectWidthDebts","_payWidthDebts","collectorKey","debtorKey","debtorDebts","debtToCollect","amountPaid","_sourceFundsForPayment","currentCollectorWidth","remainingDebt","currentDebts","payerKey","debts","Object","entries","currentLenderWidth","amountNeeded","fundsSourced","currentWidth","surplus","paymentFromSurplus","shortfall","ourDebtors","filter","subDebtorKey","amountStillNeeded","subDebtorDebts","subDebtOwed","amountToRequest","collectedFromSubDebtor","remaining","updatedSubDebts","setComponentTemplate","precompileTemplate","strictMode","scope","hash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"width.js","sources":["../../../../../src/components/hds/advanced-table/column-manager/width.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { modifier } from 'ember-modifier';\nimport { TrackedMap } from 'tracked-built-ins';\nimport { hash } from '@ember/helper';\nimport { isPixelSize, measureColumnWidth, pixelToNumber } from '../utils.ts';\n\nimport type {\n HdsAdvancedTableNormalizedColumn,\n HdsAdvancedTablePixelString,\n} from '../types.ts';\nimport type { ModifierLike } from '@glint/template';\n\nexport const DEFAULT_WIDTH = '1fr'; // default to '1fr' to allow flexible width\nexport const DEFAULT_MIN_WIDTH = '150px';\nexport const SUBPIXEL_TOLERANCE = 0.5;\n\ntype HdsAdvancedTableColumnWidth = HdsAdvancedTableNormalizedColumn['width'];\n\nexport interface HdsAdvancedTableSyncWidthValuesSignature {\n Element: HTMLDivElement;\n}\n\ninterface HdsAdvancedTableColumnManagerWidthSignature {\n Args: {\n columnOrder: string[];\n columns: HdsAdvancedTableNormalizedColumn[];\n orderedColumns: HdsAdvancedTableNormalizedColumn[];\n thElements: TrackedMap<string, HTMLDivElement>;\n isSelectable?: boolean;\n getColumnByKey: (\n key: string\n ) => HdsAdvancedTableNormalizedColumn | undefined;\n };\n Blocks: {\n default: [\n {\n gridTemplateColumns: string;\n syncWidthValues: ModifierLike<HdsAdvancedTableSyncWidthValuesSignature>;\n beginColumnResize: () => void;\n resizeColumnByDelta: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n deltaPx: number\n ) => number;\n commitColumnWidths: () => void;\n getAppliedWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => HdsAdvancedTableNormalizedColumn['width'];\n getRenderedWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => HdsAdvancedTablePixelString | undefined;\n getSiblingColumnKeys: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n ) => {\n previous?: HdsAdvancedTableNormalizedColumn['key'];\n next?: HdsAdvancedTableNormalizedColumn['key'];\n };\n resetTransientColumnWidths: () => void;\n restoreColumnWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => void;\n },\n ];\n };\n}\n\nexport default class HdsAdvancedTableColumnManagerWidth extends Component<HdsAdvancedTableColumnManagerWidthSignature> {\n private _columnWidths = new TrackedMap<string, HdsAdvancedTableColumnWidth>();\n private _originalColumnWidths = new TrackedMap<\n string,\n HdsAdvancedTableColumnWidth\n >();\n private _transientColumnWidths = new TrackedMap<\n string,\n HdsAdvancedTablePixelString\n >();\n private _resizeStartWidths = new TrackedMap<string, number>();\n\n syncWidthValues = modifier<HdsAdvancedTableSyncWidthValuesSignature>(() => {\n const { columns } = this.args;\n\n for (const column of columns) {\n this._columnWidths.set(column.key, column.width ?? DEFAULT_WIDTH);\n this._originalColumnWidths.set(column.key, column.width ?? DEFAULT_WIDTH);\n }\n });\n\n get gridTemplateColumns(): string {\n const { isSelectable, orderedColumns } = this.args;\n\n let style = isSelectable ? 'min-content ' : '';\n\n for (const col of orderedColumns) {\n style += ` ${this.getAppliedWidth(col.key)}`;\n }\n\n return style;\n }\n\n getAppliedWidth = (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ): HdsAdvancedTableNormalizedColumn['width'] => {\n const width = this._columnWidths.get(columnKey);\n const transientWidth = this._transientColumnWidths.get(columnKey);\n\n return (\n transientWidth ??\n width ??\n `${this.args.thElements.get(columnKey)?.offsetWidth ?? 0}px`\n );\n };\n\n getSiblingColumnKeys = (\n columnKey: HdsAdvancedTableNormalizedColumn['key'] | null\n ): {\n previous?: HdsAdvancedTableNormalizedColumn['key'];\n next?: HdsAdvancedTableNormalizedColumn['key'];\n } => {\n if (columnKey === null) {\n return {};\n }\n\n const columnIndex = this.args.columnOrder.indexOf(columnKey);\n\n if (columnIndex === -1) {\n return {};\n }\n\n return {\n previous:\n columnIndex === 0 ? undefined : this.args.columnOrder[columnIndex - 1],\n next:\n columnIndex === this.args.columnOrder.length - 1\n ? undefined\n : this.args.columnOrder[columnIndex + 1],\n };\n };\n\n private _getPxWidth(key: string): number {\n const width = this._columnWidths.get(key);\n\n if (width !== undefined && isPixelSize(width)) {\n return pixelToNumber(width as `${number}px`);\n } else {\n return this.args.thElements.get(key)?.offsetWidth ?? 0;\n }\n }\n\n private _colMinPx(\n column: HdsAdvancedTableNormalizedColumn | undefined\n ): number {\n const minWidth = column?.minWidth ?? DEFAULT_MIN_WIDTH;\n\n return isPixelSize(minWidth) ? pixelToNumber(minWidth) : 0;\n }\n\n private _colMaxPx(\n column: HdsAdvancedTableNormalizedColumn | undefined\n ): number {\n const maxWidth = column?.maxWidth;\n\n return maxWidth !== undefined && isPixelSize(maxWidth)\n ? pixelToNumber(maxWidth)\n : Infinity;\n }\n\n beginColumnResize = (): void => {\n this._resizeStartWidths.clear();\n\n for (const key of this.args.columnOrder) {\n const pixelWidth = this._getPxWidth(key);\n\n this._resizeStartWidths.set(key, pixelWidth);\n this._transientColumnWidths.set(key, `${pixelWidth}px`);\n }\n };\n\n private _distributeWidthChange(keys: string[], amount: number): void {\n let remaining = amount;\n\n for (const key of keys) {\n const start = this._resizeStartWidths.get(key) ?? 0;\n const column = this.args.getColumnByKey(key);\n let applied = 0;\n\n if (remaining > 0) {\n applied = Math.min(\n remaining,\n Math.max(0, this._colMaxPx(column) - start)\n );\n } else if (remaining < 0) {\n applied = -Math.min(\n -remaining,\n Math.max(0, start - this._colMinPx(column))\n );\n }\n\n this._transientColumnWidths.set(key, `${start + applied}px`);\n remaining -= applied;\n }\n }\n\n private _distributableCapacity(keys: string[], grow: boolean): number {\n return keys.reduce((sum, key) => {\n const start = this._resizeStartWidths.get(key) ?? 0;\n const column = this.args.getColumnByKey(key);\n\n return (\n sum +\n (grow\n ? Math.max(0, this._colMaxPx(column) - start)\n : Math.max(0, start - this._colMinPx(column)))\n );\n }, 0);\n }\n\n resizeColumnByDelta = (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n deltaPx: number\n ): number => {\n const order = this.args.columnOrder;\n const index = order.indexOf(columnKey);\n\n if (index === -1) {\n return 0;\n }\n\n const draggedKeys = [columnKey];\n // nearest-to-boundary first, so the cascade grows outward\n const rightKeys = order.slice(index + 1);\n\n let actualDelta: number;\n\n if (deltaPx > 0) {\n const capacity = Math.min(\n this._distributableCapacity(draggedKeys, true),\n this._distributableCapacity(rightKeys, false)\n );\n\n actualDelta = Math.max(0, Math.min(deltaPx, capacity));\n } else if (deltaPx < 0) {\n const capacity = Math.min(\n this._distributableCapacity(draggedKeys, false),\n this._distributableCapacity(rightKeys, true)\n );\n\n actualDelta = Math.min(0, -Math.min(-deltaPx, capacity));\n } else {\n actualDelta = 0;\n }\n\n this._distributeWidthChange(draggedKeys, actualDelta);\n this._distributeWidthChange(rightKeys, -actualDelta);\n\n return actualDelta;\n };\n\n commitColumnWidths = (): void => {\n const entries = this.args.columns.map((column) => {\n const startPixelWidth = this._resizeStartWidths.get(column.key);\n const transientWidth = this._transientColumnWidths.get(column.key);\n const pixelWidth =\n transientWidth !== undefined\n ? pixelToNumber(transientWidth)\n : this._getPxWidth(column.key);\n\n return {\n key: column.key,\n pixelWidth,\n startPixelWidth: startPixelWidth ?? pixelWidth,\n frMultiplier: this._parseFrMultiplier(\n this._columnWidths.get(column.key) ?? DEFAULT_WIDTH\n ),\n hasMoved:\n startPixelWidth !== undefined &&\n Math.abs(pixelWidth - startPixelWidth) > SUBPIXEL_TOLERANCE,\n };\n });\n\n const pxPerFrUnit = this._resolvePxPerFrUnit(entries);\n\n for (const entry of entries) {\n if (!entry.hasMoved) {\n continue;\n }\n\n if (entry.frMultiplier !== undefined && pxPerFrUnit > 0) {\n const weight = Math.max(\n 0,\n entry.frMultiplier +\n (entry.pixelWidth - entry.startPixelWidth) / pxPerFrUnit\n );\n\n this._columnWidths.set(\n entry.key,\n `${Math.round(weight * 1e6) / 1e6}fr`\n );\n } else {\n this._columnWidths.set(entry.key, `${Math.round(entry.pixelWidth)}px`);\n }\n }\n };\n\n private _resolvePxPerFrUnit(\n entries: {\n startPixelWidth: number;\n frMultiplier: number | undefined;\n }[]\n ): number {\n const flexible = entries.filter(\n (entry) => entry.frMultiplier !== undefined && entry.frMultiplier > 0\n );\n\n const totalWeight = flexible.reduce(\n (sum, entry) => sum + (entry.frMultiplier ?? 0),\n 0\n );\n const totalPixels = flexible.reduce(\n (sum, entry) => sum + entry.startPixelWidth,\n 0\n );\n\n return totalWeight > 0 ? totalPixels / totalWeight : 0;\n }\n\n resetTransientColumnWidths = (): void => {\n this._transientColumnWidths.clear();\n };\n\n restoreColumnWidth = (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ): void => {\n const originalWidth =\n this._originalColumnWidths.get(columnKey) ?? DEFAULT_WIDTH;\n\n this._transientColumnWidths.delete(columnKey);\n this._columnWidths.set(columnKey, originalWidth);\n };\n\n getRenderedWidth = (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ): HdsAdvancedTablePixelString | undefined => {\n return measureColumnWidth(this.args.thElements.get(columnKey));\n };\n\n private _parseFrMultiplier(value: string): number | undefined {\n const match = /^(-?\\d+(?:\\.\\d+)?)fr$/.exec(value);\n\n return match ? Number(match[1]) : undefined;\n }\n\n <template>\n {{yield\n (hash\n gridTemplateColumns=this.gridTemplateColumns\n syncWidthValues=this.syncWidthValues\n beginColumnResize=this.beginColumnResize\n resizeColumnByDelta=this.resizeColumnByDelta\n commitColumnWidths=this.commitColumnWidths\n getAppliedWidth=this.getAppliedWidth\n getSiblingColumnKeys=this.getSiblingColumnKeys\n getRenderedWidth=this.getRenderedWidth\n restoreColumnWidth=this.restoreColumnWidth\n resetTransientColumnWidths=this.resetTransientColumnWidths\n )\n }}\n </template>\n}\n"],"names":["DEFAULT_WIDTH","DEFAULT_MIN_WIDTH","SUBPIXEL_TOLERANCE","HdsAdvancedTableColumnManagerWidth","Component","_columnWidths","TrackedMap","_originalColumnWidths","_transientColumnWidths","_resizeStartWidths","syncWidthValues","modifier","columns","args","column","set","key","width","gridTemplateColumns","isSelectable","orderedColumns","style","col","getAppliedWidth","columnKey","get","transientWidth","thElements","offsetWidth","getSiblingColumnKeys","columnIndex","columnOrder","indexOf","previous","undefined","next","length","_getPxWidth","isPixelSize","pixelToNumber","_colMinPx","minWidth","_colMaxPx","maxWidth","Infinity","beginColumnResize","clear","pixelWidth","_distributeWidthChange","keys","amount","remaining","start","getColumnByKey","applied","Math","min","max","_distributableCapacity","grow","reduce","sum","resizeColumnByDelta","deltaPx","order","index","draggedKeys","rightKeys","slice","actualDelta","capacity","commitColumnWidths","entries","map","startPixelWidth","frMultiplier","_parseFrMultiplier","hasMoved","abs","pxPerFrUnit","_resolvePxPerFrUnit","entry","weight","round","flexible","filter","totalWeight","totalPixels","resetTransientColumnWidths","restoreColumnWidth","originalWidth","delete","getRenderedWidth","measureColumnWidth","value","match","exec","Number","setComponentTemplate","precompileTemplate","strictMode","scope","hash"],"mappings":"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"}
|