@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
|
@@ -16,7 +16,7 @@ import '../filter-bar/index.js';
|
|
|
16
16
|
import '../application-state/index.js';
|
|
17
17
|
import '../composite/index.js';
|
|
18
18
|
import './column-manager/index.js';
|
|
19
|
-
export { B as BORDER_WIDTH, f as DEFAULT_DENSITY, g as DEFAULT_VALIGN, h as DENSITIES, V as VALIGNMENTS, H as default } from '../../../index-
|
|
19
|
+
export { B as BORDER_WIDTH, f as DEFAULT_DENSITY, g as DEFAULT_VALIGN, h as DENSITIES, V as VALIGNMENTS, H as default } from '../../../index-Cx64Nvu4.js';
|
|
20
20
|
import './body.js';
|
|
21
21
|
import './td.js';
|
|
22
22
|
import '../../../helpers/hds-t.js';
|
|
@@ -8,6 +8,7 @@ import { eq, gt } from 'ember-truth-helpers';
|
|
|
8
8
|
import { on } from '@ember/modifier';
|
|
9
9
|
import HdsDropdown from '../dropdown/index.js';
|
|
10
10
|
import HdsTHelper from '../../../helpers/hds-t.js';
|
|
11
|
+
import { requestAnimationFrameWaiter } from './utils.js';
|
|
11
12
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
12
13
|
import { setComponentTemplate } from '@ember/component';
|
|
13
14
|
import { g, i } from 'decorator-transforms/runtime';
|
|
@@ -145,15 +146,21 @@ class HdsAdvancedTableThContextMenu extends Component {
|
|
|
145
146
|
const {
|
|
146
147
|
column,
|
|
147
148
|
onColumnResize,
|
|
149
|
+
onGetRenderedWidth,
|
|
148
150
|
onRestoreColumnWidth
|
|
149
151
|
} = this.args;
|
|
150
|
-
if (typeof onRestoreColumnWidth
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
if (typeof onRestoreColumnWidth !== 'function' || column.key === undefined) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
onRestoreColumnWidth(column.key);
|
|
156
|
+
if (typeof onColumnResize === 'function') {
|
|
157
|
+
// restoring re-flows every flexible column, so the resulting width is only
|
|
158
|
+
// knowable after the grid has re-laid-out
|
|
159
|
+
requestAnimationFrameWaiter(() => {
|
|
160
|
+
onColumnResize(column.key, onGetRenderedWidth?.(column.key));
|
|
161
|
+
});
|
|
156
162
|
}
|
|
163
|
+
dropdownCloseCallback();
|
|
157
164
|
}
|
|
158
165
|
_moveColumn() {
|
|
159
166
|
const {
|
|
@@ -170,7 +177,7 @@ class HdsAdvancedTableThContextMenu extends Component {
|
|
|
170
177
|
onMoveColumnToTerminalPosition
|
|
171
178
|
} = this.args;
|
|
172
179
|
onMoveColumnToTerminalPosition?.(column.key, position);
|
|
173
|
-
|
|
180
|
+
requestAnimationFrameWaiter(() => {
|
|
174
181
|
dropdownCloseCallback?.();
|
|
175
182
|
this._toggleElement?.focus();
|
|
176
183
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"th-context-menu.js","sources":["../../../../src/components/hds/advanced-table/th-context-menu.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { scheduleOnce } from '@ember/runloop';\nimport { modifier } from 'ember-modifier';\nimport { concat, fn } from '@ember/helper';\nimport { gt, eq } from 'ember-truth-helpers';\nimport { on } from '@ember/modifier';\n\nimport HdsDropdown from '../dropdown/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\n\nimport type { HdsDropdownSignature } from '../dropdown/index.gts';\nimport type { HdsDropdownToggleIconSignature } from '../dropdown/toggle/icon.gts';\nimport type { HdsAdvancedTableSignature } from './index.gts';\nimport type { HdsAdvancedTableThReorderHandleSignature } from './th-reorder-handle.gts';\nimport type { HdsAdvancedTableThResizeHandleSignature } from './th-resize-handle.gts';\nimport type { HdsDropdownToggleButtonSignature } from '../dropdown/toggle/button.gts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport type { HdsAdvancedTableNormalizedColumn } from './types.ts';\n\ninterface HdsAdvancedTableThContextMenuOption {\n key: string;\n icon?: HdsDropdownToggleIconSignature['Args']['icon'];\n label?: string;\n action?: (dropdownCloseCallback: () => void) => void;\n}\n\nexport interface HdsAdvancedTableThContextMenuSignature {\n Args: {\n column: HdsAdvancedTableNormalizedColumn;\n isFirstColumn: boolean;\n isFirstNonStickyColumn: boolean;\n isLastColumn: boolean;\n hasResizableColumns?: boolean;\n hasReorderableColumns?: boolean;\n isStickyColumn?: boolean;\n reorderHandleElement?: HdsAdvancedTableThReorderHandleSignature['Element'];\n resizeHandleElement?: HdsAdvancedTableThResizeHandleSignature['Element'];\n onColumnResize?: HdsAdvancedTableSignature['Args']['onColumnResize'];\n onFocusReorderHandle?: () => void;\n onMoveColumnToTerminalPosition?: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n position: 'start' | 'end'\n ) => void;\n onPinFirstColumn?: () => void;\n onRestoreColumnWidth?: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => void;\n };\n Element: HdsDropdownSignature['Element'];\n}\n\nexport default class HdsAdvancedTableThContextMenu extends Component<HdsAdvancedTableThContextMenuSignature> {\n @service declare readonly hdsIntl: HdsIntlService;\n\n @tracked private _toggleElement:\n | HdsDropdownToggleButtonSignature['Element']\n | null = null;\n\n get _resizeOptions(): HdsAdvancedTableThContextMenuOption[] {\n const { isLastColumn } = this.args;\n\n const translatedResetWidthLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.reset-width',\n { default: 'Reset column width' }\n );\n\n let resizeOptions: HdsAdvancedTableThContextMenuOption[] = [\n {\n key: 'reset-column-width',\n label: translatedResetWidthLabel,\n icon: 'rotate-ccw',\n action: this._resetColumnWidth.bind(this),\n },\n ];\n\n if (!isLastColumn) {\n const translatedResizeLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.resize',\n { default: 'Resize column' }\n );\n\n resizeOptions = [\n {\n key: 'resize-column',\n label: translatedResizeLabel,\n icon: 'resize-column',\n action: this._resizeColumn.bind(this),\n },\n ...resizeOptions,\n ];\n }\n\n return resizeOptions;\n }\n\n get _reorderOptions(): HdsAdvancedTableThContextMenuOption[] {\n const { isFirstNonStickyColumn, isLastColumn } = this.args;\n\n const translatedMoveColumnLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.move-column',\n { default: 'Move column' }\n );\n\n let reorderOptions: HdsAdvancedTableThContextMenuOption[] = [\n {\n key: 'reorder-column',\n label: translatedMoveColumnLabel,\n icon: 'move-horizontal',\n action: () => this._moveColumn(),\n },\n ];\n\n if (!isFirstNonStickyColumn) {\n const translatedMoveColumnToStartLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.move-column-to-start',\n { default: 'Move column to start' }\n );\n reorderOptions = [\n ...reorderOptions,\n {\n key: 'move-column-to-start',\n label: translatedMoveColumnToStartLabel,\n icon: 'start',\n action: (close) => this._moveColumnToPosition('start', close),\n },\n ];\n }\n\n if (!isLastColumn) {\n const translatedMoveColumnToEndLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.move-column-to-end',\n { default: 'Move column to end' }\n );\n reorderOptions = [\n ...reorderOptions,\n {\n key: 'move-column-to-end',\n label: translatedMoveColumnToEndLabel,\n icon: 'end',\n action: (close) => this._moveColumnToPosition('end', close),\n },\n ];\n }\n\n return reorderOptions;\n }\n\n get _stickyColumnOptions(): HdsAdvancedTableThContextMenuOption[] {\n const { isStickyColumn } = this.args;\n\n const translatedPinLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.pin',\n { default: 'Pin column' }\n );\n const translatedUnpinLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.unpin',\n { default: 'Unpin column' }\n );\n\n return [\n {\n key: 'pin-first-column',\n label: isStickyColumn ? translatedUnpinLabel : translatedPinLabel,\n icon: isStickyColumn ? 'pin-off' : 'pin',\n action: this._pinFirstColumn.bind(this),\n },\n ];\n }\n\n get _options(): HdsAdvancedTableThContextMenuOption[] {\n const {\n hasReorderableColumns,\n hasResizableColumns,\n isFirstColumn,\n isStickyColumn,\n } = this.args;\n\n let allGroups: HdsAdvancedTableThContextMenuOption[][] = [];\n\n if (hasResizableColumns) {\n allGroups = [...allGroups, this._resizeOptions];\n }\n\n if (hasReorderableColumns && isStickyColumn !== true) {\n allGroups = [...allGroups, this._reorderOptions];\n }\n\n if (isFirstColumn && isStickyColumn !== undefined) {\n allGroups = [...allGroups, this._stickyColumnOptions];\n }\n\n return allGroups.reduce<HdsAdvancedTableThContextMenuOption[]>(\n (options, group, index) => {\n // Add a separator before each group except the first\n if (index > 0) {\n return [...options, { key: 'separator' }, ...group];\n }\n return [...options, ...group];\n },\n []\n );\n }\n\n private _registerDropdownToggleElement = modifier(\n (element: HdsDropdownToggleButtonSignature['Element']) => {\n this._toggleElement = element;\n }\n );\n\n private _resizeColumn() {\n this.args.resizeHandleElement?.focus();\n }\n\n private _resetColumnWidth(dropdownCloseCallback: () => void): void {\n const { column, onColumnResize, onRestoreColumnWidth } = this.args;\n\n if (\n typeof onRestoreColumnWidth === 'function' &&\n column.key !== undefined\n ) {\n onRestoreColumnWidth(column.key);\n\n if (typeof onColumnResize === 'function') {\n onColumnResize(column.key, column.width);\n }\n\n dropdownCloseCallback();\n }\n }\n\n private _moveColumn() {\n const { onFocusReorderHandle } = this.args;\n\n if (typeof onFocusReorderHandle === 'function') {\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, onFocusReorderHandle);\n }\n }\n\n private _moveColumnToPosition(\n position: 'start' | 'end',\n dropdownCloseCallback?: () => void\n ): void {\n const { column, onMoveColumnToTerminalPosition } = this.args;\n\n onMoveColumnToTerminalPosition?.(column.key, position);\n\n requestAnimationFrame(() => {\n dropdownCloseCallback?.();\n\n this._toggleElement?.focus();\n });\n }\n\n private _pinFirstColumn(dropdownCloseCallback: () => void): void {\n const { onPinFirstColumn } = this.args;\n\n if (typeof onPinFirstColumn === 'function') {\n onPinFirstColumn();\n }\n\n dropdownCloseCallback();\n }\n\n <template>\n {{#if (gt this._options.length 0)}}\n <HdsDropdown\n class=\"hds-advanced-table__th-context-menu\"\n @enableCollisionDetection={{true}}\n ...attributes\n as |D|\n >\n <D.ToggleIcon\n @icon=\"more-vertical\"\n @text={{hdsT\n \"hds.components.advanced-table.th-context-menu.actions\"\n columnLabel=@column.label\n default=(concat \"Additional actions for \" @column.label)\n }}\n @hasChevron={{false}}\n @size=\"small\"\n {{this._registerDropdownToggleElement}}\n />\n\n {{#each this._options as |option|}}\n {{#if (eq option.key \"separator\")}}\n <D.Separator />\n {{else if option.action}}\n <D.Interactive\n @icon={{option.icon}}\n data-test-context-option-key={{option.key}}\n {{on \"click\" (fn option.action D.close)}}\n >\n {{option.label}}\n </D.Interactive>\n {{/if}}\n {{/each}}\n </HdsDropdown>\n {{/if}}\n </template>\n}\n"],"names":["HdsAdvancedTableThContextMenu","Component","g","prototype","service","i","tracked","_resizeOptions","isLastColumn","args","translatedResetWidthLabel","hdsIntl","t","default","resizeOptions","key","label","icon","action","_resetColumnWidth","bind","translatedResizeLabel","_resizeColumn","_reorderOptions","isFirstNonStickyColumn","translatedMoveColumnLabel","reorderOptions","_moveColumn","translatedMoveColumnToStartLabel","close","_moveColumnToPosition","translatedMoveColumnToEndLabel","_stickyColumnOptions","isStickyColumn","translatedPinLabel","translatedUnpinLabel","_pinFirstColumn","_options","hasReorderableColumns","hasResizableColumns","isFirstColumn","allGroups","undefined","reduce","options","group","index","_registerDropdownToggleElement","modifier","element","_toggleElement","resizeHandleElement","focus","dropdownCloseCallback","column","onColumnResize","onRestoreColumnWidth","width","onFocusReorderHandle","scheduleOnce","position","onMoveColumnToTerminalPosition","requestAnimationFrame","onPinFirstColumn","setComponentTemplate","precompileTemplate","strictMode","scope","gt","HdsDropdown","hdsT","concat","eq","on","fn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"th-context-menu.js","sources":["../../../../src/components/hds/advanced-table/th-context-menu.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { scheduleOnce } from '@ember/runloop';\nimport { modifier } from 'ember-modifier';\nimport { concat, fn } from '@ember/helper';\nimport { gt, eq } from 'ember-truth-helpers';\nimport { on } from '@ember/modifier';\n\nimport HdsDropdown from '../dropdown/index.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\nimport { requestAnimationFrameWaiter } from './utils.ts';\n\nimport type { HdsDropdownSignature } from '../dropdown/index.gts';\nimport type { HdsDropdownToggleIconSignature } from '../dropdown/toggle/icon.gts';\nimport type { HdsAdvancedTableSignature } from './index.gts';\nimport type { HdsAdvancedTableThReorderHandleSignature } from './th-reorder-handle.gts';\nimport type { HdsAdvancedTableThResizeHandleSignature } from './th-resize-handle.gts';\nimport type { HdsDropdownToggleButtonSignature } from '../dropdown/toggle/button.gts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport type {\n HdsAdvancedTableNormalizedColumn,\n HdsAdvancedTablePixelString,\n} from './types.ts';\n\ninterface HdsAdvancedTableThContextMenuOption {\n key: string;\n icon?: HdsDropdownToggleIconSignature['Args']['icon'];\n label?: string;\n action?: (dropdownCloseCallback: () => void) => void;\n}\n\nexport interface HdsAdvancedTableThContextMenuSignature {\n Args: {\n column: HdsAdvancedTableNormalizedColumn;\n isFirstColumn: boolean;\n isFirstNonStickyColumn: boolean;\n isLastColumn: boolean;\n hasResizableColumns?: boolean;\n hasReorderableColumns?: boolean;\n isStickyColumn?: boolean;\n reorderHandleElement?: HdsAdvancedTableThReorderHandleSignature['Element'];\n resizeHandleElement?: HdsAdvancedTableThResizeHandleSignature['Element'];\n onColumnResize?: HdsAdvancedTableSignature['Args']['onColumnResize'];\n onFocusReorderHandle?: () => void;\n onGetRenderedWidth?: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => HdsAdvancedTablePixelString | undefined;\n onMoveColumnToTerminalPosition?: (\n columnKey: HdsAdvancedTableNormalizedColumn['key'],\n position: 'start' | 'end'\n ) => void;\n onPinFirstColumn?: () => void;\n onRestoreColumnWidth?: (\n columnKey: HdsAdvancedTableNormalizedColumn['key']\n ) => void;\n };\n Element: HdsDropdownSignature['Element'];\n}\n\nexport default class HdsAdvancedTableThContextMenu extends Component<HdsAdvancedTableThContextMenuSignature> {\n @service declare readonly hdsIntl: HdsIntlService;\n\n @tracked private _toggleElement:\n | HdsDropdownToggleButtonSignature['Element']\n | null = null;\n\n get _resizeOptions(): HdsAdvancedTableThContextMenuOption[] {\n const { isLastColumn } = this.args;\n\n const translatedResetWidthLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.reset-width',\n { default: 'Reset column width' }\n );\n\n let resizeOptions: HdsAdvancedTableThContextMenuOption[] = [\n {\n key: 'reset-column-width',\n label: translatedResetWidthLabel,\n icon: 'rotate-ccw',\n action: this._resetColumnWidth.bind(this),\n },\n ];\n\n if (!isLastColumn) {\n const translatedResizeLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.resize',\n { default: 'Resize column' }\n );\n\n resizeOptions = [\n {\n key: 'resize-column',\n label: translatedResizeLabel,\n icon: 'resize-column',\n action: this._resizeColumn.bind(this),\n },\n ...resizeOptions,\n ];\n }\n\n return resizeOptions;\n }\n\n get _reorderOptions(): HdsAdvancedTableThContextMenuOption[] {\n const { isFirstNonStickyColumn, isLastColumn } = this.args;\n\n const translatedMoveColumnLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.move-column',\n { default: 'Move column' }\n );\n\n let reorderOptions: HdsAdvancedTableThContextMenuOption[] = [\n {\n key: 'reorder-column',\n label: translatedMoveColumnLabel,\n icon: 'move-horizontal',\n action: () => this._moveColumn(),\n },\n ];\n\n if (!isFirstNonStickyColumn) {\n const translatedMoveColumnToStartLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.move-column-to-start',\n { default: 'Move column to start' }\n );\n reorderOptions = [\n ...reorderOptions,\n {\n key: 'move-column-to-start',\n label: translatedMoveColumnToStartLabel,\n icon: 'start',\n action: (close) => this._moveColumnToPosition('start', close),\n },\n ];\n }\n\n if (!isLastColumn) {\n const translatedMoveColumnToEndLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.move-column-to-end',\n { default: 'Move column to end' }\n );\n reorderOptions = [\n ...reorderOptions,\n {\n key: 'move-column-to-end',\n label: translatedMoveColumnToEndLabel,\n icon: 'end',\n action: (close) => this._moveColumnToPosition('end', close),\n },\n ];\n }\n\n return reorderOptions;\n }\n\n get _stickyColumnOptions(): HdsAdvancedTableThContextMenuOption[] {\n const { isStickyColumn } = this.args;\n\n const translatedPinLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.pin',\n { default: 'Pin column' }\n );\n const translatedUnpinLabel = this.hdsIntl.t(\n 'hds.advanced-table.th-context-menu.unpin',\n { default: 'Unpin column' }\n );\n\n return [\n {\n key: 'pin-first-column',\n label: isStickyColumn ? translatedUnpinLabel : translatedPinLabel,\n icon: isStickyColumn ? 'pin-off' : 'pin',\n action: this._pinFirstColumn.bind(this),\n },\n ];\n }\n\n get _options(): HdsAdvancedTableThContextMenuOption[] {\n const {\n hasReorderableColumns,\n hasResizableColumns,\n isFirstColumn,\n isStickyColumn,\n } = this.args;\n\n let allGroups: HdsAdvancedTableThContextMenuOption[][] = [];\n\n if (hasResizableColumns) {\n allGroups = [...allGroups, this._resizeOptions];\n }\n\n if (hasReorderableColumns && isStickyColumn !== true) {\n allGroups = [...allGroups, this._reorderOptions];\n }\n\n if (isFirstColumn && isStickyColumn !== undefined) {\n allGroups = [...allGroups, this._stickyColumnOptions];\n }\n\n return allGroups.reduce<HdsAdvancedTableThContextMenuOption[]>(\n (options, group, index) => {\n // Add a separator before each group except the first\n if (index > 0) {\n return [...options, { key: 'separator' }, ...group];\n }\n return [...options, ...group];\n },\n []\n );\n }\n\n private _registerDropdownToggleElement = modifier(\n (element: HdsDropdownToggleButtonSignature['Element']) => {\n this._toggleElement = element;\n }\n );\n\n private _resizeColumn() {\n this.args.resizeHandleElement?.focus();\n }\n\n private _resetColumnWidth(dropdownCloseCallback: () => void): void {\n const { column, onColumnResize, onGetRenderedWidth, onRestoreColumnWidth } =\n this.args;\n\n if (\n typeof onRestoreColumnWidth !== 'function' ||\n column.key === undefined\n ) {\n return;\n }\n\n onRestoreColumnWidth(column.key);\n\n if (typeof onColumnResize === 'function') {\n // restoring re-flows every flexible column, so the resulting width is only\n // knowable after the grid has re-laid-out\n requestAnimationFrameWaiter(() => {\n onColumnResize(column.key, onGetRenderedWidth?.(column.key));\n });\n }\n\n dropdownCloseCallback();\n }\n\n private _moveColumn() {\n const { onFocusReorderHandle } = this.args;\n\n if (typeof onFocusReorderHandle === 'function') {\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, onFocusReorderHandle);\n }\n }\n\n private _moveColumnToPosition(\n position: 'start' | 'end',\n dropdownCloseCallback?: () => void\n ): void {\n const { column, onMoveColumnToTerminalPosition } = this.args;\n\n onMoveColumnToTerminalPosition?.(column.key, position);\n\n requestAnimationFrameWaiter(() => {\n dropdownCloseCallback?.();\n\n this._toggleElement?.focus();\n });\n }\n\n private _pinFirstColumn(dropdownCloseCallback: () => void): void {\n const { onPinFirstColumn } = this.args;\n\n if (typeof onPinFirstColumn === 'function') {\n onPinFirstColumn();\n }\n\n dropdownCloseCallback();\n }\n\n <template>\n {{#if (gt this._options.length 0)}}\n <HdsDropdown\n class=\"hds-advanced-table__th-context-menu\"\n @enableCollisionDetection={{true}}\n ...attributes\n as |D|\n >\n <D.ToggleIcon\n @icon=\"more-vertical\"\n @text={{hdsT\n \"hds.components.advanced-table.th-context-menu.actions\"\n columnLabel=@column.label\n default=(concat \"Additional actions for \" @column.label)\n }}\n @hasChevron={{false}}\n @size=\"small\"\n {{this._registerDropdownToggleElement}}\n />\n\n {{#each this._options as |option|}}\n {{#if (eq option.key \"separator\")}}\n <D.Separator />\n {{else if option.action}}\n <D.Interactive\n @icon={{option.icon}}\n data-test-context-option-key={{option.key}}\n {{on \"click\" (fn option.action D.close)}}\n >\n {{option.label}}\n </D.Interactive>\n {{/if}}\n {{/each}}\n </HdsDropdown>\n {{/if}}\n </template>\n}\n"],"names":["HdsAdvancedTableThContextMenu","Component","g","prototype","service","i","tracked","_resizeOptions","isLastColumn","args","translatedResetWidthLabel","hdsIntl","t","default","resizeOptions","key","label","icon","action","_resetColumnWidth","bind","translatedResizeLabel","_resizeColumn","_reorderOptions","isFirstNonStickyColumn","translatedMoveColumnLabel","reorderOptions","_moveColumn","translatedMoveColumnToStartLabel","close","_moveColumnToPosition","translatedMoveColumnToEndLabel","_stickyColumnOptions","isStickyColumn","translatedPinLabel","translatedUnpinLabel","_pinFirstColumn","_options","hasReorderableColumns","hasResizableColumns","isFirstColumn","allGroups","undefined","reduce","options","group","index","_registerDropdownToggleElement","modifier","element","_toggleElement","resizeHandleElement","focus","dropdownCloseCallback","column","onColumnResize","onGetRenderedWidth","onRestoreColumnWidth","requestAnimationFrameWaiter","onFocusReorderHandle","scheduleOnce","position","onMoveColumnToTerminalPosition","onPinFirstColumn","setComponentTemplate","precompileTemplate","strictMode","scope","gt","HdsDropdown","hdsT","concat","eq","on","fn"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import '@ember/object';
|
|
|
4
4
|
import 'ember-modifier';
|
|
5
5
|
import '@ember/modifier';
|
|
6
6
|
import 'ember-style-modifier';
|
|
7
|
-
export { e as default } from '../../../index-
|
|
7
|
+
export { e as default } from '../../../index-Cx64Nvu4.js';
|
|
8
8
|
import './utils.js';
|
|
9
9
|
import './types.js';
|
|
10
10
|
import '@ember/template-compilation';
|
|
@@ -6,7 +6,7 @@ import '@ember/modifier';
|
|
|
6
6
|
import 'ember-style-modifier';
|
|
7
7
|
import '@ember/helper';
|
|
8
8
|
import './utils.js';
|
|
9
|
-
export { d as default } from '../../../index-
|
|
9
|
+
export { d as default } from '../../../index-Cx64Nvu4.js';
|
|
10
10
|
import './column-manager/width.js';
|
|
11
11
|
import '../../../helpers/hds-t.js';
|
|
12
12
|
import '@ember/template-compilation';
|
|
@@ -6,7 +6,7 @@ import 'ember-modifier';
|
|
|
6
6
|
import '@ember/service';
|
|
7
7
|
import '@ember/modifier';
|
|
8
8
|
import './types.js';
|
|
9
|
-
export { b as default } from '../../../index-
|
|
9
|
+
export { b as default } from '../../../index-Cx64Nvu4.js';
|
|
10
10
|
import '../form/checkbox/base.js';
|
|
11
11
|
import './th-button-sort.js';
|
|
12
12
|
import '@ember/template-compilation';
|
|
@@ -18,7 +18,7 @@ import './th-button-sort.js';
|
|
|
18
18
|
import './th-button-tooltip.js';
|
|
19
19
|
import './th-context-menu.js';
|
|
20
20
|
import './th-reorder-handle.js';
|
|
21
|
-
export { A as ALIGNMENTS, D as DEFAULT_ALIGN, a as default } from '../../../index-
|
|
21
|
+
export { A as ALIGNMENTS, D as DEFAULT_ALIGN, a as default } from '../../../index-Cx64Nvu4.js';
|
|
22
22
|
import '../../../modifiers/hds-advanced-table-cell/dom-management.js';
|
|
23
23
|
import './types.js';
|
|
24
24
|
import '@ember/template-compilation';
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import '@glimmer/component';
|
|
2
2
|
import '@ember/debug';
|
|
3
3
|
import '@ember/helper';
|
|
4
|
+
import '@glimmer/tracking';
|
|
4
5
|
import 'ember-truth-helpers';
|
|
5
|
-
export { c as default } from '../../../index-
|
|
6
|
+
export { c as default } from '../../../index-Cx64Nvu4.js';
|
|
6
7
|
import '@ember/template-compilation';
|
|
7
8
|
import '@ember/component';
|
|
9
|
+
import 'decorator-transforms/runtime';
|
|
8
10
|
//# sourceMappingURL=tr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tr.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tr.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../../src/components/hds/advanced-table/types.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.gts';\n\nexport enum HdsAdvancedTableDensityValues {\n Default = 'default',\n Medium = 'medium',\n Short = 'short',\n Tall = 'tall',\n}\nexport type HdsAdvancedTableDensities = `${HdsAdvancedTableDensityValues}`;\n\nexport enum HdsAdvancedTableHorizontalAlignmentValues {\n Center = 'center',\n Left = 'left',\n Right = 'right',\n}\nexport type HdsAdvancedTableHorizontalAlignment =\n `${HdsAdvancedTableHorizontalAlignmentValues}`;\n\nexport enum HdsAdvancedTableScopeValues {\n Col = 'col',\n Row = 'row',\n}\nexport type HdsAdvancedTableScope = `${HdsAdvancedTableScopeValues}`;\n\nexport enum HdsAdvancedTableThExpandIconValues {\n ChevronUp = 'chevron-up',\n ChevronDown = 'chevron-down',\n UnfoldOpen = 'unfold-open',\n UnfoldClose = 'unfold-close',\n}\nexport type HdsAdvancedTableThSortExpandIcons =\n `${HdsAdvancedTableThExpandIconValues}`;\n\nexport enum HdsAdvancedTableThSortOrderIconValues {\n ArrowDown = 'arrow-down',\n ArrowUp = 'arrow-up',\n SwapVertical = 'swap-vertical',\n}\nexport type HdsAdvancedTableThSortOrderIcons =\n `${HdsAdvancedTableThSortOrderIconValues}`;\n\nexport enum HdsAdvancedTableThSortOrderLabelValues {\n Asc = 'ascending',\n Desc = 'descending',\n None = 'none',\n}\nexport type HdsAdvancedTableThSortOrderLabels =\n `${HdsAdvancedTableThSortOrderLabelValues}`;\n\nexport enum HdsAdvancedTableThSortOrderValues {\n Asc = 'asc',\n Desc = 'desc',\n}\nexport type HdsAdvancedTableThSortOrder =\n `${HdsAdvancedTableThSortOrderValues}`;\n\nexport enum HdsAdvancedTableVerticalAlignmentValues {\n Baseline = 'baseline',\n Middle = 'middle',\n Top = 'top',\n}\nexport type HdsAdvancedTableVerticalAlignment =\n `${HdsAdvancedTableVerticalAlignmentValues}`;\n\nexport type HdsAdvancedTableSelectableRow = {\n checkbox: HdsFormCheckboxBaseSignature['Element'];\n selectionKey: string;\n};\n\nexport type HdsAdvancedTableExpandState = boolean;\n\ninterface BaseHdsAdvancedTableColumn {\n align?: HdsAdvancedTableHorizontalAlignment;\n isExpandable?: boolean;\n isVisuallyHidden?: boolean;\n label: string;\n sortingFunction?: HdsAdvancedTableSortingFunction<unknown>;\n tooltip?: string;\n width?: string;\n minWidth?: `${number}px`;\n maxWidth?: `${number}px`;\n}\n\ninterface SortableHdsAdvancedTableColumn extends BaseHdsAdvancedTableColumn {\n isSortable: true;\n key: string;\n}\n\ninterface NonSortableHdsAdvancedTableColumn extends BaseHdsAdvancedTableColumn {\n isSortable?: false;\n key?: string;\n}\n\nexport type HdsAdvancedTableColumn =\n | SortableHdsAdvancedTableColumn\n | NonSortableHdsAdvancedTableColumn;\n\nexport type HdsAdvancedTableNormalizedColumn = HdsAdvancedTableColumn & {\n key: string;\n};\n\nexport type HdsAdvancedTableSortingFunction<T> = (a: T, b: T) => number;\n\nexport interface HdsAdvancedTableOnSelectionChangeSignature {\n selectionKey?: string;\n selectionCheckboxElement?: HdsFormCheckboxBaseSignature['Element'];\n selectedRowsKeys: string[];\n selectableRowsStates: {\n selectionKey: string;\n isSelected?: boolean;\n }[];\n}\n\nexport interface HdsAdvancedTableModelItem {\n [key: string]: unknown;\n children?: HdsAdvancedTableModelItem[];\n id?: string | number;\n isSelected?: boolean;\n}\n\nexport type HdsAdvancedTableModel = Array<HdsAdvancedTableModelItem>;\n\nexport type HdsAdvancedTableColumnResizeCallback = (\n columnKey: string,\n newWidth?:
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../src/components/hds/advanced-table/types.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.gts';\n\nexport enum HdsAdvancedTableDensityValues {\n Default = 'default',\n Medium = 'medium',\n Short = 'short',\n Tall = 'tall',\n}\nexport type HdsAdvancedTableDensities = `${HdsAdvancedTableDensityValues}`;\n\nexport enum HdsAdvancedTableHorizontalAlignmentValues {\n Center = 'center',\n Left = 'left',\n Right = 'right',\n}\nexport type HdsAdvancedTableHorizontalAlignment =\n `${HdsAdvancedTableHorizontalAlignmentValues}`;\n\nexport enum HdsAdvancedTableScopeValues {\n Col = 'col',\n Row = 'row',\n}\nexport type HdsAdvancedTableScope = `${HdsAdvancedTableScopeValues}`;\n\nexport enum HdsAdvancedTableThExpandIconValues {\n ChevronUp = 'chevron-up',\n ChevronDown = 'chevron-down',\n UnfoldOpen = 'unfold-open',\n UnfoldClose = 'unfold-close',\n}\nexport type HdsAdvancedTableThSortExpandIcons =\n `${HdsAdvancedTableThExpandIconValues}`;\n\nexport enum HdsAdvancedTableThSortOrderIconValues {\n ArrowDown = 'arrow-down',\n ArrowUp = 'arrow-up',\n SwapVertical = 'swap-vertical',\n}\nexport type HdsAdvancedTableThSortOrderIcons =\n `${HdsAdvancedTableThSortOrderIconValues}`;\n\nexport enum HdsAdvancedTableThSortOrderLabelValues {\n Asc = 'ascending',\n Desc = 'descending',\n None = 'none',\n}\nexport type HdsAdvancedTableThSortOrderLabels =\n `${HdsAdvancedTableThSortOrderLabelValues}`;\n\nexport enum HdsAdvancedTableThSortOrderValues {\n Asc = 'asc',\n Desc = 'desc',\n}\nexport type HdsAdvancedTableThSortOrder =\n `${HdsAdvancedTableThSortOrderValues}`;\n\nexport enum HdsAdvancedTableVerticalAlignmentValues {\n Baseline = 'baseline',\n Middle = 'middle',\n Top = 'top',\n}\nexport type HdsAdvancedTableVerticalAlignment =\n `${HdsAdvancedTableVerticalAlignmentValues}`;\n\nexport type HdsAdvancedTableSelectableRow = {\n checkbox: HdsFormCheckboxBaseSignature['Element'];\n selectionKey: string;\n};\n\nexport type HdsAdvancedTableExpandState = boolean;\n\ninterface BaseHdsAdvancedTableColumn {\n align?: HdsAdvancedTableHorizontalAlignment;\n isExpandable?: boolean;\n isVisuallyHidden?: boolean;\n label: string;\n sortingFunction?: HdsAdvancedTableSortingFunction<unknown>;\n tooltip?: string;\n width?: string;\n minWidth?: `${number}px`;\n maxWidth?: `${number}px`;\n}\n\ninterface SortableHdsAdvancedTableColumn extends BaseHdsAdvancedTableColumn {\n isSortable: true;\n key: string;\n}\n\ninterface NonSortableHdsAdvancedTableColumn extends BaseHdsAdvancedTableColumn {\n isSortable?: false;\n key?: string;\n}\n\nexport type HdsAdvancedTableColumn =\n | SortableHdsAdvancedTableColumn\n | NonSortableHdsAdvancedTableColumn;\n\nexport type HdsAdvancedTableNormalizedColumn = HdsAdvancedTableColumn & {\n key: string;\n};\n\nexport type HdsAdvancedTableSortingFunction<T> = (a: T, b: T) => number;\n\nexport interface HdsAdvancedTableOnSelectionChangeSignature {\n selectionKey?: string;\n selectionCheckboxElement?: HdsFormCheckboxBaseSignature['Element'];\n selectedRowsKeys: string[];\n selectableRowsStates: {\n selectionKey: string;\n isSelected?: boolean;\n }[];\n}\n\nexport interface HdsAdvancedTableModelItem {\n [key: string]: unknown;\n children?: HdsAdvancedTableModelItem[];\n id?: string | number;\n isSelected?: boolean;\n}\n\nexport type HdsAdvancedTableModel = Array<HdsAdvancedTableModelItem>;\n\nexport type HdsAdvancedTableColumnResizeCallback = (\n columnKey: string,\n newWidth?: HdsAdvancedTablePixelString\n) => void;\n\nexport type HdsAdvancedTableColumnReorderCallback = ({\n column,\n newOrder,\n insertedAt,\n}: {\n column: HdsAdvancedTableColumn;\n newOrder: string[];\n insertedAt: number;\n}) => void;\n\nexport interface HdsAdvancedTableCell<T = unknown> {\n columnKey: string;\n content: (T extends object ? T[keyof T] : unknown) | undefined;\n}\n\nexport enum HdsAdvancedTableColumnReorderSideValues {\n Left = 'left',\n Right = 'right',\n}\n\nexport type HdsAdvancedTableColumnReorderSide =\n `${HdsAdvancedTableColumnReorderSideValues}`;\n\nexport type HdsAdvancedTablePixelString = `${number}px`;\n"],"names":["HdsAdvancedTableDensityValues","HdsAdvancedTableHorizontalAlignmentValues","HdsAdvancedTableScopeValues","HdsAdvancedTableThExpandIconValues","HdsAdvancedTableThSortOrderIconValues","HdsAdvancedTableThSortOrderLabelValues","HdsAdvancedTableThSortOrderValues","HdsAdvancedTableVerticalAlignmentValues","HdsAdvancedTableColumnReorderSideValues"],"mappings":"AAAA;AACA;AACA;AACA;;AAIA,IAAYA,6BAA6B,0BAA7BA,6BAA6B,EAAA;EAA7BA,6BAA6B,CAAA,SAAA,CAAA,GAAA,SAAA;EAA7BA,6BAA6B,CAAA,QAAA,CAAA,GAAA,QAAA;EAA7BA,6BAA6B,CAAA,OAAA,CAAA,GAAA,OAAA;EAA7BA,6BAA6B,CAAA,MAAA,CAAA,GAAA,MAAA;AAAA,EAAA,OAA7BA,6BAA6B;AAAA,CAAA,CAAA,EAAA;AAQzC,IAAYC,yCAAyC,0BAAzCA,yCAAyC,EAAA;EAAzCA,yCAAyC,CAAA,QAAA,CAAA,GAAA,QAAA;EAAzCA,yCAAyC,CAAA,MAAA,CAAA,GAAA,MAAA;EAAzCA,yCAAyC,CAAA,OAAA,CAAA,GAAA,OAAA;AAAA,EAAA,OAAzCA,yCAAyC;AAAA,CAAA,CAAA,EAAA;AAQrD,IAAYC,2BAA2B,0BAA3BA,2BAA2B,EAAA;EAA3BA,2BAA2B,CAAA,KAAA,CAAA,GAAA,KAAA;EAA3BA,2BAA2B,CAAA,KAAA,CAAA,GAAA,KAAA;AAAA,EAAA,OAA3BA,2BAA2B;AAAA,CAAA,CAAA,EAAA;AAMvC,IAAYC,kCAAkC,0BAAlCA,kCAAkC,EAAA;EAAlCA,kCAAkC,CAAA,WAAA,CAAA,GAAA,YAAA;EAAlCA,kCAAkC,CAAA,aAAA,CAAA,GAAA,cAAA;EAAlCA,kCAAkC,CAAA,YAAA,CAAA,GAAA,aAAA;EAAlCA,kCAAkC,CAAA,aAAA,CAAA,GAAA,cAAA;AAAA,EAAA,OAAlCA,kCAAkC;AAAA,CAAA,CAAA,EAAA;AAS9C,IAAYC,qCAAqC,0BAArCA,qCAAqC,EAAA;EAArCA,qCAAqC,CAAA,WAAA,CAAA,GAAA,YAAA;EAArCA,qCAAqC,CAAA,SAAA,CAAA,GAAA,UAAA;EAArCA,qCAAqC,CAAA,cAAA,CAAA,GAAA,eAAA;AAAA,EAAA,OAArCA,qCAAqC;AAAA,CAAA,CAAA,EAAA;AAQjD,IAAYC,sCAAsC,0BAAtCA,sCAAsC,EAAA;EAAtCA,sCAAsC,CAAA,KAAA,CAAA,GAAA,WAAA;EAAtCA,sCAAsC,CAAA,MAAA,CAAA,GAAA,YAAA;EAAtCA,sCAAsC,CAAA,MAAA,CAAA,GAAA,MAAA;AAAA,EAAA,OAAtCA,sCAAsC;AAAA,CAAA,CAAA,EAAA;AAQlD,IAAYC,iCAAiC,0BAAjCA,iCAAiC,EAAA;EAAjCA,iCAAiC,CAAA,KAAA,CAAA,GAAA,KAAA;EAAjCA,iCAAiC,CAAA,MAAA,CAAA,GAAA,MAAA;AAAA,EAAA,OAAjCA,iCAAiC;AAAA,CAAA,CAAA,EAAA;AAO7C,IAAYC,uCAAuC,0BAAvCA,uCAAuC,EAAA;EAAvCA,uCAAuC,CAAA,UAAA,CAAA,GAAA,UAAA;EAAvCA,uCAAuC,CAAA,QAAA,CAAA,GAAA,QAAA;EAAvCA,uCAAuC,CAAA,KAAA,CAAA,GAAA,KAAA;AAAA,EAAA,OAAvCA,uCAAuC;AAAA,CAAA,CAAA,EAAA;AAsFnD,IAAYC,uCAAuC,0BAAvCA,uCAAuC,EAAA;EAAvCA,uCAAuC,CAAA,MAAA,CAAA,GAAA,MAAA;EAAvCA,uCAAuC,CAAA,OAAA,CAAA,GAAA,OAAA;AAAA,EAAA,OAAvCA,uCAAuC;AAAA,CAAA,CAAA,EAAA;;;;"}
|
|
@@ -18,6 +18,13 @@ function requestAnimationFrameWaiter(callback) {
|
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
+
function measureColumnWidth(descendant) {
|
|
22
|
+
const th = descendant?.closest('.hds-advanced-table__th');
|
|
23
|
+
if (!(th instanceof HTMLElement)) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
return `${th.offsetWidth}px`;
|
|
27
|
+
}
|
|
21
28
|
function pixelToNumber(px) {
|
|
22
29
|
return Number(px.replace('px', ''));
|
|
23
30
|
}
|
|
@@ -37,5 +44,5 @@ function parsePixel(value) {
|
|
|
37
44
|
return pixelToNumber(value);
|
|
38
45
|
}
|
|
39
46
|
|
|
40
|
-
export { isPixelSize, parsePixel, pixelToNumber, requestAnimationFrameWaiter };
|
|
47
|
+
export { isPixelSize, measureColumnWidth, parsePixel, pixelToNumber, requestAnimationFrameWaiter };
|
|
41
48
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../src/components/hds/advanced-table/utils.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { buildWaiter } from '@ember/test-waiters';\n\nconst waiter = buildWaiter('raf-waiter');\n\n// a utility that wraps requestAnimationFrame and integrates with Ember's test waiters\nexport function requestAnimationFrameWaiter(callback: () => void) {\n const token = waiter.beginAsync();\n\n return requestAnimationFrame(() => {\n try {\n callback();\n } finally {\n waiter.endAsync(token);\n }\n });\n}\n\nexport function pixelToNumber(px: `${number}px`): number {\n return Number(px.replace('px', ''));\n}\n\nexport function isPixelSize(value?: string): boolean {\n if (value === undefined) {\n return false;\n }\n\n return /^-?\\d+(\\.\\d+)?px$/.test(value);\n}\n\nexport function parsePixel(value?: string): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (!isPixelSize(value)) {\n return undefined;\n }\n\n return pixelToNumber(value as `${number}px`);\n}\n"],"names":["waiter","buildWaiter","requestAnimationFrameWaiter","callback","token","beginAsync","requestAnimationFrame","endAsync","pixelToNumber","px","Number","replace","isPixelSize","value","
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../src/components/hds/advanced-table/utils.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { buildWaiter } from '@ember/test-waiters';\n\nconst waiter = buildWaiter('raf-waiter');\n\n// a utility that wraps requestAnimationFrame and integrates with Ember's test waiters\nexport function requestAnimationFrameWaiter(callback: () => void) {\n const token = waiter.beginAsync();\n\n return requestAnimationFrame(() => {\n try {\n callback();\n } finally {\n waiter.endAsync(token);\n }\n });\n}\n\nexport function measureColumnWidth(\n descendant: Element | null | undefined\n): `${number}px` | undefined {\n const th = descendant?.closest('.hds-advanced-table__th');\n\n if (!(th instanceof HTMLElement)) {\n return undefined;\n }\n\n return `${th.offsetWidth}px`;\n}\n\nexport function pixelToNumber(px: `${number}px`): number {\n return Number(px.replace('px', ''));\n}\n\nexport function isPixelSize(value?: string): boolean {\n if (value === undefined) {\n return false;\n }\n\n return /^-?\\d+(\\.\\d+)?px$/.test(value);\n}\n\nexport function parsePixel(value?: string): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (!isPixelSize(value)) {\n return undefined;\n }\n\n return pixelToNumber(value as `${number}px`);\n}\n"],"names":["waiter","buildWaiter","requestAnimationFrameWaiter","callback","token","beginAsync","requestAnimationFrame","endAsync","measureColumnWidth","descendant","th","closest","HTMLElement","undefined","offsetWidth","pixelToNumber","px","Number","replace","isPixelSize","value","test","parsePixel"],"mappings":";;AAAA;AACA;AACA;AACA;;AAIA,MAAMA,MAAM,GAAGC,WAAW,CAAC,YAAY,CAAC;;AAExC;AACO,SAASC,2BAA2BA,CAACC,QAAoB,EAAE;AAChE,EAAA,MAAMC,KAAK,GAAGJ,MAAM,CAACK,UAAU,EAAE;EAEjC,OAAOC,qBAAqB,CAAC,MAAM;IACjC,IAAI;AACFH,MAAAA,QAAQ,EAAE;AACZ,IAAA,CAAC,SAAS;AACRH,MAAAA,MAAM,CAACO,QAAQ,CAACH,KAAK,CAAC;AACxB,IAAA;AACF,EAAA,CAAC,CAAC;AACJ;AAEO,SAASI,kBAAkBA,CAChCC,UAAsC,EACX;AAC3B,EAAA,MAAMC,EAAE,GAAGD,UAAU,EAAEE,OAAO,CAAC,yBAAyB,CAAC;AAEzD,EAAA,IAAI,EAAED,EAAE,YAAYE,WAAW,CAAC,EAAE;AAChC,IAAA,OAAOC,SAAS;AAClB,EAAA;AAEA,EAAA,OAAO,CAAA,EAAGH,EAAE,CAACI,WAAW,CAAA,EAAA,CAAI;AAC9B;AAEO,SAASC,aAAaA,CAACC,EAAiB,EAAU;EACvD,OAAOC,MAAM,CAACD,EAAE,CAACE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACrC;AAEO,SAASC,WAAWA,CAACC,KAAc,EAAW;EACnD,IAAIA,KAAK,KAAKP,SAAS,EAAE;AACvB,IAAA,OAAO,KAAK;AACd,EAAA;AAEA,EAAA,OAAO,mBAAmB,CAACQ,IAAI,CAACD,KAAK,CAAC;AACxC;AAEO,SAASE,UAAUA,CAACF,KAAc,EAAsB;EAC7D,IAAIA,KAAK,KAAKP,SAAS,EAAE;AACvB,IAAA,OAAOA,SAAS;AAClB,EAAA;AAEA,EAAA,IAAI,CAACM,WAAW,CAACC,KAAK,CAAC,EAAE;AACvB,IAAA,OAAOP,SAAS;AAClB,EAAA;EAEA,OAAOE,aAAa,CAACK,KAAsB,CAAC;AAC9C;;;;"}
|
|
@@ -114,6 +114,11 @@ class Composite extends Component {
|
|
|
114
114
|
currentIndex: this._currentIndex
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
|
+
_resortRegisteredElements() {
|
|
118
|
+
this._groups = sortByDOMPosition(this._groups);
|
|
119
|
+
this._items = sortByDOMPosition(this._items);
|
|
120
|
+
this._reassociateGroups();
|
|
121
|
+
}
|
|
117
122
|
_registerItem(newItem) {
|
|
118
123
|
newItem.groupId = findGroupId(newItem.element, this._groups);
|
|
119
124
|
this._items = sortByDOMPosition([...this._items.filter(item => item.id !== newItem.id), newItem]);
|
|
@@ -210,6 +215,7 @@ class Composite extends Component {
|
|
|
210
215
|
if (managedKeys.includes(event.key)) {
|
|
211
216
|
event.preventDefault();
|
|
212
217
|
}
|
|
218
|
+
this._resortRegisteredElements();
|
|
213
219
|
const target = handleKey(event, this._navigationSnapshot, this._config);
|
|
214
220
|
if (target === undefined) {
|
|
215
221
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/composite/index.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 { hash } from '@ember/helper';\n\nimport { guidFor } from '@ember/object/internals';\n\nimport { handleKey, findFirstEnabled } from './navigation.ts';\n\nimport type Owner from '@ember/owner';\nimport type { ModifierLike } from '@glint/template';\nimport type {\n HdsCompositeOrientations,\n HdsCompositeNavigationConfig,\n HdsCompositeNavigationSnapshot,\n HdsCompositeItem,\n HdsCompositeGroup,\n} from './types.ts';\n\nfunction getElementId(element: HTMLElement, prefix: string): string {\n if (element.id !== '') {\n return element.id;\n }\n\n return `${prefix}-${guidFor(element)}`;\n}\n\nfunction sortByDOMPosition<T extends { element: HTMLElement }>(\n items: T[]\n): T[] {\n const indexedItems = items.map((item, index) => ({ item, index }));\n\n return indexedItems\n .slice()\n .sort((leftEntry, rightEntry) => {\n const { item: left, index: leftIndex } = leftEntry;\n const { item: right, index: rightIndex } = rightEntry;\n\n if (!left.element.isConnected && right.element.isConnected) {\n return 1;\n }\n\n if (left.element.isConnected && !right.element.isConnected) {\n return -1;\n }\n\n const position = left.element.compareDocumentPosition(right.element);\n\n if ((position & Node.DOCUMENT_POSITION_FOLLOWING) !== 0) {\n return -1;\n }\n\n if ((position & Node.DOCUMENT_POSITION_PRECEDING) !== 0) {\n return 1;\n }\n\n // keep sort stable when DOM position cannot be resolved\n return leftIndex - rightIndex;\n })\n .map((entry) => entry.item);\n}\n\nfunction findGroupId(\n element: HTMLElement,\n groups: { id: string; element: HTMLElement }[]\n): string | undefined {\n for (const group of groups) {\n if (group.element.contains(element)) {\n return group.id;\n }\n }\n\n return undefined;\n}\n\ninterface HdsCompositeCompositeModifierSignature {\n Element: HTMLElement;\n}\n\ninterface HdsCompositeItemModifierSignature {\n Element: HTMLElement;\n Args: {\n Named: {\n disabled?: boolean;\n };\n };\n}\n\ninterface HdsCompositeGroupModifierSignature {\n Element: HTMLElement;\n}\n\nexport interface HdsCompositeSignature {\n Args: {\n orientation?: HdsCompositeOrientations;\n loop?: boolean | HdsCompositeOrientations;\n wrap?: boolean | HdsCompositeOrientations;\n defaultCurrentId?: string | null;\n };\n Blocks: {\n default: [\n {\n composite: ModifierLike<HdsCompositeCompositeModifierSignature>;\n item: ModifierLike<HdsCompositeItemModifierSignature>;\n group: ModifierLike<HdsCompositeGroupModifierSignature>;\n },\n ];\n };\n}\n\nexport default class Composite extends Component<HdsCompositeSignature> {\n // not tracked because registration happens inside modifier installation\n private _items: HdsCompositeItem[] = [];\n private _groups: HdsCompositeGroup[] = [];\n\n // undefined = uninitialized (auto-select first enabled on registration)\n // null = explicitly no active item (container gets tabindex=\"0\")\n // string = active item id\n private _currentId: string | null | undefined = undefined;\n\n private _compositeElement: HTMLElement | null = null;\n private _preserveTabIndex = false;\n\n constructor(owner: Owner, args: HdsCompositeSignature['Args']) {\n super(owner, args);\n\n if (args.defaultCurrentId !== undefined) {\n this._currentId = args.defaultCurrentId;\n }\n }\n\n private get _resolvedCurrentId(): string | null | undefined {\n // explicitly null (no active item)\n if (this._currentId === null) {\n return null;\n }\n\n const requestedItem = this._items.find(\n (item) => item.id === this._currentId\n );\n\n if (requestedItem !== undefined && requestedItem.disabled === false) {\n return this._currentId;\n }\n\n return this._firstEnabledItem !== undefined\n ? this._firstEnabledItem.id\n : undefined;\n }\n\n private get _currentItem(): HdsCompositeItem | undefined {\n const activeId = this._resolvedCurrentId;\n\n if (activeId === null || activeId === undefined) {\n return undefined;\n }\n\n return this._items.find((item) => item.id === activeId);\n }\n\n private get _firstEnabledItem(): HdsCompositeItem | undefined {\n return findFirstEnabled(this._items);\n }\n\n private get _currentIndex(): number {\n const activeId = this._resolvedCurrentId;\n\n if (activeId === null || activeId === undefined) {\n return -1;\n }\n\n return this._items.findIndex((item) => item.id === activeId);\n }\n\n private get _config(): HdsCompositeNavigationConfig {\n return {\n orientation: this.args.orientation,\n loop: this.args.loop ?? false,\n wrap: this.args.wrap ?? false,\n };\n }\n\n private get _navigationSnapshot(): HdsCompositeNavigationSnapshot {\n return {\n items: this._items,\n groups: this._groups,\n currentItem: this._currentItem,\n currentIndex: this._currentIndex,\n };\n }\n\n private _registerItem(newItem: HdsCompositeItem): void {\n newItem.groupId = findGroupId(newItem.element, this._groups);\n\n this._items = sortByDOMPosition([\n ...this._items.filter((item) => item.id !== newItem.id),\n newItem,\n ]);\n\n this._syncAllElements();\n }\n\n private _unregisterItem(id: string): void {\n const wasCurrent = this._resolvedCurrentId === id;\n this._items = this._items.filter((item) => item.id !== id);\n\n if (wasCurrent) {\n // reset to \"auto\" so newly rendered first items can become active\n this._currentId = undefined;\n this._syncAllElements();\n\n return;\n }\n\n this._syncAllElements();\n }\n\n private _registerGroup(newGroup: HdsCompositeGroup): void {\n this._groups = sortByDOMPosition([\n ...this._groups.filter((group) => group.id !== newGroup.id),\n newGroup,\n ]);\n\n this._reassociateGroups();\n }\n\n private _unregisterGroup(id: string): void {\n this._groups = this._groups.filter((group) => group.id !== id);\n this._reassociateGroups();\n\n const currentExists = this._items.some(\n (item) => item.id === this._resolvedCurrentId\n );\n\n if (!currentExists && this._firstEnabledItem) {\n // reset to \"auto\" so group reordering/mount order can settle first\n this._currentId = undefined;\n this._syncAllElements();\n }\n }\n\n private _reassociateGroups(): void {\n for (const item of this._items) {\n item.groupId = findGroupId(item.element, this._groups);\n }\n }\n\n private _moveTo(id: string): void {\n if (this._currentId === id) {\n return;\n }\n\n const previousItem = this._currentItem;\n\n this._currentId = id;\n\n const nextItem = this._currentItem;\n\n if (previousItem !== undefined) {\n this._syncItemElement(previousItem);\n }\n\n if (nextItem !== undefined) {\n this._syncItemElement(nextItem);\n }\n\n this._syncCompositeElement();\n }\n\n private _syncAllElements(): void {\n for (const item of this._items) {\n this._syncItemElement(item);\n }\n\n this._syncCompositeElement();\n }\n\n private _syncItemElement(item: HdsCompositeItem): void {\n const element = item.element;\n const isCurrent = item.id === this._resolvedCurrentId;\n\n if (item.disabled === true) {\n element.setAttribute('aria-disabled', 'true');\n element.setAttribute('disabled', '');\n element.setAttribute('tabindex', '-1');\n } else {\n element.removeAttribute('aria-disabled');\n element.removeAttribute('disabled');\n element.setAttribute('tabindex', isCurrent === true ? '0' : '-1');\n }\n\n if (isCurrent === true) {\n element.setAttribute('data-active-item', '');\n } else {\n element.removeAttribute('data-active-item');\n }\n\n element.setAttribute('tabindex', isCurrent === true ? '0' : '-1');\n }\n\n private _syncCompositeElement(): void {\n const element = this._compositeElement;\n\n if (element === null || this._preserveTabIndex === true) {\n return;\n }\n\n const activeId = this._resolvedCurrentId;\n\n if (activeId === null || activeId === undefined) {\n element.setAttribute('tabindex', '0');\n } else {\n element.removeAttribute('tabindex');\n }\n }\n\n compositeModifier = modifier<HdsCompositeCompositeModifierSignature>(\n (element: HTMLElement) => {\n this._compositeElement = element;\n this._preserveTabIndex = element.hasAttribute('tabindex');\n\n this._syncCompositeElement();\n\n const onKeyDown = (event: KeyboardEvent): void => {\n const managedKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n 'PageUp',\n 'PageDown',\n ];\n\n if (managedKeys.includes(event.key)) {\n event.preventDefault();\n }\n\n const target = handleKey(event, this._navigationSnapshot, this._config);\n\n if (target === undefined) {\n return;\n }\n\n this._moveTo(target.id);\n\n target.element.focus();\n };\n\n element.addEventListener('keydown', onKeyDown);\n\n return () => {\n element.removeEventListener('keydown', onKeyDown);\n\n if (this._compositeElement === element) {\n this._compositeElement = null;\n }\n };\n }\n );\n\n itemModifier = modifier<HdsCompositeItemModifierSignature>(\n (element: HTMLElement, _positional: unknown[], named) => {\n const disabled = named.disabled ?? false;\n const id = getElementId(element, 'composite-item');\n\n element.id = id;\n\n this._registerItem({ id, element, disabled });\n\n const onFocus = (): void => {\n const item = this._items.find((registered) => registered.id === id);\n\n if (item === undefined || item.disabled === true) {\n return;\n }\n\n this._moveTo(id);\n };\n\n element.addEventListener('focus', onFocus);\n\n return () => {\n element.removeEventListener('focus', onFocus);\n\n this._unregisterItem(id);\n };\n }\n );\n\n groupModifier = modifier<HdsCompositeGroupModifierSignature>(\n (element: HTMLElement) => {\n const id = getElementId(element, 'composite-group');\n\n element.id = id;\n\n this._registerGroup({ id, element });\n\n return () => {\n this._unregisterGroup(id);\n };\n }\n );\n\n <template>\n {{yield\n (hash\n composite=this.compositeModifier\n item=this.itemModifier\n group=this.groupModifier\n )\n }}\n </template>\n}\n"],"names":["getElementId","element","prefix","id","guidFor","sortByDOMPosition","items","indexedItems","map","item","index","slice","sort","leftEntry","rightEntry","left","leftIndex","right","rightIndex","isConnected","position","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","entry","findGroupId","groups","group","contains","undefined","Composite","Component","_items","_groups","_currentId","_compositeElement","_preserveTabIndex","constructor","owner","args","defaultCurrentId","_resolvedCurrentId","requestedItem","find","disabled","_firstEnabledItem","_currentItem","activeId","findFirstEnabled","_currentIndex","findIndex","_config","orientation","loop","wrap","_navigationSnapshot","currentItem","currentIndex","_registerItem","newItem","groupId","filter","_syncAllElements","_unregisterItem","wasCurrent","_registerGroup","newGroup","_reassociateGroups","_unregisterGroup","currentExists","some","_moveTo","previousItem","nextItem","_syncItemElement","_syncCompositeElement","isCurrent","setAttribute","removeAttribute","compositeModifier","modifier","hasAttribute","onKeyDown","event","managedKeys","includes","key","preventDefault","target","handleKey","focus","addEventListener","removeEventListener","itemModifier","_positional","named","onFocus","registered","groupModifier","setComponentTemplate","precompileTemplate","strictMode","scope","hash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/composite/index.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 { hash } from '@ember/helper';\n\nimport { guidFor } from '@ember/object/internals';\n\nimport { handleKey, findFirstEnabled } from './navigation.ts';\n\nimport type Owner from '@ember/owner';\nimport type { ModifierLike } from '@glint/template';\nimport type {\n HdsCompositeOrientations,\n HdsCompositeNavigationConfig,\n HdsCompositeNavigationSnapshot,\n HdsCompositeItem,\n HdsCompositeGroup,\n} from './types.ts';\n\nfunction getElementId(element: HTMLElement, prefix: string): string {\n if (element.id !== '') {\n return element.id;\n }\n\n return `${prefix}-${guidFor(element)}`;\n}\n\nfunction sortByDOMPosition<T extends { element: HTMLElement }>(\n items: T[]\n): T[] {\n const indexedItems = items.map((item, index) => ({ item, index }));\n\n return indexedItems\n .slice()\n .sort((leftEntry, rightEntry) => {\n const { item: left, index: leftIndex } = leftEntry;\n const { item: right, index: rightIndex } = rightEntry;\n\n if (!left.element.isConnected && right.element.isConnected) {\n return 1;\n }\n\n if (left.element.isConnected && !right.element.isConnected) {\n return -1;\n }\n\n const position = left.element.compareDocumentPosition(right.element);\n\n if ((position & Node.DOCUMENT_POSITION_FOLLOWING) !== 0) {\n return -1;\n }\n\n if ((position & Node.DOCUMENT_POSITION_PRECEDING) !== 0) {\n return 1;\n }\n\n // keep sort stable when DOM position cannot be resolved\n return leftIndex - rightIndex;\n })\n .map((entry) => entry.item);\n}\n\nfunction findGroupId(\n element: HTMLElement,\n groups: { id: string; element: HTMLElement }[]\n): string | undefined {\n for (const group of groups) {\n if (group.element.contains(element)) {\n return group.id;\n }\n }\n\n return undefined;\n}\n\ninterface HdsCompositeCompositeModifierSignature {\n Element: HTMLElement;\n}\n\ninterface HdsCompositeItemModifierSignature {\n Element: HTMLElement;\n Args: {\n Named: {\n disabled?: boolean;\n };\n };\n}\n\ninterface HdsCompositeGroupModifierSignature {\n Element: HTMLElement;\n}\n\nexport interface HdsCompositeSignature {\n Args: {\n orientation?: HdsCompositeOrientations;\n loop?: boolean | HdsCompositeOrientations;\n wrap?: boolean | HdsCompositeOrientations;\n defaultCurrentId?: string | null;\n };\n Blocks: {\n default: [\n {\n composite: ModifierLike<HdsCompositeCompositeModifierSignature>;\n item: ModifierLike<HdsCompositeItemModifierSignature>;\n group: ModifierLike<HdsCompositeGroupModifierSignature>;\n },\n ];\n };\n}\n\nexport default class Composite extends Component<HdsCompositeSignature> {\n // not tracked because registration happens inside modifier installation\n private _items: HdsCompositeItem[] = [];\n private _groups: HdsCompositeGroup[] = [];\n\n // undefined = uninitialized (auto-select first enabled on registration)\n // null = explicitly no active item (container gets tabindex=\"0\")\n // string = active item id\n private _currentId: string | null | undefined = undefined;\n\n private _compositeElement: HTMLElement | null = null;\n private _preserveTabIndex = false;\n\n constructor(owner: Owner, args: HdsCompositeSignature['Args']) {\n super(owner, args);\n\n if (args.defaultCurrentId !== undefined) {\n this._currentId = args.defaultCurrentId;\n }\n }\n\n private get _resolvedCurrentId(): string | null | undefined {\n // explicitly null (no active item)\n if (this._currentId === null) {\n return null;\n }\n\n const requestedItem = this._items.find(\n (item) => item.id === this._currentId\n );\n\n if (requestedItem !== undefined && requestedItem.disabled === false) {\n return this._currentId;\n }\n\n return this._firstEnabledItem !== undefined\n ? this._firstEnabledItem.id\n : undefined;\n }\n\n private get _currentItem(): HdsCompositeItem | undefined {\n const activeId = this._resolvedCurrentId;\n\n if (activeId === null || activeId === undefined) {\n return undefined;\n }\n\n return this._items.find((item) => item.id === activeId);\n }\n\n private get _firstEnabledItem(): HdsCompositeItem | undefined {\n return findFirstEnabled(this._items);\n }\n\n private get _currentIndex(): number {\n const activeId = this._resolvedCurrentId;\n\n if (activeId === null || activeId === undefined) {\n return -1;\n }\n\n return this._items.findIndex((item) => item.id === activeId);\n }\n\n private get _config(): HdsCompositeNavigationConfig {\n return {\n orientation: this.args.orientation,\n loop: this.args.loop ?? false,\n wrap: this.args.wrap ?? false,\n };\n }\n\n private get _navigationSnapshot(): HdsCompositeNavigationSnapshot {\n return {\n items: this._items,\n groups: this._groups,\n currentItem: this._currentItem,\n currentIndex: this._currentIndex,\n };\n }\n\n private _resortRegisteredElements(): void {\n this._groups = sortByDOMPosition(this._groups);\n this._items = sortByDOMPosition(this._items);\n this._reassociateGroups();\n }\n\n private _registerItem(newItem: HdsCompositeItem): void {\n newItem.groupId = findGroupId(newItem.element, this._groups);\n\n this._items = sortByDOMPosition([\n ...this._items.filter((item) => item.id !== newItem.id),\n newItem,\n ]);\n\n this._syncAllElements();\n }\n\n private _unregisterItem(id: string): void {\n const wasCurrent = this._resolvedCurrentId === id;\n this._items = this._items.filter((item) => item.id !== id);\n\n if (wasCurrent) {\n // reset to \"auto\" so newly rendered first items can become active\n this._currentId = undefined;\n this._syncAllElements();\n\n return;\n }\n\n this._syncAllElements();\n }\n\n private _registerGroup(newGroup: HdsCompositeGroup): void {\n this._groups = sortByDOMPosition([\n ...this._groups.filter((group) => group.id !== newGroup.id),\n newGroup,\n ]);\n\n this._reassociateGroups();\n }\n\n private _unregisterGroup(id: string): void {\n this._groups = this._groups.filter((group) => group.id !== id);\n this._reassociateGroups();\n\n const currentExists = this._items.some(\n (item) => item.id === this._resolvedCurrentId\n );\n\n if (!currentExists && this._firstEnabledItem) {\n // reset to \"auto\" so group reordering/mount order can settle first\n this._currentId = undefined;\n this._syncAllElements();\n }\n }\n\n private _reassociateGroups(): void {\n for (const item of this._items) {\n item.groupId = findGroupId(item.element, this._groups);\n }\n }\n\n private _moveTo(id: string): void {\n if (this._currentId === id) {\n return;\n }\n\n const previousItem = this._currentItem;\n\n this._currentId = id;\n\n const nextItem = this._currentItem;\n\n if (previousItem !== undefined) {\n this._syncItemElement(previousItem);\n }\n\n if (nextItem !== undefined) {\n this._syncItemElement(nextItem);\n }\n\n this._syncCompositeElement();\n }\n\n private _syncAllElements(): void {\n for (const item of this._items) {\n this._syncItemElement(item);\n }\n\n this._syncCompositeElement();\n }\n\n private _syncItemElement(item: HdsCompositeItem): void {\n const element = item.element;\n const isCurrent = item.id === this._resolvedCurrentId;\n\n if (item.disabled === true) {\n element.setAttribute('aria-disabled', 'true');\n element.setAttribute('disabled', '');\n element.setAttribute('tabindex', '-1');\n } else {\n element.removeAttribute('aria-disabled');\n element.removeAttribute('disabled');\n element.setAttribute('tabindex', isCurrent === true ? '0' : '-1');\n }\n\n if (isCurrent === true) {\n element.setAttribute('data-active-item', '');\n } else {\n element.removeAttribute('data-active-item');\n }\n\n element.setAttribute('tabindex', isCurrent === true ? '0' : '-1');\n }\n\n private _syncCompositeElement(): void {\n const element = this._compositeElement;\n\n if (element === null || this._preserveTabIndex === true) {\n return;\n }\n\n const activeId = this._resolvedCurrentId;\n\n if (activeId === null || activeId === undefined) {\n element.setAttribute('tabindex', '0');\n } else {\n element.removeAttribute('tabindex');\n }\n }\n\n compositeModifier = modifier<HdsCompositeCompositeModifierSignature>(\n (element: HTMLElement) => {\n this._compositeElement = element;\n this._preserveTabIndex = element.hasAttribute('tabindex');\n\n this._syncCompositeElement();\n\n const onKeyDown = (event: KeyboardEvent): void => {\n const managedKeys = [\n 'ArrowUp',\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n 'PageUp',\n 'PageDown',\n ];\n\n if (managedKeys.includes(event.key)) {\n event.preventDefault();\n }\n\n this._resortRegisteredElements();\n\n const target = handleKey(event, this._navigationSnapshot, this._config);\n\n if (target === undefined) {\n return;\n }\n\n this._moveTo(target.id);\n\n target.element.focus();\n };\n\n element.addEventListener('keydown', onKeyDown);\n\n return () => {\n element.removeEventListener('keydown', onKeyDown);\n\n if (this._compositeElement === element) {\n this._compositeElement = null;\n }\n };\n }\n );\n\n itemModifier = modifier<HdsCompositeItemModifierSignature>(\n (element: HTMLElement, _positional: unknown[], named) => {\n const disabled = named.disabled ?? false;\n const id = getElementId(element, 'composite-item');\n\n element.id = id;\n\n this._registerItem({ id, element, disabled });\n\n const onFocus = (): void => {\n const item = this._items.find((registered) => registered.id === id);\n\n if (item === undefined || item.disabled === true) {\n return;\n }\n\n this._moveTo(id);\n };\n\n element.addEventListener('focus', onFocus);\n\n return () => {\n element.removeEventListener('focus', onFocus);\n\n this._unregisterItem(id);\n };\n }\n );\n\n groupModifier = modifier<HdsCompositeGroupModifierSignature>(\n (element: HTMLElement) => {\n const id = getElementId(element, 'composite-group');\n\n element.id = id;\n\n this._registerGroup({ id, element });\n\n return () => {\n this._unregisterGroup(id);\n };\n }\n );\n\n <template>\n {{yield\n (hash\n composite=this.compositeModifier\n item=this.itemModifier\n group=this.groupModifier\n )\n }}\n </template>\n}\n"],"names":["getElementId","element","prefix","id","guidFor","sortByDOMPosition","items","indexedItems","map","item","index","slice","sort","leftEntry","rightEntry","left","leftIndex","right","rightIndex","isConnected","position","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","entry","findGroupId","groups","group","contains","undefined","Composite","Component","_items","_groups","_currentId","_compositeElement","_preserveTabIndex","constructor","owner","args","defaultCurrentId","_resolvedCurrentId","requestedItem","find","disabled","_firstEnabledItem","_currentItem","activeId","findFirstEnabled","_currentIndex","findIndex","_config","orientation","loop","wrap","_navigationSnapshot","currentItem","currentIndex","_resortRegisteredElements","_reassociateGroups","_registerItem","newItem","groupId","filter","_syncAllElements","_unregisterItem","wasCurrent","_registerGroup","newGroup","_unregisterGroup","currentExists","some","_moveTo","previousItem","nextItem","_syncItemElement","_syncCompositeElement","isCurrent","setAttribute","removeAttribute","compositeModifier","modifier","hasAttribute","onKeyDown","event","managedKeys","includes","key","preventDefault","target","handleKey","focus","addEventListener","removeEventListener","itemModifier","_positional","named","onFocus","registered","groupModifier","setComponentTemplate","precompileTemplate","strictMode","scope","hash"],"mappings":"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"}
|
|
@@ -252,7 +252,7 @@ class HdsFilterBar extends Component {
|
|
|
252
252
|
return [];
|
|
253
253
|
};
|
|
254
254
|
static {
|
|
255
|
-
setComponentTemplate(precompileTemplate("<div class=\"hds-filter-bar\" ...attributes {{this._setUpFilterBar}}>\n {{#if @isLiveFilter}}\n <span class=\"sr-only\">{{hdsT \"hds.components.filter-bar.live-filtering\" default=\"Filters will be applied automatically as selections are made\"}}</span>\n {{/if}}\n <HdsLayoutFlex @align=\"center\" @gap=\"8\" class=\"hds-filter-bar__actions\">\n <HdsButton @text={{hdsT \"hds.components.filter-bar.applied-filters.toggle-button\" default=\"View applied filters\"}} @color=\"secondary\" @size=\"small\" @icon={{if this._isExpanded \"unfold-close\" \"unfold-open\"}} @isIconOnly={{true}} id={{this._appliedFiltersButtonId}} aria-controls={{this._appliedFiltersContentId}} aria-expanded={{if this._isExpanded \"true\" \"false\"}} class=\"hds-filter-bar__applied-filters-toggle-button\" {{on \"click\" this.toggleExpand}} />\n
|
|
255
|
+
setComponentTemplate(precompileTemplate("<div class=\"hds-filter-bar\" ...attributes {{this._setUpFilterBar}}>\n {{#if @isLiveFilter}}\n <span class=\"sr-only\">{{hdsT \"hds.components.filter-bar.live-filtering\" default=\"Filters will be applied automatically as selections are made\"}}</span>\n {{/if}}\n <HdsLayoutFlex @align=\"center\" @wrap={{true}} @gap=\"8\" class=\"hds-filter-bar__actions\">\n <div class=\"hds-filter-bar__actions__left\">\n <HdsButton @text={{hdsT \"hds.components.filter-bar.applied-filters.toggle-button\" default=\"View applied filters\"}} @color=\"secondary\" @size=\"small\" @icon={{if this._isExpanded \"unfold-close\" \"unfold-open\"}} @isIconOnly={{true}} id={{this._appliedFiltersButtonId}} aria-controls={{this._appliedFiltersContentId}} aria-expanded={{if this._isExpanded \"true\" \"false\"}} class=\"hds-filter-bar__applied-filters-toggle-button\" {{on \"click\" this.toggleExpand}} />\n {{yield (hash FiltersDropdown=(component HdsFilterBarFiltersDropdown filters=@filters isLiveFilter=@isLiveFilter onFilter=this.onFilter))}}\n {{#if @hasSearch}}\n <HdsFormTextInputBase @type=\"search\" @value={{this.searchValue}} class=\"hds-filter-bar__search\" placeholder={{this.searchPlaceholder}} aria-label={{this.searchAriaLabel}} name=\"search\" {{on \"change\" this.onSearch}} />\n {{/if}}\n </div>\n {{yield (hash ActionsGeneric=HdsYield)}}\n {{yield (hash ActionsDropdown=HdsFilterBarActionsDropdown)}}\n </HdsLayoutFlex>\n <div class=\"hds-filter-bar__applied-filters-list\" id={{this._appliedFiltersContentId}}>\n {{#if this._isExpanded}}\n <HdsSeparator @spacing=\"0\" />\n <div class=\"hds-filter-bar__applied-filters-list__content\">\n {{#if this.hasActiveFilters}}\n <HdsFilterBarAppliedFilters @filters={{@filters}} @onFilterDismiss={{this._onFilterDismiss}} />\n <HdsButton class=\"hds-filter-bar__clear-button\" @text={{hdsT \"hds.components.filter-bar.applied-filters.clear-filters\" default=\"Clear all filters\"}} @color=\"tertiary\" @icon=\"x\" @size=\"small\" {{on \"click\" this.clearFilters}} />\n {{else}}\n <HdsTextBody @size={{100}} @color=\"faint\">\n {{hdsT \"hds.components.filter-bar.applied-filters.no-filters-applied\" default=\"No filters applied\"}}\n </HdsTextBody>\n {{/if}}\n </div>\n {{/if}}\n </div>\n</div>", {
|
|
256
256
|
strictMode: true,
|
|
257
257
|
scope: () => ({
|
|
258
258
|
hdsT: HdsTHelper,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/filter-bar/index.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport { isArray } from '@ember/array';\nimport { modifier } from 'ember-modifier';\nimport { guidFor } from '@ember/object/internals';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { NUMERICAL_SELECTORS_TEXT } from './filter-group/numerical.gts';\nimport { DATE_SELECTORS_TEXT } from './filter-group/date.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\nimport HdsYield from '../yield/index.gts';\nimport HdsFilterBarActionsDropdown from './actions-dropdown.gts';\nimport HdsFilterBarFiltersDropdown from './filters-dropdown.gts';\nimport HdsLayoutFlex from '../layout/flex/index.gts';\nimport HdsFormTextInputBase from '../form/text-input/base.gts';\nimport HdsButton from '../button/index.gts';\nimport HdsSeparator from '../separator/index.gts';\nimport HdsTextBody from '../text/body.gts';\nimport HdsFilterBarAppliedFilters from './applied-filters.gts';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport type {\n HdsFilterBarFilters,\n HdsFilterBarFilter,\n HdsFilterBarFilterType,\n HdsFilterBarData,\n HdsFilterBarGenericFilterData,\n} from './types.ts';\n\nexport interface HdsFilterBarSignature {\n Args: {\n filters: HdsFilterBarFilters;\n isLiveFilter?: boolean;\n hasSearch?: boolean;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n onFilter?: (filters: HdsFilterBarFilters) => void;\n };\n Blocks: {\n default?: [\n {\n FiltersDropdown?: WithBoundArgs<\n typeof HdsFilterBarFiltersDropdown,\n 'filters' | 'isLiveFilter' | 'onFilter'\n >;\n ActionsDropdown?: WithBoundArgs<\n typeof HdsFilterBarActionsDropdown,\n never\n >;\n ActionsGeneric?: typeof HdsYield;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBar extends Component<HdsFilterBarSignature> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked _isExpanded: boolean = this.hasActiveFilters;\n\n private _dropdownToggleElement!: HTMLDivElement;\n private _appliedFiltersButtonId = 'applied-filters-button-' + guidFor(this);\n private _appliedFiltersContentId = 'applied-filters-content-' + guidFor(this);\n\n private _setUpFilterBar = modifier((element: HTMLDivElement) => {\n this._dropdownToggleElement = element.querySelector(\n '.hds-filter-bar__filters-dropdown .hds-dropdown-toggle-button'\n ) as HTMLDivElement;\n\n // Align the expanded state with the presence of active filters\n this._isExpanded = this.hasActiveFilters;\n });\n\n get searchValue(): string {\n const { filters } = this.args;\n if (filters['search']) {\n return this._getFilterValueText(filters['search']);\n }\n return '';\n }\n\n get searchPlaceholder(): string {\n return (\n this.args.searchPlaceholder ||\n this.hdsIntl.t('hds.components.filter-bar.search.placeholder', {\n default: 'Search',\n })\n );\n }\n\n get searchAriaLabel(): string {\n return (\n this.args.searchAriaLabel ||\n this.hdsIntl.t('hds.components.filter-bar.search.aria-label', {\n default: 'Search',\n })\n );\n }\n\n get hasActiveFilters(): boolean {\n return Object.keys(this.args.filters).length > 0;\n }\n\n onFilter = (filters: HdsFilterBarFilters): void => {\n const { onFilter } = this.args;\n if (onFilter && typeof onFilter === 'function') {\n onFilter(filters);\n\n if (Object.keys(filters).length > 0) {\n this._isExpanded = true;\n } else {\n this._isExpanded = false;\n }\n }\n };\n\n clearFilters = (): void => {\n const { onFilter } = this.args;\n if (onFilter && typeof onFilter === 'function') {\n onFilter({});\n this._isExpanded = false;\n }\n this._dropdownToggleElement?.focus();\n };\n\n onSearch = (event: Event): void => {\n const { filters } = this.args;\n const input = event.target as HTMLInputElement;\n const value = input?.value;\n\n const newFilters = this._copyFilters(filters);\n\n if (value.length > 0) {\n newFilters['search'] = {\n type: 'search',\n text: 'Search',\n data: { value },\n };\n } else {\n delete newFilters['search'];\n }\n\n this.onFilter({ ...newFilters });\n };\n\n toggleExpand = (): void => {\n this._isExpanded = !this._isExpanded;\n };\n\n private _copyFilters = (\n filters: HdsFilterBarFilters\n ): HdsFilterBarFilters => {\n const newFilters = {} as HdsFilterBarFilters;\n\n // Note: Due to the filters being an Ember object, structuredClone cannot be used here.\n // Further investigation will be done in a follow-up task: https://hashicorp.atlassian.net/browse/HDS-5907\n Object.keys(filters).forEach((k) => {\n newFilters[k] = JSON.parse(\n JSON.stringify(filters[k])\n ) as HdsFilterBarFilter;\n });\n\n return newFilters;\n };\n\n private _onFilterDismiss = (key: string, filterValue?: unknown): void => {\n const { filters } = this.args;\n if (filters && filters[key]) {\n const keyFilter: HdsFilterBarFilter = filters[key];\n const newFilters = this._copyFilters(filters);\n\n if (\n (keyFilter.type === 'multi-select' && isArray(keyFilter.data)) ||\n (keyFilter.type === 'generic' && isArray(keyFilter.data))\n ) {\n const newKeyfilter = keyFilter.data?.filter(\n (item) => item.value !== filterValue\n );\n if (newKeyfilter.length === 0) {\n delete newFilters[key];\n } else {\n newFilters[key] = {\n type: keyFilter.type,\n text: keyFilter.text,\n data: newKeyfilter,\n };\n }\n } else {\n delete newFilters[key];\n }\n\n this.onFilter({ ...newFilters });\n }\n this._dropdownToggleElement?.focus();\n };\n\n private _filterData = (\n data: HdsFilterBarData\n ): HdsFilterBarGenericFilterData => {\n const result = {\n value: '',\n } as HdsFilterBarGenericFilterData;\n if ('value' in data) {\n result.value = data.value;\n }\n if ('label' in data) {\n result.label = data.label;\n }\n return result;\n };\n\n private _getFilterValueText = (filter: HdsFilterBarFilter): string => {\n const result = this._filterData(filter.data);\n const resultLabel = result?.label as string;\n const resultValue = result?.value as string;\n return resultLabel ?? resultValue;\n };\n\n private _getFilterKeyText = (\n key: string,\n data: HdsFilterBarFilter\n ): string => {\n if (data.text) {\n return data.text;\n } else {\n return key;\n }\n };\n\n private _getNumericalFilterValueText = (\n filter: HdsFilterBarFilter\n ): string => {\n const data = filter.data;\n\n if (filter.type === 'numerical' && 'selector' in data && 'value' in data) {\n const selector = data.selector as keyof typeof NUMERICAL_SELECTORS_TEXT;\n if (\n selector === 'between' &&\n typeof data.value === 'object' &&\n data.value !== null\n ) {\n const separatorText = this.hdsIntl.t(\n 'hds.components.filter-bar.tag.numerical-filter.separator',\n {\n default: 'and',\n }\n );\n return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value.start} ${separatorText} ${data.value.end}`;\n } else if (typeof data.value !== 'object') {\n return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value}`;\n }\n return '';\n } else {\n return '';\n }\n };\n\n private _getDateFilterValueText = (filter: HdsFilterBarFilter): string => {\n const data = filter.data;\n\n if (\n (filter.type === 'date' ||\n filter.type === 'datetime' ||\n filter.type === 'time') &&\n 'selector' in data &&\n 'value' in data\n ) {\n const selector = data.selector as keyof typeof DATE_SELECTORS_TEXT;\n if (\n selector === 'between' &&\n typeof data.value === 'object' &&\n data.value !== null\n ) {\n const separatorText = this.hdsIntl.t(\n 'hds.components.filter-bar.tag.date-filter.separator',\n {\n default: 'and',\n }\n );\n const startDateText = this._formatDateFilterText(\n data.value.start as string,\n filter.type\n );\n const endDateText = this._formatDateFilterText(\n data.value.end as string,\n filter.type\n );\n return `${DATE_SELECTORS_TEXT[selector]} ${startDateText} ${separatorText} ${endDateText}`;\n } else if (data.value !== null && typeof data.value !== 'object') {\n const dateText = this._formatDateFilterText(\n data.value as string,\n filter.type\n );\n return `${DATE_SELECTORS_TEXT[selector]} ${dateText}`;\n }\n return '';\n } else {\n return '';\n }\n };\n\n private _formatDateFilterText = (\n dateString: string,\n filterType: HdsFilterBarFilterType\n ): string => {\n let date;\n if (filterType === 'time') {\n date = new Date(`1970-01-01T${dateString}`);\n } else {\n date = new Date(dateString);\n }\n\n let options = {};\n if (filterType === 'date') {\n options = { dateStyle: 'short' };\n } else if (filterType === 'time') {\n options = { timeStyle: 'short' };\n } else {\n options = { dateStyle: 'short', timeStyle: 'short' };\n }\n\n const newDate = new Intl.DateTimeFormat(undefined, options);\n return newDate.format(date);\n };\n\n private _getGenericFilterValueText = (filter: HdsFilterBarFilter): string => {\n if ('dismissTagText' in filter) {\n return filter.dismissTagText ?? '';\n } else {\n return '';\n }\n };\n\n private _getMultiSelectFilterData = (\n data: HdsFilterBarData\n ): { value: unknown; label?: string }[] => {\n if (isArray(data)) {\n return data.map((item) => this._filterData(item));\n }\n return [];\n };\n\n <template>\n <div class=\"hds-filter-bar\" ...attributes {{this._setUpFilterBar}}>\n {{#if @isLiveFilter}}\n <span class=\"sr-only\">{{hdsT\n \"hds.components.filter-bar.live-filtering\"\n default=\"Filters will be applied automatically as selections are made\"\n }}</span>\n {{/if}}\n <HdsLayoutFlex @align=\"center\" @gap=\"8\" class=\"hds-filter-bar__actions\">\n <HdsButton\n @text={{hdsT\n \"hds.components.filter-bar.applied-filters.toggle-button\"\n default=\"View applied filters\"\n }}\n @color=\"secondary\"\n @size=\"small\"\n @icon={{if this._isExpanded \"unfold-close\" \"unfold-open\"}}\n @isIconOnly={{true}}\n id={{this._appliedFiltersButtonId}}\n aria-controls={{this._appliedFiltersContentId}}\n aria-expanded={{if this._isExpanded \"true\" \"false\"}}\n class=\"hds-filter-bar__applied-filters-toggle-button\"\n {{on \"click\" this.toggleExpand}}\n />\n {{yield\n (hash\n FiltersDropdown=(component\n HdsFilterBarFiltersDropdown\n filters=@filters\n isLiveFilter=@isLiveFilter\n onFilter=this.onFilter\n )\n )\n }}\n {{#if @hasSearch}}\n <HdsFormTextInputBase\n @type=\"search\"\n @value={{this.searchValue}}\n class=\"hds-filter-bar__search\"\n placeholder={{this.searchPlaceholder}}\n aria-label={{this.searchAriaLabel}}\n name=\"search\"\n {{on \"change\" this.onSearch}}\n />\n {{/if}}\n <HdsLayoutFlex\n @gap=\"8\"\n @align=\"center\"\n class=\"hds-filter-bar__actions__right\"\n >\n {{yield (hash ActionsGeneric=HdsYield)}}\n {{yield (hash ActionsDropdown=HdsFilterBarActionsDropdown)}}\n </HdsLayoutFlex>\n </HdsLayoutFlex>\n <div\n class=\"hds-filter-bar__applied-filters-list\"\n id={{this._appliedFiltersContentId}}\n >\n {{#if this._isExpanded}}\n <HdsSeparator @spacing=\"0\" />\n <div class=\"hds-filter-bar__applied-filters-list__content\">\n {{#if this.hasActiveFilters}}\n <HdsFilterBarAppliedFilters\n @filters={{@filters}}\n @onFilterDismiss={{this._onFilterDismiss}}\n />\n <HdsButton\n class=\"hds-filter-bar__clear-button\"\n @text={{hdsT\n \"hds.components.filter-bar.applied-filters.clear-filters\"\n default=\"Clear all filters\"\n }}\n @color=\"tertiary\"\n @icon=\"x\"\n @size=\"small\"\n {{on \"click\" this.clearFilters}}\n />\n {{else}}\n <HdsTextBody @size={{100}} @color=\"faint\">\n {{hdsT\n \"hds.components.filter-bar.applied-filters.no-filters-applied\"\n default=\"No filters applied\"\n }}\n </HdsTextBody>\n {{/if}}\n </div>\n {{/if}}\n </div>\n </div>\n </template>\n}\n"],"names":["HdsFilterBar","Component","g","prototype","service","i","tracked","hasActiveFilters","_dropdownToggleElement","_appliedFiltersButtonId","guidFor","_appliedFiltersContentId","_setUpFilterBar","modifier","element","querySelector","_isExpanded","searchValue","filters","args","_getFilterValueText","searchPlaceholder","hdsIntl","t","default","searchAriaLabel","Object","keys","length","onFilter","clearFilters","focus","onSearch","event","input","target","value","newFilters","_copyFilters","type","text","data","toggleExpand","forEach","k","JSON","parse","stringify","_onFilterDismiss","key","filterValue","keyFilter","isArray","newKeyfilter","filter","item","_filterData","result","label","resultLabel","resultValue","_getFilterKeyText","_getNumericalFilterValueText","selector","separatorText","NUMERICAL_SELECTORS_TEXT","start","end","_getDateFilterValueText","startDateText","_formatDateFilterText","endDateText","DATE_SELECTORS_TEXT","dateText","dateString","filterType","date","Date","options","dateStyle","timeStyle","newDate","Intl","DateTimeFormat","undefined","format","_getGenericFilterValueText","dismissTagText","_getMultiSelectFilterData","map","setComponentTemplate","precompileTemplate","strictMode","scope","hdsT","HdsLayoutFlex","HdsButton","on","hash","HdsFilterBarFiltersDropdown","HdsFormTextInputBase","HdsYield","HdsFilterBarActionsDropdown","HdsSeparator","HdsFilterBarAppliedFilters","HdsTextBody"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/filter-bar/index.gts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2026\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport { isArray } from '@ember/array';\nimport { modifier } from 'ember-modifier';\nimport { guidFor } from '@ember/object/internals';\nimport { hash } from '@ember/helper';\nimport { on } from '@ember/modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport { NUMERICAL_SELECTORS_TEXT } from './filter-group/numerical.gts';\nimport { DATE_SELECTORS_TEXT } from './filter-group/date.gts';\nimport hdsT from '../../../helpers/hds-t.ts';\nimport HdsYield from '../yield/index.gts';\nimport HdsFilterBarActionsDropdown from './actions-dropdown.gts';\nimport HdsFilterBarFiltersDropdown from './filters-dropdown.gts';\nimport HdsLayoutFlex from '../layout/flex/index.gts';\nimport HdsFormTextInputBase from '../form/text-input/base.gts';\nimport HdsButton from '../button/index.gts';\nimport HdsSeparator from '../separator/index.gts';\nimport HdsTextBody from '../text/body.gts';\nimport HdsFilterBarAppliedFilters from './applied-filters.gts';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport type {\n HdsFilterBarFilters,\n HdsFilterBarFilter,\n HdsFilterBarFilterType,\n HdsFilterBarData,\n HdsFilterBarGenericFilterData,\n} from './types.ts';\n\nexport interface HdsFilterBarSignature {\n Args: {\n filters: HdsFilterBarFilters;\n isLiveFilter?: boolean;\n hasSearch?: boolean;\n searchPlaceholder?: string;\n searchAriaLabel?: string;\n onFilter?: (filters: HdsFilterBarFilters) => void;\n };\n Blocks: {\n default?: [\n {\n FiltersDropdown?: WithBoundArgs<\n typeof HdsFilterBarFiltersDropdown,\n 'filters' | 'isLiveFilter' | 'onFilter'\n >;\n ActionsDropdown?: WithBoundArgs<\n typeof HdsFilterBarActionsDropdown,\n never\n >;\n ActionsGeneric?: typeof HdsYield;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBar extends Component<HdsFilterBarSignature> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked _isExpanded: boolean = this.hasActiveFilters;\n\n private _dropdownToggleElement!: HTMLDivElement;\n private _appliedFiltersButtonId = 'applied-filters-button-' + guidFor(this);\n private _appliedFiltersContentId = 'applied-filters-content-' + guidFor(this);\n\n private _setUpFilterBar = modifier((element: HTMLDivElement) => {\n this._dropdownToggleElement = element.querySelector(\n '.hds-filter-bar__filters-dropdown .hds-dropdown-toggle-button'\n ) as HTMLDivElement;\n\n // Align the expanded state with the presence of active filters\n this._isExpanded = this.hasActiveFilters;\n });\n\n get searchValue(): string {\n const { filters } = this.args;\n if (filters['search']) {\n return this._getFilterValueText(filters['search']);\n }\n return '';\n }\n\n get searchPlaceholder(): string {\n return (\n this.args.searchPlaceholder ||\n this.hdsIntl.t('hds.components.filter-bar.search.placeholder', {\n default: 'Search',\n })\n );\n }\n\n get searchAriaLabel(): string {\n return (\n this.args.searchAriaLabel ||\n this.hdsIntl.t('hds.components.filter-bar.search.aria-label', {\n default: 'Search',\n })\n );\n }\n\n get hasActiveFilters(): boolean {\n return Object.keys(this.args.filters).length > 0;\n }\n\n onFilter = (filters: HdsFilterBarFilters): void => {\n const { onFilter } = this.args;\n if (onFilter && typeof onFilter === 'function') {\n onFilter(filters);\n\n if (Object.keys(filters).length > 0) {\n this._isExpanded = true;\n } else {\n this._isExpanded = false;\n }\n }\n };\n\n clearFilters = (): void => {\n const { onFilter } = this.args;\n if (onFilter && typeof onFilter === 'function') {\n onFilter({});\n this._isExpanded = false;\n }\n this._dropdownToggleElement?.focus();\n };\n\n onSearch = (event: Event): void => {\n const { filters } = this.args;\n const input = event.target as HTMLInputElement;\n const value = input?.value;\n\n const newFilters = this._copyFilters(filters);\n\n if (value.length > 0) {\n newFilters['search'] = {\n type: 'search',\n text: 'Search',\n data: { value },\n };\n } else {\n delete newFilters['search'];\n }\n\n this.onFilter({ ...newFilters });\n };\n\n toggleExpand = (): void => {\n this._isExpanded = !this._isExpanded;\n };\n\n private _copyFilters = (\n filters: HdsFilterBarFilters\n ): HdsFilterBarFilters => {\n const newFilters = {} as HdsFilterBarFilters;\n\n // Note: Due to the filters being an Ember object, structuredClone cannot be used here.\n // Further investigation will be done in a follow-up task: https://hashicorp.atlassian.net/browse/HDS-5907\n Object.keys(filters).forEach((k) => {\n newFilters[k] = JSON.parse(\n JSON.stringify(filters[k])\n ) as HdsFilterBarFilter;\n });\n\n return newFilters;\n };\n\n private _onFilterDismiss = (key: string, filterValue?: unknown): void => {\n const { filters } = this.args;\n if (filters && filters[key]) {\n const keyFilter: HdsFilterBarFilter = filters[key];\n const newFilters = this._copyFilters(filters);\n\n if (\n (keyFilter.type === 'multi-select' && isArray(keyFilter.data)) ||\n (keyFilter.type === 'generic' && isArray(keyFilter.data))\n ) {\n const newKeyfilter = keyFilter.data?.filter(\n (item) => item.value !== filterValue\n );\n if (newKeyfilter.length === 0) {\n delete newFilters[key];\n } else {\n newFilters[key] = {\n type: keyFilter.type,\n text: keyFilter.text,\n data: newKeyfilter,\n };\n }\n } else {\n delete newFilters[key];\n }\n\n this.onFilter({ ...newFilters });\n }\n this._dropdownToggleElement?.focus();\n };\n\n private _filterData = (\n data: HdsFilterBarData\n ): HdsFilterBarGenericFilterData => {\n const result = {\n value: '',\n } as HdsFilterBarGenericFilterData;\n if ('value' in data) {\n result.value = data.value;\n }\n if ('label' in data) {\n result.label = data.label;\n }\n return result;\n };\n\n private _getFilterValueText = (filter: HdsFilterBarFilter): string => {\n const result = this._filterData(filter.data);\n const resultLabel = result?.label as string;\n const resultValue = result?.value as string;\n return resultLabel ?? resultValue;\n };\n\n private _getFilterKeyText = (\n key: string,\n data: HdsFilterBarFilter\n ): string => {\n if (data.text) {\n return data.text;\n } else {\n return key;\n }\n };\n\n private _getNumericalFilterValueText = (\n filter: HdsFilterBarFilter\n ): string => {\n const data = filter.data;\n\n if (filter.type === 'numerical' && 'selector' in data && 'value' in data) {\n const selector = data.selector as keyof typeof NUMERICAL_SELECTORS_TEXT;\n if (\n selector === 'between' &&\n typeof data.value === 'object' &&\n data.value !== null\n ) {\n const separatorText = this.hdsIntl.t(\n 'hds.components.filter-bar.tag.numerical-filter.separator',\n {\n default: 'and',\n }\n );\n return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value.start} ${separatorText} ${data.value.end}`;\n } else if (typeof data.value !== 'object') {\n return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value}`;\n }\n return '';\n } else {\n return '';\n }\n };\n\n private _getDateFilterValueText = (filter: HdsFilterBarFilter): string => {\n const data = filter.data;\n\n if (\n (filter.type === 'date' ||\n filter.type === 'datetime' ||\n filter.type === 'time') &&\n 'selector' in data &&\n 'value' in data\n ) {\n const selector = data.selector as keyof typeof DATE_SELECTORS_TEXT;\n if (\n selector === 'between' &&\n typeof data.value === 'object' &&\n data.value !== null\n ) {\n const separatorText = this.hdsIntl.t(\n 'hds.components.filter-bar.tag.date-filter.separator',\n {\n default: 'and',\n }\n );\n const startDateText = this._formatDateFilterText(\n data.value.start as string,\n filter.type\n );\n const endDateText = this._formatDateFilterText(\n data.value.end as string,\n filter.type\n );\n return `${DATE_SELECTORS_TEXT[selector]} ${startDateText} ${separatorText} ${endDateText}`;\n } else if (data.value !== null && typeof data.value !== 'object') {\n const dateText = this._formatDateFilterText(\n data.value as string,\n filter.type\n );\n return `${DATE_SELECTORS_TEXT[selector]} ${dateText}`;\n }\n return '';\n } else {\n return '';\n }\n };\n\n private _formatDateFilterText = (\n dateString: string,\n filterType: HdsFilterBarFilterType\n ): string => {\n let date;\n if (filterType === 'time') {\n date = new Date(`1970-01-01T${dateString}`);\n } else {\n date = new Date(dateString);\n }\n\n let options = {};\n if (filterType === 'date') {\n options = { dateStyle: 'short' };\n } else if (filterType === 'time') {\n options = { timeStyle: 'short' };\n } else {\n options = { dateStyle: 'short', timeStyle: 'short' };\n }\n\n const newDate = new Intl.DateTimeFormat(undefined, options);\n return newDate.format(date);\n };\n\n private _getGenericFilterValueText = (filter: HdsFilterBarFilter): string => {\n if ('dismissTagText' in filter) {\n return filter.dismissTagText ?? '';\n } else {\n return '';\n }\n };\n\n private _getMultiSelectFilterData = (\n data: HdsFilterBarData\n ): { value: unknown; label?: string }[] => {\n if (isArray(data)) {\n return data.map((item) => this._filterData(item));\n }\n return [];\n };\n\n <template>\n <div class=\"hds-filter-bar\" ...attributes {{this._setUpFilterBar}}>\n {{#if @isLiveFilter}}\n <span class=\"sr-only\">{{hdsT\n \"hds.components.filter-bar.live-filtering\"\n default=\"Filters will be applied automatically as selections are made\"\n }}</span>\n {{/if}}\n <HdsLayoutFlex\n @align=\"center\"\n @wrap={{true}}\n @gap=\"8\"\n class=\"hds-filter-bar__actions\"\n >\n <div class=\"hds-filter-bar__actions__left\">\n <HdsButton\n @text={{hdsT\n \"hds.components.filter-bar.applied-filters.toggle-button\"\n default=\"View applied filters\"\n }}\n @color=\"secondary\"\n @size=\"small\"\n @icon={{if this._isExpanded \"unfold-close\" \"unfold-open\"}}\n @isIconOnly={{true}}\n id={{this._appliedFiltersButtonId}}\n aria-controls={{this._appliedFiltersContentId}}\n aria-expanded={{if this._isExpanded \"true\" \"false\"}}\n class=\"hds-filter-bar__applied-filters-toggle-button\"\n {{on \"click\" this.toggleExpand}}\n />\n {{yield\n (hash\n FiltersDropdown=(component\n HdsFilterBarFiltersDropdown\n filters=@filters\n isLiveFilter=@isLiveFilter\n onFilter=this.onFilter\n )\n )\n }}\n {{#if @hasSearch}}\n <HdsFormTextInputBase\n @type=\"search\"\n @value={{this.searchValue}}\n class=\"hds-filter-bar__search\"\n placeholder={{this.searchPlaceholder}}\n aria-label={{this.searchAriaLabel}}\n name=\"search\"\n {{on \"change\" this.onSearch}}\n />\n {{/if}}\n </div>\n {{yield (hash ActionsGeneric=HdsYield)}}\n {{yield (hash ActionsDropdown=HdsFilterBarActionsDropdown)}}\n </HdsLayoutFlex>\n <div\n class=\"hds-filter-bar__applied-filters-list\"\n id={{this._appliedFiltersContentId}}\n >\n {{#if this._isExpanded}}\n <HdsSeparator @spacing=\"0\" />\n <div class=\"hds-filter-bar__applied-filters-list__content\">\n {{#if this.hasActiveFilters}}\n <HdsFilterBarAppliedFilters\n @filters={{@filters}}\n @onFilterDismiss={{this._onFilterDismiss}}\n />\n <HdsButton\n class=\"hds-filter-bar__clear-button\"\n @text={{hdsT\n \"hds.components.filter-bar.applied-filters.clear-filters\"\n default=\"Clear all filters\"\n }}\n @color=\"tertiary\"\n @icon=\"x\"\n @size=\"small\"\n {{on \"click\" this.clearFilters}}\n />\n {{else}}\n <HdsTextBody @size={{100}} @color=\"faint\">\n {{hdsT\n \"hds.components.filter-bar.applied-filters.no-filters-applied\"\n default=\"No filters applied\"\n }}\n </HdsTextBody>\n {{/if}}\n </div>\n {{/if}}\n </div>\n </div>\n </template>\n}\n"],"names":["HdsFilterBar","Component","g","prototype","service","i","tracked","hasActiveFilters","_dropdownToggleElement","_appliedFiltersButtonId","guidFor","_appliedFiltersContentId","_setUpFilterBar","modifier","element","querySelector","_isExpanded","searchValue","filters","args","_getFilterValueText","searchPlaceholder","hdsIntl","t","default","searchAriaLabel","Object","keys","length","onFilter","clearFilters","focus","onSearch","event","input","target","value","newFilters","_copyFilters","type","text","data","toggleExpand","forEach","k","JSON","parse","stringify","_onFilterDismiss","key","filterValue","keyFilter","isArray","newKeyfilter","filter","item","_filterData","result","label","resultLabel","resultValue","_getFilterKeyText","_getNumericalFilterValueText","selector","separatorText","NUMERICAL_SELECTORS_TEXT","start","end","_getDateFilterValueText","startDateText","_formatDateFilterText","endDateText","DATE_SELECTORS_TEXT","dateText","dateString","filterType","date","Date","options","dateStyle","timeStyle","newDate","Intl","DateTimeFormat","undefined","format","_getGenericFilterValueText","dismissTagText","_getMultiSelectFilterData","map","setComponentTemplate","precompileTemplate","strictMode","scope","hdsT","HdsLayoutFlex","HdsButton","on","hash","HdsFilterBarFiltersDropdown","HdsFormTextInputBase","HdsYield","HdsFilterBarActionsDropdown","HdsSeparator","HdsFilterBarAppliedFilters","HdsTextBody"],"mappings":"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"}
|