@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.
- package/declarations/components/hds/theme-context/index.d.ts +24 -0
- package/declarations/components/hds/theme-context/types.d.ts +19 -0
- package/declarations/components/hds/theme-switcher/index.d.ts +43 -0
- package/declarations/components.d.ts +2 -0
- package/declarations/services/hds-intl.d.ts +4 -3
- package/declarations/services/hds-theming.d.ts +57 -0
- package/declarations/services.d.ts +1 -0
- package/declarations/template-registry.d.ts +6 -0
- package/dist/_app_/components/hds/theme-context.js +1 -0
- package/dist/_app_/components/hds/theme-switcher.js +1 -0
- package/dist/_app_/services/hds-theming.js +1 -0
- package/dist/components/hds/advanced-table/index.js.map +1 -1
- package/dist/components/hds/advanced-table/models/column.js.map +1 -1
- package/dist/components/hds/advanced-table/models/row.js.map +1 -1
- package/dist/components/hds/advanced-table/models/table.js.map +1 -1
- package/dist/components/hds/advanced-table/td.js.map +1 -1
- package/dist/components/hds/advanced-table/th-context-menu.js.map +1 -1
- package/dist/components/hds/advanced-table/th-reorder-drop-target.js.map +1 -1
- package/dist/components/hds/advanced-table/th-resize-handle.js.map +1 -1
- package/dist/components/hds/advanced-table/th-selectable.js.map +1 -1
- package/dist/components/hds/advanced-table/th-sort.js.map +1 -1
- package/dist/components/hds/advanced-table/th.js.map +1 -1
- package/dist/components/hds/alert/index.js.map +1 -1
- package/dist/components/hds/app-header/index.js.map +1 -1
- package/dist/components/hds/app-side-nav/index.js.map +1 -1
- package/dist/components/hds/app-side-nav/list/index.js.map +1 -1
- package/dist/components/hds/app-side-nav/portal/target.js.map +1 -1
- package/dist/components/hds/breadcrumb/item.js.map +1 -1
- package/dist/components/hds/code-block/index.js.map +1 -1
- package/dist/components/hds/code-editor/index.js.map +1 -1
- package/dist/components/hds/copy/button/index.js.map +1 -1
- package/dist/components/hds/copy/snippet/index.js.map +1 -1
- package/dist/components/hds/disclosure-primitive/index.js.map +1 -1
- package/dist/components/hds/dismiss-button/index.js.map +1 -1
- package/dist/components/hds/dropdown/toggle/icon.js.map +1 -1
- package/dist/components/hds/flyout/index.js.map +1 -1
- package/dist/components/hds/form/key-value-inputs/index.js.map +1 -1
- package/dist/components/hds/form/masked-input/base.js.map +1 -1
- package/dist/components/hds/form/super-select/multiple/base.js.map +1 -1
- package/dist/components/hds/form/super-select/single/base.js.map +1 -1
- package/dist/components/hds/form/text-input/field.js.map +1 -1
- package/dist/components/hds/interactive/index.js.map +1 -1
- package/dist/components/hds/modal/index.js.map +1 -1
- package/dist/components/hds/pagination/compact/index.js.map +1 -1
- package/dist/components/hds/pagination/info/index.js.map +1 -1
- package/dist/components/hds/pagination/numbered/index.js.map +1 -1
- package/dist/components/hds/popover-primitive/index.js.map +1 -1
- package/dist/components/hds/side-nav/index.js.map +1 -1
- package/dist/components/hds/side-nav/list/index.js.map +1 -1
- package/dist/components/hds/side-nav/portal/target.js.map +1 -1
- package/dist/components/hds/stepper/list/index.js.map +1 -1
- package/dist/components/hds/stepper/nav/index.js.map +1 -1
- package/dist/components/hds/table/index.js.map +1 -1
- package/dist/components/hds/table/th-button-sort.js.map +1 -1
- package/dist/components/hds/table/th-selectable.js.map +1 -1
- package/dist/components/hds/tabs/index.js.map +1 -1
- package/dist/components/hds/tag/index.js.map +1 -1
- package/dist/components/hds/theme-context/index.js +45 -0
- package/dist/components/hds/theme-context/index.js.map +1 -0
- package/dist/components/hds/theme-context/types.js +27 -0
- package/dist/components/hds/theme-context/types.js.map +1 -0
- package/dist/components/hds/theme-switcher/index.js +100 -0
- package/dist/components/hds/theme-switcher/index.js.map +1 -0
- package/dist/components/hds/time/index.js.map +1 -1
- package/dist/components/hds/time/range.js.map +1 -1
- package/dist/components.js +2 -0
- package/dist/components.js.map +1 -1
- package/dist/helpers/hds-t.js.map +1 -1
- package/dist/modifiers/hds-code-editor.js.map +1 -1
- package/dist/services/hds-intl.js.map +1 -1
- package/dist/services/hds-theming.js +214 -0
- package/dist/services/hds-theming.js.map +1 -0
- package/dist/services/hds-time.js.map +1 -1
- package/dist/services.js +1 -1
- package/dist/styles/@hashicorp/design-system-components-common.css +9588 -0
- package/dist/styles/@hashicorp/design-system-components-common.css.map +1 -0
- package/dist/styles/@hashicorp/design-system-components-common.scss +24 -0
- package/dist/styles/@hashicorp/design-system-components.css +501 -320
- package/dist/styles/@hashicorp/design-system-components.css.map +1 -0
- package/dist/styles/@hashicorp/design-system-components.scss +4 -62
- package/dist/styles/@hashicorp/design-system-power-select-overrides.css +229 -0
- package/dist/styles/@hashicorp/design-system-power-select-overrides.css.map +1 -0
- package/dist/styles/components/badge-count.scss +26 -76
- package/dist/styles/components/badge.scss +26 -131
- package/dist/styles/components/button.scss +5 -0
- package/dist/styles/components/dropdown.scss +3 -5
- package/dist/styles/components/form/file-input.scss +2 -2
- package/dist/styles/components/form/key-value-inputs.scss +2 -4
- package/dist/styles/components/index.scss +52 -0
- package/dist/styles/components/theme-context.scss +12 -0
- package/dist/styles/mixins/_button.scss +82 -129
- package/dist/styles/mixins/_carbonization.scss +31 -0
- package/dist/styles/mixins/_interactive-dark-theme.scss +1 -1
- package/dist/utils/hds-aria-described-by.js.map +1 -1
- package/package.json +10 -6
- package/dist/styles/@hashicorp/design-system-components.scss.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"th-button-sort.js","sources":["../../../../src/components/hds/table/th-button-sort.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { guidFor } from '@ember/object/internals';\nimport {\n HdsTableThSortOrderIconValues,\n HdsTableThSortOrderValues,\n} from './types.ts';\nimport type {\n HdsTableThSortOrder,\n HdsTableThSortOrderIcons,\n HdsTableThSortOrderLabels,\n} from './types.ts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nexport interface HdsTableThButtonSortSignature {\n Args: {\n labelId?: string;\n onClick?: () => void;\n sortOrder?: HdsTableThSortOrder;\n };\n Element: HTMLButtonElement;\n}\n\nconst NOOP = () => {};\n\nexport default class HdsTableThButtonSort extends Component<HdsTableThButtonSortSignature> {\n @service hdsIntl!: HdsIntlService;\n\n // Generates a unique ID for the (hidden) \"label prefix/suffix\" <span> elements\n private _prefixLabelId = 'prefix-' + guidFor(this);\n private _suffixLabelId = 'suffix-' + guidFor(this);\n\n get icon(): HdsTableThSortOrderIcons {\n switch (this.args.sortOrder) {\n case HdsTableThSortOrderValues.Asc:\n return HdsTableThSortOrderIconValues.ArrowUp;\n case HdsTableThSortOrderValues.Desc:\n return HdsTableThSortOrderIconValues.ArrowDown;\n default:\n return HdsTableThSortOrderIconValues.SwapVertical;\n }\n }\n\n // Determines the label (suffix) to use in the `aria-labelledby` attribute of the button,\n // used to indicate what will happen if the user clicks on the button\n get sortOrderLabel(): HdsTableThSortOrderLabels {\n const { sortOrder } = this.args;\n\n const translatedLabel =\n sortOrder === HdsTableThSortOrderValues.Asc\n ? this.hdsIntl.t('hds.components.common.descending', {\n default: 'descending',\n })\n : this.hdsIntl.t('hds.components.common.ascending', {\n default: 'ascending',\n });\n\n return translatedLabel as HdsTableThSortOrderLabels;\n }\n\n get onClick(): () => void {\n const { onClick } = this.args;\n\n if (typeof onClick === 'function') {\n return onClick;\n } else {\n return NOOP;\n }\n }\n\n get classNames(): string {\n const classes = ['hds-table__th-button', 'hds-table__th-button--sort'];\n\n // add a class based on the @sortOrder argument\n if (\n this.args.sortOrder === HdsTableThSortOrderValues.Asc ||\n this.args.sortOrder === HdsTableThSortOrderValues.Desc\n ) {\n classes.push(`hds-table__th-button--is-sorted`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["NOOP","HdsTableThButtonSort","Component","g","prototype","service","i","_prefixLabelId","guidFor","_suffixLabelId","icon","args","sortOrder","HdsTableThSortOrderValues","Asc","HdsTableThSortOrderIconValues","ArrowUp","Desc","ArrowDown","SwapVertical","sortOrderLabel","translatedLabel","hdsIntl","t","default","onClick","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AAwBA,MAAMA,IAAI,GAAGA,MAAM,CAAC,CAAC;AAEN,MAAMC,oBAAoB,SAASC,SAAS,CAAgC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACxFC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"th-button-sort.js","sources":["../../../../src/components/hds/table/th-button-sort.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { guidFor } from '@ember/object/internals';\nimport {\n HdsTableThSortOrderIconValues,\n HdsTableThSortOrderValues,\n} from './types.ts';\nimport type {\n HdsTableThSortOrder,\n HdsTableThSortOrderIcons,\n HdsTableThSortOrderLabels,\n} from './types.ts';\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nexport interface HdsTableThButtonSortSignature {\n Args: {\n labelId?: string;\n onClick?: () => void;\n sortOrder?: HdsTableThSortOrder;\n };\n Element: HTMLButtonElement;\n}\n\nconst NOOP = () => {};\n\nexport default class HdsTableThButtonSort extends Component<HdsTableThButtonSortSignature> {\n @service hdsIntl!: HdsIntlService;\n\n // Generates a unique ID for the (hidden) \"label prefix/suffix\" <span> elements\n private _prefixLabelId = 'prefix-' + guidFor(this);\n private _suffixLabelId = 'suffix-' + guidFor(this);\n\n get icon(): HdsTableThSortOrderIcons {\n switch (this.args.sortOrder) {\n case HdsTableThSortOrderValues.Asc:\n return HdsTableThSortOrderIconValues.ArrowUp;\n case HdsTableThSortOrderValues.Desc:\n return HdsTableThSortOrderIconValues.ArrowDown;\n default:\n return HdsTableThSortOrderIconValues.SwapVertical;\n }\n }\n\n // Determines the label (suffix) to use in the `aria-labelledby` attribute of the button,\n // used to indicate what will happen if the user clicks on the button\n get sortOrderLabel(): HdsTableThSortOrderLabels {\n const { sortOrder } = this.args;\n\n const translatedLabel =\n sortOrder === HdsTableThSortOrderValues.Asc\n ? this.hdsIntl.t('hds.components.common.descending', {\n default: 'descending',\n })\n : this.hdsIntl.t('hds.components.common.ascending', {\n default: 'ascending',\n });\n\n return translatedLabel as HdsTableThSortOrderLabels;\n }\n\n get onClick(): () => void {\n const { onClick } = this.args;\n\n if (typeof onClick === 'function') {\n return onClick;\n } else {\n return NOOP;\n }\n }\n\n get classNames(): string {\n const classes = ['hds-table__th-button', 'hds-table__th-button--sort'];\n\n // add a class based on the @sortOrder argument\n if (\n this.args.sortOrder === HdsTableThSortOrderValues.Asc ||\n this.args.sortOrder === HdsTableThSortOrderValues.Desc\n ) {\n classes.push(`hds-table__th-button--is-sorted`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["NOOP","HdsTableThButtonSort","Component","g","prototype","service","i","void 0","_prefixLabelId","guidFor","_suffixLabelId","icon","args","sortOrder","HdsTableThSortOrderValues","Asc","HdsTableThSortOrderIconValues","ArrowUp","Desc","ArrowDown","SwapVertical","sortOrderLabel","translatedLabel","hdsIntl","t","default","onClick","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AAwBA,MAAMA,IAAI,GAAGA,MAAM,CAAC,CAAC;AAEN,MAAMC,oBAAoB,SAASC,SAAS,CAAgC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACxFC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAER;AACQC,EAAAA,cAAc,GAAG,SAAS,GAAGC,OAAO,CAAC,IAAI,CAAC;AAC1CC,EAAAA,cAAc,GAAG,SAAS,GAAGD,OAAO,CAAC,IAAI,CAAC;EAElD,IAAIE,IAAIA,GAA6B;AACnC,IAAA,QAAQ,IAAI,CAACC,IAAI,CAACC,SAAS;MACzB,KAAKC,yBAAyB,CAACC,GAAG;QAChC,OAAOC,6BAA6B,CAACC,OAAO;MAC9C,KAAKH,yBAAyB,CAACI,IAAI;QACjC,OAAOF,6BAA6B,CAACG,SAAS;AAChD,MAAA;QACE,OAAOH,6BAA6B,CAACI,YAAY;AACrD;AACF,EAAA;;AAEA;AACA;EACA,IAAIC,cAAcA,GAA8B;IAC9C,MAAM;AAAER,MAAAA;KAAW,GAAG,IAAI,CAACD,IAAI;AAE/B,IAAA,MAAMU,eAAe,GACnBT,SAAS,KAAKC,yBAAyB,CAACC,GAAG,GACvC,IAAI,CAACQ,OAAO,CAACC,CAAC,CAAC,kCAAkC,EAAE;AACjDC,MAAAA,OAAO,EAAE;KACV,CAAC,GACF,IAAI,CAACF,OAAO,CAACC,CAAC,CAAC,iCAAiC,EAAE;AAChDC,MAAAA,OAAO,EAAE;AACX,KAAC,CAAC;AAER,IAAA,OAAOH,eAAe;AACxB,EAAA;EAEA,IAAII,OAAOA,GAAe;IACxB,MAAM;AAAEA,MAAAA;KAAS,GAAG,IAAI,CAACd,IAAI;AAE7B,IAAA,IAAI,OAAOc,OAAO,KAAK,UAAU,EAAE;AACjC,MAAA,OAAOA,OAAO;AAChB,IAAA,CAAC,MAAM;AACL,MAAA,OAAO1B,IAAI;AACb,IAAA;AACF,EAAA;EAEA,IAAI2B,UAAUA,GAAW;AACvB,IAAA,MAAMC,OAAO,GAAG,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;;AAEtE;AACA,IAAA,IACE,IAAI,CAAChB,IAAI,CAACC,SAAS,KAAKC,yBAAyB,CAACC,GAAG,IACrD,IAAI,CAACH,IAAI,CAACC,SAAS,KAAKC,yBAAyB,CAACI,IAAI,EACtD;AACAU,MAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,+BAAA,CAAiC,CAAC;AACjD,IAAA;AAEA,IAAA,OAAOD,OAAO,CAACE,IAAI,CAAC,GAAG,CAAC;AAC1B,EAAA;AACF;AAACC,oBAAA,CAAAC,QAAA,EA1DoB/B,oBAAoB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"th-selectable.js","sources":["../../../../src/components/hds/table/th-selectable.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsTableThSortOrderValues,\n HdsTableThSortOrderLabelValues,\n} from './types.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';\nimport type {\n HdsTableScope,\n HdsTableThSortOrder,\n HdsTableThSortOrderLabels,\n} from './types';\nimport type { HdsTableThSignature } from './th';\nimport type Owner from '@ember/owner';\n\nexport interface HdsTableThSelectableSignature {\n Args: {\n didInsert?: (\n checkbox: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ) => void;\n isSelected?: boolean;\n onClickSortBySelected?: () => void;\n onSelectionChange?: (\n target: HdsFormCheckboxBaseSignature['Element'],\n selectionKey: string | undefined\n ) => void;\n selectionAriaLabelSuffix?: string;\n selectionKey?: string;\n selectionScope?: HdsTableScope;\n sortBySelectedOrder?: HdsTableThSortOrder;\n willDestroy?: (selectionKey?: string) => void;\n };\n Element: HdsTableThSignature['Element'];\n}\n\nexport default class HdsTableThSelectable extends Component<HdsTableThSelectableSignature> {\n @tracked isSelected: boolean;\n private _guid = guidFor(this);\n\n private _checkboxId = `checkbox-${this._guid}`;\n private _labelId = `label-${this._guid}`;\n\n constructor(owner: Owner, args: HdsTableThSelectableSignature['Args']) {\n super(owner, args);\n this.isSelected = this.args.isSelected ?? false;\n }\n\n get isSortable(): boolean {\n return this.args.onClickSortBySelected !== undefined;\n }\n\n get ariaLabel(): string {\n const { selectionAriaLabelSuffix = 'row' } = this.args;\n return `Select ${selectionAriaLabelSuffix}`;\n }\n\n get ariaSort(): HdsTableThSortOrderLabels | undefined {\n switch (this.args.sortBySelectedOrder) {\n case HdsTableThSortOrderValues.Asc:\n return HdsTableThSortOrderLabelValues.Asc;\n case HdsTableThSortOrderValues.Desc:\n return HdsTableThSortOrderLabelValues.Desc;\n default:\n // none is the default per the spec.\n return HdsTableThSortOrderLabelValues.None;\n }\n }\n\n @action\n didInsert(checkbox: HdsFormCheckboxBaseSignature['Element']): void {\n const { didInsert } = this.args;\n if (typeof didInsert === 'function') {\n didInsert(checkbox, this.args.selectionKey);\n }\n }\n\n @action\n willDestroyNode(): void {\n super.willDestroy();\n const { willDestroy } = this.args;\n if (typeof willDestroy === 'function') {\n willDestroy(this.args.selectionKey);\n }\n }\n\n @action\n onSelectionChange(event: Event): void {\n // Assert event.target as HdsFormCheckboxBaseSignature['Element'] to access the 'checked' property\n const target = event.target as HdsFormCheckboxBaseSignature['Element'];\n this.isSelected = target.checked;\n const { onSelectionChange } = this.args;\n if (typeof onSelectionChange === 'function') {\n onSelectionChange(target, this.args.selectionKey);\n }\n }\n}\n"],"names":["HdsTableThSelectable","Component","g","prototype","tracked","i","_guid","guidFor","_checkboxId","_labelId","constructor","owner","args","isSelected","isSortable","onClickSortBySelected","undefined","ariaLabel","selectionAriaLabelSuffix","ariaSort","sortBySelectedOrder","HdsTableThSortOrderValues","Asc","HdsTableThSortOrderLabelValues","Desc","None","didInsert","checkbox","selectionKey","n","action","willDestroyNode","willDestroy","onSelectionChange","event","target","checked","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAwCe,MAAMA,oBAAoB,SAASC,SAAS,CAAgC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,YAAA,EAAA,CACxFC,OAAO,CAAA,CAAA;AAAA;EAAA,WAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,YAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"th-selectable.js","sources":["../../../../src/components/hds/table/th-selectable.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { guidFor } from '@ember/object/internals';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsTableThSortOrderValues,\n HdsTableThSortOrderLabelValues,\n} from './types.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';\nimport type {\n HdsTableScope,\n HdsTableThSortOrder,\n HdsTableThSortOrderLabels,\n} from './types';\nimport type { HdsTableThSignature } from './th';\nimport type Owner from '@ember/owner';\n\nexport interface HdsTableThSelectableSignature {\n Args: {\n didInsert?: (\n checkbox: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ) => void;\n isSelected?: boolean;\n onClickSortBySelected?: () => void;\n onSelectionChange?: (\n target: HdsFormCheckboxBaseSignature['Element'],\n selectionKey: string | undefined\n ) => void;\n selectionAriaLabelSuffix?: string;\n selectionKey?: string;\n selectionScope?: HdsTableScope;\n sortBySelectedOrder?: HdsTableThSortOrder;\n willDestroy?: (selectionKey?: string) => void;\n };\n Element: HdsTableThSignature['Element'];\n}\n\nexport default class HdsTableThSelectable extends Component<HdsTableThSelectableSignature> {\n @tracked isSelected: boolean;\n private _guid = guidFor(this);\n\n private _checkboxId = `checkbox-${this._guid}`;\n private _labelId = `label-${this._guid}`;\n\n constructor(owner: Owner, args: HdsTableThSelectableSignature['Args']) {\n super(owner, args);\n this.isSelected = this.args.isSelected ?? false;\n }\n\n get isSortable(): boolean {\n return this.args.onClickSortBySelected !== undefined;\n }\n\n get ariaLabel(): string {\n const { selectionAriaLabelSuffix = 'row' } = this.args;\n return `Select ${selectionAriaLabelSuffix}`;\n }\n\n get ariaSort(): HdsTableThSortOrderLabels | undefined {\n switch (this.args.sortBySelectedOrder) {\n case HdsTableThSortOrderValues.Asc:\n return HdsTableThSortOrderLabelValues.Asc;\n case HdsTableThSortOrderValues.Desc:\n return HdsTableThSortOrderLabelValues.Desc;\n default:\n // none is the default per the spec.\n return HdsTableThSortOrderLabelValues.None;\n }\n }\n\n @action\n didInsert(checkbox: HdsFormCheckboxBaseSignature['Element']): void {\n const { didInsert } = this.args;\n if (typeof didInsert === 'function') {\n didInsert(checkbox, this.args.selectionKey);\n }\n }\n\n @action\n willDestroyNode(): void {\n super.willDestroy();\n const { willDestroy } = this.args;\n if (typeof willDestroy === 'function') {\n willDestroy(this.args.selectionKey);\n }\n }\n\n @action\n onSelectionChange(event: Event): void {\n // Assert event.target as HdsFormCheckboxBaseSignature['Element'] to access the 'checked' property\n const target = event.target as HdsFormCheckboxBaseSignature['Element'];\n this.isSelected = target.checked;\n const { onSelectionChange } = this.args;\n if (typeof onSelectionChange === 'function') {\n onSelectionChange(target, this.args.selectionKey);\n }\n }\n}\n"],"names":["HdsTableThSelectable","Component","g","prototype","tracked","i","void 0","_guid","guidFor","_checkboxId","_labelId","constructor","owner","args","isSelected","isSortable","onClickSortBySelected","undefined","ariaLabel","selectionAriaLabelSuffix","ariaSort","sortBySelectedOrder","HdsTableThSortOrderValues","Asc","HdsTableThSortOrderLabelValues","Desc","None","didInsert","checkbox","selectionKey","n","action","willDestroyNode","willDestroy","onSelectionChange","event","target","checked","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/tabs/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert, warn } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { HdsTabsSizeValues } from './types.ts';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsTabsTabSignature } from './tab';\nimport type { HdsTabsPanelSignature } from './panel';\nimport type { HdsTabsTabIds, HdsTabsPanelIds, HdsTabsSizes } from './types.ts';\nimport type Owner from '@ember/owner';\n\nexport const DEFAULT_SIZE: HdsTabsSizes = 'medium';\nexport const SIZES: HdsTabsSizes[] = Object.values(HdsTabsSizeValues);\nexport interface HdsTabsSignature {\n Args: {\n size?: HdsTabsSizes;\n onClickTab?: (event: MouseEvent, tabIndex: number) => void;\n selectedTabIndex?: HdsTabsTabSignature['Args']['selectedTabIndex'];\n isParentVisible?: boolean;\n };\n Blocks: {\n default: [\n {\n Tab?: ComponentLike<HdsTabsTabSignature>;\n Panel?: ComponentLike<HdsTabsPanelSignature>;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsTabs extends Component<HdsTabsSignature> {\n @tracked private _tabNodes: HTMLButtonElement[] = [];\n @tracked private _tabIds: HdsTabsTabIds = [];\n @tracked private _panelNodes: HTMLElement[] = [];\n @tracked private _panelIds: HdsTabsPanelIds = [];\n @tracked private _selectedTabIndex;\n @tracked private _selectedTabId?: string;\n @tracked private _isControlled: boolean;\n\n /**\n * Sets the size of Tabs\n * Accepted values: medium, large\n *\n * @param size\n * @type {string}\n * @default 'medium'\n */\n get size(): HdsTabsSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Tabs\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n constructor(owner: Owner, args: HdsTabsSignature['Args']) {\n super(owner, args);\n\n // this is to determine if the \"selected\" tab logic is controlled in the consumers' code or is maintained as an internal state\n this._isControlled = this.args.selectedTabIndex !== undefined;\n this._selectedTabIndex = this.args.selectedTabIndex ?? 0;\n }\n\n get selectedTabIndex(): number {\n if (this._isControlled) {\n return this.args.selectedTabIndex!;\n } else {\n return this._selectedTabIndex;\n }\n }\n\n set selectedTabIndex(value) {\n if (this._isControlled) {\n // noop\n } else {\n this._selectedTabIndex = value;\n }\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-tabs'];\n\n // add a class based on the @size argument\n classes.push(`hds-tabs--size-${this.size}`);\n\n return classes.join(' ');\n }\n\n @action\n didInsert(): void {\n assert(\n 'The number of Tabs must be equal to the number of Panels',\n this._tabNodes.length === this._panelNodes.length\n );\n\n if (this._selectedTabId) {\n this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n }\n\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didUpdateSelectedTabIndex(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didUpdateSelectedTabId(): void {\n // if the selected tab is set dynamically (eg. in a `each` loop)\n // the `Tab` nodes will be re-inserted/rendered, which means the `this.selectedTabId` variable changes\n // but the parent `Tabs` component has already been rendered/inserted but doesn't re-render\n // so the value of the `selectedTabIndex` is not updated, unless we trigger a recalculation\n // using the `did-update` modifier that checks for changes in the `this.selectedTabId` variable\n if (this._selectedTabId) {\n this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n }\n }\n\n @action\n didUpdateParentVisibility(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didInsertTab(element: HTMLButtonElement, isSelected?: boolean): void {\n this._tabNodes = [...this._tabNodes, element];\n this._tabIds = [...this._tabIds, element.id];\n if (isSelected) {\n this._selectedTabId = element.id;\n }\n }\n\n @action\n didUpdateTab(tabIndex: number, isSelected?: boolean): void {\n if (isSelected) {\n this.selectedTabIndex = tabIndex;\n }\n this.setTabIndicator();\n }\n\n @action\n willDestroyTab(element: HTMLButtonElement): void {\n this._tabNodes = this._tabNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._tabIds = this._tabIds.filter(\n (tabId): boolean => tabId !== element.id\n );\n }\n\n @action\n didInsertPanel(element: HTMLElement, panelId: string): void {\n this._panelNodes = [...this._panelNodes, element];\n this._panelIds = [...this._panelIds, panelId];\n }\n\n @action\n willDestroyPanel(element: HTMLElement): void {\n this._panelNodes = this._panelNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._panelIds = this._panelIds.filter(\n (panelId): boolean => panelId !== element.id\n );\n }\n\n @action\n onClick(event: MouseEvent, tabIndex: number): void {\n this.selectedTabIndex = tabIndex;\n this.setTabIndicator();\n\n // invoke the callback function if it's provided as argument\n if (typeof this.args.onClickTab === 'function') {\n this.args.onClickTab(event, tabIndex);\n }\n }\n\n @action\n onKeyUp(tabIndex: number, event: KeyboardEvent): void {\n const leftArrow = 'ArrowLeft';\n const rightArrow = 'ArrowRight';\n const enterKey = 'Enter';\n const spaceKey = ' ';\n\n if (event.key === rightArrow) {\n const nextTabIndex = (tabIndex + 1) % this._tabIds.length;\n this.focusTab(nextTabIndex, event);\n } else if (event.key === leftArrow) {\n const prevTabIndex =\n (tabIndex + this._tabIds.length - 1) % this._tabIds.length;\n this.focusTab(prevTabIndex, event);\n } else if (event.key === enterKey || event.key === spaceKey) {\n this.selectedTabIndex = tabIndex;\n }\n // scroll selected tab into view (it may be out of view when activated using a keyboard with `prev/next`)\n const parentNode = this._tabNodes[this.selectedTabIndex]?.parentNode;\n if (parentNode instanceof HTMLElement) {\n parentNode.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n // Focus tab for keyboard & mouse navigation:\n focusTab(tabIndex: number, event: KeyboardEvent): void {\n event.preventDefault();\n this._tabNodes[tabIndex]?.focus();\n }\n\n setTabIndicator(): void {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n const tabElem = this._tabNodes[this.selectedTabIndex];\n\n if (tabElem != null) {\n const tabElemParentNode = tabElem.parentNode as HTMLElement;\n const tabsElemClosestList = tabElem.closest(\n '.hds-tabs__tablist'\n ) as HTMLElement;\n\n // this condition is `null` if any of the parents has `display: none`\n if (tabElemParentNode.offsetParent) {\n const tabLeftPos = tabElemParentNode.offsetLeft;\n const tabWidth = tabElemParentNode.offsetWidth;\n\n // Set CSS custom properties for indicator\n tabsElemClosestList.style.setProperty(\n '--indicator-left-pos',\n tabLeftPos + 'px'\n );\n tabsElemClosestList.style.setProperty(\n '--indicator-width',\n tabWidth + 'px'\n );\n }\n } else {\n let message = '';\n message +=\n '\"Hds::Tabs\" has tried to set the indicator for an element that doesn\\'t exist';\n if (this._tabNodes.length === 0) {\n message +=\n ' (the array `this._tabNodes` is empty, there are no tabs, probably already destroyed)';\n } else {\n message += ` (the value ${\n this.selectedTabIndex\n } of \\`this.selectedTabIndex\\` is out of bound for the array \\`this._tabNodes\\`, whose index range is [0 - ${\n this._tabNodes.length - 1\n }])`;\n }\n // https://api.emberjs.com/ember/5.3/classes/@ember%2Fdebug/methods/warn?anchor=warn\n warn(message, true, {\n id: 'hds-debug.tabs.setTabIndicator-tabElem-not-available',\n });\n }\n });\n }\n}\n"],"names":["DEFAULT_SIZE","SIZES","Object","values","HdsTabsSizeValues","HdsTabs","Component","g","prototype","tracked","i","size","args","assert","join","includes","constructor","owner","_isControlled","selectedTabIndex","undefined","_selectedTabIndex","value","classNames","classes","push","didInsert","_tabNodes","length","_panelNodes","_selectedTabId","_tabIds","indexOf","schedule","setTabIndicator","n","action","didUpdateSelectedTabIndex","didUpdateSelectedTabId","didUpdateParentVisibility","didInsertTab","element","isSelected","id","didUpdateTab","tabIndex","willDestroyTab","filter","node","tabId","didInsertPanel","panelId","_panelIds","willDestroyPanel","onClick","event","onClickTab","onKeyUp","leftArrow","rightArrow","enterKey","spaceKey","key","nextTabIndex","focusTab","prevTabIndex","parentNode","HTMLElement","scrollIntoView","behavior","block","inline","preventDefault","focus","next","tabElem","tabElemParentNode","tabsElemClosestList","closest","offsetParent","tabLeftPos","offsetLeft","tabWidth","offsetWidth","style","setProperty","message","warn","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAcO,MAAMA,YAA0B,GAAG;AACnC,MAAMC,KAAqB,GAAGC,MAAM,CAACC,MAAM,CAACC,iBAAiB;AAmBrD,MAAMC,OAAO,SAASC,SAAS,CAAmB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC9DC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA0C,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACnDC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAkC,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,aAAA,EAAA,CAC3CC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAsC,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,YAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,aAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC/CC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAsC,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,mBAAA,EAAA,CAC/CC,OAAO,CAAA,CAAA;AAAA;EAAA,kBAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,gBAAA,EAAA,CACPC,OAAO,CAAA,CAAA;AAAA;EAAA,eAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,EAAA,MAAA;AAAA,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,eAAA,EAAA,CACPC,OAAO,CAAA,CAAA;AAAA;EAAA,cAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,eAAA,CAAA,EAAA,MAAA;AAER;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAIC,IAAIA,GAAiB;IACvB,MAAM;AAAEA,MAAAA,IAAI,GAAGX;KAAc,GAAG,IAAI,CAACY,IAAI;AAEzCC,IAAAA,MAAM,CACJ,CAAA,oDAAA,EAAuDZ,KAAK,CAACa,IAAI,CAC/D,IACF,CAAC,CAAA,YAAA,EAAeH,IAAI,CAAA,CAAE,EACtBV,KAAK,CAACc,QAAQ,CAACJ,IAAI,CACrB,CAAC;AAED,IAAA,OAAOA,IAAI;AACb,EAAA;AAEAK,EAAAA,WAAWA,CAACC,KAAY,EAAEL,IAA8B,EAAE;AACxD,IAAA,KAAK,CAACK,KAAK,EAAEL,IAAI,CAAC;;AAElB;IACA,IAAI,CAACM,aAAa,GAAG,IAAI,CAACN,IAAI,CAACO,gBAAgB,KAAKC,SAAS;IAC7D,IAAI,CAACC,iBAAiB,GAAG,IAAI,CAACT,IAAI,CAACO,gBAAgB,IAAI,CAAC;AAC1D,EAAA;EAEA,IAAIA,gBAAgBA,GAAW;IAC7B,IAAI,IAAI,CAACD,aAAa,EAAE;AACtB,MAAA,OAAO,IAAI,CAACN,IAAI,CAACO,gBAAgB;AACnC,IAAA,CAAC,MAAM;MACL,OAAO,IAAI,CAACE,iBAAiB;AAC/B,IAAA;AACF,EAAA;EAEA,IAAIF,gBAAgBA,CAACG,KAAK,EAAE;IAC1B,IAAI,IAAI,CAACJ,aAAa,EAAE,CAEvB,MAAM;MACL,IAAI,CAACG,iBAAiB,GAAGC,KAAK;AAChC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACE,IAAIC,UAAUA,GAAW;AACvB,IAAA,MAAMC,OAAO,GAAG,CAAC,UAAU,CAAC;;AAE5B;IACAA,OAAO,CAACC,IAAI,CAAC,CAAA,eAAA,EAAkB,IAAI,CAACd,IAAI,EAAE,CAAC;AAE3C,IAAA,OAAOa,OAAO,CAACV,IAAI,CAAC,GAAG,CAAC;AAC1B,EAAA;AAGAY,EAAAA,SAASA,GAAS;AAChBb,IAAAA,MAAM,CACJ,0DAA0D,EAC1D,IAAI,CAACc,SAAS,CAACC,MAAM,KAAK,IAAI,CAACC,WAAW,CAACD,MAC7C,CAAC;IAED,IAAI,IAAI,CAACE,cAAc,EAAE;AACvB,MAAA,IAAI,CAACX,gBAAgB,GAAG,IAAI,CAACY,OAAO,CAACC,OAAO,CAAC,IAAI,CAACF,cAAc,CAAC;AACnE,IAAA;;AAEA;IACAG,QAAQ,CAAC,aAAa,EAAE,MAAY;MAClC,IAAI,CAACC,eAAe,EAAE;AACxB,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,WAAA,EAAA,CAfA4B,MAAM,CAAA,CAAA;AAAA;AAkBPC,EAAAA,yBAAyBA,GAAS;AAChC;IACAJ,QAAQ,CAAC,aAAa,EAAE,MAAY;MAClC,IAAI,CAACC,eAAe,EAAE;AACxB,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,2BAAA,EAAA,CANA4B,MAAM,CAAA,CAAA;AAAA;AASPE,EAAAA,sBAAsBA,GAAS;AAC7B;AACA;AACA;AACA;AACA;IACA,IAAI,IAAI,CAACR,cAAc,EAAE;AACvB,MAAA,IAAI,CAACX,gBAAgB,GAAG,IAAI,CAACY,OAAO,CAACC,OAAO,CAAC,IAAI,CAACF,cAAc,CAAC;AACnE,IAAA;AACF,EAAA;AAAC,EAAA;IAAAK,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,wBAAA,EAAA,CAVA4B,MAAM,CAAA,CAAA;AAAA;AAaPG,EAAAA,yBAAyBA,GAAS;AAChC;IACAN,QAAQ,CAAC,aAAa,EAAE,MAAY;MAClC,IAAI,CAACC,eAAe,EAAE;AACxB,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,2BAAA,EAAA,CANA4B,MAAM,CAAA,CAAA;AAAA;AASPI,EAAAA,YAAYA,CAACC,OAA0B,EAAEC,UAAoB,EAAQ;IACnE,IAAI,CAACf,SAAS,GAAG,CAAC,GAAG,IAAI,CAACA,SAAS,EAAEc,OAAO,CAAC;AAC7C,IAAA,IAAI,CAACV,OAAO,GAAG,CAAC,GAAG,IAAI,CAACA,OAAO,EAAEU,OAAO,CAACE,EAAE,CAAC;AAC5C,IAAA,IAAID,UAAU,EAAE;AACd,MAAA,IAAI,CAACZ,cAAc,GAAGW,OAAO,CAACE,EAAE;AAClC,IAAA;AACF,EAAA;AAAC,EAAA;IAAAR,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,cAAA,EAAA,CAPA4B,MAAM,CAAA,CAAA;AAAA;AAUPQ,EAAAA,YAAYA,CAACC,QAAgB,EAAEH,UAAoB,EAAQ;AACzD,IAAA,IAAIA,UAAU,EAAE;MACd,IAAI,CAACvB,gBAAgB,GAAG0B,QAAQ;AAClC,IAAA;IACA,IAAI,CAACX,eAAe,EAAE;AACxB,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,cAAA,EAAA,CANA4B,MAAM,CAAA,CAAA;AAAA;EASPU,cAAcA,CAACL,OAA0B,EAAQ;AAC/C,IAAA,IAAI,CAACd,SAAS,GAAG,IAAI,CAACA,SAAS,CAACoB,MAAM,CACnCC,IAAI,IAAcA,IAAI,CAACL,EAAE,KAAKF,OAAO,CAACE,EACzC,CAAC;AACD,IAAA,IAAI,CAACZ,OAAO,GAAG,IAAI,CAACA,OAAO,CAACgB,MAAM,CAC/BE,KAAK,IAAcA,KAAK,KAAKR,OAAO,CAACE,EACxC,CAAC;AACH,EAAA;AAAC,EAAA;IAAAR,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,gBAAA,EAAA,CARA4B,MAAM,CAAA,CAAA;AAAA;AAWPc,EAAAA,cAAcA,CAACT,OAAoB,EAAEU,OAAe,EAAQ;IAC1D,IAAI,CAACtB,WAAW,GAAG,CAAC,GAAG,IAAI,CAACA,WAAW,EAAEY,OAAO,CAAC;IACjD,IAAI,CAACW,SAAS,GAAG,CAAC,GAAG,IAAI,CAACA,SAAS,EAAED,OAAO,CAAC;AAC/C,EAAA;AAAC,EAAA;IAAAhB,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,gBAAA,EAAA,CAJA4B,MAAM,CAAA,CAAA;AAAA;EAOPiB,gBAAgBA,CAACZ,OAAoB,EAAQ;AAC3C,IAAA,IAAI,CAACZ,WAAW,GAAG,IAAI,CAACA,WAAW,CAACkB,MAAM,CACvCC,IAAI,IAAcA,IAAI,CAACL,EAAE,KAAKF,OAAO,CAACE,EACzC,CAAC;AACD,IAAA,IAAI,CAACS,SAAS,GAAG,IAAI,CAACA,SAAS,CAACL,MAAM,CACnCI,OAAO,IAAcA,OAAO,KAAKV,OAAO,CAACE,EAC5C,CAAC;AACH,EAAA;AAAC,EAAA;IAAAR,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,kBAAA,EAAA,CARA4B,MAAM,CAAA,CAAA;AAAA;AAWPkB,EAAAA,OAAOA,CAACC,KAAiB,EAAEV,QAAgB,EAAQ;IACjD,IAAI,CAAC1B,gBAAgB,GAAG0B,QAAQ;IAChC,IAAI,CAACX,eAAe,EAAE;;AAEtB;IACA,IAAI,OAAO,IAAI,CAACtB,IAAI,CAAC4C,UAAU,KAAK,UAAU,EAAE;MAC9C,IAAI,CAAC5C,IAAI,CAAC4C,UAAU,CAACD,KAAK,EAAEV,QAAQ,CAAC;AACvC,IAAA;AACF,EAAA;AAAC,EAAA;IAAAV,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,SAAA,EAAA,CATA4B,MAAM,CAAA,CAAA;AAAA;AAYPqB,EAAAA,OAAOA,CAACZ,QAAgB,EAAEU,KAAoB,EAAQ;IACpD,MAAMG,SAAS,GAAG,WAAW;IAC7B,MAAMC,UAAU,GAAG,YAAY;IAC/B,MAAMC,QAAQ,GAAG,OAAO;IACxB,MAAMC,QAAQ,GAAG,GAAG;AAEpB,IAAA,IAAIN,KAAK,CAACO,GAAG,KAAKH,UAAU,EAAE;MAC5B,MAAMI,YAAY,GAAG,CAAClB,QAAQ,GAAG,CAAC,IAAI,IAAI,CAACd,OAAO,CAACH,MAAM;AACzD,MAAA,IAAI,CAACoC,QAAQ,CAACD,YAAY,EAAER,KAAK,CAAC;AACpC,IAAA,CAAC,MAAM,IAAIA,KAAK,CAACO,GAAG,KAAKJ,SAAS,EAAE;AAClC,MAAA,MAAMO,YAAY,GAChB,CAACpB,QAAQ,GAAG,IAAI,CAACd,OAAO,CAACH,MAAM,GAAG,CAAC,IAAI,IAAI,CAACG,OAAO,CAACH,MAAM;AAC5D,MAAA,IAAI,CAACoC,QAAQ,CAACC,YAAY,EAAEV,KAAK,CAAC;AACpC,IAAA,CAAC,MAAM,IAAIA,KAAK,CAACO,GAAG,KAAKF,QAAQ,IAAIL,KAAK,CAACO,GAAG,KAAKD,QAAQ,EAAE;MAC3D,IAAI,CAAC1C,gBAAgB,GAAG0B,QAAQ;AAClC,IAAA;AACA;IACA,MAAMqB,UAAU,GAAG,IAAI,CAACvC,SAAS,CAAC,IAAI,CAACR,gBAAgB,CAAC,EAAE+C,UAAU;IACpE,IAAIA,UAAU,YAAYC,WAAW,EAAE;MACrCD,UAAU,CAACE,cAAc,CAAC;AACxBC,QAAAA,QAAQ,EAAE,QAAQ;AAClBC,QAAAA,KAAK,EAAE,SAAS;AAChBC,QAAAA,MAAM,EAAE;AACV,OAAC,CAAC;AACJ,IAAA;AACF,EAAA;;AAEA;AAAA,EAAA;IAAApC,CAAA,CAAA,IAAA,CAAA3B,SAAA,EAAA,SAAA,EAAA,CA5BC4B,MAAM,CAAA,CAAA;AAAA;AA6BP4B,EAAAA,QAAQA,CAACnB,QAAgB,EAAEU,KAAoB,EAAQ;IACrDA,KAAK,CAACiB,cAAc,EAAE;IACtB,IAAI,CAAC7C,SAAS,CAACkB,QAAQ,CAAC,EAAE4B,KAAK,EAAE;AACnC,EAAA;AAEAvC,EAAAA,eAAeA,GAAS;AACtB;AACAwC,IAAAA,IAAI,CAAC,MAAY;MACf,MAAMC,OAAO,GAAG,IAAI,CAAChD,SAAS,CAAC,IAAI,CAACR,gBAAgB,CAAC;MAErD,IAAIwD,OAAO,IAAI,IAAI,EAAE;AACnB,QAAA,MAAMC,iBAAiB,GAAGD,OAAO,CAACT,UAAyB;AAC3D,QAAA,MAAMW,mBAAmB,GAAGF,OAAO,CAACG,OAAO,CACzC,oBACF,CAAgB;;AAEhB;QACA,IAAIF,iBAAiB,CAACG,YAAY,EAAE;AAClC,UAAA,MAAMC,UAAU,GAAGJ,iBAAiB,CAACK,UAAU;AAC/C,UAAA,MAAMC,QAAQ,GAAGN,iBAAiB,CAACO,WAAW;;AAE9C;UACAN,mBAAmB,CAACO,KAAK,CAACC,WAAW,CACnC,sBAAsB,EACtBL,UAAU,GAAG,IACf,CAAC;UACDH,mBAAmB,CAACO,KAAK,CAACC,WAAW,CACnC,mBAAmB,EACnBH,QAAQ,GAAG,IACb,CAAC;AACH,QAAA;AACF,MAAA,CAAC,MAAM;QACL,IAAII,OAAO,GAAG,EAAE;AAChBA,QAAAA,OAAO,IACL,+EAA+E;AACjF,QAAA,IAAI,IAAI,CAAC3D,SAAS,CAACC,MAAM,KAAK,CAAC,EAAE;AAC/B0D,UAAAA,OAAO,IACL,uFAAuF;AAC3F,QAAA,CAAC,MAAM;AACLA,UAAAA,OAAO,IAAI,CAAA,YAAA,EACT,IAAI,CAACnE,gBAAgB,CAAA,0GAAA,EAErB,IAAI,CAACQ,SAAS,CAACC,MAAM,GAAG,CAAC,CAAA,EAAA,CACvB;AACN,QAAA;AACA;AACA2D,QAAAA,IAAI,CAACD,OAAO,EAAE,IAAI,EAAE;AAClB3C,UAAAA,EAAE,EAAE;AACN,SAAC,CAAC;AACJ,MAAA;AACF,IAAA,CAAC,CAAC;AACJ,EAAA;AACF;AAAC6C,oBAAA,CAAAC,QAAA,EAxPoBpF,OAAO,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/tabs/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert, warn } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { HdsTabsSizeValues } from './types.ts';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsTabsTabSignature } from './tab';\nimport type { HdsTabsPanelSignature } from './panel';\nimport type { HdsTabsTabIds, HdsTabsPanelIds, HdsTabsSizes } from './types.ts';\nimport type Owner from '@ember/owner';\n\nexport const DEFAULT_SIZE: HdsTabsSizes = 'medium';\nexport const SIZES: HdsTabsSizes[] = Object.values(HdsTabsSizeValues);\nexport interface HdsTabsSignature {\n Args: {\n size?: HdsTabsSizes;\n onClickTab?: (event: MouseEvent, tabIndex: number) => void;\n selectedTabIndex?: HdsTabsTabSignature['Args']['selectedTabIndex'];\n isParentVisible?: boolean;\n };\n Blocks: {\n default: [\n {\n Tab?: ComponentLike<HdsTabsTabSignature>;\n Panel?: ComponentLike<HdsTabsPanelSignature>;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsTabs extends Component<HdsTabsSignature> {\n @tracked private _tabNodes: HTMLButtonElement[] = [];\n @tracked private _tabIds: HdsTabsTabIds = [];\n @tracked private _panelNodes: HTMLElement[] = [];\n @tracked private _panelIds: HdsTabsPanelIds = [];\n @tracked private _selectedTabIndex;\n @tracked private _selectedTabId?: string;\n @tracked private _isControlled: boolean;\n\n /**\n * Sets the size of Tabs\n * Accepted values: medium, large\n *\n * @param size\n * @type {string}\n * @default 'medium'\n */\n get size(): HdsTabsSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Tabs\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n constructor(owner: Owner, args: HdsTabsSignature['Args']) {\n super(owner, args);\n\n // this is to determine if the \"selected\" tab logic is controlled in the consumers' code or is maintained as an internal state\n this._isControlled = this.args.selectedTabIndex !== undefined;\n this._selectedTabIndex = this.args.selectedTabIndex ?? 0;\n }\n\n get selectedTabIndex(): number {\n if (this._isControlled) {\n return this.args.selectedTabIndex!;\n } else {\n return this._selectedTabIndex;\n }\n }\n\n set selectedTabIndex(value) {\n if (this._isControlled) {\n // noop\n } else {\n this._selectedTabIndex = value;\n }\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-tabs'];\n\n // add a class based on the @size argument\n classes.push(`hds-tabs--size-${this.size}`);\n\n return classes.join(' ');\n }\n\n @action\n didInsert(): void {\n assert(\n 'The number of Tabs must be equal to the number of Panels',\n this._tabNodes.length === this._panelNodes.length\n );\n\n if (this._selectedTabId) {\n this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n }\n\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didUpdateSelectedTabIndex(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didUpdateSelectedTabId(): void {\n // if the selected tab is set dynamically (eg. in a `each` loop)\n // the `Tab` nodes will be re-inserted/rendered, which means the `this.selectedTabId` variable changes\n // but the parent `Tabs` component has already been rendered/inserted but doesn't re-render\n // so the value of the `selectedTabIndex` is not updated, unless we trigger a recalculation\n // using the `did-update` modifier that checks for changes in the `this.selectedTabId` variable\n if (this._selectedTabId) {\n this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n }\n }\n\n @action\n didUpdateParentVisibility(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didInsertTab(element: HTMLButtonElement, isSelected?: boolean): void {\n this._tabNodes = [...this._tabNodes, element];\n this._tabIds = [...this._tabIds, element.id];\n if (isSelected) {\n this._selectedTabId = element.id;\n }\n }\n\n @action\n didUpdateTab(tabIndex: number, isSelected?: boolean): void {\n if (isSelected) {\n this.selectedTabIndex = tabIndex;\n }\n this.setTabIndicator();\n }\n\n @action\n willDestroyTab(element: HTMLButtonElement): void {\n this._tabNodes = this._tabNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._tabIds = this._tabIds.filter(\n (tabId): boolean => tabId !== element.id\n );\n }\n\n @action\n didInsertPanel(element: HTMLElement, panelId: string): void {\n this._panelNodes = [...this._panelNodes, element];\n this._panelIds = [...this._panelIds, panelId];\n }\n\n @action\n willDestroyPanel(element: HTMLElement): void {\n this._panelNodes = this._panelNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._panelIds = this._panelIds.filter(\n (panelId): boolean => panelId !== element.id\n );\n }\n\n @action\n onClick(event: MouseEvent, tabIndex: number): void {\n this.selectedTabIndex = tabIndex;\n this.setTabIndicator();\n\n // invoke the callback function if it's provided as argument\n if (typeof this.args.onClickTab === 'function') {\n this.args.onClickTab(event, tabIndex);\n }\n }\n\n @action\n onKeyUp(tabIndex: number, event: KeyboardEvent): void {\n const leftArrow = 'ArrowLeft';\n const rightArrow = 'ArrowRight';\n const enterKey = 'Enter';\n const spaceKey = ' ';\n\n if (event.key === rightArrow) {\n const nextTabIndex = (tabIndex + 1) % this._tabIds.length;\n this.focusTab(nextTabIndex, event);\n } else if (event.key === leftArrow) {\n const prevTabIndex =\n (tabIndex + this._tabIds.length - 1) % this._tabIds.length;\n this.focusTab(prevTabIndex, event);\n } else if (event.key === enterKey || event.key === spaceKey) {\n this.selectedTabIndex = tabIndex;\n }\n // scroll selected tab into view (it may be out of view when activated using a keyboard with `prev/next`)\n const parentNode = this._tabNodes[this.selectedTabIndex]?.parentNode;\n if (parentNode instanceof HTMLElement) {\n parentNode.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n // Focus tab for keyboard & mouse navigation:\n focusTab(tabIndex: number, event: KeyboardEvent): void {\n event.preventDefault();\n this._tabNodes[tabIndex]?.focus();\n }\n\n setTabIndicator(): void {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n const tabElem = this._tabNodes[this.selectedTabIndex];\n\n if (tabElem != null) {\n const tabElemParentNode = tabElem.parentNode as HTMLElement;\n const tabsElemClosestList = tabElem.closest(\n '.hds-tabs__tablist'\n ) as HTMLElement;\n\n // this condition is `null` if any of the parents has `display: none`\n if (tabElemParentNode.offsetParent) {\n const tabLeftPos = tabElemParentNode.offsetLeft;\n const tabWidth = tabElemParentNode.offsetWidth;\n\n // Set CSS custom properties for indicator\n tabsElemClosestList.style.setProperty(\n '--indicator-left-pos',\n tabLeftPos + 'px'\n );\n tabsElemClosestList.style.setProperty(\n '--indicator-width',\n tabWidth + 'px'\n );\n }\n } else {\n let message = '';\n message +=\n '\"Hds::Tabs\" has tried to set the indicator for an element that doesn\\'t exist';\n if (this._tabNodes.length === 0) {\n message +=\n ' (the array `this._tabNodes` is empty, there are no tabs, probably already destroyed)';\n } else {\n message += ` (the value ${\n this.selectedTabIndex\n } of \\`this.selectedTabIndex\\` is out of bound for the array \\`this._tabNodes\\`, whose index range is [0 - ${\n this._tabNodes.length - 1\n }])`;\n }\n // https://api.emberjs.com/ember/5.3/classes/@ember%2Fdebug/methods/warn?anchor=warn\n warn(message, true, {\n id: 'hds-debug.tabs.setTabIndicator-tabElem-not-available',\n });\n }\n });\n }\n}\n"],"names":["DEFAULT_SIZE","SIZES","Object","values","HdsTabsSizeValues","HdsTabs","Component","g","prototype","tracked","i","void 0","size","args","assert","join","includes","constructor","owner","_isControlled","selectedTabIndex","undefined","_selectedTabIndex","value","classNames","classes","push","didInsert","_tabNodes","length","_panelNodes","_selectedTabId","_tabIds","indexOf","schedule","setTabIndicator","n","action","didUpdateSelectedTabIndex","didUpdateSelectedTabId","didUpdateParentVisibility","didInsertTab","element","isSelected","id","didUpdateTab","tabIndex","willDestroyTab","filter","node","tabId","didInsertPanel","panelId","_panelIds","willDestroyPanel","onClick","event","onClickTab","onKeyUp","leftArrow","rightArrow","enterKey","spaceKey","key","nextTabIndex","focusTab","prevTabIndex","parentNode","HTMLElement","scrollIntoView","behavior","block","inline","preventDefault","focus","next","tabElem","tabElemParentNode","tabsElemClosestList","closest","offsetParent","tabLeftPos","offsetLeft","tabWidth","offsetWidth","style","setProperty","message","warn","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/tag/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 { TrackedWeakSet } from 'tracked-built-ins';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\n\nimport { HdsTagColorValues } from './types.ts';\nimport type { HdsTagColors } from './types.ts';\nimport { HdsTagTooltipPlacementValues } from './types.ts';\nimport type { HdsTagTooltipPlacements } from './types.ts';\nimport type { HdsInteractiveSignature } from '../interactive/';\n\nexport const COLORS: HdsTagColors[] = Object.values(HdsTagColorValues);\nexport const DEFAULT_COLOR = HdsTagColorValues.Primary;\nexport const TOOLTIP_PLACEMENTS: HdsTagTooltipPlacements[] = Object.values(\n HdsTagTooltipPlacementValues\n);\nexport const DEFAULT_TOOLTIP_PLACEMENT = HdsTagTooltipPlacementValues.Top;\n\nexport interface HdsTagSignature {\n Args: HdsInteractiveSignature['Args'] & {\n color?: HdsTagColors;\n text: string;\n ariaLabel?: string;\n tooltipPlacement?: HdsTagTooltipPlacements;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onDismiss?: (event: MouseEvent, ...args: any[]) => void;\n };\n Element: HTMLSpanElement;\n}\n\nconst overflowed = new TrackedWeakSet<Element>();\n\nconst observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const textContainer = entry.target.querySelector(\n '.hds-tag__text-container'\n );\n if (\n textContainer &&\n textContainer.scrollHeight > textContainer.clientHeight\n ) {\n overflowed.add(entry.target);\n } else {\n overflowed.delete(entry.target);\n }\n });\n});\n\nexport default class HdsTag extends Component<HdsTagSignature> {\n @tracked private _element?: HTMLElement;\n private get _isTextOverflow(): boolean {\n if (!this._element) {\n return false;\n }\n return overflowed.has(this._element);\n }\n\n private _setUpObserver = modifier((element: HTMLElement) => {\n this._element = element;\n observer.observe(element);\n\n return () => {\n if (this._element) {\n observer.unobserve(this._element);\n }\n delete this._element;\n };\n });\n\n /**\n * @param tooltioPlacement\n * @type {string}\n * @default top\n * @description The placement property of the tooltip attached to the tag text.\n */\n get tooltipPlacement(): HdsTagTooltipPlacements {\n const { tooltipPlacement = DEFAULT_TOOLTIP_PLACEMENT } = this.args;\n\n assert(\n '@tooltipPlacement for \"Hds::Tag\" must have a valid value',\n tooltipPlacement == undefined ||\n TOOLTIP_PLACEMENTS.includes(tooltipPlacement)\n );\n\n return tooltipPlacement;\n }\n\n /**\n * @param onDismiss\n * @type {function}\n * @default () => {}\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get onDismiss(): ((event: MouseEvent, ...args: any[]) => void) | false {\n const { onDismiss } = this.args;\n\n if (typeof onDismiss === 'function') {\n return onDismiss;\n } else {\n return false;\n }\n }\n\n /**\n * @param text\n * @type {string}\n * @description The text of the tag. If no text value is defined, an error will be thrown.\n */\n get text(): string {\n const { text } = this.args;\n\n assert('@text for \"Hds::Tag\" must have a valid value', text !== undefined);\n\n return text;\n }\n\n /**\n * @param ariaLabel\n * @type {string}\n * @default 'Dismiss'\n */\n get ariaLabel(): string {\n const tagAriaLabel = this.args.ariaLabel ?? 'Dismiss';\n return tagAriaLabel + ' ' + this.args.text;\n }\n\n /**\n * @param color\n * @type {string}\n * @default primary\n * @description Determines the color of link to be used; acceptable values are `primary` and `secondary`\n */\n get color(): HdsTagColors | false {\n if (this.args.href || this.args.route) {\n const { color = DEFAULT_COLOR } = this.args;\n assert(\n `@color for \"Hds::Tag\" must be one of the following: ${COLORS.join(\n ', '\n )}; received: ${color}`,\n COLORS.includes(color)\n );\n return color;\n } else if (this.args.color) {\n assert(\n '@color can only be applied to \"Hds::Tag\" along with either @href or @route',\n this.args.href || this.args.route\n );\n }\n return false;\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-tag'];\n\n // add a class based on the @color argument\n if (this.color) {\n classes.push(`hds-tag--color-${this.color}`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["COLORS","Object","values","HdsTagColorValues","DEFAULT_COLOR","Primary","TOOLTIP_PLACEMENTS","HdsTagTooltipPlacementValues","DEFAULT_TOOLTIP_PLACEMENT","Top","overflowed","TrackedWeakSet","observer","ResizeObserver","entries","forEach","entry","textContainer","target","querySelector","scrollHeight","clientHeight","add","delete","HdsTag","Component","g","prototype","tracked","i","_isTextOverflow","_element","has","_setUpObserver","modifier","element","observe","unobserve","tooltipPlacement","args","assert","undefined","includes","onDismiss","text","ariaLabel","tagAriaLabel","color","href","route","join","classNames","classes","push","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAcO,MAAMA,MAAsB,GAAGC,MAAM,CAACC,MAAM,CAACC,iBAAiB;AAC9D,MAAMC,aAAa,GAAGD,iBAAiB,CAACE;AACxC,MAAMC,kBAA6C,GAAGL,MAAM,CAACC,MAAM,CACxEK,4BACF;AACO,MAAMC,yBAAyB,GAAGD,4BAA4B,CAACE;AActE,MAAMC,UAAU,GAAG,IAAIC,cAAc,EAAW;AAEhD,MAAMC,QAAQ,GAAG,IAAIC,cAAc,CAAEC,OAAO,IAAK;AAC/CA,EAAAA,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;IACzB,MAAMC,aAAa,GAAGD,KAAK,CAACE,MAAM,CAACC,aAAa,CAC9C,0BACF,CAAC;IACD,IACEF,aAAa,IACbA,aAAa,CAACG,YAAY,GAAGH,aAAa,CAACI,YAAY,EACvD;AACAX,MAAAA,UAAU,CAACY,GAAG,CAACN,KAAK,CAACE,MAAM,CAAC;AAC9B,IAAA,CAAC,MAAM;AACLR,MAAAA,UAAU,CAACa,MAAM,CAACP,KAAK,CAACE,MAAM,CAAC;AACjC,IAAA;AACF,EAAA,CAAC,CAAC;AACJ,CAAC,CAAC;AAEa,MAAMM,MAAM,SAASC,SAAS,CAAkB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAC5DC,OAAO,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/tag/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 { TrackedWeakSet } from 'tracked-built-ins';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\n\nimport { HdsTagColorValues } from './types.ts';\nimport type { HdsTagColors } from './types.ts';\nimport { HdsTagTooltipPlacementValues } from './types.ts';\nimport type { HdsTagTooltipPlacements } from './types.ts';\nimport type { HdsInteractiveSignature } from '../interactive/';\n\nexport const COLORS: HdsTagColors[] = Object.values(HdsTagColorValues);\nexport const DEFAULT_COLOR = HdsTagColorValues.Primary;\nexport const TOOLTIP_PLACEMENTS: HdsTagTooltipPlacements[] = Object.values(\n HdsTagTooltipPlacementValues\n);\nexport const DEFAULT_TOOLTIP_PLACEMENT = HdsTagTooltipPlacementValues.Top;\n\nexport interface HdsTagSignature {\n Args: HdsInteractiveSignature['Args'] & {\n color?: HdsTagColors;\n text: string;\n ariaLabel?: string;\n tooltipPlacement?: HdsTagTooltipPlacements;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onDismiss?: (event: MouseEvent, ...args: any[]) => void;\n };\n Element: HTMLSpanElement;\n}\n\nconst overflowed = new TrackedWeakSet<Element>();\n\nconst observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const textContainer = entry.target.querySelector(\n '.hds-tag__text-container'\n );\n if (\n textContainer &&\n textContainer.scrollHeight > textContainer.clientHeight\n ) {\n overflowed.add(entry.target);\n } else {\n overflowed.delete(entry.target);\n }\n });\n});\n\nexport default class HdsTag extends Component<HdsTagSignature> {\n @tracked private _element?: HTMLElement;\n private get _isTextOverflow(): boolean {\n if (!this._element) {\n return false;\n }\n return overflowed.has(this._element);\n }\n\n private _setUpObserver = modifier((element: HTMLElement) => {\n this._element = element;\n observer.observe(element);\n\n return () => {\n if (this._element) {\n observer.unobserve(this._element);\n }\n delete this._element;\n };\n });\n\n /**\n * @param tooltioPlacement\n * @type {string}\n * @default top\n * @description The placement property of the tooltip attached to the tag text.\n */\n get tooltipPlacement(): HdsTagTooltipPlacements {\n const { tooltipPlacement = DEFAULT_TOOLTIP_PLACEMENT } = this.args;\n\n assert(\n '@tooltipPlacement for \"Hds::Tag\" must have a valid value',\n tooltipPlacement == undefined ||\n TOOLTIP_PLACEMENTS.includes(tooltipPlacement)\n );\n\n return tooltipPlacement;\n }\n\n /**\n * @param onDismiss\n * @type {function}\n * @default () => {}\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get onDismiss(): ((event: MouseEvent, ...args: any[]) => void) | false {\n const { onDismiss } = this.args;\n\n if (typeof onDismiss === 'function') {\n return onDismiss;\n } else {\n return false;\n }\n }\n\n /**\n * @param text\n * @type {string}\n * @description The text of the tag. If no text value is defined, an error will be thrown.\n */\n get text(): string {\n const { text } = this.args;\n\n assert('@text for \"Hds::Tag\" must have a valid value', text !== undefined);\n\n return text;\n }\n\n /**\n * @param ariaLabel\n * @type {string}\n * @default 'Dismiss'\n */\n get ariaLabel(): string {\n const tagAriaLabel = this.args.ariaLabel ?? 'Dismiss';\n return tagAriaLabel + ' ' + this.args.text;\n }\n\n /**\n * @param color\n * @type {string}\n * @default primary\n * @description Determines the color of link to be used; acceptable values are `primary` and `secondary`\n */\n get color(): HdsTagColors | false {\n if (this.args.href || this.args.route) {\n const { color = DEFAULT_COLOR } = this.args;\n assert(\n `@color for \"Hds::Tag\" must be one of the following: ${COLORS.join(\n ', '\n )}; received: ${color}`,\n COLORS.includes(color)\n );\n return color;\n } else if (this.args.color) {\n assert(\n '@color can only be applied to \"Hds::Tag\" along with either @href or @route',\n this.args.href || this.args.route\n );\n }\n return false;\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-tag'];\n\n // add a class based on the @color argument\n if (this.color) {\n classes.push(`hds-tag--color-${this.color}`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["COLORS","Object","values","HdsTagColorValues","DEFAULT_COLOR","Primary","TOOLTIP_PLACEMENTS","HdsTagTooltipPlacementValues","DEFAULT_TOOLTIP_PLACEMENT","Top","overflowed","TrackedWeakSet","observer","ResizeObserver","entries","forEach","entry","textContainer","target","querySelector","scrollHeight","clientHeight","add","delete","HdsTag","Component","g","prototype","tracked","i","void 0","_isTextOverflow","_element","has","_setUpObserver","modifier","element","observe","unobserve","tooltipPlacement","args","assert","undefined","includes","onDismiss","text","ariaLabel","tagAriaLabel","color","href","route","join","classNames","classes","push","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { assert } from '@ember/debug';
|
|
3
|
+
import { HdsThemeContextThemesValues, HdsThemeContextModesValues } from './types.js';
|
|
4
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
5
|
+
import { setComponentTemplate } from '@ember/component';
|
|
6
|
+
|
|
7
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class={{this.classNames}} ...attributes>{{yield}}</div>");
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Copyright (c) HashiCorp, Inc.
|
|
11
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const CONTEXTUAL_THEMES = Object.values(HdsThemeContextThemesValues);
|
|
15
|
+
const CONTEXTUAL_MODES = Object.values(HdsThemeContextModesValues);
|
|
16
|
+
const CONTEXTUAL_VALUES = [...CONTEXTUAL_THEMES, ...CONTEXTUAL_MODES];
|
|
17
|
+
class HdsThemeContext extends Component {
|
|
18
|
+
constructor(owner, args) {
|
|
19
|
+
super(owner, args);
|
|
20
|
+
const {
|
|
21
|
+
context
|
|
22
|
+
} = args;
|
|
23
|
+
assert(`@context for "Hds::ThemeContext" must be one of the following: ${CONTEXTUAL_VALUES.join(', ')}; received: ${context}`, CONTEXTUAL_VALUES.includes(context));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Get the class names to apply to the component.
|
|
27
|
+
get classNames() {
|
|
28
|
+
const classes = ['hds-theme-context'];
|
|
29
|
+
const {
|
|
30
|
+
context
|
|
31
|
+
} = this.args;
|
|
32
|
+
|
|
33
|
+
// add "theme" or "mode" classes based on the @context arguments
|
|
34
|
+
if (CONTEXTUAL_THEMES.includes(context)) {
|
|
35
|
+
classes.push(`hds-theme-${context}`);
|
|
36
|
+
} else if (CONTEXTUAL_MODES.includes(context)) {
|
|
37
|
+
classes.push(`hds-mode-${context}`);
|
|
38
|
+
}
|
|
39
|
+
return classes.join(' ');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
setComponentTemplate(TEMPLATE, HdsThemeContext);
|
|
43
|
+
|
|
44
|
+
export { CONTEXTUAL_MODES, CONTEXTUAL_THEMES, CONTEXTUAL_VALUES, HdsThemeContext as default };
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/theme-context/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport type Owner from '@ember/owner';\n\nimport {\n HdsThemeContextThemesValues,\n HdsThemeContextModesValues,\n} from './types.ts';\nimport type { HdsThemeContexts } from './types.ts';\n\nimport type { HdsThemes, HdsModes } from '../../../services/hds-theming.ts';\n\nexport interface HdsThemeContextSignature {\n Args: {\n // can be either an `HdsTheme` or an `HdsMode`\n context: HdsThemeContexts;\n };\n Blocks: {\n default: [];\n };\n Element: HTMLElement;\n}\n\nexport const CONTEXTUAL_THEMES: HdsThemes[] = Object.values(\n HdsThemeContextThemesValues\n);\nexport const CONTEXTUAL_MODES: HdsModes[] = Object.values(\n HdsThemeContextModesValues\n);\nexport const CONTEXTUAL_VALUES: HdsThemeContexts[] = [\n ...CONTEXTUAL_THEMES,\n ...CONTEXTUAL_MODES,\n];\n\nexport default class HdsThemeContext extends Component<HdsThemeContextSignature> {\n constructor(owner: Owner, args: HdsThemeContextSignature['Args']) {\n super(owner, args);\n\n const { context } = args;\n\n assert(\n `@context for \"Hds::ThemeContext\" must be one of the following: ${CONTEXTUAL_VALUES.join(\n ', '\n )}; received: ${context}`,\n CONTEXTUAL_VALUES.includes(context)\n );\n }\n\n // Get the class names to apply to the component.\n get classNames(): string {\n const classes = ['hds-theme-context'];\n\n const { context } = this.args;\n\n // add \"theme\" or \"mode\" classes based on the @context arguments\n if (CONTEXTUAL_THEMES.includes(context as HdsThemes)) {\n classes.push(`hds-theme-${context}`);\n } else if (CONTEXTUAL_MODES.includes(context as HdsModes)) {\n classes.push(`hds-mode-${context}`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["CONTEXTUAL_THEMES","Object","values","HdsThemeContextThemesValues","CONTEXTUAL_MODES","HdsThemeContextModesValues","CONTEXTUAL_VALUES","HdsThemeContext","Component","constructor","owner","args","context","assert","join","includes","classNames","classes","push","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAyBO,MAAMA,iBAA8B,GAAGC,MAAM,CAACC,MAAM,CACzDC,2BACF;AACO,MAAMC,gBAA4B,GAAGH,MAAM,CAACC,MAAM,CACvDG,0BACF;AACO,MAAMC,iBAAqC,GAAG,CACnD,GAAGN,iBAAiB,EACpB,GAAGI,gBAAgB;AAGN,MAAMG,eAAe,SAASC,SAAS,CAA2B;AAC/EC,EAAAA,WAAWA,CAACC,KAAY,EAAEC,IAAsC,EAAE;AAChE,IAAA,KAAK,CAACD,KAAK,EAAEC,IAAI,CAAC;IAElB,MAAM;AAAEC,MAAAA;AAAQ,KAAC,GAAGD,IAAI;AAExBE,IAAAA,MAAM,CACJ,CAAA,+DAAA,EAAkEP,iBAAiB,CAACQ,IAAI,CACtF,IACF,CAAC,CAAA,YAAA,EAAeF,OAAO,CAAA,CAAE,EACzBN,iBAAiB,CAACS,QAAQ,CAACH,OAAO,CACpC,CAAC;AACH,EAAA;;AAEA;EACA,IAAII,UAAUA,GAAW;AACvB,IAAA,MAAMC,OAAO,GAAG,CAAC,mBAAmB,CAAC;IAErC,MAAM;AAAEL,MAAAA;KAAS,GAAG,IAAI,CAACD,IAAI;;AAE7B;AACA,IAAA,IAAIX,iBAAiB,CAACe,QAAQ,CAACH,OAAoB,CAAC,EAAE;AACpDK,MAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,UAAA,EAAaN,OAAO,EAAE,CAAC;IACtC,CAAC,MAAM,IAAIR,gBAAgB,CAACW,QAAQ,CAACH,OAAmB,CAAC,EAAE;AACzDK,MAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,SAAA,EAAYN,OAAO,EAAE,CAAC;AACrC,IAAA;AAEA,IAAA,OAAOK,OAAO,CAACH,IAAI,CAAC,GAAG,CAAC;AAC1B,EAAA;AACF;AAACK,oBAAA,CAAAC,QAAA,EA7BoBb,eAAe,CAAA;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { HdsThemeValues, HdsModesDarkValues, HdsModesLightValues } from '../../../services/hds-theming.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Copyright (c) HashiCorp, Inc.
|
|
5
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// re-export the enum values for the `HdsThemes` to use in the component
|
|
9
|
+
// note: using `as const` ensures Object.values() returns only the values (not keys _and_ values)
|
|
10
|
+
const HdsThemeContextThemesValues = {
|
|
11
|
+
Default: HdsThemeValues.Default,
|
|
12
|
+
System: HdsThemeValues.System,
|
|
13
|
+
Light: HdsThemeValues.Light,
|
|
14
|
+
Dark: HdsThemeValues.Dark
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// re-export the enum values for the `HdsModes` to use in the component
|
|
18
|
+
// note: using `as const` ensures Object.values() returns only the values (not keys _and_ values)
|
|
19
|
+
const HdsThemeContextModesValues = {
|
|
20
|
+
CdsG0: HdsModesLightValues.CdsG0,
|
|
21
|
+
CdsG10: HdsModesLightValues.CdsG10,
|
|
22
|
+
CdsG90: HdsModesDarkValues.CdsG90,
|
|
23
|
+
CdsG100: HdsModesDarkValues.CdsG100
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { HdsThemeContextModesValues, HdsThemeContextThemesValues };
|
|
27
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../src/components/hds/theme-context/types.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport {\n HdsThemeValues,\n HdsModesLightValues,\n HdsModesDarkValues,\n} from '../../../services/hds-theming.ts';\n\nimport type { HdsThemes, HdsModes } from '../../../services/hds-theming.ts';\n\n// re-export the enum values for the `HdsThemes` to use in the component\n// note: using `as const` ensures Object.values() returns only the values (not keys _and_ values)\nexport const HdsThemeContextThemesValues = {\n Default: HdsThemeValues.Default,\n System: HdsThemeValues.System,\n Light: HdsThemeValues.Light,\n Dark: HdsThemeValues.Dark,\n} as const;\n\n// re-export the enum values for the `HdsModes` to use in the component\n// note: using `as const` ensures Object.values() returns only the values (not keys _and_ values)\nexport const HdsThemeContextModesValues = {\n CdsG0: HdsModesLightValues.CdsG0,\n CdsG10: HdsModesLightValues.CdsG10,\n CdsG90: HdsModesDarkValues.CdsG90,\n CdsG100: HdsModesDarkValues.CdsG100,\n} as const;\n\nexport type HdsThemeContexts = HdsThemes | Exclude<HdsModes, 'default'>;\n"],"names":["HdsThemeContextThemesValues","Default","HdsThemeValues","System","Light","Dark","HdsThemeContextModesValues","CdsG0","HdsModesLightValues","CdsG10","CdsG90","HdsModesDarkValues","CdsG100"],"mappings":";;AAAA;AACA;AACA;AACA;;AAUA;AACA;AACO,MAAMA,2BAA2B,GAAG;EACzCC,OAAO,EAAEC,cAAc,CAACD,OAAO;EAC/BE,MAAM,EAAED,cAAc,CAACC,MAAM;EAC7BC,KAAK,EAAEF,cAAc,CAACE,KAAK;EAC3BC,IAAI,EAAEH,cAAc,CAACG;AACvB;;AAEA;AACA;AACO,MAAMC,0BAA0B,GAAG;EACxCC,KAAK,EAAEC,mBAAmB,CAACD,KAAK;EAChCE,MAAM,EAAED,mBAAmB,CAACC,MAAM;EAClCC,MAAM,EAAEC,kBAAkB,CAACD,MAAM;EACjCE,OAAO,EAAED,kBAAkB,CAACC;AAC9B;;;;"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { inject } from '@ember/service';
|
|
3
|
+
import { action } from '@ember/object';
|
|
4
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
5
|
+
import { g, i, n } from 'decorator-transforms/runtime';
|
|
6
|
+
import { setComponentTemplate } from '@ember/component';
|
|
7
|
+
|
|
8
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n{{!\n ------------------------------------------------------------------------------------------\n IMPORTANT: this is a temporary implementation, while we wait for the design specifications\n ------------------------------------------------------------------------------------------\n}}\n\n<Hds::Dropdown\n @enableCollisionDetection={{true}}\n @matchToggleWidth={{@toggleIsFullWidth}}\n class=\"hds-theme-switcher-control\"\n ...attributes\n as |D|\n>\n <D.ToggleButton\n @color=\"secondary\"\n @size={{this.toggleSize}}\n @isFullWidth={{this.toggleIsFullWidth}}\n @text={{this.toggleContent.label}}\n @icon={{this.toggleContent.icon}}\n />\n {{#each-in this._options as |key data|}}\n <D.Interactive @icon={{data.icon}} {{on \"click\" (fn this.onSelectTheme data.theme)}}>{{data.label}}</D.Interactive>\n {{/each-in}}\n</Hds::Dropdown>");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Copyright (c) HashiCorp, Inc.
|
|
12
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const OPTIONS = {
|
|
16
|
+
default: {
|
|
17
|
+
theme: 'default',
|
|
18
|
+
icon: 'hashicorp',
|
|
19
|
+
label: 'Default'
|
|
20
|
+
},
|
|
21
|
+
system: {
|
|
22
|
+
theme: 'system',
|
|
23
|
+
icon: 'monitor',
|
|
24
|
+
label: 'System'
|
|
25
|
+
},
|
|
26
|
+
light: {
|
|
27
|
+
theme: 'light',
|
|
28
|
+
icon: 'sun',
|
|
29
|
+
label: 'Light'
|
|
30
|
+
},
|
|
31
|
+
dark: {
|
|
32
|
+
theme: 'dark',
|
|
33
|
+
icon: 'moon',
|
|
34
|
+
label: 'Dark'
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
class HdsThemeSwitcher extends Component {
|
|
38
|
+
static {
|
|
39
|
+
g(this.prototype, "hdsTheming", [inject]);
|
|
40
|
+
}
|
|
41
|
+
#hdsTheming = (i(this, "hdsTheming"), void 0);
|
|
42
|
+
get toggleSize() {
|
|
43
|
+
return this.args.toggleSize ?? 'small';
|
|
44
|
+
}
|
|
45
|
+
get toggleIsFullWidth() {
|
|
46
|
+
return this.args.toggleIsFullWidth ?? false;
|
|
47
|
+
}
|
|
48
|
+
get toggleContent() {
|
|
49
|
+
if (this.currentTheme === 'default' && this.hasDefaultOption || this.currentTheme === 'system' && this.hasSystemOption || this.currentTheme === 'light' || this.currentTheme === 'dark') {
|
|
50
|
+
return {
|
|
51
|
+
label: OPTIONS[this.currentTheme].label,
|
|
52
|
+
icon: OPTIONS[this.currentTheme].icon
|
|
53
|
+
};
|
|
54
|
+
} else {
|
|
55
|
+
return {
|
|
56
|
+
label: 'Theme',
|
|
57
|
+
icon: undefined
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// note: we will use the `default` option in development, while migrating to the `cds` theming
|
|
63
|
+
// during this process, consumers will enable/disable this option via code logic or feature flag
|
|
64
|
+
get hasDefaultOption() {
|
|
65
|
+
return this.args.hasDefaultOption ?? false;
|
|
66
|
+
}
|
|
67
|
+
get hasSystemOption() {
|
|
68
|
+
return this.args.hasSystemOption ?? true;
|
|
69
|
+
}
|
|
70
|
+
get _options() {
|
|
71
|
+
const options = {
|
|
72
|
+
...OPTIONS
|
|
73
|
+
};
|
|
74
|
+
if (!this.hasDefaultOption) {
|
|
75
|
+
delete options.default;
|
|
76
|
+
}
|
|
77
|
+
if (!this.hasSystemOption) {
|
|
78
|
+
delete options.system;
|
|
79
|
+
}
|
|
80
|
+
return options;
|
|
81
|
+
}
|
|
82
|
+
get currentTheme() {
|
|
83
|
+
// we get the theme from the global service
|
|
84
|
+
return this.hdsTheming.currentTheme;
|
|
85
|
+
}
|
|
86
|
+
onSelectTheme(theme) {
|
|
87
|
+
// we set the theme in the global service (and provide an optional user-defined callback)
|
|
88
|
+
this.hdsTheming.setTheme({
|
|
89
|
+
theme,
|
|
90
|
+
onSetTheme: this.args.onSetTheme
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
static {
|
|
94
|
+
n(this.prototype, "onSelectTheme", [action]);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
setComponentTemplate(TEMPLATE, HdsThemeSwitcher);
|
|
98
|
+
|
|
99
|
+
export { HdsThemeSwitcher as default };
|
|
100
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/theme-switcher/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// ------------------------------------------------------------------------------------------\n// IMPORTANT: this is a temporary implementation, while we wait for the design specifications\n// ------------------------------------------------------------------------------------------\n\nimport Component from '@glimmer/component';\nimport { inject as service } from '@ember/service';\nimport { action } from '@ember/object';\n\nimport type { HdsDropdownSignature } from '../dropdown/index.ts';\nimport type { HdsDropdownToggleButtonSignature } from '../dropdown/toggle/button.ts';\nimport type { HdsIconSignature } from '../icon/index.ts';\nimport type HdsThemingService from '../../../services/hds-theming.ts';\nimport type {\n HdsThemes,\n HdsOnSetThemeCallback,\n} from '../../../services/hds-theming.ts';\n\ninterface ThemeOption {\n theme: HdsThemes | undefined;\n icon: HdsIconSignature['Args']['name'];\n label: string;\n}\n\nconst OPTIONS: Record<HdsThemes, ThemeOption> = {\n default: { theme: 'default', icon: 'hashicorp', label: 'Default' },\n system: { theme: 'system', icon: 'monitor', label: 'System' },\n light: { theme: 'light', icon: 'sun', label: 'Light' },\n dark: { theme: 'dark', icon: 'moon', label: 'Dark' },\n};\n\nexport interface HdsThemeSwitcherSignature {\n Args: {\n toggleSize?: HdsDropdownToggleButtonSignature['Args']['size'];\n toggleIsFullWidth?: HdsDropdownToggleButtonSignature['Args']['isFullWidth'];\n hasDefaultOption?: boolean;\n hasSystemOption?: boolean;\n onSetTheme?: HdsOnSetThemeCallback;\n };\n Element: HdsDropdownSignature['Element'];\n}\n\nexport default class HdsThemeSwitcher extends Component<HdsThemeSwitcherSignature> {\n @service declare readonly hdsTheming: HdsThemingService;\n\n get toggleSize() {\n return this.args.toggleSize ?? 'small';\n }\n\n get toggleIsFullWidth() {\n return this.args.toggleIsFullWidth ?? false;\n }\n\n get toggleContent() {\n if (\n (this.currentTheme === 'default' && this.hasDefaultOption) ||\n (this.currentTheme === 'system' && this.hasSystemOption) ||\n this.currentTheme === 'light' ||\n this.currentTheme === 'dark'\n ) {\n return {\n label: OPTIONS[this.currentTheme].label,\n icon: OPTIONS[this.currentTheme].icon,\n };\n } else {\n return { label: 'Theme', icon: undefined };\n }\n }\n\n // note: we will use the `default` option in development, while migrating to the `cds` theming\n // during this process, consumers will enable/disable this option via code logic or feature flag\n get hasDefaultOption() {\n return this.args.hasDefaultOption ?? false;\n }\n\n get hasSystemOption() {\n return this.args.hasSystemOption ?? true;\n }\n\n get _options() {\n const options: Partial<typeof OPTIONS> = { ...OPTIONS };\n\n if (!this.hasDefaultOption) {\n delete options.default;\n }\n\n if (!this.hasSystemOption) {\n delete options.system;\n }\n\n return options;\n }\n\n get currentTheme() {\n // we get the theme from the global service\n return this.hdsTheming.currentTheme;\n }\n\n @action\n onSelectTheme(theme: HdsThemes | undefined): void {\n // we set the theme in the global service (and provide an optional user-defined callback)\n this.hdsTheming.setTheme({ theme, onSetTheme: this.args.onSetTheme });\n }\n}\n"],"names":["OPTIONS","default","theme","icon","label","system","light","dark","HdsThemeSwitcher","Component","g","prototype","service","i","void 0","toggleSize","args","toggleIsFullWidth","toggleContent","currentTheme","hasDefaultOption","hasSystemOption","undefined","_options","options","hdsTheming","onSelectTheme","setTheme","onSetTheme","n","action","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/time/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { typeOf } from '@ember/utils';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport type { DisplayType } from '../../../services/hds-time-types.ts';\n\nimport type TimeService from '../../../services/hds-time';\n\nexport interface HdsTimeSignature {\n Args: {\n date?: Date | string;\n startDate?: Date | string;\n endDate?: Date | string;\n display?:\n | 'utc'\n | 'relative'\n | 'friendly-only'\n | 'friendly-local'\n | 'friendly-relative';\n isOpen?: boolean;\n hasTooltip?: boolean;\n isoUtcString?: string;\n };\n Element: HTMLElement;\n}\n\nconst dateIsValid = (date?: Date | string): date is Date =>\n date instanceof Date && !isNaN(+date);\n\nexport default class HdsTime extends Component<HdsTimeSignature> {\n @service declare readonly hdsTime: TimeService;\n\n get date(): Date | undefined {\n const { date } = this.args;\n\n // Sometimes an ISO date string might be passed in instead of a JS Date.\n if (date) {\n if (typeOf(date) === 'string') {\n return new Date(date);\n } else if (date instanceof Date) {\n return date;\n }\n }\n }\n\n get startDate(): Date | undefined {\n const { startDate } = this.args;\n\n if (startDate) {\n if (typeOf(startDate) === 'string') {\n return new Date(startDate);\n } else if (startDate instanceof Date) {\n return startDate;\n }\n }\n }\n\n get endDate(): Date | undefined {\n const { endDate } = this.args;\n\n if (endDate) {\n if (typeOf(endDate) === 'string') {\n return new Date(endDate);\n } else if (endDate instanceof Date) {\n return endDate;\n }\n }\n }\n\n get isValidDate(): boolean {\n return dateIsValid(this.date);\n }\n\n get isValidDateRange(): boolean {\n if (dateIsValid(this.startDate) && dateIsValid(this.endDate)) {\n return this.startDate <= this.endDate;\n }\n return false;\n }\n\n get hasTooltip(): boolean {\n return this.args.hasTooltip ?? true;\n }\n\n get isoUtcString(): string {\n const date = this.date;\n\n if (dateIsValid(date)) {\n const isoUtcString = this.hdsTime.toIsoUtcString(date);\n\n if (isoUtcString) return isoUtcString;\n }\n\n return '';\n }\n\n get rangeIsoUtcString(): string {\n const startDate = this.startDate;\n const endDate = this.endDate;\n\n if (dateIsValid(startDate) && dateIsValid(endDate)) {\n return `${this.hdsTime.toIsoUtcString(startDate)}–${this.hdsTime.toIsoUtcString(endDate)}`;\n }\n return '';\n }\n\n get display(): DisplayType {\n const date = this.date;\n const { display } = this.args;\n\n if (dateIsValid(date)) {\n const nextDiff = this.hdsTime.timeDifference(this.hdsTime.now, date);\n return this.hdsTime.format(nextDiff, display);\n }\n return {\n options: undefined,\n difference: { absValueInMs: 0, valueInMs: 0 },\n relative: { value: 0, unit: undefined },\n };\n }\n\n get isOpen(): boolean {\n return this.args.isOpen ?? false;\n }\n\n @action\n didInsertNode(): void {\n const date = this.date;\n\n if (dateIsValid(date)) {\n this.hdsTime.register(date);\n }\n }\n\n @action\n willDestroyNode(): void {\n const date = this.date;\n\n if (dateIsValid(date)) {\n this.hdsTime.unregister(date);\n }\n }\n}\n"],"names":["dateIsValid","date","Date","isNaN","HdsTime","Component","g","prototype","service","i","args","typeOf","startDate","endDate","isValidDate","isValidDateRange","hasTooltip","isoUtcString","hdsTime","toIsoUtcString","rangeIsoUtcString","display","nextDiff","timeDifference","now","format","options","undefined","difference","absValueInMs","valueInMs","relative","value","unit","isOpen","didInsertNode","register","n","action","willDestroyNode","unregister","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AA4BA,MAAMA,WAAW,GAAIC,IAAoB,IACvCA,IAAI,YAAYC,IAAI,IAAI,CAACC,KAAK,CAAC,CAACF,IAAI,CAAC;AAExB,MAAMG,OAAO,SAASC,SAAS,CAAmB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAC9DC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/time/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { typeOf } from '@ember/utils';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport type { DisplayType } from '../../../services/hds-time-types.ts';\n\nimport type TimeService from '../../../services/hds-time';\n\nexport interface HdsTimeSignature {\n Args: {\n date?: Date | string;\n startDate?: Date | string;\n endDate?: Date | string;\n display?:\n | 'utc'\n | 'relative'\n | 'friendly-only'\n | 'friendly-local'\n | 'friendly-relative';\n isOpen?: boolean;\n hasTooltip?: boolean;\n isoUtcString?: string;\n };\n Element: HTMLElement;\n}\n\nconst dateIsValid = (date?: Date | string): date is Date =>\n date instanceof Date && !isNaN(+date);\n\nexport default class HdsTime extends Component<HdsTimeSignature> {\n @service declare readonly hdsTime: TimeService;\n\n get date(): Date | undefined {\n const { date } = this.args;\n\n // Sometimes an ISO date string might be passed in instead of a JS Date.\n if (date) {\n if (typeOf(date) === 'string') {\n return new Date(date);\n } else if (date instanceof Date) {\n return date;\n }\n }\n }\n\n get startDate(): Date | undefined {\n const { startDate } = this.args;\n\n if (startDate) {\n if (typeOf(startDate) === 'string') {\n return new Date(startDate);\n } else if (startDate instanceof Date) {\n return startDate;\n }\n }\n }\n\n get endDate(): Date | undefined {\n const { endDate } = this.args;\n\n if (endDate) {\n if (typeOf(endDate) === 'string') {\n return new Date(endDate);\n } else if (endDate instanceof Date) {\n return endDate;\n }\n }\n }\n\n get isValidDate(): boolean {\n return dateIsValid(this.date);\n }\n\n get isValidDateRange(): boolean {\n if (dateIsValid(this.startDate) && dateIsValid(this.endDate)) {\n return this.startDate <= this.endDate;\n }\n return false;\n }\n\n get hasTooltip(): boolean {\n return this.args.hasTooltip ?? true;\n }\n\n get isoUtcString(): string {\n const date = this.date;\n\n if (dateIsValid(date)) {\n const isoUtcString = this.hdsTime.toIsoUtcString(date);\n\n if (isoUtcString) return isoUtcString;\n }\n\n return '';\n }\n\n get rangeIsoUtcString(): string {\n const startDate = this.startDate;\n const endDate = this.endDate;\n\n if (dateIsValid(startDate) && dateIsValid(endDate)) {\n return `${this.hdsTime.toIsoUtcString(startDate)}–${this.hdsTime.toIsoUtcString(endDate)}`;\n }\n return '';\n }\n\n get display(): DisplayType {\n const date = this.date;\n const { display } = this.args;\n\n if (dateIsValid(date)) {\n const nextDiff = this.hdsTime.timeDifference(this.hdsTime.now, date);\n return this.hdsTime.format(nextDiff, display);\n }\n return {\n options: undefined,\n difference: { absValueInMs: 0, valueInMs: 0 },\n relative: { value: 0, unit: undefined },\n };\n }\n\n get isOpen(): boolean {\n return this.args.isOpen ?? false;\n }\n\n @action\n didInsertNode(): void {\n const date = this.date;\n\n if (dateIsValid(date)) {\n this.hdsTime.register(date);\n }\n }\n\n @action\n willDestroyNode(): void {\n const date = this.date;\n\n if (dateIsValid(date)) {\n this.hdsTime.unregister(date);\n }\n }\n}\n"],"names":["dateIsValid","date","Date","isNaN","HdsTime","Component","g","prototype","service","i","void 0","args","typeOf","startDate","endDate","isValidDate","isValidDateRange","hasTooltip","isoUtcString","hdsTime","toIsoUtcString","rangeIsoUtcString","display","nextDiff","timeDifference","now","format","options","undefined","difference","absValueInMs","valueInMs","relative","value","unit","isOpen","didInsertNode","register","n","action","willDestroyNode","unregister","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range.js","sources":["../../../../src/components/hds/time/range.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport type TimeService from '../../../services/hds-time';\n\nexport interface HdsTimeRangeSignature {\n Args: {\n startDate?: Date;\n endDate?: Date;\n };\n Element: HTMLElement;\n}\n\nexport default class HdsTimeRange extends Component<HdsTimeRangeSignature> {\n @service declare readonly hdsTime: TimeService;\n\n get startDateIsoUtcString(): string | undefined {\n const { startDate } = this.args;\n if (startDate) {\n return this.hdsTime.toIsoUtcString(startDate);\n }\n }\n\n get endDateIsoUtcString(): string | undefined {\n const { endDate } = this.args;\n if (endDate) {\n return this.hdsTime.toIsoUtcString(endDate);\n }\n }\n\n get startDateDisplayFormat(): {\n month: Intl.DateTimeFormatOptions['month'];\n day: Intl.DateTimeFormatOptions['day'];\n year?: Intl.DateTimeFormatOptions['year'];\n hour?: Intl.DateTimeFormatOptions['hour'];\n minute?: Intl.DateTimeFormatOptions['minute'];\n second?: Intl.DateTimeFormatOptions['second'];\n } {\n const { startDate, endDate } = this.args;\n\n if (startDate?.getFullYear() !== endDate?.getFullYear()) {\n return {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n };\n } else {\n return {\n month: 'short',\n day: 'numeric',\n year: undefined,\n };\n }\n }\n\n get endDateDisplayFormat(): {\n month: Intl.DateTimeFormatOptions['month'];\n day: Intl.DateTimeFormatOptions['day'];\n year?: Intl.DateTimeFormatOptions['year'];\n hour?: Intl.DateTimeFormatOptions['hour'];\n minute?: Intl.DateTimeFormatOptions['minute'];\n second?: Intl.DateTimeFormatOptions['second'];\n } {\n return {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n };\n }\n}\n"],"names":["HdsTimeRange","Component","g","prototype","service","i","startDateIsoUtcString","startDate","args","hdsTime","toIsoUtcString","endDateIsoUtcString","endDate","startDateDisplayFormat","getFullYear","month","day","year","undefined","endDateDisplayFormat","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAce,MAAMA,YAAY,SAASC,SAAS,CAAwB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACxEC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"range.js","sources":["../../../../src/components/hds/time/range.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport type TimeService from '../../../services/hds-time';\n\nexport interface HdsTimeRangeSignature {\n Args: {\n startDate?: Date;\n endDate?: Date;\n };\n Element: HTMLElement;\n}\n\nexport default class HdsTimeRange extends Component<HdsTimeRangeSignature> {\n @service declare readonly hdsTime: TimeService;\n\n get startDateIsoUtcString(): string | undefined {\n const { startDate } = this.args;\n if (startDate) {\n return this.hdsTime.toIsoUtcString(startDate);\n }\n }\n\n get endDateIsoUtcString(): string | undefined {\n const { endDate } = this.args;\n if (endDate) {\n return this.hdsTime.toIsoUtcString(endDate);\n }\n }\n\n get startDateDisplayFormat(): {\n month: Intl.DateTimeFormatOptions['month'];\n day: Intl.DateTimeFormatOptions['day'];\n year?: Intl.DateTimeFormatOptions['year'];\n hour?: Intl.DateTimeFormatOptions['hour'];\n minute?: Intl.DateTimeFormatOptions['minute'];\n second?: Intl.DateTimeFormatOptions['second'];\n } {\n const { startDate, endDate } = this.args;\n\n if (startDate?.getFullYear() !== endDate?.getFullYear()) {\n return {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n };\n } else {\n return {\n month: 'short',\n day: 'numeric',\n year: undefined,\n };\n }\n }\n\n get endDateDisplayFormat(): {\n month: Intl.DateTimeFormatOptions['month'];\n day: Intl.DateTimeFormatOptions['day'];\n year?: Intl.DateTimeFormatOptions['year'];\n hour?: Intl.DateTimeFormatOptions['hour'];\n minute?: Intl.DateTimeFormatOptions['minute'];\n second?: Intl.DateTimeFormatOptions['second'];\n } {\n return {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n };\n }\n}\n"],"names":["HdsTimeRange","Component","g","prototype","service","i","void 0","startDateIsoUtcString","startDate","args","hdsTime","toIsoUtcString","endDateIsoUtcString","endDate","startDateDisplayFormat","getFullYear","month","day","year","undefined","endDateDisplayFormat","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAce,MAAMA,YAAY,SAASC,SAAS,CAAwB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACxEC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;EAER,IAAIC,qBAAqBA,GAAuB;IAC9C,MAAM;AAAEC,MAAAA;KAAW,GAAG,IAAI,CAACC,IAAI;AAC/B,IAAA,IAAID,SAAS,EAAE;AACb,MAAA,OAAO,IAAI,CAACE,OAAO,CAACC,cAAc,CAACH,SAAS,CAAC;AAC/C,IAAA;AACF,EAAA;EAEA,IAAII,mBAAmBA,GAAuB;IAC5C,MAAM;AAAEC,MAAAA;KAAS,GAAG,IAAI,CAACJ,IAAI;AAC7B,IAAA,IAAII,OAAO,EAAE;AACX,MAAA,OAAO,IAAI,CAACH,OAAO,CAACC,cAAc,CAACE,OAAO,CAAC;AAC7C,IAAA;AACF,EAAA;EAEA,IAAIC,sBAAsBA,GAOxB;IACA,MAAM;MAAEN,SAAS;AAAEK,MAAAA;KAAS,GAAG,IAAI,CAACJ,IAAI;IAExC,IAAID,SAAS,EAAEO,WAAW,EAAE,KAAKF,OAAO,EAAEE,WAAW,EAAE,EAAE;MACvD,OAAO;AACLC,QAAAA,KAAK,EAAE,OAAO;AACdC,QAAAA,GAAG,EAAE,SAAS;AACdC,QAAAA,IAAI,EAAE;OACP;AACH,IAAA,CAAC,MAAM;MACL,OAAO;AACLF,QAAAA,KAAK,EAAE,OAAO;AACdC,QAAAA,GAAG,EAAE,SAAS;AACdC,QAAAA,IAAI,EAAEC;OACP;AACH,IAAA;AACF,EAAA;EAEA,IAAIC,oBAAoBA,GAOtB;IACA,OAAO;AACLJ,MAAAA,KAAK,EAAE,OAAO;AACdC,MAAAA,GAAG,EAAE,SAAS;AACdC,MAAAA,IAAI,EAAE;KACP;AACH,EAAA;AACF;AAACG,oBAAA,CAAAC,QAAA,EAxDoBtB,YAAY,CAAA;;;;"}
|
package/dist/components.js
CHANGED
|
@@ -218,6 +218,8 @@ export { default as HdsTextBody } from './components/hds/text/body.js';
|
|
|
218
218
|
export { default as HdsTextCode } from './components/hds/text/code.js';
|
|
219
219
|
export { default as HdsTextDisplay } from './components/hds/text/display.js';
|
|
220
220
|
export { HdsTextAlignValues, HdsTextColorValues, HdsTextGroupValues, HdsTextSizeValues, HdsTextWeightValues } from './components/hds/text/types.js';
|
|
221
|
+
export { default as HdsThemeContext } from './components/hds/theme-context/index.js';
|
|
222
|
+
export { default as HdsThemeSwitcher } from './components/hds/theme-switcher/index.js';
|
|
221
223
|
export { default as HdsTime } from './components/hds/time/index.js';
|
|
222
224
|
export { default as HdsTimeSingle } from './components/hds/time/single.js';
|
|
223
225
|
export { default as HdsTimeRange } from './components/hds/time/range.js';
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hds-t.js","sources":["../../src/helpers/hds-t.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport { assert } from '@ember/debug';\nimport { isPresent } from '@ember/utils';\n\nimport type HdsIntlService from '../services/hds-intl';\nimport type { HdsIntlTOptions } from '../services/hds-intl';\n\ninterface HdsTHelperSignature {\n Args: {\n Positional: string[];\n Named: HdsIntlTOptions;\n };\n Return: string;\n}\n\nexport default class HdsTHelper extends Helper<HdsTHelperSignature> {\n @service hdsIntl!: HdsIntlService;\n\n compute(\n positional: HdsTHelperSignature['Args']['Positional'],\n named: HdsTHelperSignature['Args']['Named']\n ): HdsTHelperSignature['Return'] {\n const key = positional[0];\n\n assert(\n 'Hds::T helper requires a key as the first positional argument',\n typeof key === 'string' && isPresent(key)\n );\n\n return this.hdsIntl.t(key, named);\n }\n}\n"],"names":["HdsTHelper","Helper","g","prototype","service","i","compute","positional","named","key","assert","isPresent","hdsIntl","t"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;;AAkBe,MAAMA,UAAU,SAASC,MAAM,CAAsB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACjEC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"hds-t.js","sources":["../../src/helpers/hds-t.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport { assert } from '@ember/debug';\nimport { isPresent } from '@ember/utils';\n\nimport type HdsIntlService from '../services/hds-intl';\nimport type { HdsIntlTOptions } from '../services/hds-intl';\n\ninterface HdsTHelperSignature {\n Args: {\n Positional: string[];\n Named: HdsIntlTOptions;\n };\n Return: string;\n}\n\nexport default class HdsTHelper extends Helper<HdsTHelperSignature> {\n @service hdsIntl!: HdsIntlService;\n\n compute(\n positional: HdsTHelperSignature['Args']['Positional'],\n named: HdsTHelperSignature['Args']['Named']\n ): HdsTHelperSignature['Return'] {\n const key = positional[0];\n\n assert(\n 'Hds::T helper requires a key as the first positional argument',\n typeof key === 'string' && isPresent(key)\n );\n\n return this.hdsIntl.t(key, named);\n }\n}\n"],"names":["HdsTHelper","Helper","g","prototype","service","i","void 0","compute","positional","named","key","assert","isPresent","hdsIntl","t"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;;AAkBe,MAAMA,UAAU,SAASC,MAAM,CAAsB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACjEC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAERC,EAAAA,OAAOA,CACLC,UAAqD,EACrDC,KAA2C,EACZ;AAC/B,IAAA,MAAMC,GAAG,GAAGF,UAAU,CAAC,CAAC,CAAC;AAEzBG,IAAAA,MAAM,CACJ,+DAA+D,EAC/D,OAAOD,GAAG,KAAK,QAAQ,IAAIE,SAAS,CAACF,GAAG,CAC1C,CAAC;IAED,OAAO,IAAI,CAACG,OAAO,CAACC,CAAC,CAACJ,GAAG,EAAED,KAAK,CAAC;AACnC,EAAA;AACF;;;;"}
|