@hashicorp/design-system-components 5.2.0-rc-20260107211222 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declarations/services/hds-intl.d.ts +4 -3
- 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/time/index.js.map +1 -1
- package/dist/components/hds/time/range.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-time.js.map +1 -1
- package/dist/utils/hds-aria-described-by.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/app-side-nav/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsYieldSignature } from '../../yield';\nimport type { HdsAppSideNavListItemSignature } from './item';\nimport type { HdsAppSideNavListBackLinkSignature } from './back-link';\nimport type { HdsAppSideNavListTitleSignature } from './title';\nimport type { HdsAppSideNavListLinkSignature } from './link';\n\nexport interface HdsAppSideNavListSignature {\n Blocks: {\n default: [\n {\n ExtraBefore?: ComponentLike<HdsYieldSignature>;\n Item?: ComponentLike<HdsAppSideNavListItemSignature>;\n BackLink?: ComponentLike<HdsAppSideNavListBackLinkSignature>;\n Title?: ComponentLike<HdsAppSideNavListTitleSignature>;\n Link?: ComponentLike<HdsAppSideNavListLinkSignature>;\n ExtraAfter?: ComponentLike<HdsYieldSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsAppSideNavList extends Component<HdsAppSideNavListSignature> {\n @tracked private _titleIds: string[] = [];\n\n get titleIds(): string {\n return this._titleIds.join(' ');\n }\n\n @action\n didInsertTitle(titleId: string): void {\n this._titleIds = [...this._titleIds, titleId];\n }\n}\n"],"names":["HdsAppSideNavList","Component","g","prototype","tracked","i","titleIds","_titleIds","join","didInsertTitle","titleId","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;;AA4Be,MAAMA,iBAAiB,SAASC,SAAS,CAA6B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAClFC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA+B,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/app-side-nav/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsYieldSignature } from '../../yield';\nimport type { HdsAppSideNavListItemSignature } from './item';\nimport type { HdsAppSideNavListBackLinkSignature } from './back-link';\nimport type { HdsAppSideNavListTitleSignature } from './title';\nimport type { HdsAppSideNavListLinkSignature } from './link';\n\nexport interface HdsAppSideNavListSignature {\n Blocks: {\n default: [\n {\n ExtraBefore?: ComponentLike<HdsYieldSignature>;\n Item?: ComponentLike<HdsAppSideNavListItemSignature>;\n BackLink?: ComponentLike<HdsAppSideNavListBackLinkSignature>;\n Title?: ComponentLike<HdsAppSideNavListTitleSignature>;\n Link?: ComponentLike<HdsAppSideNavListLinkSignature>;\n ExtraAfter?: ComponentLike<HdsYieldSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsAppSideNavList extends Component<HdsAppSideNavListSignature> {\n @tracked private _titleIds: string[] = [];\n\n get titleIds(): string {\n return this._titleIds.join(' ');\n }\n\n @action\n didInsertTitle(titleId: string): void {\n this._titleIds = [...this._titleIds, titleId];\n }\n}\n"],"names":["HdsAppSideNavList","Component","g","prototype","tracked","i","void 0","titleIds","_titleIds","join","didInsertTitle","titleId","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;;AA4Be,MAAMA,iBAAiB,SAASC,SAAS,CAA6B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAClFC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA+B,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAAC,MAAA;EAEzC,IAAIC,QAAQA,GAAW;AACrB,IAAA,OAAO,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,GAAG,CAAC;AACjC,EAAA;EAGAC,cAAcA,CAACC,OAAe,EAAQ;IACpC,IAAI,CAACH,SAAS,GAAG,CAAC,GAAG,IAAI,CAACA,SAAS,EAAEG,OAAO,CAAC;AAC/C,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAT,SAAA,EAAA,gBAAA,EAAA,CAHAU,MAAM,CAAA,CAAA;AAAA;AAIT;AAACC,oBAAA,CAAAC,QAAA,EAXoBf,iBAAiB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target.js","sources":["../../../../../src/components/hds/app-side-nav/portal/target.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { macroCondition, isTesting } from '@embroider/macros';\n\nimport type { HdsAppSideNavPortalSignature } from './index';\nimport type { Registry as Services } from '@ember/service';\n\ninterface HdsAppSideNavPortalTargetSignature {\n Args: {\n targetName?: HdsAppSideNavPortalSignature['Args']['targetName'];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsAppSideNavPortalTarget extends Component<HdsAppSideNavPortalTargetSignature> {\n @service router!: Services['router'];\n\n @tracked private _numSubnavs = 0;\n @tracked private _lastPanelEl: Element | undefined;\n\n static get prefersReducedMotionOverride(): boolean {\n return macroCondition(isTesting()) ? true : false;\n }\n\n private _prefersReducedMotionMQ = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n );\n\n get prefersReducedMotion(): boolean {\n return (\n HdsAppSideNavPortalTarget.prefersReducedMotionOverride ||\n (this._prefersReducedMotionMQ && this._prefersReducedMotionMQ.matches)\n );\n }\n\n @action\n panelsChanged(portalCount: number): void {\n this._numSubnavs = portalCount;\n }\n\n @action\n didUpdateSubnav(element: HTMLElement, [count]: [number]): void {\n this.animateSubnav(element, [count]);\n }\n\n @action\n animateSubnav(element: HTMLElement, [count]: [number]): void {\n /*\n * Here is ascii art of what the layout looks like for this setup\n *\n\n AppSideNav\n +----------------------+\n | +------------------+ |\n | | (\"header\") | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"body\") | |\n (PortalTarget) | | | |\n +----------------------------------------------+ | |\n | +----------+ +----------+ | +----------+ | | |\n | | (Portal) | | (Portal) | | (Portal) | | | |\n | | | | | | | | | | |\n | | hidden | | hidden | | *active* | | | |\n | | panel | | panel | | | panel | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | +----------+ +----------+ | +----------+ | | |\n +----------------------------------------------+ | |\n | | | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"footer\") | |\n | +------------------+ |\n +----------------------+\n\n *\n * every time `HcAppFrame::SideNav::Portal` renders, it contains a portaled \"panel\"\n * that is rendered into the `hds-app-side-nav__content-panels` (inside the PortalTarget).\n *\n * Rendering or unrendering other `HcAppFrame::SideNav::Portal`s triggers the number of\n * subnavs to change (via `numSubnavs`), so this function runs and slides\n * `hds-app-side-nav__content-panels` left or right using the `element.animate` api.\n *\n * */\n\n const activeIndex = count - 1;\n const targetElement = element;\n const { prefersReducedMotion } = this;\n\n const styles = getComputedStyle(targetElement);\n const columnWidth = styles.getPropertyValue(\n '--hds-app-sidenav-width-expanded'\n );\n const slideDuration = prefersReducedMotion ? 0 : 150;\n let fadeDuration = prefersReducedMotion ? 0 : 175;\n let fadeDelay = prefersReducedMotion ? 0 : 50;\n\n // slide entire parent panel\n const start = styles.transform;\n const end = `translateX(-${activeIndex * parseInt(columnWidth, 10)}px)`;\n const anim = targetElement.animate(\n [{ transform: start }, { transform: end }],\n {\n duration: slideDuration,\n easing: 'cubic-bezier(0.65, 0, 0.35, 1)',\n fill: 'forwards',\n }\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n anim.finished.then((): void => {\n // uncomment this if we need/want to scroll the element to the top\n // targetElement.scrollIntoView(true);\n if (activeIndex > 0) {\n const allPrev = Array.from(targetElement.children).slice(\n 0,\n activeIndex\n ) as HTMLElement[];\n for (const ele of allPrev) {\n ele.ariaHidden = 'true';\n ele.style.setProperty('visibility', 'hidden');\n ele.style.setProperty('opacity', '0');\n }\n }\n // Notice: we don't add the styles by default because it writes a `style` attribute to the element and it causes an additional re-render\n if (macroCondition(isTesting())) {\n // Check the visibility of the element before attempting to commitStyles.\n if (targetElement.offsetParent !== null) {\n anim.commitStyles();\n }\n }\n });\n\n // fade in next panel\n const nextPanelEl = targetElement.children[activeIndex] as HTMLElement;\n\n // get reference to last child panel\n const lastPanelEl = targetElement.children[\n targetElement.children.length - 1\n ] as HTMLElement;\n\n if (nextPanelEl) {\n nextPanelEl.ariaHidden = 'false';\n nextPanelEl.style.setProperty('visibility', 'visible');\n // this eliminates a flicker if there's only one subnav rendering or if we\n // already just rendered this panel.\n if (this._lastPanelEl) {\n if (activeIndex === 0 || nextPanelEl.isSameNode(this._lastPanelEl)) {\n fadeDelay = 0;\n fadeDuration = 0;\n }\n }\n\n // remember the last panel\n this._lastPanelEl = lastPanelEl;\n\n nextPanelEl.animate([{ opacity: '0' }, { opacity: '1' }], {\n delay: fadeDelay,\n duration: fadeDuration,\n fill: 'forwards',\n });\n }\n }\n}\n"],"names":["HdsAppSideNavPortalTarget","Component","g","prototype","service","i","tracked","prefersReducedMotionOverride","macroCondition","isTesting","_prefersReducedMotionMQ","window","matchMedia","prefersReducedMotion","matches","panelsChanged","portalCount","_numSubnavs","n","action","didUpdateSubnav","element","count","animateSubnav","activeIndex","targetElement","styles","getComputedStyle","columnWidth","getPropertyValue","slideDuration","fadeDuration","fadeDelay","start","transform","end","parseInt","anim","animate","duration","easing","fill","finished","then","allPrev","Array","from","children","slice","ele","ariaHidden","style","setProperty","offsetParent","commitStyles","nextPanelEl","lastPanelEl","length","_lastPanelEl","isSameNode","opacity","delay","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"target.js","sources":["../../../../../src/components/hds/app-side-nav/portal/target.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { macroCondition, isTesting } from '@embroider/macros';\n\nimport type { HdsAppSideNavPortalSignature } from './index';\nimport type { Registry as Services } from '@ember/service';\n\ninterface HdsAppSideNavPortalTargetSignature {\n Args: {\n targetName?: HdsAppSideNavPortalSignature['Args']['targetName'];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsAppSideNavPortalTarget extends Component<HdsAppSideNavPortalTargetSignature> {\n @service router!: Services['router'];\n\n @tracked private _numSubnavs = 0;\n @tracked private _lastPanelEl: Element | undefined;\n\n static get prefersReducedMotionOverride(): boolean {\n return macroCondition(isTesting()) ? true : false;\n }\n\n private _prefersReducedMotionMQ = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n );\n\n get prefersReducedMotion(): boolean {\n return (\n HdsAppSideNavPortalTarget.prefersReducedMotionOverride ||\n (this._prefersReducedMotionMQ && this._prefersReducedMotionMQ.matches)\n );\n }\n\n @action\n panelsChanged(portalCount: number): void {\n this._numSubnavs = portalCount;\n }\n\n @action\n didUpdateSubnav(element: HTMLElement, [count]: [number]): void {\n this.animateSubnav(element, [count]);\n }\n\n @action\n animateSubnav(element: HTMLElement, [count]: [number]): void {\n /*\n * Here is ascii art of what the layout looks like for this setup\n *\n\n AppSideNav\n +----------------------+\n | +------------------+ |\n | | (\"header\") | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"body\") | |\n (PortalTarget) | | | |\n +----------------------------------------------+ | |\n | +----------+ +----------+ | +----------+ | | |\n | | (Portal) | | (Portal) | | (Portal) | | | |\n | | | | | | | | | | |\n | | hidden | | hidden | | *active* | | | |\n | | panel | | panel | | | panel | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | +----------+ +----------+ | +----------+ | | |\n +----------------------------------------------+ | |\n | | | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"footer\") | |\n | +------------------+ |\n +----------------------+\n\n *\n * every time `HcAppFrame::SideNav::Portal` renders, it contains a portaled \"panel\"\n * that is rendered into the `hds-app-side-nav__content-panels` (inside the PortalTarget).\n *\n * Rendering or unrendering other `HcAppFrame::SideNav::Portal`s triggers the number of\n * subnavs to change (via `numSubnavs`), so this function runs and slides\n * `hds-app-side-nav__content-panels` left or right using the `element.animate` api.\n *\n * */\n\n const activeIndex = count - 1;\n const targetElement = element;\n const { prefersReducedMotion } = this;\n\n const styles = getComputedStyle(targetElement);\n const columnWidth = styles.getPropertyValue(\n '--hds-app-sidenav-width-expanded'\n );\n const slideDuration = prefersReducedMotion ? 0 : 150;\n let fadeDuration = prefersReducedMotion ? 0 : 175;\n let fadeDelay = prefersReducedMotion ? 0 : 50;\n\n // slide entire parent panel\n const start = styles.transform;\n const end = `translateX(-${activeIndex * parseInt(columnWidth, 10)}px)`;\n const anim = targetElement.animate(\n [{ transform: start }, { transform: end }],\n {\n duration: slideDuration,\n easing: 'cubic-bezier(0.65, 0, 0.35, 1)',\n fill: 'forwards',\n }\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n anim.finished.then((): void => {\n // uncomment this if we need/want to scroll the element to the top\n // targetElement.scrollIntoView(true);\n if (activeIndex > 0) {\n const allPrev = Array.from(targetElement.children).slice(\n 0,\n activeIndex\n ) as HTMLElement[];\n for (const ele of allPrev) {\n ele.ariaHidden = 'true';\n ele.style.setProperty('visibility', 'hidden');\n ele.style.setProperty('opacity', '0');\n }\n }\n // Notice: we don't add the styles by default because it writes a `style` attribute to the element and it causes an additional re-render\n if (macroCondition(isTesting())) {\n // Check the visibility of the element before attempting to commitStyles.\n if (targetElement.offsetParent !== null) {\n anim.commitStyles();\n }\n }\n });\n\n // fade in next panel\n const nextPanelEl = targetElement.children[activeIndex] as HTMLElement;\n\n // get reference to last child panel\n const lastPanelEl = targetElement.children[\n targetElement.children.length - 1\n ] as HTMLElement;\n\n if (nextPanelEl) {\n nextPanelEl.ariaHidden = 'false';\n nextPanelEl.style.setProperty('visibility', 'visible');\n // this eliminates a flicker if there's only one subnav rendering or if we\n // already just rendered this panel.\n if (this._lastPanelEl) {\n if (activeIndex === 0 || nextPanelEl.isSameNode(this._lastPanelEl)) {\n fadeDelay = 0;\n fadeDuration = 0;\n }\n }\n\n // remember the last panel\n this._lastPanelEl = lastPanelEl;\n\n nextPanelEl.animate([{ opacity: '0' }, { opacity: '1' }], {\n delay: fadeDelay,\n duration: fadeDuration,\n fill: 'forwards',\n });\n }\n }\n}\n"],"names":["HdsAppSideNavPortalTarget","Component","g","prototype","service","i","void 0","tracked","prefersReducedMotionOverride","macroCondition","isTesting","_prefersReducedMotionMQ","window","matchMedia","prefersReducedMotion","matches","panelsChanged","portalCount","_numSubnavs","n","action","didUpdateSubnav","element","count","animateSubnav","activeIndex","targetElement","styles","getComputedStyle","columnWidth","getPropertyValue","slideDuration","fadeDuration","fadeDelay","start","transform","end","parseInt","anim","animate","duration","easing","fill","finished","then","allPrev","Array","from","children","slice","ele","ariaHidden","style","setProperty","offsetParent","commitStyles","nextPanelEl","lastPanelEl","length","_lastPanelEl","isSameNode","opacity","delay","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.js","sources":["../../../../src/components/hds/breadcrumb/item.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 { htmlSafe } from '@ember/template';\nimport { assert } from '@ember/debug';\n\nimport { hdsResolveLinkToExternal } from '../../../utils/hds-resolve-link-to-external.ts';\n\nimport type Owner from '@ember/owner';\nimport type { LinkTo } from '@ember/routing';\nimport type { SafeString } from '@ember/template';\nimport type { HdsIconSignature } from '../icon/index';\n\nexport interface HdsBreadcrumbItemSignature {\n Args: {\n current?: boolean;\n maxWidth?: string;\n text: string;\n isRouteExternal?: boolean;\n icon?: HdsIconSignature['Args']['name'];\n route?: string;\n models?: Array<string | number>;\n model?: string | number;\n query?: Record<string, string>;\n 'current-when'?: string;\n replace?: boolean;\n };\n Element: HTMLLIElement;\n}\n\nexport default class HdsBreadcrumbItem extends Component<HdsBreadcrumbItemSignature> {\n @tracked linkToExternal: LinkTo | null = null;\n\n constructor(owner: Owner, args: HdsBreadcrumbItemSignature['Args']) {\n super(owner, args);\n\n // we want to avoid resolving the component if it's not needed\n if (args.isRouteExternal) {\n void this.resolveLinkToExternal();\n }\n }\n\n async resolveLinkToExternal() {\n this.linkToExternal = await hdsResolveLinkToExternal(\n this.args.isRouteExternal\n );\n }\n\n /**\n * @param maxWidth\n * @type {string}\n * @default undefined\n * @description A parameter that can be applied to an \"item\" to limit its max-width\n */\n get maxWidth(): string | undefined {\n const { maxWidth } = this.args;\n\n if (maxWidth) {\n assert(\n `@maxWidth for \"Hds::Breadcrumb::Item\" must be a size as number in 'px' or in 'em' (eg. '200px' or '24em'); received: ${maxWidth}`,\n maxWidth.match(/^\\d+(px|em)$/)\n );\n\n return maxWidth;\n } else {\n return undefined;\n }\n }\n\n /**\n * Get the inline style to apply to the item.\n * @method BreadcrumbItem#itemStyle\n * @return {string} The \"style\" attribute to apply to the item.\n */\n get itemStyle(): SafeString | undefined {\n if (this.maxWidth) {\n return htmlSafe(`max-width: ${this.maxWidth}`);\n } else {\n return undefined;\n }\n }\n\n /**\n * Get the class names to apply to the component.\n * @method BreadcrumbItem#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-breadcrumb__item'];\n\n return classes.join(' ');\n }\n}\n"],"names":["HdsBreadcrumbItem","Component","g","prototype","tracked","i","constructor","owner","args","isRouteExternal","resolveLinkToExternal","linkToExternal","hdsResolveLinkToExternal","maxWidth","assert","match","undefined","itemStyle","htmlSafe","classNames","classes","join","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AA+Be,MAAMA,iBAAiB,SAASC,SAAS,CAA6B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,gBAAA,EAAA,CAClFC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAiC,IAAI;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,eAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"item.js","sources":["../../../../src/components/hds/breadcrumb/item.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 { htmlSafe } from '@ember/template';\nimport { assert } from '@ember/debug';\n\nimport { hdsResolveLinkToExternal } from '../../../utils/hds-resolve-link-to-external.ts';\n\nimport type Owner from '@ember/owner';\nimport type { LinkTo } from '@ember/routing';\nimport type { SafeString } from '@ember/template';\nimport type { HdsIconSignature } from '../icon/index';\n\nexport interface HdsBreadcrumbItemSignature {\n Args: {\n current?: boolean;\n maxWidth?: string;\n text: string;\n isRouteExternal?: boolean;\n icon?: HdsIconSignature['Args']['name'];\n route?: string;\n models?: Array<string | number>;\n model?: string | number;\n query?: Record<string, string>;\n 'current-when'?: string;\n replace?: boolean;\n };\n Element: HTMLLIElement;\n}\n\nexport default class HdsBreadcrumbItem extends Component<HdsBreadcrumbItemSignature> {\n @tracked linkToExternal: LinkTo | null = null;\n\n constructor(owner: Owner, args: HdsBreadcrumbItemSignature['Args']) {\n super(owner, args);\n\n // we want to avoid resolving the component if it's not needed\n if (args.isRouteExternal) {\n void this.resolveLinkToExternal();\n }\n }\n\n async resolveLinkToExternal() {\n this.linkToExternal = await hdsResolveLinkToExternal(\n this.args.isRouteExternal\n );\n }\n\n /**\n * @param maxWidth\n * @type {string}\n * @default undefined\n * @description A parameter that can be applied to an \"item\" to limit its max-width\n */\n get maxWidth(): string | undefined {\n const { maxWidth } = this.args;\n\n if (maxWidth) {\n assert(\n `@maxWidth for \"Hds::Breadcrumb::Item\" must be a size as number in 'px' or in 'em' (eg. '200px' or '24em'); received: ${maxWidth}`,\n maxWidth.match(/^\\d+(px|em)$/)\n );\n\n return maxWidth;\n } else {\n return undefined;\n }\n }\n\n /**\n * Get the inline style to apply to the item.\n * @method BreadcrumbItem#itemStyle\n * @return {string} The \"style\" attribute to apply to the item.\n */\n get itemStyle(): SafeString | undefined {\n if (this.maxWidth) {\n return htmlSafe(`max-width: ${this.maxWidth}`);\n } else {\n return undefined;\n }\n }\n\n /**\n * Get the class names to apply to the component.\n * @method BreadcrumbItem#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-breadcrumb__item'];\n\n return classes.join(' ');\n }\n}\n"],"names":["HdsBreadcrumbItem","Component","g","prototype","tracked","i","void 0","constructor","owner","args","isRouteExternal","resolveLinkToExternal","linkToExternal","hdsResolveLinkToExternal","maxWidth","assert","match","undefined","itemStyle","htmlSafe","classNames","classes","join","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AA+Be,MAAMA,iBAAiB,SAASC,SAAS,CAA6B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,gBAAA,EAAA,CAClFC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAiC,IAAI;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,eAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,EAAAC,MAAA;AAE7CC,EAAAA,WAAWA,CAACC,KAAY,EAAEC,IAAwC,EAAE;AAClE,IAAA,KAAK,CAACD,KAAK,EAAEC,IAAI,CAAC;;AAElB;IACA,IAAIA,IAAI,CAACC,eAAe,EAAE;AACxB,MAAA,KAAK,IAAI,CAACC,qBAAqB,EAAE;AACnC,IAAA;AACF,EAAA;EAEA,MAAMA,qBAAqBA,GAAG;IAC5B,IAAI,CAACC,cAAc,GAAG,MAAMC,wBAAwB,CAClD,IAAI,CAACJ,IAAI,CAACC,eACZ,CAAC;AACH,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE,IAAII,QAAQA,GAAuB;IACjC,MAAM;AAAEA,MAAAA;KAAU,GAAG,IAAI,CAACL,IAAI;AAE9B,IAAA,IAAIK,QAAQ,EAAE;MACZC,MAAM,CACJ,CAAA,qHAAA,EAAwHD,QAAQ,CAAA,CAAE,EAClIA,QAAQ,CAACE,KAAK,CAAC,cAAc,CAC/B,CAAC;AAED,MAAA,OAAOF,QAAQ;AACjB,IAAA,CAAC,MAAM;AACL,MAAA,OAAOG,SAAS;AAClB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACE,IAAIC,SAASA,GAA2B;IACtC,IAAI,IAAI,CAACJ,QAAQ,EAAE;AACjB,MAAA,OAAOK,QAAQ,CAAC,CAAA,WAAA,EAAc,IAAI,CAACL,QAAQ,EAAE,CAAC;AAChD,IAAA,CAAC,MAAM;AACL,MAAA,OAAOG,SAAS;AAClB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACE,IAAIG,UAAUA,GAAW;AACvB,IAAA,MAAMC,OAAO,GAAG,CAAC,sBAAsB,CAAC;AAExC,IAAA,OAAOA,OAAO,CAACC,IAAI,CAAC,GAAG,CAAC;AAC1B,EAAA;AACF;AAACC,oBAAA,CAAAC,QAAA,EA9DoBxB,iBAAiB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/code-block/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { htmlSafe } from '@ember/template';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport Prism from 'prismjs';\n\nimport type { SafeString } from '@ember/template';\nimport type { WithBoundArgs } from '@glint/template';\n\nimport type { HdsCodeBlockTitleSignature } from './title';\nimport type { HdsCodeBlockDescriptionSignature } from './description';\nimport { HdsCodeBlockLanguageValues } from './types.ts';\nimport type { HdsCodeBlockLanguages } from './types.ts';\nimport type { HdsCopyButtonSignature } from '../copy/button/index.ts';\n\nimport HdsCodeBlockTitleComponent from './title.ts';\nimport HdsCodeBlockDescriptionComponent from './description.ts';\n\nimport 'prismjs/plugins/line-numbers/prism-line-numbers';\nimport 'prismjs/plugins/line-highlight/prism-line-highlight';\n\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-hcl';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-log';\nimport 'prismjs/components/prism-ruby';\nimport 'prismjs/components/prism-shell-session';\nimport 'prismjs/components/prism-yaml';\n\n// These imports are required to overcome a global variable clash in Helios website\n// where language import are overriden by the Prism instance in `CodeBlock`\n// Note that `prism-handlebars` is dependant on `prism-markup-templating`\nimport 'prismjs/components/prism-markup-templating';\nimport 'prismjs/components/prism-handlebars';\n\nexport const LANGUAGES: HdsCodeBlockLanguages[] = Object.values(\n HdsCodeBlockLanguageValues\n);\n\nexport interface HdsCodeBlockSignature {\n Args: {\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n hasCopyButton?: boolean;\n hasLineNumbers?: boolean;\n hasLineWrapping?: boolean;\n highlightLines?: string;\n lineNumberStart?: number;\n isStandalone?: boolean;\n language?: HdsCodeBlockLanguages;\n maxHeight?: string;\n value: string;\n copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];\n copySuccessMessageText?: HdsCopyButtonSignature['Args']['ariaMessageText'];\n };\n Blocks: {\n default: [\n {\n Title?: WithBoundArgs<\n typeof HdsCodeBlockTitleComponent,\n 'didInsertNode'\n >;\n Description?: WithBoundArgs<\n typeof HdsCodeBlockDescriptionComponent,\n 'didInsertNode'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsCodeBlock extends Component<HdsCodeBlockSignature> {\n @tracked private _prismCode: SafeString = htmlSafe('');\n @tracked private _isExpanded: boolean = false;\n @tracked private _codeContentHeight: number = 0;\n @tracked private _codeContainerHeight: number = 0;\n @tracked private _titleId: string | undefined;\n @tracked private _descriptionId: string | undefined;\n\n // Generates a unique ID for the code content\n private _preCodeId = 'pre-code-' + guidFor(this);\n private _preCodeElement!: HTMLPreElement;\n private _observer!: ResizeObserver;\n\n // If a code block is hidden from view, and made visible after load, the Prism code needs to be re-run\n private _setUpCodeObserver = modifier((element: HTMLElement) => {\n this._preCodeElement = element.querySelector(\n '.hds-code-block__code'\n ) as HTMLPreElement;\n this._observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.contentBoxSize) {\n this._updateCodeHeights();\n this._updatePrismPlugins();\n }\n });\n });\n this._observer.observe(element);\n\n return () => {\n this._observer.disconnect();\n };\n });\n\n private _setUpCodeBlockCode = modifier((element: HTMLElement) => {\n this._isExpanded = false; // reset expanded state on updates\n this.setPrismCode(element);\n return () => {};\n });\n\n get ariaLabelledBy(): string | undefined {\n if (this.args.ariaLabel !== undefined) {\n return;\n }\n\n return this.args.ariaLabelledBy ?? this._titleId;\n }\n\n get ariaDescribedBy(): string | undefined {\n return this.args.ariaDescribedBy ?? this._descriptionId;\n }\n\n // code text content for the CodeBlock\n get code(): string {\n const code = this.args.value;\n\n assert(\n '@code for \"Hds::CodeBlock\" must have a valid value',\n code !== undefined\n );\n\n if (Prism?.plugins?.['NormalizeWhitespace']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n return Prism.plugins['NormalizeWhitespace'].normalize(code);\n }\n\n return code;\n }\n\n get maxHeight(): string | undefined {\n return this._isExpanded ? 'none' : this.args.maxHeight;\n }\n\n // Shows overlay footer if maxHeight is set and the pre tag content height is greater than the pre tag height\n get showFooter(): boolean {\n if (this.args.maxHeight) {\n return this._codeContentHeight > this._codeContainerHeight;\n }\n return false;\n }\n\n // Name of coding language used within CodeBlock for syntax highlighting\n get language(): HdsCodeBlockLanguages | undefined {\n return this.args.language ?? undefined;\n }\n\n // Displays line numbers if true\n get hasLineNumbers(): boolean {\n return this.args.hasLineNumbers ?? true;\n }\n\n // Make CodeBlock container corners appear rounded (the standalone variation)\n get isStandalone(): boolean {\n return this.args.isStandalone ?? true;\n }\n\n // Make text content wrap to multiple lines\n get hasLineWrapping(): boolean {\n return this.args.hasLineWrapping ?? false;\n }\n\n get copyButtonText(): HdsCopyButtonSignature['Args']['text'] {\n return this.args.copyButtonText ? this.args.copyButtonText : 'Copy';\n }\n\n @action\n registerTitleElement(element: HdsCodeBlockTitleSignature['Element']): void {\n this._titleId = element.id;\n }\n\n @action\n registerDescriptionElement(\n element: HdsCodeBlockDescriptionSignature['Element']\n ): void {\n this._descriptionId = element.id;\n }\n\n @action\n setPrismCode(element: HTMLElement): void {\n const code = this.code;\n const language = this.language;\n const grammar = language ? Prism.languages[language] : undefined;\n\n if (code) {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n if (language && grammar) {\n this._prismCode = htmlSafe(Prism.highlight(code, grammar, language));\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n this._prismCode = htmlSafe(Prism.util.encode(code).toString());\n }\n\n // Existing line numbers must be removed in order to be updated correctly\n const lineNumbers = element.querySelector(\n '.line-numbers-rows'\n ) as HTMLElement;\n if (lineNumbers) {\n element.removeChild(lineNumbers);\n }\n\n if (this.args.highlightLines) {\n this._prismCode = this._addHighlightSrOnlyText(\n this._prismCode.toString()\n );\n }\n\n // Force prism-line-numbers plugin initialization, required for Prism.highlight usage\n // See https://github.com/PrismJS/prism/issues/1234\n Prism.hooks.run('complete', {\n code,\n element,\n });\n\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateCodeHeights();\n // we need to delay re-evaluating the context for prism plugins for as much as possible, and `afterRender` is the 'latest' we can use in the component lifecycle\n this._updatePrismPlugins();\n });\n });\n }\n }\n\n private _updateCodeHeights(): void {\n if (!this._isExpanded) {\n // Get the actual height & the content height of the preCodeElement\n this._codeContentHeight = this._preCodeElement?.scrollHeight ?? 0;\n this._codeContainerHeight = this._preCodeElement?.clientHeight ?? 0;\n }\n }\n\n private _updatePrismPlugins(): void {\n if (this.hasLineNumbers && Prism?.plugins?.['lineNumbers']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n Prism.plugins['lineNumbers'].resize(this._preCodeElement);\n }\n\n // Force prism-line-highlight plugin initialization\n // Context: https://github.com/hashicorp/design-system/pull/1749#discussion_r1374288785\n if (this.args.highlightLines) {\n // we piggy-back on the plugin's `resize` event listener to trigger a new call of the `highlightLines` function: https://github.com/PrismJS/prism/blob/master/plugins/line-highlight/prism-line-highlight.js#L337\n if (window) window.dispatchEvent(new Event('resize'));\n }\n }\n\n @action\n toggleExpanded(): void {\n this._isExpanded = !this._isExpanded;\n }\n\n // Logic for determining where line highlighting starts and ends taken from Prism.js plugin source code\n // Context: https://github.com/PrismJS/prism/blob/19f8de66b0f3a79aedbbf096081a4060fc0e80af/src/plugins/line-highlight/prism-line-highlight.ts#L82\n private _addHighlightSrOnlyText(code: string): SafeString {\n const NEW_LINE_EXP = /\\n(?!$)/g;\n const lines = code.split(NEW_LINE_EXP);\n const numLines = lines.length;\n const lineOffset = this.args.lineNumberStart\n ? this.args.lineNumberStart\n : 0;\n\n const highlightStart = '<span class=\"sr-only\">highlight start</span>';\n const highlightEnd = '<span class=\"sr-only\">highlight end</span>';\n\n const ranges = this.args.highlightLines\n ?.replace(/\\s+/g, '')\n .split(',')\n .filter(Boolean);\n\n if (ranges && ranges.length > 0) {\n const highlightedLines = [] as { start: number; end: number }[];\n\n ranges.forEach((currentRange) => {\n const range = currentRange.split('-');\n const start = +range[0]! - lineOffset;\n let end = +range[1]! || start - lineOffset;\n end = Math.min(numLines, end);\n highlightedLines.push({\n start: start,\n end: end,\n });\n });\n\n highlightedLines.forEach((line) => {\n lines[line.start - 1] = highlightStart + lines[line.start - 1];\n lines[line.end - 1] = lines[line.end - 1] + highlightEnd;\n });\n\n return htmlSafe(lines.join('\\n'));\n } else {\n return htmlSafe(code);\n }\n }\n\n get classNames(): string {\n // Currently there is only one theme so the class name is hard-coded.\n // In the future, additional themes such as a \"light\" theme could be added.\n const classes = ['hds-code-block', 'hds-code-block--theme-dark'];\n\n if (this.language) {\n classes.push(`language-${this.language}`);\n }\n\n if (this.isStandalone === true) {\n classes.push('hds-code-block--is-standalone');\n }\n\n if (this.hasLineWrapping === true) {\n classes.push('hds-code-block--has-line-wrapping');\n }\n\n // Note: Prism.js is using the specific class name \"line-numbers\" to determine implementation of line numbers in the UI\n if (this.hasLineNumbers) {\n classes.push('line-numbers');\n }\n\n if (this.showFooter) {\n classes.push('hds-code-block--has-overlay-footer');\n }\n\n if (this._isExpanded) {\n classes.push('hds-code-block--is-expanded');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["LANGUAGES","Object","values","HdsCodeBlockLanguageValues","HdsCodeBlock","Component","g","prototype","tracked","htmlSafe","i","_preCodeId","guidFor","_preCodeElement","_observer","_setUpCodeObserver","modifier","element","querySelector","ResizeObserver","entries","forEach","entry","contentBoxSize","_updateCodeHeights","_updatePrismPlugins","observe","disconnect","_setUpCodeBlockCode","_isExpanded","setPrismCode","ariaLabelledBy","args","ariaLabel","undefined","_titleId","ariaDescribedBy","_descriptionId","code","value","assert","Prism","plugins","normalize","maxHeight","showFooter","_codeContentHeight","_codeContainerHeight","language","hasLineNumbers","isStandalone","hasLineWrapping","copyButtonText","registerTitleElement","id","n","action","registerDescriptionElement","grammar","languages","next","_prismCode","highlight","util","encode","toString","lineNumbers","removeChild","highlightLines","_addHighlightSrOnlyText","hooks","run","schedule","scrollHeight","clientHeight","resize","window","dispatchEvent","Event","toggleExpanded","NEW_LINE_EXP","lines","split","numLines","length","lineOffset","lineNumberStart","highlightStart","highlightEnd","ranges","replace","filter","Boolean","highlightedLines","currentRange","range","start","end","Math","min","push","line","join","classNames","classes","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/code-block/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { assert } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { htmlSafe } from '@ember/template';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport Prism from 'prismjs';\n\nimport type { SafeString } from '@ember/template';\nimport type { WithBoundArgs } from '@glint/template';\n\nimport type { HdsCodeBlockTitleSignature } from './title';\nimport type { HdsCodeBlockDescriptionSignature } from './description';\nimport { HdsCodeBlockLanguageValues } from './types.ts';\nimport type { HdsCodeBlockLanguages } from './types.ts';\nimport type { HdsCopyButtonSignature } from '../copy/button/index.ts';\n\nimport HdsCodeBlockTitleComponent from './title.ts';\nimport HdsCodeBlockDescriptionComponent from './description.ts';\n\nimport 'prismjs/plugins/line-numbers/prism-line-numbers';\nimport 'prismjs/plugins/line-highlight/prism-line-highlight';\n\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-hcl';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-log';\nimport 'prismjs/components/prism-ruby';\nimport 'prismjs/components/prism-shell-session';\nimport 'prismjs/components/prism-yaml';\n\n// These imports are required to overcome a global variable clash in Helios website\n// where language import are overriden by the Prism instance in `CodeBlock`\n// Note that `prism-handlebars` is dependant on `prism-markup-templating`\nimport 'prismjs/components/prism-markup-templating';\nimport 'prismjs/components/prism-handlebars';\n\nexport const LANGUAGES: HdsCodeBlockLanguages[] = Object.values(\n HdsCodeBlockLanguageValues\n);\n\nexport interface HdsCodeBlockSignature {\n Args: {\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n hasCopyButton?: boolean;\n hasLineNumbers?: boolean;\n hasLineWrapping?: boolean;\n highlightLines?: string;\n lineNumberStart?: number;\n isStandalone?: boolean;\n language?: HdsCodeBlockLanguages;\n maxHeight?: string;\n value: string;\n copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n onCopy?: HdsCopyButtonSignature['Args']['onSuccess'];\n copySuccessMessageText?: HdsCopyButtonSignature['Args']['ariaMessageText'];\n };\n Blocks: {\n default: [\n {\n Title?: WithBoundArgs<\n typeof HdsCodeBlockTitleComponent,\n 'didInsertNode'\n >;\n Description?: WithBoundArgs<\n typeof HdsCodeBlockDescriptionComponent,\n 'didInsertNode'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsCodeBlock extends Component<HdsCodeBlockSignature> {\n @tracked private _prismCode: SafeString = htmlSafe('');\n @tracked private _isExpanded: boolean = false;\n @tracked private _codeContentHeight: number = 0;\n @tracked private _codeContainerHeight: number = 0;\n @tracked private _titleId: string | undefined;\n @tracked private _descriptionId: string | undefined;\n\n // Generates a unique ID for the code content\n private _preCodeId = 'pre-code-' + guidFor(this);\n private _preCodeElement!: HTMLPreElement;\n private _observer!: ResizeObserver;\n\n // If a code block is hidden from view, and made visible after load, the Prism code needs to be re-run\n private _setUpCodeObserver = modifier((element: HTMLElement) => {\n this._preCodeElement = element.querySelector(\n '.hds-code-block__code'\n ) as HTMLPreElement;\n this._observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.contentBoxSize) {\n this._updateCodeHeights();\n this._updatePrismPlugins();\n }\n });\n });\n this._observer.observe(element);\n\n return () => {\n this._observer.disconnect();\n };\n });\n\n private _setUpCodeBlockCode = modifier((element: HTMLElement) => {\n this._isExpanded = false; // reset expanded state on updates\n this.setPrismCode(element);\n return () => {};\n });\n\n get ariaLabelledBy(): string | undefined {\n if (this.args.ariaLabel !== undefined) {\n return;\n }\n\n return this.args.ariaLabelledBy ?? this._titleId;\n }\n\n get ariaDescribedBy(): string | undefined {\n return this.args.ariaDescribedBy ?? this._descriptionId;\n }\n\n // code text content for the CodeBlock\n get code(): string {\n const code = this.args.value;\n\n assert(\n '@code for \"Hds::CodeBlock\" must have a valid value',\n code !== undefined\n );\n\n if (Prism?.plugins?.['NormalizeWhitespace']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n return Prism.plugins['NormalizeWhitespace'].normalize(code);\n }\n\n return code;\n }\n\n get maxHeight(): string | undefined {\n return this._isExpanded ? 'none' : this.args.maxHeight;\n }\n\n // Shows overlay footer if maxHeight is set and the pre tag content height is greater than the pre tag height\n get showFooter(): boolean {\n if (this.args.maxHeight) {\n return this._codeContentHeight > this._codeContainerHeight;\n }\n return false;\n }\n\n // Name of coding language used within CodeBlock for syntax highlighting\n get language(): HdsCodeBlockLanguages | undefined {\n return this.args.language ?? undefined;\n }\n\n // Displays line numbers if true\n get hasLineNumbers(): boolean {\n return this.args.hasLineNumbers ?? true;\n }\n\n // Make CodeBlock container corners appear rounded (the standalone variation)\n get isStandalone(): boolean {\n return this.args.isStandalone ?? true;\n }\n\n // Make text content wrap to multiple lines\n get hasLineWrapping(): boolean {\n return this.args.hasLineWrapping ?? false;\n }\n\n get copyButtonText(): HdsCopyButtonSignature['Args']['text'] {\n return this.args.copyButtonText ? this.args.copyButtonText : 'Copy';\n }\n\n @action\n registerTitleElement(element: HdsCodeBlockTitleSignature['Element']): void {\n this._titleId = element.id;\n }\n\n @action\n registerDescriptionElement(\n element: HdsCodeBlockDescriptionSignature['Element']\n ): void {\n this._descriptionId = element.id;\n }\n\n @action\n setPrismCode(element: HTMLElement): void {\n const code = this.code;\n const language = this.language;\n const grammar = language ? Prism.languages[language] : undefined;\n\n if (code) {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n if (language && grammar) {\n this._prismCode = htmlSafe(Prism.highlight(code, grammar, language));\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n this._prismCode = htmlSafe(Prism.util.encode(code).toString());\n }\n\n // Existing line numbers must be removed in order to be updated correctly\n const lineNumbers = element.querySelector(\n '.line-numbers-rows'\n ) as HTMLElement;\n if (lineNumbers) {\n element.removeChild(lineNumbers);\n }\n\n if (this.args.highlightLines) {\n this._prismCode = this._addHighlightSrOnlyText(\n this._prismCode.toString()\n );\n }\n\n // Force prism-line-numbers plugin initialization, required for Prism.highlight usage\n // See https://github.com/PrismJS/prism/issues/1234\n Prism.hooks.run('complete', {\n code,\n element,\n });\n\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateCodeHeights();\n // we need to delay re-evaluating the context for prism plugins for as much as possible, and `afterRender` is the 'latest' we can use in the component lifecycle\n this._updatePrismPlugins();\n });\n });\n }\n }\n\n private _updateCodeHeights(): void {\n if (!this._isExpanded) {\n // Get the actual height & the content height of the preCodeElement\n this._codeContentHeight = this._preCodeElement?.scrollHeight ?? 0;\n this._codeContainerHeight = this._preCodeElement?.clientHeight ?? 0;\n }\n }\n\n private _updatePrismPlugins(): void {\n if (this.hasLineNumbers && Prism?.plugins?.['lineNumbers']) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n Prism.plugins['lineNumbers'].resize(this._preCodeElement);\n }\n\n // Force prism-line-highlight plugin initialization\n // Context: https://github.com/hashicorp/design-system/pull/1749#discussion_r1374288785\n if (this.args.highlightLines) {\n // we piggy-back on the plugin's `resize` event listener to trigger a new call of the `highlightLines` function: https://github.com/PrismJS/prism/blob/master/plugins/line-highlight/prism-line-highlight.js#L337\n if (window) window.dispatchEvent(new Event('resize'));\n }\n }\n\n @action\n toggleExpanded(): void {\n this._isExpanded = !this._isExpanded;\n }\n\n // Logic for determining where line highlighting starts and ends taken from Prism.js plugin source code\n // Context: https://github.com/PrismJS/prism/blob/19f8de66b0f3a79aedbbf096081a4060fc0e80af/src/plugins/line-highlight/prism-line-highlight.ts#L82\n private _addHighlightSrOnlyText(code: string): SafeString {\n const NEW_LINE_EXP = /\\n(?!$)/g;\n const lines = code.split(NEW_LINE_EXP);\n const numLines = lines.length;\n const lineOffset = this.args.lineNumberStart\n ? this.args.lineNumberStart\n : 0;\n\n const highlightStart = '<span class=\"sr-only\">highlight start</span>';\n const highlightEnd = '<span class=\"sr-only\">highlight end</span>';\n\n const ranges = this.args.highlightLines\n ?.replace(/\\s+/g, '')\n .split(',')\n .filter(Boolean);\n\n if (ranges && ranges.length > 0) {\n const highlightedLines = [] as { start: number; end: number }[];\n\n ranges.forEach((currentRange) => {\n const range = currentRange.split('-');\n const start = +range[0]! - lineOffset;\n let end = +range[1]! || start - lineOffset;\n end = Math.min(numLines, end);\n highlightedLines.push({\n start: start,\n end: end,\n });\n });\n\n highlightedLines.forEach((line) => {\n lines[line.start - 1] = highlightStart + lines[line.start - 1];\n lines[line.end - 1] = lines[line.end - 1] + highlightEnd;\n });\n\n return htmlSafe(lines.join('\\n'));\n } else {\n return htmlSafe(code);\n }\n }\n\n get classNames(): string {\n // Currently there is only one theme so the class name is hard-coded.\n // In the future, additional themes such as a \"light\" theme could be added.\n const classes = ['hds-code-block', 'hds-code-block--theme-dark'];\n\n if (this.language) {\n classes.push(`language-${this.language}`);\n }\n\n if (this.isStandalone === true) {\n classes.push('hds-code-block--is-standalone');\n }\n\n if (this.hasLineWrapping === true) {\n classes.push('hds-code-block--has-line-wrapping');\n }\n\n // Note: Prism.js is using the specific class name \"line-numbers\" to determine implementation of line numbers in the UI\n if (this.hasLineNumbers) {\n classes.push('line-numbers');\n }\n\n if (this.showFooter) {\n classes.push('hds-code-block--has-overlay-footer');\n }\n\n if (this._isExpanded) {\n classes.push('hds-code-block--is-expanded');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["LANGUAGES","Object","values","HdsCodeBlockLanguageValues","HdsCodeBlock","Component","g","prototype","tracked","htmlSafe","i","void 0","_preCodeId","guidFor","_preCodeElement","_observer","_setUpCodeObserver","modifier","element","querySelector","ResizeObserver","entries","forEach","entry","contentBoxSize","_updateCodeHeights","_updatePrismPlugins","observe","disconnect","_setUpCodeBlockCode","_isExpanded","setPrismCode","ariaLabelledBy","args","ariaLabel","undefined","_titleId","ariaDescribedBy","_descriptionId","code","value","assert","Prism","plugins","normalize","maxHeight","showFooter","_codeContentHeight","_codeContainerHeight","language","hasLineNumbers","isStandalone","hasLineWrapping","copyButtonText","registerTitleElement","id","n","action","registerDescriptionElement","grammar","languages","next","_prismCode","highlight","util","encode","toString","lineNumbers","removeChild","highlightLines","_addHighlightSrOnlyText","hooks","run","schedule","scrollHeight","clientHeight","resize","window","dispatchEvent","Event","toggleExpanded","NEW_LINE_EXP","lines","split","numLines","length","lineOffset","lineNumberStart","highlightStart","highlightEnd","ranges","replace","filter","Boolean","highlightedLines","currentRange","range","start","end","Math","min","push","line","join","classNames","classes","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/code-editor/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 { modifier } from 'ember-modifier';\nimport { guidFor } from '@ember/object/internals';\n\nimport HdsCodeEditorDescription from './description.ts';\nimport HdsCodeEditorTitle from './title.ts';\n\nimport type { WithBoundArgs } from '@glint/template';\nimport type Owner from '@ember/owner';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsCodeEditorSignature as HdsCodeEditorModifierSignature } from '../../../modifiers/hds-code-editor.ts';\nimport type { HdsCodeEditorDescriptionSignature } from './description';\nimport type { HdsCodeEditorTitleSignature } from './title';\nimport type { HdsCodeEditorGenericSignature } from './generic';\nimport type { EditorView } from '@codemirror/view';\nimport type { HdsCopyButtonSignature } from '../copy/button/index.ts';\n\nexport interface HdsCodeEditorSignature {\n Args: {\n hasCopyButton?: boolean;\n hasFullScreenButton?: boolean;\n isStandalone?: boolean;\n copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n } & HdsCodeEditorModifierSignature['Args']['Named'];\n Blocks: {\n default: [\n {\n Title?: WithBoundArgs<\n typeof HdsCodeEditorTitle,\n 'onInsert' | 'editorId'\n >;\n Description?: WithBoundArgs<\n typeof HdsCodeEditorDescription,\n 'onInsert' | 'editorId'\n >;\n Generic?: ComponentLike<HdsCodeEditorGenericSignature>;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsCodeEditor extends Component<HdsCodeEditorSignature> {\n @tracked private _isFullScreen = false;\n @tracked private _isSetupComplete = false;\n @tracked private _value;\n @tracked private _titleId: string | undefined;\n @tracked private _descriptionId: string | undefined;\n\n private _id = guidFor(this);\n\n private _handleEscape = modifier(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || !this._isFullScreen) {\n return;\n }\n\n this.toggleFullScreen();\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n });\n\n constructor(owner: Owner, args: HdsCodeEditorSignature['Args']) {\n super(owner, args);\n\n if (args.value) {\n this._value = args.value;\n }\n }\n\n get ariaLabelledBy(): string | undefined {\n if (this.args.ariaLabel !== undefined) {\n return;\n }\n\n return this.args.ariaLabelledBy ?? this._titleId;\n }\n\n get ariaDescribedBy(): string | undefined {\n return this.args.ariaDescribedBy ?? this._descriptionId;\n }\n\n get hasActions(): boolean {\n return (this.args.hasCopyButton || this.args.hasFullScreenButton) ?? false;\n }\n\n get isStandalone(): boolean {\n return this.args.isStandalone ?? true;\n }\n\n get classNames(): string {\n // Currently there is only one theme so the class name is hard-coded.\n // In the future, additional themes such as a \"light\" theme could be added.\n const classes = ['hds-code-editor', 'hds-code-editor--theme-dark'];\n\n if (this._isFullScreen) {\n classes.push('hds-code-editor--is-full-screen');\n }\n\n if (this.isStandalone) {\n classes.push('hds-code-editor--is-standalone');\n }\n\n return classes.join(' ');\n }\n\n get copyButtonText(): HdsCopyButtonSignature['Args']['text'] {\n return this.args.copyButtonText ? this.args.copyButtonText : 'Copy';\n }\n\n @action\n registerTitleElement(element: HdsCodeEditorTitleSignature['Element']): void {\n this._titleId = element.id;\n }\n\n @action\n registerDescriptionElement(\n element: HdsCodeEditorDescriptionSignature['Element']\n ): void {\n this._descriptionId = element.id;\n }\n\n @action\n toggleFullScreen(): void {\n this._isFullScreen = !this._isFullScreen;\n }\n\n @action\n onInput(newValue: string, editorView: EditorView): void {\n this._value = newValue;\n this.args.onInput?.(newValue, editorView);\n }\n\n @action\n onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this._isFullScreen) {\n this.toggleFullScreen();\n }\n }\n\n @action\n onSetup(editorView: EditorView): void {\n this._isSetupComplete = true;\n this.args.onSetup?.(editorView);\n }\n}\n"],"names":["HdsCodeEditor","Component","g","prototype","tracked","i","_id","guidFor","_handleEscape","modifier","handleKeyDown","event","key","_isFullScreen","toggleFullScreen","document","addEventListener","removeEventListener","constructor","owner","args","value","_value","ariaLabelledBy","ariaLabel","undefined","_titleId","ariaDescribedBy","_descriptionId","hasActions","hasCopyButton","hasFullScreenButton","isStandalone","classNames","classes","push","join","copyButtonText","registerTitleElement","element","id","n","action","registerDescriptionElement","onInput","newValue","editorView","onKeyDown","onSetup","_isSetupComplete","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AA8Ce,MAAMA,aAAa,SAASC,SAAS,CAAyB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,eAAA,EAAA,CAC1EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAyB,KAAK;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,cAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,eAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/code-editor/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 { modifier } from 'ember-modifier';\nimport { guidFor } from '@ember/object/internals';\n\nimport HdsCodeEditorDescription from './description.ts';\nimport HdsCodeEditorTitle from './title.ts';\n\nimport type { WithBoundArgs } from '@glint/template';\nimport type Owner from '@ember/owner';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsCodeEditorSignature as HdsCodeEditorModifierSignature } from '../../../modifiers/hds-code-editor.ts';\nimport type { HdsCodeEditorDescriptionSignature } from './description';\nimport type { HdsCodeEditorTitleSignature } from './title';\nimport type { HdsCodeEditorGenericSignature } from './generic';\nimport type { EditorView } from '@codemirror/view';\nimport type { HdsCopyButtonSignature } from '../copy/button/index.ts';\n\nexport interface HdsCodeEditorSignature {\n Args: {\n hasCopyButton?: boolean;\n hasFullScreenButton?: boolean;\n isStandalone?: boolean;\n copyButtonText?: HdsCopyButtonSignature['Args']['text'];\n } & HdsCodeEditorModifierSignature['Args']['Named'];\n Blocks: {\n default: [\n {\n Title?: WithBoundArgs<\n typeof HdsCodeEditorTitle,\n 'onInsert' | 'editorId'\n >;\n Description?: WithBoundArgs<\n typeof HdsCodeEditorDescription,\n 'onInsert' | 'editorId'\n >;\n Generic?: ComponentLike<HdsCodeEditorGenericSignature>;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsCodeEditor extends Component<HdsCodeEditorSignature> {\n @tracked private _isFullScreen = false;\n @tracked private _isSetupComplete = false;\n @tracked private _value;\n @tracked private _titleId: string | undefined;\n @tracked private _descriptionId: string | undefined;\n\n private _id = guidFor(this);\n\n private _handleEscape = modifier(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || !this._isFullScreen) {\n return;\n }\n\n this.toggleFullScreen();\n };\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n });\n\n constructor(owner: Owner, args: HdsCodeEditorSignature['Args']) {\n super(owner, args);\n\n if (args.value) {\n this._value = args.value;\n }\n }\n\n get ariaLabelledBy(): string | undefined {\n if (this.args.ariaLabel !== undefined) {\n return;\n }\n\n return this.args.ariaLabelledBy ?? this._titleId;\n }\n\n get ariaDescribedBy(): string | undefined {\n return this.args.ariaDescribedBy ?? this._descriptionId;\n }\n\n get hasActions(): boolean {\n return (this.args.hasCopyButton || this.args.hasFullScreenButton) ?? false;\n }\n\n get isStandalone(): boolean {\n return this.args.isStandalone ?? true;\n }\n\n get classNames(): string {\n // Currently there is only one theme so the class name is hard-coded.\n // In the future, additional themes such as a \"light\" theme could be added.\n const classes = ['hds-code-editor', 'hds-code-editor--theme-dark'];\n\n if (this._isFullScreen) {\n classes.push('hds-code-editor--is-full-screen');\n }\n\n if (this.isStandalone) {\n classes.push('hds-code-editor--is-standalone');\n }\n\n return classes.join(' ');\n }\n\n get copyButtonText(): HdsCopyButtonSignature['Args']['text'] {\n return this.args.copyButtonText ? this.args.copyButtonText : 'Copy';\n }\n\n @action\n registerTitleElement(element: HdsCodeEditorTitleSignature['Element']): void {\n this._titleId = element.id;\n }\n\n @action\n registerDescriptionElement(\n element: HdsCodeEditorDescriptionSignature['Element']\n ): void {\n this._descriptionId = element.id;\n }\n\n @action\n toggleFullScreen(): void {\n this._isFullScreen = !this._isFullScreen;\n }\n\n @action\n onInput(newValue: string, editorView: EditorView): void {\n this._value = newValue;\n this.args.onInput?.(newValue, editorView);\n }\n\n @action\n onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this._isFullScreen) {\n this.toggleFullScreen();\n }\n }\n\n @action\n onSetup(editorView: EditorView): void {\n this._isSetupComplete = true;\n this.args.onSetup?.(editorView);\n }\n}\n"],"names":["HdsCodeEditor","Component","g","prototype","tracked","i","void 0","_id","guidFor","_handleEscape","modifier","handleKeyDown","event","key","_isFullScreen","toggleFullScreen","document","addEventListener","removeEventListener","constructor","owner","args","value","_value","ariaLabelledBy","ariaLabel","undefined","_titleId","ariaDescribedBy","_descriptionId","hasActions","hasCopyButton","hasFullScreenButton","isStandalone","classNames","classes","push","join","copyButtonText","registerTitleElement","element","id","n","action","registerDescriptionElement","onInput","newValue","editorView","onKeyDown","onSetup","_isSetupComplete","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/copy/button/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\n\nimport { HdsCopyButtonSizeValues } from './types.ts';\n\nimport type { HdsCopyButtonSizes } from './types.ts';\nimport type { HdsButtonSignature } from '../../button/';\nimport type { HdsClipboardModifierSignature } from '../../../../modifiers/hds-clipboard.ts';\nimport type { HdsIconSignature } from '../../icon';\nimport type HdsIntlService from '../../../../services/hds-intl';\n\nexport const DEFAULT_SIZE = HdsCopyButtonSizeValues.Medium;\nexport const SIZES: HdsCopyButtonSizes[] = Object.values(\n HdsCopyButtonSizeValues\n);\nexport const DEFAULT_ICON = 'clipboard-copy';\nexport const SUCCESS_ICON = 'clipboard-checked';\nexport const ERROR_ICON = 'clipboard-x';\nexport const DEFAULT_STATUS = 'idle';\n\nexport interface HdsCopyButtonSignature {\n Args: HdsButtonSignature['Args'] & {\n size?: HdsCopyButtonSizes;\n textToCopy?: HdsClipboardModifierSignature['Args']['Named']['text'];\n targetToCopy?: HdsClipboardModifierSignature['Args']['Named']['target'];\n onSuccess?: HdsClipboardModifierSignature['Args']['Named']['onSuccess'];\n onError?: HdsClipboardModifierSignature['Args']['Named']['onError'];\n ariaMessageText?: string;\n };\n Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsCopyButton extends Component<HdsCopyButtonSignature> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked private _status = DEFAULT_STATUS;\n @tracked private _timer: ReturnType<typeof setTimeout> | undefined;\n\n /**\n * @param icon\n * @type {string}\n * @description The icon to be displayed for each status; automatically calculated based on the tracked property `status`.\n */\n get icon(): HdsIconSignature['Args']['name'] {\n let icon: HdsIconSignature['Args']['name'] = DEFAULT_ICON;\n if (this._status === 'success') {\n icon = SUCCESS_ICON;\n } else if (this._status === 'error') {\n icon = ERROR_ICON;\n }\n return icon;\n }\n\n /**\n * @param size\n * @type {string}\n * @default medium\n * @description The size of the copy/button; acceptable values are `small` and `medium`\n */\n get size(): HdsCopyButtonSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Copy::Button\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method CopyButton#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-copy-button'];\n\n // add a class based on the @size argument\n classes.push(`hds-button--size-${this.size}`);\n\n classes.push(`hds-copy-button--status-${this._status}`);\n\n return classes.join(' ');\n }\n\n get ariaMessageText(): string {\n if (this._status === 'success') {\n return (\n this.args.ariaMessageText ??\n this.hdsIntl.t('hds.components.copy-button.aria-message-text', {\n default: 'Copied to clipboard',\n })\n );\n } else {\n return '';\n }\n }\n\n @action\n onSuccess(\n args: HdsClipboardModifierSignature['Args']['Named']['onSuccess']\n ): void {\n this._status = 'success';\n this.resetStatusDelayed();\n\n const { onSuccess } = this.args;\n\n if (typeof onSuccess === 'function') {\n onSuccess(args);\n }\n }\n\n @action\n onError(\n args: HdsClipboardModifierSignature['Args']['Named']['onError']\n ): void {\n this._status = 'error';\n this.resetStatusDelayed();\n\n const { onError } = this.args;\n\n if (typeof onError === 'function') {\n onError(args);\n }\n }\n\n resetStatusDelayed(): void {\n clearTimeout(this._timer);\n // make it fade back to the default state\n this._timer = setTimeout((): void => {\n this._status = DEFAULT_STATUS;\n }, 1500);\n }\n}\n"],"names":["DEFAULT_SIZE","HdsCopyButtonSizeValues","Medium","SIZES","Object","values","DEFAULT_ICON","SUCCESS_ICON","ERROR_ICON","DEFAULT_STATUS","HdsCopyButton","Component","g","prototype","service","i","tracked","icon","_status","size","args","assert","join","includes","classNames","classes","push","ariaMessageText","hdsIntl","t","default","onSuccess","resetStatusDelayed","n","action","onError","clearTimeout","_timer","setTimeout","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAgBO,MAAMA,YAAY,GAAGC,uBAAuB,CAACC;AAC7C,MAAMC,KAA2B,GAAGC,MAAM,CAACC,MAAM,CACtDJ,uBACF;AACO,MAAMK,YAAY,GAAG;AACrB,MAAMC,YAAY,GAAG;AACrB,MAAMC,UAAU,GAAG;AACnB,MAAMC,cAAc,GAAG;AAcf,MAAMC,aAAa,SAASC,SAAS,CAAyB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAC1EC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/copy/button/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\n\nimport { HdsCopyButtonSizeValues } from './types.ts';\n\nimport type { HdsCopyButtonSizes } from './types.ts';\nimport type { HdsButtonSignature } from '../../button/';\nimport type { HdsClipboardModifierSignature } from '../../../../modifiers/hds-clipboard.ts';\nimport type { HdsIconSignature } from '../../icon';\nimport type HdsIntlService from '../../../../services/hds-intl';\n\nexport const DEFAULT_SIZE = HdsCopyButtonSizeValues.Medium;\nexport const SIZES: HdsCopyButtonSizes[] = Object.values(\n HdsCopyButtonSizeValues\n);\nexport const DEFAULT_ICON = 'clipboard-copy';\nexport const SUCCESS_ICON = 'clipboard-checked';\nexport const ERROR_ICON = 'clipboard-x';\nexport const DEFAULT_STATUS = 'idle';\n\nexport interface HdsCopyButtonSignature {\n Args: HdsButtonSignature['Args'] & {\n size?: HdsCopyButtonSizes;\n textToCopy?: HdsClipboardModifierSignature['Args']['Named']['text'];\n targetToCopy?: HdsClipboardModifierSignature['Args']['Named']['target'];\n onSuccess?: HdsClipboardModifierSignature['Args']['Named']['onSuccess'];\n onError?: HdsClipboardModifierSignature['Args']['Named']['onError'];\n ariaMessageText?: string;\n };\n Element: HdsButtonSignature['Element'];\n}\n\nexport default class HdsCopyButton extends Component<HdsCopyButtonSignature> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked private _status = DEFAULT_STATUS;\n @tracked private _timer: ReturnType<typeof setTimeout> | undefined;\n\n /**\n * @param icon\n * @type {string}\n * @description The icon to be displayed for each status; automatically calculated based on the tracked property `status`.\n */\n get icon(): HdsIconSignature['Args']['name'] {\n let icon: HdsIconSignature['Args']['name'] = DEFAULT_ICON;\n if (this._status === 'success') {\n icon = SUCCESS_ICON;\n } else if (this._status === 'error') {\n icon = ERROR_ICON;\n }\n return icon;\n }\n\n /**\n * @param size\n * @type {string}\n * @default medium\n * @description The size of the copy/button; acceptable values are `small` and `medium`\n */\n get size(): HdsCopyButtonSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Copy::Button\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method CopyButton#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-copy-button'];\n\n // add a class based on the @size argument\n classes.push(`hds-button--size-${this.size}`);\n\n classes.push(`hds-copy-button--status-${this._status}`);\n\n return classes.join(' ');\n }\n\n get ariaMessageText(): string {\n if (this._status === 'success') {\n return (\n this.args.ariaMessageText ??\n this.hdsIntl.t('hds.components.copy-button.aria-message-text', {\n default: 'Copied to clipboard',\n })\n );\n } else {\n return '';\n }\n }\n\n @action\n onSuccess(\n args: HdsClipboardModifierSignature['Args']['Named']['onSuccess']\n ): void {\n this._status = 'success';\n this.resetStatusDelayed();\n\n const { onSuccess } = this.args;\n\n if (typeof onSuccess === 'function') {\n onSuccess(args);\n }\n }\n\n @action\n onError(\n args: HdsClipboardModifierSignature['Args']['Named']['onError']\n ): void {\n this._status = 'error';\n this.resetStatusDelayed();\n\n const { onError } = this.args;\n\n if (typeof onError === 'function') {\n onError(args);\n }\n }\n\n resetStatusDelayed(): void {\n clearTimeout(this._timer);\n // make it fade back to the default state\n this._timer = setTimeout((): void => {\n this._status = DEFAULT_STATUS;\n }, 1500);\n }\n}\n"],"names":["DEFAULT_SIZE","HdsCopyButtonSizeValues","Medium","SIZES","Object","values","DEFAULT_ICON","SUCCESS_ICON","ERROR_ICON","DEFAULT_STATUS","HdsCopyButton","Component","g","prototype","service","i","void 0","tracked","icon","_status","size","args","assert","join","includes","classNames","classes","push","ariaMessageText","hdsIntl","t","default","onSuccess","resetStatusDelayed","n","action","onError","clearTimeout","_timer","setTimeout","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/copy/snippet/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { HdsCopySnippetColorValues } from './types.ts';\nimport type { HdsCopySnippetColors } from './types.ts';\nimport type { HdsClipboardModifierSignature } from '../../../../modifiers/hds-clipboard.ts';\nimport type { HdsIconSignature } from '../../icon';\n\nexport const DEFAULT_COLOR = HdsCopySnippetColorValues.Primary;\nexport const COLORS: HdsCopySnippetColors[] = Object.values(\n HdsCopySnippetColorValues\n);\n\nexport const DEFAULT_ICON = 'clipboard-copy';\nexport const SUCCESS_ICON = 'clipboard-checked';\nexport const ERROR_ICON = 'clipboard-x';\nexport const DEFAULT_STATUS = 'idle';\n\nexport interface HdsCopySnippetSignature {\n Args: {\n color?: HdsCopySnippetColors;\n isFullWidth?: boolean;\n textToCopy: HdsClipboardModifierSignature['Args']['Named']['text'];\n isTruncated?: boolean;\n onSuccess?: HdsClipboardModifierSignature['Args']['Named']['onSuccess'];\n onError?: HdsClipboardModifierSignature['Args']['Named']['onError'];\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsCopySnippet extends Component<HdsCopySnippetSignature> {\n @tracked private _status = DEFAULT_STATUS;\n @tracked private _timer: ReturnType<typeof setTimeout> | undefined;\n\n /**\n * @method textToShow\n * @return {string}\n */\n get textToShow(): string {\n const { textToCopy = '' } = this.args;\n\n if (typeof textToCopy === 'string') {\n return textToCopy;\n } else {\n return textToCopy.toString();\n }\n }\n\n /**\n * @param icon\n * @type {string}\n * @default clipboard-copy\n * @description Determines the icon to be used, based on the success state. Note that this is auto-tracked because it depends on a tracked property (status).\n */\n get icon(): HdsIconSignature['Args']['name'] {\n let icon: HdsIconSignature['Args']['name'] = DEFAULT_ICON;\n if (this._status === 'success') {\n icon = SUCCESS_ICON;\n } else if (this._status === 'error') {\n icon = ERROR_ICON;\n }\n return icon;\n }\n\n /**\n * @param color\n * @type {string}\n * @default primary\n * @description Determines the color of button to be used; acceptable values are `primary` and `secondary`\n */\n get color(): HdsCopySnippetColors {\n const { color = DEFAULT_COLOR } = this.args;\n\n assert(\n `@color for \"Hds::Copy::Snippet\" must be one of the following: ${COLORS.join(\n ', '\n )}; received: ${color}`,\n COLORS.includes(color)\n );\n\n return color;\n }\n\n /**\n * @param isFullWidth\n * @type {boolean}\n * @default false\n * @description Indicates that the component should take up the full width of the parent container.\n */\n get isFullWidth(): boolean {\n return this.args.isFullWidth ?? false;\n }\n\n /**\n * @param isTruncated\n * @type {boolean}\n * @default false\n * @description Indicates that the component should be truncated instead of wrapping text and using multiple lines.\n */\n get isTruncated(): boolean {\n return this.args.isTruncated ?? false;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method CopySnippet#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-copy-snippet'];\n\n // add a class based on the @color argument\n classes.push(`hds-copy-snippet--color-${this.color}`);\n\n // add a class based on the tracked status (idle/success/error)\n classes.push(`hds-copy-snippet--status-${this._status}`);\n\n // add a class based on the @isTruncated argument\n if (this.isTruncated) {\n classes.push('hds-copy-snippet--is-truncated');\n }\n\n // add a class based on the @isFullWidth argument\n if (this.isFullWidth) {\n classes.push('hds-copy-snippet--width-full');\n }\n\n return classes.join(' ');\n }\n\n @action\n onSuccess(\n args: HdsClipboardModifierSignature['Args']['Named']['onSuccess']\n ): void {\n this._status = 'success';\n this.resetStatusDelayed();\n\n const { onSuccess } = this.args;\n\n if (typeof onSuccess === 'function') {\n onSuccess(args);\n }\n }\n\n @action\n onError(\n args: HdsClipboardModifierSignature['Args']['Named']['onError']\n ): void {\n this._status = 'error';\n this.resetStatusDelayed();\n\n const { onError } = this.args;\n\n if (typeof onError === 'function') {\n onError(args);\n }\n }\n\n resetStatusDelayed(): void {\n clearTimeout(this._timer);\n // make it fade back to the default state\n this._timer = setTimeout((): void => {\n this._status = DEFAULT_STATUS;\n }, 1500);\n }\n}\n"],"names":["DEFAULT_COLOR","HdsCopySnippetColorValues","Primary","COLORS","Object","values","DEFAULT_ICON","SUCCESS_ICON","ERROR_ICON","DEFAULT_STATUS","HdsCopySnippet","Component","g","prototype","tracked","i","textToShow","textToCopy","args","toString","icon","_status","color","assert","join","includes","isFullWidth","isTruncated","classNames","classes","push","onSuccess","resetStatusDelayed","n","action","onError","clearTimeout","_timer","setTimeout","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAWO,MAAMA,aAAa,GAAGC,yBAAyB,CAACC;AAChD,MAAMC,MAA8B,GAAGC,MAAM,CAACC,MAAM,CACzDJ,yBACF;AAEO,MAAMK,YAAY,GAAG;AACrB,MAAMC,YAAY,GAAG;AACrB,MAAMC,UAAU,GAAG;AACnB,MAAMC,cAAc,GAAG;AAcf,MAAMC,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAmBL,cAAc;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAM,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/copy/snippet/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { HdsCopySnippetColorValues } from './types.ts';\nimport type { HdsCopySnippetColors } from './types.ts';\nimport type { HdsClipboardModifierSignature } from '../../../../modifiers/hds-clipboard.ts';\nimport type { HdsIconSignature } from '../../icon';\n\nexport const DEFAULT_COLOR = HdsCopySnippetColorValues.Primary;\nexport const COLORS: HdsCopySnippetColors[] = Object.values(\n HdsCopySnippetColorValues\n);\n\nexport const DEFAULT_ICON = 'clipboard-copy';\nexport const SUCCESS_ICON = 'clipboard-checked';\nexport const ERROR_ICON = 'clipboard-x';\nexport const DEFAULT_STATUS = 'idle';\n\nexport interface HdsCopySnippetSignature {\n Args: {\n color?: HdsCopySnippetColors;\n isFullWidth?: boolean;\n textToCopy: HdsClipboardModifierSignature['Args']['Named']['text'];\n isTruncated?: boolean;\n onSuccess?: HdsClipboardModifierSignature['Args']['Named']['onSuccess'];\n onError?: HdsClipboardModifierSignature['Args']['Named']['onError'];\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsCopySnippet extends Component<HdsCopySnippetSignature> {\n @tracked private _status = DEFAULT_STATUS;\n @tracked private _timer: ReturnType<typeof setTimeout> | undefined;\n\n /**\n * @method textToShow\n * @return {string}\n */\n get textToShow(): string {\n const { textToCopy = '' } = this.args;\n\n if (typeof textToCopy === 'string') {\n return textToCopy;\n } else {\n return textToCopy.toString();\n }\n }\n\n /**\n * @param icon\n * @type {string}\n * @default clipboard-copy\n * @description Determines the icon to be used, based on the success state. Note that this is auto-tracked because it depends on a tracked property (status).\n */\n get icon(): HdsIconSignature['Args']['name'] {\n let icon: HdsIconSignature['Args']['name'] = DEFAULT_ICON;\n if (this._status === 'success') {\n icon = SUCCESS_ICON;\n } else if (this._status === 'error') {\n icon = ERROR_ICON;\n }\n return icon;\n }\n\n /**\n * @param color\n * @type {string}\n * @default primary\n * @description Determines the color of button to be used; acceptable values are `primary` and `secondary`\n */\n get color(): HdsCopySnippetColors {\n const { color = DEFAULT_COLOR } = this.args;\n\n assert(\n `@color for \"Hds::Copy::Snippet\" must be one of the following: ${COLORS.join(\n ', '\n )}; received: ${color}`,\n COLORS.includes(color)\n );\n\n return color;\n }\n\n /**\n * @param isFullWidth\n * @type {boolean}\n * @default false\n * @description Indicates that the component should take up the full width of the parent container.\n */\n get isFullWidth(): boolean {\n return this.args.isFullWidth ?? false;\n }\n\n /**\n * @param isTruncated\n * @type {boolean}\n * @default false\n * @description Indicates that the component should be truncated instead of wrapping text and using multiple lines.\n */\n get isTruncated(): boolean {\n return this.args.isTruncated ?? false;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method CopySnippet#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-copy-snippet'];\n\n // add a class based on the @color argument\n classes.push(`hds-copy-snippet--color-${this.color}`);\n\n // add a class based on the tracked status (idle/success/error)\n classes.push(`hds-copy-snippet--status-${this._status}`);\n\n // add a class based on the @isTruncated argument\n if (this.isTruncated) {\n classes.push('hds-copy-snippet--is-truncated');\n }\n\n // add a class based on the @isFullWidth argument\n if (this.isFullWidth) {\n classes.push('hds-copy-snippet--width-full');\n }\n\n return classes.join(' ');\n }\n\n @action\n onSuccess(\n args: HdsClipboardModifierSignature['Args']['Named']['onSuccess']\n ): void {\n this._status = 'success';\n this.resetStatusDelayed();\n\n const { onSuccess } = this.args;\n\n if (typeof onSuccess === 'function') {\n onSuccess(args);\n }\n }\n\n @action\n onError(\n args: HdsClipboardModifierSignature['Args']['Named']['onError']\n ): void {\n this._status = 'error';\n this.resetStatusDelayed();\n\n const { onError } = this.args;\n\n if (typeof onError === 'function') {\n onError(args);\n }\n }\n\n resetStatusDelayed(): void {\n clearTimeout(this._timer);\n // make it fade back to the default state\n this._timer = setTimeout((): void => {\n this._status = DEFAULT_STATUS;\n }, 1500);\n }\n}\n"],"names":["DEFAULT_COLOR","HdsCopySnippetColorValues","Primary","COLORS","Object","values","DEFAULT_ICON","SUCCESS_ICON","ERROR_ICON","DEFAULT_STATUS","HdsCopySnippet","Component","g","prototype","tracked","i","void 0","textToShow","textToCopy","args","toString","icon","_status","color","assert","join","includes","isFullWidth","isTruncated","classNames","classes","push","onSuccess","resetStatusDelayed","n","action","onError","clearTimeout","_timer","setTimeout","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAWO,MAAMA,aAAa,GAAGC,yBAAyB,CAACC;AAChD,MAAMC,MAA8B,GAAGC,MAAM,CAACC,MAAM,CACzDJ,yBACF;AAEO,MAAMK,YAAY,GAAG;AACrB,MAAMC,YAAY,GAAG;AACrB,MAAMC,UAAU,GAAG;AACnB,MAAMC,cAAc,GAAG;AAcf,MAAMC,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAmBL,cAAc;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAM,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,QAAA,EAAA,CACxCC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,OAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,QAAA,CAAA,EAAAC,MAAA;AAER;AACF;AACA;AACA;EACE,IAAIC,UAAUA,GAAW;IACvB,MAAM;AAAEC,MAAAA,UAAU,GAAG;KAAI,GAAG,IAAI,CAACC,IAAI;AAErC,IAAA,IAAI,OAAOD,UAAU,KAAK,QAAQ,EAAE;AAClC,MAAA,OAAOA,UAAU;AACnB,IAAA,CAAC,MAAM;AACL,MAAA,OAAOA,UAAU,CAACE,QAAQ,EAAE;AAC9B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE,IAAIC,IAAIA,GAAqC;IAC3C,IAAIA,IAAsC,GAAGf,YAAY;AACzD,IAAA,IAAI,IAAI,CAACgB,OAAO,KAAK,SAAS,EAAE;AAC9BD,MAAAA,IAAI,GAAGd,YAAY;AACrB,IAAA,CAAC,MAAM,IAAI,IAAI,CAACe,OAAO,KAAK,OAAO,EAAE;AACnCD,MAAAA,IAAI,GAAGb,UAAU;AACnB,IAAA;AACA,IAAA,OAAOa,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE,IAAIE,KAAKA,GAAyB;IAChC,MAAM;AAAEA,MAAAA,KAAK,GAAGvB;KAAe,GAAG,IAAI,CAACmB,IAAI;AAE3CK,IAAAA,MAAM,CACJ,CAAA,8DAAA,EAAiErB,MAAM,CAACsB,IAAI,CAC1E,IACF,CAAC,CAAA,YAAA,EAAeF,KAAK,CAAA,CAAE,EACvBpB,MAAM,CAACuB,QAAQ,CAACH,KAAK,CACvB,CAAC;AAED,IAAA,OAAOA,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE,IAAII,WAAWA,GAAY;AACzB,IAAA,OAAO,IAAI,CAACR,IAAI,CAACQ,WAAW,IAAI,KAAK;AACvC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE,IAAIC,WAAWA,GAAY;AACzB,IAAA,OAAO,IAAI,CAACT,IAAI,CAACS,WAAW,IAAI,KAAK;AACvC,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACE,IAAIC,UAAUA,GAAW;AACvB,IAAA,MAAMC,OAAO,GAAG,CAAC,kBAAkB,CAAC;;AAEpC;IACAA,OAAO,CAACC,IAAI,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAACR,KAAK,EAAE,CAAC;;AAErD;IACAO,OAAO,CAACC,IAAI,CAAC,CAAA,yBAAA,EAA4B,IAAI,CAACT,OAAO,EAAE,CAAC;;AAExD;IACA,IAAI,IAAI,CAACM,WAAW,EAAE;AACpBE,MAAAA,OAAO,CAACC,IAAI,CAAC,gCAAgC,CAAC;AAChD,IAAA;;AAEA;IACA,IAAI,IAAI,CAACJ,WAAW,EAAE;AACpBG,MAAAA,OAAO,CAACC,IAAI,CAAC,8BAA8B,CAAC;AAC9C,IAAA;AAEA,IAAA,OAAOD,OAAO,CAACL,IAAI,CAAC,GAAG,CAAC;AAC1B,EAAA;EAGAO,SAASA,CACPb,IAAiE,EAC3D;IACN,IAAI,CAACG,OAAO,GAAG,SAAS;IACxB,IAAI,CAACW,kBAAkB,EAAE;IAEzB,MAAM;AAAED,MAAAA;KAAW,GAAG,IAAI,CAACb,IAAI;AAE/B,IAAA,IAAI,OAAOa,SAAS,KAAK,UAAU,EAAE;MACnCA,SAAS,CAACb,IAAI,CAAC;AACjB,IAAA;AACF,EAAA;AAAC,EAAA;IAAAe,CAAA,CAAA,IAAA,CAAArB,SAAA,EAAA,WAAA,EAAA,CAZAsB,MAAM,CAAA,CAAA;AAAA;EAePC,OAAOA,CACLjB,IAA+D,EACzD;IACN,IAAI,CAACG,OAAO,GAAG,OAAO;IACtB,IAAI,CAACW,kBAAkB,EAAE;IAEzB,MAAM;AAAEG,MAAAA;KAAS,GAAG,IAAI,CAACjB,IAAI;AAE7B,IAAA,IAAI,OAAOiB,OAAO,KAAK,UAAU,EAAE;MACjCA,OAAO,CAACjB,IAAI,CAAC;AACf,IAAA;AACF,EAAA;AAAC,EAAA;IAAAe,CAAA,CAAA,IAAA,CAAArB,SAAA,EAAA,SAAA,EAAA,CAZAsB,MAAM,CAAA,CAAA;AAAA;AAcPF,EAAAA,kBAAkBA,GAAS;AACzBI,IAAAA,YAAY,CAAC,IAAI,CAACC,MAAM,CAAC;AACzB;AACA,IAAA,IAAI,CAACA,MAAM,GAAGC,UAAU,CAAC,MAAY;MACnC,IAAI,CAACjB,OAAO,GAAGb,cAAc;IAC/B,CAAC,EAAE,IAAI,CAAC;AACV,EAAA;AACF;AAAC+B,oBAAA,CAAAC,QAAA,EAvIoB/B,cAAc,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/disclosure-primitive/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\n\nexport interface HdsDisclosurePrimitiveSignature {\n Args: {\n isOpen?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClose?: (...args: any[]) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle?: (...args: any[]) => void;\n };\n Blocks: {\n toggle: [\n {\n contentId: string;\n isOpen: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle: (...args: any[]) => void;\n },\n ];\n content: [\n {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close: (...args: any[]) => void;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsDisclosurePrimitive extends Component<HdsDisclosurePrimitiveSignature> {\n @tracked private _isOpen = false;\n @tracked private _isControlled = this.args.isOpen !== undefined;\n private _contentId = 'content-' + guidFor(this);\n\n get isOpen(): boolean {\n if (this._isControlled) {\n // if the state is controlled from outside, the argument overrides the internal state\n return this.args.isOpen ?? this._isOpen;\n } else {\n // if the state changes internally, the internal state overrides the argument\n return this._isOpen;\n }\n }\n\n set isOpen(value) {\n this._isOpen = value || false;\n }\n\n @action\n onClickToggle(): void {\n this.isOpen = !this.isOpen;\n this._isControlled = false;\n // we call the \"onClickToggle\" callback if it exists and it's a function\n if (\n this.args.onClickToggle &&\n typeof this.args.onClickToggle === 'function'\n ) {\n this.args.onClickToggle(this.isOpen);\n }\n }\n\n @action\n onStateChange(): void {\n if (this.args.isOpen !== undefined) {\n this.isOpen = this.args.isOpen;\n }\n this._isControlled = true;\n }\n\n @action\n close(): void {\n // we schedule this afterRender to avoid an error in tests caused by updating `isOpen` multiple times in the same computation\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.isOpen = false;\n // we call the \"onClose\" callback if it exists (and is a function)\n if (this.args.onClose && typeof this.args.onClose === 'function') {\n this.args.onClose();\n }\n });\n }\n}\n"],"names":["HdsDisclosurePrimitive","Component","g","prototype","tracked","i","args","isOpen","undefined","_contentId","guidFor","_isControlled","_isOpen","value","onClickToggle","n","action","onStateChange","close","schedule","onClose","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAmCe,MAAMA,sBAAsB,SAASC,SAAS,CAAkC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAC5FC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAmB,KAAK;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/disclosure-primitive/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\n\nexport interface HdsDisclosurePrimitiveSignature {\n Args: {\n isOpen?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClose?: (...args: any[]) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle?: (...args: any[]) => void;\n };\n Blocks: {\n toggle: [\n {\n contentId: string;\n isOpen: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle: (...args: any[]) => void;\n },\n ];\n content: [\n {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close: (...args: any[]) => void;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsDisclosurePrimitive extends Component<HdsDisclosurePrimitiveSignature> {\n @tracked private _isOpen = false;\n @tracked private _isControlled = this.args.isOpen !== undefined;\n private _contentId = 'content-' + guidFor(this);\n\n get isOpen(): boolean {\n if (this._isControlled) {\n // if the state is controlled from outside, the argument overrides the internal state\n return this.args.isOpen ?? this._isOpen;\n } else {\n // if the state changes internally, the internal state overrides the argument\n return this._isOpen;\n }\n }\n\n set isOpen(value) {\n this._isOpen = value || false;\n }\n\n @action\n onClickToggle(): void {\n this.isOpen = !this.isOpen;\n this._isControlled = false;\n // we call the \"onClickToggle\" callback if it exists and it's a function\n if (\n this.args.onClickToggle &&\n typeof this.args.onClickToggle === 'function'\n ) {\n this.args.onClickToggle(this.isOpen);\n }\n }\n\n @action\n onStateChange(): void {\n if (this.args.isOpen !== undefined) {\n this.isOpen = this.args.isOpen;\n }\n this._isControlled = true;\n }\n\n @action\n close(): void {\n // we schedule this afterRender to avoid an error in tests caused by updating `isOpen` multiple times in the same computation\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.isOpen = false;\n // we call the \"onClose\" callback if it exists (and is a function)\n if (this.args.onClose && typeof this.args.onClose === 'function') {\n this.args.onClose();\n }\n });\n }\n}\n"],"names":["HdsDisclosurePrimitive","Component","g","prototype","tracked","i","void 0","args","isOpen","undefined","_contentId","guidFor","_isControlled","_isOpen","value","onClickToggle","n","action","onStateChange","close","schedule","onClose","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAmCe,MAAMA,sBAAsB,SAASC,SAAS,CAAkC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAC5FC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAmB,KAAK;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,eAAA,EAAA,CAC/BC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAyB,IAAI,CAACG,IAAI,CAACC,MAAM,KAAKC,SAAS;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,cAAA,IAAAJ,CAAA,CAAA,IAAA,EAAA,eAAA,CAAA,EAAAC,MAAA;AACvDI,EAAAA,UAAU,GAAG,UAAU,GAAGC,OAAO,CAAC,IAAI,CAAC;EAE/C,IAAIH,MAAMA,GAAY;IACpB,IAAI,IAAI,CAACI,aAAa,EAAE;AACtB;MACA,OAAO,IAAI,CAACL,IAAI,CAACC,MAAM,IAAI,IAAI,CAACK,OAAO;AACzC,IAAA,CAAC,MAAM;AACL;MACA,OAAO,IAAI,CAACA,OAAO;AACrB,IAAA;AACF,EAAA;EAEA,IAAIL,MAAMA,CAACM,KAAK,EAAE;AAChB,IAAA,IAAI,CAACD,OAAO,GAAGC,KAAK,IAAI,KAAK;AAC/B,EAAA;AAGAC,EAAAA,aAAaA,GAAS;AACpB,IAAA,IAAI,CAACP,MAAM,GAAG,CAAC,IAAI,CAACA,MAAM;IAC1B,IAAI,CAACI,aAAa,GAAG,KAAK;AAC1B;AACA,IAAA,IACE,IAAI,CAACL,IAAI,CAACQ,aAAa,IACvB,OAAO,IAAI,CAACR,IAAI,CAACQ,aAAa,KAAK,UAAU,EAC7C;MACA,IAAI,CAACR,IAAI,CAACQ,aAAa,CAAC,IAAI,CAACP,MAAM,CAAC;AACtC,IAAA;AACF,EAAA;AAAC,EAAA;IAAAQ,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,eAAA,EAAA,CAXAc,MAAM,CAAA,CAAA;AAAA;AAcPC,EAAAA,aAAaA,GAAS;AACpB,IAAA,IAAI,IAAI,CAACX,IAAI,CAACC,MAAM,KAAKC,SAAS,EAAE;AAClC,MAAA,IAAI,CAACD,MAAM,GAAG,IAAI,CAACD,IAAI,CAACC,MAAM;AAChC,IAAA;IACA,IAAI,CAACI,aAAa,GAAG,IAAI;AAC3B,EAAA;AAAC,EAAA;IAAAI,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,eAAA,EAAA,CANAc,MAAM,CAAA,CAAA;AAAA;AASPE,EAAAA,KAAKA,GAAS;AACZ;AACA;IACAC,QAAQ,CAAC,aAAa,EAAE,MAAY;MAClC,IAAI,CAACZ,MAAM,GAAG,KAAK;AACnB;AACA,MAAA,IAAI,IAAI,CAACD,IAAI,CAACc,OAAO,IAAI,OAAO,IAAI,CAACd,IAAI,CAACc,OAAO,KAAK,UAAU,EAAE;AAChE,QAAA,IAAI,CAACd,IAAI,CAACc,OAAO,EAAE;AACrB,MAAA;AACF,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAL,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,OAAA,EAAA,CAXAc,MAAM,CAAA,CAAA;AAAA;AAYT;AAACK,oBAAA,CAAAC,QAAA,EApDoBvB,sBAAsB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/dismiss-button/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nimport type HdsIntlService from '../../../services/hds-intl';\n\nexport interface HdsDismissButtonSignature {\n Args: {\n ariaLabel?: string;\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsDismissButton extends Component<HdsDismissButtonSignature> {\n @service hdsIntl!: HdsIntlService;\n\n get ariaLabel(): string {\n return (\n this.args.ariaLabel ??\n this.hdsIntl.t('hds.components.dismiss-button.aria-label', {\n default: 'Dismiss',\n })\n );\n }\n}\n"],"names":["HdsDismissButton","Component","g","prototype","service","i","ariaLabel","args","hdsIntl","t","default","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAce,MAAMA,gBAAgB,SAASC,SAAS,CAA4B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAChFC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/dismiss-button/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nimport type HdsIntlService from '../../../services/hds-intl';\n\nexport interface HdsDismissButtonSignature {\n Args: {\n ariaLabel?: string;\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsDismissButton extends Component<HdsDismissButtonSignature> {\n @service hdsIntl!: HdsIntlService;\n\n get ariaLabel(): string {\n return (\n this.args.ariaLabel ??\n this.hdsIntl.t('hds.components.dismiss-button.aria-label', {\n default: 'Dismiss',\n })\n );\n }\n}\n"],"names":["HdsDismissButton","Component","g","prototype","service","i","void 0","ariaLabel","args","hdsIntl","t","default","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAce,MAAMA,gBAAgB,SAASC,SAAS,CAA4B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAChFC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;EAER,IAAIC,SAASA,GAAW;AACtB,IAAA,OACE,IAAI,CAACC,IAAI,CAACD,SAAS,IACnB,IAAI,CAACE,OAAO,CAACC,CAAC,CAAC,0CAA0C,EAAE;AACzDC,MAAAA,OAAO,EAAE;AACX,KAAC,CAAC;AAEN,EAAA;AACF;AAACC,oBAAA,CAAAC,QAAA,EAXoBb,gBAAgB,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon.js","sources":["../../../../../src/components/hds/dropdown/toggle/icon.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsDropdownToggleIconSizeValues,\n HdsDropdownToggleIconAllowedIconValues,\n} from './types.ts';\n\nimport type { HdsIconSignature } from '../../icon';\nimport type { HdsDropdownToggleIconSizes } from './types';\nimport type { ModifierLike } from '@glint/template';\nimport type { SetupPrimitiveToggleModifier } from '../../popover-primitive/index.ts';\nimport type Owner from '@ember/owner';\n\nexport const DEFAULT_SIZE = HdsDropdownToggleIconSizeValues.Medium;\nexport const SIZES: HdsDropdownToggleIconSizes[] = Object.values(\n HdsDropdownToggleIconSizeValues\n);\n\nexport const ALLOWED_ICON_LIST: HdsIconSignature['Args']['name'][] =\n Object.values(HdsDropdownToggleIconAllowedIconValues);\n\nexport interface HdsDropdownToggleIconSignature {\n Args: {\n hasChevron?: boolean;\n icon?: HdsIconSignature['Args']['name'];\n imageSrc?: string;\n isOpen?: boolean;\n size?: HdsDropdownToggleIconSizes;\n text: string;\n setupPrimitiveToggle?: ModifierLike<SetupPrimitiveToggleModifier>;\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsDropdownToggleIcon extends Component<HdsDropdownToggleIconSignature> {\n @tracked private _hasImage = true;\n\n constructor(owner: Owner, args: HdsDropdownToggleIconSignature['Args']) {\n super(owner, args);\n if (!(this.args.icon || this.args.imageSrc)) {\n assert(\n '@icon or @imageSrc must be defined for \"Hds::Dropdown::Toggle::Icon\"'\n );\n }\n }\n\n @action\n onDidUpdateImageSrc(): void {\n this._hasImage = true;\n }\n\n @action\n onImageLoadError(): void {\n this._hasImage = false;\n }\n\n /**\n * @param text\n * @type {string}\n * @description The text of the `aria-label` applied to the toggle\n */\n get text(): string {\n const { text } = this.args;\n\n assert(\n '@text for \"Hds::Dropdown::Toggle::Icon\" must have a valid value',\n text !== undefined\n );\n\n return text;\n }\n\n /**\n * @param size\n * @type {string}\n * @default medium\n * @description The size of the button; acceptable values are `small` and `medium`\n */\n get size(): HdsDropdownToggleIconSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Dropdown::Toggle::Icon\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n /**\n * @param iconSize\n * @type {string}\n * @default 24\n * @description ensures that the correct icon size is used\n */\n get iconSize(): HdsIconSignature['Args']['size'] {\n if (this.args.size === 'medium' && !this.hasChevron) {\n // in this special case we use a larger SVG\n return '24';\n } else {\n // this is the default size (notice: for the \"small\" variant with chevron, we set the actual size to `12px` via CSS)\n return '16';\n }\n }\n\n /**\n * Indicates if a dropdown chevron icon should be displayed; should be displayed unless the \"more-horizontal\" or \"more-vertical\" icons are used.\n *\n * @param hasChevron\n * @type {boolean}\n * @default true\n */\n get hasChevron(): boolean {\n if (\n this.args.icon &&\n !ALLOWED_ICON_LIST.includes(this.args.icon) &&\n this.args.hasChevron === false\n ) {\n assert(\n `@hasChevron for \"Hds::Dropdown::Toggle::Icon\" must be true unless the icon is one of the following: ${ALLOWED_ICON_LIST.join(\n ', '\n )}; received: ${this.args.icon}`\n );\n }\n\n return this.args.hasChevron ?? true;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method ToggleIcon#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-dropdown-toggle-icon'];\n\n // add a class based on the @size argument\n classes.push(`hds-dropdown-toggle-icon--size-${this.size}`);\n\n // add a class based on the @isOpen argument\n if (this.args.isOpen) {\n classes.push('hds-dropdown-toggle-icon--is-open');\n }\n\n // add a class based on the @hasChevron argument\n if (this.hasChevron) {\n classes.push('hds-dropdown-toggle-icon--has-chevron');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["DEFAULT_SIZE","HdsDropdownToggleIconSizeValues","Medium","SIZES","Object","values","ALLOWED_ICON_LIST","HdsDropdownToggleIconAllowedIconValues","HdsDropdownToggleIcon","Component","g","prototype","tracked","i","constructor","owner","args","icon","imageSrc","assert","onDidUpdateImageSrc","_hasImage","n","action","onImageLoadError","text","undefined","size","join","includes","iconSize","hasChevron","classNames","classes","push","isOpen","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAiBO,MAAMA,YAAY,GAAGC,+BAA+B,CAACC;AACrD,MAAMC,KAAmC,GAAGC,MAAM,CAACC,MAAM,CAC9DJ,+BACF;AAEO,MAAMK,iBAAqD,GAChEF,MAAM,CAACC,MAAM,CAACE,sCAAsC;AAevC,MAAMC,qBAAqB,SAASC,SAAS,CAAiC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC1FC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAqB,IAAI;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"icon.js","sources":["../../../../../src/components/hds/dropdown/toggle/icon.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport {\n HdsDropdownToggleIconSizeValues,\n HdsDropdownToggleIconAllowedIconValues,\n} from './types.ts';\n\nimport type { HdsIconSignature } from '../../icon';\nimport type { HdsDropdownToggleIconSizes } from './types';\nimport type { ModifierLike } from '@glint/template';\nimport type { SetupPrimitiveToggleModifier } from '../../popover-primitive/index.ts';\nimport type Owner from '@ember/owner';\n\nexport const DEFAULT_SIZE = HdsDropdownToggleIconSizeValues.Medium;\nexport const SIZES: HdsDropdownToggleIconSizes[] = Object.values(\n HdsDropdownToggleIconSizeValues\n);\n\nexport const ALLOWED_ICON_LIST: HdsIconSignature['Args']['name'][] =\n Object.values(HdsDropdownToggleIconAllowedIconValues);\n\nexport interface HdsDropdownToggleIconSignature {\n Args: {\n hasChevron?: boolean;\n icon?: HdsIconSignature['Args']['name'];\n imageSrc?: string;\n isOpen?: boolean;\n size?: HdsDropdownToggleIconSizes;\n text: string;\n setupPrimitiveToggle?: ModifierLike<SetupPrimitiveToggleModifier>;\n };\n Element: HTMLButtonElement;\n}\n\nexport default class HdsDropdownToggleIcon extends Component<HdsDropdownToggleIconSignature> {\n @tracked private _hasImage = true;\n\n constructor(owner: Owner, args: HdsDropdownToggleIconSignature['Args']) {\n super(owner, args);\n if (!(this.args.icon || this.args.imageSrc)) {\n assert(\n '@icon or @imageSrc must be defined for \"Hds::Dropdown::Toggle::Icon\"'\n );\n }\n }\n\n @action\n onDidUpdateImageSrc(): void {\n this._hasImage = true;\n }\n\n @action\n onImageLoadError(): void {\n this._hasImage = false;\n }\n\n /**\n * @param text\n * @type {string}\n * @description The text of the `aria-label` applied to the toggle\n */\n get text(): string {\n const { text } = this.args;\n\n assert(\n '@text for \"Hds::Dropdown::Toggle::Icon\" must have a valid value',\n text !== undefined\n );\n\n return text;\n }\n\n /**\n * @param size\n * @type {string}\n * @default medium\n * @description The size of the button; acceptable values are `small` and `medium`\n */\n get size(): HdsDropdownToggleIconSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Dropdown::Toggle::Icon\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n /**\n * @param iconSize\n * @type {string}\n * @default 24\n * @description ensures that the correct icon size is used\n */\n get iconSize(): HdsIconSignature['Args']['size'] {\n if (this.args.size === 'medium' && !this.hasChevron) {\n // in this special case we use a larger SVG\n return '24';\n } else {\n // this is the default size (notice: for the \"small\" variant with chevron, we set the actual size to `12px` via CSS)\n return '16';\n }\n }\n\n /**\n * Indicates if a dropdown chevron icon should be displayed; should be displayed unless the \"more-horizontal\" or \"more-vertical\" icons are used.\n *\n * @param hasChevron\n * @type {boolean}\n * @default true\n */\n get hasChevron(): boolean {\n if (\n this.args.icon &&\n !ALLOWED_ICON_LIST.includes(this.args.icon) &&\n this.args.hasChevron === false\n ) {\n assert(\n `@hasChevron for \"Hds::Dropdown::Toggle::Icon\" must be true unless the icon is one of the following: ${ALLOWED_ICON_LIST.join(\n ', '\n )}; received: ${this.args.icon}`\n );\n }\n\n return this.args.hasChevron ?? true;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method ToggleIcon#classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-dropdown-toggle-icon'];\n\n // add a class based on the @size argument\n classes.push(`hds-dropdown-toggle-icon--size-${this.size}`);\n\n // add a class based on the @isOpen argument\n if (this.args.isOpen) {\n classes.push('hds-dropdown-toggle-icon--is-open');\n }\n\n // add a class based on the @hasChevron argument\n if (this.hasChevron) {\n classes.push('hds-dropdown-toggle-icon--has-chevron');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["DEFAULT_SIZE","HdsDropdownToggleIconSizeValues","Medium","SIZES","Object","values","ALLOWED_ICON_LIST","HdsDropdownToggleIconAllowedIconValues","HdsDropdownToggleIcon","Component","g","prototype","tracked","i","void 0","constructor","owner","args","icon","imageSrc","assert","onDidUpdateImageSrc","_hasImage","n","action","onImageLoadError","text","undefined","size","join","includes","iconSize","hasChevron","classNames","classes","push","isOpen","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/flyout/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { getElementId } from '../../../utils/hds-get-element-id.ts';\nimport { buildWaiter } from '@ember/test-waiters';\nimport type { WithBoundArgs } from '@glint/template';\nimport { modifier } from 'ember-modifier';\n\nimport type { HdsFlyoutSizes } from './types.ts';\n\nimport { HdsFlyoutSizesValues } from './types.ts';\nimport HdsDialogPrimitiveBodyComponent from '../dialog-primitive/body.ts';\nimport HdsDialogPrimitiveDescriptionComponent from '../dialog-primitive/description.ts';\nimport HdsDialogPrimitiveFooterComponent from '../dialog-primitive/footer.ts';\nimport HdsDialogPrimitiveHeaderComponent from '../dialog-primitive/header.ts';\n\nconst waiter = buildWaiter('@hashicorp/design-system-components:flyout');\n\nexport const DEFAULT_SIZE = HdsFlyoutSizesValues.Medium;\nexport const DEFAULT_HAS_OVERLAY = true;\nexport const SIZES: HdsFlyoutSizes[] = Object.values(HdsFlyoutSizesValues);\n\nexport interface HdsFlyoutSignature {\n Args: {\n size?: HdsFlyoutSizes;\n returnFocusTo?: string;\n onOpen?: () => void;\n onClose?: (event: Event) => void;\n };\n Blocks: {\n default: [\n {\n Header?: WithBoundArgs<\n typeof HdsDialogPrimitiveHeaderComponent,\n 'id' | 'onDismiss' | 'contextualClassPrefix'\n >;\n Description?: WithBoundArgs<\n typeof HdsDialogPrimitiveDescriptionComponent,\n 'contextualClass'\n >;\n Body?: WithBoundArgs<\n typeof HdsDialogPrimitiveBodyComponent,\n 'contextualClass'\n >;\n Footer?: WithBoundArgs<\n typeof HdsDialogPrimitiveFooterComponent,\n 'onDismiss' | 'contextualClass'\n >;\n },\n ];\n };\n Element: HTMLDialogElement;\n}\n\nexport default class HdsFlyout extends Component<HdsFlyoutSignature> {\n @tracked private _isOpen = false;\n // TODO: make this property private; currently blocked by our consumers relying on it despite not being part of the public API: https://github.com/hashicorp/cloud-ui/blob/main/engines/waypoint/addon/components/preview-pane.ts#L15\n // private _element!: HTMLDialogElement;\n _element!: HTMLDialogElement;\n private _body!: HTMLElement;\n private _bodyInitialOverflowValue = '';\n\n get size(): HdsFlyoutSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Flyout\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n get id(): string {\n return getElementId(this);\n }\n\n get classNames(): string {\n const classes = ['hds-flyout'];\n\n // add a class based on the @size argument\n classes.push(`hds-flyout--size-${this.size}`);\n\n return classes.join(' ');\n }\n\n private _performCloseCleanup() {\n this._isOpen = false;\n\n // Reset page `overflow` property\n if (this._body) {\n this._body.style.removeProperty('overflow');\n if (this._bodyInitialOverflowValue === '') {\n if (this._body.style.length === 0) {\n this._body.removeAttribute('style');\n }\n } else {\n this._body.style.setProperty(\n 'overflow',\n this._bodyInitialOverflowValue\n );\n }\n }\n\n // Return focus to a specific element (if provided)\n if (this.args.returnFocusTo) {\n const initiator = document.getElementById(this.args.returnFocusTo);\n if (initiator) {\n initiator.focus();\n }\n }\n }\n\n private _registerDialog = modifier((element: HTMLDialogElement) => {\n // Store references of `<dialog>` and `<body>` elements\n this._element = element;\n this._body = document.body;\n\n if (this._body) {\n // Store the initial `overflow` value of `<body>` so we can reset to it\n this._bodyInitialOverflowValue =\n this._body.style.getPropertyValue('overflow');\n }\n\n // Register \"onClose\" callback function to be called when a native 'close' event is dispatched\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this._element.addEventListener('close', this.registerOnCloseCallback, true);\n\n // If the flyout dialog is not already open\n if (!this._element.open) {\n this.open();\n }\n\n return () => {\n // if the <dialog> is removed from the dom while open we emulate the close event\n if (this._isOpen) {\n this._performCloseCleanup();\n }\n\n this._element?.removeEventListener(\n 'close',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.registerOnCloseCallback,\n true\n );\n };\n });\n\n @action registerOnCloseCallback(event: Event) {\n if (this.args.onClose && typeof this.args.onClose === 'function') {\n this.args.onClose(event);\n }\n\n this._performCloseCleanup();\n }\n\n @action\n open(): void {\n // Make flyout dialog visible using the native `showModal` method\n this._element.showModal();\n this._isOpen = true;\n\n // Prevent page from scrolling when the dialog is open\n if (this._body) this._body.style.setProperty('overflow', 'hidden');\n\n // Call \"onOpen\" callback function\n if (this.args.onOpen && typeof this.args.onOpen === 'function') {\n this.args.onOpen();\n }\n }\n\n @action\n // eslint-disable-next-line @typescript-eslint/require-await\n async onDismiss(): Promise<void> {\n // allow ember test helpers to be aware of when the `close` event fires\n // when using `click` or other helpers from '@ember/test-helpers'\n if (this._element.open) {\n const token = waiter.beginAsync();\n const listener = () => {\n waiter.endAsync(token);\n this._element.removeEventListener('close', listener);\n };\n this._element.addEventListener('close', listener);\n }\n\n // Make flyout dialog invisible using the native `close` method\n this._element.close();\n }\n}\n"],"names":["waiter","buildWaiter","DEFAULT_SIZE","HdsFlyoutSizesValues","Medium","DEFAULT_HAS_OVERLAY","SIZES","Object","values","HdsFlyout","Component","g","prototype","tracked","i","_element","_body","_bodyInitialOverflowValue","size","args","assert","join","includes","id","getElementId","classNames","classes","push","_performCloseCleanup","_isOpen","style","removeProperty","length","removeAttribute","setProperty","returnFocusTo","initiator","document","getElementById","focus","_registerDialog","modifier","element","body","getPropertyValue","addEventListener","registerOnCloseCallback","open","removeEventListener","event","onClose","n","action","showModal","onOpen","onDismiss","token","beginAsync","listener","endAsync","close","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/flyout/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { getElementId } from '../../../utils/hds-get-element-id.ts';\nimport { buildWaiter } from '@ember/test-waiters';\nimport type { WithBoundArgs } from '@glint/template';\nimport { modifier } from 'ember-modifier';\n\nimport type { HdsFlyoutSizes } from './types.ts';\n\nimport { HdsFlyoutSizesValues } from './types.ts';\nimport HdsDialogPrimitiveBodyComponent from '../dialog-primitive/body.ts';\nimport HdsDialogPrimitiveDescriptionComponent from '../dialog-primitive/description.ts';\nimport HdsDialogPrimitiveFooterComponent from '../dialog-primitive/footer.ts';\nimport HdsDialogPrimitiveHeaderComponent from '../dialog-primitive/header.ts';\n\nconst waiter = buildWaiter('@hashicorp/design-system-components:flyout');\n\nexport const DEFAULT_SIZE = HdsFlyoutSizesValues.Medium;\nexport const DEFAULT_HAS_OVERLAY = true;\nexport const SIZES: HdsFlyoutSizes[] = Object.values(HdsFlyoutSizesValues);\n\nexport interface HdsFlyoutSignature {\n Args: {\n size?: HdsFlyoutSizes;\n returnFocusTo?: string;\n onOpen?: () => void;\n onClose?: (event: Event) => void;\n };\n Blocks: {\n default: [\n {\n Header?: WithBoundArgs<\n typeof HdsDialogPrimitiveHeaderComponent,\n 'id' | 'onDismiss' | 'contextualClassPrefix'\n >;\n Description?: WithBoundArgs<\n typeof HdsDialogPrimitiveDescriptionComponent,\n 'contextualClass'\n >;\n Body?: WithBoundArgs<\n typeof HdsDialogPrimitiveBodyComponent,\n 'contextualClass'\n >;\n Footer?: WithBoundArgs<\n typeof HdsDialogPrimitiveFooterComponent,\n 'onDismiss' | 'contextualClass'\n >;\n },\n ];\n };\n Element: HTMLDialogElement;\n}\n\nexport default class HdsFlyout extends Component<HdsFlyoutSignature> {\n @tracked private _isOpen = false;\n // TODO: make this property private; currently blocked by our consumers relying on it despite not being part of the public API: https://github.com/hashicorp/cloud-ui/blob/main/engines/waypoint/addon/components/preview-pane.ts#L15\n // private _element!: HTMLDialogElement;\n _element!: HTMLDialogElement;\n private _body!: HTMLElement;\n private _bodyInitialOverflowValue = '';\n\n get size(): HdsFlyoutSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Flyout\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n get id(): string {\n return getElementId(this);\n }\n\n get classNames(): string {\n const classes = ['hds-flyout'];\n\n // add a class based on the @size argument\n classes.push(`hds-flyout--size-${this.size}`);\n\n return classes.join(' ');\n }\n\n private _performCloseCleanup() {\n this._isOpen = false;\n\n // Reset page `overflow` property\n if (this._body) {\n this._body.style.removeProperty('overflow');\n if (this._bodyInitialOverflowValue === '') {\n if (this._body.style.length === 0) {\n this._body.removeAttribute('style');\n }\n } else {\n this._body.style.setProperty(\n 'overflow',\n this._bodyInitialOverflowValue\n );\n }\n }\n\n // Return focus to a specific element (if provided)\n if (this.args.returnFocusTo) {\n const initiator = document.getElementById(this.args.returnFocusTo);\n if (initiator) {\n initiator.focus();\n }\n }\n }\n\n private _registerDialog = modifier((element: HTMLDialogElement) => {\n // Store references of `<dialog>` and `<body>` elements\n this._element = element;\n this._body = document.body;\n\n if (this._body) {\n // Store the initial `overflow` value of `<body>` so we can reset to it\n this._bodyInitialOverflowValue =\n this._body.style.getPropertyValue('overflow');\n }\n\n // Register \"onClose\" callback function to be called when a native 'close' event is dispatched\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this._element.addEventListener('close', this.registerOnCloseCallback, true);\n\n // If the flyout dialog is not already open\n if (!this._element.open) {\n this.open();\n }\n\n return () => {\n // if the <dialog> is removed from the dom while open we emulate the close event\n if (this._isOpen) {\n this._performCloseCleanup();\n }\n\n this._element?.removeEventListener(\n 'close',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.registerOnCloseCallback,\n true\n );\n };\n });\n\n @action registerOnCloseCallback(event: Event) {\n if (this.args.onClose && typeof this.args.onClose === 'function') {\n this.args.onClose(event);\n }\n\n this._performCloseCleanup();\n }\n\n @action\n open(): void {\n // Make flyout dialog visible using the native `showModal` method\n this._element.showModal();\n this._isOpen = true;\n\n // Prevent page from scrolling when the dialog is open\n if (this._body) this._body.style.setProperty('overflow', 'hidden');\n\n // Call \"onOpen\" callback function\n if (this.args.onOpen && typeof this.args.onOpen === 'function') {\n this.args.onOpen();\n }\n }\n\n @action\n // eslint-disable-next-line @typescript-eslint/require-await\n async onDismiss(): Promise<void> {\n // allow ember test helpers to be aware of when the `close` event fires\n // when using `click` or other helpers from '@ember/test-helpers'\n if (this._element.open) {\n const token = waiter.beginAsync();\n const listener = () => {\n waiter.endAsync(token);\n this._element.removeEventListener('close', listener);\n };\n this._element.addEventListener('close', listener);\n }\n\n // Make flyout dialog invisible using the native `close` method\n this._element.close();\n }\n}\n"],"names":["waiter","buildWaiter","DEFAULT_SIZE","HdsFlyoutSizesValues","Medium","DEFAULT_HAS_OVERLAY","SIZES","Object","values","HdsFlyout","Component","g","prototype","tracked","i","void 0","_element","_body","_bodyInitialOverflowValue","size","args","assert","join","includes","id","getElementId","classNames","classes","push","_performCloseCleanup","_isOpen","style","removeProperty","length","removeAttribute","setProperty","returnFocusTo","initiator","document","getElementById","focus","_registerDialog","modifier","element","body","getPropertyValue","addEventListener","registerOnCloseCallback","open","removeEventListener","event","onClose","n","action","showModal","onOpen","onDismiss","token","beginAsync","listener","endAsync","close","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/form/key-value-inputs/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport type { ComponentLike, WithBoundArgs } from '@glint/template';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { modifier } from 'ember-modifier';\n\nimport {\n ariaDescribedBy,\n registerAriaDescriptionElement,\n unregisterAriaDescriptionElement,\n} from '../../../../utils/hds-aria-described-by.ts';\nimport { guidFor } from '@ember/object/internals';\n\nimport HdsAlertComponent from '../../alert/index.ts';\nimport HdsFormErrorComponent from '../error/index.ts';\nimport HdsFormHelperTextComponent from '../helper-text/index.ts';\nimport HdsFormKeyValueInputsDeleteRowButtonComponent from './delete-row-button.ts';\nimport HdsFormKeyValueInputsFieldComponent from './field.ts';\nimport HdsFormKeyValueInputsGenericComponent from './generic.ts';\nimport HdsFormLegendComponent from '../legend/index.ts';\n\nimport type { AriaDescribedByComponent } from '../../../../utils/hds-aria-described-by.ts';\nimport type { HdsFormKeyValueInputsAddRowButtonSignature } from './add-row-button.ts';\nimport type { HdsYieldSignature } from '../../yield/index.ts';\n\nconst KEY_VALUE_INPUTS_FIELD_SELECTOR = '.hds-form-key-value-inputs__field';\nconst KEY_VALUE_INPUTS_GENERIC_SELECTOR =\n '.hds-form-key-value-inputs__generic-container';\nconst KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR =\n '.hds-form-key-value-inputs__row--first';\nconst KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR =\n '.hds-form-key-value-inputs__delete-row-button-container';\n\nexport interface HdsFormKeyValueInputsSignature<T = unknown> {\n Args: {\n data: Array<T>;\n extraAriaDescribedBy?: string;\n isOptional?: boolean;\n isRequired?: boolean;\n };\n Blocks: {\n header?: [\n {\n Legend?: WithBoundArgs<\n typeof HdsFormLegendComponent,\n 'contextualClass' | 'id' | 'isOptional' | 'isRequired'\n >;\n HelperText?: WithBoundArgs<\n typeof HdsFormHelperTextComponent,\n 'contextualClass' | 'controlId' | 'onInsert'\n >;\n Generic?: ComponentLike<HdsYieldSignature>;\n },\n ];\n row: [\n {\n Field?: WithBoundArgs<\n typeof HdsFormKeyValueInputsFieldComponent,\n 'onInsert' | 'onRemove' | 'rowIndex'\n >;\n Generic?: WithBoundArgs<\n typeof HdsFormKeyValueInputsGenericComponent,\n 'onInsert' | 'onRemove'\n >;\n DeleteRowButton?: WithBoundArgs<\n typeof HdsFormKeyValueInputsDeleteRowButtonComponent,\n 'onInsert' | 'onRemove' | 'returnFocusTo' | 'rowData' | 'rowIndex'\n >;\n rowData?: T;\n rowIndex?: number;\n },\n ];\n footer?: [\n {\n AddRowButton?: ComponentLike<HdsFormKeyValueInputsAddRowButtonSignature>;\n Alert?: WithBoundArgs<typeof HdsAlertComponent, 'color' | 'type'>;\n Error?: WithBoundArgs<\n typeof HdsFormErrorComponent,\n 'contextualClass' | 'controlId' | 'onInsert' | 'onRemove'\n >;\n },\n ];\n };\n Element: HTMLFieldSetElement;\n}\n\n// @ts-expect-error: decorator function return type 'ClassOf<AriaDescribedBy>' is not assignable to 'typeof HdsFormField'\n@ariaDescribedBy\nexport default class HdsFormKeyValueInputs<T = unknown> extends Component<\n HdsFormKeyValueInputsSignature<T>\n> {\n private _element!: HTMLFieldSetElement;\n @tracked _gridTemplateColumns = '';\n\n // this is not a specific DOM id, but a value that is used to \"glue\" together\n // different fieldsset-related elements (legend, helper text, error) with the fieldset itself\n get glueId(): string {\n return guidFor(this);\n }\n\n @action\n _setUpColumn(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateColumns();\n });\n }\n\n @action\n _removeColumn(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateColumns();\n });\n }\n\n @action\n appendDescriptor(element: HTMLElement): void {\n registerAriaDescriptionElement(this as AriaDescribedByComponent, element);\n }\n\n @action\n removeDescriptor(element: HTMLElement): void {\n unregisterAriaDescriptionElement(this as AriaDescribedByComponent, element);\n }\n\n private _setUpKeyValueInputs = modifier((element: HTMLFieldSetElement) => {\n this._element = element;\n });\n\n // Update the column array based on how they are ordered in the DOM\n private _updateColumns = () => {\n const columns = this._element\n .querySelector(KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR)\n ?.querySelectorAll(\n `${KEY_VALUE_INPUTS_FIELD_SELECTOR}, ${KEY_VALUE_INPUTS_GENERIC_SELECTOR}, ${KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR}`\n );\n\n let updatedGridTemplateColumns = '';\n\n columns?.forEach((column, index) => {\n const columnElement = column as HTMLElement;\n\n // FIELD\n\n if (\n // do substring to remove the leading dot from the class selector\n column.classList.contains(KEY_VALUE_INPUTS_FIELD_SELECTOR.substring(1))\n ) {\n if (columnElement.dataset['width']) {\n updatedGridTemplateColumns += `${columnElement.dataset['width']} `;\n } else {\n updatedGridTemplateColumns += '1fr ';\n }\n }\n\n // GENERIC\n\n if (\n // do substring to remove the leading dot from the class selector\n column.classList.contains(\n KEY_VALUE_INPUTS_GENERIC_SELECTOR.substring(1)\n )\n ) {\n updatedGridTemplateColumns += 'auto ';\n\n // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n columnElement.style.setProperty(\n '--hds-key-value-inputs-column-index',\n `${index + 1}`\n );\n }\n\n // DELETE BUTTON\n\n if (\n column.classList.contains(\n KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR.substring(1)\n )\n ) {\n // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n columnElement.style.setProperty(\n '--hds-key-value-inputs-column-index',\n `${index + 1}`\n );\n }\n });\n\n // we always set aside the space for the delete button (it's always the last element)\n // even when it's not rendered, to avoid layout shifts when moving to/from an empty state\n updatedGridTemplateColumns += '2.25rem ';\n\n this._gridTemplateColumns = updatedGridTemplateColumns;\n };\n}\n"],"names":["KEY_VALUE_INPUTS_FIELD_SELECTOR","KEY_VALUE_INPUTS_GENERIC_SELECTOR","KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR","KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR","HdsFormKeyValueInputs","c","Component","_element","g","prototype","tracked","i","glueId","guidFor","_setUpColumn","schedule","_updateColumns","n","action","_removeColumn","appendDescriptor","element","registerAriaDescriptionElement","removeDescriptor","unregisterAriaDescriptionElement","_setUpKeyValueInputs","modifier","columns","querySelector","querySelectorAll","updatedGridTemplateColumns","forEach","column","index","columnElement","classList","contains","substring","dataset","style","setProperty","_gridTemplateColumns","ariaDescribedBy","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AA4BA,MAAMA,+BAA+B,GAAG,mCAAmC;AAC3E,MAAMC,iCAAiC,GACrC,+CAA+C;AACjD,MAAMC,mCAAmC,GACvC,wCAAwC;AAC1C,MAAMC,8CAA8C,GAClD,yDAAyD;AAAC,MAyDvCC,qBAAqB,GAAAC,CAAA,OAArBD,qBAAqB,SAAsBE,SAAS,CAEvE;EACQC,QAAQ;AAAuB,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,sBAAA,EAAA,CACtCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAwB,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,qBAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,EAAA,MAAA;AAElC;AACA;EACA,IAAIC,MAAMA,GAAW;IACnB,OAAOC,OAAO,CAAC,IAAI,CAAC;AACtB,EAAA;AAGAC,EAAAA,YAAYA,GAAS;AACnB;IACAC,QAAQ,CAAC,aAAa,EAAE,MAAY;MAClC,IAAI,CAACC,cAAc,EAAE;AACvB,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAR,SAAA,EAAA,cAAA,EAAA,CANAS,MAAM,CAAA,CAAA;AAAA;AASPC,EAAAA,aAAaA,GAAS;AACpB;IACAJ,QAAQ,CAAC,aAAa,EAAE,MAAY;MAClC,IAAI,CAACC,cAAc,EAAE;AACvB,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAR,SAAA,EAAA,eAAA,EAAA,CANAS,MAAM,CAAA,CAAA;AAAA;EASPE,gBAAgBA,CAACC,OAAoB,EAAQ;AAC3CC,IAAAA,8BAA8B,CAAC,IAAI,EAA8BD,OAAO,CAAC;AAC3E,EAAA;AAAC,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAR,SAAA,EAAA,kBAAA,EAAA,CAHAS,MAAM,CAAA,CAAA;AAAA;EAMPK,gBAAgBA,CAACF,OAAoB,EAAQ;AAC3CG,IAAAA,gCAAgC,CAAC,IAAI,EAA8BH,OAAO,CAAC;AAC7E,EAAA;AAAC,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAR,SAAA,EAAA,kBAAA,EAAA,CAHAS,MAAM,CAAA,CAAA;AAAA;AAKCO,EAAAA,oBAAoB,GAAGC,QAAQ,CAAEL,OAA4B,IAAK;IACxE,IAAI,CAACd,QAAQ,GAAGc,OAAO;AACzB,EAAA,CAAC,CAAC;;AAEF;EACQL,cAAc,GAAGA,MAAM;IAC7B,MAAMW,OAAO,GAAG,IAAI,CAACpB,QAAQ,CAC1BqB,aAAa,CAAC1B,mCAAmC,CAAC,EACjD2B,gBAAgB,CAChB,GAAG7B,+BAA+B,CAAA,EAAA,EAAKC,iCAAiC,CAAA,EAAA,EAAKE,8CAA8C,EAC7H,CAAC;IAEH,IAAI2B,0BAA0B,GAAG,EAAE;AAEnCH,IAAAA,OAAO,EAAEI,OAAO,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;MAClC,MAAMC,aAAa,GAAGF,MAAqB;;AAE3C;;AAEA,MAAA;AACE;AACAA,MAAAA,MAAM,CAACG,SAAS,CAACC,QAAQ,CAACpC,+BAA+B,CAACqC,SAAS,CAAC,CAAC,CAAC,CAAC,EACvE;AACA,QAAA,IAAIH,aAAa,CAACI,OAAO,CAAC,OAAO,CAAC,EAAE;UAClCR,0BAA0B,IAAI,GAAGI,aAAa,CAACI,OAAO,CAAC,OAAO,CAAC,CAAA,CAAA,CAAG;AACpE,QAAA,CAAC,MAAM;AACLR,UAAAA,0BAA0B,IAAI,MAAM;AACtC,QAAA;AACF,MAAA;;AAEA;;AAEA,MAAA;AACE;AACAE,MAAAA,MAAM,CAACG,SAAS,CAACC,QAAQ,CACvBnC,iCAAiC,CAACoC,SAAS,CAAC,CAAC,CAC/C,CAAC,EACD;AACAP,QAAAA,0BAA0B,IAAI,OAAO;;AAErC;AACAI,QAAAA,aAAa,CAACK,KAAK,CAACC,WAAW,CAC7B,qCAAqC,EACrC,CAAA,EAAGP,KAAK,GAAG,CAAC,CAAA,CACd,CAAC;AACH,MAAA;;AAEA;;AAEA,MAAA,IACED,MAAM,CAACG,SAAS,CAACC,QAAQ,CACvBjC,8CAA8C,CAACkC,SAAS,CAAC,CAAC,CAC5D,CAAC,EACD;AACA;AACAH,QAAAA,aAAa,CAACK,KAAK,CAACC,WAAW,CAC7B,qCAAqC,EACrC,CAAA,EAAGP,KAAK,GAAG,CAAC,CAAA,CACd,CAAC;AACH,MAAA;AACF,IAAA,CAAC,CAAC;;AAEF;AACA;AACAH,IAAAA,0BAA0B,IAAI,UAAU;IAExC,IAAI,CAACW,oBAAoB,GAAGX,0BAA0B;EACxD,CAAC;AACH,CAAC,GA3GAY,eAAe,CAAA;AAC0BC,oBAAA,CAAAC,QAAA,EAArBxC,qBAAqB,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/form/key-value-inputs/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport type { ComponentLike, WithBoundArgs } from '@glint/template';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { modifier } from 'ember-modifier';\n\nimport {\n ariaDescribedBy,\n registerAriaDescriptionElement,\n unregisterAriaDescriptionElement,\n} from '../../../../utils/hds-aria-described-by.ts';\nimport { guidFor } from '@ember/object/internals';\n\nimport HdsAlertComponent from '../../alert/index.ts';\nimport HdsFormErrorComponent from '../error/index.ts';\nimport HdsFormHelperTextComponent from '../helper-text/index.ts';\nimport HdsFormKeyValueInputsDeleteRowButtonComponent from './delete-row-button.ts';\nimport HdsFormKeyValueInputsFieldComponent from './field.ts';\nimport HdsFormKeyValueInputsGenericComponent from './generic.ts';\nimport HdsFormLegendComponent from '../legend/index.ts';\n\nimport type { AriaDescribedByComponent } from '../../../../utils/hds-aria-described-by.ts';\nimport type { HdsFormKeyValueInputsAddRowButtonSignature } from './add-row-button.ts';\nimport type { HdsYieldSignature } from '../../yield/index.ts';\n\nconst KEY_VALUE_INPUTS_FIELD_SELECTOR = '.hds-form-key-value-inputs__field';\nconst KEY_VALUE_INPUTS_GENERIC_SELECTOR =\n '.hds-form-key-value-inputs__generic-container';\nconst KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR =\n '.hds-form-key-value-inputs__row--first';\nconst KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR =\n '.hds-form-key-value-inputs__delete-row-button-container';\n\nexport interface HdsFormKeyValueInputsSignature<T = unknown> {\n Args: {\n data: Array<T>;\n extraAriaDescribedBy?: string;\n isOptional?: boolean;\n isRequired?: boolean;\n };\n Blocks: {\n header?: [\n {\n Legend?: WithBoundArgs<\n typeof HdsFormLegendComponent,\n 'contextualClass' | 'id' | 'isOptional' | 'isRequired'\n >;\n HelperText?: WithBoundArgs<\n typeof HdsFormHelperTextComponent,\n 'contextualClass' | 'controlId' | 'onInsert'\n >;\n Generic?: ComponentLike<HdsYieldSignature>;\n },\n ];\n row: [\n {\n Field?: WithBoundArgs<\n typeof HdsFormKeyValueInputsFieldComponent,\n 'onInsert' | 'onRemove' | 'rowIndex'\n >;\n Generic?: WithBoundArgs<\n typeof HdsFormKeyValueInputsGenericComponent,\n 'onInsert' | 'onRemove'\n >;\n DeleteRowButton?: WithBoundArgs<\n typeof HdsFormKeyValueInputsDeleteRowButtonComponent,\n 'onInsert' | 'onRemove' | 'returnFocusTo' | 'rowData' | 'rowIndex'\n >;\n rowData?: T;\n rowIndex?: number;\n },\n ];\n footer?: [\n {\n AddRowButton?: ComponentLike<HdsFormKeyValueInputsAddRowButtonSignature>;\n Alert?: WithBoundArgs<typeof HdsAlertComponent, 'color' | 'type'>;\n Error?: WithBoundArgs<\n typeof HdsFormErrorComponent,\n 'contextualClass' | 'controlId' | 'onInsert' | 'onRemove'\n >;\n },\n ];\n };\n Element: HTMLFieldSetElement;\n}\n\n// @ts-expect-error: decorator function return type 'ClassOf<AriaDescribedBy>' is not assignable to 'typeof HdsFormField'\n@ariaDescribedBy\nexport default class HdsFormKeyValueInputs<T = unknown> extends Component<\n HdsFormKeyValueInputsSignature<T>\n> {\n private _element!: HTMLFieldSetElement;\n @tracked _gridTemplateColumns = '';\n\n // this is not a specific DOM id, but a value that is used to \"glue\" together\n // different fieldsset-related elements (legend, helper text, error) with the fieldset itself\n get glueId(): string {\n return guidFor(this);\n }\n\n @action\n _setUpColumn(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateColumns();\n });\n }\n\n @action\n _removeColumn(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._updateColumns();\n });\n }\n\n @action\n appendDescriptor(element: HTMLElement): void {\n registerAriaDescriptionElement(this as AriaDescribedByComponent, element);\n }\n\n @action\n removeDescriptor(element: HTMLElement): void {\n unregisterAriaDescriptionElement(this as AriaDescribedByComponent, element);\n }\n\n private _setUpKeyValueInputs = modifier((element: HTMLFieldSetElement) => {\n this._element = element;\n });\n\n // Update the column array based on how they are ordered in the DOM\n private _updateColumns = () => {\n const columns = this._element\n .querySelector(KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR)\n ?.querySelectorAll(\n `${KEY_VALUE_INPUTS_FIELD_SELECTOR}, ${KEY_VALUE_INPUTS_GENERIC_SELECTOR}, ${KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR}`\n );\n\n let updatedGridTemplateColumns = '';\n\n columns?.forEach((column, index) => {\n const columnElement = column as HTMLElement;\n\n // FIELD\n\n if (\n // do substring to remove the leading dot from the class selector\n column.classList.contains(KEY_VALUE_INPUTS_FIELD_SELECTOR.substring(1))\n ) {\n if (columnElement.dataset['width']) {\n updatedGridTemplateColumns += `${columnElement.dataset['width']} `;\n } else {\n updatedGridTemplateColumns += '1fr ';\n }\n }\n\n // GENERIC\n\n if (\n // do substring to remove the leading dot from the class selector\n column.classList.contains(\n KEY_VALUE_INPUTS_GENERIC_SELECTOR.substring(1)\n )\n ) {\n updatedGridTemplateColumns += 'auto ';\n\n // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n columnElement.style.setProperty(\n '--hds-key-value-inputs-column-index',\n `${index + 1}`\n );\n }\n\n // DELETE BUTTON\n\n if (\n column.classList.contains(\n KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR.substring(1)\n )\n ) {\n // Set grid-column so generic content appears in the correct column when grid-row is set; otherwise, browsers default it to the first column.\n columnElement.style.setProperty(\n '--hds-key-value-inputs-column-index',\n `${index + 1}`\n );\n }\n });\n\n // we always set aside the space for the delete button (it's always the last element)\n // even when it's not rendered, to avoid layout shifts when moving to/from an empty state\n updatedGridTemplateColumns += '2.25rem ';\n\n this._gridTemplateColumns = updatedGridTemplateColumns;\n };\n}\n"],"names":["KEY_VALUE_INPUTS_FIELD_SELECTOR","KEY_VALUE_INPUTS_GENERIC_SELECTOR","KEY_VALUE_INPUTS_FIRST_ROW_SELECTOR","KEY_VALUE_INPUTS_DELETE_ROW_CONTAINER_SELECTOR","HdsFormKeyValueInputs","c","Component","_element","g","prototype","tracked","i","void 0","glueId","guidFor","_setUpColumn","schedule","_updateColumns","n","action","_removeColumn","appendDescriptor","element","registerAriaDescriptionElement","removeDescriptor","unregisterAriaDescriptionElement","_setUpKeyValueInputs","modifier","columns","querySelector","querySelectorAll","updatedGridTemplateColumns","forEach","column","index","columnElement","classList","contains","substring","dataset","style","setProperty","_gridTemplateColumns","ariaDescribedBy","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|