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

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 (96) hide show
  1. package/declarations/components/hds/theme-context/index.d.ts +24 -0
  2. package/declarations/components/hds/theme-context/types.d.ts +19 -0
  3. package/declarations/components/hds/theme-switcher/index.d.ts +43 -0
  4. package/declarations/components.d.ts +2 -0
  5. package/declarations/services/hds-intl.d.ts +4 -3
  6. package/declarations/services/hds-theming.d.ts +57 -0
  7. package/declarations/services.d.ts +1 -0
  8. package/declarations/template-registry.d.ts +6 -0
  9. package/dist/_app_/components/hds/theme-context.js +1 -0
  10. package/dist/_app_/components/hds/theme-switcher.js +1 -0
  11. package/dist/_app_/services/hds-theming.js +1 -0
  12. package/dist/components/hds/advanced-table/index.js.map +1 -1
  13. package/dist/components/hds/advanced-table/models/column.js.map +1 -1
  14. package/dist/components/hds/advanced-table/models/row.js.map +1 -1
  15. package/dist/components/hds/advanced-table/models/table.js.map +1 -1
  16. package/dist/components/hds/advanced-table/td.js.map +1 -1
  17. package/dist/components/hds/advanced-table/th-context-menu.js.map +1 -1
  18. package/dist/components/hds/advanced-table/th-reorder-drop-target.js.map +1 -1
  19. package/dist/components/hds/advanced-table/th-resize-handle.js.map +1 -1
  20. package/dist/components/hds/advanced-table/th-selectable.js.map +1 -1
  21. package/dist/components/hds/advanced-table/th-sort.js.map +1 -1
  22. package/dist/components/hds/advanced-table/th.js.map +1 -1
  23. package/dist/components/hds/alert/index.js.map +1 -1
  24. package/dist/components/hds/app-header/index.js.map +1 -1
  25. package/dist/components/hds/app-side-nav/index.js.map +1 -1
  26. package/dist/components/hds/app-side-nav/list/index.js.map +1 -1
  27. package/dist/components/hds/app-side-nav/portal/target.js.map +1 -1
  28. package/dist/components/hds/breadcrumb/item.js.map +1 -1
  29. package/dist/components/hds/code-block/index.js.map +1 -1
  30. package/dist/components/hds/code-editor/index.js.map +1 -1
  31. package/dist/components/hds/copy/button/index.js.map +1 -1
  32. package/dist/components/hds/copy/snippet/index.js.map +1 -1
  33. package/dist/components/hds/disclosure-primitive/index.js.map +1 -1
  34. package/dist/components/hds/dismiss-button/index.js.map +1 -1
  35. package/dist/components/hds/dropdown/toggle/icon.js.map +1 -1
  36. package/dist/components/hds/flyout/index.js.map +1 -1
  37. package/dist/components/hds/form/key-value-inputs/index.js.map +1 -1
  38. package/dist/components/hds/form/masked-input/base.js.map +1 -1
  39. package/dist/components/hds/form/super-select/multiple/base.js.map +1 -1
  40. package/dist/components/hds/form/super-select/single/base.js.map +1 -1
  41. package/dist/components/hds/form/text-input/field.js.map +1 -1
  42. package/dist/components/hds/interactive/index.js.map +1 -1
  43. package/dist/components/hds/modal/index.js.map +1 -1
  44. package/dist/components/hds/pagination/compact/index.js.map +1 -1
  45. package/dist/components/hds/pagination/info/index.js.map +1 -1
  46. package/dist/components/hds/pagination/numbered/index.js.map +1 -1
  47. package/dist/components/hds/popover-primitive/index.js.map +1 -1
  48. package/dist/components/hds/side-nav/index.js.map +1 -1
  49. package/dist/components/hds/side-nav/list/index.js.map +1 -1
  50. package/dist/components/hds/side-nav/portal/target.js.map +1 -1
  51. package/dist/components/hds/stepper/list/index.js.map +1 -1
  52. package/dist/components/hds/stepper/nav/index.js.map +1 -1
  53. package/dist/components/hds/table/index.js.map +1 -1
  54. package/dist/components/hds/table/th-button-sort.js.map +1 -1
  55. package/dist/components/hds/table/th-selectable.js.map +1 -1
  56. package/dist/components/hds/tabs/index.js.map +1 -1
  57. package/dist/components/hds/tag/index.js.map +1 -1
  58. package/dist/components/hds/theme-context/index.js +45 -0
  59. package/dist/components/hds/theme-context/index.js.map +1 -0
  60. package/dist/components/hds/theme-context/types.js +27 -0
  61. package/dist/components/hds/theme-context/types.js.map +1 -0
  62. package/dist/components/hds/theme-switcher/index.js +100 -0
  63. package/dist/components/hds/theme-switcher/index.js.map +1 -0
  64. package/dist/components/hds/time/index.js.map +1 -1
  65. package/dist/components/hds/time/range.js.map +1 -1
  66. package/dist/components.js +2 -0
  67. package/dist/components.js.map +1 -1
  68. package/dist/helpers/hds-t.js.map +1 -1
  69. package/dist/modifiers/hds-code-editor.js.map +1 -1
  70. package/dist/services/hds-intl.js.map +1 -1
  71. package/dist/services/hds-theming.js +214 -0
  72. package/dist/services/hds-theming.js.map +1 -0
  73. package/dist/services/hds-time.js.map +1 -1
  74. package/dist/services.js +1 -1
  75. package/dist/styles/@hashicorp/design-system-components-common.css +9588 -0
  76. package/dist/styles/@hashicorp/design-system-components-common.css.map +1 -0
  77. package/dist/styles/@hashicorp/design-system-components-common.scss +24 -0
  78. package/dist/styles/@hashicorp/design-system-components.css +501 -320
  79. package/dist/styles/@hashicorp/design-system-components.css.map +1 -0
  80. package/dist/styles/@hashicorp/design-system-components.scss +4 -62
  81. package/dist/styles/@hashicorp/design-system-power-select-overrides.css +229 -0
  82. package/dist/styles/@hashicorp/design-system-power-select-overrides.css.map +1 -0
  83. package/dist/styles/components/badge-count.scss +26 -76
  84. package/dist/styles/components/badge.scss +26 -131
  85. package/dist/styles/components/button.scss +5 -0
  86. package/dist/styles/components/dropdown.scss +3 -5
  87. package/dist/styles/components/form/file-input.scss +2 -2
  88. package/dist/styles/components/form/key-value-inputs.scss +2 -4
  89. package/dist/styles/components/index.scss +52 -0
  90. package/dist/styles/components/theme-context.scss +12 -0
  91. package/dist/styles/mixins/_button.scss +82 -129
  92. package/dist/styles/mixins/_carbonization.scss +31 -0
  93. package/dist/styles/mixins/_interactive-dark-theme.scss +1 -1
  94. package/dist/utils/hds-aria-described-by.js.map +1 -1
  95. package/package.json +10 -6
  96. package/dist/styles/@hashicorp/design-system-components.scss.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/dismiss-button/index.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';\n\nimport type HdsIntlService from '../../../services/hds-intl';\n\nexport interface HdsDismissButtonSignature {\n Args: {\n ariaLabel?: string;\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsDismissButton extends Component<HdsDismissButtonSignature> {\n @service hdsIntl!: HdsIntlService;\n\n get ariaLabel(): string {\n return (\n this.args.ariaLabel ??\n this.hdsIntl.t('hds.components.dismiss-button.aria-label', {\n default: 'Dismiss',\n })\n );\n }\n}\n"],"names":["HdsDismissButton","Component","g","prototype","service","i","ariaLabel","args","hdsIntl","t","default","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAce,MAAMA,gBAAgB,SAASC,SAAS,CAA4B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAChFC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,MAAA;EAER,IAAIC,SAASA,GAAW;AACtB,IAAA,OACE,IAAI,CAACC,IAAI,CAACD,SAAS,IACnB,IAAI,CAACE,OAAO,CAACC,CAAC,CAAC,0CAA0C,EAAE;AACzDC,MAAAA,OAAO,EAAE;AACX,KAAC,CAAC;AAEN,EAAA;AACF;AAACC,oBAAA,CAAAC,QAAA,EAXoBZ,gBAAgB,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/dismiss-button/index.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';\n\nimport type HdsIntlService from '../../../services/hds-intl';\n\nexport interface HdsDismissButtonSignature {\n Args: {\n ariaLabel?: string;\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsDismissButton extends Component<HdsDismissButtonSignature> {\n @service hdsIntl!: HdsIntlService;\n\n get ariaLabel(): string {\n return (\n this.args.ariaLabel ??\n this.hdsIntl.t('hds.components.dismiss-button.aria-label', {\n default: 'Dismiss',\n })\n );\n }\n}\n"],"names":["HdsDismissButton","Component","g","prototype","service","i","void 0","ariaLabel","args","hdsIntl","t","default","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAce,MAAMA,gBAAgB,SAASC,SAAS,CAA4B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAChFC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;EAER,IAAIC,SAASA,GAAW;AACtB,IAAA,OACE,IAAI,CAACC,IAAI,CAACD,SAAS,IACnB,IAAI,CAACE,OAAO,CAACC,CAAC,CAAC,0CAA0C,EAAE;AACzDC,MAAAA,OAAO,EAAE;AACX,KAAC,CAAC;AAEN,EAAA;AACF;AAACC,oBAAA,CAAAC,QAAA,EAXoBb,gBAAgB,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"icon.js","sources":["../../../../../src/components/hds/dropdown/toggle/icon.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 { tracked } from '@glimmer/tracking';\nimport {\n HdsDropdownToggleIconSizeValues,\n HdsDropdownToggleIconAllowedIconValues,\n} from './types.ts';\n\nimport type { HdsIconSignature } from '../../icon';\nimport type { HdsDropdownToggleIconSizes } from './types';\nimport type { ModifierLike } from '@glint/template';\nimport type { SetupPrimitiveToggleModifier } from '../../popover-primitive/index.ts';\nimport type Owner from '@ember/owner';\n\nexport const DEFAULT_SIZE = HdsDropdownToggleIconSizeValues.Medium;\nexport const SIZES: HdsDropdownToggleIconSizes[] = Object.values(\n HdsDropdownToggleIconSizeValues\n);\n\nexport const ALLOWED_ICON_LIST: HdsIconSignature['Args']['name'][] =\n Object.values(HdsDropdownToggleIconAllowedIconValues);\n\nexport interface HdsDropdownToggleIconSignature {\n Args: {\n hasChevron?: boolean;\n icon?: HdsIconSignature['Args']['name'];\n imageSrc?: string;\n isOpen?: boolean;\n size?: HdsDropdownToggleIconSizes;\n text: string;\n setupPrimitiveToggle?: ModifierLike<SetupPrimitiveToggleModifier>;\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsDropdownToggleIcon extends Component<HdsDropdownToggleIconSignature> {\n @tracked private _hasImage = true;\n\n constructor(owner: Owner, args: HdsDropdownToggleIconSignature['Args']) {\n super(owner, args);\n if (!(this.args.icon || this.args.imageSrc)) {\n assert(\n '@icon or @imageSrc must be defined for \"Hds::Dropdown::Toggle::Icon\"'\n );\n }\n }\n\n @action\n onDidUpdateImageSrc(): void {\n this._hasImage = true;\n }\n\n @action\n onImageLoadError(): void {\n this._hasImage = false;\n }\n\n /**\n * @param text\n * @type {string}\n * @description The text of the `aria-label` applied to the toggle\n */\n get text(): string {\n const { text } = this.args;\n\n assert(\n '@text for \"Hds::Dropdown::Toggle::Icon\" must have a valid value',\n text !== undefined\n );\n\n return text;\n }\n\n /**\n * @param size\n * @type {string}\n * @default medium\n * @description The size of the button; acceptable values are `small` and `medium`\n */\n get size(): HdsDropdownToggleIconSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Dropdown::Toggle::Icon\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n /**\n * @param iconSize\n * @type {string}\n * @default 24\n * @description ensures that the correct icon size is used\n */\n get iconSize(): HdsIconSignature['Args']['size'] {\n if (this.args.size === 'medium' && !this.hasChevron) {\n // in this special case we use a larger SVG\n return '24';\n } else {\n // this is the default size (notice: for the \"small\" variant with chevron, we set the actual size to `12px` via CSS)\n return '16';\n }\n }\n\n /**\n * Indicates if a dropdown chevron icon should be displayed; should be displayed unless the \"more-horizontal\" or \"more-vertical\" icons are used.\n *\n * @param hasChevron\n * @type {boolean}\n * @default true\n */\n get hasChevron(): boolean {\n if (\n this.args.icon &&\n !ALLOWED_ICON_LIST.includes(this.args.icon) &&\n this.args.hasChevron === false\n ) {\n assert(\n `@hasChevron for \"Hds::Dropdown::Toggle::Icon\" must be true unless the icon is one of the following: ${ALLOWED_ICON_LIST.join(\n ', '\n )}; received: ${this.args.icon}`\n );\n }\n\n return this.args.hasChevron ?? true;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method ToggleIcon#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-dropdown-toggle-icon'];\n\n // add a class based on the @size argument\n classes.push(`hds-dropdown-toggle-icon--size-${this.size}`);\n\n // add a class based on the @isOpen argument\n if (this.args.isOpen) {\n classes.push('hds-dropdown-toggle-icon--is-open');\n }\n\n // add a class based on the @hasChevron argument\n if (this.hasChevron) {\n classes.push('hds-dropdown-toggle-icon--has-chevron');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["DEFAULT_SIZE","HdsDropdownToggleIconSizeValues","Medium","SIZES","Object","values","ALLOWED_ICON_LIST","HdsDropdownToggleIconAllowedIconValues","HdsDropdownToggleIcon","Component","g","prototype","tracked","i","constructor","owner","args","icon","imageSrc","assert","onDidUpdateImageSrc","_hasImage","n","action","onImageLoadError","text","undefined","size","join","includes","iconSize","hasChevron","classNames","classes","push","isOpen","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"icon.js","sources":["../../../../../src/components/hds/dropdown/toggle/icon.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 { tracked } from '@glimmer/tracking';\nimport {\n HdsDropdownToggleIconSizeValues,\n HdsDropdownToggleIconAllowedIconValues,\n} from './types.ts';\n\nimport type { HdsIconSignature } from '../../icon';\nimport type { HdsDropdownToggleIconSizes } from './types';\nimport type { ModifierLike } from '@glint/template';\nimport type { SetupPrimitiveToggleModifier } from '../../popover-primitive/index.ts';\nimport type Owner from '@ember/owner';\n\nexport const DEFAULT_SIZE = HdsDropdownToggleIconSizeValues.Medium;\nexport const SIZES: HdsDropdownToggleIconSizes[] = Object.values(\n HdsDropdownToggleIconSizeValues\n);\n\nexport const ALLOWED_ICON_LIST: HdsIconSignature['Args']['name'][] =\n Object.values(HdsDropdownToggleIconAllowedIconValues);\n\nexport interface HdsDropdownToggleIconSignature {\n Args: {\n hasChevron?: boolean;\n icon?: HdsIconSignature['Args']['name'];\n imageSrc?: string;\n isOpen?: boolean;\n size?: HdsDropdownToggleIconSizes;\n text: string;\n setupPrimitiveToggle?: ModifierLike<SetupPrimitiveToggleModifier>;\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsDropdownToggleIcon extends Component<HdsDropdownToggleIconSignature> {\n @tracked private _hasImage = true;\n\n constructor(owner: Owner, args: HdsDropdownToggleIconSignature['Args']) {\n super(owner, args);\n if (!(this.args.icon || this.args.imageSrc)) {\n assert(\n '@icon or @imageSrc must be defined for \"Hds::Dropdown::Toggle::Icon\"'\n );\n }\n }\n\n @action\n onDidUpdateImageSrc(): void {\n this._hasImage = true;\n }\n\n @action\n onImageLoadError(): void {\n this._hasImage = false;\n }\n\n /**\n * @param text\n * @type {string}\n * @description The text of the `aria-label` applied to the toggle\n */\n get text(): string {\n const { text } = this.args;\n\n assert(\n '@text for \"Hds::Dropdown::Toggle::Icon\" must have a valid value',\n text !== undefined\n );\n\n return text;\n }\n\n /**\n * @param size\n * @type {string}\n * @default medium\n * @description The size of the button; acceptable values are `small` and `medium`\n */\n get size(): HdsDropdownToggleIconSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Dropdown::Toggle::Icon\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n /**\n * @param iconSize\n * @type {string}\n * @default 24\n * @description ensures that the correct icon size is used\n */\n get iconSize(): HdsIconSignature['Args']['size'] {\n if (this.args.size === 'medium' && !this.hasChevron) {\n // in this special case we use a larger SVG\n return '24';\n } else {\n // this is the default size (notice: for the \"small\" variant with chevron, we set the actual size to `12px` via CSS)\n return '16';\n }\n }\n\n /**\n * Indicates if a dropdown chevron icon should be displayed; should be displayed unless the \"more-horizontal\" or \"more-vertical\" icons are used.\n *\n * @param hasChevron\n * @type {boolean}\n * @default true\n */\n get hasChevron(): boolean {\n if (\n this.args.icon &&\n !ALLOWED_ICON_LIST.includes(this.args.icon) &&\n this.args.hasChevron === false\n ) {\n assert(\n `@hasChevron for \"Hds::Dropdown::Toggle::Icon\" must be true unless the icon is one of the following: ${ALLOWED_ICON_LIST.join(\n ', '\n )}; received: ${this.args.icon}`\n );\n }\n\n return this.args.hasChevron ?? true;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method ToggleIcon#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-dropdown-toggle-icon'];\n\n // add a class based on the @size argument\n classes.push(`hds-dropdown-toggle-icon--size-${this.size}`);\n\n // add a class based on the @isOpen argument\n if (this.args.isOpen) {\n classes.push('hds-dropdown-toggle-icon--is-open');\n }\n\n // add a class based on the @hasChevron argument\n if (this.hasChevron) {\n classes.push('hds-dropdown-toggle-icon--has-chevron');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["DEFAULT_SIZE","HdsDropdownToggleIconSizeValues","Medium","SIZES","Object","values","ALLOWED_ICON_LIST","HdsDropdownToggleIconAllowedIconValues","HdsDropdownToggleIcon","Component","g","prototype","tracked","i","void 0","constructor","owner","args","icon","imageSrc","assert","onDidUpdateImageSrc","_hasImage","n","action","onImageLoadError","text","undefined","size","join","includes","iconSize","hasChevron","classNames","classes","push","isOpen","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/flyout/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 } from '@ember/debug';\nimport { getElementId } from '../../../utils/hds-get-element-id.ts';\nimport { buildWaiter } from '@ember/test-waiters';\nimport type { WithBoundArgs } from '@glint/template';\nimport { modifier } from 'ember-modifier';\n\nimport type { HdsFlyoutSizes } from './types.ts';\n\nimport { HdsFlyoutSizesValues } from './types.ts';\nimport HdsDialogPrimitiveBodyComponent from '../dialog-primitive/body.ts';\nimport HdsDialogPrimitiveDescriptionComponent from '../dialog-primitive/description.ts';\nimport HdsDialogPrimitiveFooterComponent from '../dialog-primitive/footer.ts';\nimport HdsDialogPrimitiveHeaderComponent from '../dialog-primitive/header.ts';\n\nconst waiter = buildWaiter('@hashicorp/design-system-components:flyout');\n\nexport const DEFAULT_SIZE = HdsFlyoutSizesValues.Medium;\nexport const DEFAULT_HAS_OVERLAY = true;\nexport const SIZES: HdsFlyoutSizes[] = Object.values(HdsFlyoutSizesValues);\n\nexport interface HdsFlyoutSignature {\n Args: {\n size?: HdsFlyoutSizes;\n returnFocusTo?: string;\n onOpen?: () => void;\n onClose?: (event: Event) => void;\n };\n Blocks: {\n default: [\n {\n Header?: WithBoundArgs<\n typeof HdsDialogPrimitiveHeaderComponent,\n 'id' | 'onDismiss' | 'contextualClassPrefix'\n >;\n Description?: WithBoundArgs<\n typeof HdsDialogPrimitiveDescriptionComponent,\n 'contextualClass'\n >;\n Body?: WithBoundArgs<\n typeof HdsDialogPrimitiveBodyComponent,\n 'contextualClass'\n >;\n Footer?: WithBoundArgs<\n typeof HdsDialogPrimitiveFooterComponent,\n 'onDismiss' | 'contextualClass'\n >;\n },\n ];\n };\n Element: HTMLDialogElement;\n}\n\nexport default class HdsFlyout extends Component<HdsFlyoutSignature> {\n @tracked private _isOpen = false;\n // TODO: make this property private; currently blocked by our consumers relying on it despite not being part of the public API: https://github.com/hashicorp/cloud-ui/blob/main/engines/waypoint/addon/components/preview-pane.ts#L15\n // private _element!: HTMLDialogElement;\n _element!: HTMLDialogElement;\n private _body!: HTMLElement;\n private _bodyInitialOverflowValue = '';\n\n get size(): HdsFlyoutSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Flyout\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n get id(): string {\n return getElementId(this);\n }\n\n get classNames(): string {\n const classes = ['hds-flyout'];\n\n // add a class based on the @size argument\n classes.push(`hds-flyout--size-${this.size}`);\n\n return classes.join(' ');\n }\n\n private _performCloseCleanup() {\n this._isOpen = false;\n\n // Reset page `overflow` property\n if (this._body) {\n this._body.style.removeProperty('overflow');\n if (this._bodyInitialOverflowValue === '') {\n if (this._body.style.length === 0) {\n this._body.removeAttribute('style');\n }\n } else {\n this._body.style.setProperty(\n 'overflow',\n this._bodyInitialOverflowValue\n );\n }\n }\n\n // Return focus to a specific element (if provided)\n if (this.args.returnFocusTo) {\n const initiator = document.getElementById(this.args.returnFocusTo);\n if (initiator) {\n initiator.focus();\n }\n }\n }\n\n private _registerDialog = modifier((element: HTMLDialogElement) => {\n // Store references of `<dialog>` and `<body>` elements\n this._element = element;\n this._body = document.body;\n\n if (this._body) {\n // Store the initial `overflow` value of `<body>` so we can reset to it\n this._bodyInitialOverflowValue =\n this._body.style.getPropertyValue('overflow');\n }\n\n // Register \"onClose\" callback function to be called when a native 'close' event is dispatched\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this._element.addEventListener('close', this.registerOnCloseCallback, true);\n\n // If the flyout dialog is not already open\n if (!this._element.open) {\n this.open();\n }\n\n return () => {\n // if the <dialog> is removed from the dom while open we emulate the close event\n if (this._isOpen) {\n this._performCloseCleanup();\n }\n\n this._element?.removeEventListener(\n 'close',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.registerOnCloseCallback,\n true\n );\n };\n });\n\n @action registerOnCloseCallback(event: Event) {\n if (this.args.onClose && typeof this.args.onClose === 'function') {\n this.args.onClose(event);\n }\n\n this._performCloseCleanup();\n }\n\n @action\n open(): void {\n // Make flyout dialog visible using the native `showModal` method\n this._element.showModal();\n this._isOpen = true;\n\n // Prevent page from scrolling when the dialog is open\n if (this._body) this._body.style.setProperty('overflow', 'hidden');\n\n // Call \"onOpen\" callback function\n if (this.args.onOpen && typeof this.args.onOpen === 'function') {\n this.args.onOpen();\n }\n }\n\n @action\n // eslint-disable-next-line @typescript-eslint/require-await\n async onDismiss(): Promise<void> {\n // allow ember test helpers to be aware of when the `close` event fires\n // when using `click` or other helpers from '@ember/test-helpers'\n if (this._element.open) {\n const token = waiter.beginAsync();\n const listener = () => {\n waiter.endAsync(token);\n this._element.removeEventListener('close', listener);\n };\n this._element.addEventListener('close', listener);\n }\n\n // Make flyout dialog invisible using the native `close` method\n this._element.close();\n }\n}\n"],"names":["waiter","buildWaiter","DEFAULT_SIZE","HdsFlyoutSizesValues","Medium","DEFAULT_HAS_OVERLAY","SIZES","Object","values","HdsFlyout","Component","g","prototype","tracked","i","_element","_body","_bodyInitialOverflowValue","size","args","assert","join","includes","id","getElementId","classNames","classes","push","_performCloseCleanup","_isOpen","style","removeProperty","length","removeAttribute","setProperty","returnFocusTo","initiator","document","getElementById","focus","_registerDialog","modifier","element","body","getPropertyValue","addEventListener","registerOnCloseCallback","open","removeEventListener","event","onClose","n","action","showModal","onOpen","onDismiss","token","beginAsync","listener","endAsync","close","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/flyout/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 } from '@ember/debug';\nimport { getElementId } from '../../../utils/hds-get-element-id.ts';\nimport { buildWaiter } from '@ember/test-waiters';\nimport type { WithBoundArgs } from '@glint/template';\nimport { modifier } from 'ember-modifier';\n\nimport type { HdsFlyoutSizes } from './types.ts';\n\nimport { HdsFlyoutSizesValues } from './types.ts';\nimport HdsDialogPrimitiveBodyComponent from '../dialog-primitive/body.ts';\nimport HdsDialogPrimitiveDescriptionComponent from '../dialog-primitive/description.ts';\nimport HdsDialogPrimitiveFooterComponent from '../dialog-primitive/footer.ts';\nimport HdsDialogPrimitiveHeaderComponent from '../dialog-primitive/header.ts';\n\nconst waiter = buildWaiter('@hashicorp/design-system-components:flyout');\n\nexport const DEFAULT_SIZE = HdsFlyoutSizesValues.Medium;\nexport const DEFAULT_HAS_OVERLAY = true;\nexport const SIZES: HdsFlyoutSizes[] = Object.values(HdsFlyoutSizesValues);\n\nexport interface HdsFlyoutSignature {\n Args: {\n size?: HdsFlyoutSizes;\n returnFocusTo?: string;\n onOpen?: () => void;\n onClose?: (event: Event) => void;\n };\n Blocks: {\n default: [\n {\n Header?: WithBoundArgs<\n typeof HdsDialogPrimitiveHeaderComponent,\n 'id' | 'onDismiss' | 'contextualClassPrefix'\n >;\n Description?: WithBoundArgs<\n typeof HdsDialogPrimitiveDescriptionComponent,\n 'contextualClass'\n >;\n Body?: WithBoundArgs<\n typeof HdsDialogPrimitiveBodyComponent,\n 'contextualClass'\n >;\n Footer?: WithBoundArgs<\n typeof HdsDialogPrimitiveFooterComponent,\n 'onDismiss' | 'contextualClass'\n >;\n },\n ];\n };\n Element: HTMLDialogElement;\n}\n\nexport default class HdsFlyout extends Component<HdsFlyoutSignature> {\n @tracked private _isOpen = false;\n // TODO: make this property private; currently blocked by our consumers relying on it despite not being part of the public API: https://github.com/hashicorp/cloud-ui/blob/main/engines/waypoint/addon/components/preview-pane.ts#L15\n // private _element!: HTMLDialogElement;\n _element!: HTMLDialogElement;\n private _body!: HTMLElement;\n private _bodyInitialOverflowValue = '';\n\n get size(): HdsFlyoutSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Flyout\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n get id(): string {\n return getElementId(this);\n }\n\n get classNames(): string {\n const classes = ['hds-flyout'];\n\n // add a class based on the @size argument\n classes.push(`hds-flyout--size-${this.size}`);\n\n return classes.join(' ');\n }\n\n private _performCloseCleanup() {\n this._isOpen = false;\n\n // Reset page `overflow` property\n if (this._body) {\n this._body.style.removeProperty('overflow');\n if (this._bodyInitialOverflowValue === '') {\n if (this._body.style.length === 0) {\n this._body.removeAttribute('style');\n }\n } else {\n this._body.style.setProperty(\n 'overflow',\n this._bodyInitialOverflowValue\n );\n }\n }\n\n // Return focus to a specific element (if provided)\n if (this.args.returnFocusTo) {\n const initiator = document.getElementById(this.args.returnFocusTo);\n if (initiator) {\n initiator.focus();\n }\n }\n }\n\n private _registerDialog = modifier((element: HTMLDialogElement) => {\n // Store references of `<dialog>` and `<body>` elements\n this._element = element;\n this._body = document.body;\n\n if (this._body) {\n // Store the initial `overflow` value of `<body>` so we can reset to it\n this._bodyInitialOverflowValue =\n this._body.style.getPropertyValue('overflow');\n }\n\n // Register \"onClose\" callback function to be called when a native 'close' event is dispatched\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this._element.addEventListener('close', this.registerOnCloseCallback, true);\n\n // If the flyout dialog is not already open\n if (!this._element.open) {\n this.open();\n }\n\n return () => {\n // if the <dialog> is removed from the dom while open we emulate the close event\n if (this._isOpen) {\n this._performCloseCleanup();\n }\n\n this._element?.removeEventListener(\n 'close',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.registerOnCloseCallback,\n true\n );\n };\n });\n\n @action registerOnCloseCallback(event: Event) {\n if (this.args.onClose && typeof this.args.onClose === 'function') {\n this.args.onClose(event);\n }\n\n this._performCloseCleanup();\n }\n\n @action\n open(): void {\n // Make flyout dialog visible using the native `showModal` method\n this._element.showModal();\n this._isOpen = true;\n\n // Prevent page from scrolling when the dialog is open\n if (this._body) this._body.style.setProperty('overflow', 'hidden');\n\n // Call \"onOpen\" callback function\n if (this.args.onOpen && typeof this.args.onOpen === 'function') {\n this.args.onOpen();\n }\n }\n\n @action\n // eslint-disable-next-line @typescript-eslint/require-await\n async onDismiss(): Promise<void> {\n // allow ember test helpers to be aware of when the `close` event fires\n // when using `click` or other helpers from '@ember/test-helpers'\n if (this._element.open) {\n const token = waiter.beginAsync();\n const listener = () => {\n waiter.endAsync(token);\n this._element.removeEventListener('close', listener);\n };\n this._element.addEventListener('close', listener);\n }\n\n // Make flyout dialog invisible using the native `close` method\n this._element.close();\n }\n}\n"],"names":["waiter","buildWaiter","DEFAULT_SIZE","HdsFlyoutSizesValues","Medium","DEFAULT_HAS_OVERLAY","SIZES","Object","values","HdsFlyout","Component","g","prototype","tracked","i","void 0","_element","_body","_bodyInitialOverflowValue","size","args","assert","join","includes","id","getElementId","classNames","classes","push","_performCloseCleanup","_isOpen","style","removeProperty","length","removeAttribute","setProperty","returnFocusTo","initiator","document","getElementById","focus","_registerDialog","modifier","element","body","getPropertyValue","addEventListener","registerOnCloseCallback","open","removeEventListener","event","onClose","n","action","showModal","onOpen","onDismiss","token","beginAsync","listener","endAsync","close","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/form/key-value-inputs/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport type { ComponentLike, WithBoundArgs } from '@glint/template';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { modifier } from 'ember-modifier';\n\nimport {\n ariaDescribedBy,\n registerAriaDescriptionElement,\n unregisterAriaDescriptionElement,\n} from '../../../../utils/hds-aria-described-by.ts';\nimport { guidFor } from '@ember/object/internals';\n\nimport HdsAlertComponent from '../../alert/index.ts';\nimport HdsFormErrorComponent from '../error/index.ts';\nimport HdsFormHelperTextComponent from '../helper-text/index.ts';\nimport HdsFormKeyValueInputsDeleteRowButtonComponent from './delete-row-button.ts';\nimport HdsFormKeyValueInputsFieldComponent from './field.ts';\nimport HdsFormKeyValueInputsGenericComponent from './generic.ts';\nimport HdsFormLegendComponent from '../legend/index.ts';\n\nimport type { AriaDescribedByComponent } from '../../../../utils/hds-aria-described-by.ts';\nimport type { HdsFormKeyValueInputsAddRowButtonSignature } from './add-row-button.ts';\nimport type { HdsYieldSignature } from '../../yield/index.ts';\n\nconst KEY_VALUE_INPUTS_FIELD_SELECTOR = '.hds-form-key-value-inputs__field';\nconst KEY_VALUE_INPUTS_GENERIC_SELECTOR =\n '.hds-form-key-value-inputs__generic-container';\nconst KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR =\n '.hds-form-key-value-inputs__row--first';\nconst KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR =\n '.hds-form-key-value-inputs__delete-row-button-container';\n\nexport interface HdsFormKeyValueInputsSignature<T = unknown> {\n Args: {\n data: Array<T>;\n extraAriaDescribedBy?: string;\n isOptional?: boolean;\n isRequired?: boolean;\n };\n Blocks: {\n header?: [\n {\n Legend?: WithBoundArgs<\n typeof HdsFormLegendComponent,\n 'contextualClass' | 'id' | 'isOptional' | 'isRequired'\n >;\n HelperText?: WithBoundArgs<\n typeof HdsFormHelperTextComponent,\n 'contextualClass' | 'controlId' | 'onInsert'\n >;\n Generic?: ComponentLike<HdsYieldSignature>;\n },\n ];\n row: [\n {\n Field?: WithBoundArgs<\n typeof HdsFormKeyValueInputsFieldComponent,\n 'onInsert' | 'onRemove' | 'rowIndex'\n >;\n Generic?: WithBoundArgs<\n typeof HdsFormKeyValueInputsGenericComponent,\n 'onInsert' | 'onRemove'\n >;\n DeleteRowButton?: WithBoundArgs<\n typeof HdsFormKeyValueInputsDeleteRowButtonComponent,\n 'onInsert' | 'onRemove' | 'returnFocusTo' | 'rowData' | 'rowIndex'\n >;\n rowData?: T;\n rowIndex?: number;\n },\n ];\n footer?: [\n {\n AddRowButton?: ComponentLike<HdsFormKeyValueInputsAddRowButtonSignature>;\n Alert?: WithBoundArgs<typeof HdsAlertComponent, 'color' | 'type'>;\n Error?: WithBoundArgs<\n typeof HdsFormErrorComponent,\n 'contextualClass' | 'controlId' | 'onInsert' | 'onRemove'\n >;\n },\n ];\n };\n Element: HTMLFieldSetElement;\n}\n\n// @ts-expect-error: decorator function return type 'ClassOf<AriaDescribedBy>' is not assignable to 'typeof HdsFormField'\n@ariaDescribedBy\nexport default class HdsFormKeyValueInputs<T = unknown> extends Component<\n HdsFormKeyValueInputsSignature<T>\n> {\n private _element!: HTMLFieldSetElement;\n @tracked _gridTemplateColumns = '';\n\n // this is not a specific DOM id, but a value that is used to \"glue\" together\n // different fieldsset-related elements (legend, helper text, error) with the fieldset itself\n get glueId(): string {\n return guidFor(this);\n }\n\n @action\n _setUpColumn(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateColumns();\n });\n }\n\n @action\n _removeColumn(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateColumns();\n });\n }\n\n @action\n appendDescriptor(element: HTMLElement): void {\n registerAriaDescriptionElement(this as AriaDescribedByComponent, element);\n }\n\n @action\n removeDescriptor(element: HTMLElement): void {\n unregisterAriaDescriptionElement(this as AriaDescribedByComponent, element);\n }\n\n private _setUpKeyValueInputs = modifier((element: HTMLFieldSetElement) => {\n this._element = element;\n });\n\n // Update the column array based on how they are ordered in the DOM\n private _updateColumns = () => {\n const columns = this._element\n .querySelector(KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR)\n ?.querySelectorAll(\n `${KEY_VALUE_INPUTS_FIELD_SELECTOR}, ${KEY_VALUE_INPUTS_GENERIC_SELECTOR}, ${KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR}`\n );\n\n let updatedGridTemplateColumns = '';\n\n columns?.forEach((column, index) => {\n const columnElement = column as HTMLElement;\n\n // FIELD\n\n if (\n // do substring to remove the leading dot from the class selector\n column.classList.contains(KEY_VALUE_INPUTS_FIELD_SELECTOR.substring(1))\n ) {\n if (columnElement.dataset['width']) {\n updatedGridTemplateColumns += `${columnElement.dataset['width']} `;\n } else {\n updatedGridTemplateColumns += '1fr ';\n }\n }\n\n // GENERIC\n\n if (\n // do substring to remove the leading dot from the class selector\n column.classList.contains(\n KEY_VALUE_INPUTS_GENERIC_SELECTOR.substring(1)\n )\n ) {\n updatedGridTemplateColumns += 'auto ';\n\n // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n columnElement.style.setProperty(\n '--hds-key-value-inputs-column-index',\n `${index + 1}`\n );\n }\n\n // DELETE BUTTON\n\n if (\n column.classList.contains(\n KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR.substring(1)\n )\n ) {\n // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n columnElement.style.setProperty(\n '--hds-key-value-inputs-column-index',\n `${index + 1}`\n );\n }\n });\n\n // we always set aside the space for the delete button (it's always the last element)\n // even when it's not rendered, to avoid layout shifts when moving to/from an empty state\n updatedGridTemplateColumns += '2.25rem ';\n\n this._gridTemplateColumns = updatedGridTemplateColumns;\n };\n}\n"],"names":["KEY_VALUE_INPUTS_FIELD_SELECTOR","KEY_VALUE_INPUTS_GENERIC_SELECTOR","KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR","KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR","HdsFormKeyValueInputs","c","Component","_element","g","prototype","tracked","i","glueId","guidFor","_setUpColumn","schedule","_updateColumns","n","action","_removeColumn","appendDescriptor","element","registerAriaDescriptionElement","removeDescriptor","unregisterAriaDescriptionElement","_setUpKeyValueInputs","modifier","columns","querySelector","querySelectorAll","updatedGridTemplateColumns","forEach","column","index","columnElement","classList","contains","substring","dataset","style","setProperty","_gridTemplateColumns","ariaDescribedBy","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/form/key-value-inputs/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport type { ComponentLike, WithBoundArgs } from '@glint/template';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { modifier } from 'ember-modifier';\n\nimport {\n ariaDescribedBy,\n registerAriaDescriptionElement,\n unregisterAriaDescriptionElement,\n} from '../../../../utils/hds-aria-described-by.ts';\nimport { guidFor } from '@ember/object/internals';\n\nimport HdsAlertComponent from '../../alert/index.ts';\nimport HdsFormErrorComponent from '../error/index.ts';\nimport HdsFormHelperTextComponent from '../helper-text/index.ts';\nimport HdsFormKeyValueInputsDeleteRowButtonComponent from './delete-row-button.ts';\nimport HdsFormKeyValueInputsFieldComponent from './field.ts';\nimport HdsFormKeyValueInputsGenericComponent from './generic.ts';\nimport HdsFormLegendComponent from '../legend/index.ts';\n\nimport type { AriaDescribedByComponent } from '../../../../utils/hds-aria-described-by.ts';\nimport type { HdsFormKeyValueInputsAddRowButtonSignature } from './add-row-button.ts';\nimport type { HdsYieldSignature } from '../../yield/index.ts';\n\nconst KEY_VALUE_INPUTS_FIELD_SELECTOR = '.hds-form-key-value-inputs__field';\nconst KEY_VALUE_INPUTS_GENERIC_SELECTOR =\n '.hds-form-key-value-inputs__generic-container';\nconst KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR =\n '.hds-form-key-value-inputs__row--first';\nconst KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR =\n '.hds-form-key-value-inputs__delete-row-button-container';\n\nexport interface HdsFormKeyValueInputsSignature<T = unknown> {\n Args: {\n data: Array<T>;\n extraAriaDescribedBy?: string;\n isOptional?: boolean;\n isRequired?: boolean;\n };\n Blocks: {\n header?: [\n {\n Legend?: WithBoundArgs<\n typeof HdsFormLegendComponent,\n 'contextualClass' | 'id' | 'isOptional' | 'isRequired'\n >;\n HelperText?: WithBoundArgs<\n typeof HdsFormHelperTextComponent,\n 'contextualClass' | 'controlId' | 'onInsert'\n >;\n Generic?: ComponentLike<HdsYieldSignature>;\n },\n ];\n row: [\n {\n Field?: WithBoundArgs<\n typeof HdsFormKeyValueInputsFieldComponent,\n 'onInsert' | 'onRemove' | 'rowIndex'\n >;\n Generic?: WithBoundArgs<\n typeof HdsFormKeyValueInputsGenericComponent,\n 'onInsert' | 'onRemove'\n >;\n DeleteRowButton?: WithBoundArgs<\n typeof HdsFormKeyValueInputsDeleteRowButtonComponent,\n 'onInsert' | 'onRemove' | 'returnFocusTo' | 'rowData' | 'rowIndex'\n >;\n rowData?: T;\n rowIndex?: number;\n },\n ];\n footer?: [\n {\n AddRowButton?: ComponentLike<HdsFormKeyValueInputsAddRowButtonSignature>;\n Alert?: WithBoundArgs<typeof HdsAlertComponent, 'color' | 'type'>;\n Error?: WithBoundArgs<\n typeof HdsFormErrorComponent,\n 'contextualClass' | 'controlId' | 'onInsert' | 'onRemove'\n >;\n },\n ];\n };\n Element: HTMLFieldSetElement;\n}\n\n// @ts-expect-error: decorator function return type 'ClassOf<AriaDescribedBy>' is not assignable to 'typeof HdsFormField'\n@ariaDescribedBy\nexport default class HdsFormKeyValueInputs<T = unknown> extends Component<\n HdsFormKeyValueInputsSignature<T>\n> {\n private _element!: HTMLFieldSetElement;\n @tracked _gridTemplateColumns = '';\n\n // this is not a specific DOM id, but a value that is used to \"glue\" together\n // different fieldsset-related elements (legend, helper text, error) with the fieldset itself\n get glueId(): string {\n return guidFor(this);\n }\n\n @action\n _setUpColumn(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateColumns();\n });\n }\n\n @action\n _removeColumn(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateColumns();\n });\n }\n\n @action\n appendDescriptor(element: HTMLElement): void {\n registerAriaDescriptionElement(this as AriaDescribedByComponent, element);\n }\n\n @action\n removeDescriptor(element: HTMLElement): void {\n unregisterAriaDescriptionElement(this as AriaDescribedByComponent, element);\n }\n\n private _setUpKeyValueInputs = modifier((element: HTMLFieldSetElement) => {\n this._element = element;\n });\n\n // Update the column array based on how they are ordered in the DOM\n private _updateColumns = () => {\n const columns = this._element\n .querySelector(KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR)\n ?.querySelectorAll(\n `${KEY_VALUE_INPUTS_FIELD_SELECTOR}, ${KEY_VALUE_INPUTS_GENERIC_SELECTOR}, ${KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR}`\n );\n\n let updatedGridTemplateColumns = '';\n\n columns?.forEach((column, index) => {\n const columnElement = column as HTMLElement;\n\n // FIELD\n\n if (\n // do substring to remove the leading dot from the class selector\n column.classList.contains(KEY_VALUE_INPUTS_FIELD_SELECTOR.substring(1))\n ) {\n if (columnElement.dataset['width']) {\n updatedGridTemplateColumns += `${columnElement.dataset['width']} `;\n } else {\n updatedGridTemplateColumns += '1fr ';\n }\n }\n\n // GENERIC\n\n if (\n // do substring to remove the leading dot from the class selector\n column.classList.contains(\n KEY_VALUE_INPUTS_GENERIC_SELECTOR.substring(1)\n )\n ) {\n updatedGridTemplateColumns += 'auto ';\n\n // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n columnElement.style.setProperty(\n '--hds-key-value-inputs-column-index',\n `${index + 1}`\n );\n }\n\n // DELETE BUTTON\n\n if (\n column.classList.contains(\n KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR.substring(1)\n )\n ) {\n // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n columnElement.style.setProperty(\n '--hds-key-value-inputs-column-index',\n `${index + 1}`\n );\n }\n });\n\n // we always set aside the space for the delete button (it's always the last element)\n // even when it's not rendered, to avoid layout shifts when moving to/from an empty state\n updatedGridTemplateColumns += '2.25rem ';\n\n this._gridTemplateColumns = updatedGridTemplateColumns;\n };\n}\n"],"names":["KEY_VALUE_INPUTS_FIELD_SELECTOR","KEY_VALUE_INPUTS_GENERIC_SELECTOR","KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR","KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR","HdsFormKeyValueInputs","c","Component","_element","g","prototype","tracked","i","void 0","glueId","guidFor","_setUpColumn","schedule","_updateColumns","n","action","_removeColumn","appendDescriptor","element","registerAriaDescriptionElement","removeDescriptor","unregisterAriaDescriptionElement","_setUpKeyValueInputs","modifier","columns","querySelector","querySelectorAll","updatedGridTemplateColumns","forEach","column","index","columnElement","classList","contains","substring","dataset","style","setProperty","_gridTemplateColumns","ariaDescribedBy","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sources":["../../../../../src/components/hds/form/masked-input/base.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 { service } from '@ember/service';\nimport { modifier } from 'ember-modifier';\n\nimport { getElementId } from '../../../../utils/hds-get-element-id.ts';\nimport type { HdsCopyButtonSignature } from '../../copy/button/index.ts';\nimport type { HdsFormVisibilityToggleSignature } from '../visibility-toggle/index.ts';\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\n\nexport interface HdsFormMaskedInputBaseSignature {\n Args: {\n copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n hasCopyButton?: boolean;\n isContentMasked?: boolean;\n isInvalid?: boolean;\n isMultiline?: boolean;\n id?: string;\n value?: string;\n visibilityToggleAriaLabel?: HdsFormVisibilityToggleSignature['Args']['ariaLabel'];\n visibilityToggleAriaMessageText?: HdsFormVisibilityToggleSignature['Args']['ariaMessageText'];\n width?: string;\n height?: string;\n ariaDescribedBy?: string;\n };\n Element: HTMLElement;\n}\n\nexport default class HdsFormMaskedInputBase extends Component<HdsFormMaskedInputBaseSignature> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked _isContentMasked = true;\n @tracked private _isControlled = this.args.isContentMasked !== undefined;\n\n get isContentMasked(): boolean {\n if (this._isControlled) {\n // if the state is controlled from outside, the argument overrides the internal state\n return this.args.isContentMasked ?? this._isContentMasked;\n } else {\n // if the state changes internally, the internal state overrides the argument\n return this._isContentMasked;\n }\n }\n\n set isContentMasked(value) {\n this._isContentMasked = value || false;\n }\n\n @action\n onClickToggleMasking(): void {\n this.isContentMasked = !this.isContentMasked;\n this._isControlled = false;\n }\n\n private _manageState = modifier(() => {\n if (this.args.isContentMasked !== undefined) {\n this.isContentMasked = this.args.isContentMasked;\n }\n this._isControlled = true;\n\n return () => {};\n });\n\n get id(): string {\n return getElementId(this);\n }\n\n get visibilityToggleAriaLabel(): string {\n if (this.args.visibilityToggleAriaLabel) {\n return this.args.visibilityToggleAriaLabel;\n } else if (this.isContentMasked) {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.show-masked-content',\n {\n default: 'Show masked content',\n }\n );\n } else {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.hide-masked-content',\n {\n default: 'Hide masked content',\n }\n );\n }\n }\n\n get visibilityToggleAriaMessageText(): string {\n if (this.args.visibilityToggleAriaMessageText) {\n return this.args.visibilityToggleAriaMessageText;\n } else if (this.isContentMasked) {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.input-content-is-hidden',\n {\n default: 'Input content is hidden',\n }\n );\n } else {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.input-content-is-visible',\n {\n default: 'Input content is visible',\n }\n );\n }\n }\n\n get copyButtonText(): string {\n if (this.args.copyButtonText) {\n return this.args.copyButtonText;\n } else {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.copy-masked-content',\n {\n default: 'Copy masked content',\n }\n );\n }\n }\n\n get classNames(): string {\n const classes = ['hds-form-masked-input'];\n\n if (this.isContentMasked) {\n classes.push(`hds-form-masked-input--is-masked`);\n } else {\n classes.push(`hds-form-masked-input--is-not-masked`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["HdsFormMaskedInputBase","Component","g","prototype","service","i","tracked","args","isContentMasked","undefined","_isControlled","_isContentMasked","value","onClickToggleMasking","n","action","_manageState","modifier","id","getElementId","visibilityToggleAriaLabel","hdsIntl","t","default","visibilityToggleAriaMessageText","copyButtonText","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sources":["../../../../../src/components/hds/form/masked-input/base.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 { service } from '@ember/service';\nimport { modifier } from 'ember-modifier';\n\nimport { getElementId } from '../../../../utils/hds-get-element-id.ts';\nimport type { HdsCopyButtonSignature } from '../../copy/button/index.ts';\nimport type { HdsFormVisibilityToggleSignature } from '../visibility-toggle/index.ts';\nimport type HdsIntlService from '../../../../services/hds-intl.ts';\n\nexport interface HdsFormMaskedInputBaseSignature {\n Args: {\n copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n hasCopyButton?: boolean;\n isContentMasked?: boolean;\n isInvalid?: boolean;\n isMultiline?: boolean;\n id?: string;\n value?: string;\n visibilityToggleAriaLabel?: HdsFormVisibilityToggleSignature['Args']['ariaLabel'];\n visibilityToggleAriaMessageText?: HdsFormVisibilityToggleSignature['Args']['ariaMessageText'];\n width?: string;\n height?: string;\n ariaDescribedBy?: string;\n };\n Element: HTMLElement;\n}\n\nexport default class HdsFormMaskedInputBase extends Component<HdsFormMaskedInputBaseSignature> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked _isContentMasked = true;\n @tracked private _isControlled = this.args.isContentMasked !== undefined;\n\n get isContentMasked(): boolean {\n if (this._isControlled) {\n // if the state is controlled from outside, the argument overrides the internal state\n return this.args.isContentMasked ?? this._isContentMasked;\n } else {\n // if the state changes internally, the internal state overrides the argument\n return this._isContentMasked;\n }\n }\n\n set isContentMasked(value) {\n this._isContentMasked = value || false;\n }\n\n @action\n onClickToggleMasking(): void {\n this.isContentMasked = !this.isContentMasked;\n this._isControlled = false;\n }\n\n private _manageState = modifier(() => {\n if (this.args.isContentMasked !== undefined) {\n this.isContentMasked = this.args.isContentMasked;\n }\n this._isControlled = true;\n\n return () => {};\n });\n\n get id(): string {\n return getElementId(this);\n }\n\n get visibilityToggleAriaLabel(): string {\n if (this.args.visibilityToggleAriaLabel) {\n return this.args.visibilityToggleAriaLabel;\n } else if (this.isContentMasked) {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.show-masked-content',\n {\n default: 'Show masked content',\n }\n );\n } else {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.hide-masked-content',\n {\n default: 'Hide masked content',\n }\n );\n }\n }\n\n get visibilityToggleAriaMessageText(): string {\n if (this.args.visibilityToggleAriaMessageText) {\n return this.args.visibilityToggleAriaMessageText;\n } else if (this.isContentMasked) {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.input-content-is-hidden',\n {\n default: 'Input content is hidden',\n }\n );\n } else {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.input-content-is-visible',\n {\n default: 'Input content is visible',\n }\n );\n }\n }\n\n get copyButtonText(): string {\n if (this.args.copyButtonText) {\n return this.args.copyButtonText;\n } else {\n return this.hdsIntl.t(\n 'hds.components.form.masked-input.base.copy-masked-content',\n {\n default: 'Copy masked content',\n }\n );\n }\n }\n\n get classNames(): string {\n const classes = ['hds-form-masked-input'];\n\n if (this.isContentMasked) {\n classes.push(`hds-form-masked-input--is-masked`);\n } else {\n classes.push(`hds-form-masked-input--is-not-masked`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["HdsFormMaskedInputBase","Component","g","prototype","service","i","void 0","tracked","args","isContentMasked","undefined","_isControlled","_isContentMasked","value","onClickToggleMasking","n","action","_manageState","modifier","id","getElementId","visibilityToggleAriaLabel","hdsIntl","t","default","visibilityToggleAriaMessageText","copyButtonText","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sources":["../../../../../../src/components/hds/form/super-select/multiple/base.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport anchoredPositionModifier from '../../../../../modifiers/hds-anchored-position.ts';\n\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsFormSuperSelectHorizontalPositionValues,\n HdsFormSuperSelectHorizontalPositionToPlacementValues,\n} from '../types.ts';\n\nimport type { PowerSelectSignature } from 'ember-power-select/components/power-select';\nimport type { Select as PowerSelect } from 'ember-power-select/components/power-select';\nimport type { CalculatePositionResult } from 'ember-basic-dropdown/utils/calculate-position';\nimport type { HdsFormSuperSelectHorizontalPositions } from '../types.ts';\n\nexport const DEFAULT_HORIZONTAL_POSITION: string =\n HdsFormSuperSelectHorizontalPositionValues.Left;\nexport const HORIZONTAL_POSITION_MAPPING =\n HdsFormSuperSelectHorizontalPositionToPlacementValues;\n\nexport interface HdsFormSuperSelectMultipleBaseSignature {\n Args: Omit<PowerSelectSignature['Args'], 'resultCountMessage'> & {\n showAfterOptions?: boolean;\n afterOptionsContent?: string;\n resultCountMessage?:\n | string\n | PowerSelectSignature['Args']['resultCountMessage'];\n dropdownMaxWidth?: string;\n matchTriggerWidth?: boolean;\n isInvalid?: boolean;\n };\n Blocks: PowerSelectSignature['Blocks'];\n Element: PowerSelectSignature['Element'];\n}\n\nexport default class HdsFormSuperSelectMultipleBase extends Component<HdsFormSuperSelectMultipleBaseSignature> {\n @tracked private _powerSelectAPI?: PowerSelect;\n @tracked private _showOnlySelected = false;\n @tracked private _showNoSelectedMessage = false;\n\n get horizontalPosition(): HdsFormSuperSelectHorizontalPositions {\n const { horizontalPosition = DEFAULT_HORIZONTAL_POSITION } = this.args;\n return horizontalPosition as HdsFormSuperSelectHorizontalPositions;\n }\n\n get selectedCount(): string {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return this._powerSelectAPI?.selected?.length || '0';\n }\n\n get optionsCount(): string {\n return this._powerSelectAPI?.resultsCount.toString() || '0';\n }\n\n get resultCountMessageText(): string {\n if (typeof this.args.resultCountMessage === 'string') {\n return this.args.resultCountMessage;\n }\n\n return `${this.optionsCount} total`;\n }\n\n get resultCountMessageFunction(): PowerSelectSignature['Args']['resultCountMessage'] {\n if (typeof this.args.resultCountMessage === 'function') {\n return this.args.resultCountMessage;\n }\n\n return undefined;\n }\n\n @action calculatePosition(\n trigger: Element,\n content: HTMLElement\n ): CalculatePositionResult {\n // use `hds-anchored-position` to calculate and set position\n // @ts-expect-error: known issue with type of invocation\n anchoredPositionModifier(content, [trigger], {\n placement: HORIZONTAL_POSITION_MAPPING[this.horizontalPosition],\n offsetOptions: 4,\n enableCollisionDetection: true,\n });\n // prevent PowerSelect from setting position\n return {\n horizontalPosition: 'auto',\n verticalPosition: 'auto',\n style: {},\n };\n }\n\n /**\n * This action sets the powerSelectAPI property and optionally calls a registerAPI function.\n *\n * @param {Object} powerSelectAPI - The API object for the PowerSelect component.\n *\n * If a `registerAPI` function is passed in through the component's arguments,\n * this function will be called with the `powerSelectAPI` as its argument.\n * This allows parent components or controllers to have access to the PowerSelect API.\n *\n * The `powerSelectAPI` is also stored on the component instance and used in `clearSelected`\n */\n @action\n setPowerSelectAPI(powerSelectAPI: PowerSelect): void {\n if (typeof this.args.registerAPI === 'function') {\n this.args.registerAPI(powerSelectAPI);\n }\n this._powerSelectAPI = powerSelectAPI;\n }\n\n @action showSelected(): void {\n this._showNoSelectedMessage = this.selectedCount === '0';\n this._showOnlySelected = true;\n }\n\n @action showAll(): void {\n this._showNoSelectedMessage = false;\n this._showOnlySelected = false;\n }\n\n @action clearSelected(): void {\n this._powerSelectAPI?.actions.select(null);\n // show all options after clearing all selection\n this._showNoSelectedMessage = false;\n this._showOnlySelected = false;\n }\n\n get showAfterOptions(): boolean {\n return this.args.showAfterOptions ?? true;\n }\n\n // NOTE: The searchPlaceholder doesn't currently work for the multiple select\n get searchPlaceholder(): string {\n return this.args.searchPlaceholder ?? 'Search';\n }\n\n get styles(): Record<string, string> {\n const styles: { [key: string]: string } = {};\n\n if (this.args.dropdownMaxWidth) {\n styles['--hds-form-super-select-dropdown-max-width'] =\n this.args.dropdownMaxWidth;\n }\n\n if (this.selectedCount === '0') {\n styles['--hds-form-super-select-selected-text-display'] = 'none';\n } else {\n styles['--hds-form-super-select-selected-text-display'] = 'flex';\n }\n\n styles['--hds-form-super-select-selected-text'] =\n `'${this.selectedCount} selected'`;\n\n return styles;\n }\n\n get classNames(): string {\n const classes = ['hds-form-super-select', 'hds-form-super-select-multiple'];\n\n // add a class based on the @matchTriggerWidth argument or whether dropdownMaxWidth is set\n if (this.args.matchTriggerWidth === false || this.args.dropdownMaxWidth) {\n classes.push('hds-form-super-select--dropdown-content-auto-width');\n }\n\n // add a class based on the @isInvalid argument\n if (this.args.isInvalid) {\n classes.push(`hds-form-super-select--is-invalid`);\n }\n\n // add a class based on the showOnlySelected\n if (this._showOnlySelected) {\n classes.push(`hds-form-super-select--show-only-selected`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["DEFAULT_HORIZONTAL_POSITION","HdsFormSuperSelectHorizontalPositionValues","Left","HORIZONTAL_POSITION_MAPPING","HdsFormSuperSelectHorizontalPositionToPlacementValues","HdsFormSuperSelectMultipleBase","Component","g","prototype","tracked","i","horizontalPosition","args","selectedCount","_powerSelectAPI","selected","length","optionsCount","resultsCount","toString","resultCountMessageText","resultCountMessage","resultCountMessageFunction","undefined","calculatePosition","trigger","content","anchoredPositionModifier","placement","offsetOptions","enableCollisionDetection","verticalPosition","style","n","action","setPowerSelectAPI","powerSelectAPI","registerAPI","showSelected","_showNoSelectedMessage","_showOnlySelected","showAll","clearSelected","actions","select","showAfterOptions","searchPlaceholder","styles","dropdownMaxWidth","classNames","classes","matchTriggerWidth","push","isInvalid","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sources":["../../../../../../src/components/hds/form/super-select/multiple/base.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport anchoredPositionModifier from '../../../../../modifiers/hds-anchored-position.ts';\n\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsFormSuperSelectHorizontalPositionValues,\n HdsFormSuperSelectHorizontalPositionToPlacementValues,\n} from '../types.ts';\n\nimport type { PowerSelectSignature } from 'ember-power-select/components/power-select';\nimport type { Select as PowerSelect } from 'ember-power-select/components/power-select';\nimport type { CalculatePositionResult } from 'ember-basic-dropdown/utils/calculate-position';\nimport type { HdsFormSuperSelectHorizontalPositions } from '../types.ts';\n\nexport const DEFAULT_HORIZONTAL_POSITION: string =\n HdsFormSuperSelectHorizontalPositionValues.Left;\nexport const HORIZONTAL_POSITION_MAPPING =\n HdsFormSuperSelectHorizontalPositionToPlacementValues;\n\nexport interface HdsFormSuperSelectMultipleBaseSignature {\n Args: Omit<PowerSelectSignature['Args'], 'resultCountMessage'> & {\n showAfterOptions?: boolean;\n afterOptionsContent?: string;\n resultCountMessage?:\n | string\n | PowerSelectSignature['Args']['resultCountMessage'];\n dropdownMaxWidth?: string;\n matchTriggerWidth?: boolean;\n isInvalid?: boolean;\n };\n Blocks: PowerSelectSignature['Blocks'];\n Element: PowerSelectSignature['Element'];\n}\n\nexport default class HdsFormSuperSelectMultipleBase extends Component<HdsFormSuperSelectMultipleBaseSignature> {\n @tracked private _powerSelectAPI?: PowerSelect;\n @tracked private _showOnlySelected = false;\n @tracked private _showNoSelectedMessage = false;\n\n get horizontalPosition(): HdsFormSuperSelectHorizontalPositions {\n const { horizontalPosition = DEFAULT_HORIZONTAL_POSITION } = this.args;\n return horizontalPosition as HdsFormSuperSelectHorizontalPositions;\n }\n\n get selectedCount(): string {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return this._powerSelectAPI?.selected?.length || '0';\n }\n\n get optionsCount(): string {\n return this._powerSelectAPI?.resultsCount.toString() || '0';\n }\n\n get resultCountMessageText(): string {\n if (typeof this.args.resultCountMessage === 'string') {\n return this.args.resultCountMessage;\n }\n\n return `${this.optionsCount} total`;\n }\n\n get resultCountMessageFunction(): PowerSelectSignature['Args']['resultCountMessage'] {\n if (typeof this.args.resultCountMessage === 'function') {\n return this.args.resultCountMessage;\n }\n\n return undefined;\n }\n\n @action calculatePosition(\n trigger: Element,\n content: HTMLElement\n ): CalculatePositionResult {\n // use `hds-anchored-position` to calculate and set position\n // @ts-expect-error: known issue with type of invocation\n anchoredPositionModifier(content, [trigger], {\n placement: HORIZONTAL_POSITION_MAPPING[this.horizontalPosition],\n offsetOptions: 4,\n enableCollisionDetection: true,\n });\n // prevent PowerSelect from setting position\n return {\n horizontalPosition: 'auto',\n verticalPosition: 'auto',\n style: {},\n };\n }\n\n /**\n * This action sets the powerSelectAPI property and optionally calls a registerAPI function.\n *\n * @param {Object} powerSelectAPI - The API object for the PowerSelect component.\n *\n * If a `registerAPI` function is passed in through the component's arguments,\n * this function will be called with the `powerSelectAPI` as its argument.\n * This allows parent components or controllers to have access to the PowerSelect API.\n *\n * The `powerSelectAPI` is also stored on the component instance and used in `clearSelected`\n */\n @action\n setPowerSelectAPI(powerSelectAPI: PowerSelect): void {\n if (typeof this.args.registerAPI === 'function') {\n this.args.registerAPI(powerSelectAPI);\n }\n this._powerSelectAPI = powerSelectAPI;\n }\n\n @action showSelected(): void {\n this._showNoSelectedMessage = this.selectedCount === '0';\n this._showOnlySelected = true;\n }\n\n @action showAll(): void {\n this._showNoSelectedMessage = false;\n this._showOnlySelected = false;\n }\n\n @action clearSelected(): void {\n this._powerSelectAPI?.actions.select(null);\n // show all options after clearing all selection\n this._showNoSelectedMessage = false;\n this._showOnlySelected = false;\n }\n\n get showAfterOptions(): boolean {\n return this.args.showAfterOptions ?? true;\n }\n\n // NOTE: The searchPlaceholder doesn't currently work for the multiple select\n get searchPlaceholder(): string {\n return this.args.searchPlaceholder ?? 'Search';\n }\n\n get styles(): Record<string, string> {\n const styles: { [key: string]: string } = {};\n\n if (this.args.dropdownMaxWidth) {\n styles['--hds-form-super-select-dropdown-max-width'] =\n this.args.dropdownMaxWidth;\n }\n\n if (this.selectedCount === '0') {\n styles['--hds-form-super-select-selected-text-display'] = 'none';\n } else {\n styles['--hds-form-super-select-selected-text-display'] = 'flex';\n }\n\n styles['--hds-form-super-select-selected-text'] =\n `'${this.selectedCount} selected'`;\n\n return styles;\n }\n\n get classNames(): string {\n const classes = ['hds-form-super-select', 'hds-form-super-select-multiple'];\n\n // add a class based on the @matchTriggerWidth argument or whether dropdownMaxWidth is set\n if (this.args.matchTriggerWidth === false || this.args.dropdownMaxWidth) {\n classes.push('hds-form-super-select--dropdown-content-auto-width');\n }\n\n // add a class based on the @isInvalid argument\n if (this.args.isInvalid) {\n classes.push(`hds-form-super-select--is-invalid`);\n }\n\n // add a class based on the showOnlySelected\n if (this._showOnlySelected) {\n classes.push(`hds-form-super-select--show-only-selected`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["DEFAULT_HORIZONTAL_POSITION","HdsFormSuperSelectHorizontalPositionValues","Left","HORIZONTAL_POSITION_MAPPING","HdsFormSuperSelectHorizontalPositionToPlacementValues","HdsFormSuperSelectMultipleBase","Component","g","prototype","tracked","i","void 0","horizontalPosition","args","selectedCount","_powerSelectAPI","selected","length","optionsCount","resultsCount","toString","resultCountMessageText","resultCountMessage","resultCountMessageFunction","undefined","calculatePosition","trigger","content","anchoredPositionModifier","placement","offsetOptions","enableCollisionDetection","verticalPosition","style","n","action","setPowerSelectAPI","powerSelectAPI","registerAPI","showSelected","_showNoSelectedMessage","_showOnlySelected","showAll","clearSelected","actions","select","showAfterOptions","searchPlaceholder","styles","dropdownMaxWidth","classNames","classes","matchTriggerWidth","push","isInvalid","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sources":["../../../../../../src/components/hds/form/super-select/single/base.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport anchoredPositionModifier from '../../../../../modifiers/hds-anchored-position.ts';\n\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsFormSuperSelectHorizontalPositionValues,\n HdsFormSuperSelectHorizontalPositionToPlacementValues,\n} from '../types.ts';\n\nimport type { PowerSelectSignature } from 'ember-power-select/components/power-select';\nimport type { Select as PowerSelect } from 'ember-power-select/components/power-select';\nimport type { CalculatePositionResult } from 'ember-basic-dropdown/utils/calculate-position';\nimport type { HdsFormSuperSelectHorizontalPositions } from '../types.ts';\n\nexport const DEFAULT_HORIZONTAL_POSITION: string =\n HdsFormSuperSelectHorizontalPositionValues.Left;\nexport const HORIZONTAL_POSITION_MAPPING =\n HdsFormSuperSelectHorizontalPositionToPlacementValues;\n\nexport interface HdsFormSuperSelectSingleBaseSignature {\n Args: Omit<PowerSelectSignature['Args'], 'resultCountMessage'> & {\n showAfterOptions?: boolean;\n afterOptionsContent?: string;\n resultCountMessage?:\n | string\n | PowerSelectSignature['Args']['resultCountMessage'];\n dropdownMaxWidth?: string;\n matchTriggerWidth?: boolean;\n isInvalid?: boolean;\n };\n Blocks: PowerSelectSignature['Blocks'];\n Element: PowerSelectSignature['Element'];\n}\n\nexport default class HdsFormSuperSelectSingleBase extends Component<HdsFormSuperSelectSingleBaseSignature> {\n @tracked powerSelectAPI?: PowerSelect;\n\n get horizontalPosition(): HdsFormSuperSelectHorizontalPositions {\n const { horizontalPosition = DEFAULT_HORIZONTAL_POSITION } = this.args;\n return horizontalPosition as HdsFormSuperSelectHorizontalPositions;\n }\n\n get resultCountMessageText(): string {\n if (typeof this.args.resultCountMessage === 'string') {\n return this.args.resultCountMessage;\n }\n\n return `${this.powerSelectAPI?.resultsCount || 0} total`;\n }\n\n get resultCountMessageFunction(): PowerSelectSignature['Args']['resultCountMessage'] {\n if (typeof this.args.resultCountMessage === 'function') {\n return this.args.resultCountMessage;\n }\n\n return undefined;\n }\n\n /**\n * This action sets the powerSelectAPI property and optionally calls a registerAPI function.\n *\n * @param {Object} powerSelectAPI - The API object for the PowerSelect component.\n *\n * If a `registerAPI` function is passed in through the component's arguments,\n * this function will be called with the `powerSelectAPI` as its argument.\n * This allows parent components or controllers to have access to the PowerSelect API.\n *\n * The `powerSelectAPI` is also stored on the component instance and used in `clearSelected`\n */\n @action\n setPowerSelectAPI(powerSelectAPI: PowerSelect): void {\n if (typeof this.args.registerAPI === 'function') {\n this.args.registerAPI(powerSelectAPI);\n }\n this.powerSelectAPI = powerSelectAPI;\n }\n\n @action calculatePosition(\n trigger: Element,\n content: HTMLElement\n ): CalculatePositionResult {\n // use `hds-anchored-position` to calculate and set position\n // @ts-expect-error: known issue with type of invocation\n anchoredPositionModifier(content, [trigger], {\n placement: HORIZONTAL_POSITION_MAPPING[this.horizontalPosition],\n offsetOptions: 4,\n enableCollisionDetection: true,\n });\n // prevent PowerSelect from setting position\n return {\n horizontalPosition: 'auto',\n verticalPosition: 'auto',\n style: {},\n };\n }\n\n /**\n * Determine if `@afterOptionsComponent` gets displayed\n * @param showAfterOptions\n * @type {boolean}\n * @default false\n */\n get showAfterOptions(): boolean | string {\n return this.args.showAfterOptions ?? this.args.afterOptionsContent ?? false;\n }\n\n /**\n * Get the search placeholder text\n * @param searchPlaceholder\n * @type {string}\n * @default 'Search'\n */\n get searchPlaceholder(): string {\n return this.args.searchPlaceholder ?? 'Search';\n }\n\n /**\n * Get the maxWidth to apply to the dropdown\n * @param dropdownMaxWidth\n * @type {string}\n * @default 'none'\n */\n get dropdownMaxWidthStyle(): Record<string, string> {\n const maxWidthStyle: { [key: string]: string } = {};\n if (this.args.dropdownMaxWidth) {\n maxWidthStyle['--hds-form-super-select-dropdown-max-width'] =\n this.args.dropdownMaxWidth;\n }\n return maxWidthStyle;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-form-super-select', 'hds-form-super-select-single'];\n\n // add a class based on the @matchTriggerWidth argument or whether dropdownMaxWidth is set\n if (this.args.matchTriggerWidth === false || this.args.dropdownMaxWidth) {\n classes.push('hds-form-super-select--dropdown-content-auto-width');\n }\n\n // add a class based on the @isInvalid argument\n if (this.args.isInvalid) {\n classes.push(`hds-form-super-select--is-invalid`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["DEFAULT_HORIZONTAL_POSITION","HdsFormSuperSelectHorizontalPositionValues","Left","HORIZONTAL_POSITION_MAPPING","HdsFormSuperSelectHorizontalPositionToPlacementValues","HdsFormSuperSelectSingleBase","Component","g","prototype","tracked","i","horizontalPosition","args","resultCountMessageText","resultCountMessage","powerSelectAPI","resultsCount","resultCountMessageFunction","undefined","setPowerSelectAPI","registerAPI","n","action","calculatePosition","trigger","content","anchoredPositionModifier","placement","offsetOptions","enableCollisionDetection","verticalPosition","style","showAfterOptions","afterOptionsContent","searchPlaceholder","dropdownMaxWidthStyle","maxWidthStyle","dropdownMaxWidth","classNames","classes","matchTriggerWidth","push","isInvalid","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sources":["../../../../../../src/components/hds/form/super-select/single/base.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport anchoredPositionModifier from '../../../../../modifiers/hds-anchored-position.ts';\n\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsFormSuperSelectHorizontalPositionValues,\n HdsFormSuperSelectHorizontalPositionToPlacementValues,\n} from '../types.ts';\n\nimport type { PowerSelectSignature } from 'ember-power-select/components/power-select';\nimport type { Select as PowerSelect } from 'ember-power-select/components/power-select';\nimport type { CalculatePositionResult } from 'ember-basic-dropdown/utils/calculate-position';\nimport type { HdsFormSuperSelectHorizontalPositions } from '../types.ts';\n\nexport const DEFAULT_HORIZONTAL_POSITION: string =\n HdsFormSuperSelectHorizontalPositionValues.Left;\nexport const HORIZONTAL_POSITION_MAPPING =\n HdsFormSuperSelectHorizontalPositionToPlacementValues;\n\nexport interface HdsFormSuperSelectSingleBaseSignature {\n Args: Omit<PowerSelectSignature['Args'], 'resultCountMessage'> & {\n showAfterOptions?: boolean;\n afterOptionsContent?: string;\n resultCountMessage?:\n | string\n | PowerSelectSignature['Args']['resultCountMessage'];\n dropdownMaxWidth?: string;\n matchTriggerWidth?: boolean;\n isInvalid?: boolean;\n };\n Blocks: PowerSelectSignature['Blocks'];\n Element: PowerSelectSignature['Element'];\n}\n\nexport default class HdsFormSuperSelectSingleBase extends Component<HdsFormSuperSelectSingleBaseSignature> {\n @tracked powerSelectAPI?: PowerSelect;\n\n get horizontalPosition(): HdsFormSuperSelectHorizontalPositions {\n const { horizontalPosition = DEFAULT_HORIZONTAL_POSITION } = this.args;\n return horizontalPosition as HdsFormSuperSelectHorizontalPositions;\n }\n\n get resultCountMessageText(): string {\n if (typeof this.args.resultCountMessage === 'string') {\n return this.args.resultCountMessage;\n }\n\n return `${this.powerSelectAPI?.resultsCount || 0} total`;\n }\n\n get resultCountMessageFunction(): PowerSelectSignature['Args']['resultCountMessage'] {\n if (typeof this.args.resultCountMessage === 'function') {\n return this.args.resultCountMessage;\n }\n\n return undefined;\n }\n\n /**\n * This action sets the powerSelectAPI property and optionally calls a registerAPI function.\n *\n * @param {Object} powerSelectAPI - The API object for the PowerSelect component.\n *\n * If a `registerAPI` function is passed in through the component's arguments,\n * this function will be called with the `powerSelectAPI` as its argument.\n * This allows parent components or controllers to have access to the PowerSelect API.\n *\n * The `powerSelectAPI` is also stored on the component instance and used in `clearSelected`\n */\n @action\n setPowerSelectAPI(powerSelectAPI: PowerSelect): void {\n if (typeof this.args.registerAPI === 'function') {\n this.args.registerAPI(powerSelectAPI);\n }\n this.powerSelectAPI = powerSelectAPI;\n }\n\n @action calculatePosition(\n trigger: Element,\n content: HTMLElement\n ): CalculatePositionResult {\n // use `hds-anchored-position` to calculate and set position\n // @ts-expect-error: known issue with type of invocation\n anchoredPositionModifier(content, [trigger], {\n placement: HORIZONTAL_POSITION_MAPPING[this.horizontalPosition],\n offsetOptions: 4,\n enableCollisionDetection: true,\n });\n // prevent PowerSelect from setting position\n return {\n horizontalPosition: 'auto',\n verticalPosition: 'auto',\n style: {},\n };\n }\n\n /**\n * Determine if `@afterOptionsComponent` gets displayed\n * @param showAfterOptions\n * @type {boolean}\n * @default false\n */\n get showAfterOptions(): boolean | string {\n return this.args.showAfterOptions ?? this.args.afterOptionsContent ?? false;\n }\n\n /**\n * Get the search placeholder text\n * @param searchPlaceholder\n * @type {string}\n * @default 'Search'\n */\n get searchPlaceholder(): string {\n return this.args.searchPlaceholder ?? 'Search';\n }\n\n /**\n * Get the maxWidth to apply to the dropdown\n * @param dropdownMaxWidth\n * @type {string}\n * @default 'none'\n */\n get dropdownMaxWidthStyle(): Record<string, string> {\n const maxWidthStyle: { [key: string]: string } = {};\n if (this.args.dropdownMaxWidth) {\n maxWidthStyle['--hds-form-super-select-dropdown-max-width'] =\n this.args.dropdownMaxWidth;\n }\n return maxWidthStyle;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-form-super-select', 'hds-form-super-select-single'];\n\n // add a class based on the @matchTriggerWidth argument or whether dropdownMaxWidth is set\n if (this.args.matchTriggerWidth === false || this.args.dropdownMaxWidth) {\n classes.push('hds-form-super-select--dropdown-content-auto-width');\n }\n\n // add a class based on the @isInvalid argument\n if (this.args.isInvalid) {\n classes.push(`hds-form-super-select--is-invalid`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["DEFAULT_HORIZONTAL_POSITION","HdsFormSuperSelectHorizontalPositionValues","Left","HORIZONTAL_POSITION_MAPPING","HdsFormSuperSelectHorizontalPositionToPlacementValues","HdsFormSuperSelectSingleBase","Component","g","prototype","tracked","i","void 0","horizontalPosition","args","resultCountMessageText","resultCountMessage","powerSelectAPI","resultsCount","resultCountMessageFunction","undefined","setPowerSelectAPI","registerAPI","n","action","calculatePosition","trigger","content","anchoredPositionModifier","placement","offsetOptions","enableCollisionDetection","verticalPosition","style","showAfterOptions","afterOptionsContent","searchPlaceholder","dropdownMaxWidthStyle","maxWidthStyle","dropdownMaxWidth","classNames","classes","matchTriggerWidth","push","isInvalid","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","sources":["../../../../../src/components/hds/form/text-input/field.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';\n\nimport type { ComponentLike, WithBoundArgs } from '@glint/template';\nimport type { HdsFormFieldSignature } from '../field';\nimport type { HdsFormTextInputBaseSignature } from './base';\nimport type { HdsFormErrorSignature } from '../error';\nimport type { HdsFormHelperTextSignature } from '../helper-text';\nimport type { HdsFormLabelSignature } from '../label';\nimport type { HdsFormVisibilityToggleSignature } from '../visibility-toggle';\nimport HdsFormCharacterCountComponent from '../character-count/index.ts';\nimport type Owner from '@ember/owner';\n\nexport interface HdsFormTextInputFieldSignature {\n Args: Omit<HdsFormFieldSignature['Args'], 'contextualClass' | 'layout'> &\n HdsFormTextInputBaseSignature['Args'] & {\n visibilityToggleAriaLabel?: HdsFormVisibilityToggleSignature['Args']['ariaLabel'];\n visibilityToggleAriaMessageText?: HdsFormVisibilityToggleSignature['Args']['ariaMessageText'];\n };\n Blocks: {\n default: [\n {\n Label?: ComponentLike<HdsFormLabelSignature>;\n HelperText?: ComponentLike<HdsFormHelperTextSignature>;\n Error?: ComponentLike<HdsFormErrorSignature>;\n CharacterCount?: WithBoundArgs<\n typeof HdsFormCharacterCountComponent,\n 'value'\n >;\n },\n ];\n };\n Element: HdsFormFieldSignature['Element'];\n}\n\nexport default class HdsFormTextInputField extends Component<HdsFormTextInputFieldSignature> {\n @tracked private _isPasswordMasked = true;\n @tracked type;\n\n constructor(owner: Owner, args: HdsFormTextInputFieldSignature['Args']) {\n super(owner, args);\n this.type = this.args.type ?? 'text';\n }\n\n get hasVisibilityToggle(): boolean {\n return this.args.hasVisibilityToggle ?? true;\n }\n\n get showVisibilityToggle(): boolean {\n return this.args.type === 'password' && this.hasVisibilityToggle;\n }\n\n get visibilityToggleAriaLabel(): string | undefined {\n if (this.args.visibilityToggleAriaLabel) {\n return this.args.visibilityToggleAriaLabel;\n } else if (this._isPasswordMasked) {\n return 'Show password';\n } else {\n return 'Hide password';\n }\n }\n\n get visibilityToggleAriaMessageText(): string | undefined {\n if (this.args.visibilityToggleAriaMessageText) {\n return this.args.visibilityToggleAriaMessageText;\n } else if (this._isPasswordMasked) {\n return 'Password is hidden';\n } else {\n return 'Password is visible';\n }\n }\n\n @action\n onClickTogglePasswordReadability(): void {\n this._isPasswordMasked = !this._isPasswordMasked;\n this.type = this._isPasswordMasked ? 'password' : 'text';\n }\n}\n"],"names":["HdsFormTextInputField","Component","g","prototype","tracked","i","constructor","owner","args","type","hasVisibilityToggle","showVisibilityToggle","visibilityToggleAriaLabel","_isPasswordMasked","visibilityToggleAriaMessageText","onClickTogglePasswordReadability","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AAsCe,MAAMA,qBAAqB,SAASC,SAAS,CAAiC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,mBAAA,EAAA,CAC1FC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA6B,IAAI;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,kBAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,MAAA,EAAA,CACxCC,OAAO,CAAA,CAAA;AAAA;EAAA,KAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAERC,EAAAA,WAAWA,CAACC,KAAY,EAAEC,IAA4C,EAAE;AACtE,IAAA,KAAK,CAACD,KAAK,EAAEC,IAAI,CAAC;IAClB,IAAI,CAACC,IAAI,GAAG,IAAI,CAACD,IAAI,CAACC,IAAI,IAAI,MAAM;AACtC,EAAA;EAEA,IAAIC,mBAAmBA,GAAY;AACjC,IAAA,OAAO,IAAI,CAACF,IAAI,CAACE,mBAAmB,IAAI,IAAI;AAC9C,EAAA;EAEA,IAAIC,oBAAoBA,GAAY;IAClC,OAAO,IAAI,CAACH,IAAI,CAACC,IAAI,KAAK,UAAU,IAAI,IAAI,CAACC,mBAAmB;AAClE,EAAA;EAEA,IAAIE,yBAAyBA,GAAuB;AAClD,IAAA,IAAI,IAAI,CAACJ,IAAI,CAACI,yBAAyB,EAAE;AACvC,MAAA,OAAO,IAAI,CAACJ,IAAI,CAACI,yBAAyB;AAC5C,IAAA,CAAC,MAAM,IAAI,IAAI,CAACC,iBAAiB,EAAE;AACjC,MAAA,OAAO,eAAe;AACxB,IAAA,CAAC,MAAM;AACL,MAAA,OAAO,eAAe;AACxB,IAAA;AACF,EAAA;EAEA,IAAIC,+BAA+BA,GAAuB;AACxD,IAAA,IAAI,IAAI,CAACN,IAAI,CAACM,+BAA+B,EAAE;AAC7C,MAAA,OAAO,IAAI,CAACN,IAAI,CAACM,+BAA+B;AAClD,IAAA,CAAC,MAAM,IAAI,IAAI,CAACD,iBAAiB,EAAE;AACjC,MAAA,OAAO,oBAAoB;AAC7B,IAAA,CAAC,MAAM;AACL,MAAA,OAAO,qBAAqB;AAC9B,IAAA;AACF,EAAA;AAGAE,EAAAA,gCAAgCA,GAAS;AACvC,IAAA,IAAI,CAACF,iBAAiB,GAAG,CAAC,IAAI,CAACA,iBAAiB;IAChD,IAAI,CAACJ,IAAI,GAAG,IAAI,CAACI,iBAAiB,GAAG,UAAU,GAAG,MAAM;AAC1D,EAAA;AAAC,EAAA;IAAAG,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,kCAAA,EAAA,CAJAc,MAAM,CAAA,CAAA;AAAA;AAKT;AAACC,oBAAA,CAAAC,QAAA,EA1CoBnB,qBAAqB,CAAA;;;;"}
1
+ {"version":3,"file":"field.js","sources":["../../../../../src/components/hds/form/text-input/field.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';\n\nimport type { ComponentLike, WithBoundArgs } from '@glint/template';\nimport type { HdsFormFieldSignature } from '../field';\nimport type { HdsFormTextInputBaseSignature } from './base';\nimport type { HdsFormErrorSignature } from '../error';\nimport type { HdsFormHelperTextSignature } from '../helper-text';\nimport type { HdsFormLabelSignature } from '../label';\nimport type { HdsFormVisibilityToggleSignature } from '../visibility-toggle';\nimport HdsFormCharacterCountComponent from '../character-count/index.ts';\nimport type Owner from '@ember/owner';\n\nexport interface HdsFormTextInputFieldSignature {\n Args: Omit<HdsFormFieldSignature['Args'], 'contextualClass' | 'layout'> &\n HdsFormTextInputBaseSignature['Args'] & {\n visibilityToggleAriaLabel?: HdsFormVisibilityToggleSignature['Args']['ariaLabel'];\n visibilityToggleAriaMessageText?: HdsFormVisibilityToggleSignature['Args']['ariaMessageText'];\n };\n Blocks: {\n default: [\n {\n Label?: ComponentLike<HdsFormLabelSignature>;\n HelperText?: ComponentLike<HdsFormHelperTextSignature>;\n Error?: ComponentLike<HdsFormErrorSignature>;\n CharacterCount?: WithBoundArgs<\n typeof HdsFormCharacterCountComponent,\n 'value'\n >;\n },\n ];\n };\n Element: HdsFormFieldSignature['Element'];\n}\n\nexport default class HdsFormTextInputField extends Component<HdsFormTextInputFieldSignature> {\n @tracked private _isPasswordMasked = true;\n @tracked type;\n\n constructor(owner: Owner, args: HdsFormTextInputFieldSignature['Args']) {\n super(owner, args);\n this.type = this.args.type ?? 'text';\n }\n\n get hasVisibilityToggle(): boolean {\n return this.args.hasVisibilityToggle ?? true;\n }\n\n get showVisibilityToggle(): boolean {\n return this.args.type === 'password' && this.hasVisibilityToggle;\n }\n\n get visibilityToggleAriaLabel(): string | undefined {\n if (this.args.visibilityToggleAriaLabel) {\n return this.args.visibilityToggleAriaLabel;\n } else if (this._isPasswordMasked) {\n return 'Show password';\n } else {\n return 'Hide password';\n }\n }\n\n get visibilityToggleAriaMessageText(): string | undefined {\n if (this.args.visibilityToggleAriaMessageText) {\n return this.args.visibilityToggleAriaMessageText;\n } else if (this._isPasswordMasked) {\n return 'Password is hidden';\n } else {\n return 'Password is visible';\n }\n }\n\n @action\n onClickTogglePasswordReadability(): void {\n this._isPasswordMasked = !this._isPasswordMasked;\n this.type = this._isPasswordMasked ? 'password' : 'text';\n }\n}\n"],"names":["HdsFormTextInputField","Component","g","prototype","tracked","i","void 0","constructor","owner","args","type","hasVisibilityToggle","showVisibilityToggle","visibilityToggleAriaLabel","_isPasswordMasked","visibilityToggleAriaMessageText","onClickTogglePasswordReadability","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AAsCe,MAAMA,qBAAqB,SAASC,SAAS,CAAiC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,mBAAA,EAAA,CAC1FC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA6B,IAAI;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,kBAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,MAAA,EAAA,CACxCC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,KAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,EAAAC,MAAA;AAERC,EAAAA,WAAWA,CAACC,KAAY,EAAEC,IAA4C,EAAE;AACtE,IAAA,KAAK,CAACD,KAAK,EAAEC,IAAI,CAAC;IAClB,IAAI,CAACC,IAAI,GAAG,IAAI,CAACD,IAAI,CAACC,IAAI,IAAI,MAAM;AACtC,EAAA;EAEA,IAAIC,mBAAmBA,GAAY;AACjC,IAAA,OAAO,IAAI,CAACF,IAAI,CAACE,mBAAmB,IAAI,IAAI;AAC9C,EAAA;EAEA,IAAIC,oBAAoBA,GAAY;IAClC,OAAO,IAAI,CAACH,IAAI,CAACC,IAAI,KAAK,UAAU,IAAI,IAAI,CAACC,mBAAmB;AAClE,EAAA;EAEA,IAAIE,yBAAyBA,GAAuB;AAClD,IAAA,IAAI,IAAI,CAACJ,IAAI,CAACI,yBAAyB,EAAE;AACvC,MAAA,OAAO,IAAI,CAACJ,IAAI,CAACI,yBAAyB;AAC5C,IAAA,CAAC,MAAM,IAAI,IAAI,CAACC,iBAAiB,EAAE;AACjC,MAAA,OAAO,eAAe;AACxB,IAAA,CAAC,MAAM;AACL,MAAA,OAAO,eAAe;AACxB,IAAA;AACF,EAAA;EAEA,IAAIC,+BAA+BA,GAAuB;AACxD,IAAA,IAAI,IAAI,CAACN,IAAI,CAACM,+BAA+B,EAAE;AAC7C,MAAA,OAAO,IAAI,CAACN,IAAI,CAACM,+BAA+B;AAClD,IAAA,CAAC,MAAM,IAAI,IAAI,CAACD,iBAAiB,EAAE;AACjC,MAAA,OAAO,oBAAoB;AAC7B,IAAA,CAAC,MAAM;AACL,MAAA,OAAO,qBAAqB;AAC9B,IAAA;AACF,EAAA;AAGAE,EAAAA,gCAAgCA,GAAS;AACvC,IAAA,IAAI,CAACF,iBAAiB,GAAG,CAAC,IAAI,CAACA,iBAAiB;IAChD,IAAI,CAACJ,IAAI,GAAG,IAAI,CAACI,iBAAiB,GAAG,UAAU,GAAG,MAAM;AAC1D,EAAA;AAAC,EAAA;IAAAG,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,kCAAA,EAAA,CAJAe,MAAM,CAAA,CAAA;AAAA;AAKT;AAACC,oBAAA,CAAAC,QAAA,EA1CoBpB,qBAAqB,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/interactive/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';\n\nimport { hdsResolveLinkToExternal } from '../../../utils/hds-resolve-link-to-external.ts';\n\nimport type Owner from '@ember/owner';\nimport type { LinkTo } from '@ember/routing';\n\nexport interface HdsInteractiveSignature {\n Args: {\n href?: string;\n isHrefExternal?: boolean;\n isRouteExternal?: boolean;\n // the arguments and types below are mirroring the ones in LinkTo https://github.com/typed-ember/glint/blob/main/packages/environment-ember-loose/-private/intrinsics/link-to.d.ts#L9\n // because they're not exported we're unable to import them directly from glint\n route?: string;\n models?: unknown[];\n model?: unknown;\n query?: Record<string, unknown>;\n 'current-when'?: string | boolean;\n replace?: boolean;\n };\n Blocks: {\n default: [];\n };\n Element: HTMLAnchorElement | HTMLButtonElement;\n}\n\nexport default class HdsInteractive extends Component<HdsInteractiveSignature> {\n @tracked linkToExternal: LinkTo | null = null;\n\n constructor(owner: Owner, args: HdsInteractiveSignature['Args']) {\n super(owner, args);\n\n // we want to avoid resolving the component if it's not needed\n if (args.isRouteExternal) {\n void this.resolveLinkToExternal();\n }\n }\n\n async resolveLinkToExternal() {\n this.linkToExternal = await hdsResolveLinkToExternal(\n this.args.isRouteExternal\n );\n }\n /**\n * Determines if a @href value is \"external\" (it adds target=\"_blank\" rel=\"noopener noreferrer\")\n *\n * @param isHrefExternal\n * @type boolean\n * @default true\n */\n get isHrefExternal(): boolean {\n return this.args.isHrefExternal ?? true;\n }\n\n /**\n * Determines if a @route value is \"external\" (uses the LinkToExternal component instead of LinkTo)\n *\n * @param isRouteExternal\n * @type boolean\n * @default false\n */\n get isRouteExternal(): boolean {\n return this.args.isRouteExternal ?? false;\n }\n\n @action\n onKeyUp(event: KeyboardEvent): void {\n if (event.key === ' ' || event.code === 'Space') {\n (event.target as HTMLElement).click();\n }\n }\n}\n"],"names":["HdsInteractive","Component","g","prototype","tracked","i","constructor","owner","args","isRouteExternal","resolveLinkToExternal","linkToExternal","hdsResolveLinkToExternal","isHrefExternal","onKeyUp","event","key","code","target","click","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AA+Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,gBAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAiC,IAAI;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,eAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,EAAA,MAAA;AAE7CC,EAAAA,WAAWA,CAACC,KAAY,EAAEC,IAAqC,EAAE;AAC/D,IAAA,KAAK,CAACD,KAAK,EAAEC,IAAI,CAAC;;AAElB;IACA,IAAIA,IAAI,CAACC,eAAe,EAAE;AACxB,MAAA,KAAK,IAAI,CAACC,qBAAqB,EAAE;AACnC,IAAA;AACF,EAAA;EAEA,MAAMA,qBAAqBA,GAAG;IAC5B,IAAI,CAACC,cAAc,GAAG,MAAMC,wBAAwB,CAClD,IAAI,CAACJ,IAAI,CAACC,eACZ,CAAC;AACH,EAAA;AACA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAII,cAAcA,GAAY;AAC5B,IAAA,OAAO,IAAI,CAACL,IAAI,CAACK,cAAc,IAAI,IAAI;AACzC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAIJ,eAAeA,GAAY;AAC7B,IAAA,OAAO,IAAI,CAACD,IAAI,CAACC,eAAe,IAAI,KAAK;AAC3C,EAAA;EAGAK,OAAOA,CAACC,KAAoB,EAAQ;IAClC,IAAIA,KAAK,CAACC,GAAG,KAAK,GAAG,IAAID,KAAK,CAACE,IAAI,KAAK,OAAO,EAAE;AAC9CF,MAAAA,KAAK,CAACG,MAAM,CAAiBC,KAAK,EAAE;AACvC,IAAA;AACF,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAjB,SAAA,EAAA,SAAA,EAAA,CALAkB,MAAM,CAAA,CAAA;AAAA;AAMT;AAACC,oBAAA,CAAAC,QAAA,EA7CoBvB,cAAc,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/interactive/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';\n\nimport { hdsResolveLinkToExternal } from '../../../utils/hds-resolve-link-to-external.ts';\n\nimport type Owner from '@ember/owner';\nimport type { LinkTo } from '@ember/routing';\n\nexport interface HdsInteractiveSignature {\n Args: {\n href?: string;\n isHrefExternal?: boolean;\n isRouteExternal?: boolean;\n // the arguments and types below are mirroring the ones in LinkTo https://github.com/typed-ember/glint/blob/main/packages/environment-ember-loose/-private/intrinsics/link-to.d.ts#L9\n // because they're not exported we're unable to import them directly from glint\n route?: string;\n models?: unknown[];\n model?: unknown;\n query?: Record<string, unknown>;\n 'current-when'?: string | boolean;\n replace?: boolean;\n };\n Blocks: {\n default: [];\n };\n Element: HTMLAnchorElement | HTMLButtonElement;\n}\n\nexport default class HdsInteractive extends Component<HdsInteractiveSignature> {\n @tracked linkToExternal: LinkTo | null = null;\n\n constructor(owner: Owner, args: HdsInteractiveSignature['Args']) {\n super(owner, args);\n\n // we want to avoid resolving the component if it's not needed\n if (args.isRouteExternal) {\n void this.resolveLinkToExternal();\n }\n }\n\n async resolveLinkToExternal() {\n this.linkToExternal = await hdsResolveLinkToExternal(\n this.args.isRouteExternal\n );\n }\n /**\n * Determines if a @href value is \"external\" (it adds target=\"_blank\" rel=\"noopener noreferrer\")\n *\n * @param isHrefExternal\n * @type boolean\n * @default true\n */\n get isHrefExternal(): boolean {\n return this.args.isHrefExternal ?? true;\n }\n\n /**\n * Determines if a @route value is \"external\" (uses the LinkToExternal component instead of LinkTo)\n *\n * @param isRouteExternal\n * @type boolean\n * @default false\n */\n get isRouteExternal(): boolean {\n return this.args.isRouteExternal ?? false;\n }\n\n @action\n onKeyUp(event: KeyboardEvent): void {\n if (event.key === ' ' || event.code === 'Space') {\n (event.target as HTMLElement).click();\n }\n }\n}\n"],"names":["HdsInteractive","Component","g","prototype","tracked","i","void 0","constructor","owner","args","isRouteExternal","resolveLinkToExternal","linkToExternal","hdsResolveLinkToExternal","isHrefExternal","onKeyUp","event","key","code","target","click","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AA+Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,gBAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAiC,IAAI;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,eAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,EAAAC,MAAA;AAE7CC,EAAAA,WAAWA,CAACC,KAAY,EAAEC,IAAqC,EAAE;AAC/D,IAAA,KAAK,CAACD,KAAK,EAAEC,IAAI,CAAC;;AAElB;IACA,IAAIA,IAAI,CAACC,eAAe,EAAE;AACxB,MAAA,KAAK,IAAI,CAACC,qBAAqB,EAAE;AACnC,IAAA;AACF,EAAA;EAEA,MAAMA,qBAAqBA,GAAG;IAC5B,IAAI,CAACC,cAAc,GAAG,MAAMC,wBAAwB,CAClD,IAAI,CAACJ,IAAI,CAACC,eACZ,CAAC;AACH,EAAA;AACA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAII,cAAcA,GAAY;AAC5B,IAAA,OAAO,IAAI,CAACL,IAAI,CAACK,cAAc,IAAI,IAAI;AACzC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAIJ,eAAeA,GAAY;AAC7B,IAAA,OAAO,IAAI,CAACD,IAAI,CAACC,eAAe,IAAI,KAAK;AAC3C,EAAA;EAGAK,OAAOA,CAACC,KAAoB,EAAQ;IAClC,IAAIA,KAAK,CAACC,GAAG,KAAK,GAAG,IAAID,KAAK,CAACE,IAAI,KAAK,OAAO,EAAE;AAC9CF,MAAAA,KAAK,CAACG,MAAM,CAAiBC,KAAK,EAAE;AACvC,IAAA;AACF,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAlB,SAAA,EAAA,SAAA,EAAA,CALAmB,MAAM,CAAA,CAAA;AAAA;AAMT;AAACC,oBAAA,CAAAC,QAAA,EA7CoBxB,cAAc,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/modal/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 } from '@ember/debug';\nimport { getElementId } from '../../../utils/hds-get-element-id.ts';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { modifier } from 'ember-modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\nimport type { HdsModalSizes, HdsModalColors } from './types.ts';\n\nimport HdsDialogPrimitiveHeaderComponent from '../dialog-primitive/header.ts';\nimport HdsDialogPrimitiveBodyComponent from '../dialog-primitive/body.ts';\nimport HdsDialogPrimitiveFooterComponent from '../dialog-primitive/footer.ts';\nimport { HdsModalSizeValues, HdsModalColorValues } from './types.ts';\n\nconst waiter = buildWaiter('@hashicorp/design-system-components:modal');\n\nexport const DEFAULT_SIZE = HdsModalSizeValues.Medium;\nexport const DEFAULT_COLOR = HdsModalColorValues.Neutral;\n\nexport const SIZES: HdsModalSizes[] = Object.values(HdsModalSizeValues);\nexport const COLORS: HdsModalColors[] = Object.values(HdsModalColorValues);\n\nexport interface HdsModalSignature {\n Args: {\n isDismissDisabled?: boolean;\n size?: HdsModalSizes;\n color?: HdsModalColors;\n returnFocusTo?: string;\n onOpen?: () => void;\n onClose?: (event: Event) => void;\n };\n Blocks: {\n default: [\n {\n Header?: WithBoundArgs<\n typeof HdsDialogPrimitiveHeaderComponent,\n 'id' | 'onDismiss' | 'contextualClassPrefix'\n >;\n Body?: WithBoundArgs<\n typeof HdsDialogPrimitiveBodyComponent,\n 'contextualClass'\n >;\n Footer?: WithBoundArgs<\n typeof HdsDialogPrimitiveFooterComponent,\n 'onDismiss' | 'contextualClass'\n >;\n },\n ];\n };\n Element: HTMLDialogElement;\n}\n\nexport default class HdsModal extends Component<HdsModalSignature> {\n @tracked private _isOpen = false;\n private _element!: HTMLDialogElement;\n private _body!: HTMLElement;\n private _bodyInitialOverflowValue = '';\n private _clickOutsideToDismissHandler!: (event: MouseEvent) => void;\n\n get isDismissDisabled(): boolean {\n return this.args.isDismissDisabled ?? false;\n }\n\n get size(): HdsModalSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Modal\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n get color(): HdsModalColors {\n const { color = DEFAULT_COLOR } = this.args;\n\n assert(\n `@color for \"Hds::Modal\" must be one of the following: ${COLORS.join(\n ', '\n )}; received: ${color}`,\n COLORS.includes(color)\n );\n\n return color;\n }\n\n get id(): string {\n return getElementId(this);\n }\n\n get classNames(): string {\n const classes = ['hds-modal'];\n\n // add a class based on the @size argument\n classes.push(`hds-modal--size-${this.size}`);\n\n // add a class based on the @color argument\n classes.push(`hds-modal--color-${this.color}`);\n\n return classes.join(' ');\n }\n\n private _performCloseCleanup(): void {\n this._isOpen = false;\n\n // Reset page `overflow` property\n if (this._body) {\n this._body.style.removeProperty('overflow');\n if (this._bodyInitialOverflowValue === '') {\n if (this._body.style.length === 0) {\n this._body.removeAttribute('style');\n }\n } else {\n this._body.style.setProperty(\n 'overflow',\n this._bodyInitialOverflowValue\n );\n }\n }\n\n // Return focus to a specific element (if provided)\n if (this.args.returnFocusTo) {\n const initiator = document.getElementById(this.args.returnFocusTo);\n if (initiator) {\n initiator.focus();\n }\n }\n }\n\n @action registerOnCloseCallback(event: Event): void {\n if (\n !this.isDismissDisabled &&\n this.args.onClose &&\n typeof this.args.onClose === 'function'\n ) {\n this.args.onClose(event);\n }\n\n // If the dismissal of the modal is disabled, we keep the modal open/visible otherwise we mark it as closed\n if (this.isDismissDisabled) {\n // If, in a chain of events, the element is not attached to the DOM, the `showModal` would fail\n // so we add this safeguard condition that checks for the `<dialog>` to have a parent\n if (this._element.parentElement) {\n // As there is no way to `preventDefault` on `close` events, we call the `showModal` function\n // preserving the state of the modal dialog\n this._element.showModal();\n }\n } else {\n this._performCloseCleanup();\n }\n }\n\n private _registerDialog = modifier((element: HTMLDialogElement) => {\n // Store references of `<dialog>` and `<body>` elements\n this._element = element;\n this._body = document.body;\n\n if (this._body) {\n // Store the initial `overflow` value of `<body>` so we can reset to it\n this._bodyInitialOverflowValue =\n this._body.style.getPropertyValue('overflow');\n }\n\n // Register \"onClose\" callback function to be called when a native 'close' event is dispatched\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this._element.addEventListener('close', this.registerOnCloseCallback, true);\n\n // If the modal dialog is not already open\n if (!this._element.open) {\n this.open();\n }\n\n // Note: because the Modal has the `@isDismissedDisabled` argument, we need to add our own click outside to dismiss logic. This is because `ember-focus-trap` treats the `focusTrapOptions` as static, so we can't update it dynamically if `@isDismissDisabled` changes.\n this._clickOutsideToDismissHandler = (event: MouseEvent) => {\n // check if the click is outside the modal and the modal is open\n if (!this._element.contains(event.target as Node) && this._isOpen) {\n if (!this.isDismissDisabled) {\n // here we use `void` because `onDismiss` is an async function, but in reality we don't need to handle the result or wait for its completion\n void this.onDismiss();\n }\n }\n };\n\n document.addEventListener('click', this._clickOutsideToDismissHandler, {\n capture: true,\n passive: false,\n });\n\n return () => {\n // if the <dialog> is removed from the dom while open we emulate the close event\n if (this._isOpen) {\n this._performCloseCleanup();\n }\n\n this._element?.removeEventListener(\n 'close',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.registerOnCloseCallback,\n true\n );\n\n document.removeEventListener(\n 'click',\n this._clickOutsideToDismissHandler,\n true\n );\n };\n });\n\n @action\n open(): void {\n // Make modal dialog visible using the native `showModal` method\n this._element.showModal();\n this._isOpen = true;\n\n // Prevent page from scrolling when the dialog is open\n if (this._body) this._body.style.setProperty('overflow', 'hidden');\n\n // Call \"onOpen\" callback function\n if (this.args.onOpen && typeof this.args.onOpen === 'function') {\n this.args.onOpen();\n }\n }\n\n @action\n // eslint-disable-next-line @typescript-eslint/require-await\n async onDismiss(): Promise<void> {\n // allow ember test helpers to be aware of when the `close` event fires\n // when using `click` or other helpers from '@ember/test-helpers'\n if (this._element.open) {\n const token = waiter.beginAsync();\n const listener = () => {\n waiter.endAsync(token);\n this._element.removeEventListener('close', listener);\n };\n this._element.addEventListener('close', listener);\n }\n\n // Make modal dialog invisible using the native `close` method\n this._element.close();\n }\n}\n"],"names":["waiter","buildWaiter","DEFAULT_SIZE","HdsModalSizeValues","Medium","DEFAULT_COLOR","HdsModalColorValues","Neutral","SIZES","Object","values","COLORS","HdsModal","Component","g","prototype","tracked","i","_element","_body","_bodyInitialOverflowValue","_clickOutsideToDismissHandler","isDismissDisabled","args","size","assert","join","includes","color","id","getElementId","classNames","classes","push","_performCloseCleanup","_isOpen","style","removeProperty","length","removeAttribute","setProperty","returnFocusTo","initiator","document","getElementById","focus","registerOnCloseCallback","event","onClose","parentElement","showModal","n","action","_registerDialog","modifier","element","body","getPropertyValue","addEventListener","open","contains","target","onDismiss","capture","passive","removeEventListener","onOpen","token","beginAsync","listener","endAsync","close","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/modal/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 } from '@ember/debug';\nimport { getElementId } from '../../../utils/hds-get-element-id.ts';\nimport { buildWaiter } from '@ember/test-waiters';\nimport { modifier } from 'ember-modifier';\n\nimport type { WithBoundArgs } from '@glint/template';\nimport type { HdsModalSizes, HdsModalColors } from './types.ts';\n\nimport HdsDialogPrimitiveHeaderComponent from '../dialog-primitive/header.ts';\nimport HdsDialogPrimitiveBodyComponent from '../dialog-primitive/body.ts';\nimport HdsDialogPrimitiveFooterComponent from '../dialog-primitive/footer.ts';\nimport { HdsModalSizeValues, HdsModalColorValues } from './types.ts';\n\nconst waiter = buildWaiter('@hashicorp/design-system-components:modal');\n\nexport const DEFAULT_SIZE = HdsModalSizeValues.Medium;\nexport const DEFAULT_COLOR = HdsModalColorValues.Neutral;\n\nexport const SIZES: HdsModalSizes[] = Object.values(HdsModalSizeValues);\nexport const COLORS: HdsModalColors[] = Object.values(HdsModalColorValues);\n\nexport interface HdsModalSignature {\n Args: {\n isDismissDisabled?: boolean;\n size?: HdsModalSizes;\n color?: HdsModalColors;\n returnFocusTo?: string;\n onOpen?: () => void;\n onClose?: (event: Event) => void;\n };\n Blocks: {\n default: [\n {\n Header?: WithBoundArgs<\n typeof HdsDialogPrimitiveHeaderComponent,\n 'id' | 'onDismiss' | 'contextualClassPrefix'\n >;\n Body?: WithBoundArgs<\n typeof HdsDialogPrimitiveBodyComponent,\n 'contextualClass'\n >;\n Footer?: WithBoundArgs<\n typeof HdsDialogPrimitiveFooterComponent,\n 'onDismiss' | 'contextualClass'\n >;\n },\n ];\n };\n Element: HTMLDialogElement;\n}\n\nexport default class HdsModal extends Component<HdsModalSignature> {\n @tracked private _isOpen = false;\n private _element!: HTMLDialogElement;\n private _body!: HTMLElement;\n private _bodyInitialOverflowValue = '';\n private _clickOutsideToDismissHandler!: (event: MouseEvent) => void;\n\n get isDismissDisabled(): boolean {\n return this.args.isDismissDisabled ?? false;\n }\n\n get size(): HdsModalSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Modal\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n get color(): HdsModalColors {\n const { color = DEFAULT_COLOR } = this.args;\n\n assert(\n `@color for \"Hds::Modal\" must be one of the following: ${COLORS.join(\n ', '\n )}; received: ${color}`,\n COLORS.includes(color)\n );\n\n return color;\n }\n\n get id(): string {\n return getElementId(this);\n }\n\n get classNames(): string {\n const classes = ['hds-modal'];\n\n // add a class based on the @size argument\n classes.push(`hds-modal--size-${this.size}`);\n\n // add a class based on the @color argument\n classes.push(`hds-modal--color-${this.color}`);\n\n return classes.join(' ');\n }\n\n private _performCloseCleanup(): void {\n this._isOpen = false;\n\n // Reset page `overflow` property\n if (this._body) {\n this._body.style.removeProperty('overflow');\n if (this._bodyInitialOverflowValue === '') {\n if (this._body.style.length === 0) {\n this._body.removeAttribute('style');\n }\n } else {\n this._body.style.setProperty(\n 'overflow',\n this._bodyInitialOverflowValue\n );\n }\n }\n\n // Return focus to a specific element (if provided)\n if (this.args.returnFocusTo) {\n const initiator = document.getElementById(this.args.returnFocusTo);\n if (initiator) {\n initiator.focus();\n }\n }\n }\n\n @action registerOnCloseCallback(event: Event): void {\n if (\n !this.isDismissDisabled &&\n this.args.onClose &&\n typeof this.args.onClose === 'function'\n ) {\n this.args.onClose(event);\n }\n\n // If the dismissal of the modal is disabled, we keep the modal open/visible otherwise we mark it as closed\n if (this.isDismissDisabled) {\n // If, in a chain of events, the element is not attached to the DOM, the `showModal` would fail\n // so we add this safeguard condition that checks for the `<dialog>` to have a parent\n if (this._element.parentElement) {\n // As there is no way to `preventDefault` on `close` events, we call the `showModal` function\n // preserving the state of the modal dialog\n this._element.showModal();\n }\n } else {\n this._performCloseCleanup();\n }\n }\n\n private _registerDialog = modifier((element: HTMLDialogElement) => {\n // Store references of `<dialog>` and `<body>` elements\n this._element = element;\n this._body = document.body;\n\n if (this._body) {\n // Store the initial `overflow` value of `<body>` so we can reset to it\n this._bodyInitialOverflowValue =\n this._body.style.getPropertyValue('overflow');\n }\n\n // Register \"onClose\" callback function to be called when a native 'close' event is dispatched\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this._element.addEventListener('close', this.registerOnCloseCallback, true);\n\n // If the modal dialog is not already open\n if (!this._element.open) {\n this.open();\n }\n\n // Note: because the Modal has the `@isDismissedDisabled` argument, we need to add our own click outside to dismiss logic. This is because `ember-focus-trap` treats the `focusTrapOptions` as static, so we can't update it dynamically if `@isDismissDisabled` changes.\n this._clickOutsideToDismissHandler = (event: MouseEvent) => {\n // check if the click is outside the modal and the modal is open\n if (!this._element.contains(event.target as Node) && this._isOpen) {\n if (!this.isDismissDisabled) {\n // here we use `void` because `onDismiss` is an async function, but in reality we don't need to handle the result or wait for its completion\n void this.onDismiss();\n }\n }\n };\n\n document.addEventListener('click', this._clickOutsideToDismissHandler, {\n capture: true,\n passive: false,\n });\n\n return () => {\n // if the <dialog> is removed from the dom while open we emulate the close event\n if (this._isOpen) {\n this._performCloseCleanup();\n }\n\n this._element?.removeEventListener(\n 'close',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.registerOnCloseCallback,\n true\n );\n\n document.removeEventListener(\n 'click',\n this._clickOutsideToDismissHandler,\n true\n );\n };\n });\n\n @action\n open(): void {\n // Make modal dialog visible using the native `showModal` method\n this._element.showModal();\n this._isOpen = true;\n\n // Prevent page from scrolling when the dialog is open\n if (this._body) this._body.style.setProperty('overflow', 'hidden');\n\n // Call \"onOpen\" callback function\n if (this.args.onOpen && typeof this.args.onOpen === 'function') {\n this.args.onOpen();\n }\n }\n\n @action\n // eslint-disable-next-line @typescript-eslint/require-await\n async onDismiss(): Promise<void> {\n // allow ember test helpers to be aware of when the `close` event fires\n // when using `click` or other helpers from '@ember/test-helpers'\n if (this._element.open) {\n const token = waiter.beginAsync();\n const listener = () => {\n waiter.endAsync(token);\n this._element.removeEventListener('close', listener);\n };\n this._element.addEventListener('close', listener);\n }\n\n // Make modal dialog invisible using the native `close` method\n this._element.close();\n }\n}\n"],"names":["waiter","buildWaiter","DEFAULT_SIZE","HdsModalSizeValues","Medium","DEFAULT_COLOR","HdsModalColorValues","Neutral","SIZES","Object","values","COLORS","HdsModal","Component","g","prototype","tracked","i","void 0","_element","_body","_bodyInitialOverflowValue","_clickOutsideToDismissHandler","isDismissDisabled","args","size","assert","join","includes","color","id","getElementId","classNames","classes","push","_performCloseCleanup","_isOpen","style","removeProperty","length","removeAttribute","setProperty","returnFocusTo","initiator","document","getElementById","focus","registerOnCloseCallback","event","onClose","parentElement","showModal","n","action","_registerDialog","modifier","element","body","getPropertyValue","addEventListener","open","contains","target","onDismiss","capture","passive","removeEventListener","onOpen","token","beginAsync","listener","endAsync","close","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/pagination/compact/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 } from '@ember/debug';\nimport { HdsPaginationDirectionValues } from '../types.ts';\n\nimport type {\n HdsPaginationRoutingProps,\n HdsPaginationDirections,\n} from '../types';\nimport type { HdsInteractiveSignature } from '../../interactive';\nimport type Owner from '@ember/owner';\n\ntype HdsInteractiveQuery = HdsInteractiveSignature['Args']['query'];\n\ntype HdsPaginationCompactRoutingQueryProps = HdsPaginationRoutingProps & {\n queryNext?: HdsInteractiveQuery;\n queryPrev?: HdsInteractiveQuery;\n};\n\ntype HdsPaginationQueryFunction = (\n page: HdsPaginationDirections,\n pageSize?: number\n) => HdsInteractiveQuery;\n\ninterface HdsPaginationCompactArgs extends HdsPaginationRoutingProps {\n ariaLabel?: string;\n showLabels?: boolean;\n isDisabledPrev?: boolean;\n isDisabledNext?: boolean;\n showSizeSelector?: boolean;\n sizeSelectorLabel?: string;\n pageSizes?: number[];\n currentPageSize?: number;\n queryFunction?: HdsPaginationQueryFunction;\n onPageChange?: (page: HdsPaginationDirections) => void;\n onPageSizeChange?: (pageSize: number) => void;\n}\n\ninterface HdsPaginationCompactArgsControlledBase\n extends HdsPaginationCompactArgs {\n queryFunction: HdsPaginationQueryFunction;\n}\n\ninterface HdsPaginationCompactArgsControlledWithModel\n extends HdsPaginationCompactArgsControlledBase {\n model: string | number;\n}\n\ninterface HdsPaginationCompactArgsControlledWithModels\n extends HdsPaginationCompactArgsControlledBase {\n models: Array<string | number>;\n}\ninterface HdsPaginationCompactArgsControlledWithRoute\n extends HdsPaginationCompactArgsControlledBase {\n route: string;\n}\n\ntype HdsPaginationCompactArgsControlled =\n | HdsPaginationCompactArgsControlledWithModel\n | HdsPaginationCompactArgsControlledWithModels\n | HdsPaginationCompactArgsControlledWithRoute;\n\ninterface HdsPaginationCompactArgsUncontrolled\n extends HdsPaginationCompactArgs {\n queryFunction?: undefined;\n}\n\nexport interface HdsPaginationCompactSignature {\n Args:\n | HdsPaginationCompactArgsControlled\n | HdsPaginationCompactArgsUncontrolled;\n Element: HTMLDivElement;\n}\n\n// for context about the decision to use these values, see:\n// https://hashicorp.slack.com/archives/C03A0N1QK8S/p1673546329082759\nexport const DEFAULT_PAGE_SIZES = [10, 30, 50];\nexport default class HdsPaginationCompact extends Component<HdsPaginationCompactSignature> {\n // This private variable is used to differentiate between\n // \"uncontrolled\" component (where the state is handled internally) and\n // \"controlled\" component (where the state is handled externally, by the consumer's code).\n // In the first case, the variable stores the internal state of the component at any moment,\n // and its value is updated internally according to the user's interaction with the component.\n // In the second case, the variable stores *only* the initial state of the component (coming from the arguments)\n // at rendering time, but from that moment on it's not updated anymore, no matter what interaction the user\n // has with the component (the state is controlled externally, eg. via query parameters)\n @tracked private _currentPageSize;\n @tracked private _isControlled;\n\n showLabels = this.args.showLabels ?? true; // if the labels for the \"prev/next\" controls are visible\n showSizeSelector = this.args.showSizeSelector ?? false; // if the \"size selector\" block is visible\n\n constructor(owner: Owner, args: HdsPaginationCompactSignature['Args']) {\n super(owner, args);\n\n const { queryFunction } = this.args;\n\n // This component works in two different ways, depending if we need to support\n // routing through links (`LinkTo`) for the \"navigation controls\", or not.\n // If there's no routing then the component behaves as \"uncontrolled\"\n // (the state updates are handled by its internal logic).\n // If instead the component needs to update the routing (and we infer this via the \"query\" arguments)\n // then the component behaves as \"controlled\", where the state is\n // initialized and updated using the arguments passed to it.\n\n if (queryFunction === undefined) {\n this._isControlled = false;\n } else {\n assert(\n '@model, @models, or @route for \"Hds::Pagination::Compact\" must be provided when using the `@queryFunction` argument',\n this.args.model !== undefined ||\n this.args.models !== undefined ||\n this.args.route !== undefined\n );\n assert(\n '@queryFunction for \"Hds::Pagination::Compact\" must be a function',\n typeof queryFunction === 'function'\n );\n this._isControlled = true;\n }\n\n // we assert that `this.pageSizes` will always be an array with at least one item\n this._currentPageSize = this.args.currentPageSize ?? this.pageSizes[0];\n }\n\n get ariaLabel(): string {\n return this.args.ariaLabel ?? 'Pagination';\n }\n\n // This very specific `get/set` pattern is used to handle the two different use cases of the component\n // being \"controlled\" (when it has routing, meaning it needs to support pagination controls as links/`LinkTo`)\n // vs being \"uncontrolled\" (see comments above for details).\n //\n // If it has routing (and so it's \"controlled\"), than the value (\"state\") of the `currentPageSize` variable\n // is *always* determined by the controller via arguments (most of the times, connected to query parameters in the URL).\n // For this reason the \"get\" method always returns the value from the `args`,\n // while the \"set\" method never updates the private internal state (_variable).\n //\n // If instead it doesn't have routing (and so it's \"uncontrolled\") than the value (\"state\") of the `currentPageSize` variables\n // is *always* determined by the component's internal logic (and updated according to the user interaction with it).\n // For this reason the \"get\" and \"set\" methods always read from or write to the private internal state (_variable).\n\n get currentPageSize(): number | undefined {\n if (this._isControlled) {\n return this.args.currentPageSize;\n } else {\n return this._currentPageSize;\n }\n }\n set currentPageSize(value) {\n if (this._isControlled) {\n // noop\n } else {\n this._currentPageSize = value;\n }\n }\n\n get pageSizes(): number[] {\n const { pageSizes = DEFAULT_PAGE_SIZES } = this.args;\n\n assert(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `pageSizes argument must be an array. Received: ${pageSizes}`,\n Array.isArray(pageSizes) === true && pageSizes.length > 0\n );\n\n return pageSizes;\n }\n\n buildQueryParamsObject(\n page: HdsPaginationDirections,\n pageSize?: number\n ): HdsInteractiveQuery {\n if (this._isControlled) {\n // if the component is controlled, we can assert that the queryFunction is defined\n return this.args.queryFunction!(page, pageSize);\n } else {\n return {};\n }\n }\n\n get routing(): HdsPaginationCompactRoutingQueryProps {\n const routing: HdsPaginationCompactRoutingQueryProps = {\n route: this.args.route ?? undefined,\n model: this.args.model ?? undefined,\n models: this.args.models ?? undefined,\n replace: this.args.replace ?? undefined,\n };\n\n // the \"query\" is dynamic and needs to be calculated\n if (this._isControlled) {\n routing.queryPrev = this.buildQueryParamsObject(\n HdsPaginationDirectionValues.Prev,\n this.currentPageSize\n );\n routing.queryNext = this.buildQueryParamsObject(\n HdsPaginationDirectionValues.Next,\n this.currentPageSize\n );\n } else {\n routing.queryPrev = undefined;\n routing.queryNext = undefined;\n }\n\n return routing;\n }\n\n @action\n onPageChange(newPage: HdsPaginationDirections): void {\n const { onPageChange } = this.args;\n\n if (typeof onPageChange === 'function') {\n onPageChange(newPage);\n }\n }\n\n @action\n onPageSizeChange(newPageSize: number): void {\n const { onPageSizeChange } = this.args;\n\n // invoke the callback function\n if (typeof onPageSizeChange === 'function') {\n onPageSizeChange(newPageSize);\n }\n }\n}\n"],"names":["DEFAULT_PAGE_SIZES","HdsPaginationCompact","Component","g","prototype","tracked","i","showLabels","args","showSizeSelector","constructor","owner","queryFunction","undefined","_isControlled","assert","model","models","route","_currentPageSize","currentPageSize","pageSizes","ariaLabel","value","Array","isArray","length","buildQueryParamsObject","page","pageSize","routing","replace","queryPrev","HdsPaginationDirectionValues","Prev","queryNext","Next","onPageChange","newPage","n","action","onPageSizeChange","newPageSize","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/pagination/compact/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 } from '@ember/debug';\nimport { HdsPaginationDirectionValues } from '../types.ts';\n\nimport type {\n HdsPaginationRoutingProps,\n HdsPaginationDirections,\n} from '../types';\nimport type { HdsInteractiveSignature } from '../../interactive';\nimport type Owner from '@ember/owner';\n\ntype HdsInteractiveQuery = HdsInteractiveSignature['Args']['query'];\n\ntype HdsPaginationCompactRoutingQueryProps = HdsPaginationRoutingProps & {\n queryNext?: HdsInteractiveQuery;\n queryPrev?: HdsInteractiveQuery;\n};\n\ntype HdsPaginationQueryFunction = (\n page: HdsPaginationDirections,\n pageSize?: number\n) => HdsInteractiveQuery;\n\ninterface HdsPaginationCompactArgs extends HdsPaginationRoutingProps {\n ariaLabel?: string;\n showLabels?: boolean;\n isDisabledPrev?: boolean;\n isDisabledNext?: boolean;\n showSizeSelector?: boolean;\n sizeSelectorLabel?: string;\n pageSizes?: number[];\n currentPageSize?: number;\n queryFunction?: HdsPaginationQueryFunction;\n onPageChange?: (page: HdsPaginationDirections) => void;\n onPageSizeChange?: (pageSize: number) => void;\n}\n\ninterface HdsPaginationCompactArgsControlledBase\n extends HdsPaginationCompactArgs {\n queryFunction: HdsPaginationQueryFunction;\n}\n\ninterface HdsPaginationCompactArgsControlledWithModel\n extends HdsPaginationCompactArgsControlledBase {\n model: string | number;\n}\n\ninterface HdsPaginationCompactArgsControlledWithModels\n extends HdsPaginationCompactArgsControlledBase {\n models: Array<string | number>;\n}\ninterface HdsPaginationCompactArgsControlledWithRoute\n extends HdsPaginationCompactArgsControlledBase {\n route: string;\n}\n\ntype HdsPaginationCompactArgsControlled =\n | HdsPaginationCompactArgsControlledWithModel\n | HdsPaginationCompactArgsControlledWithModels\n | HdsPaginationCompactArgsControlledWithRoute;\n\ninterface HdsPaginationCompactArgsUncontrolled\n extends HdsPaginationCompactArgs {\n queryFunction?: undefined;\n}\n\nexport interface HdsPaginationCompactSignature {\n Args:\n | HdsPaginationCompactArgsControlled\n | HdsPaginationCompactArgsUncontrolled;\n Element: HTMLDivElement;\n}\n\n// for context about the decision to use these values, see:\n// https://hashicorp.slack.com/archives/C03A0N1QK8S/p1673546329082759\nexport const DEFAULT_PAGE_SIZES = [10, 30, 50];\nexport default class HdsPaginationCompact extends Component<HdsPaginationCompactSignature> {\n // This private variable is used to differentiate between\n // \"uncontrolled\" component (where the state is handled internally) and\n // \"controlled\" component (where the state is handled externally, by the consumer's code).\n // In the first case, the variable stores the internal state of the component at any moment,\n // and its value is updated internally according to the user's interaction with the component.\n // In the second case, the variable stores *only* the initial state of the component (coming from the arguments)\n // at rendering time, but from that moment on it's not updated anymore, no matter what interaction the user\n // has with the component (the state is controlled externally, eg. via query parameters)\n @tracked private _currentPageSize;\n @tracked private _isControlled;\n\n showLabels = this.args.showLabels ?? true; // if the labels for the \"prev/next\" controls are visible\n showSizeSelector = this.args.showSizeSelector ?? false; // if the \"size selector\" block is visible\n\n constructor(owner: Owner, args: HdsPaginationCompactSignature['Args']) {\n super(owner, args);\n\n const { queryFunction } = this.args;\n\n // This component works in two different ways, depending if we need to support\n // routing through links (`LinkTo`) for the \"navigation controls\", or not.\n // If there's no routing then the component behaves as \"uncontrolled\"\n // (the state updates are handled by its internal logic).\n // If instead the component needs to update the routing (and we infer this via the \"query\" arguments)\n // then the component behaves as \"controlled\", where the state is\n // initialized and updated using the arguments passed to it.\n\n if (queryFunction === undefined) {\n this._isControlled = false;\n } else {\n assert(\n '@model, @models, or @route for \"Hds::Pagination::Compact\" must be provided when using the `@queryFunction` argument',\n this.args.model !== undefined ||\n this.args.models !== undefined ||\n this.args.route !== undefined\n );\n assert(\n '@queryFunction for \"Hds::Pagination::Compact\" must be a function',\n typeof queryFunction === 'function'\n );\n this._isControlled = true;\n }\n\n // we assert that `this.pageSizes` will always be an array with at least one item\n this._currentPageSize = this.args.currentPageSize ?? this.pageSizes[0];\n }\n\n get ariaLabel(): string {\n return this.args.ariaLabel ?? 'Pagination';\n }\n\n // This very specific `get/set` pattern is used to handle the two different use cases of the component\n // being \"controlled\" (when it has routing, meaning it needs to support pagination controls as links/`LinkTo`)\n // vs being \"uncontrolled\" (see comments above for details).\n //\n // If it has routing (and so it's \"controlled\"), than the value (\"state\") of the `currentPageSize` variable\n // is *always* determined by the controller via arguments (most of the times, connected to query parameters in the URL).\n // For this reason the \"get\" method always returns the value from the `args`,\n // while the \"set\" method never updates the private internal state (_variable).\n //\n // If instead it doesn't have routing (and so it's \"uncontrolled\") than the value (\"state\") of the `currentPageSize` variables\n // is *always* determined by the component's internal logic (and updated according to the user interaction with it).\n // For this reason the \"get\" and \"set\" methods always read from or write to the private internal state (_variable).\n\n get currentPageSize(): number | undefined {\n if (this._isControlled) {\n return this.args.currentPageSize;\n } else {\n return this._currentPageSize;\n }\n }\n set currentPageSize(value) {\n if (this._isControlled) {\n // noop\n } else {\n this._currentPageSize = value;\n }\n }\n\n get pageSizes(): number[] {\n const { pageSizes = DEFAULT_PAGE_SIZES } = this.args;\n\n assert(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `pageSizes argument must be an array. Received: ${pageSizes}`,\n Array.isArray(pageSizes) === true && pageSizes.length > 0\n );\n\n return pageSizes;\n }\n\n buildQueryParamsObject(\n page: HdsPaginationDirections,\n pageSize?: number\n ): HdsInteractiveQuery {\n if (this._isControlled) {\n // if the component is controlled, we can assert that the queryFunction is defined\n return this.args.queryFunction!(page, pageSize);\n } else {\n return {};\n }\n }\n\n get routing(): HdsPaginationCompactRoutingQueryProps {\n const routing: HdsPaginationCompactRoutingQueryProps = {\n route: this.args.route ?? undefined,\n model: this.args.model ?? undefined,\n models: this.args.models ?? undefined,\n replace: this.args.replace ?? undefined,\n };\n\n // the \"query\" is dynamic and needs to be calculated\n if (this._isControlled) {\n routing.queryPrev = this.buildQueryParamsObject(\n HdsPaginationDirectionValues.Prev,\n this.currentPageSize\n );\n routing.queryNext = this.buildQueryParamsObject(\n HdsPaginationDirectionValues.Next,\n this.currentPageSize\n );\n } else {\n routing.queryPrev = undefined;\n routing.queryNext = undefined;\n }\n\n return routing;\n }\n\n @action\n onPageChange(newPage: HdsPaginationDirections): void {\n const { onPageChange } = this.args;\n\n if (typeof onPageChange === 'function') {\n onPageChange(newPage);\n }\n }\n\n @action\n onPageSizeChange(newPageSize: number): void {\n const { onPageSizeChange } = this.args;\n\n // invoke the callback function\n if (typeof onPageSizeChange === 'function') {\n onPageSizeChange(newPageSize);\n }\n }\n}\n"],"names":["DEFAULT_PAGE_SIZES","HdsPaginationCompact","Component","g","prototype","tracked","i","void 0","showLabels","args","showSizeSelector","constructor","owner","queryFunction","undefined","_isControlled","assert","model","models","route","_currentPageSize","currentPageSize","pageSizes","ariaLabel","value","Array","isArray","length","buildQueryParamsObject","page","pageSize","routing","replace","queryPrev","HdsPaginationDirectionValues","Prev","queryNext","Next","onPageChange","newPage","n","action","onPageSizeChange","newPageSize","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/pagination/info/index.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';\n\nimport type { HdsPaginationNumberedSignature } from '../numbered/index';\nimport type { HdsTextBodySignature } from '../../text/body';\nimport type HdsIntlService from '../../../../services/hds-intl';\n\nexport interface HdsPaginationInfoSignature {\n Args: {\n itemsRangeStart: number;\n itemsRangeEnd: number;\n showTotalItems?: HdsPaginationNumberedSignature['Args']['showTotalItems'];\n totalItems: HdsPaginationNumberedSignature['Args']['totalItems'];\n };\n Element: HdsTextBodySignature['Element'];\n}\n\nexport default class HdsPaginationInfo extends Component<HdsPaginationInfoSignature> {\n @service hdsIntl!: HdsIntlService;\n\n get showTotalItems(): boolean {\n return this.args.showTotalItems ?? true;\n }\n\n get translatedItemsRange(): string {\n const { itemsRangeStart, itemsRangeEnd, totalItems } = this.args;\n\n let translationKey: string;\n let defaultValue: string;\n let interpolationProps: object;\n\n if (this.showTotalItems) {\n translationKey = 'hds.components.pagination.info.page_range_with_total';\n defaultValue = `${itemsRangeStart}–${itemsRangeEnd} of ${totalItems}`;\n interpolationProps = { itemsRangeStart, itemsRangeEnd, totalItems };\n } else {\n translationKey = 'hds.components.pagination.info.page_range';\n defaultValue = `${itemsRangeStart}–${itemsRangeEnd}`;\n interpolationProps = { itemsRangeStart, itemsRangeEnd };\n }\n\n return this.hdsIntl.t(translationKey, {\n ...interpolationProps,\n default: defaultValue,\n });\n }\n}\n"],"names":["HdsPaginationInfo","Component","g","prototype","service","i","showTotalItems","args","translatedItemsRange","itemsRangeStart","itemsRangeEnd","totalItems","translationKey","defaultValue","interpolationProps","hdsIntl","t","default","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAmBe,MAAMA,iBAAiB,SAASC,SAAS,CAA6B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAClFC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,MAAA;EAER,IAAIC,cAAcA,GAAY;AAC5B,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,cAAc,IAAI,IAAI;AACzC,EAAA;EAEA,IAAIE,oBAAoBA,GAAW;IACjC,MAAM;MAAEC,eAAe;MAAEC,aAAa;AAAEC,MAAAA;KAAY,GAAG,IAAI,CAACJ,IAAI;AAEhE,IAAA,IAAIK,cAAsB;AAC1B,IAAA,IAAIC,YAAoB;AACxB,IAAA,IAAIC,kBAA0B;IAE9B,IAAI,IAAI,CAACR,cAAc,EAAE;AACvBM,MAAAA,cAAc,GAAG,sDAAsD;AACvEC,MAAAA,YAAY,GAAG,CAAA,EAAGJ,eAAe,IAAIC,aAAa,CAAA,IAAA,EAAOC,UAAU,CAAA,CAAE;AACrEG,MAAAA,kBAAkB,GAAG;QAAEL,eAAe;QAAEC,aAAa;AAAEC,QAAAA;OAAY;AACrE,IAAA,CAAC,MAAM;AACLC,MAAAA,cAAc,GAAG,2CAA2C;AAC5DC,MAAAA,YAAY,GAAG,CAAA,EAAGJ,eAAe,CAAA,CAAA,EAAIC,aAAa,CAAA,CAAE;AACpDI,MAAAA,kBAAkB,GAAG;QAAEL,eAAe;AAAEC,QAAAA;OAAe;AACzD,IAAA;AAEA,IAAA,OAAO,IAAI,CAACK,OAAO,CAACC,CAAC,CAACJ,cAAc,EAAE;AACpC,MAAA,GAAGE,kBAAkB;AACrBG,MAAAA,OAAO,EAAEJ;AACX,KAAC,CAAC;AACJ,EAAA;AACF;AAACK,oBAAA,CAAAC,QAAA,EA7BoBnB,iBAAiB,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/pagination/info/index.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';\n\nimport type { HdsPaginationNumberedSignature } from '../numbered/index';\nimport type { HdsTextBodySignature } from '../../text/body';\nimport type HdsIntlService from '../../../../services/hds-intl';\n\nexport interface HdsPaginationInfoSignature {\n Args: {\n itemsRangeStart: number;\n itemsRangeEnd: number;\n showTotalItems?: HdsPaginationNumberedSignature['Args']['showTotalItems'];\n totalItems: HdsPaginationNumberedSignature['Args']['totalItems'];\n };\n Element: HdsTextBodySignature['Element'];\n}\n\nexport default class HdsPaginationInfo extends Component<HdsPaginationInfoSignature> {\n @service hdsIntl!: HdsIntlService;\n\n get showTotalItems(): boolean {\n return this.args.showTotalItems ?? true;\n }\n\n get translatedItemsRange(): string {\n const { itemsRangeStart, itemsRangeEnd, totalItems } = this.args;\n\n let translationKey: string;\n let defaultValue: string;\n let interpolationProps: object;\n\n if (this.showTotalItems) {\n translationKey = 'hds.components.pagination.info.page_range_with_total';\n defaultValue = `${itemsRangeStart}–${itemsRangeEnd} of ${totalItems}`;\n interpolationProps = { itemsRangeStart, itemsRangeEnd, totalItems };\n } else {\n translationKey = 'hds.components.pagination.info.page_range';\n defaultValue = `${itemsRangeStart}–${itemsRangeEnd}`;\n interpolationProps = { itemsRangeStart, itemsRangeEnd };\n }\n\n return this.hdsIntl.t(translationKey, {\n ...interpolationProps,\n default: defaultValue,\n });\n }\n}\n"],"names":["HdsPaginationInfo","Component","g","prototype","service","i","void 0","showTotalItems","args","translatedItemsRange","itemsRangeStart","itemsRangeEnd","totalItems","translationKey","defaultValue","interpolationProps","hdsIntl","t","default","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAmBe,MAAMA,iBAAiB,SAASC,SAAS,CAA6B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAClFC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;EAER,IAAIC,cAAcA,GAAY;AAC5B,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,cAAc,IAAI,IAAI;AACzC,EAAA;EAEA,IAAIE,oBAAoBA,GAAW;IACjC,MAAM;MAAEC,eAAe;MAAEC,aAAa;AAAEC,MAAAA;KAAY,GAAG,IAAI,CAACJ,IAAI;AAEhE,IAAA,IAAIK,cAAsB;AAC1B,IAAA,IAAIC,YAAoB;AACxB,IAAA,IAAIC,kBAA0B;IAE9B,IAAI,IAAI,CAACR,cAAc,EAAE;AACvBM,MAAAA,cAAc,GAAG,sDAAsD;AACvEC,MAAAA,YAAY,GAAG,CAAA,EAAGJ,eAAe,IAAIC,aAAa,CAAA,IAAA,EAAOC,UAAU,CAAA,CAAE;AACrEG,MAAAA,kBAAkB,GAAG;QAAEL,eAAe;QAAEC,aAAa;AAAEC,QAAAA;OAAY;AACrE,IAAA,CAAC,MAAM;AACLC,MAAAA,cAAc,GAAG,2CAA2C;AAC5DC,MAAAA,YAAY,GAAG,CAAA,EAAGJ,eAAe,CAAA,CAAA,EAAIC,aAAa,CAAA,CAAE;AACpDI,MAAAA,kBAAkB,GAAG;QAAEL,eAAe;AAAEC,QAAAA;OAAe;AACzD,IAAA;AAEA,IAAA,OAAO,IAAI,CAACK,OAAO,CAACC,CAAC,CAACJ,cAAc,EAAE;AACpC,MAAA,GAAGE,kBAAkB;AACrBG,MAAAA,OAAO,EAAEJ;AACX,KAAC,CAAC;AACJ,EAAA;AACF;AAACK,oBAAA,CAAAC,QAAA,EA7BoBpB,iBAAiB,CAAA;;;;"}