@hashicorp/design-system-components 5.2.0-rc-20260107211222 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/declarations/services/hds-intl.d.ts +4 -3
  2. package/dist/components/hds/advanced-table/index.js.map +1 -1
  3. package/dist/components/hds/advanced-table/models/column.js.map +1 -1
  4. package/dist/components/hds/advanced-table/models/row.js.map +1 -1
  5. package/dist/components/hds/advanced-table/models/table.js.map +1 -1
  6. package/dist/components/hds/advanced-table/td.js.map +1 -1
  7. package/dist/components/hds/advanced-table/th-context-menu.js.map +1 -1
  8. package/dist/components/hds/advanced-table/th-reorder-drop-target.js.map +1 -1
  9. package/dist/components/hds/advanced-table/th-resize-handle.js.map +1 -1
  10. package/dist/components/hds/advanced-table/th-selectable.js.map +1 -1
  11. package/dist/components/hds/advanced-table/th-sort.js.map +1 -1
  12. package/dist/components/hds/advanced-table/th.js.map +1 -1
  13. package/dist/components/hds/alert/index.js.map +1 -1
  14. package/dist/components/hds/app-header/index.js.map +1 -1
  15. package/dist/components/hds/app-side-nav/index.js.map +1 -1
  16. package/dist/components/hds/app-side-nav/list/index.js.map +1 -1
  17. package/dist/components/hds/app-side-nav/portal/target.js.map +1 -1
  18. package/dist/components/hds/breadcrumb/item.js.map +1 -1
  19. package/dist/components/hds/code-block/index.js.map +1 -1
  20. package/dist/components/hds/code-editor/index.js.map +1 -1
  21. package/dist/components/hds/copy/button/index.js.map +1 -1
  22. package/dist/components/hds/copy/snippet/index.js.map +1 -1
  23. package/dist/components/hds/disclosure-primitive/index.js.map +1 -1
  24. package/dist/components/hds/dismiss-button/index.js.map +1 -1
  25. package/dist/components/hds/dropdown/toggle/icon.js.map +1 -1
  26. package/dist/components/hds/flyout/index.js.map +1 -1
  27. package/dist/components/hds/form/key-value-inputs/index.js.map +1 -1
  28. package/dist/components/hds/form/masked-input/base.js.map +1 -1
  29. package/dist/components/hds/form/super-select/multiple/base.js.map +1 -1
  30. package/dist/components/hds/form/super-select/single/base.js.map +1 -1
  31. package/dist/components/hds/form/text-input/field.js.map +1 -1
  32. package/dist/components/hds/interactive/index.js.map +1 -1
  33. package/dist/components/hds/modal/index.js.map +1 -1
  34. package/dist/components/hds/pagination/compact/index.js.map +1 -1
  35. package/dist/components/hds/pagination/info/index.js.map +1 -1
  36. package/dist/components/hds/pagination/numbered/index.js.map +1 -1
  37. package/dist/components/hds/popover-primitive/index.js.map +1 -1
  38. package/dist/components/hds/side-nav/index.js.map +1 -1
  39. package/dist/components/hds/side-nav/list/index.js.map +1 -1
  40. package/dist/components/hds/side-nav/portal/target.js.map +1 -1
  41. package/dist/components/hds/stepper/list/index.js.map +1 -1
  42. package/dist/components/hds/stepper/nav/index.js.map +1 -1
  43. package/dist/components/hds/table/index.js.map +1 -1
  44. package/dist/components/hds/table/th-button-sort.js.map +1 -1
  45. package/dist/components/hds/table/th-selectable.js.map +1 -1
  46. package/dist/components/hds/tabs/index.js.map +1 -1
  47. package/dist/components/hds/tag/index.js.map +1 -1
  48. package/dist/components/hds/time/index.js.map +1 -1
  49. package/dist/components/hds/time/range.js.map +1 -1
  50. package/dist/helpers/hds-t.js.map +1 -1
  51. package/dist/modifiers/hds-code-editor.js.map +1 -1
  52. package/dist/services/hds-intl.js.map +1 -1
  53. package/dist/services/hds-time.js.map +1 -1
  54. package/dist/utils/hds-aria-described-by.js.map +1 -1
  55. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/popover-primitive/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert, warn } from '@ember/debug';\nimport { next } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport registerEvent from '../../../modifiers/hds-register-event.ts';\nimport anchoredPositionModifier from '../../../modifiers/hds-anchored-position.ts';\n\nimport type { HdsAnchoredPositionOptions } from '../../../modifiers/hds-anchored-position.ts';\nimport type { ModifierLike } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nexport interface HdsPopoverPrimitiveSignature {\n Args: {\n isOpen?: boolean;\n enableSoftEvents?: boolean;\n enableClickEvents?: boolean;\n boundary?: HdsAnchoredPositionOptions['boundary'];\n onOpen?: () => void;\n onClose?: () => void;\n };\n Blocks: {\n default: [\n {\n setupPrimitiveContainer: ModifierLike<SetupPrimitiveContainerModifier>;\n setupPrimitiveToggle: ModifierLike<SetupPrimitiveToggleModifier>;\n setupPrimitivePopover: ModifierLike<SetupPrimitivePopoverModifier>;\n toggleElement?: HTMLButtonElement;\n popoverElement?: HTMLElement;\n isOpen: boolean;\n showPopover: () => void;\n hidePopover: (event?: Event) => void;\n togglePopover: () => void;\n boundary?: HdsAnchoredPositionOptions['boundary'];\n },\n ];\n };\n}\n\ninterface SetupPrimitiveContainerModifier {\n Element: HTMLElement;\n}\n\nexport interface SetupPrimitiveToggleModifier {\n Element: HTMLButtonElement;\n}\n\nexport interface SetupPrimitivePopoverModifier {\n Element: HTMLElement;\n Args: {\n Positional: [];\n Named: { anchoredPositionOptions: HdsAnchoredPositionOptions };\n };\n}\n\nexport default class HdsPopoverPrimitive extends Component<HdsPopoverPrimitiveSignature> {\n @tracked private _isOpen;\n @tracked private _isClosing = false;\n @tracked private _anchoredPositionOptions?: HdsAnchoredPositionOptions;\n private _containerElement?: HTMLElement;\n private _toggleElement?: HTMLButtonElement;\n private _popoverElement?: HTMLElement;\n // this will enable \"soft\" events for the toggle (\"hover\" and \"focus\")\n enableSoftEvents = this.args.enableSoftEvents ?? false;\n // this will enable \"click\" events for the toggle\n enableClickEvents = this.args.enableClickEvents ?? false;\n private _timer?: ReturnType<typeof setTimeout> | null;\n\n constructor(owner: Owner, args: HdsPopoverPrimitiveSignature['Args']) {\n super(owner, args);\n this._isOpen = this.args.isOpen ?? false;\n }\n\n setupPrimitiveContainer = modifier<SetupPrimitiveContainerModifier>(\n (element: HTMLElement): void => {\n this._containerElement = element;\n\n // we register the \"soft\" events\n if (this.enableSoftEvents) {\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._containerElement, [\n 'mouseenter',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onMouseEnter,\n ]);\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._containerElement, [\n 'mouseleave',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onMouseLeave,\n ]);\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._containerElement, ['focusin', this.onFocusIn]);\n }\n // we always want the focusOut event\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._containerElement, ['focusout', this.onFocusOut]);\n }\n );\n\n setupPrimitiveToggle = modifier<SetupPrimitiveToggleModifier>(\n (element: HTMLButtonElement) => {\n this._toggleElement = element;\n\n assert(\n `The toggle element of \"Hds::PopoverPrimitive\" must be a <button>; element received: <${element.tagName.toLowerCase()}>`,\n element instanceof HTMLButtonElement\n );\n\n this._linkToggleAndPopover();\n\n // Return a teardown function to clean up the modifier's side effects.\n // This is a safeguard against bugs where this element might be\n // cached and re-parented in the DOM, rather than being fully destroyed.\n return () => {\n element.removeAttribute('aria-controls');\n element.removeAttribute('popovertarget');\n };\n }\n );\n\n setupPrimitivePopover = modifier(\n (\n element: HTMLElement,\n _positional,\n named: { anchoredPositionOptions: HdsAnchoredPositionOptions }\n ): void => {\n this._popoverElement = element;\n\n // We need to create a popoverId in order to connect the popover and the toggle with aria-controls\n // and an id is needed to implement `onclick` event listeners\n if (!this._popoverElement.id) {\n this._popoverElement.id = guidFor(this);\n }\n\n // this should be an extremely edge case, but in the case the popover needs to be initially forced to be open\n // we need to use the \"manual\" state to support the case of multiple \"menus\" opened at the same time\n // IMPORTANT! if a \"popover\" is set to \"open\" with a \"manual\" state, then it can't be closed via `esc` and `click outside`\n if (this.args.isOpen) {\n this._popoverElement.popover = 'manual';\n this._popoverElement.showPopover();\n } else {\n this._popoverElement.popover = 'auto';\n }\n\n // Register \"onBeforeToggle\" + \"onToggle\" callback functions to be called when a native 'toggle' event is dispatched\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._popoverElement, [\n 'beforetoggle',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onBeforeTogglePopover,\n ]);\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._popoverElement, ['toggle', this.onTogglePopover]);\n\n // we need to spread the argument because if it's set via `{{ hash … }}` Ember complains when we overwrite one of its values\n this._anchoredPositionOptions = {\n ...named.anchoredPositionOptions,\n };\n\n this._linkToggleAndPopover();\n }\n );\n\n // Apply the `hds-anchored-position` modifier to the \"popover\" element\n // (notice: this function runs the first time when the element the modifier was applied to is inserted into the DOM, and it autotracks while running.\n // Any tracked values that it accesses will be tracked, including the arguments it receives, and if any of them changes, the function will run again)\n // This modifiers uses the Floating UI library to provide:\n // - positioning of the \"popover\" in relation to the \"toggle\"\n // - collision detection (optional)\n private _applyAnchoredPositionModifier(): void {\n if (\n this._toggleElement !== undefined &&\n this._popoverElement !== undefined &&\n this._anchoredPositionOptions !== undefined\n ) {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n // @ts-expect-error: known issue with type of invocation\n anchoredPositionModifier(\n this._popoverElement, // element the modifier is attached to\n [this._toggleElement], // positional arguments\n this._anchoredPositionOptions // named arguments\n );\n });\n }\n }\n\n private _linkToggleAndPopover(): void {\n if (\n this._toggleElement === undefined ||\n this._popoverElement === undefined\n ) {\n return;\n }\n\n const popoverId = this._popoverElement.id;\n\n this._toggleElement.setAttribute('aria-controls', popoverId);\n\n if (this.enableClickEvents) {\n this._toggleElement.setAttribute('popovertarget', popoverId);\n } else {\n this._toggleElement.removeAttribute('popovertarget');\n }\n\n this._applyAnchoredPositionModifier();\n }\n\n @action\n showPopover(): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.showPopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`showPopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.show-popover-action.invocation-failed',\n }\n );\n }\n }\n\n @action\n // the event may be passed by the `on` modifier, so we need to keep it as an argument here\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n hidePopover(_event?: Event): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.hidePopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`hidePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.hide-popover-action.invocation-failed',\n }\n );\n }\n }\n\n @action\n togglePopover(): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.togglePopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`togglePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.toggle-popover-action.invocation-failed',\n }\n );\n }\n }\n\n // fired just _before_ the \"popover\" is shown or hidden\n @action\n onBeforeTogglePopover(event: ToggleEvent): void {\n if (event.newState === 'closed') {\n // we need this flag to check if it's in the \"closing\" process,\n // because the browser automatically returns the focus to the \"trigger\" button\n // and this would re-open immediately the popover because of the `focusin` event\n this._isClosing = true;\n }\n }\n\n // fired just _after_ the \"popover\" is shown or hidden\n @action\n onTogglePopover(event: ToggleEvent): void {\n if (event.newState === 'open') {\n this._isOpen = true;\n\n // we call the \"onOpen\" callback if it exists (and is a function)\n const { onOpen } = this.args;\n if (typeof onOpen === 'function') {\n onOpen();\n }\n } else {\n this._isOpen = false;\n\n // reset the \"isClosing\" flag (the `toggle` event is fired _after_ the popover is closed)\n this._isClosing = false;\n\n // if the popover was initially forced to be open (using the \"manual\" state) then revert its status to `auto` once the user interacts with it\n if (this.args.isOpen) {\n if (this._popoverElement) {\n this._popoverElement.popover = 'auto';\n }\n }\n\n // we call the \"onClose\" callback if it exists (and is a function)\n const { onClose } = this.args;\n if (typeof onClose === 'function') {\n onClose();\n }\n }\n }\n\n @action\n onMouseEnter(): void {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n this.showPopover();\n }\n\n @action\n onFocusIn(): void {\n // don't re-open the popover if the focus is returned because the closing\n if (!this._isClosing) {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n this.showPopover();\n }\n }\n\n @action\n onMouseLeave(): void {\n this._timer = setTimeout((): void => this.hidePopover(), 500);\n }\n\n @action\n onFocusOut(event: FocusEvent): void {\n if (this._containerElement) {\n let isFocusStillInside = false;\n if (\n event.relatedTarget &&\n // if the related target is not part of the disclosed content we close the disclosed container\n this._containerElement.contains(event.relatedTarget as Node)\n ) {\n isFocusStillInside = true;\n } else if (\n document.activeElement &&\n // due to inconsistent implementation of relatedTarget across browsers we use the activeElement as a fallback\n this._containerElement.contains(document.activeElement)\n ) {\n isFocusStillInside = true;\n }\n // if the target receiving the focus is _not_ part of the disclosed content we close the disclosed container\n if (!isFocusStillInside) {\n this.hidePopover();\n }\n }\n }\n}\n"],"names":["HdsPopoverPrimitive","Component","g","prototype","tracked","i","_containerElement","_toggleElement","_popoverElement","enableSoftEvents","args","enableClickEvents","_timer","constructor","owner","_isOpen","isOpen","setupPrimitiveContainer","modifier","element","registerEvent","onMouseEnter","onMouseLeave","onFocusIn","onFocusOut","setupPrimitiveToggle","assert","tagName","toLowerCase","HTMLButtonElement","_linkToggleAndPopover","removeAttribute","setupPrimitivePopover","_positional","named","id","guidFor","popover","showPopover","onBeforeTogglePopover","onTogglePopover","_anchoredPositionOptions","anchoredPositionOptions","_applyAnchoredPositionModifier","undefined","next","anchoredPositionModifier","popoverId","setAttribute","error","warn","JSON","stringify","n","action","hidePopover","_event","togglePopover","event","newState","_isClosing","onOpen","onClose","clearTimeout","setTimeout","isFocusStillInside","relatedTarget","contains","document","activeElement","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/popover-primitive/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert, warn } from '@ember/debug';\nimport { next } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport registerEvent from '../../../modifiers/hds-register-event.ts';\nimport anchoredPositionModifier from '../../../modifiers/hds-anchored-position.ts';\n\nimport type { HdsAnchoredPositionOptions } from '../../../modifiers/hds-anchored-position.ts';\nimport type { ModifierLike } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nexport interface HdsPopoverPrimitiveSignature {\n Args: {\n isOpen?: boolean;\n enableSoftEvents?: boolean;\n enableClickEvents?: boolean;\n boundary?: HdsAnchoredPositionOptions['boundary'];\n onOpen?: () => void;\n onClose?: () => void;\n };\n Blocks: {\n default: [\n {\n setupPrimitiveContainer: ModifierLike<SetupPrimitiveContainerModifier>;\n setupPrimitiveToggle: ModifierLike<SetupPrimitiveToggleModifier>;\n setupPrimitivePopover: ModifierLike<SetupPrimitivePopoverModifier>;\n toggleElement?: HTMLButtonElement;\n popoverElement?: HTMLElement;\n isOpen: boolean;\n showPopover: () => void;\n hidePopover: (event?: Event) => void;\n togglePopover: () => void;\n boundary?: HdsAnchoredPositionOptions['boundary'];\n },\n ];\n };\n}\n\ninterface SetupPrimitiveContainerModifier {\n Element: HTMLElement;\n}\n\nexport interface SetupPrimitiveToggleModifier {\n Element: HTMLButtonElement;\n}\n\nexport interface SetupPrimitivePopoverModifier {\n Element: HTMLElement;\n Args: {\n Positional: [];\n Named: { anchoredPositionOptions: HdsAnchoredPositionOptions };\n };\n}\n\nexport default class HdsPopoverPrimitive extends Component<HdsPopoverPrimitiveSignature> {\n @tracked private _isOpen;\n @tracked private _isClosing = false;\n @tracked private _anchoredPositionOptions?: HdsAnchoredPositionOptions;\n private _containerElement?: HTMLElement;\n private _toggleElement?: HTMLButtonElement;\n private _popoverElement?: HTMLElement;\n // this will enable \"soft\" events for the toggle (\"hover\" and \"focus\")\n enableSoftEvents = this.args.enableSoftEvents ?? false;\n // this will enable \"click\" events for the toggle\n enableClickEvents = this.args.enableClickEvents ?? false;\n private _timer?: ReturnType<typeof setTimeout> | null;\n\n constructor(owner: Owner, args: HdsPopoverPrimitiveSignature['Args']) {\n super(owner, args);\n this._isOpen = this.args.isOpen ?? false;\n }\n\n setupPrimitiveContainer = modifier<SetupPrimitiveContainerModifier>(\n (element: HTMLElement): void => {\n this._containerElement = element;\n\n // we register the \"soft\" events\n if (this.enableSoftEvents) {\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._containerElement, [\n 'mouseenter',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onMouseEnter,\n ]);\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._containerElement, [\n 'mouseleave',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onMouseLeave,\n ]);\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._containerElement, ['focusin', this.onFocusIn]);\n }\n // we always want the focusOut event\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._containerElement, ['focusout', this.onFocusOut]);\n }\n );\n\n setupPrimitiveToggle = modifier<SetupPrimitiveToggleModifier>(\n (element: HTMLButtonElement) => {\n this._toggleElement = element;\n\n assert(\n `The toggle element of \"Hds::PopoverPrimitive\" must be a <button>; element received: <${element.tagName.toLowerCase()}>`,\n element instanceof HTMLButtonElement\n );\n\n this._linkToggleAndPopover();\n\n // Return a teardown function to clean up the modifier's side effects.\n // This is a safeguard against bugs where this element might be\n // cached and re-parented in the DOM, rather than being fully destroyed.\n return () => {\n element.removeAttribute('aria-controls');\n element.removeAttribute('popovertarget');\n };\n }\n );\n\n setupPrimitivePopover = modifier(\n (\n element: HTMLElement,\n _positional,\n named: { anchoredPositionOptions: HdsAnchoredPositionOptions }\n ): void => {\n this._popoverElement = element;\n\n // We need to create a popoverId in order to connect the popover and the toggle with aria-controls\n // and an id is needed to implement `onclick` event listeners\n if (!this._popoverElement.id) {\n this._popoverElement.id = guidFor(this);\n }\n\n // this should be an extremely edge case, but in the case the popover needs to be initially forced to be open\n // we need to use the \"manual\" state to support the case of multiple \"menus\" opened at the same time\n // IMPORTANT! if a \"popover\" is set to \"open\" with a \"manual\" state, then it can't be closed via `esc` and `click outside`\n if (this.args.isOpen) {\n this._popoverElement.popover = 'manual';\n this._popoverElement.showPopover();\n } else {\n this._popoverElement.popover = 'auto';\n }\n\n // Register \"onBeforeToggle\" + \"onToggle\" callback functions to be called when a native 'toggle' event is dispatched\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._popoverElement, [\n 'beforetoggle',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onBeforeTogglePopover,\n ]);\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._popoverElement, ['toggle', this.onTogglePopover]);\n\n // we need to spread the argument because if it's set via `{{ hash … }}` Ember complains when we overwrite one of its values\n this._anchoredPositionOptions = {\n ...named.anchoredPositionOptions,\n };\n\n this._linkToggleAndPopover();\n }\n );\n\n // Apply the `hds-anchored-position` modifier to the \"popover\" element\n // (notice: this function runs the first time when the element the modifier was applied to is inserted into the DOM, and it autotracks while running.\n // Any tracked values that it accesses will be tracked, including the arguments it receives, and if any of them changes, the function will run again)\n // This modifiers uses the Floating UI library to provide:\n // - positioning of the \"popover\" in relation to the \"toggle\"\n // - collision detection (optional)\n private _applyAnchoredPositionModifier(): void {\n if (\n this._toggleElement !== undefined &&\n this._popoverElement !== undefined &&\n this._anchoredPositionOptions !== undefined\n ) {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n // @ts-expect-error: known issue with type of invocation\n anchoredPositionModifier(\n this._popoverElement, // element the modifier is attached to\n [this._toggleElement], // positional arguments\n this._anchoredPositionOptions // named arguments\n );\n });\n }\n }\n\n private _linkToggleAndPopover(): void {\n if (\n this._toggleElement === undefined ||\n this._popoverElement === undefined\n ) {\n return;\n }\n\n const popoverId = this._popoverElement.id;\n\n this._toggleElement.setAttribute('aria-controls', popoverId);\n\n if (this.enableClickEvents) {\n this._toggleElement.setAttribute('popovertarget', popoverId);\n } else {\n this._toggleElement.removeAttribute('popovertarget');\n }\n\n this._applyAnchoredPositionModifier();\n }\n\n @action\n showPopover(): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.showPopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`showPopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.show-popover-action.invocation-failed',\n }\n );\n }\n }\n\n @action\n // the event may be passed by the `on` modifier, so we need to keep it as an argument here\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n hidePopover(_event?: Event): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.hidePopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`hidePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.hide-popover-action.invocation-failed',\n }\n );\n }\n }\n\n @action\n togglePopover(): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.togglePopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`togglePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.toggle-popover-action.invocation-failed',\n }\n );\n }\n }\n\n // fired just _before_ the \"popover\" is shown or hidden\n @action\n onBeforeTogglePopover(event: ToggleEvent): void {\n if (event.newState === 'closed') {\n // we need this flag to check if it's in the \"closing\" process,\n // because the browser automatically returns the focus to the \"trigger\" button\n // and this would re-open immediately the popover because of the `focusin` event\n this._isClosing = true;\n }\n }\n\n // fired just _after_ the \"popover\" is shown or hidden\n @action\n onTogglePopover(event: ToggleEvent): void {\n if (event.newState === 'open') {\n this._isOpen = true;\n\n // we call the \"onOpen\" callback if it exists (and is a function)\n const { onOpen } = this.args;\n if (typeof onOpen === 'function') {\n onOpen();\n }\n } else {\n this._isOpen = false;\n\n // reset the \"isClosing\" flag (the `toggle` event is fired _after_ the popover is closed)\n this._isClosing = false;\n\n // if the popover was initially forced to be open (using the \"manual\" state) then revert its status to `auto` once the user interacts with it\n if (this.args.isOpen) {\n if (this._popoverElement) {\n this._popoverElement.popover = 'auto';\n }\n }\n\n // we call the \"onClose\" callback if it exists (and is a function)\n const { onClose } = this.args;\n if (typeof onClose === 'function') {\n onClose();\n }\n }\n }\n\n @action\n onMouseEnter(): void {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n this.showPopover();\n }\n\n @action\n onFocusIn(): void {\n // don't re-open the popover if the focus is returned because the closing\n if (!this._isClosing) {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n this.showPopover();\n }\n }\n\n @action\n onMouseLeave(): void {\n this._timer = setTimeout((): void => this.hidePopover(), 500);\n }\n\n @action\n onFocusOut(event: FocusEvent): void {\n if (this._containerElement) {\n let isFocusStillInside = false;\n if (\n event.relatedTarget &&\n // if the related target is not part of the disclosed content we close the disclosed container\n this._containerElement.contains(event.relatedTarget as Node)\n ) {\n isFocusStillInside = true;\n } else if (\n document.activeElement &&\n // due to inconsistent implementation of relatedTarget across browsers we use the activeElement as a fallback\n this._containerElement.contains(document.activeElement)\n ) {\n isFocusStillInside = true;\n }\n // if the target receiving the focus is _not_ part of the disclosed content we close the disclosed container\n if (!isFocusStillInside) {\n this.hidePopover();\n }\n }\n }\n}\n"],"names":["HdsPopoverPrimitive","Component","g","prototype","tracked","i","void 0","_containerElement","_toggleElement","_popoverElement","enableSoftEvents","args","enableClickEvents","_timer","constructor","owner","_isOpen","isOpen","setupPrimitiveContainer","modifier","element","registerEvent","onMouseEnter","onMouseLeave","onFocusIn","onFocusOut","setupPrimitiveToggle","assert","tagName","toLowerCase","HTMLButtonElement","_linkToggleAndPopover","removeAttribute","setupPrimitivePopover","_positional","named","id","guidFor","popover","showPopover","onBeforeTogglePopover","onTogglePopover","_anchoredPositionOptions","anchoredPositionOptions","_applyAnchoredPositionModifier","undefined","next","anchoredPositionModifier","popoverId","setAttribute","error","warn","JSON","stringify","n","action","hidePopover","_event","togglePopover","event","newState","_isClosing","onOpen","onClose","clearTimeout","setTimeout","isFocusStillInside","relatedTarget","contains","document","activeElement","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/side-nav/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { deprecate } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { registerDestructor } from '@ember/destroyable';\n\nimport type { HdsSideNavBaseSignature } from './base';\nimport type Owner from '@ember/owner';\nimport type { NavigationNarratorSignature } from 'ember-a11y-refocus/components/navigation-narrator';\n\nexport interface HdsSideNavSignature {\n Args: {\n isResponsive?: boolean;\n isCollapsible?: boolean;\n isMinimized?: boolean;\n hasA11yRefocus?: boolean;\n a11yRefocusSkipTo?: string;\n a11yRefocusSkipText?: string;\n a11yRefocusNavigationText?: string;\n a11yRefocusRouteChangeValidator?: NavigationNarratorSignature['Args']['routeChangeValidator'];\n a11yRefocusExcludeAllQueryParams?: boolean;\n\n onToggleMinimizedStatus?: (arg: boolean) => void;\n\n onDesktopViewportChange?: (arg: boolean) => void;\n };\n Blocks: {\n header?: [\n {\n Header?: HdsSideNavBaseSignature['Blocks']['header'];\n isMinimized?: boolean;\n },\n ];\n body?: [\n {\n Body?: HdsSideNavBaseSignature['Blocks']['body'];\n isMinimized?: boolean;\n },\n ];\n footer?: [\n {\n Footer?: HdsSideNavBaseSignature['Blocks']['footer'];\n isMinimized?: boolean;\n },\n ];\n };\n Element: HdsSideNavBaseSignature['Element'];\n}\n\nexport default class HdsSideNav extends Component<HdsSideNavSignature> {\n @tracked isAnimating = false;\n @tracked isDesktop = true;\n @tracked isMinimized = false;\n\n desktopMQ: MediaQueryList;\n containersToHide!: NodeListOf<Element>;\n hasA11yRefocus = this.args.hasA11yRefocus ?? true;\n a11yRefocusSkipTo = '#' + (this.args.a11yRefocusSkipTo ?? 'hds-main');\n\n desktopMQVal = getComputedStyle(document.documentElement).getPropertyValue(\n '--hds-app-desktop-breakpoint'\n );\n\n constructor(owner: Owner, args: HdsSideNavSignature['Args']) {\n super(owner, args);\n // sets the default minimized state on 'desktop' viewports\n this.isMinimized = this.args.isMinimized ?? false;\n this.desktopMQ = window.matchMedia(`(min-width:${this.desktopMQVal})`);\n this.addEventListeners();\n registerDestructor(this, (): void => {\n this.removeEventListeners();\n });\n\n deprecate(\n 'The `Hds::SideNav` component is now deprecated and will be removed in the next major version of `@hashicorp/design-system-components`. Use `Hds::AppSideNav` instead.',\n false,\n {\n id: 'hds.components.sidenav',\n until: '6.0.0',\n url: 'https://helios.hashicorp.design/components/side-nav?tab=version%20history#4140',\n for: '@hashicorp/design-system-components',\n since: {\n available: '4.19.0',\n enabled: '5.0.0',\n },\n }\n );\n }\n\n addEventListeners(): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n document.addEventListener('keydown', this.escapePress, true);\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.desktopMQ.addEventListener('change', this.updateDesktopVariable, true);\n // if not instantiated as minimized via arguments\n if (!this.args.isMinimized) {\n // set initial state based on viewport using a \"synthetic\" event\n const syntheticEvent = new MediaQueryListEvent('change', {\n matches: this.desktopMQ.matches,\n media: this.desktopMQ.media,\n });\n this.updateDesktopVariable(syntheticEvent);\n }\n }\n\n removeEventListeners(): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n document.removeEventListener('keydown', this.escapePress, true);\n this.desktopMQ.removeEventListener(\n 'change',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.updateDesktopVariable,\n true\n );\n }\n\n // controls if the component reacts to viewport changes\n get isResponsive(): boolean {\n return this.args.isResponsive ?? true;\n }\n\n // controls if users can collapse the appsidenav on 'desktop' viewports\n get isCollapsible(): boolean {\n return this.args.isCollapsible ?? false;\n }\n\n get shouldTrapFocus(): boolean {\n return this.isResponsive && !this.isDesktop && !this.isMinimized;\n }\n\n get showToggleButton(): boolean {\n return (this.isResponsive && !this.isDesktop) || this.isCollapsible;\n }\n\n get classNames(): string {\n const classes = []; // `hds-side-nav` is already set by the \"Hds::SideNav::Base\" component\n\n // add specific class names for the different possible states\n if (this.isResponsive) {\n classes.push('hds-side-nav--is-responsive');\n }\n if (!this.isDesktop && this.isResponsive) {\n classes.push('hds-side-nav--is-mobile');\n } else {\n classes.push('hds-side-nav--is-desktop');\n }\n if (this.isMinimized && this.isResponsive) {\n classes.push('hds-side-nav--is-minimized');\n } else {\n classes.push('hds-side-nav--is-not-minimized');\n }\n if (this.isAnimating) {\n classes.push('hds-side-nav--is-animating');\n }\n\n return classes.join(' ');\n }\n\n synchronizeInert(): void {\n this.containersToHide?.forEach((element): void => {\n if (this.isMinimized) {\n element.setAttribute('inert', '');\n } else {\n element.removeAttribute('inert');\n }\n });\n }\n\n @action\n escapePress(event: KeyboardEvent): void {\n if (event.key === 'Escape' && !this.isMinimized && !this.isDesktop) {\n this.isMinimized = true;\n this.synchronizeInert();\n }\n }\n\n @action\n toggleMinimizedStatus(): void {\n this.isMinimized = !this.isMinimized;\n\n this.synchronizeInert();\n\n const { onToggleMinimizedStatus } = this.args;\n\n if (typeof onToggleMinimizedStatus === 'function') {\n onToggleMinimizedStatus(this.isMinimized);\n }\n }\n\n @action\n didInsert(element: HTMLElement): void {\n this.containersToHide = element.querySelectorAll(\n '.hds-side-nav-hide-when-minimized'\n );\n }\n\n @action\n setTransition(phase: string, event: TransitionEvent): void {\n // we only want to respond to `width` animation/transitions\n if (event.propertyName !== 'width') {\n return;\n }\n if (phase === 'start') {\n this.isAnimating = true;\n } else {\n this.isAnimating = false;\n }\n }\n\n @action\n updateDesktopVariable(event: MediaQueryListEvent): void {\n this.isDesktop = event.matches;\n\n // automatically minimize on narrow viewports (when not in desktop mode)\n this.isMinimized = !this.isDesktop;\n\n this.synchronizeInert();\n\n const { onDesktopViewportChange } = this.args;\n\n if (typeof onDesktopViewportChange === 'function') {\n onDesktopViewportChange(this.isDesktop);\n }\n }\n}\n"],"names":["HdsSideNav","Component","g","prototype","tracked","i","desktopMQ","containersToHide","hasA11yRefocus","args","a11yRefocusSkipTo","desktopMQVal","getComputedStyle","document","documentElement","getPropertyValue","constructor","owner","isMinimized","window","matchMedia","addEventListeners","registerDestructor","removeEventListeners","deprecate","id","until","url","for","since","available","enabled","addEventListener","escapePress","updateDesktopVariable","syntheticEvent","MediaQueryListEvent","matches","media","removeEventListener","isResponsive","isCollapsible","shouldTrapFocus","isDesktop","showToggleButton","classNames","classes","push","isAnimating","join","synchronizeInert","forEach","element","setAttribute","removeAttribute","event","key","n","action","toggleMinimizedStatus","onToggleMinimizedStatus","didInsert","querySelectorAll","setTransition","phase","propertyName","onDesktopViewportChange","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/side-nav/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { deprecate } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { registerDestructor } from '@ember/destroyable';\n\nimport type { HdsSideNavBaseSignature } from './base';\nimport type Owner from '@ember/owner';\nimport type { NavigationNarratorSignature } from 'ember-a11y-refocus/components/navigation-narrator';\n\nexport interface HdsSideNavSignature {\n Args: {\n isResponsive?: boolean;\n isCollapsible?: boolean;\n isMinimized?: boolean;\n hasA11yRefocus?: boolean;\n a11yRefocusSkipTo?: string;\n a11yRefocusSkipText?: string;\n a11yRefocusNavigationText?: string;\n a11yRefocusRouteChangeValidator?: NavigationNarratorSignature['Args']['routeChangeValidator'];\n a11yRefocusExcludeAllQueryParams?: boolean;\n\n onToggleMinimizedStatus?: (arg: boolean) => void;\n\n onDesktopViewportChange?: (arg: boolean) => void;\n };\n Blocks: {\n header?: [\n {\n Header?: HdsSideNavBaseSignature['Blocks']['header'];\n isMinimized?: boolean;\n },\n ];\n body?: [\n {\n Body?: HdsSideNavBaseSignature['Blocks']['body'];\n isMinimized?: boolean;\n },\n ];\n footer?: [\n {\n Footer?: HdsSideNavBaseSignature['Blocks']['footer'];\n isMinimized?: boolean;\n },\n ];\n };\n Element: HdsSideNavBaseSignature['Element'];\n}\n\nexport default class HdsSideNav extends Component<HdsSideNavSignature> {\n @tracked isAnimating = false;\n @tracked isDesktop = true;\n @tracked isMinimized = false;\n\n desktopMQ: MediaQueryList;\n containersToHide!: NodeListOf<Element>;\n hasA11yRefocus = this.args.hasA11yRefocus ?? true;\n a11yRefocusSkipTo = '#' + (this.args.a11yRefocusSkipTo ?? 'hds-main');\n\n desktopMQVal = getComputedStyle(document.documentElement).getPropertyValue(\n '--hds-app-desktop-breakpoint'\n );\n\n constructor(owner: Owner, args: HdsSideNavSignature['Args']) {\n super(owner, args);\n // sets the default minimized state on 'desktop' viewports\n this.isMinimized = this.args.isMinimized ?? false;\n this.desktopMQ = window.matchMedia(`(min-width:${this.desktopMQVal})`);\n this.addEventListeners();\n registerDestructor(this, (): void => {\n this.removeEventListeners();\n });\n\n deprecate(\n 'The `Hds::SideNav` component is now deprecated and will be removed in the next major version of `@hashicorp/design-system-components`. Use `Hds::AppSideNav` instead.',\n false,\n {\n id: 'hds.components.sidenav',\n until: '6.0.0',\n url: 'https://helios.hashicorp.design/components/side-nav?tab=version%20history#4140',\n for: '@hashicorp/design-system-components',\n since: {\n available: '4.19.0',\n enabled: '5.0.0',\n },\n }\n );\n }\n\n addEventListeners(): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n document.addEventListener('keydown', this.escapePress, true);\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.desktopMQ.addEventListener('change', this.updateDesktopVariable, true);\n // if not instantiated as minimized via arguments\n if (!this.args.isMinimized) {\n // set initial state based on viewport using a \"synthetic\" event\n const syntheticEvent = new MediaQueryListEvent('change', {\n matches: this.desktopMQ.matches,\n media: this.desktopMQ.media,\n });\n this.updateDesktopVariable(syntheticEvent);\n }\n }\n\n removeEventListeners(): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n document.removeEventListener('keydown', this.escapePress, true);\n this.desktopMQ.removeEventListener(\n 'change',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.updateDesktopVariable,\n true\n );\n }\n\n // controls if the component reacts to viewport changes\n get isResponsive(): boolean {\n return this.args.isResponsive ?? true;\n }\n\n // controls if users can collapse the appsidenav on 'desktop' viewports\n get isCollapsible(): boolean {\n return this.args.isCollapsible ?? false;\n }\n\n get shouldTrapFocus(): boolean {\n return this.isResponsive && !this.isDesktop && !this.isMinimized;\n }\n\n get showToggleButton(): boolean {\n return (this.isResponsive && !this.isDesktop) || this.isCollapsible;\n }\n\n get classNames(): string {\n const classes = []; // `hds-side-nav` is already set by the \"Hds::SideNav::Base\" component\n\n // add specific class names for the different possible states\n if (this.isResponsive) {\n classes.push('hds-side-nav--is-responsive');\n }\n if (!this.isDesktop && this.isResponsive) {\n classes.push('hds-side-nav--is-mobile');\n } else {\n classes.push('hds-side-nav--is-desktop');\n }\n if (this.isMinimized && this.isResponsive) {\n classes.push('hds-side-nav--is-minimized');\n } else {\n classes.push('hds-side-nav--is-not-minimized');\n }\n if (this.isAnimating) {\n classes.push('hds-side-nav--is-animating');\n }\n\n return classes.join(' ');\n }\n\n synchronizeInert(): void {\n this.containersToHide?.forEach((element): void => {\n if (this.isMinimized) {\n element.setAttribute('inert', '');\n } else {\n element.removeAttribute('inert');\n }\n });\n }\n\n @action\n escapePress(event: KeyboardEvent): void {\n if (event.key === 'Escape' && !this.isMinimized && !this.isDesktop) {\n this.isMinimized = true;\n this.synchronizeInert();\n }\n }\n\n @action\n toggleMinimizedStatus(): void {\n this.isMinimized = !this.isMinimized;\n\n this.synchronizeInert();\n\n const { onToggleMinimizedStatus } = this.args;\n\n if (typeof onToggleMinimizedStatus === 'function') {\n onToggleMinimizedStatus(this.isMinimized);\n }\n }\n\n @action\n didInsert(element: HTMLElement): void {\n this.containersToHide = element.querySelectorAll(\n '.hds-side-nav-hide-when-minimized'\n );\n }\n\n @action\n setTransition(phase: string, event: TransitionEvent): void {\n // we only want to respond to `width` animation/transitions\n if (event.propertyName !== 'width') {\n return;\n }\n if (phase === 'start') {\n this.isAnimating = true;\n } else {\n this.isAnimating = false;\n }\n }\n\n @action\n updateDesktopVariable(event: MediaQueryListEvent): void {\n this.isDesktop = event.matches;\n\n // automatically minimize on narrow viewports (when not in desktop mode)\n this.isMinimized = !this.isDesktop;\n\n this.synchronizeInert();\n\n const { onDesktopViewportChange } = this.args;\n\n if (typeof onDesktopViewportChange === 'function') {\n onDesktopViewportChange(this.isDesktop);\n }\n }\n}\n"],"names":["HdsSideNav","Component","g","prototype","tracked","i","void 0","desktopMQ","containersToHide","hasA11yRefocus","args","a11yRefocusSkipTo","desktopMQVal","getComputedStyle","document","documentElement","getPropertyValue","constructor","owner","isMinimized","window","matchMedia","addEventListeners","registerDestructor","removeEventListeners","deprecate","id","until","url","for","since","available","enabled","addEventListener","escapePress","updateDesktopVariable","syntheticEvent","MediaQueryListEvent","matches","media","removeEventListener","isResponsive","isCollapsible","shouldTrapFocus","isDesktop","showToggleButton","classNames","classes","push","isAnimating","join","synchronizeInert","forEach","element","setAttribute","removeAttribute","event","key","n","action","toggleMinimizedStatus","onToggleMinimizedStatus","didInsert","querySelectorAll","setTransition","phase","propertyName","onDesktopViewportChange","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/side-nav/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsYieldSignature } from '../../yield';\nimport type { HdsSideNavListItemSignature } from './item';\nimport type { HdsSideNavListBackLinkSignature } from './back-link';\nimport type { HdsSideNavListTitleSignature } from './title';\nimport type { HdsSideNavListLinkSignature } from './link';\n\nexport interface HdsSideNavListSignature {\n Blocks: {\n default: [\n {\n ExtraBefore?: ComponentLike<HdsYieldSignature>;\n Item?: ComponentLike<HdsSideNavListItemSignature>;\n BackLink?: ComponentLike<HdsSideNavListBackLinkSignature>;\n Title?: ComponentLike<HdsSideNavListTitleSignature>;\n Link?: ComponentLike<HdsSideNavListLinkSignature>;\n ExtraAfter?: ComponentLike<HdsYieldSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsSideNavList extends Component<HdsSideNavListSignature> {\n @tracked _titleIds: string[] = [];\n\n get titleIds(): string {\n return this._titleIds.join(' ');\n }\n\n @action\n didInsertTitle(titleId: string): void {\n this._titleIds = [...this._titleIds, titleId];\n }\n}\n"],"names":["HdsSideNavList","Component","g","prototype","tracked","i","titleIds","_titleIds","join","didInsertTitle","titleId","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;;AA4Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAuB,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;EAEjC,IAAIC,QAAQA,GAAW;AACrB,IAAA,OAAO,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,GAAG,CAAC;AACjC,EAAA;EAGAC,cAAcA,CAACC,OAAe,EAAQ;IACpC,IAAI,CAACH,SAAS,GAAG,CAAC,GAAG,IAAI,CAACA,SAAS,EAAEG,OAAO,CAAC;AAC/C,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAR,SAAA,EAAA,gBAAA,EAAA,CAHAS,MAAM,CAAA,CAAA;AAAA;AAIT;AAACC,oBAAA,CAAAC,QAAA,EAXoBd,cAAc,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/side-nav/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsYieldSignature } from '../../yield';\nimport type { HdsSideNavListItemSignature } from './item';\nimport type { HdsSideNavListBackLinkSignature } from './back-link';\nimport type { HdsSideNavListTitleSignature } from './title';\nimport type { HdsSideNavListLinkSignature } from './link';\n\nexport interface HdsSideNavListSignature {\n Blocks: {\n default: [\n {\n ExtraBefore?: ComponentLike<HdsYieldSignature>;\n Item?: ComponentLike<HdsSideNavListItemSignature>;\n BackLink?: ComponentLike<HdsSideNavListBackLinkSignature>;\n Title?: ComponentLike<HdsSideNavListTitleSignature>;\n Link?: ComponentLike<HdsSideNavListLinkSignature>;\n ExtraAfter?: ComponentLike<HdsYieldSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsSideNavList extends Component<HdsSideNavListSignature> {\n @tracked _titleIds: string[] = [];\n\n get titleIds(): string {\n return this._titleIds.join(' ');\n }\n\n @action\n didInsertTitle(titleId: string): void {\n this._titleIds = [...this._titleIds, titleId];\n }\n}\n"],"names":["HdsSideNavList","Component","g","prototype","tracked","i","void 0","titleIds","_titleIds","join","didInsertTitle","titleId","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;;AA4Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAuB,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAAC,MAAA;EAEjC,IAAIC,QAAQA,GAAW;AACrB,IAAA,OAAO,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,GAAG,CAAC;AACjC,EAAA;EAGAC,cAAcA,CAACC,OAAe,EAAQ;IACpC,IAAI,CAACH,SAAS,GAAG,CAAC,GAAG,IAAI,CAACA,SAAS,EAAEG,OAAO,CAAC;AAC/C,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAT,SAAA,EAAA,gBAAA,EAAA,CAHAU,MAAM,CAAA,CAAA;AAAA;AAIT;AAACC,oBAAA,CAAAC,QAAA,EAXoBf,cAAc,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"target.js","sources":["../../../../../src/components/hds/side-nav/portal/target.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\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 { action } from '@ember/object';\nimport { macroCondition, isTesting } from '@embroider/macros';\n\nimport type { HdsSideNavPortalSignature } from './index';\n\nimport type { Registry as Services } from '@ember/service';\n\nexport interface HdsSideNavPortalTargetSignature {\n Args: {\n targetName?: HdsSideNavPortalSignature['Args']['targetName'];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsSideNavPortalTarget extends Component<HdsSideNavPortalTargetSignature> {\n @service router!: Services['router'];\n\n @tracked numSubnavs = 0;\n @tracked lastPanelEl: Element | undefined;\n\n static get prefersReducedMotionOverride(): boolean {\n return macroCondition(isTesting()) ? true : false;\n }\n\n prefersReducedMotionMQ = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n );\n\n get prefersReducedMotion(): boolean {\n return (\n HdsSideNavPortalTarget.prefersReducedMotionOverride ||\n (this.prefersReducedMotionMQ && this.prefersReducedMotionMQ.matches)\n );\n }\n\n @action\n panelsChanged(portalCount: number): void {\n this.numSubnavs = portalCount;\n }\n\n @action\n didUpdateSubnav(element: HTMLElement, [count]: [number]): void {\n this.animateSubnav(element, [count]);\n }\n\n @action\n animateSubnav(element: HTMLElement, [count]: [number]): void {\n /*\n * Here is what the layout looks like for this setup\n *\n\n SideNav\n +----------------------+\n | +------------------+ |\n | | (\"header\") | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"body\") | |\n (PortalTarget) | | | |\n +----------------------------------------------+ | |\n | +----------+ +----------+ | +----------+ | | |\n | | (Portal) | | (Portal) | | (Portal) | | | |\n | | | | | | | | | | |\n | | hidden | | hidden | | *active* | | | |\n | | panel | | panel | | | panel | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | +----------+ +----------+ | +----------+ | | |\n +----------------------------------------------+ | |\n | | | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"footer\") | |\n | +------------------+ |\n +----------------------+\n\n *\n * every time `HcAppFrame::SideNav::Portal` renders, it contains a portaled \"panel\"\n * that is rendered into the `hds-side-nav__content-panels` (inside the PortalTarget).\n *\n * Rendering or unrendering other `HcAppFrame::SideNav::Portal`s triggers the number of\n * subnavs to change (via `numSubnavs`), so this function runs and slides\n * `hds-side-nav__content-panels` left or right using the `element.animate` api.\n *\n * */\n\n const activeIndex = count - 1;\n const targetElement = element;\n const { prefersReducedMotion } = this;\n\n const styles = getComputedStyle(targetElement);\n const columnWidth = styles.getPropertyValue(\n '--hds-app-sidenav-width-expanded'\n );\n const slideDuration = prefersReducedMotion ? 0 : 150;\n let fadeDuration = prefersReducedMotion ? 0 : 175;\n let fadeDelay = prefersReducedMotion ? 0 : 50;\n\n // slide entire parent panel\n const start = styles.transform;\n const end = `translateX(-${activeIndex * parseInt(columnWidth, 10)}px)`;\n const anim = targetElement.animate(\n [{ transform: start }, { transform: end }],\n {\n duration: slideDuration,\n easing: 'cubic-bezier(0.65, 0, 0.35, 1)',\n fill: 'forwards',\n }\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n anim.finished.then((): void => {\n // uncomment this if we need/want to scroll the element to the top\n // targetElement.scrollIntoView(true);\n if (activeIndex > 0) {\n const allPrev = Array.from(targetElement.children).slice(\n 0,\n activeIndex\n ) as HTMLElement[];\n for (const ele of allPrev) {\n ele.ariaHidden = 'true';\n ele.style.setProperty('visibility', 'hidden');\n ele.style.setProperty('opacity', '0');\n }\n }\n // Notice: we don't add the styles by default because it writes a `style` attribute to the element and it causes an additional re-render\n if (macroCondition(isTesting())) {\n // Check the visibility of the element before attempting to commitStyles.\n if (targetElement.offsetParent !== null) {\n anim.commitStyles();\n }\n }\n });\n\n // fade in next panel\n const nextPanelEl = targetElement.children[activeIndex] as HTMLElement;\n\n // get reference to last child panel\n const lastPanelEl = targetElement.children[\n targetElement.children.length - 1\n ] as HTMLElement;\n\n if (nextPanelEl) {\n nextPanelEl.ariaHidden = 'false';\n nextPanelEl.style.setProperty('visibility', 'visible');\n // this eliminates a flicker if there's only one subnav rendering or if we\n // already just rendered this panel.\n if (this.lastPanelEl) {\n if (activeIndex === 0 || nextPanelEl.isSameNode(this.lastPanelEl)) {\n fadeDelay = 0;\n fadeDuration = 0;\n }\n }\n\n // remember the last panel\n this.lastPanelEl = lastPanelEl;\n\n nextPanelEl.animate([{ opacity: '0' }, { opacity: '1' }], {\n delay: fadeDelay,\n duration: fadeDuration,\n fill: 'forwards',\n });\n }\n }\n}\n"],"names":["HdsSideNavPortalTarget","Component","g","prototype","service","i","tracked","prefersReducedMotionOverride","macroCondition","isTesting","prefersReducedMotionMQ","window","matchMedia","prefersReducedMotion","matches","panelsChanged","portalCount","numSubnavs","n","action","didUpdateSubnav","element","count","animateSubnav","activeIndex","targetElement","styles","getComputedStyle","columnWidth","getPropertyValue","slideDuration","fadeDuration","fadeDelay","start","transform","end","parseInt","anim","animate","duration","easing","fill","finished","then","allPrev","Array","from","children","slice","ele","ariaHidden","style","setProperty","offsetParent","commitStyles","nextPanelEl","lastPanelEl","length","isSameNode","opacity","delay","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"target.js","sources":["../../../../../src/components/hds/side-nav/portal/target.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\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 { action } from '@ember/object';\nimport { macroCondition, isTesting } from '@embroider/macros';\n\nimport type { HdsSideNavPortalSignature } from './index';\n\nimport type { Registry as Services } from '@ember/service';\n\nexport interface HdsSideNavPortalTargetSignature {\n Args: {\n targetName?: HdsSideNavPortalSignature['Args']['targetName'];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsSideNavPortalTarget extends Component<HdsSideNavPortalTargetSignature> {\n @service router!: Services['router'];\n\n @tracked numSubnavs = 0;\n @tracked lastPanelEl: Element | undefined;\n\n static get prefersReducedMotionOverride(): boolean {\n return macroCondition(isTesting()) ? true : false;\n }\n\n prefersReducedMotionMQ = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n );\n\n get prefersReducedMotion(): boolean {\n return (\n HdsSideNavPortalTarget.prefersReducedMotionOverride ||\n (this.prefersReducedMotionMQ && this.prefersReducedMotionMQ.matches)\n );\n }\n\n @action\n panelsChanged(portalCount: number): void {\n this.numSubnavs = portalCount;\n }\n\n @action\n didUpdateSubnav(element: HTMLElement, [count]: [number]): void {\n this.animateSubnav(element, [count]);\n }\n\n @action\n animateSubnav(element: HTMLElement, [count]: [number]): void {\n /*\n * Here is what the layout looks like for this setup\n *\n\n SideNav\n +----------------------+\n | +------------------+ |\n | | (\"header\") | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"body\") | |\n (PortalTarget) | | | |\n +----------------------------------------------+ | |\n | +----------+ +----------+ | +----------+ | | |\n | | (Portal) | | (Portal) | | (Portal) | | | |\n | | | | | | | | | | |\n | | hidden | | hidden | | *active* | | | |\n | | panel | | panel | | | panel | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | +----------+ +----------+ | +----------+ | | |\n +----------------------------------------------+ | |\n | | | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"footer\") | |\n | +------------------+ |\n +----------------------+\n\n *\n * every time `HcAppFrame::SideNav::Portal` renders, it contains a portaled \"panel\"\n * that is rendered into the `hds-side-nav__content-panels` (inside the PortalTarget).\n *\n * Rendering or unrendering other `HcAppFrame::SideNav::Portal`s triggers the number of\n * subnavs to change (via `numSubnavs`), so this function runs and slides\n * `hds-side-nav__content-panels` left or right using the `element.animate` api.\n *\n * */\n\n const activeIndex = count - 1;\n const targetElement = element;\n const { prefersReducedMotion } = this;\n\n const styles = getComputedStyle(targetElement);\n const columnWidth = styles.getPropertyValue(\n '--hds-app-sidenav-width-expanded'\n );\n const slideDuration = prefersReducedMotion ? 0 : 150;\n let fadeDuration = prefersReducedMotion ? 0 : 175;\n let fadeDelay = prefersReducedMotion ? 0 : 50;\n\n // slide entire parent panel\n const start = styles.transform;\n const end = `translateX(-${activeIndex * parseInt(columnWidth, 10)}px)`;\n const anim = targetElement.animate(\n [{ transform: start }, { transform: end }],\n {\n duration: slideDuration,\n easing: 'cubic-bezier(0.65, 0, 0.35, 1)',\n fill: 'forwards',\n }\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n anim.finished.then((): void => {\n // uncomment this if we need/want to scroll the element to the top\n // targetElement.scrollIntoView(true);\n if (activeIndex > 0) {\n const allPrev = Array.from(targetElement.children).slice(\n 0,\n activeIndex\n ) as HTMLElement[];\n for (const ele of allPrev) {\n ele.ariaHidden = 'true';\n ele.style.setProperty('visibility', 'hidden');\n ele.style.setProperty('opacity', '0');\n }\n }\n // Notice: we don't add the styles by default because it writes a `style` attribute to the element and it causes an additional re-render\n if (macroCondition(isTesting())) {\n // Check the visibility of the element before attempting to commitStyles.\n if (targetElement.offsetParent !== null) {\n anim.commitStyles();\n }\n }\n });\n\n // fade in next panel\n const nextPanelEl = targetElement.children[activeIndex] as HTMLElement;\n\n // get reference to last child panel\n const lastPanelEl = targetElement.children[\n targetElement.children.length - 1\n ] as HTMLElement;\n\n if (nextPanelEl) {\n nextPanelEl.ariaHidden = 'false';\n nextPanelEl.style.setProperty('visibility', 'visible');\n // this eliminates a flicker if there's only one subnav rendering or if we\n // already just rendered this panel.\n if (this.lastPanelEl) {\n if (activeIndex === 0 || nextPanelEl.isSameNode(this.lastPanelEl)) {\n fadeDelay = 0;\n fadeDuration = 0;\n }\n }\n\n // remember the last panel\n this.lastPanelEl = lastPanelEl;\n\n nextPanelEl.animate([{ opacity: '0' }, { opacity: '1' }], {\n delay: fadeDelay,\n duration: fadeDuration,\n fill: 'forwards',\n });\n }\n }\n}\n"],"names":["HdsSideNavPortalTarget","Component","g","prototype","service","i","void 0","tracked","prefersReducedMotionOverride","macroCondition","isTesting","prefersReducedMotionMQ","window","matchMedia","prefersReducedMotion","matches","panelsChanged","portalCount","numSubnavs","n","action","didUpdateSubnav","element","count","animateSubnav","activeIndex","targetElement","styles","getComputedStyle","columnWidth","getPropertyValue","slideDuration","fadeDuration","fadeDelay","start","transform","end","parseInt","anim","animate","duration","easing","fill","finished","then","allPrev","Array","from","children","slice","ele","ariaHidden","style","setProperty","offsetParent","commitStyles","nextPanelEl","lastPanelEl","length","isSameNode","opacity","delay","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsStepperListStepSignature } from './step';\n\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport type { HdsStepperTitleTags, HdsStepperListStepIds } from '../types.ts';\n\nexport interface HdsStepperListSignature {\n Args: {\n titleTag?: HdsStepperTitleTags;\n ariaLabel: string;\n };\n Blocks: {\n default: [\n {\n Step?: ComponentLike<HdsStepperListStepSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsStepperList extends Component<HdsStepperListSignature> {\n @tracked private _stepIds: HdsStepperListStepIds = [];\n\n get titleTag(): HdsStepperTitleTags {\n return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n }\n\n @action\n didInsertStep(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._stepIds = [...this._stepIds, element.id];\n });\n }\n\n @action\n willDestroyStep(element: HTMLElement): void {\n this._stepIds = this._stepIds.filter(\n (stepId): boolean => stepId !== element.id\n );\n }\n}\n"],"names":["HdsStepperList","Component","g","prototype","tracked","i","titleTag","args","HdsStepperTitleTagValues","Div","didInsertStep","element","schedule","_stepIds","id","n","action","willDestroyStep","filter","stepId","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AA2Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA2C,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;EAErD,IAAIC,QAAQA,GAAwB;IAClC,OAAO,IAAI,CAACC,IAAI,CAACD,QAAQ,IAAIE,wBAAwB,CAACC,GAAG;AAC3D,EAAA;EAGAC,aAAaA,CAACC,OAAoB,EAAQ;AACxC;IACAC,QAAQ,CAAC,aAAa,EAAE,MAAY;AAClC,MAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAACA,QAAQ,EAAEF,OAAO,CAACG,EAAE,CAAC;AAChD,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAZ,SAAA,EAAA,eAAA,EAAA,CANAa,MAAM,CAAA,CAAA;AAAA;EASPC,eAAeA,CAACN,OAAoB,EAAQ;AAC1C,IAAA,IAAI,CAACE,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAACK,MAAM,CACjCC,MAAM,IAAcA,MAAM,KAAKR,OAAO,CAACG,EAC1C,CAAC;AACH,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAZ,SAAA,EAAA,iBAAA,EAAA,CALAa,MAAM,CAAA,CAAA;AAAA;AAMT;AAACI,oBAAA,CAAAC,QAAA,EArBoBrB,cAAc,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsStepperListStepSignature } from './step';\n\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport type { HdsStepperTitleTags, HdsStepperListStepIds } from '../types.ts';\n\nexport interface HdsStepperListSignature {\n Args: {\n titleTag?: HdsStepperTitleTags;\n ariaLabel: string;\n };\n Blocks: {\n default: [\n {\n Step?: ComponentLike<HdsStepperListStepSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsStepperList extends Component<HdsStepperListSignature> {\n @tracked private _stepIds: HdsStepperListStepIds = [];\n\n get titleTag(): HdsStepperTitleTags {\n return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n }\n\n @action\n didInsertStep(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._stepIds = [...this._stepIds, element.id];\n });\n }\n\n @action\n willDestroyStep(element: HTMLElement): void {\n this._stepIds = this._stepIds.filter(\n (stepId): boolean => stepId !== element.id\n );\n }\n}\n"],"names":["HdsStepperList","Component","g","prototype","tracked","i","void 0","titleTag","args","HdsStepperTitleTagValues","Div","didInsertStep","element","schedule","_stepIds","id","n","action","willDestroyStep","filter","stepId","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AA2Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA2C,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;EAErD,IAAIC,QAAQA,GAAwB;IAClC,OAAO,IAAI,CAACC,IAAI,CAACD,QAAQ,IAAIE,wBAAwB,CAACC,GAAG;AAC3D,EAAA;EAGAC,aAAaA,CAACC,OAAoB,EAAQ;AACxC;IACAC,QAAQ,CAAC,aAAa,EAAE,MAAY;AAClC,MAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAACA,QAAQ,EAAEF,OAAO,CAACG,EAAE,CAAC;AAChD,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,eAAA,EAAA,CANAc,MAAM,CAAA,CAAA;AAAA;EASPC,eAAeA,CAACN,OAAoB,EAAQ;AAC1C,IAAA,IAAI,CAACE,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAACK,MAAM,CACjCC,MAAM,IAAcA,MAAM,KAAKR,OAAO,CAACG,EAC1C,CAAC;AACH,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,iBAAA,EAAA,CALAc,MAAM,CAAA,CAAA;AAAA;AAMT;AAACI,oBAAA,CAAAC,QAAA,EArBoBtB,cAAc,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/nav/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\nimport type { WithBoundArgs } from '@glint/template';\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport type {\n HdsStepperTitleTags,\n HdsStepperNavStepIds,\n HdsStepperNavStep,\n HdsStepperNavPanelIds,\n} from '../types.ts';\nimport HdsStepperNavStepComponent from './step.ts';\nimport HdsStepperNavPanelComponent from './panel.ts';\n\nconst STEP_ELEMENT_SELECTOR = '.hds-stepper-nav__step-content';\nconst PANEL_ELEMENT_SELECTOR = '.hds-stepper-nav__panel';\n\nexport interface HdsStepperNavSignature {\n Args: {\n steps?: HdsStepperNavStep[];\n currentStep?: number;\n isInteractive?: boolean;\n titleTag?: HdsStepperTitleTags;\n ariaLabel: string;\n onStepChange?: (event: MouseEvent, stepNumber: number) => void;\n };\n Blocks: {\n body?: [];\n default: [\n {\n Step?: WithBoundArgs<\n typeof HdsStepperNavStepComponent,\n | 'currentStep'\n | 'isNavInteractive'\n | 'titleTag'\n | 'stepIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n | 'onStepChange'\n | 'onKeyUp'\n >;\n Panel?: WithBoundArgs<\n typeof HdsStepperNavPanelComponent,\n | 'currentStep'\n | 'isNavInteractive'\n | 'stepIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsStepperNav extends Component<HdsStepperNavSignature> {\n @tracked private _stepIds: HdsStepperNavStepIds = [];\n @tracked private _stepNodes: HTMLElement[] = [];\n @tracked private _panelNodes: HTMLElement[] = [];\n @tracked private _panelIds: HdsStepperNavPanelIds = [];\n\n private _element!: HTMLDivElement;\n\n private _setUpStepperNav = modifier((element: HTMLDivElement) => {\n if (this.isInteractive) {\n assert(\n 'If @isInteractive is true, the number of Steps must be equal to the number of Panels',\n this._stepNodes.length === this._panelNodes.length\n );\n }\n\n this._element = element;\n\n return () => {};\n });\n\n get currentStep(): number {\n const { currentStep } = this.args;\n\n if (currentStep) {\n if (currentStep < 0) {\n return 0;\n } else {\n return currentStep;\n }\n } else {\n return 0;\n }\n }\n\n get isInteractive(): boolean {\n return this.args.isInteractive != undefined\n ? this.args.isInteractive\n : true;\n }\n\n get titleTag(): HdsStepperTitleTags {\n return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n }\n\n get inlineStyles(): Record<string, unknown> {\n const inlineStyles: {\n '--hds-stepper-nav-progress-bar-width'?: string;\n } = {};\n\n inlineStyles['--hds-stepper-nav-progress-bar-width'] =\n this.progressBarWidthStyle;\n\n return inlineStyles;\n }\n\n get progressBarWidthStyle(): string {\n let progressBarWidth = 0;\n let progressBarOffset = 0;\n if (this._stepIds.length != 0) {\n if (this.currentStep >= this._stepIds.length) {\n progressBarWidth = 100;\n progressBarOffset = 0;\n } else {\n const activeStepWidth = 1 / this._stepIds.length / 2;\n const width = this.currentStep / this._stepIds.length;\n progressBarWidth = (width + activeStepWidth) * 100;\n progressBarOffset = 16;\n }\n }\n return `calc(${progressBarWidth}% - ${progressBarOffset}px)`;\n }\n\n @action\n didInsertStep(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.updateSteps();\n });\n }\n\n @action\n willDestroyStep(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._stepNodes = this._stepNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._stepIds = this._stepIds.filter(\n (stepId): boolean => stepId !== element.id\n );\n });\n }\n\n @action\n didInsertPanel(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.updatePanels();\n });\n }\n\n @action\n willDestroyPanel(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._panelNodes = this._panelNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._panelIds = this._panelIds.filter(\n (panelId): boolean => panelId !== element.id\n );\n });\n }\n\n @action\n onKeyUp(currentStepIndex: number, event: KeyboardEvent): void {\n const leftArrow = 'ArrowLeft';\n const rightArrow = 'ArrowRight';\n\n if (event.key === rightArrow) {\n const nextStepIndex = this.findNextInteractiveStepIndex(\n currentStepIndex,\n 1\n );\n this.focusStep(nextStepIndex, event);\n } else if (event.key === leftArrow) {\n const prevStepIndex = this.findNextInteractiveStepIndex(\n currentStepIndex,\n this._stepIds.length - 1\n );\n this.focusStep(prevStepIndex, event);\n }\n }\n\n // Update the step arrays based on how they are ordered in the DOM\n private updateSteps(): void {\n const steps = this._element.querySelectorAll(STEP_ELEMENT_SELECTOR);\n let newStepIds: HdsStepperNavStepIds = [];\n let newStepNodes: HTMLElement[] = [];\n steps.forEach((step) => {\n newStepIds = [...newStepIds, step.id];\n newStepNodes = [...newStepNodes, step as HTMLElement];\n });\n this._stepIds = newStepIds;\n this._stepNodes = newStepNodes;\n }\n\n // Update the panel arrays based on how they are ordered in the DOM\n private updatePanels(): void {\n const panels = this._element.querySelectorAll(PANEL_ELEMENT_SELECTOR);\n let newPanelIds: HdsStepperNavPanelIds = [];\n let newPanelNodes: HTMLElement[] = [];\n panels.forEach((panel) => {\n newPanelIds = [...newPanelIds, panel.id];\n newPanelNodes = [...newPanelNodes, panel as HTMLElement];\n });\n this._panelIds = newPanelIds;\n this._panelNodes = newPanelNodes;\n }\n\n // Find the next interactive step to focus based on keyboard input\n private findNextInteractiveStepIndex(\n currentStepIndex: number,\n increment: number\n ): number {\n let newStepIndex = (currentStepIndex + increment) % this._stepIds.length;\n while (newStepIndex > this.currentStep) {\n newStepIndex = (newStepIndex + increment) % this._stepIds.length;\n }\n return newStepIndex;\n }\n\n // Focus step for keyboard & mouse nav\n private focusStep(stepIndex: number, event: KeyboardEvent): void {\n event.preventDefault();\n const step = this._stepNodes[stepIndex];\n step?.focus();\n }\n\n get classNames() {\n const classes = ['hds-stepper-nav'];\n\n if (this.isInteractive) {\n classes.push('hds-stepper-nav--interactive');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["STEP_ELEMENT_SELECTOR","PANEL_ELEMENT_SELECTOR","HdsStepperNav","Component","g","prototype","tracked","i","_element","_setUpStepperNav","modifier","element","isInteractive","assert","_stepNodes","length","_panelNodes","currentStep","args","undefined","titleTag","HdsStepperTitleTagValues","Div","inlineStyles","progressBarWidthStyle","progressBarWidth","progressBarOffset","_stepIds","activeStepWidth","width","didInsertStep","schedule","updateSteps","n","action","willDestroyStep","filter","node","id","stepId","didInsertPanel","updatePanels","willDestroyPanel","_panelIds","panelId","onKeyUp","currentStepIndex","event","leftArrow","rightArrow","key","nextStepIndex","findNextInteractiveStepIndex","focusStep","prevStepIndex","steps","querySelectorAll","newStepIds","newStepNodes","forEach","step","panels","newPanelIds","newPanelNodes","panel","increment","newStepIndex","stepIndex","preventDefault","focus","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/nav/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\nimport type { WithBoundArgs } from '@glint/template';\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport type {\n HdsStepperTitleTags,\n HdsStepperNavStepIds,\n HdsStepperNavStep,\n HdsStepperNavPanelIds,\n} from '../types.ts';\nimport HdsStepperNavStepComponent from './step.ts';\nimport HdsStepperNavPanelComponent from './panel.ts';\n\nconst STEP_ELEMENT_SELECTOR = '.hds-stepper-nav__step-content';\nconst PANEL_ELEMENT_SELECTOR = '.hds-stepper-nav__panel';\n\nexport interface HdsStepperNavSignature {\n Args: {\n steps?: HdsStepperNavStep[];\n currentStep?: number;\n isInteractive?: boolean;\n titleTag?: HdsStepperTitleTags;\n ariaLabel: string;\n onStepChange?: (event: MouseEvent, stepNumber: number) => void;\n };\n Blocks: {\n body?: [];\n default: [\n {\n Step?: WithBoundArgs<\n typeof HdsStepperNavStepComponent,\n | 'currentStep'\n | 'isNavInteractive'\n | 'titleTag'\n | 'stepIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n | 'onStepChange'\n | 'onKeyUp'\n >;\n Panel?: WithBoundArgs<\n typeof HdsStepperNavPanelComponent,\n | 'currentStep'\n | 'isNavInteractive'\n | 'stepIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsStepperNav extends Component<HdsStepperNavSignature> {\n @tracked private _stepIds: HdsStepperNavStepIds = [];\n @tracked private _stepNodes: HTMLElement[] = [];\n @tracked private _panelNodes: HTMLElement[] = [];\n @tracked private _panelIds: HdsStepperNavPanelIds = [];\n\n private _element!: HTMLDivElement;\n\n private _setUpStepperNav = modifier((element: HTMLDivElement) => {\n if (this.isInteractive) {\n assert(\n 'If @isInteractive is true, the number of Steps must be equal to the number of Panels',\n this._stepNodes.length === this._panelNodes.length\n );\n }\n\n this._element = element;\n\n return () => {};\n });\n\n get currentStep(): number {\n const { currentStep } = this.args;\n\n if (currentStep) {\n if (currentStep < 0) {\n return 0;\n } else {\n return currentStep;\n }\n } else {\n return 0;\n }\n }\n\n get isInteractive(): boolean {\n return this.args.isInteractive != undefined\n ? this.args.isInteractive\n : true;\n }\n\n get titleTag(): HdsStepperTitleTags {\n return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n }\n\n get inlineStyles(): Record<string, unknown> {\n const inlineStyles: {\n '--hds-stepper-nav-progress-bar-width'?: string;\n } = {};\n\n inlineStyles['--hds-stepper-nav-progress-bar-width'] =\n this.progressBarWidthStyle;\n\n return inlineStyles;\n }\n\n get progressBarWidthStyle(): string {\n let progressBarWidth = 0;\n let progressBarOffset = 0;\n if (this._stepIds.length != 0) {\n if (this.currentStep >= this._stepIds.length) {\n progressBarWidth = 100;\n progressBarOffset = 0;\n } else {\n const activeStepWidth = 1 / this._stepIds.length / 2;\n const width = this.currentStep / this._stepIds.length;\n progressBarWidth = (width + activeStepWidth) * 100;\n progressBarOffset = 16;\n }\n }\n return `calc(${progressBarWidth}% - ${progressBarOffset}px)`;\n }\n\n @action\n didInsertStep(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.updateSteps();\n });\n }\n\n @action\n willDestroyStep(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._stepNodes = this._stepNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._stepIds = this._stepIds.filter(\n (stepId): boolean => stepId !== element.id\n );\n });\n }\n\n @action\n didInsertPanel(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.updatePanels();\n });\n }\n\n @action\n willDestroyPanel(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._panelNodes = this._panelNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._panelIds = this._panelIds.filter(\n (panelId): boolean => panelId !== element.id\n );\n });\n }\n\n @action\n onKeyUp(currentStepIndex: number, event: KeyboardEvent): void {\n const leftArrow = 'ArrowLeft';\n const rightArrow = 'ArrowRight';\n\n if (event.key === rightArrow) {\n const nextStepIndex = this.findNextInteractiveStepIndex(\n currentStepIndex,\n 1\n );\n this.focusStep(nextStepIndex, event);\n } else if (event.key === leftArrow) {\n const prevStepIndex = this.findNextInteractiveStepIndex(\n currentStepIndex,\n this._stepIds.length - 1\n );\n this.focusStep(prevStepIndex, event);\n }\n }\n\n // Update the step arrays based on how they are ordered in the DOM\n private updateSteps(): void {\n const steps = this._element.querySelectorAll(STEP_ELEMENT_SELECTOR);\n let newStepIds: HdsStepperNavStepIds = [];\n let newStepNodes: HTMLElement[] = [];\n steps.forEach((step) => {\n newStepIds = [...newStepIds, step.id];\n newStepNodes = [...newStepNodes, step as HTMLElement];\n });\n this._stepIds = newStepIds;\n this._stepNodes = newStepNodes;\n }\n\n // Update the panel arrays based on how they are ordered in the DOM\n private updatePanels(): void {\n const panels = this._element.querySelectorAll(PANEL_ELEMENT_SELECTOR);\n let newPanelIds: HdsStepperNavPanelIds = [];\n let newPanelNodes: HTMLElement[] = [];\n panels.forEach((panel) => {\n newPanelIds = [...newPanelIds, panel.id];\n newPanelNodes = [...newPanelNodes, panel as HTMLElement];\n });\n this._panelIds = newPanelIds;\n this._panelNodes = newPanelNodes;\n }\n\n // Find the next interactive step to focus based on keyboard input\n private findNextInteractiveStepIndex(\n currentStepIndex: number,\n increment: number\n ): number {\n let newStepIndex = (currentStepIndex + increment) % this._stepIds.length;\n while (newStepIndex > this.currentStep) {\n newStepIndex = (newStepIndex + increment) % this._stepIds.length;\n }\n return newStepIndex;\n }\n\n // Focus step for keyboard & mouse nav\n private focusStep(stepIndex: number, event: KeyboardEvent): void {\n event.preventDefault();\n const step = this._stepNodes[stepIndex];\n step?.focus();\n }\n\n get classNames() {\n const classes = ['hds-stepper-nav'];\n\n if (this.isInteractive) {\n classes.push('hds-stepper-nav--interactive');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["STEP_ELEMENT_SELECTOR","PANEL_ELEMENT_SELECTOR","HdsStepperNav","Component","g","prototype","tracked","i","void 0","_element","_setUpStepperNav","modifier","element","isInteractive","assert","_stepNodes","length","_panelNodes","currentStep","args","undefined","titleTag","HdsStepperTitleTagValues","Div","inlineStyles","progressBarWidthStyle","progressBarWidth","progressBarOffset","_stepIds","activeStepWidth","width","didInsertStep","schedule","updateSteps","n","action","willDestroyStep","filter","node","id","stepId","didInsertPanel","updatePanels","willDestroyPanel","_panelIds","panelId","onKeyUp","currentStepIndex","event","leftArrow","rightArrow","key","nextStepIndex","findNextInteractiveStepIndex","focusStep","prevStepIndex","steps","querySelectorAll","newStepIds","newStepNodes","forEach","step","panels","newPanelIds","newPanelNodes","panel","increment","newStepIndex","stepIndex","preventDefault","focus","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/table/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport {\n HdsTableDensityValues,\n HdsTableThSortOrderValues,\n HdsTableVerticalAlignmentValues,\n} from './types.ts';\nimport type {\n HdsTableColumn,\n HdsTableDensities,\n HdsTableHorizontalAlignment,\n HdsTableOnSelectionChangeSignature,\n HdsTableSelectableRow,\n HdsTableSortingFunction,\n HdsTableThSortOrder,\n HdsTableVerticalAlignment,\n HdsTableModel,\n} from './types';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';\nimport type { HdsTableTdSignature } from './td.ts';\nimport type { HdsTableThSignature } from './th.ts';\nimport type { HdsTableThSortSignature } from './th-sort.ts';\nimport type { HdsTableTrSignature } from './tr.ts';\nimport type Owner from '@ember/owner';\n\nexport const DENSITIES: HdsTableDensities[] = Object.values(\n HdsTableDensityValues\n);\nexport const DEFAULT_DENSITY = HdsTableDensityValues.Medium;\n\nexport const VALIGNMENTS: HdsTableVerticalAlignment[] = Object.values(\n HdsTableVerticalAlignmentValues\n);\nexport const DEFAULT_VALIGN = HdsTableVerticalAlignmentValues.Top;\n\nexport interface HdsTableSignature<T = HdsTableModel> {\n Args: {\n align?: HdsTableHorizontalAlignment;\n caption?: string;\n columns?: HdsTableColumn[];\n density?: HdsTableDensities;\n identityKey?: string;\n isFixedLayout?: boolean;\n isSelectable?: boolean;\n isStriped?: boolean;\n model?: T[];\n onSelectionChange?: (selection: HdsTableOnSelectionChangeSignature) => void;\n onSort?: (sortBy: string, sortOrder: HdsTableThSortOrder) => void;\n selectionAriaLabelSuffix?: string;\n sortBy?: string;\n selectableColumnKey?: string;\n sortedMessageText?: string;\n sortOrder?: HdsTableThSortOrder;\n valign?: HdsTableVerticalAlignment;\n };\n Blocks: {\n head?: [\n {\n Tr?: ComponentLike<HdsTableTrSignature>;\n Th?: ComponentLike<HdsTableThSignature>;\n ThSort?: ComponentLike<HdsTableThSortSignature>;\n sortBy?: string;\n sortOrder?: HdsTableThSortOrder;\n setSortBy?: (column: string) => void;\n },\n ];\n body?: [\n {\n Td?: ComponentLike<HdsTableTdSignature>;\n Tr?: ComponentLike<HdsTableTrSignature>;\n Th?: ComponentLike<HdsTableThSignature>;\n data?: T;\n rowIndex?: number;\n sortBy?: string;\n sortOrder?: HdsTableThSortOrder;\n },\n ];\n };\n Element: HTMLTableElement;\n}\n\nexport default class HdsTable<T = HdsTableModel> extends Component<\n HdsTableSignature<T>\n> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked sortBy;\n @tracked sortOrder;\n @tracked\n private _selectAllCheckbox?: HdsFormCheckboxBaseSignature['Element'] =\n undefined;\n private _selectableRows: HdsTableSelectableRow[] = [];\n @tracked private _isSelectAllCheckboxSelected?: boolean = undefined;\n\n constructor(owner: Owner, args: HdsTableSignature<T>['Args']) {\n super(owner, args);\n this.sortBy = this.args.sortBy ?? undefined;\n this.sortOrder = this.args.sortOrder ?? HdsTableThSortOrderValues.Asc;\n }\n\n get getSortCriteria(): string | HdsTableSortingFunction<unknown> {\n // get the current column\n const currentColumn = this.args?.columns?.find(\n (column) => column.key === this.sortBy\n );\n if (\n // check if there is a custom sorting function associated with the current `sortBy` column (we assume the column has `isSortable`)\n currentColumn?.sortingFunction &&\n typeof currentColumn.sortingFunction === 'function'\n ) {\n return currentColumn.sortingFunction;\n } else {\n // otherwise fallback to the default format \"sortBy:sortOrder\"\n return `${this.sortBy}:${this.sortOrder}`;\n }\n }\n\n get identityKey(): string | undefined {\n // we have to provide a way for the consumer to pass undefined because Ember tries to interpret undefined as missing an arg and therefore falls back to the default\n if (this.args.identityKey === 'none') {\n return undefined;\n } else {\n return this.args.identityKey ?? '@identity';\n }\n }\n\n get sortedMessageText(): string {\n if (this.args.sortedMessageText) {\n return this.args.sortedMessageText;\n } else if (this.sortBy && this.sortOrder) {\n // we should allow the user to define a custom value here (e.g., for i18n) - tracked with HDS-965\n const translatedSortOrder = {\n [HdsTableThSortOrderValues.Asc]: this.hdsIntl.t(\n 'hds.components.common.ascending',\n { default: 'ascending' }\n ),\n [HdsTableThSortOrderValues.Desc]: this.hdsIntl.t(\n 'hds.components.common.descending',\n { default: 'descending' }\n ),\n }[this.sortOrder];\n const lowerCaseTranslatedSortOrder = translatedSortOrder.toLowerCase();\n\n return this.hdsIntl.t('hds.components.table.sorted-message-text', {\n sortBy: this.sortBy,\n sortOrder: lowerCaseTranslatedSortOrder,\n default: `Sorted by ${this.sortBy} ${lowerCaseTranslatedSortOrder}`,\n });\n } else {\n return '';\n }\n }\n\n get isStriped(): boolean {\n return this.args.isStriped ?? false;\n }\n\n get isFixedLayout(): boolean {\n return this.args.isFixedLayout ?? false;\n }\n\n get density(): HdsTableDensities {\n const { density = DEFAULT_DENSITY } = this.args;\n\n assert(\n `@density for \"Hds::Table\" must be one of the following: ${DENSITIES.join(\n ', '\n )}; received: ${density}`,\n DENSITIES.includes(density)\n );\n\n return density;\n }\n\n get valign(): HdsTableVerticalAlignment {\n const { valign = DEFAULT_VALIGN } = this.args;\n\n assert(\n `@valign for \"Hds::Table\" must be one of the following: ${VALIGNMENTS.join(\n ', '\n )}; received: ${valign}`,\n VALIGNMENTS.includes(valign)\n );\n\n return valign;\n }\n\n get classNames(): string {\n const classes = ['hds-table'];\n\n // add a class based on the @isStriped argument\n if (this.isStriped) {\n classes.push('hds-table--striped');\n }\n\n // add a class based on the @isFixedLayout argument\n if (this.isFixedLayout) {\n classes.push('hds-table--layout-fixed');\n }\n\n // add a class based on the @density argument\n if (this.density) {\n classes.push(`hds-table--density-${this.density}`);\n }\n\n // add a class based on the @valign argument\n if (this.valign) {\n classes.push(`hds-table--valign-${this.valign}`);\n }\n\n return classes.join(' ');\n }\n\n @action\n setSortBy(column: string): void {\n if (this.sortBy === column) {\n // check to see if the column is already sorted and invert the sort order if so\n this.sortOrder =\n this.sortOrder === HdsTableThSortOrderValues.Asc\n ? HdsTableThSortOrderValues.Desc\n : HdsTableThSortOrderValues.Asc;\n } else {\n // otherwise, set the sort order to ascending\n this.sortBy = column;\n this.sortOrder = HdsTableThSortOrderValues.Asc;\n }\n\n const { onSort } = this.args;\n\n if (typeof onSort === 'function') {\n onSort(this.sortBy, this.sortOrder);\n }\n }\n\n onSelectionChangeCallback(\n checkbox?: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n const { onSelectionChange } = this.args;\n if (typeof onSelectionChange === 'function') {\n onSelectionChange({\n selectionKey: selectionKey,\n selectionCheckboxElement: checkbox,\n selectedRowsKeys: this._selectableRows.reduce<string[]>((acc, row) => {\n if (row.checkbox.checked) {\n acc.push(row.selectionKey);\n }\n return acc;\n }, []),\n selectableRowsStates: this._selectableRows.reduce(\n (\n acc: { selectionKey: string; isSelected: boolean | undefined }[],\n row\n ) => {\n acc.push({\n selectionKey: row.selectionKey,\n isSelected: row.checkbox.checked,\n });\n return acc;\n },\n []\n ),\n });\n }\n }\n\n @action\n onSelectionAllChange(): void {\n this._selectableRows.forEach((row) => {\n row.checkbox.checked = this._selectAllCheckbox?.checked ?? false;\n });\n this._isSelectAllCheckboxSelected =\n this._selectAllCheckbox?.checked ?? false;\n this.onSelectionChangeCallback(this._selectAllCheckbox, 'all');\n }\n\n @action\n onSelectionRowChange(\n checkbox?: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n this.setSelectAllState();\n this.onSelectionChangeCallback(checkbox, selectionKey);\n }\n\n @action\n didInsertSelectAllCheckbox(\n checkbox: HdsFormCheckboxBaseSignature['Element']\n ): void {\n this._selectAllCheckbox = checkbox;\n }\n\n @action\n willDestroySelectAllCheckbox(): void {\n this._selectAllCheckbox = undefined;\n }\n\n @action\n didInsertRowCheckbox(\n checkbox: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n if (selectionKey) {\n this._selectableRows.push({ selectionKey, checkbox });\n }\n this.setSelectAllState();\n }\n\n @action\n willDestroyRowCheckbox(selectionKey?: string): void {\n this._selectableRows = this._selectableRows.filter(\n (row) => row.selectionKey !== selectionKey\n );\n this.setSelectAllState();\n }\n\n @action\n setSelectAllState(): void {\n if (this._selectAllCheckbox) {\n const selectableRowsCount = this._selectableRows.length;\n const selectedRowsCount = this._selectableRows.filter(\n (row) => row.checkbox.checked\n ).length;\n\n this._selectAllCheckbox.checked =\n selectedRowsCount === selectableRowsCount;\n this._selectAllCheckbox.indeterminate =\n selectedRowsCount > 0 && selectedRowsCount < selectableRowsCount;\n this._isSelectAllCheckboxSelected = this._selectAllCheckbox.checked;\n }\n }\n}\n"],"names":["DENSITIES","Object","values","HdsTableDensityValues","DEFAULT_DENSITY","Medium","VALIGNMENTS","HdsTableVerticalAlignmentValues","DEFAULT_VALIGN","Top","HdsTable","Component","g","prototype","service","i","tracked","undefined","_selectableRows","constructor","owner","args","sortBy","sortOrder","HdsTableThSortOrderValues","Asc","getSortCriteria","currentColumn","columns","find","column","key","sortingFunction","identityKey","sortedMessageText","translatedSortOrder","hdsIntl","t","default","Desc","lowerCaseTranslatedSortOrder","toLowerCase","isStriped","isFixedLayout","density","assert","join","includes","valign","classNames","classes","push","setSortBy","onSort","n","action","onSelectionChangeCallback","checkbox","selectionKey","onSelectionChange","selectionCheckboxElement","selectedRowsKeys","reduce","acc","row","checked","selectableRowsStates","isSelected","onSelectionAllChange","forEach","_selectAllCheckbox","_isSelectAllCheckboxSelected","onSelectionRowChange","setSelectAllState","didInsertSelectAllCheckbox","willDestroySelectAllCheckbox","didInsertRowCheckbox","willDestroyRowCheckbox","filter","selectableRowsCount","length","selectedRowsCount","indeterminate","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/table/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport {\n HdsTableDensityValues,\n HdsTableThSortOrderValues,\n HdsTableVerticalAlignmentValues,\n} from './types.ts';\nimport type {\n HdsTableColumn,\n HdsTableDensities,\n HdsTableHorizontalAlignment,\n HdsTableOnSelectionChangeSignature,\n HdsTableSelectableRow,\n HdsTableSortingFunction,\n HdsTableThSortOrder,\n HdsTableVerticalAlignment,\n HdsTableModel,\n} from './types';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';\nimport type { HdsTableTdSignature } from './td.ts';\nimport type { HdsTableThSignature } from './th.ts';\nimport type { HdsTableThSortSignature } from './th-sort.ts';\nimport type { HdsTableTrSignature } from './tr.ts';\nimport type Owner from '@ember/owner';\n\nexport const DENSITIES: HdsTableDensities[] = Object.values(\n HdsTableDensityValues\n);\nexport const DEFAULT_DENSITY = HdsTableDensityValues.Medium;\n\nexport const VALIGNMENTS: HdsTableVerticalAlignment[] = Object.values(\n HdsTableVerticalAlignmentValues\n);\nexport const DEFAULT_VALIGN = HdsTableVerticalAlignmentValues.Top;\n\nexport interface HdsTableSignature<T = HdsTableModel> {\n Args: {\n align?: HdsTableHorizontalAlignment;\n caption?: string;\n columns?: HdsTableColumn[];\n density?: HdsTableDensities;\n identityKey?: string;\n isFixedLayout?: boolean;\n isSelectable?: boolean;\n isStriped?: boolean;\n model?: T[];\n onSelectionChange?: (selection: HdsTableOnSelectionChangeSignature) => void;\n onSort?: (sortBy: string, sortOrder: HdsTableThSortOrder) => void;\n selectionAriaLabelSuffix?: string;\n sortBy?: string;\n selectableColumnKey?: string;\n sortedMessageText?: string;\n sortOrder?: HdsTableThSortOrder;\n valign?: HdsTableVerticalAlignment;\n };\n Blocks: {\n head?: [\n {\n Tr?: ComponentLike<HdsTableTrSignature>;\n Th?: ComponentLike<HdsTableThSignature>;\n ThSort?: ComponentLike<HdsTableThSortSignature>;\n sortBy?: string;\n sortOrder?: HdsTableThSortOrder;\n setSortBy?: (column: string) => void;\n },\n ];\n body?: [\n {\n Td?: ComponentLike<HdsTableTdSignature>;\n Tr?: ComponentLike<HdsTableTrSignature>;\n Th?: ComponentLike<HdsTableThSignature>;\n data?: T;\n rowIndex?: number;\n sortBy?: string;\n sortOrder?: HdsTableThSortOrder;\n },\n ];\n };\n Element: HTMLTableElement;\n}\n\nexport default class HdsTable<T = HdsTableModel> extends Component<\n HdsTableSignature<T>\n> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked sortBy;\n @tracked sortOrder;\n @tracked\n private _selectAllCheckbox?: HdsFormCheckboxBaseSignature['Element'] =\n undefined;\n private _selectableRows: HdsTableSelectableRow[] = [];\n @tracked private _isSelectAllCheckboxSelected?: boolean = undefined;\n\n constructor(owner: Owner, args: HdsTableSignature<T>['Args']) {\n super(owner, args);\n this.sortBy = this.args.sortBy ?? undefined;\n this.sortOrder = this.args.sortOrder ?? HdsTableThSortOrderValues.Asc;\n }\n\n get getSortCriteria(): string | HdsTableSortingFunction<unknown> {\n // get the current column\n const currentColumn = this.args?.columns?.find(\n (column) => column.key === this.sortBy\n );\n if (\n // check if there is a custom sorting function associated with the current `sortBy` column (we assume the column has `isSortable`)\n currentColumn?.sortingFunction &&\n typeof currentColumn.sortingFunction === 'function'\n ) {\n return currentColumn.sortingFunction;\n } else {\n // otherwise fallback to the default format \"sortBy:sortOrder\"\n return `${this.sortBy}:${this.sortOrder}`;\n }\n }\n\n get identityKey(): string | undefined {\n // we have to provide a way for the consumer to pass undefined because Ember tries to interpret undefined as missing an arg and therefore falls back to the default\n if (this.args.identityKey === 'none') {\n return undefined;\n } else {\n return this.args.identityKey ?? '@identity';\n }\n }\n\n get sortedMessageText(): string {\n if (this.args.sortedMessageText) {\n return this.args.sortedMessageText;\n } else if (this.sortBy && this.sortOrder) {\n // we should allow the user to define a custom value here (e.g., for i18n) - tracked with HDS-965\n const translatedSortOrder = {\n [HdsTableThSortOrderValues.Asc]: this.hdsIntl.t(\n 'hds.components.common.ascending',\n { default: 'ascending' }\n ),\n [HdsTableThSortOrderValues.Desc]: this.hdsIntl.t(\n 'hds.components.common.descending',\n { default: 'descending' }\n ),\n }[this.sortOrder];\n const lowerCaseTranslatedSortOrder = translatedSortOrder.toLowerCase();\n\n return this.hdsIntl.t('hds.components.table.sorted-message-text', {\n sortBy: this.sortBy,\n sortOrder: lowerCaseTranslatedSortOrder,\n default: `Sorted by ${this.sortBy} ${lowerCaseTranslatedSortOrder}`,\n });\n } else {\n return '';\n }\n }\n\n get isStriped(): boolean {\n return this.args.isStriped ?? false;\n }\n\n get isFixedLayout(): boolean {\n return this.args.isFixedLayout ?? false;\n }\n\n get density(): HdsTableDensities {\n const { density = DEFAULT_DENSITY } = this.args;\n\n assert(\n `@density for \"Hds::Table\" must be one of the following: ${DENSITIES.join(\n ', '\n )}; received: ${density}`,\n DENSITIES.includes(density)\n );\n\n return density;\n }\n\n get valign(): HdsTableVerticalAlignment {\n const { valign = DEFAULT_VALIGN } = this.args;\n\n assert(\n `@valign for \"Hds::Table\" must be one of the following: ${VALIGNMENTS.join(\n ', '\n )}; received: ${valign}`,\n VALIGNMENTS.includes(valign)\n );\n\n return valign;\n }\n\n get classNames(): string {\n const classes = ['hds-table'];\n\n // add a class based on the @isStriped argument\n if (this.isStriped) {\n classes.push('hds-table--striped');\n }\n\n // add a class based on the @isFixedLayout argument\n if (this.isFixedLayout) {\n classes.push('hds-table--layout-fixed');\n }\n\n // add a class based on the @density argument\n if (this.density) {\n classes.push(`hds-table--density-${this.density}`);\n }\n\n // add a class based on the @valign argument\n if (this.valign) {\n classes.push(`hds-table--valign-${this.valign}`);\n }\n\n return classes.join(' ');\n }\n\n @action\n setSortBy(column: string): void {\n if (this.sortBy === column) {\n // check to see if the column is already sorted and invert the sort order if so\n this.sortOrder =\n this.sortOrder === HdsTableThSortOrderValues.Asc\n ? HdsTableThSortOrderValues.Desc\n : HdsTableThSortOrderValues.Asc;\n } else {\n // otherwise, set the sort order to ascending\n this.sortBy = column;\n this.sortOrder = HdsTableThSortOrderValues.Asc;\n }\n\n const { onSort } = this.args;\n\n if (typeof onSort === 'function') {\n onSort(this.sortBy, this.sortOrder);\n }\n }\n\n onSelectionChangeCallback(\n checkbox?: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n const { onSelectionChange } = this.args;\n if (typeof onSelectionChange === 'function') {\n onSelectionChange({\n selectionKey: selectionKey,\n selectionCheckboxElement: checkbox,\n selectedRowsKeys: this._selectableRows.reduce<string[]>((acc, row) => {\n if (row.checkbox.checked) {\n acc.push(row.selectionKey);\n }\n return acc;\n }, []),\n selectableRowsStates: this._selectableRows.reduce(\n (\n acc: { selectionKey: string; isSelected: boolean | undefined }[],\n row\n ) => {\n acc.push({\n selectionKey: row.selectionKey,\n isSelected: row.checkbox.checked,\n });\n return acc;\n },\n []\n ),\n });\n }\n }\n\n @action\n onSelectionAllChange(): void {\n this._selectableRows.forEach((row) => {\n row.checkbox.checked = this._selectAllCheckbox?.checked ?? false;\n });\n this._isSelectAllCheckboxSelected =\n this._selectAllCheckbox?.checked ?? false;\n this.onSelectionChangeCallback(this._selectAllCheckbox, 'all');\n }\n\n @action\n onSelectionRowChange(\n checkbox?: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n this.setSelectAllState();\n this.onSelectionChangeCallback(checkbox, selectionKey);\n }\n\n @action\n didInsertSelectAllCheckbox(\n checkbox: HdsFormCheckboxBaseSignature['Element']\n ): void {\n this._selectAllCheckbox = checkbox;\n }\n\n @action\n willDestroySelectAllCheckbox(): void {\n this._selectAllCheckbox = undefined;\n }\n\n @action\n didInsertRowCheckbox(\n checkbox: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n if (selectionKey) {\n this._selectableRows.push({ selectionKey, checkbox });\n }\n this.setSelectAllState();\n }\n\n @action\n willDestroyRowCheckbox(selectionKey?: string): void {\n this._selectableRows = this._selectableRows.filter(\n (row) => row.selectionKey !== selectionKey\n );\n this.setSelectAllState();\n }\n\n @action\n setSelectAllState(): void {\n if (this._selectAllCheckbox) {\n const selectableRowsCount = this._selectableRows.length;\n const selectedRowsCount = this._selectableRows.filter(\n (row) => row.checkbox.checked\n ).length;\n\n this._selectAllCheckbox.checked =\n selectedRowsCount === selectableRowsCount;\n this._selectAllCheckbox.indeterminate =\n selectedRowsCount > 0 && selectedRowsCount < selectableRowsCount;\n this._isSelectAllCheckboxSelected = this._selectAllCheckbox.checked;\n }\n }\n}\n"],"names":["DENSITIES","Object","values","HdsTableDensityValues","DEFAULT_DENSITY","Medium","VALIGNMENTS","HdsTableVerticalAlignmentValues","DEFAULT_VALIGN","Top","HdsTable","Component","g","prototype","service","i","void 0","tracked","undefined","_selectableRows","constructor","owner","args","sortBy","sortOrder","HdsTableThSortOrderValues","Asc","getSortCriteria","currentColumn","columns","find","column","key","sortingFunction","identityKey","sortedMessageText","translatedSortOrder","hdsIntl","t","default","Desc","lowerCaseTranslatedSortOrder","toLowerCase","isStriped","isFixedLayout","density","assert","join","includes","valign","classNames","classes","push","setSortBy","onSort","n","action","onSelectionChangeCallback","checkbox","selectionKey","onSelectionChange","selectionCheckboxElement","selectedRowsKeys","reduce","acc","row","checked","selectableRowsStates","isSelected","onSelectionAllChange","forEach","_selectAllCheckbox","_isSelectAllCheckboxSelected","onSelectionRowChange","setSelectAllState","didInsertSelectAllCheckbox","willDestroySelectAllCheckbox","didInsertRowCheckbox","willDestroyRowCheckbox","filter","selectableRowsCount","length","selectedRowsCount","indeterminate","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"th-button-sort.js","sources":["../../../../src/components/hds/table/th-button-sort.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { guidFor } from '@ember/object/internals';\nimport {\n HdsTableThSortOrderIconValues,\n HdsTableThSortOrderValues,\n} from './types.ts';\nimport type {\n HdsTableThSortOrder,\n HdsTableThSortOrderIcons,\n HdsTableThSortOrderLabels,\n} from './types.ts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nexport interface HdsTableThButtonSortSignature {\n Args: {\n labelId?: string;\n onClick?: () => void;\n sortOrder?: HdsTableThSortOrder;\n };\n Element: HTMLButtonElement;\n}\n\nconst NOOP = () => {};\n\nexport default class HdsTableThButtonSort extends Component<HdsTableThButtonSortSignature> {\n @service hdsIntl!: HdsIntlService;\n\n // Generates a unique ID for the (hidden) \"label prefix/suffix\" <span> elements\n private _prefixLabelId = 'prefix-' + guidFor(this);\n private _suffixLabelId = 'suffix-' + guidFor(this);\n\n get icon(): HdsTableThSortOrderIcons {\n switch (this.args.sortOrder) {\n case HdsTableThSortOrderValues.Asc:\n return HdsTableThSortOrderIconValues.ArrowUp;\n case HdsTableThSortOrderValues.Desc:\n return HdsTableThSortOrderIconValues.ArrowDown;\n default:\n return HdsTableThSortOrderIconValues.SwapVertical;\n }\n }\n\n // Determines the label (suffix) to use in the `aria-labelledby` attribute of the button,\n // used to indicate what will happen if the user clicks on the button\n get sortOrderLabel(): HdsTableThSortOrderLabels {\n const { sortOrder } = this.args;\n\n const translatedLabel =\n sortOrder === HdsTableThSortOrderValues.Asc\n ? this.hdsIntl.t('hds.components.common.descending', {\n default: 'descending',\n })\n : this.hdsIntl.t('hds.components.common.ascending', {\n default: 'ascending',\n });\n\n return translatedLabel as HdsTableThSortOrderLabels;\n }\n\n get onClick(): () => void {\n const { onClick } = this.args;\n\n if (typeof onClick === 'function') {\n return onClick;\n } else {\n return NOOP;\n }\n }\n\n get classNames(): string {\n const classes = ['hds-table__th-button', 'hds-table__th-button--sort'];\n\n // add a class based on the @sortOrder argument\n if (\n this.args.sortOrder === HdsTableThSortOrderValues.Asc ||\n this.args.sortOrder === HdsTableThSortOrderValues.Desc\n ) {\n classes.push(`hds-table__th-button--is-sorted`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["NOOP","HdsTableThButtonSort","Component","g","prototype","service","i","_prefixLabelId","guidFor","_suffixLabelId","icon","args","sortOrder","HdsTableThSortOrderValues","Asc","HdsTableThSortOrderIconValues","ArrowUp","Desc","ArrowDown","SwapVertical","sortOrderLabel","translatedLabel","hdsIntl","t","default","onClick","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AAwBA,MAAMA,IAAI,GAAGA,MAAM,CAAC,CAAC;AAEN,MAAMC,oBAAoB,SAASC,SAAS,CAAgC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACxFC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,MAAA;AAER;AACQC,EAAAA,cAAc,GAAG,SAAS,GAAGC,OAAO,CAAC,IAAI,CAAC;AAC1CC,EAAAA,cAAc,GAAG,SAAS,GAAGD,OAAO,CAAC,IAAI,CAAC;EAElD,IAAIE,IAAIA,GAA6B;AACnC,IAAA,QAAQ,IAAI,CAACC,IAAI,CAACC,SAAS;MACzB,KAAKC,yBAAyB,CAACC,GAAG;QAChC,OAAOC,6BAA6B,CAACC,OAAO;MAC9C,KAAKH,yBAAyB,CAACI,IAAI;QACjC,OAAOF,6BAA6B,CAACG,SAAS;AAChD,MAAA;QACE,OAAOH,6BAA6B,CAACI,YAAY;AACrD;AACF,EAAA;;AAEA;AACA;EACA,IAAIC,cAAcA,GAA8B;IAC9C,MAAM;AAAER,MAAAA;KAAW,GAAG,IAAI,CAACD,IAAI;AAE/B,IAAA,MAAMU,eAAe,GACnBT,SAAS,KAAKC,yBAAyB,CAACC,GAAG,GACvC,IAAI,CAACQ,OAAO,CAACC,CAAC,CAAC,kCAAkC,EAAE;AACjDC,MAAAA,OAAO,EAAE;KACV,CAAC,GACF,IAAI,CAACF,OAAO,CAACC,CAAC,CAAC,iCAAiC,EAAE;AAChDC,MAAAA,OAAO,EAAE;AACX,KAAC,CAAC;AAER,IAAA,OAAOH,eAAe;AACxB,EAAA;EAEA,IAAII,OAAOA,GAAe;IACxB,MAAM;AAAEA,MAAAA;KAAS,GAAG,IAAI,CAACd,IAAI;AAE7B,IAAA,IAAI,OAAOc,OAAO,KAAK,UAAU,EAAE;AACjC,MAAA,OAAOA,OAAO;AAChB,IAAA,CAAC,MAAM;AACL,MAAA,OAAOzB,IAAI;AACb,IAAA;AACF,EAAA;EAEA,IAAI0B,UAAUA,GAAW;AACvB,IAAA,MAAMC,OAAO,GAAG,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;;AAEtE;AACA,IAAA,IACE,IAAI,CAAChB,IAAI,CAACC,SAAS,KAAKC,yBAAyB,CAACC,GAAG,IACrD,IAAI,CAACH,IAAI,CAACC,SAAS,KAAKC,yBAAyB,CAACI,IAAI,EACtD;AACAU,MAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,+BAAA,CAAiC,CAAC;AACjD,IAAA;AAEA,IAAA,OAAOD,OAAO,CAACE,IAAI,CAAC,GAAG,CAAC;AAC1B,EAAA;AACF;AAACC,oBAAA,CAAAC,QAAA,EA1DoB9B,oBAAoB,CAAA;;;;"}
1
+ {"version":3,"file":"th-button-sort.js","sources":["../../../../src/components/hds/table/th-button-sort.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { guidFor } from '@ember/object/internals';\nimport {\n HdsTableThSortOrderIconValues,\n HdsTableThSortOrderValues,\n} from './types.ts';\nimport type {\n HdsTableThSortOrder,\n HdsTableThSortOrderIcons,\n HdsTableThSortOrderLabels,\n} from './types.ts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nexport interface HdsTableThButtonSortSignature {\n Args: {\n labelId?: string;\n onClick?: () => void;\n sortOrder?: HdsTableThSortOrder;\n };\n Element: HTMLButtonElement;\n}\n\nconst NOOP = () => {};\n\nexport default class HdsTableThButtonSort extends Component<HdsTableThButtonSortSignature> {\n @service hdsIntl!: HdsIntlService;\n\n // Generates a unique ID for the (hidden) \"label prefix/suffix\" <span> elements\n private _prefixLabelId = 'prefix-' + guidFor(this);\n private _suffixLabelId = 'suffix-' + guidFor(this);\n\n get icon(): HdsTableThSortOrderIcons {\n switch (this.args.sortOrder) {\n case HdsTableThSortOrderValues.Asc:\n return HdsTableThSortOrderIconValues.ArrowUp;\n case HdsTableThSortOrderValues.Desc:\n return HdsTableThSortOrderIconValues.ArrowDown;\n default:\n return HdsTableThSortOrderIconValues.SwapVertical;\n }\n }\n\n // Determines the label (suffix) to use in the `aria-labelledby` attribute of the button,\n // used to indicate what will happen if the user clicks on the button\n get sortOrderLabel(): HdsTableThSortOrderLabels {\n const { sortOrder } = this.args;\n\n const translatedLabel =\n sortOrder === HdsTableThSortOrderValues.Asc\n ? this.hdsIntl.t('hds.components.common.descending', {\n default: 'descending',\n })\n : this.hdsIntl.t('hds.components.common.ascending', {\n default: 'ascending',\n });\n\n return translatedLabel as HdsTableThSortOrderLabels;\n }\n\n get onClick(): () => void {\n const { onClick } = this.args;\n\n if (typeof onClick === 'function') {\n return onClick;\n } else {\n return NOOP;\n }\n }\n\n get classNames(): string {\n const classes = ['hds-table__th-button', 'hds-table__th-button--sort'];\n\n // add a class based on the @sortOrder argument\n if (\n this.args.sortOrder === HdsTableThSortOrderValues.Asc ||\n this.args.sortOrder === HdsTableThSortOrderValues.Desc\n ) {\n classes.push(`hds-table__th-button--is-sorted`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["NOOP","HdsTableThButtonSort","Component","g","prototype","service","i","void 0","_prefixLabelId","guidFor","_suffixLabelId","icon","args","sortOrder","HdsTableThSortOrderValues","Asc","HdsTableThSortOrderIconValues","ArrowUp","Desc","ArrowDown","SwapVertical","sortOrderLabel","translatedLabel","hdsIntl","t","default","onClick","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AAwBA,MAAMA,IAAI,GAAGA,MAAM,CAAC,CAAC;AAEN,MAAMC,oBAAoB,SAASC,SAAS,CAAgC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACxFC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAER;AACQC,EAAAA,cAAc,GAAG,SAAS,GAAGC,OAAO,CAAC,IAAI,CAAC;AAC1CC,EAAAA,cAAc,GAAG,SAAS,GAAGD,OAAO,CAAC,IAAI,CAAC;EAElD,IAAIE,IAAIA,GAA6B;AACnC,IAAA,QAAQ,IAAI,CAACC,IAAI,CAACC,SAAS;MACzB,KAAKC,yBAAyB,CAACC,GAAG;QAChC,OAAOC,6BAA6B,CAACC,OAAO;MAC9C,KAAKH,yBAAyB,CAACI,IAAI;QACjC,OAAOF,6BAA6B,CAACG,SAAS;AAChD,MAAA;QACE,OAAOH,6BAA6B,CAACI,YAAY;AACrD;AACF,EAAA;;AAEA;AACA;EACA,IAAIC,cAAcA,GAA8B;IAC9C,MAAM;AAAER,MAAAA;KAAW,GAAG,IAAI,CAACD,IAAI;AAE/B,IAAA,MAAMU,eAAe,GACnBT,SAAS,KAAKC,yBAAyB,CAACC,GAAG,GACvC,IAAI,CAACQ,OAAO,CAACC,CAAC,CAAC,kCAAkC,EAAE;AACjDC,MAAAA,OAAO,EAAE;KACV,CAAC,GACF,IAAI,CAACF,OAAO,CAACC,CAAC,CAAC,iCAAiC,EAAE;AAChDC,MAAAA,OAAO,EAAE;AACX,KAAC,CAAC;AAER,IAAA,OAAOH,eAAe;AACxB,EAAA;EAEA,IAAII,OAAOA,GAAe;IACxB,MAAM;AAAEA,MAAAA;KAAS,GAAG,IAAI,CAACd,IAAI;AAE7B,IAAA,IAAI,OAAOc,OAAO,KAAK,UAAU,EAAE;AACjC,MAAA,OAAOA,OAAO;AAChB,IAAA,CAAC,MAAM;AACL,MAAA,OAAO1B,IAAI;AACb,IAAA;AACF,EAAA;EAEA,IAAI2B,UAAUA,GAAW;AACvB,IAAA,MAAMC,OAAO,GAAG,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;;AAEtE;AACA,IAAA,IACE,IAAI,CAAChB,IAAI,CAACC,SAAS,KAAKC,yBAAyB,CAACC,GAAG,IACrD,IAAI,CAACH,IAAI,CAACC,SAAS,KAAKC,yBAAyB,CAACI,IAAI,EACtD;AACAU,MAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,+BAAA,CAAiC,CAAC;AACjD,IAAA;AAEA,IAAA,OAAOD,OAAO,CAACE,IAAI,CAAC,GAAG,CAAC;AAC1B,EAAA;AACF;AAACC,oBAAA,CAAAC,QAAA,EA1DoB/B,oBAAoB,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"th-selectable.js","sources":["../../../../src/components/hds/table/th-selectable.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsTableThSortOrderValues,\n HdsTableThSortOrderLabelValues,\n} from './types.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';\nimport type {\n HdsTableScope,\n HdsTableThSortOrder,\n HdsTableThSortOrderLabels,\n} from './types';\nimport type { HdsTableThSignature } from './th';\nimport type Owner from '@ember/owner';\n\nexport interface HdsTableThSelectableSignature {\n Args: {\n didInsert?: (\n checkbox: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ) => void;\n isSelected?: boolean;\n onClickSortBySelected?: () => void;\n onSelectionChange?: (\n target: HdsFormCheckboxBaseSignature['Element'],\n selectionKey: string | undefined\n ) => void;\n selectionAriaLabelSuffix?: string;\n selectionKey?: string;\n selectionScope?: HdsTableScope;\n sortBySelectedOrder?: HdsTableThSortOrder;\n willDestroy?: (selectionKey?: string) => void;\n };\n Element: HdsTableThSignature['Element'];\n}\n\nexport default class HdsTableThSelectable extends Component<HdsTableThSelectableSignature> {\n @tracked isSelected: boolean;\n private _guid = guidFor(this);\n\n private _checkboxId = `checkbox-${this._guid}`;\n private _labelId = `label-${this._guid}`;\n\n constructor(owner: Owner, args: HdsTableThSelectableSignature['Args']) {\n super(owner, args);\n this.isSelected = this.args.isSelected ?? false;\n }\n\n get isSortable(): boolean {\n return this.args.onClickSortBySelected !== undefined;\n }\n\n get ariaLabel(): string {\n const { selectionAriaLabelSuffix = 'row' } = this.args;\n return `Select ${selectionAriaLabelSuffix}`;\n }\n\n get ariaSort(): HdsTableThSortOrderLabels | undefined {\n switch (this.args.sortBySelectedOrder) {\n case HdsTableThSortOrderValues.Asc:\n return HdsTableThSortOrderLabelValues.Asc;\n case HdsTableThSortOrderValues.Desc:\n return HdsTableThSortOrderLabelValues.Desc;\n default:\n // none is the default per the spec.\n return HdsTableThSortOrderLabelValues.None;\n }\n }\n\n @action\n didInsert(checkbox: HdsFormCheckboxBaseSignature['Element']): void {\n const { didInsert } = this.args;\n if (typeof didInsert === 'function') {\n didInsert(checkbox, this.args.selectionKey);\n }\n }\n\n @action\n willDestroyNode(): void {\n super.willDestroy();\n const { willDestroy } = this.args;\n if (typeof willDestroy === 'function') {\n willDestroy(this.args.selectionKey);\n }\n }\n\n @action\n onSelectionChange(event: Event): void {\n // Assert event.target as HdsFormCheckboxBaseSignature['Element'] to access the 'checked' property\n const target = event.target as HdsFormCheckboxBaseSignature['Element'];\n this.isSelected = target.checked;\n const { onSelectionChange } = this.args;\n if (typeof onSelectionChange === 'function') {\n onSelectionChange(target, this.args.selectionKey);\n }\n }\n}\n"],"names":["HdsTableThSelectable","Component","g","prototype","tracked","i","_guid","guidFor","_checkboxId","_labelId","constructor","owner","args","isSelected","isSortable","onClickSortBySelected","undefined","ariaLabel","selectionAriaLabelSuffix","ariaSort","sortBySelectedOrder","HdsTableThSortOrderValues","Asc","HdsTableThSortOrderLabelValues","Desc","None","didInsert","checkbox","selectionKey","n","action","willDestroyNode","willDestroy","onSelectionChange","event","target","checked","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"th-selectable.js","sources":["../../../../src/components/hds/table/th-selectable.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsTableThSortOrderValues,\n HdsTableThSortOrderLabelValues,\n} from './types.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';\nimport type {\n HdsTableScope,\n HdsTableThSortOrder,\n HdsTableThSortOrderLabels,\n} from './types';\nimport type { HdsTableThSignature } from './th';\nimport type Owner from '@ember/owner';\n\nexport interface HdsTableThSelectableSignature {\n Args: {\n didInsert?: (\n checkbox: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ) => void;\n isSelected?: boolean;\n onClickSortBySelected?: () => void;\n onSelectionChange?: (\n target: HdsFormCheckboxBaseSignature['Element'],\n selectionKey: string | undefined\n ) => void;\n selectionAriaLabelSuffix?: string;\n selectionKey?: string;\n selectionScope?: HdsTableScope;\n sortBySelectedOrder?: HdsTableThSortOrder;\n willDestroy?: (selectionKey?: string) => void;\n };\n Element: HdsTableThSignature['Element'];\n}\n\nexport default class HdsTableThSelectable extends Component<HdsTableThSelectableSignature> {\n @tracked isSelected: boolean;\n private _guid = guidFor(this);\n\n private _checkboxId = `checkbox-${this._guid}`;\n private _labelId = `label-${this._guid}`;\n\n constructor(owner: Owner, args: HdsTableThSelectableSignature['Args']) {\n super(owner, args);\n this.isSelected = this.args.isSelected ?? false;\n }\n\n get isSortable(): boolean {\n return this.args.onClickSortBySelected !== undefined;\n }\n\n get ariaLabel(): string {\n const { selectionAriaLabelSuffix = 'row' } = this.args;\n return `Select ${selectionAriaLabelSuffix}`;\n }\n\n get ariaSort(): HdsTableThSortOrderLabels | undefined {\n switch (this.args.sortBySelectedOrder) {\n case HdsTableThSortOrderValues.Asc:\n return HdsTableThSortOrderLabelValues.Asc;\n case HdsTableThSortOrderValues.Desc:\n return HdsTableThSortOrderLabelValues.Desc;\n default:\n // none is the default per the spec.\n return HdsTableThSortOrderLabelValues.None;\n }\n }\n\n @action\n didInsert(checkbox: HdsFormCheckboxBaseSignature['Element']): void {\n const { didInsert } = this.args;\n if (typeof didInsert === 'function') {\n didInsert(checkbox, this.args.selectionKey);\n }\n }\n\n @action\n willDestroyNode(): void {\n super.willDestroy();\n const { willDestroy } = this.args;\n if (typeof willDestroy === 'function') {\n willDestroy(this.args.selectionKey);\n }\n }\n\n @action\n onSelectionChange(event: Event): void {\n // Assert event.target as HdsFormCheckboxBaseSignature['Element'] to access the 'checked' property\n const target = event.target as HdsFormCheckboxBaseSignature['Element'];\n this.isSelected = target.checked;\n const { onSelectionChange } = this.args;\n if (typeof onSelectionChange === 'function') {\n onSelectionChange(target, this.args.selectionKey);\n }\n }\n}\n"],"names":["HdsTableThSelectable","Component","g","prototype","tracked","i","void 0","_guid","guidFor","_checkboxId","_labelId","constructor","owner","args","isSelected","isSortable","onClickSortBySelected","undefined","ariaLabel","selectionAriaLabelSuffix","ariaSort","sortBySelectedOrder","HdsTableThSortOrderValues","Asc","HdsTableThSortOrderLabelValues","Desc","None","didInsert","checkbox","selectionKey","n","action","willDestroyNode","willDestroy","onSelectionChange","event","target","checked","setComponentTemplate","TEMPLATE"],"mappings":"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"}