@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.
Files changed (72) hide show
  1. package/component-catalog.json +13139 -0
  2. package/declarations/components/hds/advanced-table/column-manager/index.d.ts +5 -7
  3. package/declarations/components/hds/advanced-table/column-manager/width.d.ts +17 -20
  4. package/declarations/components/hds/advanced-table/index.d.ts +3 -2
  5. package/declarations/components/hds/advanced-table/th-context-menu.d.ts +2 -1
  6. package/declarations/components/hds/advanced-table/th-resize-handle.d.ts +8 -19
  7. package/declarations/components/hds/advanced-table/th.d.ts +5 -19
  8. package/declarations/components/hds/advanced-table/tr.d.ts +3 -0
  9. package/declarations/components/hds/advanced-table/types.d.ts +1 -1
  10. package/declarations/components/hds/advanced-table/utils.d.ts +1 -0
  11. package/declarations/components/hds/composite/index.d.ts +1 -0
  12. package/declarations/components/hds/icon/index.d.ts +1 -1
  13. package/declarations/components/hds/segmented-group/index.d.ts +13 -3
  14. package/declarations/components/hds/stepper/task/indicator.d.ts +1 -1
  15. package/declarations/components/hds/table/index.d.ts +1 -0
  16. package/declarations/components/hds/table/tr.d.ts +4 -0
  17. package/dist/components/hds/advanced-table/column-manager/index.js +1 -1
  18. package/dist/components/hds/advanced-table/column-manager/index.js.map +1 -1
  19. package/dist/components/hds/advanced-table/column-manager/order.js +2 -1
  20. package/dist/components/hds/advanced-table/column-manager/order.js.map +1 -1
  21. package/dist/components/hds/advanced-table/column-manager/width.js +96 -183
  22. package/dist/components/hds/advanced-table/column-manager/width.js.map +1 -1
  23. package/dist/components/hds/advanced-table/index.js +1 -1
  24. package/dist/components/hds/advanced-table/th-context-menu.js +14 -7
  25. package/dist/components/hds/advanced-table/th-context-menu.js.map +1 -1
  26. package/dist/components/hds/advanced-table/th-reorder-drop-target.js +1 -1
  27. package/dist/components/hds/advanced-table/th-resize-handle.js +1 -1
  28. package/dist/components/hds/advanced-table/th-selectable.js +1 -1
  29. package/dist/components/hds/advanced-table/th.js +1 -1
  30. package/dist/components/hds/advanced-table/tr.js +3 -1
  31. package/dist/components/hds/advanced-table/tr.js.map +1 -1
  32. package/dist/components/hds/advanced-table/types.js.map +1 -1
  33. package/dist/components/hds/advanced-table/utils.js +8 -1
  34. package/dist/components/hds/advanced-table/utils.js.map +1 -1
  35. package/dist/components/hds/composite/index.js +6 -0
  36. package/dist/components/hds/composite/index.js.map +1 -1
  37. package/dist/components/hds/filter-bar/index.js +1 -1
  38. package/dist/components/hds/filter-bar/index.js.map +1 -1
  39. package/dist/components/hds/segmented-group/index.js +36 -13
  40. package/dist/components/hds/segmented-group/index.js.map +1 -1
  41. package/dist/components/hds/stepper/list/step.js +6 -2
  42. package/dist/components/hds/stepper/list/step.js.map +1 -1
  43. package/dist/components/hds/stepper/nav/step.js +6 -2
  44. package/dist/components/hds/stepper/nav/step.js.map +1 -1
  45. package/dist/components/hds/table/index.js +9 -0
  46. package/dist/components/hds/table/index.js.map +1 -1
  47. package/dist/components/hds/table/tr.js +27 -15
  48. package/dist/components/hds/table/tr.js.map +1 -1
  49. package/dist/components.js +1 -1
  50. package/dist/{index-DtMB-P9m.js → index-Cx64Nvu4.js} +111 -226
  51. package/dist/index-Cx64Nvu4.js.map +1 -0
  52. package/dist/modifiers/hds-scroll-into-view-on-focus.js +4 -0
  53. package/dist/modifiers/hds-scroll-into-view-on-focus.js.map +1 -1
  54. package/dist/styles/@hashicorp/design-system-components.css +86 -22
  55. package/dist/styles/@hashicorp/design-system-components.css.map +1 -1
  56. package/dist/styles/components/advanced-table.scss +4 -1
  57. package/dist/styles/components/badge-count.scss +1 -1
  58. package/dist/styles/components/badge.scss +1 -1
  59. package/dist/styles/components/filter-bar.scss +10 -2
  60. package/dist/styles/components/form/character-count.scss +1 -1
  61. package/dist/styles/components/form/error.scss +1 -1
  62. package/dist/styles/components/form/helper-text.scss +1 -1
  63. package/dist/styles/components/form/indicator.scss +1 -1
  64. package/dist/styles/components/form/label.scss +1 -1
  65. package/dist/styles/components/form/legend.scss +1 -1
  66. package/dist/styles/components/icon-tile.scss +1 -1
  67. package/dist/styles/components/link/standalone.scss +1 -1
  68. package/dist/styles/components/segmented-group.scss +43 -6
  69. package/dist/styles/components/tag.scss +1 -1
  70. package/package.json +7 -4
  71. package/translations/hds/components/stepper/en-us.yaml +1 -0
  72. 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 applyTransientWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => void;\n getAppliedWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => HdsAdvancedTableNormalizedColumn['width'];\n getColumnByKey: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => HdsAdvancedTableNormalizedColumn | 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 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 setTransientColumnWidths: (options: { roundValues?: boolean }) => void;\n setTransientColumnWidth: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n width: `${number}px`,\n clamped?: boolean\n ) => void;\n resetTransientColumnWidths: () => void;\n stepColumn: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n step: number\n ) => void;\n updateResizeDebt: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n delta: 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 applyTransientWidth=Width.applyTransientWidth\n getAppliedWidth=Width.getAppliedWidth\n getColumnByKey=this.getColumnByKey\n getSiblingColumnKeys=Width.getSiblingColumnKeys\n reorderHoveredColumnKey=Order.reorderHoveredColumnKey\n restoreColumnWidth=Width.restoreColumnWidth\n moveColumnToDropTarget=Order.moveColumnToDropTarget\n moveColumnToTarget=Order.moveColumnToTarget\n moveColumnToTerminalPosition=Order.moveColumnToTerminalPosition\n setTransientColumnWidths=Width.setTransientColumnWidths\n setTransientColumnWidth=Width.setTransientColumnWidth\n resetTransientColumnWidths=Width.resetTransientColumnWidths\n stepColumn=Order.stepColumn\n setDraggedColumnKey=Order.setDraggedColumnKey\n setReorderHoveredColumnKey=Order.setReorderHoveredColumnKey\n updateResizeDebt=Width.updateResizeDebt\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;AAgHc,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,u1DAAA,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;;;;"}
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
- requestAnimationFrame(() => {
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 DEFAULT_MAX_WIDTH = '800px';
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
- _columnDebts = new TrackedMap();
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
- const appliedWidth = this.getAppliedWidth(col.key);
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
- _getPxMinWidth(key) {
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
- applyTransientWidth = columnKey => {
74
- if (columnKey == undefined) {
75
- return;
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
- setTransientColumnWidths = (options = {}) => {
81
- const roundValues = options.roundValues ?? false;
82
- this._columnWidths.forEach((width, key) => {
83
- let _width;
84
- if (width !== undefined && isPixelSize(width)) {
85
- _width = pixelToNumber(width);
86
- } else {
87
- _width = this.args.thElements.get(key)?.offsetWidth ?? 0;
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, `${roundValues ? Math.round(_width) : _width}px`);
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
- if (clamped) {
101
- const {
102
- minWidth,
103
- maxWidth
104
- } = column;
105
- const minWidthInPixels = minWidth === undefined ? 1 : pixelToNumber(minWidth);
106
- const maxWidthInPixels = maxWidth === undefined ? Infinity : pixelToNumber(maxWidth);
107
- const transientColumnWidthInPixels = Math.min(Math.max(pixelToNumber(width), minWidthInPixels), maxWidthInPixels);
108
- this._transientColumnWidths.set(columnKey, `${transientColumnWidthInPixels}px`);
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
- this._transientColumnWidths.set(columnKey, width);
122
+ actualDelta = 0;
111
123
  }
124
+ this._distributeWidthChange(draggedKeys, actualDelta);
125
+ this._distributeWidthChange(rightKeys, -actualDelta);
126
+ return actualDelta;
112
127
  };
113
- updateResizeDebt = (columnKey, delta) => {
114
- if (delta === 0) {
115
- return;
116
- }
117
- const {
118
- next: nextColumnKey
119
- } = this.getSiblingColumnKeys(columnKey);
120
- if (nextColumnKey === undefined) {
121
- return;
122
- }
123
- // determine borrower and lender
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
- if (newDebt <= 0) {
137
- delete updatedDebts[borrowerKey];
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
- updatedDebts[borrowerKey] = newDebt;
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
- // restores a column to its original width, settling all debts first
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
- // settle debts (collect from debtors, pay lenders)
156
- this._settleWidthDebts(columnKey);
157
- // restore original width
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
- _settleWidthDebts(key) {
165
- this._collectWidthDebts(key);
166
- this._payWidthDebts(key);
167
- }
168
- _collectWidthDebts(collectorKey) {
169
- // iterate over all known columns to see if they owe the collector
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 applyTransientWidth=this.applyTransientWidth getAppliedWidth=this.getAppliedWidth getSiblingColumnKeys=this.getSiblingColumnKeys restoreColumnWidth=this.restoreColumnWidth setTransientColumnWidths=this.setTransientColumnWidths setTransientColumnWidth=this.setTransientColumnWidth resetTransientColumnWidths=this.resetTransientColumnWidths updateResizeDebt=this.updateResizeDebt)}}", {
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 { DEFAULT_MAX_WIDTH, DEFAULT_MIN_WIDTH, DEFAULT_WIDTH, HdsAdvancedTableColumnManagerWidth as default };
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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"}