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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/declarations/components/hds/theme-context/index.d.ts +24 -0
  2. package/declarations/components/hds/theme-context/types.d.ts +19 -0
  3. package/declarations/components/hds/theme-switcher/index.d.ts +43 -0
  4. package/declarations/components.d.ts +2 -0
  5. package/declarations/services/hds-intl.d.ts +4 -3
  6. package/declarations/services/hds-theming.d.ts +57 -0
  7. package/declarations/services.d.ts +1 -0
  8. package/declarations/template-registry.d.ts +6 -0
  9. package/dist/_app_/components/hds/theme-context.js +1 -0
  10. package/dist/_app_/components/hds/theme-switcher.js +1 -0
  11. package/dist/_app_/services/hds-theming.js +1 -0
  12. package/dist/components/hds/advanced-table/index.js.map +1 -1
  13. package/dist/components/hds/advanced-table/models/column.js.map +1 -1
  14. package/dist/components/hds/advanced-table/models/row.js.map +1 -1
  15. package/dist/components/hds/advanced-table/models/table.js.map +1 -1
  16. package/dist/components/hds/advanced-table/td.js.map +1 -1
  17. package/dist/components/hds/advanced-table/th-context-menu.js.map +1 -1
  18. package/dist/components/hds/advanced-table/th-reorder-drop-target.js.map +1 -1
  19. package/dist/components/hds/advanced-table/th-resize-handle.js.map +1 -1
  20. package/dist/components/hds/advanced-table/th-selectable.js.map +1 -1
  21. package/dist/components/hds/advanced-table/th-sort.js.map +1 -1
  22. package/dist/components/hds/advanced-table/th.js.map +1 -1
  23. package/dist/components/hds/alert/index.js.map +1 -1
  24. package/dist/components/hds/app-header/index.js.map +1 -1
  25. package/dist/components/hds/app-side-nav/index.js.map +1 -1
  26. package/dist/components/hds/app-side-nav/list/index.js.map +1 -1
  27. package/dist/components/hds/app-side-nav/portal/target.js.map +1 -1
  28. package/dist/components/hds/breadcrumb/item.js.map +1 -1
  29. package/dist/components/hds/code-block/index.js.map +1 -1
  30. package/dist/components/hds/code-editor/index.js.map +1 -1
  31. package/dist/components/hds/copy/button/index.js.map +1 -1
  32. package/dist/components/hds/copy/snippet/index.js.map +1 -1
  33. package/dist/components/hds/disclosure-primitive/index.js.map +1 -1
  34. package/dist/components/hds/dismiss-button/index.js.map +1 -1
  35. package/dist/components/hds/dropdown/toggle/icon.js.map +1 -1
  36. package/dist/components/hds/flyout/index.js.map +1 -1
  37. package/dist/components/hds/form/key-value-inputs/index.js.map +1 -1
  38. package/dist/components/hds/form/masked-input/base.js.map +1 -1
  39. package/dist/components/hds/form/super-select/multiple/base.js.map +1 -1
  40. package/dist/components/hds/form/super-select/single/base.js.map +1 -1
  41. package/dist/components/hds/form/text-input/field.js.map +1 -1
  42. package/dist/components/hds/interactive/index.js.map +1 -1
  43. package/dist/components/hds/modal/index.js.map +1 -1
  44. package/dist/components/hds/pagination/compact/index.js.map +1 -1
  45. package/dist/components/hds/pagination/info/index.js.map +1 -1
  46. package/dist/components/hds/pagination/numbered/index.js.map +1 -1
  47. package/dist/components/hds/popover-primitive/index.js.map +1 -1
  48. package/dist/components/hds/side-nav/index.js.map +1 -1
  49. package/dist/components/hds/side-nav/list/index.js.map +1 -1
  50. package/dist/components/hds/side-nav/portal/target.js.map +1 -1
  51. package/dist/components/hds/stepper/list/index.js.map +1 -1
  52. package/dist/components/hds/stepper/nav/index.js.map +1 -1
  53. package/dist/components/hds/table/index.js.map +1 -1
  54. package/dist/components/hds/table/th-button-sort.js.map +1 -1
  55. package/dist/components/hds/table/th-selectable.js.map +1 -1
  56. package/dist/components/hds/tabs/index.js.map +1 -1
  57. package/dist/components/hds/tag/index.js.map +1 -1
  58. package/dist/components/hds/theme-context/index.js +45 -0
  59. package/dist/components/hds/theme-context/index.js.map +1 -0
  60. package/dist/components/hds/theme-context/types.js +27 -0
  61. package/dist/components/hds/theme-context/types.js.map +1 -0
  62. package/dist/components/hds/theme-switcher/index.js +100 -0
  63. package/dist/components/hds/theme-switcher/index.js.map +1 -0
  64. package/dist/components/hds/time/index.js.map +1 -1
  65. package/dist/components/hds/time/range.js.map +1 -1
  66. package/dist/components.js +2 -0
  67. package/dist/components.js.map +1 -1
  68. package/dist/helpers/hds-t.js.map +1 -1
  69. package/dist/modifiers/hds-code-editor.js.map +1 -1
  70. package/dist/services/hds-intl.js.map +1 -1
  71. package/dist/services/hds-theming.js +214 -0
  72. package/dist/services/hds-theming.js.map +1 -0
  73. package/dist/services/hds-time.js.map +1 -1
  74. package/dist/services.js +1 -1
  75. package/dist/styles/@hashicorp/design-system-components-common.css +9588 -0
  76. package/dist/styles/@hashicorp/design-system-components-common.css.map +1 -0
  77. package/dist/styles/@hashicorp/design-system-components-common.scss +24 -0
  78. package/dist/styles/@hashicorp/design-system-components.css +501 -320
  79. package/dist/styles/@hashicorp/design-system-components.css.map +1 -0
  80. package/dist/styles/@hashicorp/design-system-components.scss +4 -62
  81. package/dist/styles/@hashicorp/design-system-power-select-overrides.css +229 -0
  82. package/dist/styles/@hashicorp/design-system-power-select-overrides.css.map +1 -0
  83. package/dist/styles/components/badge-count.scss +26 -76
  84. package/dist/styles/components/badge.scss +26 -131
  85. package/dist/styles/components/button.scss +5 -0
  86. package/dist/styles/components/dropdown.scss +3 -5
  87. package/dist/styles/components/form/file-input.scss +2 -2
  88. package/dist/styles/components/form/key-value-inputs.scss +2 -4
  89. package/dist/styles/components/index.scss +52 -0
  90. package/dist/styles/components/theme-context.scss +12 -0
  91. package/dist/styles/mixins/_button.scss +82 -129
  92. package/dist/styles/mixins/_carbonization.scss +31 -0
  93. package/dist/styles/mixins/_interactive-dark-theme.scss +1 -1
  94. package/dist/utils/hds-aria-described-by.js.map +1 -1
  95. package/package.json +10 -6
  96. package/dist/styles/@hashicorp/design-system-components.scss.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/pagination/numbered/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { HdsPaginationDirectionValues } from '../types.ts';\n\nimport type {\n HdsPaginationPage,\n HdsPaginationRoutingProps,\n HdsPaginationElliptizedPageArray,\n HdsPaginationElliptizedPageArrayItem,\n} from '../types';\nimport type { HdsInteractiveSignature } from '../../interactive/index.ts';\nimport type Owner from '@ember/owner';\ninterface ElliptizeProps {\n pages: number[];\n current: number;\n limit?: number;\n}\n\ntype HdsInteractiveQuery = HdsInteractiveSignature['Args']['query'];\n\ntype HdsPaginationNumberedRoutingQueryProps = HdsPaginationRoutingProps & {\n queryNext?: HdsInteractiveQuery;\n queryPrev?: HdsInteractiveQuery;\n queryPages?: Record<\n HdsPaginationElliptizedPageArrayItem,\n HdsInteractiveQuery\n >;\n};\n\ntype HdsPaginationQueryFunction = (\n page: number,\n pageSize: number\n) => HdsInteractiveQuery;\n\ninterface HdsPaginationNumberedArgs extends HdsPaginationRoutingProps {\n ariaLabel?: string;\n totalItems: number;\n showLabels?: boolean;\n isTruncated?: boolean;\n currentPage?: number;\n showInfo?: boolean;\n showPageNumbers?: boolean;\n showTotalItems?: boolean;\n showSizeSelector?: boolean;\n sizeSelectorLabel?: string;\n pageSizes?: number[];\n currentPageSize?: number;\n queryFunction?: HdsPaginationQueryFunction;\n onPageChange?: (page: number, pageSize: number) => unknown;\n onPageSizeChange?: (pageSize: number) => unknown;\n}\n\ninterface HdsPaginationNumberedArgsControlledBase\n extends HdsPaginationNumberedArgs {\n currentPage: number;\n currentPageSize: number;\n queryFunction: HdsPaginationQueryFunction;\n}\n\ninterface HdsPaginationNumberedArgsControlledWithModel\n extends HdsPaginationNumberedArgsControlledBase {\n model: string | number;\n}\n\ninterface HdsPaginationNumberedArgsControlledWithModels\n extends HdsPaginationNumberedArgsControlledBase {\n models: Array<string | number>;\n}\ninterface HdsPaginationNumberedArgsControlledWithRoute\n extends HdsPaginationNumberedArgsControlledBase {\n route: string;\n}\n\ntype HdsPaginationNumberedArgsControlled =\n | HdsPaginationNumberedArgsControlledWithModel\n | HdsPaginationNumberedArgsControlledWithModels\n | HdsPaginationNumberedArgsControlledWithRoute;\n\ninterface HdsPaginationNumberedArgsUncontrolled\n extends HdsPaginationNumberedArgs {\n queryFunction?: undefined;\n}\n\nexport interface HdsPaginationNumberedSignature {\n Args:\n | HdsPaginationNumberedArgsControlled\n | HdsPaginationNumberedArgsUncontrolled;\n Element: HTMLDivElement;\n}\n\nconst ELLIPSIS = '…';\n\n// for context about the decision to use these values, see:\n// https://hashicorp.slack.com/archives/C03A0N1QK8S/p1673546329082759\nexport const DEFAULT_PAGE_SIZES = [10, 30, 50];\n\nexport const elliptize = ({\n pages,\n current,\n limit = 7,\n}: ElliptizeProps): HdsPaginationElliptizedPageArray => {\n const length = pages.length;\n\n let result = [];\n let start;\n let end;\n\n if (length <= limit) {\n return pages;\n }\n\n if (current <= length / 2) {\n start = Math.ceil(limit / 2);\n end = limit - start;\n } else {\n end = Math.ceil(limit / 2);\n start = limit - end;\n }\n\n const sliceStart: HdsPaginationElliptizedPageArray = pages.slice(0, start);\n const sliceEnd: HdsPaginationElliptizedPageArray = pages.slice(-end);\n\n if (sliceStart.includes(current) && sliceStart.includes(current + 1)) {\n // \"current\" (and its next sibling) is contained within the \"sliceStart\" block\n sliceEnd.splice(0, 1, ELLIPSIS);\n result = ([] as HdsPaginationElliptizedPageArray).concat(\n sliceStart,\n sliceEnd\n );\n } else if (sliceEnd.includes(current - 1) && sliceEnd.includes(current)) {\n // \"current\" (and its prev sibling) is contained within the \"sliceEnd\" block\n sliceStart.splice(-1, 1, ELLIPSIS);\n result = ([] as HdsPaginationElliptizedPageArray).concat(\n sliceStart,\n sliceEnd\n );\n } else {\n // this is a bit more tricky :)\n // we need to calculate how many items there are before/after the current item\n // since both the initial and ending blocks are always 2 items long (number + ellipsis)\n // and there is always the \"current\" item, we can just subtract 5 from the limit\n const delta = (limit - 5) / 2; // this is why the limit needs to be an odd number\n // we slice the array starting at the \"current\" index, minus the delta, minus one because it's an array (zero-based)\n const sliceCurr = pages.slice(current - delta - 1, current + delta);\n result = ([] as HdsPaginationElliptizedPageArray).concat(\n sliceStart.shift() as number,\n ELLIPSIS,\n sliceCurr,\n ELLIPSIS,\n sliceEnd.pop() as number\n );\n }\n\n return result;\n};\nexport default class HdsPaginationNumbered extends Component<HdsPaginationNumberedSignature> {\n // These two private variables are used to differentiate between\n // \"uncontrolled\" component (where the state is handled internally) and\n // \"controlled\" component (where the state is handled externally, by the consumer's code).\n // In the first case, these variables store the internal state of the component at any moment,\n // and their value is updated internally according to the user's interaction with the component.\n // In the second case, these variables store *only* the initial state of the component (coming from the arguments)\n // at rendering time, but from that moment on they're not updated anymore, no matter what interaction the user\n // has with the component (the state is controlled externally, eg. via query parameters)\n @tracked private _currentPage;\n @tracked private _currentPageSize;\n @tracked private _isControlled;\n\n showInfo = this.args.showInfo ?? true; // if the \"info\" block is visible\n showLabels = this.args.showLabels ?? false; // if the labels for the \"prev/next\" controls are visible\n showSizeSelector = this.args.showSizeSelector ?? true; // if the \"size selector\" block is visible\n showPageNumbers = this.args.showPageNumbers ?? true; // if the \"page numbers\" block is visible\n isTruncated = this.args.isTruncated ?? true; // if the list of \"page numbers\" is truncated\n\n constructor(owner: Owner, args: HdsPaginationNumberedSignature['Args']) {\n super(owner, args);\n\n const { queryFunction } = this.args;\n\n // This component works in two different ways, depending if we need to support\n // routing through links (`LinkTo`) for the \"navigation controls\", or not.\n // If there's no routing then the component behaves as \"uncontrolled\"\n // (the state updates - eg to the \"currentPage\" and \"currentPageSize\"\n // are handled by its internal logic).\n // If instead the component needs to update the routing (and we infer this via the \"query\" arguments)\n // then the component behaves as \"controlled\", where the state is\n // initialized and updated using the arguments passed to it.\n\n if (queryFunction === undefined) {\n this._isControlled = false;\n } else {\n assert(\n '@model, @models, or @route for \"Hds::Pagination::Numbered\" must be provided when using the @queryFunction argument',\n this.args.model !== undefined ||\n this.args.models !== undefined ||\n this.args.route !== undefined\n );\n assert(\n '@queryFunction for \"Hds::Pagination::Numbered\" must be a function',\n typeof queryFunction === 'function'\n );\n assert(\n '@currentPage and @currentPageSize for \"Hds::Pagination::Numbered\" must be provided as numeric arguments when the pagination controls the routing',\n typeof this.args.currentPageSize === 'number' &&\n typeof this.args.currentPage === 'number'\n );\n this._isControlled = true;\n }\n\n assert(\n '@totalItems for \"Hds::Pagination::Numbered\" must be defined as an integer number',\n typeof this.args.totalItems === 'number'\n );\n\n this._currentPage = this.args.currentPage ?? 1;\n // we assert that `this.pageSizes` will always be an array with at least one item\n this._currentPageSize = this.args.currentPageSize ?? this.pageSizes[0];\n }\n\n get ariaLabel(): string {\n return this.args.ariaLabel ?? 'Pagination';\n }\n\n // This very specific `get/set` pattern is used to handle the two different use cases of the component\n // being \"controlled\" (when it has routing, meaning it needs to support pagination controls as links/`LinkTo`)\n // vs being \"uncontrolled\" (see comments above for details).\n //\n // If it has routing (and so it's \"controlled\"), than the value (\"state\") of the `currentPage/currentPageSize` variables\n // is *always* determined by the controller via arguments (most of the times, connected to query parameters in the URL).\n // For this reason the \"get\" method always returns the value from the `args`,\n // while the \"set\" method never updates the private internal state (_variable).\n //\n // If instead it doesn't have routing (and so it's \"uncontrolled\") than the value (\"state\") of the `currentPage/currentPageSize` variables\n // is *always* determined by the component's internal logic (and updated according to the user interaction with it).\n // For this reason the \"get\" and \"set\" methods always read from or write to the private internal state (_variable).\n\n get currentPage(): number {\n if (this._isControlled) {\n // if the component is controlled, `@currentPage` is asserted to be a number\n return this.args.currentPage as number;\n } else {\n return this._currentPage;\n }\n }\n set currentPage(value) {\n if (this._isControlled) {\n // noop\n } else {\n // if `this._isControlled` is `false`\n this._currentPage = value;\n }\n }\n\n get currentPageSize(): number {\n if (this._isControlled) {\n // if the component is controlled, `@currentPageSize` is asserted to be a number\n return this.args.currentPageSize as number;\n } else {\n return this._currentPageSize as number;\n }\n }\n set currentPageSize(value) {\n if (this._isControlled) {\n // noop\n } else {\n this._currentPageSize = value;\n }\n }\n\n get pageSizes(): number[] {\n const { pageSizes = DEFAULT_PAGE_SIZES } = this.args;\n\n assert(\n // TODO: Add test for this\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `pageSizes argument must be an array with at least one item. Received: ${pageSizes}`,\n Array.isArray(pageSizes) === true && pageSizes.length > 0\n );\n\n return pageSizes;\n }\n\n get itemsRangeStart(): number {\n // Calculate the starting range of items displayed on current page\n // if currentPage = 1st page and # of items per page is 10:\n // ( (1 - 1 = 0) * 10 = 0 ) + 1 = 1\n // if current page = 2nd page:\n // ( (2 - 1 = 1) * 10 = 10 ) + 1 = 11\n return (this.currentPage - 1) * this.currentPageSize + 1;\n }\n\n get itemsRangeEnd(): number {\n // Calculate ending range of items displayed on current page\n // 2 cases: 1) full page of items or 2) last page of items\n if (this.currentPage * this.currentPageSize < this.args.totalItems) {\n // 1) full page of items (pages 1 to page before last):\n return this.itemsRangeStart + this.currentPageSize - 1;\n } else {\n // 2) last page of items:\n return this.args.totalItems;\n }\n }\n\n get pages(): HdsPaginationElliptizedPageArray {\n const pages = [];\n\n for (let i = 1; i <= this.totalPages; i++) {\n pages.push(i);\n }\n\n if (this.isTruncated) {\n return elliptize({ pages, current: this.currentPage });\n } else {\n return pages;\n }\n }\n\n get totalPages() {\n return Math.max(Math.ceil(this.args.totalItems / this.currentPageSize), 1);\n }\n\n buildQueryParamsObject(\n page: HdsPaginationElliptizedPageArrayItem,\n pageSize: number\n ): HdsInteractiveQuery {\n // `page` may also be ellipsis\n if (this._isControlled && typeof page === 'number') {\n // if the component is controlled, `@queryFunction` is asserted to be a function\n return this.args.queryFunction!(page, pageSize);\n } else {\n return {};\n }\n }\n\n get routing(): HdsPaginationNumberedRoutingQueryProps {\n const routing: HdsPaginationNumberedRoutingQueryProps = {\n route: this.args.route ?? undefined,\n model: this.args.model ?? undefined,\n models: this.args.models ?? undefined,\n replace: this.args.replace ?? undefined,\n };\n\n // the \"query\" is dynamic and needs to be calculated\n if (this._isControlled) {\n routing.queryPrev = this.buildQueryParamsObject(\n this.currentPage - 1,\n this.currentPageSize\n );\n routing.queryNext = this.buildQueryParamsObject(\n this.currentPage + 1,\n this.currentPageSize\n );\n // IMPORTANT: here we need to use an object and not an array\n // otherwise the {{get object page}} will be shifted by one\n // (the pages are 1-based while the array would be zero-based)\n routing.queryPages = {};\n this.pages.forEach(\n (page) =>\n (routing.queryPages![page] = this.buildQueryParamsObject(\n page,\n this.currentPageSize\n ))\n );\n } else {\n routing.queryPrev = undefined;\n routing.queryNext = undefined;\n }\n\n return routing;\n }\n\n get isDisabledPrev() {\n return this.currentPage === 1;\n }\n\n get isDisabledNext() {\n return this.currentPage === this.totalPages;\n }\n\n @action\n onPageChange(page: HdsPaginationPage) {\n let gotoPageNumber;\n if (page === HdsPaginationDirectionValues.Prev && this.currentPage > 1) {\n gotoPageNumber = this.currentPage - 1;\n } else if (\n page === HdsPaginationDirectionValues.Next &&\n this.currentPage < this.totalPages\n ) {\n gotoPageNumber = this.currentPage + 1;\n } else {\n gotoPageNumber = page;\n }\n\n // we want to invoke the `onPageChange` callback only on actual page change\n if (gotoPageNumber !== this.currentPage) {\n // we have already determined that `gotoPageNumber` is not `prev` or `next`\n this.currentPage = gotoPageNumber as number;\n\n const { onPageChange } = this.args;\n\n if (typeof onPageChange === 'function') {\n onPageChange(this.currentPage, this.currentPageSize);\n }\n }\n }\n\n @action\n onPageSizeChange(newPageSize: number) {\n const { onPageSizeChange } = this.args;\n\n if (!this._isControlled) {\n // notice: we agreed to reset the pagination to the first element (any alternative would result in an unpredictable UX)\n this.currentPage = 1;\n this.currentPageSize = newPageSize;\n }\n\n // invoke the callback function\n if (typeof onPageSizeChange === 'function') {\n onPageSizeChange(newPageSize);\n }\n }\n\n elliptizedPageArrayItemAsNumber = (\n item: HdsPaginationElliptizedPageArrayItem\n ): number => {\n if (typeof item === 'number') {\n return item;\n } else {\n throw new Error('Expected a number, but got an ellipsis');\n }\n };\n\n getPageNumberQuery(page: HdsPaginationElliptizedPageArrayItem) {\n return this.routing.queryPages![this.elliptizedPageArrayItemAsNumber(page)];\n }\n}\n"],"names":["ELLIPSIS","DEFAULT_PAGE_SIZES","elliptize","pages","current","limit","length","result","start","end","Math","ceil","sliceStart","slice","sliceEnd","includes","splice","concat","delta","sliceCurr","shift","pop","HdsPaginationNumbered","Component","g","prototype","tracked","i","showInfo","args","showLabels","showSizeSelector","showPageNumbers","isTruncated","constructor","owner","queryFunction","undefined","_isControlled","assert","model","models","route","currentPageSize","currentPage","totalItems","_currentPage","_currentPageSize","pageSizes","ariaLabel","value","Array","isArray","itemsRangeStart","itemsRangeEnd","totalPages","push","max","buildQueryParamsObject","page","pageSize","routing","replace","queryPrev","queryNext","queryPages","forEach","isDisabledPrev","isDisabledNext","onPageChange","gotoPageNumber","HdsPaginationDirectionValues","Prev","Next","n","action","onPageSizeChange","newPageSize","elliptizedPageArrayItemAsNumber","item","Error","getPageNumberQuery","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/pagination/numbered/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { HdsPaginationDirectionValues } from '../types.ts';\n\nimport type {\n HdsPaginationPage,\n HdsPaginationRoutingProps,\n HdsPaginationElliptizedPageArray,\n HdsPaginationElliptizedPageArrayItem,\n} from '../types';\nimport type { HdsInteractiveSignature } from '../../interactive/index.ts';\nimport type Owner from '@ember/owner';\ninterface ElliptizeProps {\n pages: number[];\n current: number;\n limit?: number;\n}\n\ntype HdsInteractiveQuery = HdsInteractiveSignature['Args']['query'];\n\ntype HdsPaginationNumberedRoutingQueryProps = HdsPaginationRoutingProps & {\n queryNext?: HdsInteractiveQuery;\n queryPrev?: HdsInteractiveQuery;\n queryPages?: Record<\n HdsPaginationElliptizedPageArrayItem,\n HdsInteractiveQuery\n >;\n};\n\ntype HdsPaginationQueryFunction = (\n page: number,\n pageSize: number\n) => HdsInteractiveQuery;\n\ninterface HdsPaginationNumberedArgs extends HdsPaginationRoutingProps {\n ariaLabel?: string;\n totalItems: number;\n showLabels?: boolean;\n isTruncated?: boolean;\n currentPage?: number;\n showInfo?: boolean;\n showPageNumbers?: boolean;\n showTotalItems?: boolean;\n showSizeSelector?: boolean;\n sizeSelectorLabel?: string;\n pageSizes?: number[];\n currentPageSize?: number;\n queryFunction?: HdsPaginationQueryFunction;\n onPageChange?: (page: number, pageSize: number) => unknown;\n onPageSizeChange?: (pageSize: number) => unknown;\n}\n\ninterface HdsPaginationNumberedArgsControlledBase\n extends HdsPaginationNumberedArgs {\n currentPage: number;\n currentPageSize: number;\n queryFunction: HdsPaginationQueryFunction;\n}\n\ninterface HdsPaginationNumberedArgsControlledWithModel\n extends HdsPaginationNumberedArgsControlledBase {\n model: string | number;\n}\n\ninterface HdsPaginationNumberedArgsControlledWithModels\n extends HdsPaginationNumberedArgsControlledBase {\n models: Array<string | number>;\n}\ninterface HdsPaginationNumberedArgsControlledWithRoute\n extends HdsPaginationNumberedArgsControlledBase {\n route: string;\n}\n\ntype HdsPaginationNumberedArgsControlled =\n | HdsPaginationNumberedArgsControlledWithModel\n | HdsPaginationNumberedArgsControlledWithModels\n | HdsPaginationNumberedArgsControlledWithRoute;\n\ninterface HdsPaginationNumberedArgsUncontrolled\n extends HdsPaginationNumberedArgs {\n queryFunction?: undefined;\n}\n\nexport interface HdsPaginationNumberedSignature {\n Args:\n | HdsPaginationNumberedArgsControlled\n | HdsPaginationNumberedArgsUncontrolled;\n Element: HTMLDivElement;\n}\n\nconst ELLIPSIS = '…';\n\n// for context about the decision to use these values, see:\n// https://hashicorp.slack.com/archives/C03A0N1QK8S/p1673546329082759\nexport const DEFAULT_PAGE_SIZES = [10, 30, 50];\n\nexport const elliptize = ({\n pages,\n current,\n limit = 7,\n}: ElliptizeProps): HdsPaginationElliptizedPageArray => {\n const length = pages.length;\n\n let result = [];\n let start;\n let end;\n\n if (length <= limit) {\n return pages;\n }\n\n if (current <= length / 2) {\n start = Math.ceil(limit / 2);\n end = limit - start;\n } else {\n end = Math.ceil(limit / 2);\n start = limit - end;\n }\n\n const sliceStart: HdsPaginationElliptizedPageArray = pages.slice(0, start);\n const sliceEnd: HdsPaginationElliptizedPageArray = pages.slice(-end);\n\n if (sliceStart.includes(current) && sliceStart.includes(current + 1)) {\n // \"current\" (and its next sibling) is contained within the \"sliceStart\" block\n sliceEnd.splice(0, 1, ELLIPSIS);\n result = ([] as HdsPaginationElliptizedPageArray).concat(\n sliceStart,\n sliceEnd\n );\n } else if (sliceEnd.includes(current - 1) && sliceEnd.includes(current)) {\n // \"current\" (and its prev sibling) is contained within the \"sliceEnd\" block\n sliceStart.splice(-1, 1, ELLIPSIS);\n result = ([] as HdsPaginationElliptizedPageArray).concat(\n sliceStart,\n sliceEnd\n );\n } else {\n // this is a bit more tricky :)\n // we need to calculate how many items there are before/after the current item\n // since both the initial and ending blocks are always 2 items long (number + ellipsis)\n // and there is always the \"current\" item, we can just subtract 5 from the limit\n const delta = (limit - 5) / 2; // this is why the limit needs to be an odd number\n // we slice the array starting at the \"current\" index, minus the delta, minus one because it's an array (zero-based)\n const sliceCurr = pages.slice(current - delta - 1, current + delta);\n result = ([] as HdsPaginationElliptizedPageArray).concat(\n sliceStart.shift() as number,\n ELLIPSIS,\n sliceCurr,\n ELLIPSIS,\n sliceEnd.pop() as number\n );\n }\n\n return result;\n};\nexport default class HdsPaginationNumbered extends Component<HdsPaginationNumberedSignature> {\n // These two private variables are used to differentiate between\n // \"uncontrolled\" component (where the state is handled internally) and\n // \"controlled\" component (where the state is handled externally, by the consumer's code).\n // In the first case, these variables store the internal state of the component at any moment,\n // and their value is updated internally according to the user's interaction with the component.\n // In the second case, these variables store *only* the initial state of the component (coming from the arguments)\n // at rendering time, but from that moment on they're not updated anymore, no matter what interaction the user\n // has with the component (the state is controlled externally, eg. via query parameters)\n @tracked private _currentPage;\n @tracked private _currentPageSize;\n @tracked private _isControlled;\n\n showInfo = this.args.showInfo ?? true; // if the \"info\" block is visible\n showLabels = this.args.showLabels ?? false; // if the labels for the \"prev/next\" controls are visible\n showSizeSelector = this.args.showSizeSelector ?? true; // if the \"size selector\" block is visible\n showPageNumbers = this.args.showPageNumbers ?? true; // if the \"page numbers\" block is visible\n isTruncated = this.args.isTruncated ?? true; // if the list of \"page numbers\" is truncated\n\n constructor(owner: Owner, args: HdsPaginationNumberedSignature['Args']) {\n super(owner, args);\n\n const { queryFunction } = this.args;\n\n // This component works in two different ways, depending if we need to support\n // routing through links (`LinkTo`) for the \"navigation controls\", or not.\n // If there's no routing then the component behaves as \"uncontrolled\"\n // (the state updates - eg to the \"currentPage\" and \"currentPageSize\"\n // are handled by its internal logic).\n // If instead the component needs to update the routing (and we infer this via the \"query\" arguments)\n // then the component behaves as \"controlled\", where the state is\n // initialized and updated using the arguments passed to it.\n\n if (queryFunction === undefined) {\n this._isControlled = false;\n } else {\n assert(\n '@model, @models, or @route for \"Hds::Pagination::Numbered\" must be provided when using the @queryFunction argument',\n this.args.model !== undefined ||\n this.args.models !== undefined ||\n this.args.route !== undefined\n );\n assert(\n '@queryFunction for \"Hds::Pagination::Numbered\" must be a function',\n typeof queryFunction === 'function'\n );\n assert(\n '@currentPage and @currentPageSize for \"Hds::Pagination::Numbered\" must be provided as numeric arguments when the pagination controls the routing',\n typeof this.args.currentPageSize === 'number' &&\n typeof this.args.currentPage === 'number'\n );\n this._isControlled = true;\n }\n\n assert(\n '@totalItems for \"Hds::Pagination::Numbered\" must be defined as an integer number',\n typeof this.args.totalItems === 'number'\n );\n\n this._currentPage = this.args.currentPage ?? 1;\n // we assert that `this.pageSizes` will always be an array with at least one item\n this._currentPageSize = this.args.currentPageSize ?? this.pageSizes[0];\n }\n\n get ariaLabel(): string {\n return this.args.ariaLabel ?? 'Pagination';\n }\n\n // This very specific `get/set` pattern is used to handle the two different use cases of the component\n // being \"controlled\" (when it has routing, meaning it needs to support pagination controls as links/`LinkTo`)\n // vs being \"uncontrolled\" (see comments above for details).\n //\n // If it has routing (and so it's \"controlled\"), than the value (\"state\") of the `currentPage/currentPageSize` variables\n // is *always* determined by the controller via arguments (most of the times, connected to query parameters in the URL).\n // For this reason the \"get\" method always returns the value from the `args`,\n // while the \"set\" method never updates the private internal state (_variable).\n //\n // If instead it doesn't have routing (and so it's \"uncontrolled\") than the value (\"state\") of the `currentPage/currentPageSize` variables\n // is *always* determined by the component's internal logic (and updated according to the user interaction with it).\n // For this reason the \"get\" and \"set\" methods always read from or write to the private internal state (_variable).\n\n get currentPage(): number {\n if (this._isControlled) {\n // if the component is controlled, `@currentPage` is asserted to be a number\n return this.args.currentPage as number;\n } else {\n return this._currentPage;\n }\n }\n set currentPage(value) {\n if (this._isControlled) {\n // noop\n } else {\n // if `this._isControlled` is `false`\n this._currentPage = value;\n }\n }\n\n get currentPageSize(): number {\n if (this._isControlled) {\n // if the component is controlled, `@currentPageSize` is asserted to be a number\n return this.args.currentPageSize as number;\n } else {\n return this._currentPageSize as number;\n }\n }\n set currentPageSize(value) {\n if (this._isControlled) {\n // noop\n } else {\n this._currentPageSize = value;\n }\n }\n\n get pageSizes(): number[] {\n const { pageSizes = DEFAULT_PAGE_SIZES } = this.args;\n\n assert(\n // TODO: Add test for this\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `pageSizes argument must be an array with at least one item. Received: ${pageSizes}`,\n Array.isArray(pageSizes) === true && pageSizes.length > 0\n );\n\n return pageSizes;\n }\n\n get itemsRangeStart(): number {\n // Calculate the starting range of items displayed on current page\n // if currentPage = 1st page and # of items per page is 10:\n // ( (1 - 1 = 0) * 10 = 0 ) + 1 = 1\n // if current page = 2nd page:\n // ( (2 - 1 = 1) * 10 = 10 ) + 1 = 11\n return (this.currentPage - 1) * this.currentPageSize + 1;\n }\n\n get itemsRangeEnd(): number {\n // Calculate ending range of items displayed on current page\n // 2 cases: 1) full page of items or 2) last page of items\n if (this.currentPage * this.currentPageSize < this.args.totalItems) {\n // 1) full page of items (pages 1 to page before last):\n return this.itemsRangeStart + this.currentPageSize - 1;\n } else {\n // 2) last page of items:\n return this.args.totalItems;\n }\n }\n\n get pages(): HdsPaginationElliptizedPageArray {\n const pages = [];\n\n for (let i = 1; i <= this.totalPages; i++) {\n pages.push(i);\n }\n\n if (this.isTruncated) {\n return elliptize({ pages, current: this.currentPage });\n } else {\n return pages;\n }\n }\n\n get totalPages() {\n return Math.max(Math.ceil(this.args.totalItems / this.currentPageSize), 1);\n }\n\n buildQueryParamsObject(\n page: HdsPaginationElliptizedPageArrayItem,\n pageSize: number\n ): HdsInteractiveQuery {\n // `page` may also be ellipsis\n if (this._isControlled && typeof page === 'number') {\n // if the component is controlled, `@queryFunction` is asserted to be a function\n return this.args.queryFunction!(page, pageSize);\n } else {\n return {};\n }\n }\n\n get routing(): HdsPaginationNumberedRoutingQueryProps {\n const routing: HdsPaginationNumberedRoutingQueryProps = {\n route: this.args.route ?? undefined,\n model: this.args.model ?? undefined,\n models: this.args.models ?? undefined,\n replace: this.args.replace ?? undefined,\n };\n\n // the \"query\" is dynamic and needs to be calculated\n if (this._isControlled) {\n routing.queryPrev = this.buildQueryParamsObject(\n this.currentPage - 1,\n this.currentPageSize\n );\n routing.queryNext = this.buildQueryParamsObject(\n this.currentPage + 1,\n this.currentPageSize\n );\n // IMPORTANT: here we need to use an object and not an array\n // otherwise the {{get object page}} will be shifted by one\n // (the pages are 1-based while the array would be zero-based)\n routing.queryPages = {};\n this.pages.forEach(\n (page) =>\n (routing.queryPages![page] = this.buildQueryParamsObject(\n page,\n this.currentPageSize\n ))\n );\n } else {\n routing.queryPrev = undefined;\n routing.queryNext = undefined;\n }\n\n return routing;\n }\n\n get isDisabledPrev() {\n return this.currentPage === 1;\n }\n\n get isDisabledNext() {\n return this.currentPage === this.totalPages;\n }\n\n @action\n onPageChange(page: HdsPaginationPage) {\n let gotoPageNumber;\n if (page === HdsPaginationDirectionValues.Prev && this.currentPage > 1) {\n gotoPageNumber = this.currentPage - 1;\n } else if (\n page === HdsPaginationDirectionValues.Next &&\n this.currentPage < this.totalPages\n ) {\n gotoPageNumber = this.currentPage + 1;\n } else {\n gotoPageNumber = page;\n }\n\n // we want to invoke the `onPageChange` callback only on actual page change\n if (gotoPageNumber !== this.currentPage) {\n // we have already determined that `gotoPageNumber` is not `prev` or `next`\n this.currentPage = gotoPageNumber as number;\n\n const { onPageChange } = this.args;\n\n if (typeof onPageChange === 'function') {\n onPageChange(this.currentPage, this.currentPageSize);\n }\n }\n }\n\n @action\n onPageSizeChange(newPageSize: number) {\n const { onPageSizeChange } = this.args;\n\n if (!this._isControlled) {\n // notice: we agreed to reset the pagination to the first element (any alternative would result in an unpredictable UX)\n this.currentPage = 1;\n this.currentPageSize = newPageSize;\n }\n\n // invoke the callback function\n if (typeof onPageSizeChange === 'function') {\n onPageSizeChange(newPageSize);\n }\n }\n\n elliptizedPageArrayItemAsNumber = (\n item: HdsPaginationElliptizedPageArrayItem\n ): number => {\n if (typeof item === 'number') {\n return item;\n } else {\n throw new Error('Expected a number, but got an ellipsis');\n }\n };\n\n getPageNumberQuery(page: HdsPaginationElliptizedPageArrayItem) {\n return this.routing.queryPages![this.elliptizedPageArrayItemAsNumber(page)];\n }\n}\n"],"names":["ELLIPSIS","DEFAULT_PAGE_SIZES","elliptize","pages","current","limit","length","result","start","end","Math","ceil","sliceStart","slice","sliceEnd","includes","splice","concat","delta","sliceCurr","shift","pop","HdsPaginationNumbered","Component","g","prototype","tracked","i","void 0","showInfo","args","showLabels","showSizeSelector","showPageNumbers","isTruncated","constructor","owner","queryFunction","undefined","_isControlled","assert","model","models","route","currentPageSize","currentPage","totalItems","_currentPage","_currentPageSize","pageSizes","ariaLabel","value","Array","isArray","itemsRangeStart","itemsRangeEnd","totalPages","push","max","buildQueryParamsObject","page","pageSize","routing","replace","queryPrev","queryNext","queryPages","forEach","isDisabledPrev","isDisabledNext","onPageChange","gotoPageNumber","HdsPaginationDirectionValues","Prev","Next","n","action","onPageSizeChange","newPageSize","elliptizedPageArrayItemAsNumber","item","Error","getPageNumberQuery","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/popover-primitive/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert, warn } from '@ember/debug';\nimport { next } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport registerEvent from '../../../modifiers/hds-register-event.ts';\nimport anchoredPositionModifier from '../../../modifiers/hds-anchored-position.ts';\n\nimport type { HdsAnchoredPositionOptions } from '../../../modifiers/hds-anchored-position.ts';\nimport type { ModifierLike } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nexport interface HdsPopoverPrimitiveSignature {\n Args: {\n isOpen?: boolean;\n enableSoftEvents?: boolean;\n enableClickEvents?: boolean;\n boundary?: HdsAnchoredPositionOptions['boundary'];\n onOpen?: () => void;\n onClose?: () => void;\n };\n Blocks: {\n default: [\n {\n setupPrimitiveContainer: ModifierLike<SetupPrimitiveContainerModifier>;\n setupPrimitiveToggle: ModifierLike<SetupPrimitiveToggleModifier>;\n setupPrimitivePopover: ModifierLike<SetupPrimitivePopoverModifier>;\n toggleElement?: HTMLButtonElement;\n popoverElement?: HTMLElement;\n isOpen: boolean;\n showPopover: () => void;\n hidePopover: (event?: Event) => void;\n togglePopover: () => void;\n boundary?: HdsAnchoredPositionOptions['boundary'];\n },\n ];\n };\n}\n\ninterface SetupPrimitiveContainerModifier {\n Element: HTMLElement;\n}\n\nexport interface SetupPrimitiveToggleModifier {\n Element: HTMLButtonElement;\n}\n\nexport interface SetupPrimitivePopoverModifier {\n Element: HTMLElement;\n Args: {\n Positional: [];\n Named: { anchoredPositionOptions: HdsAnchoredPositionOptions };\n };\n}\n\nexport default class HdsPopoverPrimitive extends Component<HdsPopoverPrimitiveSignature> {\n @tracked private _isOpen;\n @tracked private _isClosing = false;\n @tracked private _anchoredPositionOptions?: HdsAnchoredPositionOptions;\n private _containerElement?: HTMLElement;\n private _toggleElement?: HTMLButtonElement;\n private _popoverElement?: HTMLElement;\n // this will enable \"soft\" events for the toggle (\"hover\" and \"focus\")\n enableSoftEvents = this.args.enableSoftEvents ?? false;\n // this will enable \"click\" events for the toggle\n enableClickEvents = this.args.enableClickEvents ?? false;\n private _timer?: ReturnType<typeof setTimeout> | null;\n\n constructor(owner: Owner, args: HdsPopoverPrimitiveSignature['Args']) {\n super(owner, args);\n this._isOpen = this.args.isOpen ?? false;\n }\n\n setupPrimitiveContainer = modifier<SetupPrimitiveContainerModifier>(\n (element: HTMLElement): void => {\n this._containerElement = element;\n\n // we register the \"soft\" events\n if (this.enableSoftEvents) {\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._containerElement, [\n 'mouseenter',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onMouseEnter,\n ]);\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._containerElement, [\n 'mouseleave',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onMouseLeave,\n ]);\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._containerElement, ['focusin', this.onFocusIn]);\n }\n // we always want the focusOut event\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._containerElement, ['focusout', this.onFocusOut]);\n }\n );\n\n setupPrimitiveToggle = modifier<SetupPrimitiveToggleModifier>(\n (element: HTMLButtonElement) => {\n this._toggleElement = element;\n\n assert(\n `The toggle element of \"Hds::PopoverPrimitive\" must be a <button>; element received: <${element.tagName.toLowerCase()}>`,\n element instanceof HTMLButtonElement\n );\n\n this._linkToggleAndPopover();\n\n // Return a teardown function to clean up the modifier's side effects.\n // This is a safeguard against bugs where this element might be\n // cached and re-parented in the DOM, rather than being fully destroyed.\n return () => {\n element.removeAttribute('aria-controls');\n element.removeAttribute('popovertarget');\n };\n }\n );\n\n setupPrimitivePopover = modifier(\n (\n element: HTMLElement,\n _positional,\n named: { anchoredPositionOptions: HdsAnchoredPositionOptions }\n ): void => {\n this._popoverElement = element;\n\n // We need to create a popoverId in order to connect the popover and the toggle with aria-controls\n // and an id is needed to implement `onclick` event listeners\n if (!this._popoverElement.id) {\n this._popoverElement.id = guidFor(this);\n }\n\n // this should be an extremely edge case, but in the case the popover needs to be initially forced to be open\n // we need to use the \"manual\" state to support the case of multiple \"menus\" opened at the same time\n // IMPORTANT! if a \"popover\" is set to \"open\" with a \"manual\" state, then it can't be closed via `esc` and `click outside`\n if (this.args.isOpen) {\n this._popoverElement.popover = 'manual';\n this._popoverElement.showPopover();\n } else {\n this._popoverElement.popover = 'auto';\n }\n\n // Register \"onBeforeToggle\" + \"onToggle\" callback functions to be called when a native 'toggle' event is dispatched\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._popoverElement, [\n 'beforetoggle',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onBeforeTogglePopover,\n ]);\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._popoverElement, ['toggle', this.onTogglePopover]);\n\n // we need to spread the argument because if it's set via `{{ hash … }}` Ember complains when we overwrite one of its values\n this._anchoredPositionOptions = {\n ...named.anchoredPositionOptions,\n };\n\n this._linkToggleAndPopover();\n }\n );\n\n // Apply the `hds-anchored-position` modifier to the \"popover\" element\n // (notice: this function runs the first time when the element the modifier was applied to is inserted into the DOM, and it autotracks while running.\n // Any tracked values that it accesses will be tracked, including the arguments it receives, and if any of them changes, the function will run again)\n // This modifiers uses the Floating UI library to provide:\n // - positioning of the \"popover\" in relation to the \"toggle\"\n // - collision detection (optional)\n private _applyAnchoredPositionModifier(): void {\n if (\n this._toggleElement !== undefined &&\n this._popoverElement !== undefined &&\n this._anchoredPositionOptions !== undefined\n ) {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n // @ts-expect-error: known issue with type of invocation\n anchoredPositionModifier(\n this._popoverElement, // element the modifier is attached to\n [this._toggleElement], // positional arguments\n this._anchoredPositionOptions // named arguments\n );\n });\n }\n }\n\n private _linkToggleAndPopover(): void {\n if (\n this._toggleElement === undefined ||\n this._popoverElement === undefined\n ) {\n return;\n }\n\n const popoverId = this._popoverElement.id;\n\n this._toggleElement.setAttribute('aria-controls', popoverId);\n\n if (this.enableClickEvents) {\n this._toggleElement.setAttribute('popovertarget', popoverId);\n } else {\n this._toggleElement.removeAttribute('popovertarget');\n }\n\n this._applyAnchoredPositionModifier();\n }\n\n @action\n showPopover(): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.showPopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`showPopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.show-popover-action.invocation-failed',\n }\n );\n }\n }\n\n @action\n // the event may be passed by the `on` modifier, so we need to keep it as an argument here\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n hidePopover(_event?: Event): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.hidePopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`hidePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.hide-popover-action.invocation-failed',\n }\n );\n }\n }\n\n @action\n togglePopover(): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.togglePopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`togglePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.toggle-popover-action.invocation-failed',\n }\n );\n }\n }\n\n // fired just _before_ the \"popover\" is shown or hidden\n @action\n onBeforeTogglePopover(event: ToggleEvent): void {\n if (event.newState === 'closed') {\n // we need this flag to check if it's in the \"closing\" process,\n // because the browser automatically returns the focus to the \"trigger\" button\n // and this would re-open immediately the popover because of the `focusin` event\n this._isClosing = true;\n }\n }\n\n // fired just _after_ the \"popover\" is shown or hidden\n @action\n onTogglePopover(event: ToggleEvent): void {\n if (event.newState === 'open') {\n this._isOpen = true;\n\n // we call the \"onOpen\" callback if it exists (and is a function)\n const { onOpen } = this.args;\n if (typeof onOpen === 'function') {\n onOpen();\n }\n } else {\n this._isOpen = false;\n\n // reset the \"isClosing\" flag (the `toggle` event is fired _after_ the popover is closed)\n this._isClosing = false;\n\n // if the popover was initially forced to be open (using the \"manual\" state) then revert its status to `auto` once the user interacts with it\n if (this.args.isOpen) {\n if (this._popoverElement) {\n this._popoverElement.popover = 'auto';\n }\n }\n\n // we call the \"onClose\" callback if it exists (and is a function)\n const { onClose } = this.args;\n if (typeof onClose === 'function') {\n onClose();\n }\n }\n }\n\n @action\n onMouseEnter(): void {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n this.showPopover();\n }\n\n @action\n onFocusIn(): void {\n // don't re-open the popover if the focus is returned because the closing\n if (!this._isClosing) {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n this.showPopover();\n }\n }\n\n @action\n onMouseLeave(): void {\n this._timer = setTimeout((): void => this.hidePopover(), 500);\n }\n\n @action\n onFocusOut(event: FocusEvent): void {\n if (this._containerElement) {\n let isFocusStillInside = false;\n if (\n event.relatedTarget &&\n // if the related target is not part of the disclosed content we close the disclosed container\n this._containerElement.contains(event.relatedTarget as Node)\n ) {\n isFocusStillInside = true;\n } else if (\n document.activeElement &&\n // due to inconsistent implementation of relatedTarget across browsers we use the activeElement as a fallback\n this._containerElement.contains(document.activeElement)\n ) {\n isFocusStillInside = true;\n }\n // if the target receiving the focus is _not_ part of the disclosed content we close the disclosed container\n if (!isFocusStillInside) {\n this.hidePopover();\n }\n }\n }\n}\n"],"names":["HdsPopoverPrimitive","Component","g","prototype","tracked","i","_containerElement","_toggleElement","_popoverElement","enableSoftEvents","args","enableClickEvents","_timer","constructor","owner","_isOpen","isOpen","setupPrimitiveContainer","modifier","element","registerEvent","onMouseEnter","onMouseLeave","onFocusIn","onFocusOut","setupPrimitiveToggle","assert","tagName","toLowerCase","HTMLButtonElement","_linkToggleAndPopover","removeAttribute","setupPrimitivePopover","_positional","named","id","guidFor","popover","showPopover","onBeforeTogglePopover","onTogglePopover","_anchoredPositionOptions","anchoredPositionOptions","_applyAnchoredPositionModifier","undefined","next","anchoredPositionModifier","popoverId","setAttribute","error","warn","JSON","stringify","n","action","hidePopover","_event","togglePopover","event","newState","_isClosing","onOpen","onClose","clearTimeout","setTimeout","isFocusStillInside","relatedTarget","contains","document","activeElement","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/popover-primitive/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { assert, warn } from '@ember/debug';\nimport { next } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\n\nimport registerEvent from '../../../modifiers/hds-register-event.ts';\nimport anchoredPositionModifier from '../../../modifiers/hds-anchored-position.ts';\n\nimport type { HdsAnchoredPositionOptions } from '../../../modifiers/hds-anchored-position.ts';\nimport type { ModifierLike } from '@glint/template';\nimport type Owner from '@ember/owner';\n\nexport interface HdsPopoverPrimitiveSignature {\n Args: {\n isOpen?: boolean;\n enableSoftEvents?: boolean;\n enableClickEvents?: boolean;\n boundary?: HdsAnchoredPositionOptions['boundary'];\n onOpen?: () => void;\n onClose?: () => void;\n };\n Blocks: {\n default: [\n {\n setupPrimitiveContainer: ModifierLike<SetupPrimitiveContainerModifier>;\n setupPrimitiveToggle: ModifierLike<SetupPrimitiveToggleModifier>;\n setupPrimitivePopover: ModifierLike<SetupPrimitivePopoverModifier>;\n toggleElement?: HTMLButtonElement;\n popoverElement?: HTMLElement;\n isOpen: boolean;\n showPopover: () => void;\n hidePopover: (event?: Event) => void;\n togglePopover: () => void;\n boundary?: HdsAnchoredPositionOptions['boundary'];\n },\n ];\n };\n}\n\ninterface SetupPrimitiveContainerModifier {\n Element: HTMLElement;\n}\n\nexport interface SetupPrimitiveToggleModifier {\n Element: HTMLButtonElement;\n}\n\nexport interface SetupPrimitivePopoverModifier {\n Element: HTMLElement;\n Args: {\n Positional: [];\n Named: { anchoredPositionOptions: HdsAnchoredPositionOptions };\n };\n}\n\nexport default class HdsPopoverPrimitive extends Component<HdsPopoverPrimitiveSignature> {\n @tracked private _isOpen;\n @tracked private _isClosing = false;\n @tracked private _anchoredPositionOptions?: HdsAnchoredPositionOptions;\n private _containerElement?: HTMLElement;\n private _toggleElement?: HTMLButtonElement;\n private _popoverElement?: HTMLElement;\n // this will enable \"soft\" events for the toggle (\"hover\" and \"focus\")\n enableSoftEvents = this.args.enableSoftEvents ?? false;\n // this will enable \"click\" events for the toggle\n enableClickEvents = this.args.enableClickEvents ?? false;\n private _timer?: ReturnType<typeof setTimeout> | null;\n\n constructor(owner: Owner, args: HdsPopoverPrimitiveSignature['Args']) {\n super(owner, args);\n this._isOpen = this.args.isOpen ?? false;\n }\n\n setupPrimitiveContainer = modifier<SetupPrimitiveContainerModifier>(\n (element: HTMLElement): void => {\n this._containerElement = element;\n\n // we register the \"soft\" events\n if (this.enableSoftEvents) {\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._containerElement, [\n 'mouseenter',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onMouseEnter,\n ]);\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._containerElement, [\n 'mouseleave',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onMouseLeave,\n ]);\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._containerElement, ['focusin', this.onFocusIn]);\n }\n // we always want the focusOut event\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._containerElement, ['focusout', this.onFocusOut]);\n }\n );\n\n setupPrimitiveToggle = modifier<SetupPrimitiveToggleModifier>(\n (element: HTMLButtonElement) => {\n this._toggleElement = element;\n\n assert(\n `The toggle element of \"Hds::PopoverPrimitive\" must be a <button>; element received: <${element.tagName.toLowerCase()}>`,\n element instanceof HTMLButtonElement\n );\n\n this._linkToggleAndPopover();\n\n // Return a teardown function to clean up the modifier's side effects.\n // This is a safeguard against bugs where this element might be\n // cached and re-parented in the DOM, rather than being fully destroyed.\n return () => {\n element.removeAttribute('aria-controls');\n element.removeAttribute('popovertarget');\n };\n }\n );\n\n setupPrimitivePopover = modifier(\n (\n element: HTMLElement,\n _positional,\n named: { anchoredPositionOptions: HdsAnchoredPositionOptions }\n ): void => {\n this._popoverElement = element;\n\n // We need to create a popoverId in order to connect the popover and the toggle with aria-controls\n // and an id is needed to implement `onclick` event listeners\n if (!this._popoverElement.id) {\n this._popoverElement.id = guidFor(this);\n }\n\n // this should be an extremely edge case, but in the case the popover needs to be initially forced to be open\n // we need to use the \"manual\" state to support the case of multiple \"menus\" opened at the same time\n // IMPORTANT! if a \"popover\" is set to \"open\" with a \"manual\" state, then it can't be closed via `esc` and `click outside`\n if (this.args.isOpen) {\n this._popoverElement.popover = 'manual';\n this._popoverElement.showPopover();\n } else {\n this._popoverElement.popover = 'auto';\n }\n\n // Register \"onBeforeToggle\" + \"onToggle\" callback functions to be called when a native 'toggle' event is dispatched\n // @ts-expect-error: known issue with type of invocation\n registerEvent(this._popoverElement, [\n 'beforetoggle',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.onBeforeTogglePopover,\n ]);\n // @ts-expect-error: known issue with type of invocation\n // eslint-disable-next-line @typescript-eslint/unbound-method\n registerEvent(this._popoverElement, ['toggle', this.onTogglePopover]);\n\n // we need to spread the argument because if it's set via `{{ hash … }}` Ember complains when we overwrite one of its values\n this._anchoredPositionOptions = {\n ...named.anchoredPositionOptions,\n };\n\n this._linkToggleAndPopover();\n }\n );\n\n // Apply the `hds-anchored-position` modifier to the \"popover\" element\n // (notice: this function runs the first time when the element the modifier was applied to is inserted into the DOM, and it autotracks while running.\n // Any tracked values that it accesses will be tracked, including the arguments it receives, and if any of them changes, the function will run again)\n // This modifiers uses the Floating UI library to provide:\n // - positioning of the \"popover\" in relation to the \"toggle\"\n // - collision detection (optional)\n private _applyAnchoredPositionModifier(): void {\n if (\n this._toggleElement !== undefined &&\n this._popoverElement !== undefined &&\n this._anchoredPositionOptions !== undefined\n ) {\n // eslint-disable-next-line ember/no-runloop\n next((): void => {\n // @ts-expect-error: known issue with type of invocation\n anchoredPositionModifier(\n this._popoverElement, // element the modifier is attached to\n [this._toggleElement], // positional arguments\n this._anchoredPositionOptions // named arguments\n );\n });\n }\n }\n\n private _linkToggleAndPopover(): void {\n if (\n this._toggleElement === undefined ||\n this._popoverElement === undefined\n ) {\n return;\n }\n\n const popoverId = this._popoverElement.id;\n\n this._toggleElement.setAttribute('aria-controls', popoverId);\n\n if (this.enableClickEvents) {\n this._toggleElement.setAttribute('popovertarget', popoverId);\n } else {\n this._toggleElement.removeAttribute('popovertarget');\n }\n\n this._applyAnchoredPositionModifier();\n }\n\n @action\n showPopover(): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.showPopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`showPopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.show-popover-action.invocation-failed',\n }\n );\n }\n }\n\n @action\n // the event may be passed by the `on` modifier, so we need to keep it as an argument here\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n hidePopover(_event?: Event): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.hidePopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`hidePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.hide-popover-action.invocation-failed',\n }\n );\n }\n }\n\n @action\n togglePopover(): void {\n try {\n if (this._popoverElement) {\n this._popoverElement.togglePopover();\n }\n } catch (error) {\n warn(\n `The invocation of \\`togglePopover\\` for the popover element caused an unexpected error: ${JSON.stringify(\n error\n )}`,\n {\n id: 'hds-popover.toggle-popover-action.invocation-failed',\n }\n );\n }\n }\n\n // fired just _before_ the \"popover\" is shown or hidden\n @action\n onBeforeTogglePopover(event: ToggleEvent): void {\n if (event.newState === 'closed') {\n // we need this flag to check if it's in the \"closing\" process,\n // because the browser automatically returns the focus to the \"trigger\" button\n // and this would re-open immediately the popover because of the `focusin` event\n this._isClosing = true;\n }\n }\n\n // fired just _after_ the \"popover\" is shown or hidden\n @action\n onTogglePopover(event: ToggleEvent): void {\n if (event.newState === 'open') {\n this._isOpen = true;\n\n // we call the \"onOpen\" callback if it exists (and is a function)\n const { onOpen } = this.args;\n if (typeof onOpen === 'function') {\n onOpen();\n }\n } else {\n this._isOpen = false;\n\n // reset the \"isClosing\" flag (the `toggle` event is fired _after_ the popover is closed)\n this._isClosing = false;\n\n // if the popover was initially forced to be open (using the \"manual\" state) then revert its status to `auto` once the user interacts with it\n if (this.args.isOpen) {\n if (this._popoverElement) {\n this._popoverElement.popover = 'auto';\n }\n }\n\n // we call the \"onClose\" callback if it exists (and is a function)\n const { onClose } = this.args;\n if (typeof onClose === 'function') {\n onClose();\n }\n }\n }\n\n @action\n onMouseEnter(): void {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n this.showPopover();\n }\n\n @action\n onFocusIn(): void {\n // don't re-open the popover if the focus is returned because the closing\n if (!this._isClosing) {\n if (this._timer) {\n clearTimeout(this._timer);\n }\n this.showPopover();\n }\n }\n\n @action\n onMouseLeave(): void {\n this._timer = setTimeout((): void => this.hidePopover(), 500);\n }\n\n @action\n onFocusOut(event: FocusEvent): void {\n if (this._containerElement) {\n let isFocusStillInside = false;\n if (\n event.relatedTarget &&\n // if the related target is not part of the disclosed content we close the disclosed container\n this._containerElement.contains(event.relatedTarget as Node)\n ) {\n isFocusStillInside = true;\n } else if (\n document.activeElement &&\n // due to inconsistent implementation of relatedTarget across browsers we use the activeElement as a fallback\n this._containerElement.contains(document.activeElement)\n ) {\n isFocusStillInside = true;\n }\n // if the target receiving the focus is _not_ part of the disclosed content we close the disclosed container\n if (!isFocusStillInside) {\n this.hidePopover();\n }\n }\n }\n}\n"],"names":["HdsPopoverPrimitive","Component","g","prototype","tracked","i","void 0","_containerElement","_toggleElement","_popoverElement","enableSoftEvents","args","enableClickEvents","_timer","constructor","owner","_isOpen","isOpen","setupPrimitiveContainer","modifier","element","registerEvent","onMouseEnter","onMouseLeave","onFocusIn","onFocusOut","setupPrimitiveToggle","assert","tagName","toLowerCase","HTMLButtonElement","_linkToggleAndPopover","removeAttribute","setupPrimitivePopover","_positional","named","id","guidFor","popover","showPopover","onBeforeTogglePopover","onTogglePopover","_anchoredPositionOptions","anchoredPositionOptions","_applyAnchoredPositionModifier","undefined","next","anchoredPositionModifier","popoverId","setAttribute","error","warn","JSON","stringify","n","action","hidePopover","_event","togglePopover","event","newState","_isClosing","onOpen","onClose","clearTimeout","setTimeout","isFocusStillInside","relatedTarget","contains","document","activeElement","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/side-nav/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { deprecate } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { registerDestructor } from '@ember/destroyable';\n\nimport type { HdsSideNavBaseSignature } from './base';\nimport type Owner from '@ember/owner';\nimport type { NavigationNarratorSignature } from 'ember-a11y-refocus/components/navigation-narrator';\n\nexport interface HdsSideNavSignature {\n Args: {\n isResponsive?: boolean;\n isCollapsible?: boolean;\n isMinimized?: boolean;\n hasA11yRefocus?: boolean;\n a11yRefocusSkipTo?: string;\n a11yRefocusSkipText?: string;\n a11yRefocusNavigationText?: string;\n a11yRefocusRouteChangeValidator?: NavigationNarratorSignature['Args']['routeChangeValidator'];\n a11yRefocusExcludeAllQueryParams?: boolean;\n\n onToggleMinimizedStatus?: (arg: boolean) => void;\n\n onDesktopViewportChange?: (arg: boolean) => void;\n };\n Blocks: {\n header?: [\n {\n Header?: HdsSideNavBaseSignature['Blocks']['header'];\n isMinimized?: boolean;\n },\n ];\n body?: [\n {\n Body?: HdsSideNavBaseSignature['Blocks']['body'];\n isMinimized?: boolean;\n },\n ];\n footer?: [\n {\n Footer?: HdsSideNavBaseSignature['Blocks']['footer'];\n isMinimized?: boolean;\n },\n ];\n };\n Element: HdsSideNavBaseSignature['Element'];\n}\n\nexport default class HdsSideNav extends Component<HdsSideNavSignature> {\n @tracked isAnimating = false;\n @tracked isDesktop = true;\n @tracked isMinimized = false;\n\n desktopMQ: MediaQueryList;\n containersToHide!: NodeListOf<Element>;\n hasA11yRefocus = this.args.hasA11yRefocus ?? true;\n a11yRefocusSkipTo = '#' + (this.args.a11yRefocusSkipTo ?? 'hds-main');\n\n desktopMQVal = getComputedStyle(document.documentElement).getPropertyValue(\n '--hds-app-desktop-breakpoint'\n );\n\n constructor(owner: Owner, args: HdsSideNavSignature['Args']) {\n super(owner, args);\n // sets the default minimized state on 'desktop' viewports\n this.isMinimized = this.args.isMinimized ?? false;\n this.desktopMQ = window.matchMedia(`(min-width:${this.desktopMQVal})`);\n this.addEventListeners();\n registerDestructor(this, (): void => {\n this.removeEventListeners();\n });\n\n deprecate(\n 'The `Hds::SideNav` component is now deprecated and will be removed in the next major version of `@hashicorp/design-system-components`. Use `Hds::AppSideNav` instead.',\n false,\n {\n id: 'hds.components.sidenav',\n until: '6.0.0',\n url: 'https://helios.hashicorp.design/components/side-nav?tab=version%20history#4140',\n for: '@hashicorp/design-system-components',\n since: {\n available: '4.19.0',\n enabled: '5.0.0',\n },\n }\n );\n }\n\n addEventListeners(): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n document.addEventListener('keydown', this.escapePress, true);\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.desktopMQ.addEventListener('change', this.updateDesktopVariable, true);\n // if not instantiated as minimized via arguments\n if (!this.args.isMinimized) {\n // set initial state based on viewport using a \"synthetic\" event\n const syntheticEvent = new MediaQueryListEvent('change', {\n matches: this.desktopMQ.matches,\n media: this.desktopMQ.media,\n });\n this.updateDesktopVariable(syntheticEvent);\n }\n }\n\n removeEventListeners(): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n document.removeEventListener('keydown', this.escapePress, true);\n this.desktopMQ.removeEventListener(\n 'change',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.updateDesktopVariable,\n true\n );\n }\n\n // controls if the component reacts to viewport changes\n get isResponsive(): boolean {\n return this.args.isResponsive ?? true;\n }\n\n // controls if users can collapse the appsidenav on 'desktop' viewports\n get isCollapsible(): boolean {\n return this.args.isCollapsible ?? false;\n }\n\n get shouldTrapFocus(): boolean {\n return this.isResponsive && !this.isDesktop && !this.isMinimized;\n }\n\n get showToggleButton(): boolean {\n return (this.isResponsive && !this.isDesktop) || this.isCollapsible;\n }\n\n get classNames(): string {\n const classes = []; // `hds-side-nav` is already set by the \"Hds::SideNav::Base\" component\n\n // add specific class names for the different possible states\n if (this.isResponsive) {\n classes.push('hds-side-nav--is-responsive');\n }\n if (!this.isDesktop && this.isResponsive) {\n classes.push('hds-side-nav--is-mobile');\n } else {\n classes.push('hds-side-nav--is-desktop');\n }\n if (this.isMinimized && this.isResponsive) {\n classes.push('hds-side-nav--is-minimized');\n } else {\n classes.push('hds-side-nav--is-not-minimized');\n }\n if (this.isAnimating) {\n classes.push('hds-side-nav--is-animating');\n }\n\n return classes.join(' ');\n }\n\n synchronizeInert(): void {\n this.containersToHide?.forEach((element): void => {\n if (this.isMinimized) {\n element.setAttribute('inert', '');\n } else {\n element.removeAttribute('inert');\n }\n });\n }\n\n @action\n escapePress(event: KeyboardEvent): void {\n if (event.key === 'Escape' && !this.isMinimized && !this.isDesktop) {\n this.isMinimized = true;\n this.synchronizeInert();\n }\n }\n\n @action\n toggleMinimizedStatus(): void {\n this.isMinimized = !this.isMinimized;\n\n this.synchronizeInert();\n\n const { onToggleMinimizedStatus } = this.args;\n\n if (typeof onToggleMinimizedStatus === 'function') {\n onToggleMinimizedStatus(this.isMinimized);\n }\n }\n\n @action\n didInsert(element: HTMLElement): void {\n this.containersToHide = element.querySelectorAll(\n '.hds-side-nav-hide-when-minimized'\n );\n }\n\n @action\n setTransition(phase: string, event: TransitionEvent): void {\n // we only want to respond to `width` animation/transitions\n if (event.propertyName !== 'width') {\n return;\n }\n if (phase === 'start') {\n this.isAnimating = true;\n } else {\n this.isAnimating = false;\n }\n }\n\n @action\n updateDesktopVariable(event: MediaQueryListEvent): void {\n this.isDesktop = event.matches;\n\n // automatically minimize on narrow viewports (when not in desktop mode)\n this.isMinimized = !this.isDesktop;\n\n this.synchronizeInert();\n\n const { onDesktopViewportChange } = this.args;\n\n if (typeof onDesktopViewportChange === 'function') {\n onDesktopViewportChange(this.isDesktop);\n }\n }\n}\n"],"names":["HdsSideNav","Component","g","prototype","tracked","i","desktopMQ","containersToHide","hasA11yRefocus","args","a11yRefocusSkipTo","desktopMQVal","getComputedStyle","document","documentElement","getPropertyValue","constructor","owner","isMinimized","window","matchMedia","addEventListeners","registerDestructor","removeEventListeners","deprecate","id","until","url","for","since","available","enabled","addEventListener","escapePress","updateDesktopVariable","syntheticEvent","MediaQueryListEvent","matches","media","removeEventListener","isResponsive","isCollapsible","shouldTrapFocus","isDesktop","showToggleButton","classNames","classes","push","isAnimating","join","synchronizeInert","forEach","element","setAttribute","removeAttribute","event","key","n","action","toggleMinimizedStatus","onToggleMinimizedStatus","didInsert","querySelectorAll","setTransition","phase","propertyName","onDesktopViewportChange","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/side-nav/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { deprecate } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { registerDestructor } from '@ember/destroyable';\n\nimport type { HdsSideNavBaseSignature } from './base';\nimport type Owner from '@ember/owner';\nimport type { NavigationNarratorSignature } from 'ember-a11y-refocus/components/navigation-narrator';\n\nexport interface HdsSideNavSignature {\n Args: {\n isResponsive?: boolean;\n isCollapsible?: boolean;\n isMinimized?: boolean;\n hasA11yRefocus?: boolean;\n a11yRefocusSkipTo?: string;\n a11yRefocusSkipText?: string;\n a11yRefocusNavigationText?: string;\n a11yRefocusRouteChangeValidator?: NavigationNarratorSignature['Args']['routeChangeValidator'];\n a11yRefocusExcludeAllQueryParams?: boolean;\n\n onToggleMinimizedStatus?: (arg: boolean) => void;\n\n onDesktopViewportChange?: (arg: boolean) => void;\n };\n Blocks: {\n header?: [\n {\n Header?: HdsSideNavBaseSignature['Blocks']['header'];\n isMinimized?: boolean;\n },\n ];\n body?: [\n {\n Body?: HdsSideNavBaseSignature['Blocks']['body'];\n isMinimized?: boolean;\n },\n ];\n footer?: [\n {\n Footer?: HdsSideNavBaseSignature['Blocks']['footer'];\n isMinimized?: boolean;\n },\n ];\n };\n Element: HdsSideNavBaseSignature['Element'];\n}\n\nexport default class HdsSideNav extends Component<HdsSideNavSignature> {\n @tracked isAnimating = false;\n @tracked isDesktop = true;\n @tracked isMinimized = false;\n\n desktopMQ: MediaQueryList;\n containersToHide!: NodeListOf<Element>;\n hasA11yRefocus = this.args.hasA11yRefocus ?? true;\n a11yRefocusSkipTo = '#' + (this.args.a11yRefocusSkipTo ?? 'hds-main');\n\n desktopMQVal = getComputedStyle(document.documentElement).getPropertyValue(\n '--hds-app-desktop-breakpoint'\n );\n\n constructor(owner: Owner, args: HdsSideNavSignature['Args']) {\n super(owner, args);\n // sets the default minimized state on 'desktop' viewports\n this.isMinimized = this.args.isMinimized ?? false;\n this.desktopMQ = window.matchMedia(`(min-width:${this.desktopMQVal})`);\n this.addEventListeners();\n registerDestructor(this, (): void => {\n this.removeEventListeners();\n });\n\n deprecate(\n 'The `Hds::SideNav` component is now deprecated and will be removed in the next major version of `@hashicorp/design-system-components`. Use `Hds::AppSideNav` instead.',\n false,\n {\n id: 'hds.components.sidenav',\n until: '6.0.0',\n url: 'https://helios.hashicorp.design/components/side-nav?tab=version%20history#4140',\n for: '@hashicorp/design-system-components',\n since: {\n available: '4.19.0',\n enabled: '5.0.0',\n },\n }\n );\n }\n\n addEventListeners(): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n document.addEventListener('keydown', this.escapePress, true);\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.desktopMQ.addEventListener('change', this.updateDesktopVariable, true);\n // if not instantiated as minimized via arguments\n if (!this.args.isMinimized) {\n // set initial state based on viewport using a \"synthetic\" event\n const syntheticEvent = new MediaQueryListEvent('change', {\n matches: this.desktopMQ.matches,\n media: this.desktopMQ.media,\n });\n this.updateDesktopVariable(syntheticEvent);\n }\n }\n\n removeEventListeners(): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n document.removeEventListener('keydown', this.escapePress, true);\n this.desktopMQ.removeEventListener(\n 'change',\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.updateDesktopVariable,\n true\n );\n }\n\n // controls if the component reacts to viewport changes\n get isResponsive(): boolean {\n return this.args.isResponsive ?? true;\n }\n\n // controls if users can collapse the appsidenav on 'desktop' viewports\n get isCollapsible(): boolean {\n return this.args.isCollapsible ?? false;\n }\n\n get shouldTrapFocus(): boolean {\n return this.isResponsive && !this.isDesktop && !this.isMinimized;\n }\n\n get showToggleButton(): boolean {\n return (this.isResponsive && !this.isDesktop) || this.isCollapsible;\n }\n\n get classNames(): string {\n const classes = []; // `hds-side-nav` is already set by the \"Hds::SideNav::Base\" component\n\n // add specific class names for the different possible states\n if (this.isResponsive) {\n classes.push('hds-side-nav--is-responsive');\n }\n if (!this.isDesktop && this.isResponsive) {\n classes.push('hds-side-nav--is-mobile');\n } else {\n classes.push('hds-side-nav--is-desktop');\n }\n if (this.isMinimized && this.isResponsive) {\n classes.push('hds-side-nav--is-minimized');\n } else {\n classes.push('hds-side-nav--is-not-minimized');\n }\n if (this.isAnimating) {\n classes.push('hds-side-nav--is-animating');\n }\n\n return classes.join(' ');\n }\n\n synchronizeInert(): void {\n this.containersToHide?.forEach((element): void => {\n if (this.isMinimized) {\n element.setAttribute('inert', '');\n } else {\n element.removeAttribute('inert');\n }\n });\n }\n\n @action\n escapePress(event: KeyboardEvent): void {\n if (event.key === 'Escape' && !this.isMinimized && !this.isDesktop) {\n this.isMinimized = true;\n this.synchronizeInert();\n }\n }\n\n @action\n toggleMinimizedStatus(): void {\n this.isMinimized = !this.isMinimized;\n\n this.synchronizeInert();\n\n const { onToggleMinimizedStatus } = this.args;\n\n if (typeof onToggleMinimizedStatus === 'function') {\n onToggleMinimizedStatus(this.isMinimized);\n }\n }\n\n @action\n didInsert(element: HTMLElement): void {\n this.containersToHide = element.querySelectorAll(\n '.hds-side-nav-hide-when-minimized'\n );\n }\n\n @action\n setTransition(phase: string, event: TransitionEvent): void {\n // we only want to respond to `width` animation/transitions\n if (event.propertyName !== 'width') {\n return;\n }\n if (phase === 'start') {\n this.isAnimating = true;\n } else {\n this.isAnimating = false;\n }\n }\n\n @action\n updateDesktopVariable(event: MediaQueryListEvent): void {\n this.isDesktop = event.matches;\n\n // automatically minimize on narrow viewports (when not in desktop mode)\n this.isMinimized = !this.isDesktop;\n\n this.synchronizeInert();\n\n const { onDesktopViewportChange } = this.args;\n\n if (typeof onDesktopViewportChange === 'function') {\n onDesktopViewportChange(this.isDesktop);\n }\n }\n}\n"],"names":["HdsSideNav","Component","g","prototype","tracked","i","void 0","desktopMQ","containersToHide","hasA11yRefocus","args","a11yRefocusSkipTo","desktopMQVal","getComputedStyle","document","documentElement","getPropertyValue","constructor","owner","isMinimized","window","matchMedia","addEventListeners","registerDestructor","removeEventListeners","deprecate","id","until","url","for","since","available","enabled","addEventListener","escapePress","updateDesktopVariable","syntheticEvent","MediaQueryListEvent","matches","media","removeEventListener","isResponsive","isCollapsible","shouldTrapFocus","isDesktop","showToggleButton","classNames","classes","push","isAnimating","join","synchronizeInert","forEach","element","setAttribute","removeAttribute","event","key","n","action","toggleMinimizedStatus","onToggleMinimizedStatus","didInsert","querySelectorAll","setTransition","phase","propertyName","onDesktopViewportChange","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/side-nav/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsYieldSignature } from '../../yield';\nimport type { HdsSideNavListItemSignature } from './item';\nimport type { HdsSideNavListBackLinkSignature } from './back-link';\nimport type { HdsSideNavListTitleSignature } from './title';\nimport type { HdsSideNavListLinkSignature } from './link';\n\nexport interface HdsSideNavListSignature {\n Blocks: {\n default: [\n {\n ExtraBefore?: ComponentLike<HdsYieldSignature>;\n Item?: ComponentLike<HdsSideNavListItemSignature>;\n BackLink?: ComponentLike<HdsSideNavListBackLinkSignature>;\n Title?: ComponentLike<HdsSideNavListTitleSignature>;\n Link?: ComponentLike<HdsSideNavListLinkSignature>;\n ExtraAfter?: ComponentLike<HdsYieldSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsSideNavList extends Component<HdsSideNavListSignature> {\n @tracked _titleIds: string[] = [];\n\n get titleIds(): string {\n return this._titleIds.join(' ');\n }\n\n @action\n didInsertTitle(titleId: string): void {\n this._titleIds = [...this._titleIds, titleId];\n }\n}\n"],"names":["HdsSideNavList","Component","g","prototype","tracked","i","titleIds","_titleIds","join","didInsertTitle","titleId","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;;AA4Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAuB,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAA,MAAA;EAEjC,IAAIC,QAAQA,GAAW;AACrB,IAAA,OAAO,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,GAAG,CAAC;AACjC,EAAA;EAGAC,cAAcA,CAACC,OAAe,EAAQ;IACpC,IAAI,CAACH,SAAS,GAAG,CAAC,GAAG,IAAI,CAACA,SAAS,EAAEG,OAAO,CAAC;AAC/C,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAR,SAAA,EAAA,gBAAA,EAAA,CAHAS,MAAM,CAAA,CAAA;AAAA;AAIT;AAACC,oBAAA,CAAAC,QAAA,EAXoBd,cAAc,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/side-nav/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsYieldSignature } from '../../yield';\nimport type { HdsSideNavListItemSignature } from './item';\nimport type { HdsSideNavListBackLinkSignature } from './back-link';\nimport type { HdsSideNavListTitleSignature } from './title';\nimport type { HdsSideNavListLinkSignature } from './link';\n\nexport interface HdsSideNavListSignature {\n Blocks: {\n default: [\n {\n ExtraBefore?: ComponentLike<HdsYieldSignature>;\n Item?: ComponentLike<HdsSideNavListItemSignature>;\n BackLink?: ComponentLike<HdsSideNavListBackLinkSignature>;\n Title?: ComponentLike<HdsSideNavListTitleSignature>;\n Link?: ComponentLike<HdsSideNavListLinkSignature>;\n ExtraAfter?: ComponentLike<HdsYieldSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsSideNavList extends Component<HdsSideNavListSignature> {\n @tracked _titleIds: string[] = [];\n\n get titleIds(): string {\n return this._titleIds.join(' ');\n }\n\n @action\n didInsertTitle(titleId: string): void {\n this._titleIds = [...this._titleIds, titleId];\n }\n}\n"],"names":["HdsSideNavList","Component","g","prototype","tracked","i","void 0","titleIds","_titleIds","join","didInsertTitle","titleId","n","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;;AA4Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAuB,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAAC,MAAA;EAEjC,IAAIC,QAAQA,GAAW;AACrB,IAAA,OAAO,IAAI,CAACC,SAAS,CAACC,IAAI,CAAC,GAAG,CAAC;AACjC,EAAA;EAGAC,cAAcA,CAACC,OAAe,EAAQ;IACpC,IAAI,CAACH,SAAS,GAAG,CAAC,GAAG,IAAI,CAACA,SAAS,EAAEG,OAAO,CAAC;AAC/C,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAT,SAAA,EAAA,gBAAA,EAAA,CAHAU,MAAM,CAAA,CAAA;AAAA;AAIT;AAACC,oBAAA,CAAAC,QAAA,EAXoBf,cAAc,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"target.js","sources":["../../../../../src/components/hds/side-nav/portal/target.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { macroCondition, isTesting } from '@embroider/macros';\n\nimport type { HdsSideNavPortalSignature } from './index';\n\nimport type { Registry as Services } from '@ember/service';\n\nexport interface HdsSideNavPortalTargetSignature {\n Args: {\n targetName?: HdsSideNavPortalSignature['Args']['targetName'];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsSideNavPortalTarget extends Component<HdsSideNavPortalTargetSignature> {\n @service router!: Services['router'];\n\n @tracked numSubnavs = 0;\n @tracked lastPanelEl: Element | undefined;\n\n static get prefersReducedMotionOverride(): boolean {\n return macroCondition(isTesting()) ? true : false;\n }\n\n prefersReducedMotionMQ = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n );\n\n get prefersReducedMotion(): boolean {\n return (\n HdsSideNavPortalTarget.prefersReducedMotionOverride ||\n (this.prefersReducedMotionMQ && this.prefersReducedMotionMQ.matches)\n );\n }\n\n @action\n panelsChanged(portalCount: number): void {\n this.numSubnavs = portalCount;\n }\n\n @action\n didUpdateSubnav(element: HTMLElement, [count]: [number]): void {\n this.animateSubnav(element, [count]);\n }\n\n @action\n animateSubnav(element: HTMLElement, [count]: [number]): void {\n /*\n * Here is what the layout looks like for this setup\n *\n\n SideNav\n +----------------------+\n | +------------------+ |\n | | (\"header\") | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"body\") | |\n (PortalTarget) | | | |\n +----------------------------------------------+ | |\n | +----------+ +----------+ | +----------+ | | |\n | | (Portal) | | (Portal) | | (Portal) | | | |\n | | | | | | | | | | |\n | | hidden | | hidden | | *active* | | | |\n | | panel | | panel | | | panel | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | +----------+ +----------+ | +----------+ | | |\n +----------------------------------------------+ | |\n | | | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"footer\") | |\n | +------------------+ |\n +----------------------+\n\n *\n * every time `HcAppFrame::SideNav::Portal` renders, it contains a portaled \"panel\"\n * that is rendered into the `hds-side-nav__content-panels` (inside the PortalTarget).\n *\n * Rendering or unrendering other `HcAppFrame::SideNav::Portal`s triggers the number of\n * subnavs to change (via `numSubnavs`), so this function runs and slides\n * `hds-side-nav__content-panels` left or right using the `element.animate` api.\n *\n * */\n\n const activeIndex = count - 1;\n const targetElement = element;\n const { prefersReducedMotion } = this;\n\n const styles = getComputedStyle(targetElement);\n const columnWidth = styles.getPropertyValue(\n '--hds-app-sidenav-width-expanded'\n );\n const slideDuration = prefersReducedMotion ? 0 : 150;\n let fadeDuration = prefersReducedMotion ? 0 : 175;\n let fadeDelay = prefersReducedMotion ? 0 : 50;\n\n // slide entire parent panel\n const start = styles.transform;\n const end = `translateX(-${activeIndex * parseInt(columnWidth, 10)}px)`;\n const anim = targetElement.animate(\n [{ transform: start }, { transform: end }],\n {\n duration: slideDuration,\n easing: 'cubic-bezier(0.65, 0, 0.35, 1)',\n fill: 'forwards',\n }\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n anim.finished.then((): void => {\n // uncomment this if we need/want to scroll the element to the top\n // targetElement.scrollIntoView(true);\n if (activeIndex > 0) {\n const allPrev = Array.from(targetElement.children).slice(\n 0,\n activeIndex\n ) as HTMLElement[];\n for (const ele of allPrev) {\n ele.ariaHidden = 'true';\n ele.style.setProperty('visibility', 'hidden');\n ele.style.setProperty('opacity', '0');\n }\n }\n // Notice: we don't add the styles by default because it writes a `style` attribute to the element and it causes an additional re-render\n if (macroCondition(isTesting())) {\n // Check the visibility of the element before attempting to commitStyles.\n if (targetElement.offsetParent !== null) {\n anim.commitStyles();\n }\n }\n });\n\n // fade in next panel\n const nextPanelEl = targetElement.children[activeIndex] as HTMLElement;\n\n // get reference to last child panel\n const lastPanelEl = targetElement.children[\n targetElement.children.length - 1\n ] as HTMLElement;\n\n if (nextPanelEl) {\n nextPanelEl.ariaHidden = 'false';\n nextPanelEl.style.setProperty('visibility', 'visible');\n // this eliminates a flicker if there's only one subnav rendering or if we\n // already just rendered this panel.\n if (this.lastPanelEl) {\n if (activeIndex === 0 || nextPanelEl.isSameNode(this.lastPanelEl)) {\n fadeDelay = 0;\n fadeDuration = 0;\n }\n }\n\n // remember the last panel\n this.lastPanelEl = lastPanelEl;\n\n nextPanelEl.animate([{ opacity: '0' }, { opacity: '1' }], {\n delay: fadeDelay,\n duration: fadeDuration,\n fill: 'forwards',\n });\n }\n }\n}\n"],"names":["HdsSideNavPortalTarget","Component","g","prototype","service","i","tracked","prefersReducedMotionOverride","macroCondition","isTesting","prefersReducedMotionMQ","window","matchMedia","prefersReducedMotion","matches","panelsChanged","portalCount","numSubnavs","n","action","didUpdateSubnav","element","count","animateSubnav","activeIndex","targetElement","styles","getComputedStyle","columnWidth","getPropertyValue","slideDuration","fadeDuration","fadeDelay","start","transform","end","parseInt","anim","animate","duration","easing","fill","finished","then","allPrev","Array","from","children","slice","ele","ariaHidden","style","setProperty","offsetParent","commitStyles","nextPanelEl","lastPanelEl","length","isSameNode","opacity","delay","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"target.js","sources":["../../../../../src/components/hds/side-nav/portal/target.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { macroCondition, isTesting } from '@embroider/macros';\n\nimport type { HdsSideNavPortalSignature } from './index';\n\nimport type { Registry as Services } from '@ember/service';\n\nexport interface HdsSideNavPortalTargetSignature {\n Args: {\n targetName?: HdsSideNavPortalSignature['Args']['targetName'];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsSideNavPortalTarget extends Component<HdsSideNavPortalTargetSignature> {\n @service router!: Services['router'];\n\n @tracked numSubnavs = 0;\n @tracked lastPanelEl: Element | undefined;\n\n static get prefersReducedMotionOverride(): boolean {\n return macroCondition(isTesting()) ? true : false;\n }\n\n prefersReducedMotionMQ = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n );\n\n get prefersReducedMotion(): boolean {\n return (\n HdsSideNavPortalTarget.prefersReducedMotionOverride ||\n (this.prefersReducedMotionMQ && this.prefersReducedMotionMQ.matches)\n );\n }\n\n @action\n panelsChanged(portalCount: number): void {\n this.numSubnavs = portalCount;\n }\n\n @action\n didUpdateSubnav(element: HTMLElement, [count]: [number]): void {\n this.animateSubnav(element, [count]);\n }\n\n @action\n animateSubnav(element: HTMLElement, [count]: [number]): void {\n /*\n * Here is what the layout looks like for this setup\n *\n\n SideNav\n +----------------------+\n | +------------------+ |\n | | (\"header\") | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"body\") | |\n (PortalTarget) | | | |\n +----------------------------------------------+ | |\n | +----------+ +----------+ | +----------+ | | |\n | | (Portal) | | (Portal) | | (Portal) | | | |\n | | | | | | | | | | |\n | | hidden | | hidden | | *active* | | | |\n | | panel | | panel | | | panel | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | | | | | | | | | | |\n | | | | | | | | | |\n | +----------+ +----------+ | +----------+ | | |\n +----------------------------------------------+ | |\n | | | |\n | +------------------+ |\n | |\n | +------------------+ |\n | | (\"footer\") | |\n | +------------------+ |\n +----------------------+\n\n *\n * every time `HcAppFrame::SideNav::Portal` renders, it contains a portaled \"panel\"\n * that is rendered into the `hds-side-nav__content-panels` (inside the PortalTarget).\n *\n * Rendering or unrendering other `HcAppFrame::SideNav::Portal`s triggers the number of\n * subnavs to change (via `numSubnavs`), so this function runs and slides\n * `hds-side-nav__content-panels` left or right using the `element.animate` api.\n *\n * */\n\n const activeIndex = count - 1;\n const targetElement = element;\n const { prefersReducedMotion } = this;\n\n const styles = getComputedStyle(targetElement);\n const columnWidth = styles.getPropertyValue(\n '--hds-app-sidenav-width-expanded'\n );\n const slideDuration = prefersReducedMotion ? 0 : 150;\n let fadeDuration = prefersReducedMotion ? 0 : 175;\n let fadeDelay = prefersReducedMotion ? 0 : 50;\n\n // slide entire parent panel\n const start = styles.transform;\n const end = `translateX(-${activeIndex * parseInt(columnWidth, 10)}px)`;\n const anim = targetElement.animate(\n [{ transform: start }, { transform: end }],\n {\n duration: slideDuration,\n easing: 'cubic-bezier(0.65, 0, 0.35, 1)',\n fill: 'forwards',\n }\n );\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n anim.finished.then((): void => {\n // uncomment this if we need/want to scroll the element to the top\n // targetElement.scrollIntoView(true);\n if (activeIndex > 0) {\n const allPrev = Array.from(targetElement.children).slice(\n 0,\n activeIndex\n ) as HTMLElement[];\n for (const ele of allPrev) {\n ele.ariaHidden = 'true';\n ele.style.setProperty('visibility', 'hidden');\n ele.style.setProperty('opacity', '0');\n }\n }\n // Notice: we don't add the styles by default because it writes a `style` attribute to the element and it causes an additional re-render\n if (macroCondition(isTesting())) {\n // Check the visibility of the element before attempting to commitStyles.\n if (targetElement.offsetParent !== null) {\n anim.commitStyles();\n }\n }\n });\n\n // fade in next panel\n const nextPanelEl = targetElement.children[activeIndex] as HTMLElement;\n\n // get reference to last child panel\n const lastPanelEl = targetElement.children[\n targetElement.children.length - 1\n ] as HTMLElement;\n\n if (nextPanelEl) {\n nextPanelEl.ariaHidden = 'false';\n nextPanelEl.style.setProperty('visibility', 'visible');\n // this eliminates a flicker if there's only one subnav rendering or if we\n // already just rendered this panel.\n if (this.lastPanelEl) {\n if (activeIndex === 0 || nextPanelEl.isSameNode(this.lastPanelEl)) {\n fadeDelay = 0;\n fadeDuration = 0;\n }\n }\n\n // remember the last panel\n this.lastPanelEl = lastPanelEl;\n\n nextPanelEl.animate([{ opacity: '0' }, { opacity: '1' }], {\n delay: fadeDelay,\n duration: fadeDuration,\n fill: 'forwards',\n });\n }\n }\n}\n"],"names":["HdsSideNavPortalTarget","Component","g","prototype","service","i","void 0","tracked","prefersReducedMotionOverride","macroCondition","isTesting","prefersReducedMotionMQ","window","matchMedia","prefersReducedMotion","matches","panelsChanged","portalCount","numSubnavs","n","action","didUpdateSubnav","element","count","animateSubnav","activeIndex","targetElement","styles","getComputedStyle","columnWidth","getPropertyValue","slideDuration","fadeDuration","fadeDelay","start","transform","end","parseInt","anim","animate","duration","easing","fill","finished","then","allPrev","Array","from","children","slice","ele","ariaHidden","style","setProperty","offsetParent","commitStyles","nextPanelEl","lastPanelEl","length","isSameNode","opacity","delay","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsStepperListStepSignature } from './step';\n\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport type { HdsStepperTitleTags, HdsStepperListStepIds } from '../types.ts';\n\nexport interface HdsStepperListSignature {\n Args: {\n titleTag?: HdsStepperTitleTags;\n ariaLabel: string;\n };\n Blocks: {\n default: [\n {\n Step?: ComponentLike<HdsStepperListStepSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsStepperList extends Component<HdsStepperListSignature> {\n @tracked private _stepIds: HdsStepperListStepIds = [];\n\n get titleTag(): HdsStepperTitleTags {\n return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n }\n\n @action\n didInsertStep(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._stepIds = [...this._stepIds, element.id];\n });\n }\n\n @action\n willDestroyStep(element: HTMLElement): void {\n this._stepIds = this._stepIds.filter(\n (stepId): boolean => stepId !== element.id\n );\n }\n}\n"],"names":["HdsStepperList","Component","g","prototype","tracked","i","titleTag","args","HdsStepperTitleTagValues","Div","didInsertStep","element","schedule","_stepIds","id","n","action","willDestroyStep","filter","stepId","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AA2Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA2C,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAA,MAAA;EAErD,IAAIC,QAAQA,GAAwB;IAClC,OAAO,IAAI,CAACC,IAAI,CAACD,QAAQ,IAAIE,wBAAwB,CAACC,GAAG;AAC3D,EAAA;EAGAC,aAAaA,CAACC,OAAoB,EAAQ;AACxC;IACAC,QAAQ,CAAC,aAAa,EAAE,MAAY;AAClC,MAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAACA,QAAQ,EAAEF,OAAO,CAACG,EAAE,CAAC;AAChD,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAZ,SAAA,EAAA,eAAA,EAAA,CANAa,MAAM,CAAA,CAAA;AAAA;EASPC,eAAeA,CAACN,OAAoB,EAAQ;AAC1C,IAAA,IAAI,CAACE,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAACK,MAAM,CACjCC,MAAM,IAAcA,MAAM,KAAKR,OAAO,CAACG,EAC1C,CAAC;AACH,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAZ,SAAA,EAAA,iBAAA,EAAA,CALAa,MAAM,CAAA,CAAA;AAAA;AAMT;AAACI,oBAAA,CAAAC,QAAA,EArBoBrB,cAAc,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/list/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport type { ComponentLike } from '@glint/template';\nimport type { HdsStepperListStepSignature } from './step';\n\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport type { HdsStepperTitleTags, HdsStepperListStepIds } from '../types.ts';\n\nexport interface HdsStepperListSignature {\n Args: {\n titleTag?: HdsStepperTitleTags;\n ariaLabel: string;\n };\n Blocks: {\n default: [\n {\n Step?: ComponentLike<HdsStepperListStepSignature>;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsStepperList extends Component<HdsStepperListSignature> {\n @tracked private _stepIds: HdsStepperListStepIds = [];\n\n get titleTag(): HdsStepperTitleTags {\n return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n }\n\n @action\n didInsertStep(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._stepIds = [...this._stepIds, element.id];\n });\n }\n\n @action\n willDestroyStep(element: HTMLElement): void {\n this._stepIds = this._stepIds.filter(\n (stepId): boolean => stepId !== element.id\n );\n }\n}\n"],"names":["HdsStepperList","Component","g","prototype","tracked","i","void 0","titleTag","args","HdsStepperTitleTagValues","Div","didInsertStep","element","schedule","_stepIds","id","n","action","willDestroyStep","filter","stepId","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AA2Be,MAAMA,cAAc,SAASC,SAAS,CAA0B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CAC5EC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA2C,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,SAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,UAAA,CAAA,EAAAC,MAAA;EAErD,IAAIC,QAAQA,GAAwB;IAClC,OAAO,IAAI,CAACC,IAAI,CAACD,QAAQ,IAAIE,wBAAwB,CAACC,GAAG;AAC3D,EAAA;EAGAC,aAAaA,CAACC,OAAoB,EAAQ;AACxC;IACAC,QAAQ,CAAC,aAAa,EAAE,MAAY;AAClC,MAAA,IAAI,CAACC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAACA,QAAQ,EAAEF,OAAO,CAACG,EAAE,CAAC;AAChD,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,eAAA,EAAA,CANAc,MAAM,CAAA,CAAA;AAAA;EASPC,eAAeA,CAACN,OAAoB,EAAQ;AAC1C,IAAA,IAAI,CAACE,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAACK,MAAM,CACjCC,MAAM,IAAcA,MAAM,KAAKR,OAAO,CAACG,EAC1C,CAAC;AACH,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,iBAAA,EAAA,CALAc,MAAM,CAAA,CAAA;AAAA;AAMT;AAACI,oBAAA,CAAAC,QAAA,EArBoBtB,cAAc,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/nav/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\nimport type { WithBoundArgs } from '@glint/template';\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport type {\n HdsStepperTitleTags,\n HdsStepperNavStepIds,\n HdsStepperNavStep,\n HdsStepperNavPanelIds,\n} from '../types.ts';\nimport HdsStepperNavStepComponent from './step.ts';\nimport HdsStepperNavPanelComponent from './panel.ts';\n\nconst STEP_ELEMENT_SELECTOR = '.hds-stepper-nav__step-content';\nconst PANEL_ELEMENT_SELECTOR = '.hds-stepper-nav__panel';\n\nexport interface HdsStepperNavSignature {\n Args: {\n steps?: HdsStepperNavStep[];\n currentStep?: number;\n isInteractive?: boolean;\n titleTag?: HdsStepperTitleTags;\n ariaLabel: string;\n onStepChange?: (event: MouseEvent, stepNumber: number) => void;\n };\n Blocks: {\n body?: [];\n default: [\n {\n Step?: WithBoundArgs<\n typeof HdsStepperNavStepComponent,\n | 'currentStep'\n | 'isNavInteractive'\n | 'titleTag'\n | 'stepIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n | 'onStepChange'\n | 'onKeyUp'\n >;\n Panel?: WithBoundArgs<\n typeof HdsStepperNavPanelComponent,\n | 'currentStep'\n | 'isNavInteractive'\n | 'stepIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsStepperNav extends Component<HdsStepperNavSignature> {\n @tracked private _stepIds: HdsStepperNavStepIds = [];\n @tracked private _stepNodes: HTMLElement[] = [];\n @tracked private _panelNodes: HTMLElement[] = [];\n @tracked private _panelIds: HdsStepperNavPanelIds = [];\n\n private _element!: HTMLDivElement;\n\n private _setUpStepperNav = modifier((element: HTMLDivElement) => {\n if (this.isInteractive) {\n assert(\n 'If @isInteractive is true, the number of Steps must be equal to the number of Panels',\n this._stepNodes.length === this._panelNodes.length\n );\n }\n\n this._element = element;\n\n return () => {};\n });\n\n get currentStep(): number {\n const { currentStep } = this.args;\n\n if (currentStep) {\n if (currentStep < 0) {\n return 0;\n } else {\n return currentStep;\n }\n } else {\n return 0;\n }\n }\n\n get isInteractive(): boolean {\n return this.args.isInteractive != undefined\n ? this.args.isInteractive\n : true;\n }\n\n get titleTag(): HdsStepperTitleTags {\n return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n }\n\n get inlineStyles(): Record<string, unknown> {\n const inlineStyles: {\n '--hds-stepper-nav-progress-bar-width'?: string;\n } = {};\n\n inlineStyles['--hds-stepper-nav-progress-bar-width'] =\n this.progressBarWidthStyle;\n\n return inlineStyles;\n }\n\n get progressBarWidthStyle(): string {\n let progressBarWidth = 0;\n let progressBarOffset = 0;\n if (this._stepIds.length != 0) {\n if (this.currentStep >= this._stepIds.length) {\n progressBarWidth = 100;\n progressBarOffset = 0;\n } else {\n const activeStepWidth = 1 / this._stepIds.length / 2;\n const width = this.currentStep / this._stepIds.length;\n progressBarWidth = (width + activeStepWidth) * 100;\n progressBarOffset = 16;\n }\n }\n return `calc(${progressBarWidth}% - ${progressBarOffset}px)`;\n }\n\n @action\n didInsertStep(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.updateSteps();\n });\n }\n\n @action\n willDestroyStep(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._stepNodes = this._stepNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._stepIds = this._stepIds.filter(\n (stepId): boolean => stepId !== element.id\n );\n });\n }\n\n @action\n didInsertPanel(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.updatePanels();\n });\n }\n\n @action\n willDestroyPanel(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._panelNodes = this._panelNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._panelIds = this._panelIds.filter(\n (panelId): boolean => panelId !== element.id\n );\n });\n }\n\n @action\n onKeyUp(currentStepIndex: number, event: KeyboardEvent): void {\n const leftArrow = 'ArrowLeft';\n const rightArrow = 'ArrowRight';\n\n if (event.key === rightArrow) {\n const nextStepIndex = this.findNextInteractiveStepIndex(\n currentStepIndex,\n 1\n );\n this.focusStep(nextStepIndex, event);\n } else if (event.key === leftArrow) {\n const prevStepIndex = this.findNextInteractiveStepIndex(\n currentStepIndex,\n this._stepIds.length - 1\n );\n this.focusStep(prevStepIndex, event);\n }\n }\n\n // Update the step arrays based on how they are ordered in the DOM\n private updateSteps(): void {\n const steps = this._element.querySelectorAll(STEP_ELEMENT_SELECTOR);\n let newStepIds: HdsStepperNavStepIds = [];\n let newStepNodes: HTMLElement[] = [];\n steps.forEach((step) => {\n newStepIds = [...newStepIds, step.id];\n newStepNodes = [...newStepNodes, step as HTMLElement];\n });\n this._stepIds = newStepIds;\n this._stepNodes = newStepNodes;\n }\n\n // Update the panel arrays based on how they are ordered in the DOM\n private updatePanels(): void {\n const panels = this._element.querySelectorAll(PANEL_ELEMENT_SELECTOR);\n let newPanelIds: HdsStepperNavPanelIds = [];\n let newPanelNodes: HTMLElement[] = [];\n panels.forEach((panel) => {\n newPanelIds = [...newPanelIds, panel.id];\n newPanelNodes = [...newPanelNodes, panel as HTMLElement];\n });\n this._panelIds = newPanelIds;\n this._panelNodes = newPanelNodes;\n }\n\n // Find the next interactive step to focus based on keyboard input\n private findNextInteractiveStepIndex(\n currentStepIndex: number,\n increment: number\n ): number {\n let newStepIndex = (currentStepIndex + increment) % this._stepIds.length;\n while (newStepIndex > this.currentStep) {\n newStepIndex = (newStepIndex + increment) % this._stepIds.length;\n }\n return newStepIndex;\n }\n\n // Focus step for keyboard & mouse nav\n private focusStep(stepIndex: number, event: KeyboardEvent): void {\n event.preventDefault();\n const step = this._stepNodes[stepIndex];\n step?.focus();\n }\n\n get classNames() {\n const classes = ['hds-stepper-nav'];\n\n if (this.isInteractive) {\n classes.push('hds-stepper-nav--interactive');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["STEP_ELEMENT_SELECTOR","PANEL_ELEMENT_SELECTOR","HdsStepperNav","Component","g","prototype","tracked","i","_element","_setUpStepperNav","modifier","element","isInteractive","assert","_stepNodes","length","_panelNodes","currentStep","args","undefined","titleTag","HdsStepperTitleTagValues","Div","inlineStyles","progressBarWidthStyle","progressBarWidth","progressBarOffset","_stepIds","activeStepWidth","width","didInsertStep","schedule","updateSteps","n","action","willDestroyStep","filter","node","id","stepId","didInsertPanel","updatePanels","willDestroyPanel","_panelIds","panelId","onKeyUp","currentStepIndex","event","leftArrow","rightArrow","key","nextStepIndex","findNextInteractiveStepIndex","focusStep","prevStepIndex","steps","querySelectorAll","newStepIds","newStepNodes","forEach","step","panels","newPanelIds","newPanelNodes","panel","increment","newStepIndex","stepIndex","preventDefault","focus","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/nav/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { assert } from '@ember/debug';\nimport { modifier } from 'ember-modifier';\nimport type { WithBoundArgs } from '@glint/template';\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport type {\n HdsStepperTitleTags,\n HdsStepperNavStepIds,\n HdsStepperNavStep,\n HdsStepperNavPanelIds,\n} from '../types.ts';\nimport HdsStepperNavStepComponent from './step.ts';\nimport HdsStepperNavPanelComponent from './panel.ts';\n\nconst STEP_ELEMENT_SELECTOR = '.hds-stepper-nav__step-content';\nconst PANEL_ELEMENT_SELECTOR = '.hds-stepper-nav__panel';\n\nexport interface HdsStepperNavSignature {\n Args: {\n steps?: HdsStepperNavStep[];\n currentStep?: number;\n isInteractive?: boolean;\n titleTag?: HdsStepperTitleTags;\n ariaLabel: string;\n onStepChange?: (event: MouseEvent, stepNumber: number) => void;\n };\n Blocks: {\n body?: [];\n default: [\n {\n Step?: WithBoundArgs<\n typeof HdsStepperNavStepComponent,\n | 'currentStep'\n | 'isNavInteractive'\n | 'titleTag'\n | 'stepIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n | 'onStepChange'\n | 'onKeyUp'\n >;\n Panel?: WithBoundArgs<\n typeof HdsStepperNavPanelComponent,\n | 'currentStep'\n | 'isNavInteractive'\n | 'stepIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsStepperNav extends Component<HdsStepperNavSignature> {\n @tracked private _stepIds: HdsStepperNavStepIds = [];\n @tracked private _stepNodes: HTMLElement[] = [];\n @tracked private _panelNodes: HTMLElement[] = [];\n @tracked private _panelIds: HdsStepperNavPanelIds = [];\n\n private _element!: HTMLDivElement;\n\n private _setUpStepperNav = modifier((element: HTMLDivElement) => {\n if (this.isInteractive) {\n assert(\n 'If @isInteractive is true, the number of Steps must be equal to the number of Panels',\n this._stepNodes.length === this._panelNodes.length\n );\n }\n\n this._element = element;\n\n return () => {};\n });\n\n get currentStep(): number {\n const { currentStep } = this.args;\n\n if (currentStep) {\n if (currentStep < 0) {\n return 0;\n } else {\n return currentStep;\n }\n } else {\n return 0;\n }\n }\n\n get isInteractive(): boolean {\n return this.args.isInteractive != undefined\n ? this.args.isInteractive\n : true;\n }\n\n get titleTag(): HdsStepperTitleTags {\n return this.args.titleTag ?? HdsStepperTitleTagValues.Div;\n }\n\n get inlineStyles(): Record<string, unknown> {\n const inlineStyles: {\n '--hds-stepper-nav-progress-bar-width'?: string;\n } = {};\n\n inlineStyles['--hds-stepper-nav-progress-bar-width'] =\n this.progressBarWidthStyle;\n\n return inlineStyles;\n }\n\n get progressBarWidthStyle(): string {\n let progressBarWidth = 0;\n let progressBarOffset = 0;\n if (this._stepIds.length != 0) {\n if (this.currentStep >= this._stepIds.length) {\n progressBarWidth = 100;\n progressBarOffset = 0;\n } else {\n const activeStepWidth = 1 / this._stepIds.length / 2;\n const width = this.currentStep / this._stepIds.length;\n progressBarWidth = (width + activeStepWidth) * 100;\n progressBarOffset = 16;\n }\n }\n return `calc(${progressBarWidth}% - ${progressBarOffset}px)`;\n }\n\n @action\n didInsertStep(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.updateSteps();\n });\n }\n\n @action\n willDestroyStep(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._stepNodes = this._stepNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._stepIds = this._stepIds.filter(\n (stepId): boolean => stepId !== element.id\n );\n });\n }\n\n @action\n didInsertPanel(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.updatePanels();\n });\n }\n\n @action\n willDestroyPanel(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._panelNodes = this._panelNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._panelIds = this._panelIds.filter(\n (panelId): boolean => panelId !== element.id\n );\n });\n }\n\n @action\n onKeyUp(currentStepIndex: number, event: KeyboardEvent): void {\n const leftArrow = 'ArrowLeft';\n const rightArrow = 'ArrowRight';\n\n if (event.key === rightArrow) {\n const nextStepIndex = this.findNextInteractiveStepIndex(\n currentStepIndex,\n 1\n );\n this.focusStep(nextStepIndex, event);\n } else if (event.key === leftArrow) {\n const prevStepIndex = this.findNextInteractiveStepIndex(\n currentStepIndex,\n this._stepIds.length - 1\n );\n this.focusStep(prevStepIndex, event);\n }\n }\n\n // Update the step arrays based on how they are ordered in the DOM\n private updateSteps(): void {\n const steps = this._element.querySelectorAll(STEP_ELEMENT_SELECTOR);\n let newStepIds: HdsStepperNavStepIds = [];\n let newStepNodes: HTMLElement[] = [];\n steps.forEach((step) => {\n newStepIds = [...newStepIds, step.id];\n newStepNodes = [...newStepNodes, step as HTMLElement];\n });\n this._stepIds = newStepIds;\n this._stepNodes = newStepNodes;\n }\n\n // Update the panel arrays based on how they are ordered in the DOM\n private updatePanels(): void {\n const panels = this._element.querySelectorAll(PANEL_ELEMENT_SELECTOR);\n let newPanelIds: HdsStepperNavPanelIds = [];\n let newPanelNodes: HTMLElement[] = [];\n panels.forEach((panel) => {\n newPanelIds = [...newPanelIds, panel.id];\n newPanelNodes = [...newPanelNodes, panel as HTMLElement];\n });\n this._panelIds = newPanelIds;\n this._panelNodes = newPanelNodes;\n }\n\n // Find the next interactive step to focus based on keyboard input\n private findNextInteractiveStepIndex(\n currentStepIndex: number,\n increment: number\n ): number {\n let newStepIndex = (currentStepIndex + increment) % this._stepIds.length;\n while (newStepIndex > this.currentStep) {\n newStepIndex = (newStepIndex + increment) % this._stepIds.length;\n }\n return newStepIndex;\n }\n\n // Focus step for keyboard & mouse nav\n private focusStep(stepIndex: number, event: KeyboardEvent): void {\n event.preventDefault();\n const step = this._stepNodes[stepIndex];\n step?.focus();\n }\n\n get classNames() {\n const classes = ['hds-stepper-nav'];\n\n if (this.isInteractive) {\n classes.push('hds-stepper-nav--interactive');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["STEP_ELEMENT_SELECTOR","PANEL_ELEMENT_SELECTOR","HdsStepperNav","Component","g","prototype","tracked","i","void 0","_element","_setUpStepperNav","modifier","element","isInteractive","assert","_stepNodes","length","_panelNodes","currentStep","args","undefined","titleTag","HdsStepperTitleTagValues","Div","inlineStyles","progressBarWidthStyle","progressBarWidth","progressBarOffset","_stepIds","activeStepWidth","width","didInsertStep","schedule","updateSteps","n","action","willDestroyStep","filter","node","id","stepId","didInsertPanel","updatePanels","willDestroyPanel","_panelIds","panelId","onKeyUp","currentStepIndex","event","leftArrow","rightArrow","key","nextStepIndex","findNextInteractiveStepIndex","focusStep","prevStepIndex","steps","querySelectorAll","newStepIds","newStepNodes","forEach","step","panels","newPanelIds","newPanelNodes","panel","increment","newStepIndex","stepIndex","preventDefault","focus","classNames","classes","push","join","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/hds/table/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport {\n HdsTableDensityValues,\n HdsTableThSortOrderValues,\n HdsTableVerticalAlignmentValues,\n} from './types.ts';\nimport type {\n HdsTableColumn,\n HdsTableDensities,\n HdsTableHorizontalAlignment,\n HdsTableOnSelectionChangeSignature,\n HdsTableSelectableRow,\n HdsTableSortingFunction,\n HdsTableThSortOrder,\n HdsTableVerticalAlignment,\n HdsTableModel,\n} from './types';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';\nimport type { HdsTableTdSignature } from './td.ts';\nimport type { HdsTableThSignature } from './th.ts';\nimport type { HdsTableThSortSignature } from './th-sort.ts';\nimport type { HdsTableTrSignature } from './tr.ts';\nimport type Owner from '@ember/owner';\n\nexport const DENSITIES: HdsTableDensities[] = Object.values(\n HdsTableDensityValues\n);\nexport const DEFAULT_DENSITY = HdsTableDensityValues.Medium;\n\nexport const VALIGNMENTS: HdsTableVerticalAlignment[] = Object.values(\n HdsTableVerticalAlignmentValues\n);\nexport const DEFAULT_VALIGN = HdsTableVerticalAlignmentValues.Top;\n\nexport interface HdsTableSignature<T = HdsTableModel> {\n Args: {\n align?: HdsTableHorizontalAlignment;\n caption?: string;\n columns?: HdsTableColumn[];\n density?: HdsTableDensities;\n identityKey?: string;\n isFixedLayout?: boolean;\n isSelectable?: boolean;\n isStriped?: boolean;\n model?: T[];\n onSelectionChange?: (selection: HdsTableOnSelectionChangeSignature) => void;\n onSort?: (sortBy: string, sortOrder: HdsTableThSortOrder) => void;\n selectionAriaLabelSuffix?: string;\n sortBy?: string;\n selectableColumnKey?: string;\n sortedMessageText?: string;\n sortOrder?: HdsTableThSortOrder;\n valign?: HdsTableVerticalAlignment;\n };\n Blocks: {\n head?: [\n {\n Tr?: ComponentLike<HdsTableTrSignature>;\n Th?: ComponentLike<HdsTableThSignature>;\n ThSort?: ComponentLike<HdsTableThSortSignature>;\n sortBy?: string;\n sortOrder?: HdsTableThSortOrder;\n setSortBy?: (column: string) => void;\n },\n ];\n body?: [\n {\n Td?: ComponentLike<HdsTableTdSignature>;\n Tr?: ComponentLike<HdsTableTrSignature>;\n Th?: ComponentLike<HdsTableThSignature>;\n data?: T;\n rowIndex?: number;\n sortBy?: string;\n sortOrder?: HdsTableThSortOrder;\n },\n ];\n };\n Element: HTMLTableElement;\n}\n\nexport default class HdsTable<T = HdsTableModel> extends Component<\n HdsTableSignature<T>\n> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked sortBy;\n @tracked sortOrder;\n @tracked\n private _selectAllCheckbox?: HdsFormCheckboxBaseSignature['Element'] =\n undefined;\n private _selectableRows: HdsTableSelectableRow[] = [];\n @tracked private _isSelectAllCheckboxSelected?: boolean = undefined;\n\n constructor(owner: Owner, args: HdsTableSignature<T>['Args']) {\n super(owner, args);\n this.sortBy = this.args.sortBy ?? undefined;\n this.sortOrder = this.args.sortOrder ?? HdsTableThSortOrderValues.Asc;\n }\n\n get getSortCriteria(): string | HdsTableSortingFunction<unknown> {\n // get the current column\n const currentColumn = this.args?.columns?.find(\n (column) => column.key === this.sortBy\n );\n if (\n // check if there is a custom sorting function associated with the current `sortBy` column (we assume the column has `isSortable`)\n currentColumn?.sortingFunction &&\n typeof currentColumn.sortingFunction === 'function'\n ) {\n return currentColumn.sortingFunction;\n } else {\n // otherwise fallback to the default format \"sortBy:sortOrder\"\n return `${this.sortBy}:${this.sortOrder}`;\n }\n }\n\n get identityKey(): string | undefined {\n // we have to provide a way for the consumer to pass undefined because Ember tries to interpret undefined as missing an arg and therefore falls back to the default\n if (this.args.identityKey === 'none') {\n return undefined;\n } else {\n return this.args.identityKey ?? '@identity';\n }\n }\n\n get sortedMessageText(): string {\n if (this.args.sortedMessageText) {\n return this.args.sortedMessageText;\n } else if (this.sortBy && this.sortOrder) {\n // we should allow the user to define a custom value here (e.g., for i18n) - tracked with HDS-965\n const translatedSortOrder = {\n [HdsTableThSortOrderValues.Asc]: this.hdsIntl.t(\n 'hds.components.common.ascending',\n { default: 'ascending' }\n ),\n [HdsTableThSortOrderValues.Desc]: this.hdsIntl.t(\n 'hds.components.common.descending',\n { default: 'descending' }\n ),\n }[this.sortOrder];\n const lowerCaseTranslatedSortOrder = translatedSortOrder.toLowerCase();\n\n return this.hdsIntl.t('hds.components.table.sorted-message-text', {\n sortBy: this.sortBy,\n sortOrder: lowerCaseTranslatedSortOrder,\n default: `Sorted by ${this.sortBy} ${lowerCaseTranslatedSortOrder}`,\n });\n } else {\n return '';\n }\n }\n\n get isStriped(): boolean {\n return this.args.isStriped ?? false;\n }\n\n get isFixedLayout(): boolean {\n return this.args.isFixedLayout ?? false;\n }\n\n get density(): HdsTableDensities {\n const { density = DEFAULT_DENSITY } = this.args;\n\n assert(\n `@density for \"Hds::Table\" must be one of the following: ${DENSITIES.join(\n ', '\n )}; received: ${density}`,\n DENSITIES.includes(density)\n );\n\n return density;\n }\n\n get valign(): HdsTableVerticalAlignment {\n const { valign = DEFAULT_VALIGN } = this.args;\n\n assert(\n `@valign for \"Hds::Table\" must be one of the following: ${VALIGNMENTS.join(\n ', '\n )}; received: ${valign}`,\n VALIGNMENTS.includes(valign)\n );\n\n return valign;\n }\n\n get classNames(): string {\n const classes = ['hds-table'];\n\n // add a class based on the @isStriped argument\n if (this.isStriped) {\n classes.push('hds-table--striped');\n }\n\n // add a class based on the @isFixedLayout argument\n if (this.isFixedLayout) {\n classes.push('hds-table--layout-fixed');\n }\n\n // add a class based on the @density argument\n if (this.density) {\n classes.push(`hds-table--density-${this.density}`);\n }\n\n // add a class based on the @valign argument\n if (this.valign) {\n classes.push(`hds-table--valign-${this.valign}`);\n }\n\n return classes.join(' ');\n }\n\n @action\n setSortBy(column: string): void {\n if (this.sortBy === column) {\n // check to see if the column is already sorted and invert the sort order if so\n this.sortOrder =\n this.sortOrder === HdsTableThSortOrderValues.Asc\n ? HdsTableThSortOrderValues.Desc\n : HdsTableThSortOrderValues.Asc;\n } else {\n // otherwise, set the sort order to ascending\n this.sortBy = column;\n this.sortOrder = HdsTableThSortOrderValues.Asc;\n }\n\n const { onSort } = this.args;\n\n if (typeof onSort === 'function') {\n onSort(this.sortBy, this.sortOrder);\n }\n }\n\n onSelectionChangeCallback(\n checkbox?: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n const { onSelectionChange } = this.args;\n if (typeof onSelectionChange === 'function') {\n onSelectionChange({\n selectionKey: selectionKey,\n selectionCheckboxElement: checkbox,\n selectedRowsKeys: this._selectableRows.reduce<string[]>((acc, row) => {\n if (row.checkbox.checked) {\n acc.push(row.selectionKey);\n }\n return acc;\n }, []),\n selectableRowsStates: this._selectableRows.reduce(\n (\n acc: { selectionKey: string; isSelected: boolean | undefined }[],\n row\n ) => {\n acc.push({\n selectionKey: row.selectionKey,\n isSelected: row.checkbox.checked,\n });\n return acc;\n },\n []\n ),\n });\n }\n }\n\n @action\n onSelectionAllChange(): void {\n this._selectableRows.forEach((row) => {\n row.checkbox.checked = this._selectAllCheckbox?.checked ?? false;\n });\n this._isSelectAllCheckboxSelected =\n this._selectAllCheckbox?.checked ?? false;\n this.onSelectionChangeCallback(this._selectAllCheckbox, 'all');\n }\n\n @action\n onSelectionRowChange(\n checkbox?: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n this.setSelectAllState();\n this.onSelectionChangeCallback(checkbox, selectionKey);\n }\n\n @action\n didInsertSelectAllCheckbox(\n checkbox: HdsFormCheckboxBaseSignature['Element']\n ): void {\n this._selectAllCheckbox = checkbox;\n }\n\n @action\n willDestroySelectAllCheckbox(): void {\n this._selectAllCheckbox = undefined;\n }\n\n @action\n didInsertRowCheckbox(\n checkbox: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n if (selectionKey) {\n this._selectableRows.push({ selectionKey, checkbox });\n }\n this.setSelectAllState();\n }\n\n @action\n willDestroyRowCheckbox(selectionKey?: string): void {\n this._selectableRows = this._selectableRows.filter(\n (row) => row.selectionKey !== selectionKey\n );\n this.setSelectAllState();\n }\n\n @action\n setSelectAllState(): void {\n if (this._selectAllCheckbox) {\n const selectableRowsCount = this._selectableRows.length;\n const selectedRowsCount = this._selectableRows.filter(\n (row) => row.checkbox.checked\n ).length;\n\n this._selectAllCheckbox.checked =\n selectedRowsCount === selectableRowsCount;\n this._selectAllCheckbox.indeterminate =\n selectedRowsCount > 0 && selectedRowsCount < selectableRowsCount;\n this._isSelectAllCheckboxSelected = this._selectAllCheckbox.checked;\n }\n }\n}\n"],"names":["DENSITIES","Object","values","HdsTableDensityValues","DEFAULT_DENSITY","Medium","VALIGNMENTS","HdsTableVerticalAlignmentValues","DEFAULT_VALIGN","Top","HdsTable","Component","g","prototype","service","i","tracked","undefined","_selectableRows","constructor","owner","args","sortBy","sortOrder","HdsTableThSortOrderValues","Asc","getSortCriteria","currentColumn","columns","find","column","key","sortingFunction","identityKey","sortedMessageText","translatedSortOrder","hdsIntl","t","default","Desc","lowerCaseTranslatedSortOrder","toLowerCase","isStriped","isFixedLayout","density","assert","join","includes","valign","classNames","classes","push","setSortBy","onSort","n","action","onSelectionChangeCallback","checkbox","selectionKey","onSelectionChange","selectionCheckboxElement","selectedRowsKeys","reduce","acc","row","checked","selectableRowsStates","isSelected","onSelectionAllChange","forEach","_selectAllCheckbox","_isSelectAllCheckboxSelected","onSelectionRowChange","setSelectAllState","didInsertSelectAllCheckbox","willDestroySelectAllCheckbox","didInsertRowCheckbox","willDestroyRowCheckbox","filter","selectableRowsCount","length","selectedRowsCount","indeterminate","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/hds/table/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2021, 2025\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\n\nimport type HdsIntlService from '../../../services/hds-intl.ts';\nimport {\n HdsTableDensityValues,\n HdsTableThSortOrderValues,\n HdsTableVerticalAlignmentValues,\n} from './types.ts';\nimport type {\n HdsTableColumn,\n HdsTableDensities,\n HdsTableHorizontalAlignment,\n HdsTableOnSelectionChangeSignature,\n HdsTableSelectableRow,\n HdsTableSortingFunction,\n HdsTableThSortOrder,\n HdsTableVerticalAlignment,\n HdsTableModel,\n} from './types';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base';\nimport type { HdsTableTdSignature } from './td.ts';\nimport type { HdsTableThSignature } from './th.ts';\nimport type { HdsTableThSortSignature } from './th-sort.ts';\nimport type { HdsTableTrSignature } from './tr.ts';\nimport type Owner from '@ember/owner';\n\nexport const DENSITIES: HdsTableDensities[] = Object.values(\n HdsTableDensityValues\n);\nexport const DEFAULT_DENSITY = HdsTableDensityValues.Medium;\n\nexport const VALIGNMENTS: HdsTableVerticalAlignment[] = Object.values(\n HdsTableVerticalAlignmentValues\n);\nexport const DEFAULT_VALIGN = HdsTableVerticalAlignmentValues.Top;\n\nexport interface HdsTableSignature<T = HdsTableModel> {\n Args: {\n align?: HdsTableHorizontalAlignment;\n caption?: string;\n columns?: HdsTableColumn[];\n density?: HdsTableDensities;\n identityKey?: string;\n isFixedLayout?: boolean;\n isSelectable?: boolean;\n isStriped?: boolean;\n model?: T[];\n onSelectionChange?: (selection: HdsTableOnSelectionChangeSignature) => void;\n onSort?: (sortBy: string, sortOrder: HdsTableThSortOrder) => void;\n selectionAriaLabelSuffix?: string;\n sortBy?: string;\n selectableColumnKey?: string;\n sortedMessageText?: string;\n sortOrder?: HdsTableThSortOrder;\n valign?: HdsTableVerticalAlignment;\n };\n Blocks: {\n head?: [\n {\n Tr?: ComponentLike<HdsTableTrSignature>;\n Th?: ComponentLike<HdsTableThSignature>;\n ThSort?: ComponentLike<HdsTableThSortSignature>;\n sortBy?: string;\n sortOrder?: HdsTableThSortOrder;\n setSortBy?: (column: string) => void;\n },\n ];\n body?: [\n {\n Td?: ComponentLike<HdsTableTdSignature>;\n Tr?: ComponentLike<HdsTableTrSignature>;\n Th?: ComponentLike<HdsTableThSignature>;\n data?: T;\n rowIndex?: number;\n sortBy?: string;\n sortOrder?: HdsTableThSortOrder;\n },\n ];\n };\n Element: HTMLTableElement;\n}\n\nexport default class HdsTable<T = HdsTableModel> extends Component<\n HdsTableSignature<T>\n> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked sortBy;\n @tracked sortOrder;\n @tracked\n private _selectAllCheckbox?: HdsFormCheckboxBaseSignature['Element'] =\n undefined;\n private _selectableRows: HdsTableSelectableRow[] = [];\n @tracked private _isSelectAllCheckboxSelected?: boolean = undefined;\n\n constructor(owner: Owner, args: HdsTableSignature<T>['Args']) {\n super(owner, args);\n this.sortBy = this.args.sortBy ?? undefined;\n this.sortOrder = this.args.sortOrder ?? HdsTableThSortOrderValues.Asc;\n }\n\n get getSortCriteria(): string | HdsTableSortingFunction<unknown> {\n // get the current column\n const currentColumn = this.args?.columns?.find(\n (column) => column.key === this.sortBy\n );\n if (\n // check if there is a custom sorting function associated with the current `sortBy` column (we assume the column has `isSortable`)\n currentColumn?.sortingFunction &&\n typeof currentColumn.sortingFunction === 'function'\n ) {\n return currentColumn.sortingFunction;\n } else {\n // otherwise fallback to the default format \"sortBy:sortOrder\"\n return `${this.sortBy}:${this.sortOrder}`;\n }\n }\n\n get identityKey(): string | undefined {\n // we have to provide a way for the consumer to pass undefined because Ember tries to interpret undefined as missing an arg and therefore falls back to the default\n if (this.args.identityKey === 'none') {\n return undefined;\n } else {\n return this.args.identityKey ?? '@identity';\n }\n }\n\n get sortedMessageText(): string {\n if (this.args.sortedMessageText) {\n return this.args.sortedMessageText;\n } else if (this.sortBy && this.sortOrder) {\n // we should allow the user to define a custom value here (e.g., for i18n) - tracked with HDS-965\n const translatedSortOrder = {\n [HdsTableThSortOrderValues.Asc]: this.hdsIntl.t(\n 'hds.components.common.ascending',\n { default: 'ascending' }\n ),\n [HdsTableThSortOrderValues.Desc]: this.hdsIntl.t(\n 'hds.components.common.descending',\n { default: 'descending' }\n ),\n }[this.sortOrder];\n const lowerCaseTranslatedSortOrder = translatedSortOrder.toLowerCase();\n\n return this.hdsIntl.t('hds.components.table.sorted-message-text', {\n sortBy: this.sortBy,\n sortOrder: lowerCaseTranslatedSortOrder,\n default: `Sorted by ${this.sortBy} ${lowerCaseTranslatedSortOrder}`,\n });\n } else {\n return '';\n }\n }\n\n get isStriped(): boolean {\n return this.args.isStriped ?? false;\n }\n\n get isFixedLayout(): boolean {\n return this.args.isFixedLayout ?? false;\n }\n\n get density(): HdsTableDensities {\n const { density = DEFAULT_DENSITY } = this.args;\n\n assert(\n `@density for \"Hds::Table\" must be one of the following: ${DENSITIES.join(\n ', '\n )}; received: ${density}`,\n DENSITIES.includes(density)\n );\n\n return density;\n }\n\n get valign(): HdsTableVerticalAlignment {\n const { valign = DEFAULT_VALIGN } = this.args;\n\n assert(\n `@valign for \"Hds::Table\" must be one of the following: ${VALIGNMENTS.join(\n ', '\n )}; received: ${valign}`,\n VALIGNMENTS.includes(valign)\n );\n\n return valign;\n }\n\n get classNames(): string {\n const classes = ['hds-table'];\n\n // add a class based on the @isStriped argument\n if (this.isStriped) {\n classes.push('hds-table--striped');\n }\n\n // add a class based on the @isFixedLayout argument\n if (this.isFixedLayout) {\n classes.push('hds-table--layout-fixed');\n }\n\n // add a class based on the @density argument\n if (this.density) {\n classes.push(`hds-table--density-${this.density}`);\n }\n\n // add a class based on the @valign argument\n if (this.valign) {\n classes.push(`hds-table--valign-${this.valign}`);\n }\n\n return classes.join(' ');\n }\n\n @action\n setSortBy(column: string): void {\n if (this.sortBy === column) {\n // check to see if the column is already sorted and invert the sort order if so\n this.sortOrder =\n this.sortOrder === HdsTableThSortOrderValues.Asc\n ? HdsTableThSortOrderValues.Desc\n : HdsTableThSortOrderValues.Asc;\n } else {\n // otherwise, set the sort order to ascending\n this.sortBy = column;\n this.sortOrder = HdsTableThSortOrderValues.Asc;\n }\n\n const { onSort } = this.args;\n\n if (typeof onSort === 'function') {\n onSort(this.sortBy, this.sortOrder);\n }\n }\n\n onSelectionChangeCallback(\n checkbox?: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n const { onSelectionChange } = this.args;\n if (typeof onSelectionChange === 'function') {\n onSelectionChange({\n selectionKey: selectionKey,\n selectionCheckboxElement: checkbox,\n selectedRowsKeys: this._selectableRows.reduce<string[]>((acc, row) => {\n if (row.checkbox.checked) {\n acc.push(row.selectionKey);\n }\n return acc;\n }, []),\n selectableRowsStates: this._selectableRows.reduce(\n (\n acc: { selectionKey: string; isSelected: boolean | undefined }[],\n row\n ) => {\n acc.push({\n selectionKey: row.selectionKey,\n isSelected: row.checkbox.checked,\n });\n return acc;\n },\n []\n ),\n });\n }\n }\n\n @action\n onSelectionAllChange(): void {\n this._selectableRows.forEach((row) => {\n row.checkbox.checked = this._selectAllCheckbox?.checked ?? false;\n });\n this._isSelectAllCheckboxSelected =\n this._selectAllCheckbox?.checked ?? false;\n this.onSelectionChangeCallback(this._selectAllCheckbox, 'all');\n }\n\n @action\n onSelectionRowChange(\n checkbox?: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n this.setSelectAllState();\n this.onSelectionChangeCallback(checkbox, selectionKey);\n }\n\n @action\n didInsertSelectAllCheckbox(\n checkbox: HdsFormCheckboxBaseSignature['Element']\n ): void {\n this._selectAllCheckbox = checkbox;\n }\n\n @action\n willDestroySelectAllCheckbox(): void {\n this._selectAllCheckbox = undefined;\n }\n\n @action\n didInsertRowCheckbox(\n checkbox: HdsFormCheckboxBaseSignature['Element'],\n selectionKey?: string\n ): void {\n if (selectionKey) {\n this._selectableRows.push({ selectionKey, checkbox });\n }\n this.setSelectAllState();\n }\n\n @action\n willDestroyRowCheckbox(selectionKey?: string): void {\n this._selectableRows = this._selectableRows.filter(\n (row) => row.selectionKey !== selectionKey\n );\n this.setSelectAllState();\n }\n\n @action\n setSelectAllState(): void {\n if (this._selectAllCheckbox) {\n const selectableRowsCount = this._selectableRows.length;\n const selectedRowsCount = this._selectableRows.filter(\n (row) => row.checkbox.checked\n ).length;\n\n this._selectAllCheckbox.checked =\n selectedRowsCount === selectableRowsCount;\n this._selectAllCheckbox.indeterminate =\n selectedRowsCount > 0 && selectedRowsCount < selectableRowsCount;\n this._isSelectAllCheckboxSelected = this._selectAllCheckbox.checked;\n }\n }\n}\n"],"names":["DENSITIES","Object","values","HdsTableDensityValues","DEFAULT_DENSITY","Medium","VALIGNMENTS","HdsTableVerticalAlignmentValues","DEFAULT_VALIGN","Top","HdsTable","Component","g","prototype","service","i","void 0","tracked","undefined","_selectableRows","constructor","owner","args","sortBy","sortOrder","HdsTableThSortOrderValues","Asc","getSortCriteria","currentColumn","columns","find","column","key","sortingFunction","identityKey","sortedMessageText","translatedSortOrder","hdsIntl","t","default","Desc","lowerCaseTranslatedSortOrder","toLowerCase","isStriped","isFixedLayout","density","assert","join","includes","valign","classNames","classes","push","setSortBy","onSort","n","action","onSelectionChangeCallback","checkbox","selectionKey","onSelectionChange","selectionCheckboxElement","selectedRowsKeys","reduce","acc","row","checked","selectableRowsStates","isSelected","onSelectionAllChange","forEach","_selectAllCheckbox","_isSelectAllCheckboxSelected","onSelectionRowChange","setSelectAllState","didInsertSelectAllCheckbox","willDestroySelectAllCheckbox","didInsertRowCheckbox","willDestroyRowCheckbox","filter","selectableRowsCount","length","selectedRowsCount","indeterminate","setComponentTemplate","TEMPLATE"],"mappings":"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"}