@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/tabs/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert, warn } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { HdsTabsSizeValues } from './types.ts';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsTabsTabSignature } from './tab';\nimport type { HdsTabsPanelSignature } from './panel';\nimport type { HdsTabsTabIds, HdsTabsPanelIds, HdsTabsSizes } from './types.ts';\nimport type Owner from '@ember/owner';\n\nexport const DEFAULT_SIZE: HdsTabsSizes = 'medium';\nexport const SIZES: HdsTabsSizes[] = Object.values(HdsTabsSizeValues);\nexport interface HdsTabsSignature {\n Args: {\n size?: HdsTabsSizes;\n onClickTab?: (event: MouseEvent, tabIndex: number) => void;\n selectedTabIndex?: HdsTabsTabSignature['Args']['selectedTabIndex'];\n isParentVisible?: boolean;\n };\n Blocks: {\n default: [\n {\n Tab?: ComponentLike<HdsTabsTabSignature>;\n Panel?: ComponentLike<HdsTabsPanelSignature>;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsTabs extends Component<HdsTabsSignature> {\n @tracked private _tabNodes: HTMLButtonElement[] = [];\n @tracked private _tabIds: HdsTabsTabIds = [];\n @tracked private _panelNodes: HTMLElement[] = [];\n @tracked private _panelIds: HdsTabsPanelIds = [];\n @tracked private _selectedTabIndex;\n @tracked private _selectedTabId?: string;\n @tracked private _isControlled: boolean;\n\n /**\n * Sets the size of Tabs\n * Accepted values: medium, large\n *\n * @param size\n * @type {string}\n * @default 'medium'\n */\n get size(): HdsTabsSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Tabs\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n constructor(owner: Owner, args: HdsTabsSignature['Args']) {\n super(owner, args);\n\n // this is to determine if the \"selected\" tab logic is controlled in the consumers' code or is maintained as an internal state\n this._isControlled = this.args.selectedTabIndex !== undefined;\n this._selectedTabIndex = this.args.selectedTabIndex ?? 0;\n }\n\n get selectedTabIndex(): number {\n if (this._isControlled) {\n return this.args.selectedTabIndex!;\n } else {\n return this._selectedTabIndex;\n }\n }\n\n set selectedTabIndex(value) {\n if (this._isControlled) {\n // noop\n } else {\n this._selectedTabIndex = value;\n }\n }\n\n /**\n * Get the class names to apply to the component.\n * @method classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-tabs'];\n\n // add a class based on the @size argument\n classes.push(`hds-tabs--size-${this.size}`);\n\n return classes.join(' ');\n }\n\n @action\n didInsert(): void {\n assert(\n 'The number of Tabs must be equal to the number of Panels',\n this._tabNodes.length === this._panelNodes.length\n );\n\n if (this._selectedTabId) {\n this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n }\n\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didUpdateSelectedTabIndex(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didUpdateSelectedTabId(): void {\n // if the selected tab is set dynamically (eg. in a `each` loop)\n // the `Tab` nodes will be re-inserted/rendered, which means the `this.selectedTabId` variable changes\n // but the parent `Tabs` component has already been rendered/inserted but doesn't re-render\n // so the value of the `selectedTabIndex` is not updated, unless we trigger a recalculation\n // using the `did-update` modifier that checks for changes in the `this.selectedTabId` variable\n if (this._selectedTabId) {\n this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n }\n }\n\n @action\n didUpdateParentVisibility(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didInsertTab(element: HTMLButtonElement, isSelected?: boolean): void {\n this._tabNodes = [...this._tabNodes, element];\n this._tabIds = [...this._tabIds, element.id];\n if (isSelected) {\n this._selectedTabId = element.id;\n }\n }\n\n @action\n didUpdateTab(tabIndex: number, isSelected?: boolean): void {\n if (isSelected) {\n this.selectedTabIndex = tabIndex;\n }\n this.setTabIndicator();\n }\n\n @action\n willDestroyTab(element: HTMLButtonElement): void {\n this._tabNodes = this._tabNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._tabIds = this._tabIds.filter(\n (tabId): boolean => tabId !== element.id\n );\n }\n\n @action\n didInsertPanel(element: HTMLElement, panelId: string): void {\n this._panelNodes = [...this._panelNodes, element];\n this._panelIds = [...this._panelIds, panelId];\n }\n\n @action\n willDestroyPanel(element: HTMLElement): void {\n this._panelNodes = this._panelNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._panelIds = this._panelIds.filter(\n (panelId): boolean => panelId !== element.id\n );\n }\n\n @action\n onClick(event: MouseEvent, tabIndex: number): void {\n this.selectedTabIndex = tabIndex;\n this.setTabIndicator();\n\n // invoke the callback function if it's provided as argument\n if (typeof this.args.onClickTab === 'function') {\n this.args.onClickTab(event, tabIndex);\n }\n }\n\n @action\n onKeyUp(tabIndex: number, event: KeyboardEvent): void {\n const leftArrow = 'ArrowLeft';\n const rightArrow = 'ArrowRight';\n const enterKey = 'Enter';\n const spaceKey = ' ';\n\n if (event.key === rightArrow) {\n const nextTabIndex = (tabIndex + 1) % this._tabIds.length;\n this.focusTab(nextTabIndex, event);\n } else if (event.key === leftArrow) {\n const prevTabIndex =\n (tabIndex + this._tabIds.length - 1) % this._tabIds.length;\n this.focusTab(prevTabIndex, event);\n } else if (event.key === enterKey || event.key === spaceKey) {\n this.selectedTabIndex = tabIndex;\n }\n // scroll selected tab into view (it may be out of view when activated using a keyboard with `prev/next`)\n const parentNode = this._tabNodes[this.selectedTabIndex]?.parentNode;\n if (parentNode instanceof HTMLElement) {\n parentNode.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n // Focus tab for keyboard & mouse navigation:\n focusTab(tabIndex: number, event: KeyboardEvent): void {\n event.preventDefault();\n this._tabNodes[tabIndex]?.focus();\n }\n\n setTabIndicator(): void {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n const tabElem = this._tabNodes[this.selectedTabIndex];\n\n if (tabElem != null) {\n const tabElemParentNode = tabElem.parentNode as HTMLElement;\n const tabsElemClosestList = tabElem.closest(\n '.hds-tabs__tablist'\n ) as HTMLElement;\n\n // this condition is `null` if any of the parents has `display: none`\n if (tabElemParentNode.offsetParent) {\n const tabLeftPos = tabElemParentNode.offsetLeft;\n const tabWidth = tabElemParentNode.offsetWidth;\n\n // Set CSS custom properties for indicator\n tabsElemClosestList.style.setProperty(\n '--indicator-left-pos',\n tabLeftPos + 'px'\n );\n tabsElemClosestList.style.setProperty(\n '--indicator-width',\n tabWidth + 'px'\n );\n }\n } else {\n let message = '';\n message +=\n '\"Hds::Tabs\" has tried to set the indicator for an element that doesn\\'t exist';\n if (this._tabNodes.length === 0) {\n message +=\n ' (the array `this._tabNodes` is empty, there are no tabs, probably already destroyed)';\n } else {\n message += ` (the value ${\n this.selectedTabIndex\n } of \\`this.selectedTabIndex\\` is out of bound for the array \\`this._tabNodes\\`, whose index range is [0 - ${\n this._tabNodes.length - 1\n }])`;\n }\n // https://api.emberjs.com/ember/5.3/classes/@ember%2Fdebug/methods/warn?anchor=warn\n warn(message, true, {\n id: 'hds-debug.tabs.setTabIndicator-tabElem-not-available',\n });\n }\n });\n }\n}\n"],"names":["DEFAULT_SIZE","SIZES","Object","values","HdsTabsSizeValues","HdsTabs","Component","g","prototype","tracked","i","size","args","assert","join","includes","constructor","owner","_isControlled","selectedTabIndex","undefined","_selectedTabIndex","value","classNames","classes","push","didInsert","_tabNodes","length","_panelNodes","_selectedTabId","_tabIds","indexOf","schedule","setTabIndicator","n","action","didUpdateSelectedTabIndex","didUpdateSelectedTabId","didUpdateParentVisibility","didInsertTab","element","isSelected","id","didUpdateTab","tabIndex","willDestroyTab","filter","node","tabId","didInsertPanel","panelId","_panelIds","willDestroyPanel","onClick","event","onClickTab","onKeyUp","leftArrow","rightArrow","enterKey","spaceKey","key","nextTabIndex","focusTab","prevTabIndex","parentNode","HTMLElement","scrollIntoView","behavior","block","inline","preventDefault","focus","next","tabElem","tabElemParentNode","tabsElemClosestList","closest","offsetParent","tabLeftPos","offsetLeft","tabWidth","offsetWidth","style","setProperty","message","warn","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/tabs/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert, warn } from '@ember/debug';\nimport { next, schedule } from '@ember/runloop';\nimport { HdsTabsSizeValues } from './types.ts';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsTabsTabSignature } from './tab';\nimport type { HdsTabsPanelSignature } from './panel';\nimport type { HdsTabsTabIds, HdsTabsPanelIds, HdsTabsSizes } from './types.ts';\nimport type Owner from '@ember/owner';\n\nexport const DEFAULT_SIZE: HdsTabsSizes = 'medium';\nexport const SIZES: HdsTabsSizes[] = Object.values(HdsTabsSizeValues);\nexport interface HdsTabsSignature {\n Args: {\n size?: HdsTabsSizes;\n onClickTab?: (event: MouseEvent, tabIndex: number) => void;\n selectedTabIndex?: HdsTabsTabSignature['Args']['selectedTabIndex'];\n isParentVisible?: boolean;\n };\n Blocks: {\n default: [\n {\n Tab?: ComponentLike<HdsTabsTabSignature>;\n Panel?: ComponentLike<HdsTabsPanelSignature>;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsTabs extends Component<HdsTabsSignature> {\n @tracked private _tabNodes: HTMLButtonElement[] = [];\n @tracked private _tabIds: HdsTabsTabIds = [];\n @tracked private _panelNodes: HTMLElement[] = [];\n @tracked private _panelIds: HdsTabsPanelIds = [];\n @tracked private _selectedTabIndex;\n @tracked private _selectedTabId?: string;\n @tracked private _isControlled: boolean;\n\n /**\n * Sets the size of Tabs\n * Accepted values: medium, large\n *\n * @param size\n * @type {string}\n * @default 'medium'\n */\n get size(): HdsTabsSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Tabs\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n constructor(owner: Owner, args: HdsTabsSignature['Args']) {\n super(owner, args);\n\n // this is to determine if the \"selected\" tab logic is controlled in the consumers' code or is maintained as an internal state\n this._isControlled = this.args.selectedTabIndex !== undefined;\n this._selectedTabIndex = this.args.selectedTabIndex ?? 0;\n }\n\n get selectedTabIndex(): number {\n if (this._isControlled) {\n return this.args.selectedTabIndex!;\n } else {\n return this._selectedTabIndex;\n }\n }\n\n set selectedTabIndex(value) {\n if (this._isControlled) {\n // noop\n } else {\n this._selectedTabIndex = value;\n }\n }\n\n /**\n * Get the class names to apply to the component.\n * @method classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-tabs'];\n\n // add a class based on the @size argument\n classes.push(`hds-tabs--size-${this.size}`);\n\n return classes.join(' ');\n }\n\n @action\n didInsert(): void {\n assert(\n 'The number of Tabs must be equal to the number of Panels',\n this._tabNodes.length === this._panelNodes.length\n );\n\n if (this._selectedTabId) {\n this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n }\n\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didUpdateSelectedTabIndex(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didUpdateSelectedTabId(): void {\n // if the selected tab is set dynamically (eg. in a `each` loop)\n // the `Tab` nodes will be re-inserted/rendered, which means the `this.selectedTabId` variable changes\n // but the parent `Tabs` component has already been rendered/inserted but doesn't re-render\n // so the value of the `selectedTabIndex` is not updated, unless we trigger a recalculation\n // using the `did-update` modifier that checks for changes in the `this.selectedTabId` variable\n if (this._selectedTabId) {\n this.selectedTabIndex = this._tabIds.indexOf(this._selectedTabId);\n }\n }\n\n @action\n didUpdateParentVisibility(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.setTabIndicator();\n });\n }\n\n @action\n didInsertTab(element: HTMLButtonElement, isSelected?: boolean): void {\n this._tabNodes = [...this._tabNodes, element];\n this._tabIds = [...this._tabIds, element.id];\n if (isSelected) {\n this._selectedTabId = element.id;\n }\n }\n\n @action\n didUpdateTab(tabIndex: number, isSelected?: boolean): void {\n if (isSelected) {\n this.selectedTabIndex = tabIndex;\n }\n this.setTabIndicator();\n }\n\n @action\n willDestroyTab(element: HTMLButtonElement): void {\n this._tabNodes = this._tabNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._tabIds = this._tabIds.filter(\n (tabId): boolean => tabId !== element.id\n );\n }\n\n @action\n didInsertPanel(element: HTMLElement, panelId: string): void {\n this._panelNodes = [...this._panelNodes, element];\n this._panelIds = [...this._panelIds, panelId];\n }\n\n @action\n willDestroyPanel(element: HTMLElement): void {\n this._panelNodes = this._panelNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._panelIds = this._panelIds.filter(\n (panelId): boolean => panelId !== element.id\n );\n }\n\n @action\n onClick(event: MouseEvent, tabIndex: number): void {\n this.selectedTabIndex = tabIndex;\n this.setTabIndicator();\n\n // invoke the callback function if it's provided as argument\n if (typeof this.args.onClickTab === 'function') {\n this.args.onClickTab(event, tabIndex);\n }\n }\n\n @action\n onKeyUp(tabIndex: number, event: KeyboardEvent): void {\n const leftArrow = 'ArrowLeft';\n const rightArrow = 'ArrowRight';\n const enterKey = 'Enter';\n const spaceKey = ' ';\n\n if (event.key === rightArrow) {\n const nextTabIndex = (tabIndex + 1) % this._tabIds.length;\n this.focusTab(nextTabIndex, event);\n } else if (event.key === leftArrow) {\n const prevTabIndex =\n (tabIndex + this._tabIds.length - 1) % this._tabIds.length;\n this.focusTab(prevTabIndex, event);\n } else if (event.key === enterKey || event.key === spaceKey) {\n this.selectedTabIndex = tabIndex;\n }\n // scroll selected tab into view (it may be out of view when activated using a keyboard with `prev/next`)\n const parentNode = this._tabNodes[this.selectedTabIndex]?.parentNode;\n if (parentNode instanceof HTMLElement) {\n parentNode.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n // Focus tab for keyboard & mouse navigation:\n focusTab(tabIndex: number, event: KeyboardEvent): void {\n event.preventDefault();\n this._tabNodes[tabIndex]?.focus();\n }\n\n setTabIndicator(): void {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n const tabElem = this._tabNodes[this.selectedTabIndex];\n\n if (tabElem != null) {\n const tabElemParentNode = tabElem.parentNode as HTMLElement;\n const tabsElemClosestList = tabElem.closest(\n '.hds-tabs__tablist'\n ) as HTMLElement;\n\n // this condition is `null` if any of the parents has `display: none`\n if (tabElemParentNode.offsetParent) {\n const tabLeftPos = tabElemParentNode.offsetLeft;\n const tabWidth = tabElemParentNode.offsetWidth;\n\n // Set CSS custom properties for indicator\n tabsElemClosestList.style.setProperty(\n '--indicator-left-pos',\n tabLeftPos + 'px'\n );\n tabsElemClosestList.style.setProperty(\n '--indicator-width',\n tabWidth + 'px'\n );\n }\n } else {\n let message = '';\n message +=\n '\"Hds::Tabs\" has tried to set the indicator for an element that doesn\\'t exist';\n if (this._tabNodes.length === 0) {\n message +=\n ' (the array `this._tabNodes` is empty, there are no tabs, probably already destroyed)';\n } else {\n message += ` (the value ${\n this.selectedTabIndex\n } of \\`this.selectedTabIndex\\` is out of bound for the array \\`this._tabNodes\\`, whose index range is [0 - ${\n this._tabNodes.length - 1\n }])`;\n }\n // https://api.emberjs.com/ember/5.3/classes/@ember%2Fdebug/methods/warn?anchor=warn\n warn(message, true, {\n id: 'hds-debug.tabs.setTabIndicator-tabElem-not-available',\n });\n }\n });\n }\n}\n"],"names":["DEFAULT_SIZE","SIZES","Object","values","HdsTabsSizeValues","HdsTabs","Component","g","prototype","tracked","i","void 0","size","args","assert","join","includes","constructor","owner","_isControlled","selectedTabIndex","undefined","_selectedTabIndex","value","classNames","classes","push","didInsert","_tabNodes","length","_panelNodes","_selectedTabId","_tabIds","indexOf","schedule","setTabIndicator","n","action","didUpdateSelectedTabIndex","didUpdateSelectedTabId","didUpdateParentVisibility","didInsertTab","element","isSelected","id","didUpdateTab","tabIndex","willDestroyTab","filter","node","tabId","didInsertPanel","panelId","_panelIds","willDestroyPanel","onClick","event","onClickTab","onKeyUp","leftArrow","rightArrow","enterKey","spaceKey","key","nextTabIndex","focusTab","prevTabIndex","parentNode","HTMLElement","scrollIntoView","behavior","block","inline","preventDefault","focus","next","tabElem","tabElemParentNode","tabsElemClosestList","closest","offsetParent","tabLeftPos","offsetLeft","tabWidth","offsetWidth","style","setProperty","message","warn","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/tag/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { TrackedWeakSet } from 'tracked-built-ins';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\n\nimport { HdsTagColorValues } from './types.ts';\nimport type { HdsTagColors } from './types.ts';\nimport { HdsTagTooltipPlacementValues } from './types.ts';\nimport type { HdsTagTooltipPlacements } from './types.ts';\nimport type { HdsInteractiveSignature } from '../interactive/';\n\nexport const COLORS: HdsTagColors[] = Object.values(HdsTagColorValues);\nexport const DEFAULT_COLOR = HdsTagColorValues.Primary;\nexport const TOOLTIP_PLACEMENTS: HdsTagTooltipPlacements[] = Object.values(\n HdsTagTooltipPlacementValues\n);\nexport const DEFAULT_TOOLTIP_PLACEMENT = HdsTagTooltipPlacementValues.Top;\n\nexport interface HdsTagSignature {\n Args: HdsInteractiveSignature['Args'] & {\n color?: HdsTagColors;\n text: string;\n ariaLabel?: string;\n tooltipPlacement?: HdsTagTooltipPlacements;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onDismiss?: (event: MouseEvent, ...args: any[]) => void;\n };\n Element: HTMLSpanElement;\n}\n\nconst overflowed = new TrackedWeakSet<Element>();\n\nconst observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const textContainer = entry.target.querySelector(\n '.hds-tag__text-container'\n );\n if (\n textContainer &&\n textContainer.scrollHeight > textContainer.clientHeight\n ) {\n overflowed.add(entry.target);\n } else {\n overflowed.delete(entry.target);\n }\n });\n});\n\nexport default class HdsTag extends Component<HdsTagSignature> {\n @tracked private _element?: HTMLElement;\n private get _isTextOverflow(): boolean {\n if (!this._element) {\n return false;\n }\n return overflowed.has(this._element);\n }\n\n private _setUpObserver = modifier((element: HTMLElement) => {\n this._element = element;\n observer.observe(element);\n\n return () => {\n if (this._element) {\n observer.unobserve(this._element);\n }\n delete this._element;\n };\n });\n\n /**\n * @param tooltioPlacement\n * @type {string}\n * @default top\n * @description The placement property of the tooltip attached to the tag text.\n */\n get tooltipPlacement(): HdsTagTooltipPlacements {\n const { tooltipPlacement = DEFAULT_TOOLTIP_PLACEMENT } = this.args;\n\n assert(\n '@tooltipPlacement for \"Hds::Tag\" must have a valid value',\n tooltipPlacement == undefined ||\n TOOLTIP_PLACEMENTS.includes(tooltipPlacement)\n );\n\n return tooltipPlacement;\n }\n\n /**\n * @param onDismiss\n * @type {function}\n * @default () => {}\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get onDismiss(): ((event: MouseEvent, ...args: any[]) => void) | false {\n const { onDismiss } = this.args;\n\n if (typeof onDismiss === 'function') {\n return onDismiss;\n } else {\n return false;\n }\n }\n\n /**\n * @param text\n * @type {string}\n * @description The text of the tag. If no text value is defined, an error will be thrown.\n */\n get text(): string {\n const { text } = this.args;\n\n assert('@text for \"Hds::Tag\" must have a valid value', text !== undefined);\n\n return text;\n }\n\n /**\n * @param ariaLabel\n * @type {string}\n * @default 'Dismiss'\n */\n get ariaLabel(): string {\n const tagAriaLabel = this.args.ariaLabel ?? 'Dismiss';\n return tagAriaLabel + ' ' + this.args.text;\n }\n\n /**\n * @param color\n * @type {string}\n * @default primary\n * @description Determines the color of link to be used; acceptable values are `primary` and `secondary`\n */\n get color(): HdsTagColors | false {\n if (this.args.href || this.args.route) {\n const { color = DEFAULT_COLOR } = this.args;\n assert(\n `@color for \"Hds::Tag\" must be one of the following: ${COLORS.join(\n ', '\n )}; received: ${color}`,\n COLORS.includes(color)\n );\n return color;\n } else if (this.args.color) {\n assert(\n '@color can only be applied to \"Hds::Tag\" along with either @href or @route',\n this.args.href || this.args.route\n );\n }\n return false;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-tag'];\n\n // add a class based on the @color argument\n if (this.color) {\n classes.push(`hds-tag--color-${this.color}`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["COLORS","Object","values","HdsTagColorValues","DEFAULT_COLOR","Primary","TOOLTIP_PLACEMENTS","HdsTagTooltipPlacementValues","DEFAULT_TOOLTIP_PLACEMENT","Top","overflowed","TrackedWeakSet","observer","ResizeObserver","entries","forEach","entry","textContainer","target","querySelector","scrollHeight","clientHeight","add","delete","HdsTag","Component","g","prototype","tracked","i","_isTextOverflow","_element","has","_setUpObserver","modifier","element","observe","unobserve","tooltipPlacement","args","assert","undefined","includes","onDismiss","text","ariaLabel","tagAriaLabel","color","href","route","join","classNames","classes","push","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAcO,MAAMA,MAAsB,GAAGC,MAAM,CAACC,MAAM,CAACC,iBAAiB;AAC9D,MAAMC,aAAa,GAAGD,iBAAiB,CAACE;AACxC,MAAMC,kBAA6C,GAAGL,MAAM,CAACC,MAAM,CACxEK,4BACF;AACO,MAAMC,yBAAyB,GAAGD,4BAA4B,CAACE;AActE,MAAMC,UAAU,GAAG,IAAIC,cAAc,EAAW;AAEhD,MAAMC,QAAQ,GAAG,IAAIC,cAAc,CAAEC,OAAO,IAAK;AAC/CA,EAAAA,OAAO,CAACC,OAAO,CAAEC,KAAK,IAAK;IACzB,MAAMC,aAAa,GAAGD,KAAK,CAACE,MAAM,CAACC,aAAa,CAC9C,0BACF,CAAC;IACD,IACEF,aAAa,IACbA,aAAa,CAACG,YAAY,GAAGH,aAAa,CAACI,YAAY,EACvD;AACAX,MAAAA,UAAU,CAACY,GAAG,CAACN,KAAK,CAACE,MAAM,CAAC;AAC9B,IAAA,CAAC,MAAM;AACLR,MAAAA,UAAU,CAACa,MAAM,CAACP,KAAK,CAACE,MAAM,CAAC;AACjC,IAAA;AACF,EAAA,CAAC,CAAC;AACJ,CAAC,CAAC;AAEa,MAAMM,MAAM,SAASC,SAAS,CAAkB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAC5DC,OAAO,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/tag/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { TrackedWeakSet } from 'tracked-built-ins';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\n\nimport { HdsTagColorValues } from './types.ts';\nimport type { HdsTagColors } from './types.ts';\nimport { HdsTagTooltipPlacementValues } from './types.ts';\nimport type { HdsTagTooltipPlacements } from './types.ts';\nimport type { HdsInteractiveSignature } from '../interactive/';\n\nexport const COLORS: HdsTagColors[] = Object.values(HdsTagColorValues);\nexport const DEFAULT_COLOR = HdsTagColorValues.Primary;\nexport const TOOLTIP_PLACEMENTS: HdsTagTooltipPlacements[] = Object.values(\n HdsTagTooltipPlacementValues\n);\nexport const DEFAULT_TOOLTIP_PLACEMENT = HdsTagTooltipPlacementValues.Top;\n\nexport interface HdsTagSignature {\n Args: HdsInteractiveSignature['Args'] & {\n color?: HdsTagColors;\n text: string;\n ariaLabel?: string;\n tooltipPlacement?: HdsTagTooltipPlacements;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onDismiss?: (event: MouseEvent, ...args: any[]) => void;\n };\n Element: HTMLSpanElement;\n}\n\nconst overflowed = new TrackedWeakSet<Element>();\n\nconst observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n const textContainer = entry.target.querySelector(\n '.hds-tag__text-container'\n );\n if (\n textContainer &&\n textContainer.scrollHeight > textContainer.clientHeight\n ) {\n overflowed.add(entry.target);\n } else {\n overflowed.delete(entry.target);\n }\n });\n});\n\nexport default class HdsTag extends Component<HdsTagSignature> {\n @tracked private _element?: HTMLElement;\n private get _isTextOverflow(): boolean {\n if (!this._element) {\n return false;\n }\n return overflowed.has(this._element);\n }\n\n private _setUpObserver = modifier((element: HTMLElement) => {\n this._element = element;\n observer.observe(element);\n\n return () => {\n if (this._element) {\n observer.unobserve(this._element);\n }\n delete this._element;\n };\n });\n\n /**\n * @param tooltioPlacement\n * @type {string}\n * @default top\n * @description The placement property of the tooltip attached to the tag text.\n */\n get tooltipPlacement(): HdsTagTooltipPlacements {\n const { tooltipPlacement = DEFAULT_TOOLTIP_PLACEMENT } = this.args;\n\n assert(\n '@tooltipPlacement for \"Hds::Tag\" must have a valid value',\n tooltipPlacement == undefined ||\n TOOLTIP_PLACEMENTS.includes(tooltipPlacement)\n );\n\n return tooltipPlacement;\n }\n\n /**\n * @param onDismiss\n * @type {function}\n * @default () => {}\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get onDismiss(): ((event: MouseEvent, ...args: any[]) => void) | false {\n const { onDismiss } = this.args;\n\n if (typeof onDismiss === 'function') {\n return onDismiss;\n } else {\n return false;\n }\n }\n\n /**\n * @param text\n * @type {string}\n * @description The text of the tag. If no text value is defined, an error will be thrown.\n */\n get text(): string {\n const { text } = this.args;\n\n assert('@text for \"Hds::Tag\" must have a valid value', text !== undefined);\n\n return text;\n }\n\n /**\n * @param ariaLabel\n * @type {string}\n * @default 'Dismiss'\n */\n get ariaLabel(): string {\n const tagAriaLabel = this.args.ariaLabel ?? 'Dismiss';\n return tagAriaLabel + ' ' + this.args.text;\n }\n\n /**\n * @param color\n * @type {string}\n * @default primary\n * @description Determines the color of link to be used; acceptable values are `primary` and `secondary`\n */\n get color(): HdsTagColors | false {\n if (this.args.href || this.args.route) {\n const { color = DEFAULT_COLOR } = this.args;\n assert(\n `@color for \"Hds::Tag\" must be one of the following: ${COLORS.join(\n ', '\n )}; received: ${color}`,\n COLORS.includes(color)\n );\n return color;\n } else if (this.args.color) {\n assert(\n '@color can only be applied to \"Hds::Tag\" along with either @href or @route',\n this.args.href || this.args.route\n );\n }\n return false;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-tag'];\n\n // add a class based on the @color argument\n if (this.color) {\n classes.push(`hds-tag--color-${this.color}`);\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["COLORS","Object","values","HdsTagColorValues","DEFAULT_COLOR","Primary","TOOLTIP_PLACEMENTS","HdsTagTooltipPlacementValues","DEFAULT_TOOLTIP_PLACEMENT","Top","overflowed","TrackedWeakSet","observer","ResizeObserver","entries","forEach","entry","textContainer","target","querySelector","scrollHeight","clientHeight","add","delete","HdsTag","Component","g","prototype","tracked","i","void 0","_isTextOverflow","_element","has","_setUpObserver","modifier","element","observe","unobserve","tooltipPlacement","args","assert","undefined","includes","onDismiss","text","ariaLabel","tagAriaLabel","color","href","route","join","classNames","classes","push","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/time/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { typeOf } from '@ember/utils';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport type { DisplayType } from '../../../services/hds-time-types.ts';\n\nimport type TimeService from '../../../services/hds-time';\n\nexport interface HdsTimeSignature {\n Args: {\n date?: Date | string;\n startDate?: Date | string;\n endDate?: Date | string;\n display?:\n | 'utc'\n | 'relative'\n | 'friendly-only'\n | 'friendly-local'\n | 'friendly-relative';\n isOpen?: boolean;\n hasTooltip?: boolean;\n isoUtcString?: string;\n };\n Element: HTMLElement;\n}\n\nconst dateIsValid = (date?: Date | string): date is Date =>\n date instanceof Date && !isNaN(+date);\n\nexport default class HdsTime extends Component<HdsTimeSignature> {\n @service declare readonly hdsTime: TimeService;\n\n get date(): Date | undefined {\n const { date } = this.args;\n\n // Sometimes an ISO date string might be passed in instead of a JS Date.\n if (date) {\n if (typeOf(date) === 'string') {\n return new Date(date);\n } else if (date instanceof Date) {\n return date;\n }\n }\n }\n\n get startDate(): Date | undefined {\n const { startDate } = this.args;\n\n if (startDate) {\n if (typeOf(startDate) === 'string') {\n return new Date(startDate);\n } else if (startDate instanceof Date) {\n return startDate;\n }\n }\n }\n\n get endDate(): Date | undefined {\n const { endDate } = this.args;\n\n if (endDate) {\n if (typeOf(endDate) === 'string') {\n return new Date(endDate);\n } else if (endDate instanceof Date) {\n return endDate;\n }\n }\n }\n\n get isValidDate(): boolean {\n return dateIsValid(this.date);\n }\n\n get isValidDateRange(): boolean {\n if (dateIsValid(this.startDate) && dateIsValid(this.endDate)) {\n return this.startDate <= this.endDate;\n }\n return false;\n }\n\n get hasTooltip(): boolean {\n return this.args.hasTooltip ?? true;\n }\n\n get isoUtcString(): string {\n const date = this.date;\n\n if (dateIsValid(date)) {\n const isoUtcString = this.hdsTime.toIsoUtcString(date);\n\n if (isoUtcString) return isoUtcString;\n }\n\n return '';\n }\n\n get rangeIsoUtcString(): string {\n const startDate = this.startDate;\n const endDate = this.endDate;\n\n if (dateIsValid(startDate) && dateIsValid(endDate)) {\n return `${this.hdsTime.toIsoUtcString(startDate)}–${this.hdsTime.toIsoUtcString(endDate)}`;\n }\n return '';\n }\n\n get display(): DisplayType {\n const date = this.date;\n const { display } = this.args;\n\n if (dateIsValid(date)) {\n const nextDiff = this.hdsTime.timeDifference(this.hdsTime.now, date);\n return this.hdsTime.format(nextDiff, display);\n }\n return {\n options: undefined,\n difference: { absValueInMs: 0, valueInMs: 0 },\n relative: { value: 0, unit: undefined },\n };\n }\n\n get isOpen(): boolean {\n return this.args.isOpen ?? false;\n }\n\n @action\n didInsertNode(): void {\n const date = this.date;\n\n if (dateIsValid(date)) {\n this.hdsTime.register(date);\n }\n }\n\n @action\n willDestroyNode(): void {\n const date = this.date;\n\n if (dateIsValid(date)) {\n this.hdsTime.unregister(date);\n }\n }\n}\n"],"names":["dateIsValid","date","Date","isNaN","HdsTime","Component","g","prototype","service","i","args","typeOf","startDate","endDate","isValidDate","isValidDateRange","hasTooltip","isoUtcString","hdsTime","toIsoUtcString","rangeIsoUtcString","display","nextDiff","timeDifference","now","format","options","undefined","difference","absValueInMs","valueInMs","relative","value","unit","isOpen","didInsertNode","register","n","action","willDestroyNode","unregister","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AA4BA,MAAMA,WAAW,GAAIC,IAAoB,IACvCA,IAAI,YAAYC,IAAI,IAAI,CAACC,KAAK,CAAC,CAACF,IAAI,CAAC;AAExB,MAAMG,OAAO,SAASC,SAAS,CAAmB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAC9DC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/time/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { typeOf } from '@ember/utils';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport type { DisplayType } from '../../../services/hds-time-types.ts';\n\nimport type TimeService from '../../../services/hds-time';\n\nexport interface HdsTimeSignature {\n Args: {\n date?: Date | string;\n startDate?: Date | string;\n endDate?: Date | string;\n display?:\n | 'utc'\n | 'relative'\n | 'friendly-only'\n | 'friendly-local'\n | 'friendly-relative';\n isOpen?: boolean;\n hasTooltip?: boolean;\n isoUtcString?: string;\n };\n Element: HTMLElement;\n}\n\nconst dateIsValid = (date?: Date | string): date is Date =>\n date instanceof Date && !isNaN(+date);\n\nexport default class HdsTime extends Component<HdsTimeSignature> {\n @service declare readonly hdsTime: TimeService;\n\n get date(): Date | undefined {\n const { date } = this.args;\n\n // Sometimes an ISO date string might be passed in instead of a JS Date.\n if (date) {\n if (typeOf(date) === 'string') {\n return new Date(date);\n } else if (date instanceof Date) {\n return date;\n }\n }\n }\n\n get startDate(): Date | undefined {\n const { startDate } = this.args;\n\n if (startDate) {\n if (typeOf(startDate) === 'string') {\n return new Date(startDate);\n } else if (startDate instanceof Date) {\n return startDate;\n }\n }\n }\n\n get endDate(): Date | undefined {\n const { endDate } = this.args;\n\n if (endDate) {\n if (typeOf(endDate) === 'string') {\n return new Date(endDate);\n } else if (endDate instanceof Date) {\n return endDate;\n }\n }\n }\n\n get isValidDate(): boolean {\n return dateIsValid(this.date);\n }\n\n get isValidDateRange(): boolean {\n if (dateIsValid(this.startDate) && dateIsValid(this.endDate)) {\n return this.startDate <= this.endDate;\n }\n return false;\n }\n\n get hasTooltip(): boolean {\n return this.args.hasTooltip ?? true;\n }\n\n get isoUtcString(): string {\n const date = this.date;\n\n if (dateIsValid(date)) {\n const isoUtcString = this.hdsTime.toIsoUtcString(date);\n\n if (isoUtcString) return isoUtcString;\n }\n\n return '';\n }\n\n get rangeIsoUtcString(): string {\n const startDate = this.startDate;\n const endDate = this.endDate;\n\n if (dateIsValid(startDate) && dateIsValid(endDate)) {\n return `${this.hdsTime.toIsoUtcString(startDate)}–${this.hdsTime.toIsoUtcString(endDate)}`;\n }\n return '';\n }\n\n get display(): DisplayType {\n const date = this.date;\n const { display } = this.args;\n\n if (dateIsValid(date)) {\n const nextDiff = this.hdsTime.timeDifference(this.hdsTime.now, date);\n return this.hdsTime.format(nextDiff, display);\n }\n return {\n options: undefined,\n difference: { absValueInMs: 0, valueInMs: 0 },\n relative: { value: 0, unit: undefined },\n };\n }\n\n get isOpen(): boolean {\n return this.args.isOpen ?? false;\n }\n\n @action\n didInsertNode(): void {\n const date = this.date;\n\n if (dateIsValid(date)) {\n this.hdsTime.register(date);\n }\n }\n\n @action\n willDestroyNode(): void {\n const date = this.date;\n\n if (dateIsValid(date)) {\n this.hdsTime.unregister(date);\n }\n }\n}\n"],"names":["dateIsValid","date","Date","isNaN","HdsTime","Component","g","prototype","service","i","void 0","args","typeOf","startDate","endDate","isValidDate","isValidDateRange","hasTooltip","isoUtcString","hdsTime","toIsoUtcString","rangeIsoUtcString","display","nextDiff","timeDifference","now","format","options","undefined","difference","absValueInMs","valueInMs","relative","value","unit","isOpen","didInsertNode","register","n","action","willDestroyNode","unregister","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"range.js","sources":["../../../../src/components/hds/time/range.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport type TimeService from '../../../services/hds-time';\n\nexport interface HdsTimeRangeSignature {\n Args: {\n startDate?: Date;\n endDate?: Date;\n };\n Element: HTMLElement;\n}\n\nexport default class HdsTimeRange extends Component<HdsTimeRangeSignature> {\n @service declare readonly hdsTime: TimeService;\n\n get startDateIsoUtcString(): string | undefined {\n const { startDate } = this.args;\n if (startDate) {\n return this.hdsTime.toIsoUtcString(startDate);\n }\n }\n\n get endDateIsoUtcString(): string | undefined {\n const { endDate } = this.args;\n if (endDate) {\n return this.hdsTime.toIsoUtcString(endDate);\n }\n }\n\n get startDateDisplayFormat(): {\n month: Intl.DateTimeFormatOptions['month'];\n day: Intl.DateTimeFormatOptions['day'];\n year?: Intl.DateTimeFormatOptions['year'];\n hour?: Intl.DateTimeFormatOptions['hour'];\n minute?: Intl.DateTimeFormatOptions['minute'];\n second?: Intl.DateTimeFormatOptions['second'];\n } {\n const { startDate, endDate } = this.args;\n\n if (startDate?.getFullYear() !== endDate?.getFullYear()) {\n return {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n };\n } else {\n return {\n month: 'short',\n day: 'numeric',\n year: undefined,\n };\n }\n }\n\n get endDateDisplayFormat(): {\n month: Intl.DateTimeFormatOptions['month'];\n day: Intl.DateTimeFormatOptions['day'];\n year?: Intl.DateTimeFormatOptions['year'];\n hour?: Intl.DateTimeFormatOptions['hour'];\n minute?: Intl.DateTimeFormatOptions['minute'];\n second?: Intl.DateTimeFormatOptions['second'];\n } {\n return {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n };\n }\n}\n"],"names":["HdsTimeRange","Component","g","prototype","service","i","startDateIsoUtcString","startDate","args","hdsTime","toIsoUtcString","endDateIsoUtcString","endDate","startDateDisplayFormat","getFullYear","month","day","year","undefined","endDateDisplayFormat","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAce,MAAMA,YAAY,SAASC,SAAS,CAAwB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACxEC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"range.js","sources":["../../../../src/components/hds/time/range.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport type TimeService from '../../../services/hds-time';\n\nexport interface HdsTimeRangeSignature {\n Args: {\n startDate?: Date;\n endDate?: Date;\n };\n Element: HTMLElement;\n}\n\nexport default class HdsTimeRange extends Component<HdsTimeRangeSignature> {\n @service declare readonly hdsTime: TimeService;\n\n get startDateIsoUtcString(): string | undefined {\n const { startDate } = this.args;\n if (startDate) {\n return this.hdsTime.toIsoUtcString(startDate);\n }\n }\n\n get endDateIsoUtcString(): string | undefined {\n const { endDate } = this.args;\n if (endDate) {\n return this.hdsTime.toIsoUtcString(endDate);\n }\n }\n\n get startDateDisplayFormat(): {\n month: Intl.DateTimeFormatOptions['month'];\n day: Intl.DateTimeFormatOptions['day'];\n year?: Intl.DateTimeFormatOptions['year'];\n hour?: Intl.DateTimeFormatOptions['hour'];\n minute?: Intl.DateTimeFormatOptions['minute'];\n second?: Intl.DateTimeFormatOptions['second'];\n } {\n const { startDate, endDate } = this.args;\n\n if (startDate?.getFullYear() !== endDate?.getFullYear()) {\n return {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n };\n } else {\n return {\n month: 'short',\n day: 'numeric',\n year: undefined,\n };\n }\n }\n\n get endDateDisplayFormat(): {\n month: Intl.DateTimeFormatOptions['month'];\n day: Intl.DateTimeFormatOptions['day'];\n year?: Intl.DateTimeFormatOptions['year'];\n hour?: Intl.DateTimeFormatOptions['hour'];\n minute?: Intl.DateTimeFormatOptions['minute'];\n second?: Intl.DateTimeFormatOptions['second'];\n } {\n return {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n };\n }\n}\n"],"names":["HdsTimeRange","Component","g","prototype","service","i","void 0","startDateIsoUtcString","startDate","args","hdsTime","toIsoUtcString","endDateIsoUtcString","endDate","startDateDisplayFormat","getFullYear","month","day","year","undefined","endDateDisplayFormat","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAce,MAAMA,YAAY,SAASC,SAAS,CAAwB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACxEC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;EAER,IAAIC,qBAAqBA,GAAuB;IAC9C,MAAM;AAAEC,MAAAA;KAAW,GAAG,IAAI,CAACC,IAAI;AAC/B,IAAA,IAAID,SAAS,EAAE;AACb,MAAA,OAAO,IAAI,CAACE,OAAO,CAACC,cAAc,CAACH,SAAS,CAAC;AAC/C,IAAA;AACF,EAAA;EAEA,IAAII,mBAAmBA,GAAuB;IAC5C,MAAM;AAAEC,MAAAA;KAAS,GAAG,IAAI,CAACJ,IAAI;AAC7B,IAAA,IAAII,OAAO,EAAE;AACX,MAAA,OAAO,IAAI,CAACH,OAAO,CAACC,cAAc,CAACE,OAAO,CAAC;AAC7C,IAAA;AACF,EAAA;EAEA,IAAIC,sBAAsBA,GAOxB;IACA,MAAM;MAAEN,SAAS;AAAEK,MAAAA;KAAS,GAAG,IAAI,CAACJ,IAAI;IAExC,IAAID,SAAS,EAAEO,WAAW,EAAE,KAAKF,OAAO,EAAEE,WAAW,EAAE,EAAE;MACvD,OAAO;AACLC,QAAAA,KAAK,EAAE,OAAO;AACdC,QAAAA,GAAG,EAAE,SAAS;AACdC,QAAAA,IAAI,EAAE;OACP;AACH,IAAA,CAAC,MAAM;MACL,OAAO;AACLF,QAAAA,KAAK,EAAE,OAAO;AACdC,QAAAA,GAAG,EAAE,SAAS;AACdC,QAAAA,IAAI,EAAEC;OACP;AACH,IAAA;AACF,EAAA;EAEA,IAAIC,oBAAoBA,GAOtB;IACA,OAAO;AACLJ,MAAAA,KAAK,EAAE,OAAO;AACdC,MAAAA,GAAG,EAAE,SAAS;AACdC,MAAAA,IAAI,EAAE;KACP;AACH,EAAA;AACF;AAACG,oBAAA,CAAAC,QAAA,EAxDoBtB,YAAY,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hds-t.js","sources":["../../src/helpers/hds-t.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport { assert } from '@ember/debug';\nimport { isPresent } from '@ember/utils';\n\nimport type HdsIntlService from '../services/hds-intl';\nimport type { HdsIntlTOptions } from '../services/hds-intl';\n\ninterface HdsTHelperSignature {\n Args: {\n Positional: string[];\n Named: HdsIntlTOptions;\n };\n Return: string;\n}\n\nexport default class HdsTHelper extends Helper<HdsTHelperSignature> {\n @service hdsIntl!: HdsIntlService;\n\n compute(\n positional: HdsTHelperSignature['Args']['Positional'],\n named: HdsTHelperSignature['Args']['Named']\n ): HdsTHelperSignature['Return'] {\n const key = positional[0];\n\n assert(\n 'Hds::T helper requires a key as the first positional argument',\n typeof key === 'string' && isPresent(key)\n );\n\n return this.hdsIntl.t(key, named);\n }\n}\n"],"names":["HdsTHelper","Helper","g","prototype","service","i","compute","positional","named","key","assert","isPresent","hdsIntl","t"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;;AAkBe,MAAMA,UAAU,SAASC,MAAM,CAAsB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACjEC,OAAO,CAAA,CAAA;AAAA;EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"hds-t.js","sources":["../../src/helpers/hds-t.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport { assert } from '@ember/debug';\nimport { isPresent } from '@ember/utils';\n\nimport type HdsIntlService from '../services/hds-intl';\nimport type { HdsIntlTOptions } from '../services/hds-intl';\n\ninterface HdsTHelperSignature {\n Args: {\n Positional: string[];\n Named: HdsIntlTOptions;\n };\n Return: string;\n}\n\nexport default class HdsTHelper extends Helper<HdsTHelperSignature> {\n @service hdsIntl!: HdsIntlService;\n\n compute(\n positional: HdsTHelperSignature['Args']['Positional'],\n named: HdsTHelperSignature['Args']['Named']\n ): HdsTHelperSignature['Return'] {\n const key = positional[0];\n\n assert(\n 'Hds::T helper requires a key as the first positional argument',\n typeof key === 'string' && isPresent(key)\n );\n\n return this.hdsIntl.t(key, named);\n }\n}\n"],"names":["HdsTHelper","Helper","g","prototype","service","i","void 0","compute","positional","named","key","assert","isPresent","hdsIntl","t"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;;AAkBe,MAAMA,UAAU,SAASC,MAAM,CAAsB;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CACjEC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAERC,EAAAA,OAAOA,CACLC,UAAqD,EACrDC,KAA2C,EACZ;AAC/B,IAAA,MAAMC,GAAG,GAAGF,UAAU,CAAC,CAAC,CAAC;AAEzBG,IAAAA,MAAM,CACJ,+DAA+D,EAC/D,OAAOD,GAAG,KAAK,QAAQ,IAAIE,SAAS,CAACF,GAAG,CAC1C,CAAC;IAED,OAAO,IAAI,CAACG,OAAO,CAACC,CAAC,CAACJ,GAAG,EAAED,KAAK,CAAC;AACnC,EAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hds-code-editor.js","sources":["../../src/modifiers/hds-code-editor.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Modifier from 'ember-modifier';\nimport { assert, warn } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { task } from 'ember-concurrency';\nimport { macroCondition, isTesting } from '@embroider/macros';\nimport { Compartment } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { guidFor } from '@ember/object/internals';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\n\n// hds-dark theme\nimport hdsDarkTheme from './hds-code-editor/themes/hds-dark-theme.ts';\nimport hdsDarkHighlightStyle from './hds-code-editor/highlight-styles/hds-dark-highlight-style.ts';\n\nimport type HdsIntlService from '../services/hds-intl.ts';\nimport type { HdsCodeEditorLanguages } from './hds-code-editor/types.ts';\nimport type { ArgsFor, PositionalArgs, NamedArgs } from 'ember-modifier';\nimport type {\n StreamLanguage as StreamLanguageType,\n StreamParser as StreamParserType,\n} from '@codemirror/language';\nimport type { Extension } from '@codemirror/state';\nimport type {\n EditorView as EditorViewType,\n KeyBinding,\n ViewUpdate,\n} from '@codemirror/view';\nimport type { Diagnostic as DiagnosticType } from '@codemirror/lint';\nimport type Owner from '@ember/owner';\n\ntype HTMLElementWithEditor = HTMLElement & { editor: EditorViewType };\n\ntype HdsCodeEditorBlurHandler = (\n editor: EditorViewType,\n event: FocusEvent\n) => void;\n\ninterface HdsCodeEditorExtraKeys {\n [key: string]: () => boolean;\n}\n\nexport interface HdsCodeEditorSignature {\n Args: {\n Named: {\n ariaDescribedBy?: string;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n cspNonce?: string;\n extraKeys?: HdsCodeEditorExtraKeys;\n customExtensions?: Extension[];\n hasLineWrapping?: boolean;\n isLintingEnabled?: boolean;\n language?: HdsCodeEditorLanguages;\n value?: string;\n onInput?: (newValue: string, editor: EditorViewType) => void;\n onBlur?: HdsCodeEditorBlurHandler;\n onLint?: (\n diagnostics: DiagnosticType[],\n newValue: string,\n editor: EditorViewType\n ) => void;\n onSetup?: (editor: EditorViewType) => unknown;\n };\n };\n}\n\nasync function defineStreamLanguage(streamParser: StreamParserType<unknown>) {\n const { StreamLanguage } = await import('@codemirror/language');\n\n return StreamLanguage.define(streamParser);\n}\n\nexport function getCSPNonceFromMeta(): string | undefined {\n const meta = document.querySelector(\n 'meta[http-equiv=\"Content-Security-Policy\"]'\n );\n\n if (meta === null) {\n return undefined;\n }\n\n const content = meta.getAttribute('content');\n\n if (content === null) {\n return undefined;\n }\n\n // searches for either \"style-src\" or \"script-src\" followed by anything until a token like 'nonce-<value>'\n const match = content.match(/(?:style-src|script-src)[^;]*'nonce-([^']+)'/);\n\n return match ? match[1] : undefined;\n}\n\nconst LOADER_HEIGHT = '164px';\n\nconst LANGUAGES: Record<\n HdsCodeEditorLanguages,\n {\n load: () => Promise<Extension | StreamLanguageType<unknown>>;\n loadLinter?: (\n onLint?: HdsCodeEditorSignature['Args']['Named']['onLint']\n ) => Promise<Extension>;\n }\n> = {\n rego: {\n load: async () => {\n const { rego } = await import('./hds-code-editor/languages/rego.ts');\n return defineStreamLanguage(rego);\n },\n },\n ruby: {\n load: async () => {\n const { ruby } = await import('@codemirror/legacy-modes/mode/ruby');\n return defineStreamLanguage(ruby);\n },\n },\n sentinel: {\n load: async () => {\n const { sentinel } = await import(\n './hds-code-editor/languages/sentinel.ts'\n );\n return defineStreamLanguage(sentinel);\n },\n },\n shell: {\n load: async () => {\n const { shell } = await import('@codemirror/legacy-modes/mode/shell');\n return defineStreamLanguage(shell);\n },\n },\n go: {\n load: async () => (await import('@codemirror/lang-go')).go(),\n },\n hcl: {\n load: async () => (await import('codemirror-lang-hcl')).hcl(),\n },\n javascript: {\n load: async () =>\n (await import('@codemirror/lang-javascript')).javascript(),\n },\n json: {\n load: async () => (await import('@codemirror/lang-json')).json(),\n loadLinter: async (onLint) => {\n const linter = await import('./hds-code-editor/linters/json-linter.ts');\n\n return linter.default(onLint);\n },\n },\n markdown: {\n load: async () => (await import('@codemirror/lang-markdown')).markdown(),\n },\n sql: {\n load: async () => (await import('@codemirror/lang-sql')).sql(),\n },\n yaml: {\n load: async () => (await import('@codemirror/lang-yaml')).yaml(),\n },\n} as const;\n\nexport default class HdsCodeEditorModifier extends Modifier<HdsCodeEditorSignature> {\n @service declare hdsIntl: HdsIntlService;\n\n editor!: EditorViewType;\n element!: HTMLElementWithEditor;\n\n onBlur: HdsCodeEditorSignature['Args']['Named']['onBlur'];\n onInput: HdsCodeEditorSignature['Args']['Named']['onInput'];\n\n blurHandler!: (event: FocusEvent) => void;\n intersectionObserver!: IntersectionObserver;\n mutationObserver!: MutationObserver;\n\n lineWrappingCompartment = new Compartment();\n\n constructor(owner: Owner, args: ArgsFor<HdsCodeEditorSignature>) {\n super(owner, args);\n\n registerDestructor(this, () => {\n this.intersectionObserver?.disconnect();\n this.mutationObserver?.disconnect();\n\n if (this.onBlur !== undefined) {\n this.element.removeEventListener('blur', this.blurHandler);\n }\n });\n }\n\n modify(\n element: HTMLElementWithEditor,\n positional: PositionalArgs<HdsCodeEditorSignature>,\n named: NamedArgs<HdsCodeEditorSignature>\n ): void {\n const { hasLineWrapping = false } = named;\n\n // if the editor already exists, update the line wrapping\n if (this.editor) {\n this.editor.dispatch({\n effects: this.lineWrappingCompartment.reconfigure(\n hasLineWrapping ? EditorView.lineWrapping : []\n ),\n });\n }\n // if the editor does not exist, setup the editor\n else {\n // the intersection observer makes loading unreliable in tests\n if (macroCondition(isTesting())) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._setupTask.perform(element, positional, named);\n } else {\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && this.editor === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._setupTask.perform(element, positional, named);\n }\n });\n },\n {\n rootMargin: LOADER_HEIGHT,\n }\n );\n\n this.intersectionObserver.observe(element);\n }\n }\n }\n\n private _setupEditorBlurHandler(\n element: HTMLElementWithEditor,\n onBlur: HdsCodeEditorBlurHandler\n ) {\n const inputElement = element.querySelector('.cm-content');\n\n if (inputElement === null) {\n return;\n }\n\n this.blurHandler = (event: FocusEvent) => onBlur(this.editor, event);\n\n (inputElement as HTMLElement).addEventListener('blur', this.blurHandler);\n }\n\n private _setupEditorAriaLabel(\n editor: EditorViewType,\n {\n ariaLabel,\n ariaLabelledBy,\n }: Pick<\n HdsCodeEditorSignature['Args']['Named'],\n 'ariaLabel' | 'ariaLabelledBy'\n >\n ) {\n assert(\n '`hds-code-editor` modifier - Either `ariaLabel` or `ariaLabelledBy` must be provided',\n ariaLabel !== undefined || ariaLabelledBy !== undefined\n );\n\n if (ariaLabel !== undefined) {\n editor.dom\n .querySelector('[role=\"textbox\"]')\n ?.setAttribute('aria-label', ariaLabel);\n } else if (ariaLabelledBy !== undefined) {\n editor.dom\n .querySelector('[role=\"textbox\"]')\n ?.setAttribute('aria-labelledby', ariaLabelledBy);\n }\n }\n\n private _setupEditorAriaDescribedBy(\n editor: EditorViewType,\n {\n ariaDescribedBy,\n lintingDescriptionElement,\n }: {\n ariaDescribedBy?: string;\n lintingDescriptionElement?: HTMLParagraphElement;\n }\n ) {\n if (\n ariaDescribedBy === undefined &&\n lintingDescriptionElement === undefined\n ) {\n return;\n }\n\n const ariaDescribedByArray = [];\n\n if (ariaDescribedBy !== undefined) {\n ariaDescribedByArray.push(ariaDescribedBy);\n }\n\n if (lintingDescriptionElement !== undefined) {\n ariaDescribedByArray.push(lintingDescriptionElement.id);\n }\n\n editor.dom\n .querySelector('[role=\"textbox\"]')\n ?.setAttribute('aria-describedby', ariaDescribedByArray.join(' '));\n }\n\n private _createLintingDescriptionElement(): HTMLParagraphElement {\n const element = document.createElement('p');\n\n element.id = `lint-panel-instructions-${this.element.id}`;\n element.classList.add('sr-only');\n element.textContent = this.hdsIntl.t(\n 'hds.modifiers.hds-code-editor.lint-panel-description',\n {\n default:\n 'Press `Ctrl-Shift-m` (`Cmd-Shift-m` on macOS) while focus is on the textbox to open the linting panel',\n }\n );\n\n this.element.insertAdjacentElement('beforebegin', element);\n\n return element;\n }\n\n private _setupEditorAriaAttributes(\n editor: EditorViewType,\n {\n ariaDescribedBy,\n ariaLabel,\n ariaLabelledBy,\n lintingDescriptionElement,\n }: Pick<\n HdsCodeEditorSignature['Args']['Named'],\n 'ariaDescribedBy' | 'ariaLabel' | 'ariaLabelledBy'\n > & { lintingDescriptionElement?: HTMLParagraphElement }\n ) {\n this._setupEditorAriaLabel(editor, { ariaLabel, ariaLabelledBy });\n this._setupEditorAriaDescribedBy(editor, {\n ariaDescribedBy,\n lintingDescriptionElement,\n });\n }\n\n private _loadLanguageExtensionsTask = task(\n { drop: true },\n async ({\n language,\n isLintingEnabled,\n onLint,\n }: {\n language?: HdsCodeEditorLanguages;\n isLintingEnabled?: boolean;\n onLint?: HdsCodeEditorSignature['Args']['Named']['onLint'];\n }) => {\n if (language === undefined) {\n return;\n }\n\n try {\n const validLanguageKeys = Object.keys(LANGUAGES);\n\n assert(\n `\\`hds-code-editor\\` modifier - \\`language\\` must be one of the following: ${validLanguageKeys.join(\n ', '\n )}; received: ${language}`,\n validLanguageKeys.includes(language)\n );\n\n let extensionPromises = [LANGUAGES[language].load()];\n\n if (isLintingEnabled && LANGUAGES[language].loadLinter) {\n extensionPromises = [\n ...extensionPromises,\n LANGUAGES[language].loadLinter(onLint),\n ];\n }\n\n return Promise.all(extensionPromises);\n } catch (error) {\n warn(\n `\\`hds-code-editor\\` modifier - Failed to dynamically import the CodeMirror language module for '${language}'. Error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-code-editor.load-language-task.import-failed',\n }\n );\n }\n }\n );\n\n private _buildExtensionsTask = task(\n { drop: true },\n async ({\n cspNonce,\n extraKeys,\n language,\n hasLineWrapping,\n isLintingEnabled,\n customExtensions,\n onLint,\n }: Pick<\n HdsCodeEditorSignature['Args']['Named'],\n | 'cspNonce'\n | 'extraKeys'\n | 'language'\n | 'hasLineWrapping'\n | 'isLintingEnabled'\n | 'customExtensions'\n | 'onLint'\n >) => {\n const [\n {\n keymap,\n lineNumbers,\n highlightActiveLineGutter,\n highlightSpecialChars,\n highlightActiveLine,\n },\n { defaultKeymap, history, historyKeymap },\n { bracketMatching, syntaxHighlighting },\n ] = await Promise.all([\n import('@codemirror/view'),\n import('@codemirror/commands'),\n import('@codemirror/language'),\n ]);\n\n const languageExtensions = await this._loadLanguageExtensionsTask.perform(\n {\n language,\n isLintingEnabled,\n onLint,\n }\n );\n\n const handleUpdateExtension = EditorView.updateListener.of(\n (update: ViewUpdate) => {\n // toggle a class if the update has/does not have a selection\n if (update.selectionSet) {\n update.view.dom.classList.toggle(\n 'cm-hasSelection',\n !update.state.selection.main.empty\n );\n }\n\n // call the onInput callback if the document has changed\n if (!update.docChanged || this.onInput === undefined) {\n return;\n }\n this.onInput(update.state.doc.toString(), update.view);\n }\n );\n\n const lineWrappingExtension = this.lineWrappingCompartment.of(\n hasLineWrapping ? EditorView.lineWrapping : []\n );\n\n let extensions: Extension[] = [\n lineWrappingExtension,\n bracketMatching(),\n highlightActiveLine(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n keymap.of([...defaultKeymap, ...historyKeymap]),\n // custom extensions\n handleUpdateExtension,\n // user-provided extensions\n ...(customExtensions ?? []),\n // hds dark theme\n hdsDarkTheme,\n syntaxHighlighting(hdsDarkHighlightStyle),\n ];\n\n if (extraKeys !== undefined) {\n const customKeyMap = Object.entries(extraKeys).map(([key, value]) => ({\n key: key,\n run: value,\n }));\n\n extensions = [keymap.of(customKeyMap as KeyBinding[]), ...extensions];\n }\n\n if (languageExtensions !== undefined) {\n extensions = [...extensions, ...languageExtensions];\n }\n\n // add nonce to the editor view if it exists\n const nonce = cspNonce ?? getCSPNonceFromMeta();\n\n if (nonce !== undefined) {\n extensions = [...extensions, EditorView.cspNonce.of(nonce)];\n }\n\n // ensure we add lineNumber last in the stack to create the right gutter order for linting\n extensions = [...extensions, lineNumbers()];\n\n return extensions;\n }\n );\n\n private _createEditorTask = task(\n { drop: true },\n async (\n element: HTMLElementWithEditor,\n {\n cspNonce,\n language,\n extraKeys,\n value,\n hasLineWrapping,\n isLintingEnabled,\n customExtensions,\n onLint,\n }: Pick<\n HdsCodeEditorSignature['Args']['Named'],\n | 'cspNonce'\n | 'language'\n | 'extraKeys'\n | 'value'\n | 'hasLineWrapping'\n | 'isLintingEnabled'\n | 'customExtensions'\n | 'onLint'\n >\n ) => {\n try {\n const { EditorState } = await import('@codemirror/state');\n\n const extensions = await this._buildExtensionsTask.perform({\n cspNonce,\n extraKeys,\n language,\n hasLineWrapping: hasLineWrapping ?? false,\n isLintingEnabled,\n customExtensions,\n onLint,\n });\n\n const state = EditorState.create({\n doc: value,\n extensions,\n });\n\n const editor = new EditorView({\n state,\n parent: element,\n });\n\n return editor;\n } catch (error) {\n console.error(\n `\\`hds-code-editor\\` modifier - Failed to setup the CodeMirror editor. Error: ${JSON.stringify(error)}`\n );\n }\n }\n );\n\n private _setupEditorMutationObserver() {\n this.mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.removedNodes.forEach((node) => {\n if (!(node instanceof HTMLElement)) {\n return;\n }\n\n const removedNodeContainsLintPanel =\n node.querySelector('.cm-panel-lint') !== null;\n\n if (removedNodeContainsLintPanel) {\n this.editor.focus();\n }\n });\n });\n });\n\n this.mutationObserver.observe(this.element, {\n childList: true,\n subtree: true,\n });\n }\n\n private _setupTask = task(\n { drop: true },\n async (\n element: HTMLElementWithEditor,\n _positional: PositionalArgs<HdsCodeEditorSignature>,\n named: NamedArgs<HdsCodeEditorSignature>\n ) => {\n const {\n onBlur,\n onInput,\n onLint,\n onSetup,\n ariaDescribedBy,\n ariaLabel,\n ariaLabelledBy,\n cspNonce,\n extraKeys,\n hasLineWrapping,\n isLintingEnabled,\n language,\n value,\n customExtensions,\n } = named;\n\n this.onInput = onInput;\n this.onBlur = onBlur;\n\n this.element = element;\n this.element.id = isEmpty(this.element.id)\n ? guidFor(this)\n : this.element.id;\n\n const editor = await this._createEditorTask.perform(element, {\n onLint,\n cspNonce,\n hasLineWrapping,\n isLintingEnabled,\n extraKeys,\n language,\n value,\n customExtensions,\n });\n\n if (editor === undefined) {\n return;\n }\n\n this.editor = editor;\n element.editor = editor;\n\n if (onBlur !== undefined) {\n this._setupEditorBlurHandler(element, onBlur);\n }\n\n let lintingDescriptionElement: HTMLParagraphElement | null = null;\n\n if (\n isLintingEnabled &&\n language !== undefined &&\n LANGUAGES[language]?.loadLinter !== undefined\n ) {\n // insert a new dom element above the editor\n lintingDescriptionElement = this._createLintingDescriptionElement();\n\n this._setupEditorMutationObserver();\n }\n\n this._setupEditorAriaAttributes(editor, {\n ariaDescribedBy,\n ariaLabel,\n ariaLabelledBy,\n lintingDescriptionElement: lintingDescriptionElement ?? undefined,\n });\n\n onSetup?.(this.editor);\n }\n );\n}\n"],"names":["defineStreamLanguage","streamParser","StreamLanguage","define","getCSPNonceFromMeta","meta","document","querySelector","undefined","content","getAttribute","match","LOADER_HEIGHT","LANGUAGES","rego","load","ruby","sentinel","shell","go","hcl","javascript","json","loadLinter","onLint","linter","default","markdown","sql","yaml","HdsCodeEditorModifier","Modifier","g","prototype","service","i","editor","element","onBlur","onInput","blurHandler","intersectionObserver","mutationObserver","lineWrappingCompartment","Compartment","constructor","owner","args","registerDestructor","disconnect","removeEventListener","modify","positional","named","hasLineWrapping","dispatch","effects","reconfigure","EditorView","lineWrapping","macroCondition","isTesting","_setupTask","perform","IntersectionObserver","entries","forEach","entry","isIntersecting","rootMargin","observe","_setupEditorBlurHandler","inputElement","event","addEventListener","_setupEditorAriaLabel","ariaLabel","ariaLabelledBy","assert","dom","setAttribute","_setupEditorAriaDescribedBy","ariaDescribedBy","lintingDescriptionElement","ariaDescribedByArray","push","id","join","_createLintingDescriptionElement","createElement","classList","add","textContent","hdsIntl","t","insertAdjacentElement","_setupEditorAriaAttributes","_loadLanguageExtensionsTask","_buildTask","context","generator","language","isLintingEnabled","validLanguageKeys","Object","keys","includes","extensionPromises","Promise","all","error","warn","JSON","stringify","drop","_buildExtensionsTask","cspNonce","extraKeys","customExtensions","keymap","lineNumbers","highlightActiveLineGutter","highlightSpecialChars","highlightActiveLine","defaultKeymap","history","historyKeymap","bracketMatching","syntaxHighlighting","languageExtensions","handleUpdateExtension","updateListener","of","update","selectionSet","view","toggle","state","selection","main","empty","docChanged","doc","toString","lineWrappingExtension","extensions","hdsDarkTheme","hdsDarkHighlightStyle","customKeyMap","map","key","value","run","nonce","_createEditorTask","EditorState","create","parent","console","_setupEditorMutationObserver","MutationObserver","mutations","mutation","removedNodes","node","HTMLElement","removedNodeContainsLintPanel","focus","childList","subtree","_positional","onSetup","isEmpty","guidFor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hds-code-editor.js","sources":["../../src/modifiers/hds-code-editor.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Modifier from 'ember-modifier';\nimport { assert, warn } from '@ember/debug';\nimport { registerDestructor } from '@ember/destroyable';\nimport { task } from 'ember-concurrency';\nimport { macroCondition, isTesting } from '@embroider/macros';\nimport { Compartment } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { guidFor } from '@ember/object/internals';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\n\n// hds-dark theme\nimport hdsDarkTheme from './hds-code-editor/themes/hds-dark-theme.ts';\nimport hdsDarkHighlightStyle from './hds-code-editor/highlight-styles/hds-dark-highlight-style.ts';\n\nimport type HdsIntlService from '../services/hds-intl.ts';\nimport type { HdsCodeEditorLanguages } from './hds-code-editor/types.ts';\nimport type { ArgsFor, PositionalArgs, NamedArgs } from 'ember-modifier';\nimport type {\n StreamLanguage as StreamLanguageType,\n StreamParser as StreamParserType,\n} from '@codemirror/language';\nimport type { Extension } from '@codemirror/state';\nimport type {\n EditorView as EditorViewType,\n KeyBinding,\n ViewUpdate,\n} from '@codemirror/view';\nimport type { Diagnostic as DiagnosticType } from '@codemirror/lint';\nimport type Owner from '@ember/owner';\n\ntype HTMLElementWithEditor = HTMLElement & { editor: EditorViewType };\n\ntype HdsCodeEditorBlurHandler = (\n editor: EditorViewType,\n event: FocusEvent\n) => void;\n\ninterface HdsCodeEditorExtraKeys {\n [key: string]: () => boolean;\n}\n\nexport interface HdsCodeEditorSignature {\n Args: {\n Named: {\n ariaDescribedBy?: string;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n cspNonce?: string;\n extraKeys?: HdsCodeEditorExtraKeys;\n customExtensions?: Extension[];\n hasLineWrapping?: boolean;\n isLintingEnabled?: boolean;\n language?: HdsCodeEditorLanguages;\n value?: string;\n onInput?: (newValue: string, editor: EditorViewType) => void;\n onBlur?: HdsCodeEditorBlurHandler;\n onLint?: (\n diagnostics: DiagnosticType[],\n newValue: string,\n editor: EditorViewType\n ) => void;\n onSetup?: (editor: EditorViewType) => unknown;\n };\n };\n}\n\nasync function defineStreamLanguage(streamParser: StreamParserType<unknown>) {\n const { StreamLanguage } = await import('@codemirror/language');\n\n return StreamLanguage.define(streamParser);\n}\n\nexport function getCSPNonceFromMeta(): string | undefined {\n const meta = document.querySelector(\n 'meta[http-equiv=\"Content-Security-Policy\"]'\n );\n\n if (meta === null) {\n return undefined;\n }\n\n const content = meta.getAttribute('content');\n\n if (content === null) {\n return undefined;\n }\n\n // searches for either \"style-src\" or \"script-src\" followed by anything until a token like 'nonce-<value>'\n const match = content.match(/(?:style-src|script-src)[^;]*'nonce-([^']+)'/);\n\n return match ? match[1] : undefined;\n}\n\nconst LOADER_HEIGHT = '164px';\n\nconst LANGUAGES: Record<\n HdsCodeEditorLanguages,\n {\n load: () => Promise<Extension | StreamLanguageType<unknown>>;\n loadLinter?: (\n onLint?: HdsCodeEditorSignature['Args']['Named']['onLint']\n ) => Promise<Extension>;\n }\n> = {\n rego: {\n load: async () => {\n const { rego } = await import('./hds-code-editor/languages/rego.ts');\n return defineStreamLanguage(rego);\n },\n },\n ruby: {\n load: async () => {\n const { ruby } = await import('@codemirror/legacy-modes/mode/ruby');\n return defineStreamLanguage(ruby);\n },\n },\n sentinel: {\n load: async () => {\n const { sentinel } = await import(\n './hds-code-editor/languages/sentinel.ts'\n );\n return defineStreamLanguage(sentinel);\n },\n },\n shell: {\n load: async () => {\n const { shell } = await import('@codemirror/legacy-modes/mode/shell');\n return defineStreamLanguage(shell);\n },\n },\n go: {\n load: async () => (await import('@codemirror/lang-go')).go(),\n },\n hcl: {\n load: async () => (await import('codemirror-lang-hcl')).hcl(),\n },\n javascript: {\n load: async () =>\n (await import('@codemirror/lang-javascript')).javascript(),\n },\n json: {\n load: async () => (await import('@codemirror/lang-json')).json(),\n loadLinter: async (onLint) => {\n const linter = await import('./hds-code-editor/linters/json-linter.ts');\n\n return linter.default(onLint);\n },\n },\n markdown: {\n load: async () => (await import('@codemirror/lang-markdown')).markdown(),\n },\n sql: {\n load: async () => (await import('@codemirror/lang-sql')).sql(),\n },\n yaml: {\n load: async () => (await import('@codemirror/lang-yaml')).yaml(),\n },\n} as const;\n\nexport default class HdsCodeEditorModifier extends Modifier<HdsCodeEditorSignature> {\n @service declare hdsIntl: HdsIntlService;\n\n editor!: EditorViewType;\n element!: HTMLElementWithEditor;\n\n onBlur: HdsCodeEditorSignature['Args']['Named']['onBlur'];\n onInput: HdsCodeEditorSignature['Args']['Named']['onInput'];\n\n blurHandler!: (event: FocusEvent) => void;\n intersectionObserver!: IntersectionObserver;\n mutationObserver!: MutationObserver;\n\n lineWrappingCompartment = new Compartment();\n\n constructor(owner: Owner, args: ArgsFor<HdsCodeEditorSignature>) {\n super(owner, args);\n\n registerDestructor(this, () => {\n this.intersectionObserver?.disconnect();\n this.mutationObserver?.disconnect();\n\n if (this.onBlur !== undefined) {\n this.element.removeEventListener('blur', this.blurHandler);\n }\n });\n }\n\n modify(\n element: HTMLElementWithEditor,\n positional: PositionalArgs<HdsCodeEditorSignature>,\n named: NamedArgs<HdsCodeEditorSignature>\n ): void {\n const { hasLineWrapping = false } = named;\n\n // if the editor already exists, update the line wrapping\n if (this.editor) {\n this.editor.dispatch({\n effects: this.lineWrappingCompartment.reconfigure(\n hasLineWrapping ? EditorView.lineWrapping : []\n ),\n });\n }\n // if the editor does not exist, setup the editor\n else {\n // the intersection observer makes loading unreliable in tests\n if (macroCondition(isTesting())) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._setupTask.perform(element, positional, named);\n } else {\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting && this.editor === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._setupTask.perform(element, positional, named);\n }\n });\n },\n {\n rootMargin: LOADER_HEIGHT,\n }\n );\n\n this.intersectionObserver.observe(element);\n }\n }\n }\n\n private _setupEditorBlurHandler(\n element: HTMLElementWithEditor,\n onBlur: HdsCodeEditorBlurHandler\n ) {\n const inputElement = element.querySelector('.cm-content');\n\n if (inputElement === null) {\n return;\n }\n\n this.blurHandler = (event: FocusEvent) => onBlur(this.editor, event);\n\n (inputElement as HTMLElement).addEventListener('blur', this.blurHandler);\n }\n\n private _setupEditorAriaLabel(\n editor: EditorViewType,\n {\n ariaLabel,\n ariaLabelledBy,\n }: Pick<\n HdsCodeEditorSignature['Args']['Named'],\n 'ariaLabel' | 'ariaLabelledBy'\n >\n ) {\n assert(\n '`hds-code-editor` modifier - Either `ariaLabel` or `ariaLabelledBy` must be provided',\n ariaLabel !== undefined || ariaLabelledBy !== undefined\n );\n\n if (ariaLabel !== undefined) {\n editor.dom\n .querySelector('[role=\"textbox\"]')\n ?.setAttribute('aria-label', ariaLabel);\n } else if (ariaLabelledBy !== undefined) {\n editor.dom\n .querySelector('[role=\"textbox\"]')\n ?.setAttribute('aria-labelledby', ariaLabelledBy);\n }\n }\n\n private _setupEditorAriaDescribedBy(\n editor: EditorViewType,\n {\n ariaDescribedBy,\n lintingDescriptionElement,\n }: {\n ariaDescribedBy?: string;\n lintingDescriptionElement?: HTMLParagraphElement;\n }\n ) {\n if (\n ariaDescribedBy === undefined &&\n lintingDescriptionElement === undefined\n ) {\n return;\n }\n\n const ariaDescribedByArray = [];\n\n if (ariaDescribedBy !== undefined) {\n ariaDescribedByArray.push(ariaDescribedBy);\n }\n\n if (lintingDescriptionElement !== undefined) {\n ariaDescribedByArray.push(lintingDescriptionElement.id);\n }\n\n editor.dom\n .querySelector('[role=\"textbox\"]')\n ?.setAttribute('aria-describedby', ariaDescribedByArray.join(' '));\n }\n\n private _createLintingDescriptionElement(): HTMLParagraphElement {\n const element = document.createElement('p');\n\n element.id = `lint-panel-instructions-${this.element.id}`;\n element.classList.add('sr-only');\n element.textContent = this.hdsIntl.t(\n 'hds.modifiers.hds-code-editor.lint-panel-description',\n {\n default:\n 'Press `Ctrl-Shift-m` (`Cmd-Shift-m` on macOS) while focus is on the textbox to open the linting panel',\n }\n );\n\n this.element.insertAdjacentElement('beforebegin', element);\n\n return element;\n }\n\n private _setupEditorAriaAttributes(\n editor: EditorViewType,\n {\n ariaDescribedBy,\n ariaLabel,\n ariaLabelledBy,\n lintingDescriptionElement,\n }: Pick<\n HdsCodeEditorSignature['Args']['Named'],\n 'ariaDescribedBy' | 'ariaLabel' | 'ariaLabelledBy'\n > & { lintingDescriptionElement?: HTMLParagraphElement }\n ) {\n this._setupEditorAriaLabel(editor, { ariaLabel, ariaLabelledBy });\n this._setupEditorAriaDescribedBy(editor, {\n ariaDescribedBy,\n lintingDescriptionElement,\n });\n }\n\n private _loadLanguageExtensionsTask = task(\n { drop: true },\n async ({\n language,\n isLintingEnabled,\n onLint,\n }: {\n language?: HdsCodeEditorLanguages;\n isLintingEnabled?: boolean;\n onLint?: HdsCodeEditorSignature['Args']['Named']['onLint'];\n }) => {\n if (language === undefined) {\n return;\n }\n\n try {\n const validLanguageKeys = Object.keys(LANGUAGES);\n\n assert(\n `\\`hds-code-editor\\` modifier - \\`language\\` must be one of the following: ${validLanguageKeys.join(\n ', '\n )}; received: ${language}`,\n validLanguageKeys.includes(language)\n );\n\n let extensionPromises = [LANGUAGES[language].load()];\n\n if (isLintingEnabled && LANGUAGES[language].loadLinter) {\n extensionPromises = [\n ...extensionPromises,\n LANGUAGES[language].loadLinter(onLint),\n ];\n }\n\n return Promise.all(extensionPromises);\n } catch (error) {\n warn(\n `\\`hds-code-editor\\` modifier - Failed to dynamically import the CodeMirror language module for '${language}'. Error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-code-editor.load-language-task.import-failed',\n }\n );\n }\n }\n );\n\n private _buildExtensionsTask = task(\n { drop: true },\n async ({\n cspNonce,\n extraKeys,\n language,\n hasLineWrapping,\n isLintingEnabled,\n customExtensions,\n onLint,\n }: Pick<\n HdsCodeEditorSignature['Args']['Named'],\n | 'cspNonce'\n | 'extraKeys'\n | 'language'\n | 'hasLineWrapping'\n | 'isLintingEnabled'\n | 'customExtensions'\n | 'onLint'\n >) => {\n const [\n {\n keymap,\n lineNumbers,\n highlightActiveLineGutter,\n highlightSpecialChars,\n highlightActiveLine,\n },\n { defaultKeymap, history, historyKeymap },\n { bracketMatching, syntaxHighlighting },\n ] = await Promise.all([\n import('@codemirror/view'),\n import('@codemirror/commands'),\n import('@codemirror/language'),\n ]);\n\n const languageExtensions = await this._loadLanguageExtensionsTask.perform(\n {\n language,\n isLintingEnabled,\n onLint,\n }\n );\n\n const handleUpdateExtension = EditorView.updateListener.of(\n (update: ViewUpdate) => {\n // toggle a class if the update has/does not have a selection\n if (update.selectionSet) {\n update.view.dom.classList.toggle(\n 'cm-hasSelection',\n !update.state.selection.main.empty\n );\n }\n\n // call the onInput callback if the document has changed\n if (!update.docChanged || this.onInput === undefined) {\n return;\n }\n this.onInput(update.state.doc.toString(), update.view);\n }\n );\n\n const lineWrappingExtension = this.lineWrappingCompartment.of(\n hasLineWrapping ? EditorView.lineWrapping : []\n );\n\n let extensions: Extension[] = [\n lineWrappingExtension,\n bracketMatching(),\n highlightActiveLine(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n keymap.of([...defaultKeymap, ...historyKeymap]),\n // custom extensions\n handleUpdateExtension,\n // user-provided extensions\n ...(customExtensions ?? []),\n // hds dark theme\n hdsDarkTheme,\n syntaxHighlighting(hdsDarkHighlightStyle),\n ];\n\n if (extraKeys !== undefined) {\n const customKeyMap = Object.entries(extraKeys).map(([key, value]) => ({\n key: key,\n run: value,\n }));\n\n extensions = [keymap.of(customKeyMap as KeyBinding[]), ...extensions];\n }\n\n if (languageExtensions !== undefined) {\n extensions = [...extensions, ...languageExtensions];\n }\n\n // add nonce to the editor view if it exists\n const nonce = cspNonce ?? getCSPNonceFromMeta();\n\n if (nonce !== undefined) {\n extensions = [...extensions, EditorView.cspNonce.of(nonce)];\n }\n\n // ensure we add lineNumber last in the stack to create the right gutter order for linting\n extensions = [...extensions, lineNumbers()];\n\n return extensions;\n }\n );\n\n private _createEditorTask = task(\n { drop: true },\n async (\n element: HTMLElementWithEditor,\n {\n cspNonce,\n language,\n extraKeys,\n value,\n hasLineWrapping,\n isLintingEnabled,\n customExtensions,\n onLint,\n }: Pick<\n HdsCodeEditorSignature['Args']['Named'],\n | 'cspNonce'\n | 'language'\n | 'extraKeys'\n | 'value'\n | 'hasLineWrapping'\n | 'isLintingEnabled'\n | 'customExtensions'\n | 'onLint'\n >\n ) => {\n try {\n const { EditorState } = await import('@codemirror/state');\n\n const extensions = await this._buildExtensionsTask.perform({\n cspNonce,\n extraKeys,\n language,\n hasLineWrapping: hasLineWrapping ?? false,\n isLintingEnabled,\n customExtensions,\n onLint,\n });\n\n const state = EditorState.create({\n doc: value,\n extensions,\n });\n\n const editor = new EditorView({\n state,\n parent: element,\n });\n\n return editor;\n } catch (error) {\n console.error(\n `\\`hds-code-editor\\` modifier - Failed to setup the CodeMirror editor. Error: ${JSON.stringify(error)}`\n );\n }\n }\n );\n\n private _setupEditorMutationObserver() {\n this.mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.removedNodes.forEach((node) => {\n if (!(node instanceof HTMLElement)) {\n return;\n }\n\n const removedNodeContainsLintPanel =\n node.querySelector('.cm-panel-lint') !== null;\n\n if (removedNodeContainsLintPanel) {\n this.editor.focus();\n }\n });\n });\n });\n\n this.mutationObserver.observe(this.element, {\n childList: true,\n subtree: true,\n });\n }\n\n private _setupTask = task(\n { drop: true },\n async (\n element: HTMLElementWithEditor,\n _positional: PositionalArgs<HdsCodeEditorSignature>,\n named: NamedArgs<HdsCodeEditorSignature>\n ) => {\n const {\n onBlur,\n onInput,\n onLint,\n onSetup,\n ariaDescribedBy,\n ariaLabel,\n ariaLabelledBy,\n cspNonce,\n extraKeys,\n hasLineWrapping,\n isLintingEnabled,\n language,\n value,\n customExtensions,\n } = named;\n\n this.onInput = onInput;\n this.onBlur = onBlur;\n\n this.element = element;\n this.element.id = isEmpty(this.element.id)\n ? guidFor(this)\n : this.element.id;\n\n const editor = await this._createEditorTask.perform(element, {\n onLint,\n cspNonce,\n hasLineWrapping,\n isLintingEnabled,\n extraKeys,\n language,\n value,\n customExtensions,\n });\n\n if (editor === undefined) {\n return;\n }\n\n this.editor = editor;\n element.editor = editor;\n\n if (onBlur !== undefined) {\n this._setupEditorBlurHandler(element, onBlur);\n }\n\n let lintingDescriptionElement: HTMLParagraphElement | null = null;\n\n if (\n isLintingEnabled &&\n language !== undefined &&\n LANGUAGES[language]?.loadLinter !== undefined\n ) {\n // insert a new dom element above the editor\n lintingDescriptionElement = this._createLintingDescriptionElement();\n\n this._setupEditorMutationObserver();\n }\n\n this._setupEditorAriaAttributes(editor, {\n ariaDescribedBy,\n ariaLabel,\n ariaLabelledBy,\n lintingDescriptionElement: lintingDescriptionElement ?? undefined,\n });\n\n onSetup?.(this.editor);\n }\n );\n}\n"],"names":["defineStreamLanguage","streamParser","StreamLanguage","define","getCSPNonceFromMeta","meta","document","querySelector","undefined","content","getAttribute","match","LOADER_HEIGHT","LANGUAGES","rego","load","ruby","sentinel","shell","go","hcl","javascript","json","loadLinter","onLint","linter","default","markdown","sql","yaml","HdsCodeEditorModifier","Modifier","g","prototype","service","i","void 0","editor","element","onBlur","onInput","blurHandler","intersectionObserver","mutationObserver","lineWrappingCompartment","Compartment","constructor","owner","args","registerDestructor","disconnect","removeEventListener","modify","positional","named","hasLineWrapping","dispatch","effects","reconfigure","EditorView","lineWrapping","macroCondition","isTesting","_setupTask","perform","IntersectionObserver","entries","forEach","entry","isIntersecting","rootMargin","observe","_setupEditorBlurHandler","inputElement","event","addEventListener","_setupEditorAriaLabel","ariaLabel","ariaLabelledBy","assert","dom","setAttribute","_setupEditorAriaDescribedBy","ariaDescribedBy","lintingDescriptionElement","ariaDescribedByArray","push","id","join","_createLintingDescriptionElement","createElement","classList","add","textContent","hdsIntl","t","insertAdjacentElement","_setupEditorAriaAttributes","_loadLanguageExtensionsTask","_buildTask","context","generator","language","isLintingEnabled","validLanguageKeys","Object","keys","includes","extensionPromises","Promise","all","error","warn","JSON","stringify","drop","_buildExtensionsTask","cspNonce","extraKeys","customExtensions","keymap","lineNumbers","highlightActiveLineGutter","highlightSpecialChars","highlightActiveLine","defaultKeymap","history","historyKeymap","bracketMatching","syntaxHighlighting","languageExtensions","handleUpdateExtension","updateListener","of","update","selectionSet","view","toggle","state","selection","main","empty","docChanged","doc","toString","lineWrappingExtension","extensions","hdsDarkTheme","hdsDarkHighlightStyle","customKeyMap","map","key","value","run","nonce","_createEditorTask","EditorState","create","parent","console","_setupEditorMutationObserver","MutationObserver","mutations","mutation","removedNodes","node","HTMLElement","removedNodeContainsLintPanel","focus","childList","subtree","_positional","onSetup","isEmpty","guidFor"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hds-intl.js","sources":["../../src/services/hds-intl.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Service from '@ember/service';\nimport { getOwner } from '@ember/owner';\nimport { isPresent } from '@ember/utils';\nimport { assert } from '@ember/debug';\n\nimport type { IntlService } from 'ember-intl';\
|
|
1
|
+
{"version":3,"file":"hds-intl.js","sources":["../../src/services/hds-intl.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Service from '@ember/service';\nimport { getOwner } from '@ember/owner';\nimport { isPresent } from '@ember/utils';\nimport { assert } from '@ember/debug';\n\nimport type { IntlService } from 'ember-intl';\nimport type { FormatMessageParameters } from 'ember-intl/-private/formatjs';\n\nexport type HdsIntlTOptions = FormatMessageParameters[1] & {\n default: string;\n htmlSafe?: boolean | undefined;\n locale?: string | undefined;\n};\n\nexport default class HdsIntlService extends Service {\n get intl(): IntlService | undefined {\n const owner = getOwner(this);\n\n if (\n typeof owner?.factoryFor === 'function' &&\n owner.factoryFor('service:intl')\n ) {\n return owner.lookup('service:intl');\n }\n\n return undefined;\n }\n\n t(key: string, options: HdsIntlTOptions): string {\n const { default: defaultString, ...restOptions } = options;\n\n assert(\n 'HdsIntlService requires a key as the first positional argument',\n typeof key === 'string' && isPresent(key)\n );\n\n // try to use ember-intl if available and a translation key exists\n if (this.intl !== undefined) {\n const localeIsSet = this.intl.locales && this.intl.locales.length > 0;\n\n if (localeIsSet && this.intl.exists(key)) {\n return this.intl.t(key, restOptions);\n }\n }\n\n return defaultString;\n }\n}\n"],"names":["HdsIntlService","Service","intl","owner","getOwner","factoryFor","lookup","undefined","t","key","options","default","defaultString","restOptions","assert","isPresent","localeIsSet","locales","length","exists"],"mappings":";;;;;AAAA;AACA;AACA;AACA;;AAgBe,MAAMA,cAAc,SAASC,OAAO,CAAC;EAClD,IAAIC,IAAIA,GAA4B;AAClC,IAAA,MAAMC,KAAK,GAAGC,QAAQ,CAAC,IAAI,CAAC;AAE5B,IAAA,IACE,OAAOD,KAAK,EAAEE,UAAU,KAAK,UAAU,IACvCF,KAAK,CAACE,UAAU,CAAC,cAAc,CAAC,EAChC;AACA,MAAA,OAAOF,KAAK,CAACG,MAAM,CAAC,cAAc,CAAC;AACrC,IAAA;AAEA,IAAA,OAAOC,SAAS;AAClB,EAAA;AAEAC,EAAAA,CAACA,CAACC,GAAW,EAAEC,OAAwB,EAAU;IAC/C,MAAM;AAAEC,MAAAA,OAAO,EAAEC,aAAa;MAAE,GAAGC;AAAY,KAAC,GAAGH,OAAO;AAE1DI,IAAAA,MAAM,CACJ,gEAAgE,EAChE,OAAOL,GAAG,KAAK,QAAQ,IAAIM,SAAS,CAACN,GAAG,CAC1C,CAAC;;AAED;AACA,IAAA,IAAI,IAAI,CAACP,IAAI,KAAKK,SAAS,EAAE;AAC3B,MAAA,MAAMS,WAAW,GAAG,IAAI,CAACd,IAAI,CAACe,OAAO,IAAI,IAAI,CAACf,IAAI,CAACe,OAAO,CAACC,MAAM,GAAG,CAAC;MAErE,IAAIF,WAAW,IAAI,IAAI,CAACd,IAAI,CAACiB,MAAM,CAACV,GAAG,CAAC,EAAE;QACxC,OAAO,IAAI,CAACP,IAAI,CAACM,CAAC,CAACC,GAAG,EAAEI,WAAW,CAAC;AACtC,MAAA;AACF,IAAA;AAEA,IAAA,OAAOD,aAAa;AACtB,EAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hds-time.js","sources":["../../src/services/hds-time.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Service from '@ember/service';\nimport { dropTask, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { DateTime } from 'luxon';\nimport { isTesting } from '@embroider/macros';\nimport type {\n DisplayType,\n DefaultDisplayType,\n DisplayFormatType,\n} from './hds-time-types.ts';\n\nexport const MILLISECOND_IN_MS = 1;\nexport const SECOND_IN_MS = 1000 * MILLISECOND_IN_MS;\nexport const MINUTE_IN_MS = 60 * SECOND_IN_MS;\nexport const HOUR_IN_MS = 60 * MINUTE_IN_MS;\nexport const DAY_IN_MS = 24 * HOUR_IN_MS;\nexport const WEEK_IN_MS = 7 * DAY_IN_MS;\n\nexport const THRESHOLD_RELATIVE_TIME_IN_MS = WEEK_IN_MS;\n\nexport enum HdsTimeRelativeUnitValues {\n Second = 'second',\n Hour = 'hour',\n Minute = 'minute',\n Day = 'day',\n Week = 'week',\n}\n\nexport const DEFAULT_RELATIVE_THRESHOLDS = {\n [HdsTimeRelativeUnitValues.Second]: 1 * MINUTE_IN_MS,\n [HdsTimeRelativeUnitValues.Minute]: 1 * HOUR_IN_MS,\n [HdsTimeRelativeUnitValues.Hour]: 1 * DAY_IN_MS,\n [HdsTimeRelativeUnitValues.Day]: 100 * WEEK_IN_MS,\n};\n\nexport enum HdsDisplayKeyValues {\n FriendlyRelative = 'friendly-relative', // Example: 'Sep 5, 2018 (30 minutes ago)'\n FriendlyLocal = 'friendly-local', // Example: 'Sep 5, 2018, 4:07:32 pm'\n FriendlyOnly = 'friendly-only', // Example: 'Sep 5, 2018'\n Relative = 'relative', // Example: 'in 7 days'\n Utc = 'utc', // Example: '2018-09-05T23:15:17345Z'\n}\n\nexport const FORMAT_PRECISION_SHORT_DATE: DisplayFormatType = {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n};\nexport const FORMAT_PRECISION_MINUTE: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n};\nexport const FORMAT_PRECISION_SECOND: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n};\nexport const DATE_DISPLAY_FORMATS: {\n [x: string]: DisplayFormatType;\n} = {\n [HdsDisplayKeyValues.FriendlyLocal]: FORMAT_PRECISION_SECOND,\n [HdsDisplayKeyValues.FriendlyOnly]: FORMAT_PRECISION_SHORT_DATE,\n};\n\nexport const DEFAULT_DISPLAY = '';\n\nexport const DEFAULT_DISPLAY_MAPPING: {\n [x: string]: DefaultDisplayType;\n} = {\n [HdsDisplayKeyValues.FriendlyRelative]: {\n displayFormat: FORMAT_PRECISION_SHORT_DATE,\n showFriendly: true,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_SECOND,\n },\n [HdsDisplayKeyValues.FriendlyLocal]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyLocal],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.FriendlyOnly]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyOnly],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.Relative]: {\n displayFormat: null,\n showFriendly: false,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_MINUTE,\n },\n [HdsDisplayKeyValues.Utc]: {\n displayFormat: null,\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n};\n\nexport const DISPLAY_SCALE = Object.keys(DEFAULT_DISPLAY_MAPPING);\n\nexport const DISPLAYS = [\n HdsDisplayKeyValues.FriendlyRelative,\n HdsDisplayKeyValues.FriendlyLocal,\n HdsDisplayKeyValues.FriendlyOnly,\n HdsDisplayKeyValues.Relative,\n HdsDisplayKeyValues.Utc,\n];\n\nexport default class TimeService extends Service {\n #listeners = new Set<Date>();\n\n @tracked now = Date.now();\n\n format(\n difference: {\n absValueInMs: number;\n valueInMs: number;\n },\n display = DEFAULT_DISPLAY\n ): DisplayType {\n let displayKey;\n // If the scale display is defined and valid then set that display.\n if (display && DISPLAY_SCALE.includes(display)) {\n displayKey = display;\n } else {\n // If there's no defined display then we will execute the design system's\n // prefered algorithm.\n\n // By default, we assume we will display just a relative display only.\n displayKey = HdsDisplayKeyValues.Relative;\n\n // If the difference in date is greater than the threshold for showing the\n // relative time then switch the display key.\n if (difference.absValueInMs > THRESHOLD_RELATIVE_TIME_IN_MS) {\n displayKey = HdsDisplayKeyValues.FriendlyLocal;\n }\n }\n\n const options: DefaultDisplayType | undefined =\n DEFAULT_DISPLAY_MAPPING[displayKey];\n\n return {\n options,\n difference,\n relative: this.selectTimeRelativeUnit(difference),\n };\n }\n\n // Formats the value of a relative unit.\n formatTimeRelativeUnit(\n value: number,\n unit: Intl.RelativeTimeFormatUnit\n ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n return {\n value: Math.trunc(value),\n unit,\n };\n }\n\n // Selects an appropriate display format for the difference.\n selectTimeRelativeUnit(\n { absValueInMs, valueInMs }: { absValueInMs: number; valueInMs: number },\n thresholds: {\n second: number;\n minute: number;\n hour: number;\n day: number;\n } = DEFAULT_RELATIVE_THRESHOLDS\n ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Second]) {\n return this.formatTimeRelativeUnit(\n valueInMs / SECOND_IN_MS,\n HdsTimeRelativeUnitValues.Second\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Minute]) {\n return this.formatTimeRelativeUnit(\n valueInMs / MINUTE_IN_MS,\n HdsTimeRelativeUnitValues.Minute\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Hour]) {\n return this.formatTimeRelativeUnit(\n valueInMs / HOUR_IN_MS,\n HdsTimeRelativeUnitValues.Hour\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Day]) {\n return this.formatTimeRelativeUnit(\n valueInMs / DAY_IN_MS,\n HdsTimeRelativeUnitValues.Day\n );\n }\n\n return this.formatTimeRelativeUnit(\n valueInMs / WEEK_IN_MS,\n HdsTimeRelativeUnitValues.Week\n );\n }\n\n // Gets the currently subscribed listeners.\n timeDifference(\n startDate: number,\n endDate: Date\n ): { absValueInMs: number; valueInMs: number } {\n const valueInMs = Number(endDate) - Number(startDate);\n return {\n absValueInMs: Math.abs(valueInMs),\n valueInMs,\n };\n }\n\n // Subscribes a listener to the ticking task for time changes.\n register(id: Date): () => void {\n this.#listeners.add(id);\n\n void this.start.perform();\n\n return (): void => {\n this.unregister(id);\n };\n }\n\n // Unregisters listener for the time task.\n unregister(id: Date): boolean {\n return this.#listeners.delete(id);\n }\n\n start = dropTask(async () => {\n while (this.listeners.size) {\n this.now = Date.now();\n // When testing and canceling a EC task, a timer will never resolve and\n // cause the test to hang while waiting for a permanently hanging timeout.\n // This condition breaks the test out of that.\n // via: http://ember-concurrency.com/docs/testing-debugging/\n if (isTesting()) return;\n await timeout(SECOND_IN_MS);\n }\n });\n\n // Transforms a JS date to a string representing the UTC ISO date.\n toIsoUtcString(date: Date): string | undefined {\n try {\n return DateTime.fromJSDate(date).toUTC().toJSDate().toISOString();\n } catch (error) {\n console.error('Error: Could not convert date to ISO UTC string; ', error);\n }\n }\n\n // Gets the currently subscribed listeners.\n get listeners(): Set<Date> {\n return this.#listeners;\n }\n}\n"],"names":["MILLISECOND_IN_MS","SECOND_IN_MS","MINUTE_IN_MS","HOUR_IN_MS","DAY_IN_MS","WEEK_IN_MS","THRESHOLD_RELATIVE_TIME_IN_MS","HdsTimeRelativeUnitValues","DEFAULT_RELATIVE_THRESHOLDS","Second","Minute","Hour","Day","HdsDisplayKeyValues","FORMAT_PRECISION_SHORT_DATE","month","day","year","FORMAT_PRECISION_MINUTE","hour","minute","FORMAT_PRECISION_SECOND","second","timeZoneName","DATE_DISPLAY_FORMATS","FriendlyLocal","FriendlyOnly","DEFAULT_DISPLAY","DEFAULT_DISPLAY_MAPPING","FriendlyRelative","displayFormat","showFriendly","showRelative","tooltipFormat","Relative","Utc","DISPLAY_SCALE","Object","keys","DISPLAYS","TimeService","Service","Set","g","prototype","tracked","Date","now","i","format","difference","display","displayKey","includes","absValueInMs","options","relative","selectTimeRelativeUnit","formatTimeRelativeUnit","value","unit","Math","trunc","valueInMs","thresholds","Week","timeDifference","startDate","endDate","Number","abs","register","id","add","start","perform","unregister","delete","_buildTask","context","generator","listeners","size","isTesting","timeout","toIsoUtcString","date","DateTime","fromJSDate","toUTC","toJSDate","toISOString","error","console"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hds-time.js","sources":["../../src/services/hds-time.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Service from '@ember/service';\nimport { dropTask, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { DateTime } from 'luxon';\nimport { isTesting } from '@embroider/macros';\nimport type {\n DisplayType,\n DefaultDisplayType,\n DisplayFormatType,\n} from './hds-time-types.ts';\n\nexport const MILLISECOND_IN_MS = 1;\nexport const SECOND_IN_MS = 1000 * MILLISECOND_IN_MS;\nexport const MINUTE_IN_MS = 60 * SECOND_IN_MS;\nexport const HOUR_IN_MS = 60 * MINUTE_IN_MS;\nexport const DAY_IN_MS = 24 * HOUR_IN_MS;\nexport const WEEK_IN_MS = 7 * DAY_IN_MS;\n\nexport const THRESHOLD_RELATIVE_TIME_IN_MS = WEEK_IN_MS;\n\nexport enum HdsTimeRelativeUnitValues {\n Second = 'second',\n Hour = 'hour',\n Minute = 'minute',\n Day = 'day',\n Week = 'week',\n}\n\nexport const DEFAULT_RELATIVE_THRESHOLDS = {\n [HdsTimeRelativeUnitValues.Second]: 1 * MINUTE_IN_MS,\n [HdsTimeRelativeUnitValues.Minute]: 1 * HOUR_IN_MS,\n [HdsTimeRelativeUnitValues.Hour]: 1 * DAY_IN_MS,\n [HdsTimeRelativeUnitValues.Day]: 100 * WEEK_IN_MS,\n};\n\nexport enum HdsDisplayKeyValues {\n FriendlyRelative = 'friendly-relative', // Example: 'Sep 5, 2018 (30 minutes ago)'\n FriendlyLocal = 'friendly-local', // Example: 'Sep 5, 2018, 4:07:32 pm'\n FriendlyOnly = 'friendly-only', // Example: 'Sep 5, 2018'\n Relative = 'relative', // Example: 'in 7 days'\n Utc = 'utc', // Example: '2018-09-05T23:15:17345Z'\n}\n\nexport const FORMAT_PRECISION_SHORT_DATE: DisplayFormatType = {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n};\nexport const FORMAT_PRECISION_MINUTE: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n};\nexport const FORMAT_PRECISION_SECOND: DisplayFormatType = {\n ...FORMAT_PRECISION_SHORT_DATE,\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n timeZoneName: 'short',\n};\nexport const DATE_DISPLAY_FORMATS: {\n [x: string]: DisplayFormatType;\n} = {\n [HdsDisplayKeyValues.FriendlyLocal]: FORMAT_PRECISION_SECOND,\n [HdsDisplayKeyValues.FriendlyOnly]: FORMAT_PRECISION_SHORT_DATE,\n};\n\nexport const DEFAULT_DISPLAY = '';\n\nexport const DEFAULT_DISPLAY_MAPPING: {\n [x: string]: DefaultDisplayType;\n} = {\n [HdsDisplayKeyValues.FriendlyRelative]: {\n displayFormat: FORMAT_PRECISION_SHORT_DATE,\n showFriendly: true,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_SECOND,\n },\n [HdsDisplayKeyValues.FriendlyLocal]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyLocal],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.FriendlyOnly]: {\n displayFormat: DATE_DISPLAY_FORMATS[HdsDisplayKeyValues.FriendlyOnly],\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n [HdsDisplayKeyValues.Relative]: {\n displayFormat: null,\n showFriendly: false,\n showRelative: true,\n tooltipFormat: FORMAT_PRECISION_MINUTE,\n },\n [HdsDisplayKeyValues.Utc]: {\n displayFormat: null,\n showFriendly: true,\n showRelative: false,\n tooltipFormat: null,\n },\n};\n\nexport const DISPLAY_SCALE = Object.keys(DEFAULT_DISPLAY_MAPPING);\n\nexport const DISPLAYS = [\n HdsDisplayKeyValues.FriendlyRelative,\n HdsDisplayKeyValues.FriendlyLocal,\n HdsDisplayKeyValues.FriendlyOnly,\n HdsDisplayKeyValues.Relative,\n HdsDisplayKeyValues.Utc,\n];\n\nexport default class TimeService extends Service {\n #listeners = new Set<Date>();\n\n @tracked now = Date.now();\n\n format(\n difference: {\n absValueInMs: number;\n valueInMs: number;\n },\n display = DEFAULT_DISPLAY\n ): DisplayType {\n let displayKey;\n // If the scale display is defined and valid then set that display.\n if (display && DISPLAY_SCALE.includes(display)) {\n displayKey = display;\n } else {\n // If there's no defined display then we will execute the design system's\n // prefered algorithm.\n\n // By default, we assume we will display just a relative display only.\n displayKey = HdsDisplayKeyValues.Relative;\n\n // If the difference in date is greater than the threshold for showing the\n // relative time then switch the display key.\n if (difference.absValueInMs > THRESHOLD_RELATIVE_TIME_IN_MS) {\n displayKey = HdsDisplayKeyValues.FriendlyLocal;\n }\n }\n\n const options: DefaultDisplayType | undefined =\n DEFAULT_DISPLAY_MAPPING[displayKey];\n\n return {\n options,\n difference,\n relative: this.selectTimeRelativeUnit(difference),\n };\n }\n\n // Formats the value of a relative unit.\n formatTimeRelativeUnit(\n value: number,\n unit: Intl.RelativeTimeFormatUnit\n ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n return {\n value: Math.trunc(value),\n unit,\n };\n }\n\n // Selects an appropriate display format for the difference.\n selectTimeRelativeUnit(\n { absValueInMs, valueInMs }: { absValueInMs: number; valueInMs: number },\n thresholds: {\n second: number;\n minute: number;\n hour: number;\n day: number;\n } = DEFAULT_RELATIVE_THRESHOLDS\n ): { value: number; unit: Intl.RelativeTimeFormatUnit } {\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Second]) {\n return this.formatTimeRelativeUnit(\n valueInMs / SECOND_IN_MS,\n HdsTimeRelativeUnitValues.Second\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Minute]) {\n return this.formatTimeRelativeUnit(\n valueInMs / MINUTE_IN_MS,\n HdsTimeRelativeUnitValues.Minute\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Hour]) {\n return this.formatTimeRelativeUnit(\n valueInMs / HOUR_IN_MS,\n HdsTimeRelativeUnitValues.Hour\n );\n }\n\n if (absValueInMs < thresholds[HdsTimeRelativeUnitValues.Day]) {\n return this.formatTimeRelativeUnit(\n valueInMs / DAY_IN_MS,\n HdsTimeRelativeUnitValues.Day\n );\n }\n\n return this.formatTimeRelativeUnit(\n valueInMs / WEEK_IN_MS,\n HdsTimeRelativeUnitValues.Week\n );\n }\n\n // Gets the currently subscribed listeners.\n timeDifference(\n startDate: number,\n endDate: Date\n ): { absValueInMs: number; valueInMs: number } {\n const valueInMs = Number(endDate) - Number(startDate);\n return {\n absValueInMs: Math.abs(valueInMs),\n valueInMs,\n };\n }\n\n // Subscribes a listener to the ticking task for time changes.\n register(id: Date): () => void {\n this.#listeners.add(id);\n\n void this.start.perform();\n\n return (): void => {\n this.unregister(id);\n };\n }\n\n // Unregisters listener for the time task.\n unregister(id: Date): boolean {\n return this.#listeners.delete(id);\n }\n\n start = dropTask(async () => {\n while (this.listeners.size) {\n this.now = Date.now();\n // When testing and canceling a EC task, a timer will never resolve and\n // cause the test to hang while waiting for a permanently hanging timeout.\n // This condition breaks the test out of that.\n // via: http://ember-concurrency.com/docs/testing-debugging/\n if (isTesting()) return;\n await timeout(SECOND_IN_MS);\n }\n });\n\n // Transforms a JS date to a string representing the UTC ISO date.\n toIsoUtcString(date: Date): string | undefined {\n try {\n return DateTime.fromJSDate(date).toUTC().toJSDate().toISOString();\n } catch (error) {\n console.error('Error: Could not convert date to ISO UTC string; ', error);\n }\n }\n\n // Gets the currently subscribed listeners.\n get listeners(): Set<Date> {\n return this.#listeners;\n }\n}\n"],"names":["MILLISECOND_IN_MS","SECOND_IN_MS","MINUTE_IN_MS","HOUR_IN_MS","DAY_IN_MS","WEEK_IN_MS","THRESHOLD_RELATIVE_TIME_IN_MS","HdsTimeRelativeUnitValues","DEFAULT_RELATIVE_THRESHOLDS","Second","Minute","Hour","Day","HdsDisplayKeyValues","FORMAT_PRECISION_SHORT_DATE","month","day","year","FORMAT_PRECISION_MINUTE","hour","minute","FORMAT_PRECISION_SECOND","second","timeZoneName","DATE_DISPLAY_FORMATS","FriendlyLocal","FriendlyOnly","DEFAULT_DISPLAY","DEFAULT_DISPLAY_MAPPING","FriendlyRelative","displayFormat","showFriendly","showRelative","tooltipFormat","Relative","Utc","DISPLAY_SCALE","Object","keys","DISPLAYS","TimeService","Service","Set","g","prototype","tracked","Date","now","i","void 0","format","difference","display","displayKey","includes","absValueInMs","options","relative","selectTimeRelativeUnit","formatTimeRelativeUnit","value","unit","Math","trunc","valueInMs","thresholds","Week","timeDifference","startDate","endDate","Number","abs","register","id","add","start","perform","unregister","delete","_buildTask","context","generator","listeners","size","isTesting","timeout","toIsoUtcString","date","DateTime","fromJSDate","toUTC","toJSDate","toISOString","error","console"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hds-aria-described-by.js","sources":["../../src/utils/hds-aria-described-by.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { tracked } from '@glimmer/tracking';\nimport { scheduleOnce } from '@ember/runloop';\nimport type Component from '@glimmer/component';\nimport type { HdsFormFieldSignature } from '../components/hds/form/field/';\nimport type { HdsFormFieldsetSignature } from '../components/hds/form/fieldset/';\nimport type { HdsFormKeyValueInputsFieldSignature } from '../components/hds/form/key-value-inputs/field';\nimport type { HdsFormKeyValueInputsSignature } from '../components/hds/form/key-value-inputs/index';\n\ntype ElementSet = Set<HTMLElement>;\n\nclass AriaDescriptorMap {\n private _elements = new WeakMap<AriaDescribedByComponent, ElementSet>();\n\n register(obj: AriaDescribedByComponent, element: HTMLElement): void {\n const elements = this.findOrCreateElementSet(obj);\n elements.add(element);\n }\n\n unregister(obj: AriaDescribedByComponent, element: HTMLElement): void {\n const elements = this.findOrCreateElementSet(obj);\n elements.delete(element);\n }\n\n entries(obj: AriaDescribedByComponent): HTMLElement[] {\n const elements = this.findOrCreateElementSet(obj);\n return Array.from(elements.values());\n }\n\n private findOrCreateElementSet(obj: AriaDescribedByComponent): ElementSet {\n if (this._elements.has(obj)) {\n return this._elements.get(obj) as ElementSet;\n }\n\n const elements: ElementSet = new Set();\n this._elements.set(obj, elements);\n return elements;\n }\n}\n\nconst ariaDescriptorMap = new AriaDescriptorMap();\n\ntype AriaDescribedByArgs =\n | HdsFormFieldSignature\n | HdsFormFieldsetSignature\n | HdsFormKeyValueInputsFieldSignature\n | HdsFormKeyValueInputsSignature;\n\nexport interface AriaDescribedByComponent\n extends Component<AriaDescribedByArgs> {\n __ARIA_DESCRIPTION_IDS__?: string[];\n ariaDescribedBy?: string;\n}\n\n// essentially a type that says we return a subclass of the given type T\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ClassOf<T> = new (owner: unknown, ...args: any[]) => T;\n\nexport function ariaDescribedBy(\n BaseComponent: ClassOf<AriaDescribedByComponent>\n): ClassOf<AriaDescribedByComponent> {\n class EnhancedComponent extends BaseComponent {\n @tracked __ARIA_DESCRIPTION_IDS__: string[] = [];\n\n get ariaDescribedBy(): string {\n let descriptors = this.__ARIA_DESCRIPTION_IDS__;\n\n if (this.args.extraAriaDescribedBy) {\n descriptors = descriptors.concat(this.args.extraAriaDescribedBy);\n }\n\n return descriptors.join(' ');\n }\n }\n return EnhancedComponent;\n}\n\nfunction synchronizeDescriptors(component: AriaDescribedByComponent): void {\n if (component.isDestroying || component.isDestroyed) return;\n const descriptors = ariaDescriptorMap.entries(component);\n component.__ARIA_DESCRIPTION_IDS__ = descriptors.map(\n (element): string => element.id\n );\n}\n\nexport function registerAriaDescriptionElement(\n component: AriaDescribedByComponent,\n element: HTMLElement\n): void {\n ariaDescriptorMap.register(component, element);\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', component, synchronizeDescriptors, component);\n}\n\nexport function unregisterAriaDescriptionElement(\n component: AriaDescribedByComponent,\n element: HTMLElement\n): void {\n ariaDescriptorMap.unregister(component, element);\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', component, synchronizeDescriptors, component);\n}\n"],"names":["AriaDescriptorMap","_elements","WeakMap","register","obj","element","elements","findOrCreateElementSet","add","unregister","delete","entries","Array","from","values","has","get","Set","set","ariaDescriptorMap","ariaDescribedBy","BaseComponent","EnhancedComponent","g","prototype","tracked","i","descriptors","__ARIA_DESCRIPTION_IDS__","args","extraAriaDescribedBy","concat","join","synchronizeDescriptors","component","isDestroying","isDestroyed","map","id","registerAriaDescriptionElement","scheduleOnce","unregisterAriaDescriptionElement"],"mappings":";;;;AAAA;AACA;AACA;AACA;;AAYA,MAAMA,iBAAiB,CAAC;AACdC,EAAAA,SAAS,GAAG,IAAIC,OAAO,EAAwC;AAEvEC,EAAAA,QAAQA,CAACC,GAA6B,EAAEC,OAAoB,EAAQ;AAClE,IAAA,MAAMC,QAAQ,GAAG,IAAI,CAACC,sBAAsB,CAACH,GAAG,CAAC;AACjDE,IAAAA,QAAQ,CAACE,GAAG,CAACH,OAAO,CAAC;AACvB,EAAA;AAEAI,EAAAA,UAAUA,CAACL,GAA6B,EAAEC,OAAoB,EAAQ;AACpE,IAAA,MAAMC,QAAQ,GAAG,IAAI,CAACC,sBAAsB,CAACH,GAAG,CAAC;AACjDE,IAAAA,QAAQ,CAACI,MAAM,CAACL,OAAO,CAAC;AAC1B,EAAA;EAEAM,OAAOA,CAACP,GAA6B,EAAiB;AACpD,IAAA,MAAME,QAAQ,GAAG,IAAI,CAACC,sBAAsB,CAACH,GAAG,CAAC;IACjD,OAAOQ,KAAK,CAACC,IAAI,CAACP,QAAQ,CAACQ,MAAM,EAAE,CAAC;AACtC,EAAA;EAEQP,sBAAsBA,CAACH,GAA6B,EAAc;IACxE,IAAI,IAAI,CAACH,SAAS,CAACc,GAAG,CAACX,GAAG,CAAC,EAAE;AAC3B,MAAA,OAAO,IAAI,CAACH,SAAS,CAACe,GAAG,CAACZ,GAAG,CAAC;AAChC,IAAA;AAEA,IAAA,MAAME,QAAoB,GAAG,IAAIW,GAAG,EAAE;IACtC,IAAI,CAAChB,SAAS,CAACiB,GAAG,CAACd,GAAG,EAAEE,QAAQ,CAAC;AACjC,IAAA,OAAOA,QAAQ;AACjB,EAAA;AACF;AAEA,MAAMa,iBAAiB,GAAG,IAAInB,iBAAiB,EAAE;;AAcjD;AACA;;AAGO,SAASoB,eAAeA,CAC7BC,aAAgD,EACb;EACnC,MAAMC,iBAAiB,SAASD,aAAa,CAAC;AAAA,IAAA;MAAAE,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,0BAAA,EAAA,CAC3CC,OAAO,CAAA,EAAA,YAAA;AAAA,QAAA,OAAsC,EAAE;AAAA,MAAA,CAAA,CAAA;AAAA;IAAA,yBAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,0BAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"hds-aria-described-by.js","sources":["../../src/utils/hds-aria-described-by.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { tracked } from '@glimmer/tracking';\nimport { scheduleOnce } from '@ember/runloop';\nimport type Component from '@glimmer/component';\nimport type { HdsFormFieldSignature } from '../components/hds/form/field/';\nimport type { HdsFormFieldsetSignature } from '../components/hds/form/fieldset/';\nimport type { HdsFormKeyValueInputsFieldSignature } from '../components/hds/form/key-value-inputs/field';\nimport type { HdsFormKeyValueInputsSignature } from '../components/hds/form/key-value-inputs/index';\n\ntype ElementSet = Set<HTMLElement>;\n\nclass AriaDescriptorMap {\n private _elements = new WeakMap<AriaDescribedByComponent, ElementSet>();\n\n register(obj: AriaDescribedByComponent, element: HTMLElement): void {\n const elements = this.findOrCreateElementSet(obj);\n elements.add(element);\n }\n\n unregister(obj: AriaDescribedByComponent, element: HTMLElement): void {\n const elements = this.findOrCreateElementSet(obj);\n elements.delete(element);\n }\n\n entries(obj: AriaDescribedByComponent): HTMLElement[] {\n const elements = this.findOrCreateElementSet(obj);\n return Array.from(elements.values());\n }\n\n private findOrCreateElementSet(obj: AriaDescribedByComponent): ElementSet {\n if (this._elements.has(obj)) {\n return this._elements.get(obj) as ElementSet;\n }\n\n const elements: ElementSet = new Set();\n this._elements.set(obj, elements);\n return elements;\n }\n}\n\nconst ariaDescriptorMap = new AriaDescriptorMap();\n\ntype AriaDescribedByArgs =\n | HdsFormFieldSignature\n | HdsFormFieldsetSignature\n | HdsFormKeyValueInputsFieldSignature\n | HdsFormKeyValueInputsSignature;\n\nexport interface AriaDescribedByComponent\n extends Component<AriaDescribedByArgs> {\n __ARIA_DESCRIPTION_IDS__?: string[];\n ariaDescribedBy?: string;\n}\n\n// essentially a type that says we return a subclass of the given type T\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ClassOf<T> = new (owner: unknown, ...args: any[]) => T;\n\nexport function ariaDescribedBy(\n BaseComponent: ClassOf<AriaDescribedByComponent>\n): ClassOf<AriaDescribedByComponent> {\n class EnhancedComponent extends BaseComponent {\n @tracked __ARIA_DESCRIPTION_IDS__: string[] = [];\n\n get ariaDescribedBy(): string {\n let descriptors = this.__ARIA_DESCRIPTION_IDS__;\n\n if (this.args.extraAriaDescribedBy) {\n descriptors = descriptors.concat(this.args.extraAriaDescribedBy);\n }\n\n return descriptors.join(' ');\n }\n }\n return EnhancedComponent;\n}\n\nfunction synchronizeDescriptors(component: AriaDescribedByComponent): void {\n if (component.isDestroying || component.isDestroyed) return;\n const descriptors = ariaDescriptorMap.entries(component);\n component.__ARIA_DESCRIPTION_IDS__ = descriptors.map(\n (element): string => element.id\n );\n}\n\nexport function registerAriaDescriptionElement(\n component: AriaDescribedByComponent,\n element: HTMLElement\n): void {\n ariaDescriptorMap.register(component, element);\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', component, synchronizeDescriptors, component);\n}\n\nexport function unregisterAriaDescriptionElement(\n component: AriaDescribedByComponent,\n element: HTMLElement\n): void {\n ariaDescriptorMap.unregister(component, element);\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', component, synchronizeDescriptors, component);\n}\n"],"names":["AriaDescriptorMap","_elements","WeakMap","register","obj","element","elements","findOrCreateElementSet","add","unregister","delete","entries","Array","from","values","has","get","Set","set","ariaDescriptorMap","ariaDescribedBy","BaseComponent","EnhancedComponent","g","prototype","tracked","i","void 0","descriptors","__ARIA_DESCRIPTION_IDS__","args","extraAriaDescribedBy","concat","join","synchronizeDescriptors","component","isDestroying","isDestroyed","map","id","registerAriaDescriptionElement","scheduleOnce","unregisterAriaDescriptionElement"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hashicorp/design-system-components",
|
|
3
|
-
"version": "5.2.0
|
|
3
|
+
"version": "5.2.0",
|
|
4
4
|
"description": "Helios Design System Components",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hashicorp",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@embroider/util": "^1.13.4",
|
|
37
37
|
"@floating-ui/dom": "^1.6.12",
|
|
38
38
|
"@hashicorp/design-system-tokens": "^3.0.0",
|
|
39
|
-
"@hashicorp/flight-icons": "4.1.1
|
|
39
|
+
"@hashicorp/flight-icons": "^4.1.1",
|
|
40
40
|
"@lezer/highlight": "^1.2.1",
|
|
41
41
|
"@nullvoxpopuli/ember-composable-helpers": "^5.2.11",
|
|
42
42
|
"clipboard-polyfill": "^4.1.1",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"babel-plugin-ember-template-compilation": "^2.4.1",
|
|
79
79
|
"concurrently": "^9.1.2",
|
|
80
80
|
"ember-basic-dropdown": "^8.6.1",
|
|
81
|
-
"ember-intl": "^
|
|
81
|
+
"ember-intl": "^7.3.0",
|
|
82
82
|
"ember-source": "^6.4.0",
|
|
83
83
|
"ember-template-lint": "^7.0.2",
|
|
84
84
|
"ember-template-lint-plugin-prettier": "^5.0.0",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"@ember/string": "^3.1.1 || ^4.0.0",
|
|
107
107
|
"ember-basic-dropdown": "^7.3.0 || ^8.6.1",
|
|
108
108
|
"ember-engines": ">= 0.11.0",
|
|
109
|
-
"ember-intl": "^
|
|
109
|
+
"ember-intl": "^7.3.0"
|
|
110
110
|
},
|
|
111
111
|
"peerDependenciesMeta": {
|
|
112
112
|
"ember-engines": {
|