@hashicorp/design-system-components 4.20.0 → 4.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declarations/components/hds/accordion/item/index.d.ts +0 -6
- package/declarations/components/hds/advanced-table/index.d.ts +1 -0
- package/declarations/components/hds/advanced-table/models/table.d.ts +2 -0
- package/declarations/components/hds/disclosure-primitive/index.d.ts +2 -0
- package/declarations/components/hds/reveal/index.d.ts +0 -6
- package/declarations/components/hds/stepper/nav/index.d.ts +5 -5
- package/dist/components/hds/accordion/item/index.js +1 -7
- package/dist/components/hds/accordion/item/index.js.map +1 -1
- package/dist/components/hds/advanced-table/index.js +4 -1
- package/dist/components/hds/advanced-table/index.js.map +1 -1
- package/dist/components/hds/advanced-table/models/table.js +22 -8
- package/dist/components/hds/advanced-table/models/table.js.map +1 -1
- package/dist/components/hds/disclosure-primitive/index.js +3 -1
- package/dist/components/hds/disclosure-primitive/index.js.map +1 -1
- package/dist/components/hds/form/field/index.js +1 -1
- package/dist/components/hds/reveal/index.js +1 -9
- package/dist/components/hds/reveal/index.js.map +1 -1
- package/dist/components/hds/stepper/nav/index.js +2 -0
- package/dist/components/hds/stepper/nav/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -32,12 +32,6 @@ export interface HdsAccordionItemSignature {
|
|
|
32
32
|
Element: HTMLElement;
|
|
33
33
|
}
|
|
34
34
|
export default class HdsAccordionItem extends Component<HdsAccordionItemSignature> {
|
|
35
|
-
/**
|
|
36
|
-
* Generates a unique ID for the Content
|
|
37
|
-
*
|
|
38
|
-
* @param _contentId
|
|
39
|
-
*/
|
|
40
|
-
private _contentId;
|
|
41
35
|
private _titleId;
|
|
42
36
|
get ariaLabelledBy(): string | undefined;
|
|
43
37
|
/**
|
|
@@ -93,6 +93,7 @@ export default class HdsAdvancedTable extends Component<HdsAdvancedTableSignatur
|
|
|
93
93
|
get gridTemplateColumns(): string;
|
|
94
94
|
get classNames(): string;
|
|
95
95
|
get theadClassNames(): string;
|
|
96
|
+
private _didUpdateModel;
|
|
96
97
|
private _setUpScrollWrapper;
|
|
97
98
|
private _setUpThead;
|
|
98
99
|
setSortBy(column: string): void;
|
|
@@ -10,6 +10,7 @@ interface HdsAdvancedTableTableArgs {
|
|
|
10
10
|
}
|
|
11
11
|
export default class HdsAdvancedTableTableModel {
|
|
12
12
|
rows: HdsAdvancedTableRow[];
|
|
13
|
+
childrenKey?: string;
|
|
13
14
|
constructor(args: HdsAdvancedTableTableArgs);
|
|
14
15
|
get totalRowCount(): number;
|
|
15
16
|
get flattenedVisibleRows(): HdsAdvancedTableRow[];
|
|
@@ -17,6 +18,7 @@ export default class HdsAdvancedTableTableModel {
|
|
|
17
18
|
get hasRowsWithChildren(): boolean;
|
|
18
19
|
get allRowsAreOpen(): boolean;
|
|
19
20
|
get expandState(): HdsAdvancedTableExpandState;
|
|
21
|
+
updateModel(model: HdsAdvancedTableModel): void;
|
|
20
22
|
openAll(): void;
|
|
21
23
|
collapseAll(): void;
|
|
22
24
|
toggleAll(): void;
|
|
@@ -12,6 +12,7 @@ export interface HdsDisclosurePrimitiveSignature {
|
|
|
12
12
|
Blocks: {
|
|
13
13
|
toggle: [
|
|
14
14
|
{
|
|
15
|
+
contentId: string;
|
|
15
16
|
isOpen: boolean;
|
|
16
17
|
onClickToggle: (...args: any[]) => void;
|
|
17
18
|
}
|
|
@@ -27,6 +28,7 @@ export interface HdsDisclosurePrimitiveSignature {
|
|
|
27
28
|
export default class HdsDisclosurePrimitive extends Component<HdsDisclosurePrimitiveSignature> {
|
|
28
29
|
private _isOpen;
|
|
29
30
|
private _isControlled;
|
|
31
|
+
private _contentId;
|
|
30
32
|
get isOpen(): boolean;
|
|
31
33
|
set isOpen(value: boolean);
|
|
32
34
|
onClickToggle(): void;
|
|
@@ -17,12 +17,6 @@ export interface HdsRevealSignature {
|
|
|
17
17
|
Element: HdsDisclosurePrimitiveSignature['Element'];
|
|
18
18
|
}
|
|
19
19
|
export default class HdsReveal extends Component<HdsRevealSignature> {
|
|
20
|
-
/**
|
|
21
|
-
* Generates a unique ID for the Content
|
|
22
|
-
*
|
|
23
|
-
* @param _contentId
|
|
24
|
-
*/
|
|
25
|
-
private _contentId;
|
|
26
20
|
/**
|
|
27
21
|
* @param getText
|
|
28
22
|
* @type {string}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* SPDX-License-Identifier: MPL-2.0
|
|
4
4
|
*/
|
|
5
5
|
import Component from '@glimmer/component';
|
|
6
|
-
import type {
|
|
7
|
-
import type { HdsStepperNavStepSignature } from './step';
|
|
8
|
-
import type { HdsStepperNavPanelSignature } from './panel';
|
|
6
|
+
import type { WithBoundArgs } from '@glint/template';
|
|
9
7
|
import type { HdsStepperTitleTags, HdsStepperNavStep } from '../types.ts';
|
|
8
|
+
import HdsStepperNavStepComponent from './step.ts';
|
|
9
|
+
import HdsStepperNavPanelComponent from './panel.ts';
|
|
10
10
|
export interface HdsStepperNavSignature {
|
|
11
11
|
Args: {
|
|
12
12
|
steps?: HdsStepperNavStep[];
|
|
@@ -20,8 +20,8 @@ export interface HdsStepperNavSignature {
|
|
|
20
20
|
body?: [];
|
|
21
21
|
default: [
|
|
22
22
|
{
|
|
23
|
-
Step?:
|
|
24
|
-
Panel?:
|
|
23
|
+
Step?: WithBoundArgs<typeof HdsStepperNavStepComponent, 'currentStep' | 'isNavInteractive' | 'titleTag' | 'stepIds' | 'panelIds' | 'didInsertNode' | 'willDestroyNode' | 'onStepChange' | 'onKeyUp'>;
|
|
24
|
+
Panel?: WithBoundArgs<typeof HdsStepperNavPanelComponent, 'currentStep' | 'isNavInteractive' | 'stepIds' | 'panelIds' | 'didInsertNode' | 'willDestroyNode'>;
|
|
25
25
|
}
|
|
26
26
|
];
|
|
27
27
|
};
|
|
@@ -5,7 +5,7 @@ import { HdsAccordionSizeValues, HdsAccordionTypeValues, HdsAccordionItemTitleTa
|
|
|
5
5
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
6
6
|
import { setComponentTemplate } from '@ember/component';
|
|
7
7
|
|
|
8
|
-
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<Hds::DisclosurePrimitive\n class={{this.classNames}}\n @isOpen={{(or @isOpen (eq @forceState \"open\"))}}\n @onClickToggle={{@onClickToggle}}\n ...attributes\n>\n <:toggle as |t|>\n <div class=\"hds-accordion-item__toggle\">\n <Hds::Accordion::Item::Button\n @isOpen={{t.isOpen}}\n @onClickToggle={{t.onClickToggle}}\n @contentId={{
|
|
8
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<Hds::DisclosurePrimitive\n class={{this.classNames}}\n @isOpen={{(or @isOpen (eq @forceState \"open\"))}}\n @onClickToggle={{@onClickToggle}}\n ...attributes\n>\n <:toggle as |t|>\n <div class=\"hds-accordion-item__toggle\">\n <Hds::Accordion::Item::Button\n @isOpen={{t.isOpen}}\n @onClickToggle={{t.onClickToggle}}\n @contentId={{t.contentId}}\n @ariaLabel={{@ariaLabel}}\n @ariaLabelledBy={{this.ariaLabelledBy}}\n @size={{this.size}}\n @parentContainsInteractive={{this.containsInteractive}}\n />\n\n <Hds::Text::Body\n @tag={{this.titleTag}}\n @size={{this.toggleTextSize}}\n @weight=\"semibold\"\n @color=\"strong\"\n id={{this._titleId}}\n class=\"hds-accordion-item__toggle-content\"\n >\n {{yield to=\"toggle\"}}\n </Hds::Text::Body>\n </div>\n </:toggle>\n\n <:content as |c|>\n <Hds::Text::Body class=\"hds-accordion-item__content\" @tag=\"div\" @size=\"200\" @weight=\"regular\" @color=\"primary\">\n {{yield (hash close=c.close) to=\"content\"}}\n </Hds::Text::Body>\n </:content>\n</Hds::DisclosurePrimitive>");
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Copyright (c) HashiCorp, Inc.
|
|
@@ -22,12 +22,6 @@ const TEXT_SIZE_MAP = {
|
|
|
22
22
|
large: 300
|
|
23
23
|
};
|
|
24
24
|
class HdsAccordionItem extends Component {
|
|
25
|
-
/**
|
|
26
|
-
* Generates a unique ID for the Content
|
|
27
|
-
*
|
|
28
|
-
* @param _contentId
|
|
29
|
-
*/
|
|
30
|
-
_contentId = 'content-' + guidFor(this);
|
|
31
25
|
_titleId = 'title-' + guidFor(this);
|
|
32
26
|
get ariaLabelledBy() {
|
|
33
27
|
if (!this.args.ariaLabel) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/accordion/item/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\n\nimport {\n HdsAccordionSizeValues,\n HdsAccordionTypeValues,\n HdsAccordionItemTitleTagValues,\n} from '../types.ts';\nimport type {\n HdsAccordionForceStates,\n HdsAccordionSizes,\n HdsAccordionTypes,\n HdsAccordionItemTitleTags,\n} from '../types.ts';\n\nexport const SIZES: string[] = Object.values(HdsAccordionSizeValues);\nexport const DEFAULT_SIZE = HdsAccordionSizeValues.Medium;\n\nexport const TYPES: string[] = Object.values(HdsAccordionTypeValues);\nexport const DEFAULT_TYPE = HdsAccordionTypeValues.Card;\n\nconst TEXT_SIZE_MAP = {\n small: 100,\n medium: 200,\n large: 300,\n};\n\nexport interface HdsAccordionItemSignature {\n Args: {\n ariaLabel?: string;\n containsInteractive?: boolean;\n forceState?: HdsAccordionForceStates;\n isOpen?: boolean;\n isStatic?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle?: (event: MouseEvent, ...args: any[]) => void;\n size?: HdsAccordionSizes;\n titleTag?: HdsAccordionItemTitleTags;\n type?: HdsAccordionTypes;\n };\n Blocks: {\n toggle?: [];\n content: [\n {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close: (...args: any[]) => void;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsAccordionItem extends Component<HdsAccordionItemSignature> {\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/accordion/item/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\nimport { guidFor } from '@ember/object/internals';\n\nimport {\n HdsAccordionSizeValues,\n HdsAccordionTypeValues,\n HdsAccordionItemTitleTagValues,\n} from '../types.ts';\nimport type {\n HdsAccordionForceStates,\n HdsAccordionSizes,\n HdsAccordionTypes,\n HdsAccordionItemTitleTags,\n} from '../types.ts';\n\nexport const SIZES: string[] = Object.values(HdsAccordionSizeValues);\nexport const DEFAULT_SIZE = HdsAccordionSizeValues.Medium;\n\nexport const TYPES: string[] = Object.values(HdsAccordionTypeValues);\nexport const DEFAULT_TYPE = HdsAccordionTypeValues.Card;\n\nconst TEXT_SIZE_MAP = {\n small: 100,\n medium: 200,\n large: 300,\n};\n\nexport interface HdsAccordionItemSignature {\n Args: {\n ariaLabel?: string;\n containsInteractive?: boolean;\n forceState?: HdsAccordionForceStates;\n isOpen?: boolean;\n isStatic?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle?: (event: MouseEvent, ...args: any[]) => void;\n size?: HdsAccordionSizes;\n titleTag?: HdsAccordionItemTitleTags;\n type?: HdsAccordionTypes;\n };\n Blocks: {\n toggle?: [];\n content: [\n {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close: (...args: any[]) => void;\n },\n ];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsAccordionItem extends Component<HdsAccordionItemSignature> {\n private _titleId = 'title-' + guidFor(this);\n\n get ariaLabelledBy(): string | undefined {\n if (!this.args.ariaLabel) {\n return this._titleId;\n }\n return undefined;\n }\n\n /**\n * @param containsInteractive\n * @type {boolean}\n * @default false\n */\n get containsInteractive(): boolean {\n return this.args.containsInteractive ?? false;\n }\n\n /**\n * @param toggleTextSize\n * @type {HdsTextSizes}\n * @default 'medium'\n */\n get toggleTextSize(): number {\n const size = this.args.size ?? DEFAULT_SIZE;\n return TEXT_SIZE_MAP[size];\n }\n\n /**\n * Sets the size for the component\n *\n * @param size\n * @type {HdsAccordionSizes}\n * @default 'medium'\n */\n get size(): HdsAccordionSizes {\n const { size = DEFAULT_SIZE } = this.args;\n\n assert(\n `@size for \"Hds::Accordion::Item\" must be one of the following: ${SIZES.join(\n ', '\n )}; received: ${size}`,\n SIZES.includes(size)\n );\n\n return size;\n }\n\n /**\n * Sets the type of the component\n *\n * @param type\n * @type {HdsAccordionTypes}\n * @default 'card'\n */\n get type(): HdsAccordionTypes {\n const { type = DEFAULT_TYPE } = this.args;\n\n assert(\n `@type for \"Hds::Accordion::Item\" must be one of the following: ${TYPES.join(\n ', '\n )}; received: ${type}`,\n TYPES.includes(type)\n );\n\n return type;\n }\n\n get titleTag(): HdsAccordionItemTitleTags {\n return this.args.titleTag ?? HdsAccordionItemTitleTagValues.Div;\n }\n\n /**\n * Get the class names to apply to the component.\n * @method classNames\n * @return {string} The \"class\" attribute to apply to the component.\n */\n get classNames(): string {\n const classes = ['hds-accordion-item'];\n\n // add a class based on the @isOpen argument\n if (this.args.isOpen) {\n classes.push('hds-accordion-item--is-open');\n }\n\n // add a class based on the @isStatic argument\n if (this.args.isStatic) {\n classes.push('hds-accordion-item--is-static');\n }\n\n // add a class based on the @size argument\n classes.push(`hds-accordion-item--size-${this.size}`);\n\n // add a class based on the @type argument\n classes.push(`hds-accordion-item--type-${this.type}`);\n\n if (this.containsInteractive) {\n // Entire accordion item including the chevron is interactive:\n classes.push('hds-accordion-item--contains-interactive');\n } else {\n // Only chevron is interactive:\n classes.push('hds-accordion-item--does-not-contain-interactive');\n }\n\n return classes.join(' ');\n }\n}\n"],"names":["SIZES","Object","values","HdsAccordionSizeValues","DEFAULT_SIZE","Medium","TYPES","HdsAccordionTypeValues","DEFAULT_TYPE","Card","TEXT_SIZE_MAP","small","medium","large","HdsAccordionItem","Component","_titleId","guidFor","ariaLabelledBy","args","ariaLabel","undefined","containsInteractive","toggleTextSize","size","assert","join","includes","type","titleTag","HdsAccordionItemTitleTagValues","Div","classNames","classes","isOpen","push","isStatic","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import { precompileTemplate } from '@ember/template-compilation';
|
|
|
10
10
|
import { g, i, n } from 'decorator-transforms/runtime';
|
|
11
11
|
import { setComponentTemplate } from '@ember/component';
|
|
12
12
|
|
|
13
|
-
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div\n class=\"hds-advanced-table__container\n {{(if this.isStickyHeaderPinned \'hds-advanced-table__container--header-is-pinned\')}}\"\n ...attributes\n>\n {{! Caption }}\n <div id={{this._captionId}} class=\"sr-only hds-advanced-table__caption\" aria-live=\"polite\">\n {{@caption}}\n {{this.sortedMessageText}}\n </div>\n\n {{! Grid }}\n <div\n class={{this.classNames}}\n role=\"grid\"\n aria-describedby={{this._captionId}}\n {{style\n grid-template-columns=this.gridTemplateColumns\n --hds-advanced-table-sticky-column-offset=this.stickyColumnOffset\n max-height=@maxHeight\n }}\n {{this._setUpScrollWrapper}}\n >\n {{! Header }}\n <div class={{this.theadClassNames}} role=\"rowgroup\" {{this._setUpThead}}>\n <Hds::AdvancedTable::Tr\n @selectionScope=\"col\"\n @onClickSortBySelected={{if @selectableColumnKey (fn this.setSortBy @selectableColumnKey)}}\n @sortBySelectedOrder={{if (eq this._sortBy @selectableColumnKey) this._sortOrder}}\n @isSelectable={{this.isSelectable}}\n @onSelectionChange={{this.onSelectionAllChange}}\n @didInsert={{this.didInsertSelectAllCheckbox}}\n @willDestroy={{this.willDestroySelectAllCheckbox}}\n @selectionAriaLabelSuffix=\"all rows\"\n @hasStickyColumn={{@hasStickyFirstColumn}}\n @isStickyColumnPinned={{this.isStickyColumnPinned}}\n >\n {{#each @columns as |column index|}}\n {{#if column.isSortable}}\n <Hds::AdvancedTable::ThSort\n @sortOrder={{if (eq column.key this._sortBy) this._sortOrder}}\n @onClickSort={{fn this.setSortBy column.key}}\n @align={{column.align}}\n @tooltip={{column.tooltip}}\n @isStickyColumn={{if (and (eq index 0) @hasStickyFirstColumn) true}}\n @isStickyColumnPinned={{this.isStickyColumnPinned}}\n >\n {{column.label}}\n </Hds::AdvancedTable::ThSort>\n {{else}}\n <Hds::AdvancedTable::Th\n @align={{column.align}}\n @tooltip={{column.tooltip}}\n @isVisuallyHidden={{column.isVisuallyHidden}}\n @isExpandable={{column.isExpandable}}\n @onClickToggle={{this._tableModel.toggleAll}}\n @isExpanded={{this._tableModel.expandState}}\n @hasExpandAllButton={{this._tableModel.hasRowsWithChildren}}\n @isStickyColumn={{if (and (eq index 0) @hasStickyFirstColumn) true}}\n @isStickyColumnPinned={{this.isStickyColumnPinned}}\n >\n {{column.label}}\n </Hds::AdvancedTable::Th>\n {{/if}}\n {{/each}}\n </Hds::AdvancedTable::Tr>\n </div>\n\n {{! Body }}\n <div class=\"hds-advanced-table__tbody\" role=\"rowgroup\">\n {{! ----------------------------------------------------------------------------------------\n IMPORTANT: we loop on the `model` array and for each record\n we yield the Tr/Td/Th elements _and_ the record itself as `data`\n this means the consumer will *have to* use the `data` key to access it in their template\n -------------------------------------------------------------------------------------------- }}\n {{#each (sort-by this.getSortCriteria this._tableModel.rows) key=this.identityKey as |record index|}}\n {{#if this._tableModel.hasRowsWithChildren}}\n <Hds::AdvancedTable::ExpandableTrGroup\n @record={{record}}\n @rowIndex={{index}}\n @onClickToggle={{record.onClickToggle}}\n as |T|\n >\n {{yield\n (hash\n Tr=(component\n \"hds/advanced-table/tr\"\n isLastRow=(eq this._tableModel.lastVisibleRow.id T.data.id)\n isParentRow=T.isExpandable\n depth=T.depth\n displayRow=T.shouldDisplayChildRows\n )\n Th=(component\n \"hds/advanced-table/th\"\n depth=T.depth\n isExpandable=T.isExpandable\n isExpanded=T.isExpanded\n newLabel=T.id\n parentId=T.parentId\n scope=\"row\"\n onClickToggle=T.onClickToggle\n )\n Td=(component \"hds/advanced-table/td\" align=@align)\n data=T.data\n isOpen=T.isExpanded\n rowIndex=T.rowIndex\n )\n to=\"body\"\n }}\n </Hds::AdvancedTable::ExpandableTrGroup>\n {{else}}\n {{yield\n (hash\n Tr=(component\n \"hds/advanced-table/tr\"\n selectionScope=\"row\"\n isLastRow=(eq this._tableModel.lastVisibleRow.id record.id)\n isSelectable=this.isSelectable\n onSelectionChange=this.onSelectionRowChange\n didInsert=this.didInsertRowCheckbox\n willDestroy=this.willDestroyRowCheckbox\n selectionAriaLabelSuffix=@selectionAriaLabelSuffix\n hasStickyColumn=@hasStickyFirstColumn\n isStickyColumnPinned=this.isStickyColumnPinned\n )\n Th=(component\n \"hds/advanced-table/th\"\n scope=\"row\"\n isStickyColumn=@hasStickyFirstColumn\n isStickyColumnPinned=this.isStickyColumnPinned\n )\n Td=(component \"hds/advanced-table/td\" align=@align)\n data=record\n rowIndex=index\n )\n to=\"body\"\n }}\n {{/if}}\n {{/each}}\n </div>\n </div>\n {{#if this.showScrollIndicatorLeft}}\n <div\n class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-left\"\n {{style height=this.scrollIndicatorDimensions.height left=this.scrollIndicatorDimensions.left}}\n />\n {{/if}}\n\n {{#if this.showScrollIndicatorRight}}\n <div\n class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-right\"\n {{style height=this.scrollIndicatorDimensions.height right=this.scrollIndicatorDimensions.right}}\n />\n {{/if}}\n\n {{#if this.showScrollIndicatorTop}}\n <div\n class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-top\"\n {{style top=this.scrollIndicatorDimensions.top width=this.scrollIndicatorDimensions.width}}\n />\n {{/if}}\n\n {{#if this.showScrollIndicatorBottom}}\n <div\n class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-bottom\"\n {{style bottom=this.scrollIndicatorDimensions.bottom width=this.scrollIndicatorDimensions.width}}\n />\n {{/if}}\n</div>");
|
|
13
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div\n class=\"hds-advanced-table__container\n {{(if this.isStickyHeaderPinned \'hds-advanced-table__container--header-is-pinned\')}}\"\n {{this._didUpdateModel}}\n ...attributes\n>\n {{! Caption }}\n <div id={{this._captionId}} class=\"sr-only hds-advanced-table__caption\" aria-live=\"polite\">\n {{@caption}}\n {{this.sortedMessageText}}\n </div>\n\n {{! Grid }}\n <div\n class={{this.classNames}}\n role=\"grid\"\n aria-describedby={{this._captionId}}\n {{style\n grid-template-columns=this.gridTemplateColumns\n --hds-advanced-table-sticky-column-offset=this.stickyColumnOffset\n max-height=@maxHeight\n }}\n {{this._setUpScrollWrapper}}\n >\n {{! Header }}\n <div class={{this.theadClassNames}} role=\"rowgroup\" {{this._setUpThead}}>\n <Hds::AdvancedTable::Tr\n @selectionScope=\"col\"\n @onClickSortBySelected={{if @selectableColumnKey (fn this.setSortBy @selectableColumnKey)}}\n @sortBySelectedOrder={{if (eq this._sortBy @selectableColumnKey) this._sortOrder}}\n @isSelectable={{this.isSelectable}}\n @onSelectionChange={{this.onSelectionAllChange}}\n @didInsert={{this.didInsertSelectAllCheckbox}}\n @willDestroy={{this.willDestroySelectAllCheckbox}}\n @selectionAriaLabelSuffix=\"all rows\"\n @hasStickyColumn={{@hasStickyFirstColumn}}\n @isStickyColumnPinned={{this.isStickyColumnPinned}}\n >\n {{#each @columns as |column index|}}\n {{#if column.isSortable}}\n <Hds::AdvancedTable::ThSort\n @sortOrder={{if (eq column.key this._sortBy) this._sortOrder}}\n @onClickSort={{fn this.setSortBy column.key}}\n @align={{column.align}}\n @tooltip={{column.tooltip}}\n @isStickyColumn={{if (and (eq index 0) @hasStickyFirstColumn) true}}\n @isStickyColumnPinned={{this.isStickyColumnPinned}}\n >\n {{column.label}}\n </Hds::AdvancedTable::ThSort>\n {{else}}\n <Hds::AdvancedTable::Th\n @align={{column.align}}\n @tooltip={{column.tooltip}}\n @isVisuallyHidden={{column.isVisuallyHidden}}\n @isExpandable={{column.isExpandable}}\n @onClickToggle={{this._tableModel.toggleAll}}\n @isExpanded={{this._tableModel.expandState}}\n @hasExpandAllButton={{this._tableModel.hasRowsWithChildren}}\n @isStickyColumn={{if (and (eq index 0) @hasStickyFirstColumn) true}}\n @isStickyColumnPinned={{this.isStickyColumnPinned}}\n >\n {{column.label}}\n </Hds::AdvancedTable::Th>\n {{/if}}\n {{/each}}\n </Hds::AdvancedTable::Tr>\n </div>\n\n {{! Body }}\n <div class=\"hds-advanced-table__tbody\" role=\"rowgroup\">\n {{! ----------------------------------------------------------------------------------------\n IMPORTANT: we loop on the `model` array and for each record\n we yield the Tr/Td/Th elements _and_ the record itself as `data`\n this means the consumer will *have to* use the `data` key to access it in their template\n -------------------------------------------------------------------------------------------- }}\n {{#each (sort-by this.getSortCriteria this._tableModel.rows) key=this.identityKey as |record index|}}\n {{#if this._tableModel.hasRowsWithChildren}}\n <Hds::AdvancedTable::ExpandableTrGroup\n @record={{record}}\n @rowIndex={{index}}\n @onClickToggle={{record.onClickToggle}}\n as |T|\n >\n {{yield\n (hash\n Tr=(component\n \"hds/advanced-table/tr\"\n isLastRow=(eq this._tableModel.lastVisibleRow.id T.data.id)\n isParentRow=T.isExpandable\n depth=T.depth\n displayRow=T.shouldDisplayChildRows\n )\n Th=(component\n \"hds/advanced-table/th\"\n depth=T.depth\n isExpandable=T.isExpandable\n isExpanded=T.isExpanded\n newLabel=T.id\n parentId=T.parentId\n scope=\"row\"\n onClickToggle=T.onClickToggle\n )\n Td=(component \"hds/advanced-table/td\" align=@align)\n data=T.data\n isOpen=T.isExpanded\n rowIndex=T.rowIndex\n )\n to=\"body\"\n }}\n </Hds::AdvancedTable::ExpandableTrGroup>\n {{else}}\n {{yield\n (hash\n Tr=(component\n \"hds/advanced-table/tr\"\n selectionScope=\"row\"\n isLastRow=(eq this._tableModel.lastVisibleRow.id record.id)\n isSelectable=this.isSelectable\n onSelectionChange=this.onSelectionRowChange\n didInsert=this.didInsertRowCheckbox\n willDestroy=this.willDestroyRowCheckbox\n selectionAriaLabelSuffix=@selectionAriaLabelSuffix\n hasStickyColumn=@hasStickyFirstColumn\n isStickyColumnPinned=this.isStickyColumnPinned\n )\n Th=(component\n \"hds/advanced-table/th\"\n scope=\"row\"\n isStickyColumn=@hasStickyFirstColumn\n isStickyColumnPinned=this.isStickyColumnPinned\n )\n Td=(component \"hds/advanced-table/td\" align=@align)\n data=record\n rowIndex=index\n )\n to=\"body\"\n }}\n {{/if}}\n {{/each}}\n </div>\n </div>\n {{#if this.showScrollIndicatorLeft}}\n <div\n class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-left\"\n {{style height=this.scrollIndicatorDimensions.height left=this.scrollIndicatorDimensions.left}}\n />\n {{/if}}\n\n {{#if this.showScrollIndicatorRight}}\n <div\n class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-right\"\n {{style height=this.scrollIndicatorDimensions.height right=this.scrollIndicatorDimensions.right}}\n />\n {{/if}}\n\n {{#if this.showScrollIndicatorTop}}\n <div\n class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-top\"\n {{style top=this.scrollIndicatorDimensions.top width=this.scrollIndicatorDimensions.width}}\n />\n {{/if}}\n\n {{#if this.showScrollIndicatorBottom}}\n <div\n class=\"hds-advanced-table__scroll-indicator hds-advanced-table__scroll-indicator-bottom\"\n {{style bottom=this.scrollIndicatorDimensions.bottom width=this.scrollIndicatorDimensions.width}}\n />\n {{/if}}\n</div>");
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Copyright (c) HashiCorp, Inc.
|
|
@@ -308,6 +308,9 @@ class HdsAdvancedTable extends Component {
|
|
|
308
308
|
}
|
|
309
309
|
return classes.join(' ');
|
|
310
310
|
}
|
|
311
|
+
_didUpdateModel = modifier(() => {
|
|
312
|
+
this._tableModel.updateModel(this.args.model);
|
|
313
|
+
});
|
|
311
314
|
_setUpScrollWrapper = modifier(element => {
|
|
312
315
|
this._scrollHandler = () => {
|
|
313
316
|
// 6px as a buffer so the shadow doesn't appear over the border radius on the edge of the table
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/advanced-table/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\nimport type Owner from '@ember/owner';\n\nimport HdsAdvancedTableTableModel from './models/table.ts';\nimport {\n HdsAdvancedTableDensityValues,\n HdsAdvancedTableThSortOrderValues,\n HdsAdvancedTableVerticalAlignmentValues,\n} from './types.ts';\nimport type {\n HdsAdvancedTableColumn,\n HdsAdvancedTableDensities,\n HdsAdvancedTableHorizontalAlignment,\n HdsAdvancedTableOnSelectionChangeSignature,\n HdsAdvancedTableSelectableRow,\n HdsAdvancedTableSortingFunction,\n HdsAdvancedTableThSortOrder,\n HdsAdvancedTableVerticalAlignment,\n HdsAdvancedTableModel,\n HdsAdvancedTableExpandState,\n} from './types.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.ts';\nimport type { HdsAdvancedTableTdSignature } from './td.ts';\nimport type { HdsAdvancedTableThSignature } from './th.ts';\nimport type { HdsAdvancedTableTrSignature } from './tr.ts';\n\nexport const DENSITIES: HdsAdvancedTableDensities[] = Object.values(\n HdsAdvancedTableDensityValues\n);\nexport const DEFAULT_DENSITY = HdsAdvancedTableDensityValues.Medium;\n\nexport const VALIGNMENTS: HdsAdvancedTableVerticalAlignment[] = Object.values(\n HdsAdvancedTableVerticalAlignmentValues\n);\nexport const DEFAULT_VALIGN = HdsAdvancedTableVerticalAlignmentValues.Top;\n\nconst DEFAULT_SCROLL_DIMENSIONS = {\n bottom: '0px',\n height: '0px',\n left: '0px',\n right: '0px',\n top: '0px',\n width: '0px',\n};\n\nconst getScrollIndicatorDimensions = (\n scrollWrapper: HTMLDivElement,\n theadElement: HTMLDivElement,\n hasStickyHeader: boolean,\n hasStickyFirstColumn: boolean\n) => {\n const horizontalScrollBarHeight =\n scrollWrapper.offsetHeight - scrollWrapper.clientHeight;\n const verticalScrollBarWidth =\n scrollWrapper.offsetWidth - scrollWrapper.clientWidth;\n\n let leftOffset = 0;\n\n if (hasStickyFirstColumn) {\n const stickyColumnHeaders = theadElement.querySelectorAll(\n '.hds-advanced-table__th--is-sticky-column'\n );\n\n stickyColumnHeaders?.forEach((el) => {\n // querySelectorAll returns Elements, which don't have offsetWidth\n // need to use offsetWidth to account for the cell borders\n const elAsHTMLElement = el as HTMLElement;\n leftOffset += elAsHTMLElement.offsetWidth;\n });\n\n // offsets the left: -1px position if there are multiple sticky columns\n if (stickyColumnHeaders.length > 1) {\n leftOffset -= 1;\n }\n }\n\n return {\n bottom: `${horizontalScrollBarHeight}px`,\n height: `${scrollWrapper.offsetHeight - horizontalScrollBarHeight}px`,\n left: `${leftOffset}px`,\n right: `${verticalScrollBarWidth}px`,\n top: hasStickyHeader ? `${theadElement.offsetHeight}px` : '0px',\n width: `${scrollWrapper.offsetWidth - verticalScrollBarWidth}px`,\n };\n};\n\nconst getStickyColumnLeftOffset = (\n theadElement: HTMLDivElement,\n hasRowSelection: boolean\n) => {\n // if there is no select checkbox column, the sticky column is all the way to the left\n if (!hasRowSelection) return '0px';\n\n const selectableCell = theadElement.querySelector(\n '.hds-advanced-table__th--is-selectable'\n ) as HTMLElement;\n\n return `${selectableCell?.offsetWidth}px`;\n};\n\nexport interface HdsAdvancedTableSignature {\n Args: {\n align?: HdsAdvancedTableHorizontalAlignment;\n caption?: string;\n columns: HdsAdvancedTableColumn[];\n density?: HdsAdvancedTableDensities;\n identityKey?: string;\n isSelectable?: boolean;\n isStriped?: boolean;\n model: HdsAdvancedTableModel;\n onSelectionChange?: (\n selection: HdsAdvancedTableOnSelectionChangeSignature\n ) => void;\n onSort?: (sortBy: string, sortOrder: HdsAdvancedTableThSortOrder) => void;\n selectionAriaLabelSuffix?: string;\n sortBy?: string;\n selectableColumnKey?: string;\n sortedMessageText?: string;\n sortOrder?: HdsAdvancedTableThSortOrder;\n valign?: HdsAdvancedTableVerticalAlignment;\n hasStickyHeader?: boolean;\n hasStickyFirstColumn?: boolean;\n childrenKey?: string;\n maxHeight?: string;\n };\n Blocks: {\n body?: [\n {\n Td?: ComponentLike<HdsAdvancedTableTdSignature>;\n Tr?: ComponentLike<HdsAdvancedTableTrSignature>;\n Th?: ComponentLike<HdsAdvancedTableThSignature>;\n data?: Record<string, unknown>;\n rowIndex?: number | string;\n isOpen?: HdsAdvancedTableExpandState;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsAdvancedTable extends Component<HdsAdvancedTableSignature> {\n @tracked private _sortBy = this.args.sortBy ?? undefined;\n @tracked private _sortOrder =\n this.args.sortOrder || HdsAdvancedTableThSortOrderValues.Asc;\n @tracked\n private _selectAllCheckbox?: HdsFormCheckboxBaseSignature['Element'] =\n undefined;\n @tracked private _isSelectAllCheckboxSelected?: boolean = undefined;\n private _selectableRows: HdsAdvancedTableSelectableRow[] = [];\n private _captionId = 'caption-' + guidFor(this);\n private _tableModel!: HdsAdvancedTableTableModel;\n private _scrollHandler!: (event: Event) => void;\n private _resizeObserver!: ResizeObserver;\n private _theadElement!: HTMLDivElement;\n\n @tracked scrollIndicatorDimensions = DEFAULT_SCROLL_DIMENSIONS;\n @tracked isStickyColumnPinned = false;\n @tracked isStickyHeaderPinned = false;\n @tracked showScrollIndicatorLeft = false;\n @tracked showScrollIndicatorRight = false;\n @tracked showScrollIndicatorTop = false;\n @tracked showScrollIndicatorBottom = false;\n @tracked stickyColumnOffset = '0px';\n\n constructor(owner: Owner, args: HdsAdvancedTableSignature['Args']) {\n super(owner, args);\n\n const { model, childrenKey, columns, hasStickyFirstColumn } = args;\n\n this._tableModel = new HdsAdvancedTableTableModel({\n model,\n childrenKey,\n });\n\n if (this._tableModel.hasRowsWithChildren) {\n const sortableColumns = columns.filter((column) => column.isSortable);\n const sortableColumnLabels = sortableColumns.map(\n (column) => column.label\n );\n\n assert(\n `Cannot have sortable columns if there are nested rows. Sortable columns are ${sortableColumnLabels.toString()}`,\n sortableColumns.length === 0\n );\n\n assert(\n 'Cannot have a sticky first column if there are nested rows.',\n !hasStickyFirstColumn\n );\n }\n }\n\n get getSortCriteria(): string | HdsAdvancedTableSortingFunction<unknown> {\n // get the current column\n const currentColumn = this.args?.columns?.find(\n (column) => column.key === this._sortBy\n );\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 columnWidths(): string[] | undefined {\n const { columns } = this.args;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const widths: string[] = new Array(columns.length);\n let hasCustomColumnWidth = false;\n\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n\n if (column?.['width']) {\n widths[i] = column.width;\n if (!hasCustomColumnWidth) hasCustomColumnWidth = true;\n }\n }\n\n return hasCustomColumnWidth ? widths : undefined;\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 childrenKey(): string {\n const { childrenKey = 'children' } = this.args;\n\n return childrenKey;\n }\n\n get hasScrollIndicator(): boolean {\n if (this.args.hasStickyFirstColumn) {\n return true;\n }\n\n return false;\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 return `Sorted by ${this._sortBy} ${this._sortOrder}ending`;\n } else {\n return '';\n }\n }\n\n get isSelectable(): boolean {\n const { isSelectable = false } = this.args;\n\n if (this._tableModel.hasRowsWithChildren) {\n assert(\n '@isSelectable must not be true if there are nested rows.',\n !isSelectable\n );\n return isSelectable;\n }\n\n return isSelectable;\n }\n\n get isStriped(): boolean {\n const { isStriped = false } = this.args;\n\n if (this._tableModel.hasRowsWithChildren) {\n assert(\n '@isStriped must not be true if there are nested rows.',\n !isStriped\n );\n return isStriped;\n }\n\n return isStriped;\n }\n\n get density(): HdsAdvancedTableDensities {\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 hasStickyHeader(): boolean {\n if (this.args.maxHeight && this.args.hasStickyHeader !== false) {\n return true;\n } else if (this.args.hasStickyHeader && !this.args.maxHeight) {\n assert('Must set @maxHeight to use @hasStickyHeader.', false);\n }\n\n return false;\n }\n\n get valign(): HdsAdvancedTableVerticalAlignment {\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 // returns the grid-template-columns CSS attribute for the grid\n get gridTemplateColumns(): string {\n const { isSelectable, columns } = this.args;\n\n const DEFAULT_COLUMN_WIDTH = '1fr';\n\n // if there is a select checkbox, the first column has a 'min-content' width to hug the checkbox content\n let style = isSelectable ? 'min-content ' : '';\n\n if (!this.columnWidths) {\n // if there are no custom column widths, each column is the same width and they take up the available space\n style += `repeat(${columns.length}, ${DEFAULT_COLUMN_WIDTH})`;\n } else {\n // check the custom column widths, if the current column has a custom width use the custom width. otherwise take the available space.\n for (let i = 0; i < this.columnWidths.length; i++) {\n style += ` ${this.columnWidths[i] ? this.columnWidths[i] : DEFAULT_COLUMN_WIDTH}`;\n }\n }\n\n return style;\n }\n\n get classNames(): string {\n const classes = ['hds-advanced-table'];\n\n if (this.isStriped) {\n classes.push('hds-advanced-table--striped');\n }\n\n if (this.density) {\n classes.push(`hds-advanced-table--density-${this.density}`);\n }\n\n if (this.valign) {\n classes.push(`hds-advanced-table--valign-${this.valign}`);\n }\n\n if (this._tableModel.hasRowsWithChildren) {\n classes.push(`hds-advanced-table--nested`);\n }\n\n return classes.join(' ');\n }\n\n get theadClassNames(): string {\n const classes = ['hds-advanced-table__thead'];\n\n if (this.hasStickyHeader) {\n classes.push('hds-advanced-table__thead--sticky');\n }\n\n if (this.isStickyHeaderPinned) {\n classes.push('hds-advanced-table__thead--is-pinned');\n }\n\n return classes.join(' ');\n }\n\n private _setUpScrollWrapper = modifier((element: HTMLDivElement) => {\n this._scrollHandler = () => {\n // 6px as a buffer so the shadow doesn't appear over the border radius on the edge of the table\n const SCROLL_BUFFER = 6;\n\n // left scroll indicator and sticky column styles\n if (element.scrollLeft > SCROLL_BUFFER && !this.showScrollIndicatorLeft) {\n if (this.args.hasStickyFirstColumn) {\n this.isStickyColumnPinned = true;\n }\n this.showScrollIndicatorLeft = true;\n } else if (element.scrollLeft === 0 && this.showScrollIndicatorLeft) {\n this.isStickyColumnPinned = false;\n this.showScrollIndicatorLeft = false;\n }\n\n // the right edge is how far the user can scroll, which is the full width of the table - the visible section of the table (also subtract the buffer)\n const rightEdge =\n element.scrollWidth - element.clientWidth - SCROLL_BUFFER;\n\n // right scroll indicator\n if (element.scrollLeft < rightEdge) {\n this.showScrollIndicatorRight = true;\n } else {\n this.showScrollIndicatorRight = false;\n }\n\n // sticky header\n if (element.scrollTop > 0) {\n if (this.hasStickyHeader) {\n this.isStickyHeaderPinned = true;\n }\n this.showScrollIndicatorTop = true;\n } else {\n if (this.hasStickyHeader) {\n this.isStickyHeaderPinned = false;\n }\n this.showScrollIndicatorTop = false;\n }\n\n // the bottom edge is how far the user can scroll, which is the full height of the table - the visible section of the table (also subtract the buffer)\n const bottomEdge =\n element.scrollHeight - element.clientHeight - SCROLL_BUFFER;\n\n // bottom scroll indicator\n if (element.scrollTop < bottomEdge) {\n this.showScrollIndicatorBottom = true;\n } else {\n this.showScrollIndicatorBottom = false;\n }\n };\n\n element.addEventListener('scroll', this._scrollHandler);\n\n const updateMeasurements = () => {\n this.scrollIndicatorDimensions = getScrollIndicatorDimensions(\n element,\n this._theadElement,\n this.hasStickyHeader,\n hasStickyFirstColumn\n );\n\n if (hasStickyFirstColumn) {\n this.stickyColumnOffset = getStickyColumnLeftOffset(\n this._theadElement,\n isSelectable\n );\n }\n };\n\n const { hasStickyFirstColumn = false, isSelectable = false } = this.args;\n\n this._resizeObserver = new ResizeObserver((entries) => {\n entries.forEach(() => {\n updateMeasurements();\n });\n });\n\n this._resizeObserver.observe(element);\n\n updateMeasurements();\n\n // on render check if should show right scroll indicator\n if (element.clientWidth < element.scrollWidth) {\n this.showScrollIndicatorRight = true;\n }\n\n // on render check if should show bottom scroll indicator\n if (element.clientHeight < element.scrollHeight) {\n this.showScrollIndicatorBottom = true;\n }\n\n return () => {\n element.removeEventListener('scroll', this._scrollHandler);\n this._resizeObserver.disconnect();\n };\n });\n\n private _setUpThead = modifier((element: HTMLDivElement) => {\n this._theadElement = element;\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 === HdsAdvancedTableThSortOrderValues.Asc\n ? HdsAdvancedTableThSortOrderValues.Desc\n : HdsAdvancedTableThSortOrderValues.Asc;\n } else {\n // otherwise, set the sort order to ascending\n this._sortBy = column;\n this._sortOrder = HdsAdvancedTableThSortOrderValues.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\n if (typeof onSelectionChange !== 'function') return;\n\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 @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","HdsAdvancedTableDensityValues","DEFAULT_DENSITY","Medium","VALIGNMENTS","HdsAdvancedTableVerticalAlignmentValues","DEFAULT_VALIGN","Top","DEFAULT_SCROLL_DIMENSIONS","bottom","height","left","right","top","width","getScrollIndicatorDimensions","scrollWrapper","theadElement","hasStickyHeader","hasStickyFirstColumn","horizontalScrollBarHeight","offsetHeight","clientHeight","verticalScrollBarWidth","offsetWidth","clientWidth","leftOffset","stickyColumnHeaders","querySelectorAll","forEach","el","elAsHTMLElement","length","getStickyColumnLeftOffset","hasRowSelection","selectableCell","querySelector","HdsAdvancedTable","Component","g","prototype","tracked","args","sortBy","undefined","i","void 0","sortOrder","HdsAdvancedTableThSortOrderValues","Asc","_selectableRows","_captionId","guidFor","_tableModel","_scrollHandler","_resizeObserver","_theadElement","constructor","owner","model","childrenKey","columns","HdsAdvancedTableTableModel","hasRowsWithChildren","sortableColumns","filter","column","isSortable","sortableColumnLabels","map","label","assert","toString","getSortCriteria","currentColumn","find","key","_sortBy","sortingFunction","_sortOrder","columnWidths","widths","Array","hasCustomColumnWidth","identityKey","hasScrollIndicator","sortedMessageText","isSelectable","isStriped","density","join","includes","maxHeight","valign","gridTemplateColumns","DEFAULT_COLUMN_WIDTH","style","classNames","classes","push","theadClassNames","isStickyHeaderPinned","_setUpScrollWrapper","modifier","element","SCROLL_BUFFER","scrollLeft","showScrollIndicatorLeft","isStickyColumnPinned","rightEdge","scrollWidth","showScrollIndicatorRight","scrollTop","showScrollIndicatorTop","bottomEdge","scrollHeight","showScrollIndicatorBottom","addEventListener","updateMeasurements","scrollIndicatorDimensions","stickyColumnOffset","ResizeObserver","entries","observe","removeEventListener","disconnect","_setUpThead","setSortBy","Desc","onSort","n","action","onSelectionChangeCallback","checkbox","selectionKey","onSelectionChange","selectionCheckboxElement","selectedRowsKeys","reduce","acc","row","checked","selectableRowsStates","isSelected","onSelectionAllChange","_selectAllCheckbox","_isSelectAllCheckboxSelected","onSelectionRowChange","setSelectAllState","didInsertSelectAllCheckbox","willDestroySelectAllCheckbox","didInsertRowCheckbox","willDestroyRowCheckbox","selectableRowsCount","selectedRowsCount","indeterminate","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAkCO,MAAMA,SAAsC,GAAGC,MAAM,CAACC,MAAM,CACjEC,6BACF;AACaC,MAAAA,eAAe,GAAGD,6BAA6B,CAACE;AAEtD,MAAMC,WAAgD,GAAGL,MAAM,CAACC,MAAM,CAC3EK,uCACF;AACaC,MAAAA,cAAc,GAAGD,uCAAuC,CAACE;AAEtE,MAAMC,yBAAyB,GAAG;AAChCC,EAAAA,MAAM,EAAE,KAAK;AACbC,EAAAA,MAAM,EAAE,KAAK;AACbC,EAAAA,IAAI,EAAE,KAAK;AACXC,EAAAA,KAAK,EAAE,KAAK;AACZC,EAAAA,GAAG,EAAE,KAAK;AACVC,EAAAA,KAAK,EAAE;AACT,CAAC;AAED,MAAMC,4BAA4B,GAAGA,CACnCC,aAA6B,EAC7BC,YAA4B,EAC5BC,eAAwB,EACxBC,oBAA6B,KAC1B;EACH,MAAMC,yBAAyB,GAC7BJ,aAAa,CAACK,YAAY,GAAGL,aAAa,CAACM,YAAY;EACzD,MAAMC,sBAAsB,GAC1BP,aAAa,CAACQ,WAAW,GAAGR,aAAa,CAACS,WAAW;EAEvD,IAAIC,UAAU,GAAG,CAAC;AAElB,EAAA,IAAIP,oBAAoB,EAAE;AACxB,IAAA,MAAMQ,mBAAmB,GAAGV,YAAY,CAACW,gBAAgB,CACvD,2CACF,CAAC;AAEDD,IAAAA,mBAAmB,EAAEE,OAAO,CAAEC,EAAE,IAAK;AACnC;AACA;MACA,MAAMC,eAAe,GAAGD,EAAiB;MACzCJ,UAAU,IAAIK,eAAe,CAACP,WAAW;AAC3C,KAAC,CAAC;;AAEF;AACA,IAAA,IAAIG,mBAAmB,CAACK,MAAM,GAAG,CAAC,EAAE;AAClCN,MAAAA,UAAU,IAAI,CAAC;AACjB;AACF;EAEA,OAAO;IACLjB,MAAM,EAAE,CAAGW,EAAAA,yBAAyB,CAAI,EAAA,CAAA;AACxCV,IAAAA,MAAM,EAAE,CAAGM,EAAAA,aAAa,CAACK,YAAY,GAAGD,yBAAyB,CAAI,EAAA,CAAA;IACrET,IAAI,EAAE,CAAGe,EAAAA,UAAU,CAAI,EAAA,CAAA;IACvBd,KAAK,EAAE,CAAGW,EAAAA,sBAAsB,CAAI,EAAA,CAAA;IACpCV,GAAG,EAAEK,eAAe,GAAG,CAAA,EAAGD,YAAY,CAACI,YAAY,CAAI,EAAA,CAAA,GAAG,KAAK;AAC/DP,IAAAA,KAAK,EAAE,CAAGE,EAAAA,aAAa,CAACQ,WAAW,GAAGD,sBAAsB,CAAA,EAAA;GAC7D;AACH,CAAC;AAED,MAAMU,yBAAyB,GAAGA,CAChChB,YAA4B,EAC5BiB,eAAwB,KACrB;AACH;AACA,EAAA,IAAI,CAACA,eAAe,EAAE,OAAO,KAAK;AAElC,EAAA,MAAMC,cAAc,GAAGlB,YAAY,CAACmB,aAAa,CAC/C,wCACF,CAAgB;AAEhB,EAAA,OAAO,CAAGD,EAAAA,cAAc,EAAEX,WAAW,CAAI,EAAA,CAAA;AAC3C,CAAC;AA0Cc,MAAMa,gBAAgB,SAASC,SAAS,CAA4B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAChFC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAmB,IAAI,CAACC,IAAI,CAACC,MAAM,IAAIC,SAAS;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,YAAA,EAAA,CACvDC,OAAO,CAAA,EAAA,YAAA;MAAA,OACN,IAAI,CAACC,IAAI,CAACK,SAAS,IAAIC,iCAAiC,CAACC,GAAG;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,WAAA,IAAAJ,CAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,oBAAA,EAAA,CAC7DC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAENG,SAAS;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,mBAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,oBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,8BAAA,EAAA,CACVC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAkDG,SAAS;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,6BAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,8BAAA,CAAA,EAAAC,MAAA;AAC3DI,EAAAA,eAAe,GAAoC,EAAE;AACrDC,EAAAA,UAAU,GAAG,UAAU,GAAGC,OAAO,CAAC,IAAI,CAAC;EACvCC,WAAW;EACXC,cAAc;EACdC,eAAe;EACfC,aAAa;AAAkB,EAAA;IAAAjB,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,2BAAA,EAAA,CAEtCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA6BjC,yBAAyB;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,0BAAA,IAAAqC,CAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,sBAAA,EAAA,CAC7DC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAwB,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,qBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,sBAAA,EAAA,CACpCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAwB,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,qBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,yBAAA,EAAA,CACpCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA2B,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,wBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,yBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,0BAAA,EAAA,CACvCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA4B,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,yBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,0BAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,wBAAA,EAAA,CACxCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA0B,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,uBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,wBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,2BAAA,EAAA,CACtCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA6B,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,0BAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,oBAAA,EAAA,CACzCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAsB,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,mBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,oBAAA,CAAA,EAAAC,MAAA;AAEnCW,EAAAA,WAAWA,CAACC,KAAY,EAAEhB,IAAuC,EAAE;AACjE,IAAA,KAAK,CAACgB,KAAK,EAAEhB,IAAI,CAAC;IAElB,MAAM;MAAEiB,KAAK;MAAEC,WAAW;MAAEC,OAAO;AAAE1C,MAAAA;AAAqB,KAAC,GAAGuB,IAAI;AAElE,IAAA,IAAI,CAACW,WAAW,GAAG,IAAIS,0BAA0B,CAAC;MAChDH,KAAK;AACLC,MAAAA;AACF,KAAC,CAAC;AAEF,IAAA,IAAI,IAAI,CAACP,WAAW,CAACU,mBAAmB,EAAE;MACxC,MAAMC,eAAe,GAAGH,OAAO,CAACI,MAAM,CAAEC,MAAM,IAAKA,MAAM,CAACC,UAAU,CAAC;MACrE,MAAMC,oBAAoB,GAAGJ,eAAe,CAACK,GAAG,CAC7CH,MAAM,IAAKA,MAAM,CAACI,KACrB,CAAC;AAEDC,MAAAA,MAAM,CACJ,CAAA,4EAAA,EAA+EH,oBAAoB,CAACI,QAAQ,EAAE,CAAE,CAAA,EAChHR,eAAe,CAAChC,MAAM,KAAK,CAC7B,CAAC;AAEDuC,MAAAA,MAAM,CACJ,6DAA6D,EAC7D,CAACpD,oBACH,CAAC;AACH;AACF;EAEA,IAAIsD,eAAeA,GAAsD;AACvE;AACA,IAAA,MAAMC,aAAa,GAAG,IAAI,CAAChC,IAAI,EAAEmB,OAAO,EAAEc,IAAI,CAC3CT,MAAM,IAAKA,MAAM,CAACU,GAAG,KAAK,IAAI,CAACC,OAClC,CAAC;AAED,IAAA;AACE;IACAH,aAAa,EAAEI,eAAe,IAC9B,OAAOJ,aAAa,CAACI,eAAe,KAAK,UAAU,EACnD;MACA,OAAOJ,aAAa,CAACI,eAAe;AACtC,KAAC,MAAM;AACL;MACA,OAAO,CAAA,EAAG,IAAI,CAACD,OAAO,IAAI,IAAI,CAACE,UAAU,CAAE,CAAA;AAC7C;AACF;EAEA,IAAIC,YAAYA,GAAyB;IACvC,MAAM;AAAEnB,MAAAA;KAAS,GAAG,IAAI,CAACnB,IAAI;AAC7B;IACA,MAAMuC,MAAgB,GAAG,IAAIC,KAAK,CAACrB,OAAO,CAAC7B,MAAM,CAAC;IAClD,IAAImD,oBAAoB,GAAG,KAAK;AAEhC,IAAA,KAAK,IAAItC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgB,OAAO,CAAC7B,MAAM,EAAEa,CAAC,EAAE,EAAE;AACvC,MAAA,MAAMqB,MAAM,GAAGL,OAAO,CAAChB,CAAC,CAAC;AAEzB,MAAA,IAAIqB,MAAM,GAAG,OAAO,CAAC,EAAE;AACrBe,QAAAA,MAAM,CAACpC,CAAC,CAAC,GAAGqB,MAAM,CAACpD,KAAK;AACxB,QAAA,IAAI,CAACqE,oBAAoB,EAAEA,oBAAoB,GAAG,IAAI;AACxD;AACF;AAEA,IAAA,OAAOA,oBAAoB,GAAGF,MAAM,GAAGrC,SAAS;AAClD;EAEA,IAAIwC,WAAWA,GAAuB;AACpC;AACA,IAAA,IAAI,IAAI,CAAC1C,IAAI,CAAC0C,WAAW,KAAK,MAAM,EAAE;AACpC,MAAA,OAAOxC,SAAS;AAClB,KAAC,MAAM;AACL,MAAA,OAAO,IAAI,CAACF,IAAI,CAAC0C,WAAW,IAAI,WAAW;AAC7C;AACF;EAEA,IAAIxB,WAAWA,GAAW;IACxB,MAAM;AAAEA,MAAAA,WAAW,GAAG;KAAY,GAAG,IAAI,CAAClB,IAAI;AAE9C,IAAA,OAAOkB,WAAW;AACpB;EAEA,IAAIyB,kBAAkBA,GAAY;AAChC,IAAA,IAAI,IAAI,CAAC3C,IAAI,CAACvB,oBAAoB,EAAE;AAClC,MAAA,OAAO,IAAI;AACb;AAEA,IAAA,OAAO,KAAK;AACd;EAEA,IAAImE,iBAAiBA,GAAW;AAC9B,IAAA,IAAI,IAAI,CAAC5C,IAAI,CAAC4C,iBAAiB,EAAE;AAC/B,MAAA,OAAO,IAAI,CAAC5C,IAAI,CAAC4C,iBAAiB;KACnC,MAAM,IAAI,IAAI,CAACT,OAAO,IAAI,IAAI,CAACE,UAAU,EAAE;AAC1C;MACA,OAAO,CAAA,UAAA,EAAa,IAAI,CAACF,OAAO,IAAI,IAAI,CAACE,UAAU,CAAQ,MAAA,CAAA;AAC7D,KAAC,MAAM;AACL,MAAA,OAAO,EAAE;AACX;AACF;EAEA,IAAIQ,YAAYA,GAAY;IAC1B,MAAM;AAAEA,MAAAA,YAAY,GAAG;KAAO,GAAG,IAAI,CAAC7C,IAAI;AAE1C,IAAA,IAAI,IAAI,CAACW,WAAW,CAACU,mBAAmB,EAAE;AACxCQ,MAAAA,MAAM,CACJ,0DAA0D,EAC1D,CAACgB,YACH,CAAC;AACD,MAAA,OAAOA,YAAY;AACrB;AAEA,IAAA,OAAOA,YAAY;AACrB;EAEA,IAAIC,SAASA,GAAY;IACvB,MAAM;AAAEA,MAAAA,SAAS,GAAG;KAAO,GAAG,IAAI,CAAC9C,IAAI;AAEvC,IAAA,IAAI,IAAI,CAACW,WAAW,CAACU,mBAAmB,EAAE;AACxCQ,MAAAA,MAAM,CACJ,uDAAuD,EACvD,CAACiB,SACH,CAAC;AACD,MAAA,OAAOA,SAAS;AAClB;AAEA,IAAA,OAAOA,SAAS;AAClB;EAEA,IAAIC,OAAOA,GAA8B;IACvC,MAAM;AAAEA,MAAAA,OAAO,GAAGvF;KAAiB,GAAG,IAAI,CAACwC,IAAI;AAE/C6B,IAAAA,MAAM,CACJ,CAA2DzE,wDAAAA,EAAAA,SAAS,CAAC4F,IAAI,CACvE,IACF,CAAC,CAAA,YAAA,EAAeD,OAAO,CAAA,CAAE,EACzB3F,SAAS,CAAC6F,QAAQ,CAACF,OAAO,CAC5B,CAAC;AAED,IAAA,OAAOA,OAAO;AAChB;EAEA,IAAIvE,eAAeA,GAAY;AAC7B,IAAA,IAAI,IAAI,CAACwB,IAAI,CAACkD,SAAS,IAAI,IAAI,CAAClD,IAAI,CAACxB,eAAe,KAAK,KAAK,EAAE;AAC9D,MAAA,OAAO,IAAI;AACb,KAAC,MAAM,IAAI,IAAI,CAACwB,IAAI,CAACxB,eAAe,IAAI,CAAC,IAAI,CAACwB,IAAI,CAACkD,SAAS,EAAE;AAC5DrB,MAAAA,MAAM,CAAC,8CAA8C,EAAE,KAAK,CAAC;AAC/D;AAEA,IAAA,OAAO,KAAK;AACd;EAEA,IAAIsB,MAAMA,GAAsC;IAC9C,MAAM;AAAEA,MAAAA,MAAM,GAAGvF;KAAgB,GAAG,IAAI,CAACoC,IAAI;AAE7C6B,IAAAA,MAAM,CACJ,CAA0DnE,uDAAAA,EAAAA,WAAW,CAACsF,IAAI,CACxE,IACF,CAAC,CAAA,YAAA,EAAeG,MAAM,CAAA,CAAE,EACxBzF,WAAW,CAACuF,QAAQ,CAACE,MAAM,CAC7B,CAAC;AAED,IAAA,OAAOA,MAAM;AACf;;AAEA;EACA,IAAIC,mBAAmBA,GAAW;IAChC,MAAM;MAAEP,YAAY;AAAE1B,MAAAA;KAAS,GAAG,IAAI,CAACnB,IAAI;IAE3C,MAAMqD,oBAAoB,GAAG,KAAK;;AAElC;AACA,IAAA,IAAIC,KAAK,GAAGT,YAAY,GAAG,cAAc,GAAG,EAAE;AAE9C,IAAA,IAAI,CAAC,IAAI,CAACP,YAAY,EAAE;AACtB;AACAgB,MAAAA,KAAK,IAAI,CAAUnC,OAAAA,EAAAA,OAAO,CAAC7B,MAAM,CAAA,EAAA,EAAK+D,oBAAoB,CAAG,CAAA,CAAA;AAC/D,KAAC,MAAM;AACL;AACA,MAAA,KAAK,IAAIlD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACmC,YAAY,CAAChD,MAAM,EAAEa,CAAC,EAAE,EAAE;AACjDmD,QAAAA,KAAK,IAAI,CAAI,CAAA,EAAA,IAAI,CAAChB,YAAY,CAACnC,CAAC,CAAC,GAAG,IAAI,CAACmC,YAAY,CAACnC,CAAC,CAAC,GAAGkD,oBAAoB,CAAE,CAAA;AACnF;AACF;AAEA,IAAA,OAAOC,KAAK;AACd;EAEA,IAAIC,UAAUA,GAAW;AACvB,IAAA,MAAMC,OAAO,GAAG,CAAC,oBAAoB,CAAC;IAEtC,IAAI,IAAI,CAACV,SAAS,EAAE;AAClBU,MAAAA,OAAO,CAACC,IAAI,CAAC,6BAA6B,CAAC;AAC7C;IAEA,IAAI,IAAI,CAACV,OAAO,EAAE;MAChBS,OAAO,CAACC,IAAI,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAACV,OAAO,EAAE,CAAC;AAC7D;IAEA,IAAI,IAAI,CAACI,MAAM,EAAE;MACfK,OAAO,CAACC,IAAI,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAACN,MAAM,EAAE,CAAC;AAC3D;AAEA,IAAA,IAAI,IAAI,CAACxC,WAAW,CAACU,mBAAmB,EAAE;AACxCmC,MAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,0BAAA,CAA4B,CAAC;AAC5C;AAEA,IAAA,OAAOD,OAAO,CAACR,IAAI,CAAC,GAAG,CAAC;AAC1B;EAEA,IAAIU,eAAeA,GAAW;AAC5B,IAAA,MAAMF,OAAO,GAAG,CAAC,2BAA2B,CAAC;IAE7C,IAAI,IAAI,CAAChF,eAAe,EAAE;AACxBgF,MAAAA,OAAO,CAACC,IAAI,CAAC,mCAAmC,CAAC;AACnD;IAEA,IAAI,IAAI,CAACE,oBAAoB,EAAE;AAC7BH,MAAAA,OAAO,CAACC,IAAI,CAAC,sCAAsC,CAAC;AACtD;AAEA,IAAA,OAAOD,OAAO,CAACR,IAAI,CAAC,GAAG,CAAC;AAC1B;AAEQY,EAAAA,mBAAmB,GAAGC,QAAQ,CAAEC,OAAuB,IAAK;IAClE,IAAI,CAAClD,cAAc,GAAG,MAAM;AAC1B;MACA,MAAMmD,aAAa,GAAG,CAAC;;AAEvB;MACA,IAAID,OAAO,CAACE,UAAU,GAAGD,aAAa,IAAI,CAAC,IAAI,CAACE,uBAAuB,EAAE;AACvE,QAAA,IAAI,IAAI,CAACjE,IAAI,CAACvB,oBAAoB,EAAE;UAClC,IAAI,CAACyF,oBAAoB,GAAG,IAAI;AAClC;QACA,IAAI,CAACD,uBAAuB,GAAG,IAAI;OACpC,MAAM,IAAIH,OAAO,CAACE,UAAU,KAAK,CAAC,IAAI,IAAI,CAACC,uBAAuB,EAAE;QACnE,IAAI,CAACC,oBAAoB,GAAG,KAAK;QACjC,IAAI,CAACD,uBAAuB,GAAG,KAAK;AACtC;;AAEA;MACA,MAAME,SAAS,GACbL,OAAO,CAACM,WAAW,GAAGN,OAAO,CAAC/E,WAAW,GAAGgF,aAAa;;AAE3D;AACA,MAAA,IAAID,OAAO,CAACE,UAAU,GAAGG,SAAS,EAAE;QAClC,IAAI,CAACE,wBAAwB,GAAG,IAAI;AACtC,OAAC,MAAM;QACL,IAAI,CAACA,wBAAwB,GAAG,KAAK;AACvC;;AAEA;AACA,MAAA,IAAIP,OAAO,CAACQ,SAAS,GAAG,CAAC,EAAE;QACzB,IAAI,IAAI,CAAC9F,eAAe,EAAE;UACxB,IAAI,CAACmF,oBAAoB,GAAG,IAAI;AAClC;QACA,IAAI,CAACY,sBAAsB,GAAG,IAAI;AACpC,OAAC,MAAM;QACL,IAAI,IAAI,CAAC/F,eAAe,EAAE;UACxB,IAAI,CAACmF,oBAAoB,GAAG,KAAK;AACnC;QACA,IAAI,CAACY,sBAAsB,GAAG,KAAK;AACrC;;AAEA;MACA,MAAMC,UAAU,GACdV,OAAO,CAACW,YAAY,GAAGX,OAAO,CAAClF,YAAY,GAAGmF,aAAa;;AAE7D;AACA,MAAA,IAAID,OAAO,CAACQ,SAAS,GAAGE,UAAU,EAAE;QAClC,IAAI,CAACE,yBAAyB,GAAG,IAAI;AACvC,OAAC,MAAM;QACL,IAAI,CAACA,yBAAyB,GAAG,KAAK;AACxC;KACD;IAEDZ,OAAO,CAACa,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC/D,cAAc,CAAC;IAEvD,MAAMgE,kBAAkB,GAAGA,MAAM;AAC/B,MAAA,IAAI,CAACC,yBAAyB,GAAGxG,4BAA4B,CAC3DyF,OAAO,EACP,IAAI,CAAChD,aAAa,EAClB,IAAI,CAACtC,eAAe,EACpBC,oBACF,CAAC;AAED,MAAA,IAAIA,oBAAoB,EAAE;QACxB,IAAI,CAACqG,kBAAkB,GAAGvF,yBAAyB,CACjD,IAAI,CAACuB,aAAa,EAClB+B,YACF,CAAC;AACH;KACD;IAED,MAAM;AAAEpE,MAAAA,oBAAoB,GAAG,KAAK;AAAEoE,MAAAA,YAAY,GAAG;KAAO,GAAG,IAAI,CAAC7C,IAAI;AAExE,IAAA,IAAI,CAACa,eAAe,GAAG,IAAIkE,cAAc,CAAEC,OAAO,IAAK;MACrDA,OAAO,CAAC7F,OAAO,CAAC,MAAM;AACpByF,QAAAA,kBAAkB,EAAE;AACtB,OAAC,CAAC;AACJ,KAAC,CAAC;AAEF,IAAA,IAAI,CAAC/D,eAAe,CAACoE,OAAO,CAACnB,OAAO,CAAC;AAErCc,IAAAA,kBAAkB,EAAE;;AAEpB;AACA,IAAA,IAAId,OAAO,CAAC/E,WAAW,GAAG+E,OAAO,CAACM,WAAW,EAAE;MAC7C,IAAI,CAACC,wBAAwB,GAAG,IAAI;AACtC;;AAEA;AACA,IAAA,IAAIP,OAAO,CAAClF,YAAY,GAAGkF,OAAO,CAACW,YAAY,EAAE;MAC/C,IAAI,CAACC,yBAAyB,GAAG,IAAI;AACvC;AAEA,IAAA,OAAO,MAAM;MACXZ,OAAO,CAACoB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACtE,cAAc,CAAC;AAC1D,MAAA,IAAI,CAACC,eAAe,CAACsE,UAAU,EAAE;KAClC;AACH,GAAC,CAAC;AAEMC,EAAAA,WAAW,GAAGvB,QAAQ,CAAEC,OAAuB,IAAK;IAC1D,IAAI,CAAChD,aAAa,GAAGgD,OAAO;AAC9B,GAAC,CAAC;EAGFuB,SAASA,CAAC7D,MAAc,EAAQ;AAC9B,IAAA,IAAI,IAAI,CAACW,OAAO,KAAKX,MAAM,EAAE;AAC3B;AACA,MAAA,IAAI,CAACa,UAAU,GACb,IAAI,CAACA,UAAU,KAAK/B,iCAAiC,CAACC,GAAG,GACrDD,iCAAiC,CAACgF,IAAI,GACtChF,iCAAiC,CAACC,GAAG;AAC7C,KAAC,MAAM;AACL;MACA,IAAI,CAAC4B,OAAO,GAAGX,MAAM;AACrB,MAAA,IAAI,CAACa,UAAU,GAAG/B,iCAAiC,CAACC,GAAG;AACzD;IAEA,MAAM;AAAEgF,MAAAA;KAAQ,GAAG,IAAI,CAACvF,IAAI;AAE5B,IAAA,IAAI,OAAOuF,MAAM,KAAK,UAAU,EAAE;MAChCA,MAAM,CAAC,IAAI,CAACpD,OAAO,EAAE,IAAI,CAACE,UAAU,CAAC;AACvC;AACF;AAAC,EAAA;IAAAmD,CAAA,CAAA,IAAA,CAAA1F,SAAA,EAAA,WAAA,EAAA,CAnBA2F,MAAM,CAAA,CAAA;AAAA;AAqBPC,EAAAA,yBAAyBA,CACvBC,QAAkD,EAClDC,YAAqB,EACf;IACN,MAAM;AAAEC,MAAAA;KAAmB,GAAG,IAAI,CAAC7F,IAAI;AAEvC,IAAA,IAAI,OAAO6F,iBAAiB,KAAK,UAAU,EAAE;AAE7CA,IAAAA,iBAAiB,CAAC;AAChBD,MAAAA,YAAY,EAAEA,YAAY;AAC1BE,MAAAA,wBAAwB,EAAEH,QAAQ;MAClCI,gBAAgB,EAAE,IAAI,CAACvF,eAAe,CAACwF,MAAM,CAAW,CAACC,GAAG,EAAEC,GAAG,KAAK;AACpE,QAAA,IAAIA,GAAG,CAACP,QAAQ,CAACQ,OAAO,EAAE;AACxBF,UAAAA,GAAG,CAACxC,IAAI,CAACyC,GAAG,CAACN,YAAY,CAAC;AAC5B;AACA,QAAA,OAAOK,GAAG;OACX,EAAE,EAAE,CAAC;MACNG,oBAAoB,EAAE,IAAI,CAAC5F,eAAe,CAACwF,MAAM,CAC/C,CACEC,GAAgE,EAChEC,GAAG,KACA;QACHD,GAAG,CAACxC,IAAI,CAAC;UACPmC,YAAY,EAAEM,GAAG,CAACN,YAAY;AAC9BS,UAAAA,UAAU,EAAEH,GAAG,CAACP,QAAQ,CAACQ;AAC3B,SAAC,CAAC;AACF,QAAA,OAAOF,GAAG;AACZ,OAAC,EACD,EACF;AACF,KAAC,CAAC;AACJ;AAGAK,EAAAA,oBAAoBA,GAAS;AAC3B,IAAA,IAAI,CAAC9F,eAAe,CAACrB,OAAO,CAAE+G,GAAG,IAAK;MACpCA,GAAG,CAACP,QAAQ,CAACQ,OAAO,GAAG,IAAI,CAACI,kBAAkB,EAAEJ,OAAO,IAAI,KAAK;AAClE,KAAC,CAAC;IACF,IAAI,CAACK,4BAA4B,GAC/B,IAAI,CAACD,kBAAkB,EAAEJ,OAAO,IAAI,KAAK;IAC3C,IAAI,CAACT,yBAAyB,CAAC,IAAI,CAACa,kBAAkB,EAAE,KAAK,CAAC;AAChE;AAAC,EAAA;IAAAf,CAAA,CAAA,IAAA,CAAA1F,SAAA,EAAA,sBAAA,EAAA,CARA2F,MAAM,CAAA,CAAA;AAAA;AAWPgB,EAAAA,oBAAoBA,CAClBd,QAAkD,EAClDC,YAAqB,EACf;IACN,IAAI,CAACc,iBAAiB,EAAE;AACxB,IAAA,IAAI,CAAChB,yBAAyB,CAACC,QAAQ,EAAEC,YAAY,CAAC;AACxD;AAAC,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAA1F,SAAA,EAAA,sBAAA,EAAA,CAPA2F,MAAM,CAAA,CAAA;AAAA;EAUPkB,0BAA0BA,CACxBhB,QAAiD,EAC3C;IACN,IAAI,CAACY,kBAAkB,GAAGZ,QAAQ;AACpC;AAAC,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAA1F,SAAA,EAAA,4BAAA,EAAA,CALA2F,MAAM,CAAA,CAAA;AAAA;AAQPmB,EAAAA,4BAA4BA,GAAS;IACnC,IAAI,CAACL,kBAAkB,GAAGrG,SAAS;AACrC;AAAC,EAAA;IAAAsF,CAAA,CAAA,IAAA,CAAA1F,SAAA,EAAA,8BAAA,EAAA,CAHA2F,MAAM,CAAA,CAAA;AAAA;AAMPoB,EAAAA,oBAAoBA,CAClBlB,QAAiD,EACjDC,YAAqB,EACf;AACN,IAAA,IAAIA,YAAY,EAAE;AAChB,MAAA,IAAI,CAACpF,eAAe,CAACiD,IAAI,CAAC;QAAEmC,YAAY;AAAED,QAAAA;AAAS,OAAC,CAAC;AACvD;IACA,IAAI,CAACe,iBAAiB,EAAE;AAC1B;AAAC,EAAA;IAAAlB,CAAA,CAAA,IAAA,CAAA1F,SAAA,EAAA,sBAAA,EAAA,CATA2F,MAAM,CAAA,CAAA;AAAA;EAYPqB,sBAAsBA,CAAClB,YAAqB,EAAQ;AAClD,IAAA,IAAI,CAACpF,eAAe,GAAG,IAAI,CAACA,eAAe,CAACe,MAAM,CAC/C2E,GAAG,IAAKA,GAAG,CAACN,YAAY,KAAKA,YAChC,CAAC;IACD,IAAI,CAACc,iBAAiB,EAAE;AAC1B;AAAC,EAAA;IAAAlB,CAAA,CAAA,IAAA,CAAA1F,SAAA,EAAA,wBAAA,EAAA,CANA2F,MAAM,CAAA,CAAA;AAAA;AASPiB,EAAAA,iBAAiBA,GAAS;IACxB,IAAI,IAAI,CAACH,kBAAkB,EAAE;AAC3B,MAAA,MAAMQ,mBAAmB,GAAG,IAAI,CAACvG,eAAe,CAAClB,MAAM;AACvD,MAAA,MAAM0H,iBAAiB,GAAG,IAAI,CAACxG,eAAe,CAACe,MAAM,CAClD2E,GAAG,IAAKA,GAAG,CAACP,QAAQ,CAACQ,OACxB,CAAC,CAAC7G,MAAM;AAER,MAAA,IAAI,CAACiH,kBAAkB,CAACJ,OAAO,GAC7Ba,iBAAiB,KAAKD,mBAAmB;MAC3C,IAAI,CAACR,kBAAkB,CAACU,aAAa,GACnCD,iBAAiB,GAAG,CAAC,IAAIA,iBAAiB,GAAGD,mBAAmB;AAClE,MAAA,IAAI,CAACP,4BAA4B,GAAG,IAAI,CAACD,kBAAkB,CAACJ,OAAO;AACrE;AACF;AAAC,EAAA;IAAAX,CAAA,CAAA,IAAA,CAAA1F,SAAA,EAAA,mBAAA,EAAA,CAdA2F,MAAM,CAAA,CAAA;AAAA;AAeT;AAACyB,oBAAA,CAAAC,QAAA,EAjdoBxH,gBAAgB,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/advanced-table/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { tracked } from '@glimmer/tracking';\nimport type { ComponentLike } from '@glint/template';\nimport { guidFor } from '@ember/object/internals';\nimport { modifier } from 'ember-modifier';\nimport type Owner from '@ember/owner';\n\nimport HdsAdvancedTableTableModel from './models/table.ts';\n\nimport {\n HdsAdvancedTableDensityValues,\n HdsAdvancedTableThSortOrderValues,\n HdsAdvancedTableVerticalAlignmentValues,\n} from './types.ts';\nimport type {\n HdsAdvancedTableColumn,\n HdsAdvancedTableDensities,\n HdsAdvancedTableHorizontalAlignment,\n HdsAdvancedTableOnSelectionChangeSignature,\n HdsAdvancedTableSelectableRow,\n HdsAdvancedTableSortingFunction,\n HdsAdvancedTableThSortOrder,\n HdsAdvancedTableVerticalAlignment,\n HdsAdvancedTableModel,\n HdsAdvancedTableExpandState,\n} from './types.ts';\nimport type { HdsFormCheckboxBaseSignature } from '../form/checkbox/base.ts';\nimport type { HdsAdvancedTableTdSignature } from './td.ts';\nimport type { HdsAdvancedTableThSignature } from './th.ts';\nimport type { HdsAdvancedTableTrSignature } from './tr.ts';\n\nexport const DENSITIES: HdsAdvancedTableDensities[] = Object.values(\n HdsAdvancedTableDensityValues\n);\nexport const DEFAULT_DENSITY = HdsAdvancedTableDensityValues.Medium;\n\nexport const VALIGNMENTS: HdsAdvancedTableVerticalAlignment[] = Object.values(\n HdsAdvancedTableVerticalAlignmentValues\n);\nexport const DEFAULT_VALIGN = HdsAdvancedTableVerticalAlignmentValues.Top;\n\nconst DEFAULT_SCROLL_DIMENSIONS = {\n bottom: '0px',\n height: '0px',\n left: '0px',\n right: '0px',\n top: '0px',\n width: '0px',\n};\n\nconst getScrollIndicatorDimensions = (\n scrollWrapper: HTMLDivElement,\n theadElement: HTMLDivElement,\n hasStickyHeader: boolean,\n hasStickyFirstColumn: boolean\n) => {\n const horizontalScrollBarHeight =\n scrollWrapper.offsetHeight - scrollWrapper.clientHeight;\n const verticalScrollBarWidth =\n scrollWrapper.offsetWidth - scrollWrapper.clientWidth;\n\n let leftOffset = 0;\n\n if (hasStickyFirstColumn) {\n const stickyColumnHeaders = theadElement.querySelectorAll(\n '.hds-advanced-table__th--is-sticky-column'\n );\n\n stickyColumnHeaders?.forEach((el) => {\n // querySelectorAll returns Elements, which don't have offsetWidth\n // need to use offsetWidth to account for the cell borders\n const elAsHTMLElement = el as HTMLElement;\n leftOffset += elAsHTMLElement.offsetWidth;\n });\n\n // offsets the left: -1px position if there are multiple sticky columns\n if (stickyColumnHeaders.length > 1) {\n leftOffset -= 1;\n }\n }\n\n return {\n bottom: `${horizontalScrollBarHeight}px`,\n height: `${scrollWrapper.offsetHeight - horizontalScrollBarHeight}px`,\n left: `${leftOffset}px`,\n right: `${verticalScrollBarWidth}px`,\n top: hasStickyHeader ? `${theadElement.offsetHeight}px` : '0px',\n width: `${scrollWrapper.offsetWidth - verticalScrollBarWidth}px`,\n };\n};\n\nconst getStickyColumnLeftOffset = (\n theadElement: HTMLDivElement,\n hasRowSelection: boolean\n) => {\n // if there is no select checkbox column, the sticky column is all the way to the left\n if (!hasRowSelection) return '0px';\n\n const selectableCell = theadElement.querySelector(\n '.hds-advanced-table__th--is-selectable'\n ) as HTMLElement;\n\n return `${selectableCell?.offsetWidth}px`;\n};\n\nexport interface HdsAdvancedTableSignature {\n Args: {\n align?: HdsAdvancedTableHorizontalAlignment;\n caption?: string;\n columns: HdsAdvancedTableColumn[];\n density?: HdsAdvancedTableDensities;\n identityKey?: string;\n isSelectable?: boolean;\n isStriped?: boolean;\n model: HdsAdvancedTableModel;\n onSelectionChange?: (\n selection: HdsAdvancedTableOnSelectionChangeSignature\n ) => void;\n onSort?: (sortBy: string, sortOrder: HdsAdvancedTableThSortOrder) => void;\n selectionAriaLabelSuffix?: string;\n sortBy?: string;\n selectableColumnKey?: string;\n sortedMessageText?: string;\n sortOrder?: HdsAdvancedTableThSortOrder;\n valign?: HdsAdvancedTableVerticalAlignment;\n hasStickyHeader?: boolean;\n hasStickyFirstColumn?: boolean;\n childrenKey?: string;\n maxHeight?: string;\n };\n Blocks: {\n body?: [\n {\n Td?: ComponentLike<HdsAdvancedTableTdSignature>;\n Tr?: ComponentLike<HdsAdvancedTableTrSignature>;\n Th?: ComponentLike<HdsAdvancedTableThSignature>;\n data?: Record<string, unknown>;\n rowIndex?: number | string;\n isOpen?: HdsAdvancedTableExpandState;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsAdvancedTable extends Component<HdsAdvancedTableSignature> {\n @tracked private _sortBy = this.args.sortBy ?? undefined;\n @tracked private _sortOrder =\n this.args.sortOrder || HdsAdvancedTableThSortOrderValues.Asc;\n @tracked\n private _selectAllCheckbox?: HdsFormCheckboxBaseSignature['Element'] =\n undefined;\n @tracked private _isSelectAllCheckboxSelected?: boolean = undefined;\n\n private _selectableRows: HdsAdvancedTableSelectableRow[] = [];\n private _captionId = 'caption-' + guidFor(this);\n private _tableModel!: HdsAdvancedTableTableModel;\n private _scrollHandler!: (event: Event) => void;\n private _resizeObserver!: ResizeObserver;\n private _theadElement!: HTMLDivElement;\n\n @tracked scrollIndicatorDimensions = DEFAULT_SCROLL_DIMENSIONS;\n @tracked isStickyColumnPinned = false;\n @tracked isStickyHeaderPinned = false;\n @tracked showScrollIndicatorLeft = false;\n @tracked showScrollIndicatorRight = false;\n @tracked showScrollIndicatorTop = false;\n @tracked showScrollIndicatorBottom = false;\n @tracked stickyColumnOffset = '0px';\n\n constructor(owner: Owner, args: HdsAdvancedTableSignature['Args']) {\n super(owner, args);\n\n const { model, childrenKey, columns, hasStickyFirstColumn } = args;\n\n this._tableModel = new HdsAdvancedTableTableModel({\n model,\n childrenKey,\n });\n\n if (this._tableModel.hasRowsWithChildren) {\n const sortableColumns = columns.filter((column) => column.isSortable);\n const sortableColumnLabels = sortableColumns.map(\n (column) => column.label\n );\n\n assert(\n `Cannot have sortable columns if there are nested rows. Sortable columns are ${sortableColumnLabels.toString()}`,\n sortableColumns.length === 0\n );\n\n assert(\n 'Cannot have a sticky first column if there are nested rows.',\n !hasStickyFirstColumn\n );\n }\n }\n\n get getSortCriteria(): string | HdsAdvancedTableSortingFunction<unknown> {\n // get the current column\n const currentColumn = this.args?.columns?.find(\n (column) => column.key === this._sortBy\n );\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 columnWidths(): string[] | undefined {\n const { columns } = this.args;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const widths: string[] = new Array(columns.length);\n let hasCustomColumnWidth = false;\n\n for (let i = 0; i < columns.length; i++) {\n const column = columns[i];\n\n if (column?.['width']) {\n widths[i] = column.width;\n if (!hasCustomColumnWidth) hasCustomColumnWidth = true;\n }\n }\n\n return hasCustomColumnWidth ? widths : undefined;\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 childrenKey(): string {\n const { childrenKey = 'children' } = this.args;\n\n return childrenKey;\n }\n\n get hasScrollIndicator(): boolean {\n if (this.args.hasStickyFirstColumn) {\n return true;\n }\n\n return false;\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 return `Sorted by ${this._sortBy} ${this._sortOrder}ending`;\n } else {\n return '';\n }\n }\n\n get isSelectable(): boolean {\n const { isSelectable = false } = this.args;\n\n if (this._tableModel.hasRowsWithChildren) {\n assert(\n '@isSelectable must not be true if there are nested rows.',\n !isSelectable\n );\n return isSelectable;\n }\n\n return isSelectable;\n }\n\n get isStriped(): boolean {\n const { isStriped = false } = this.args;\n\n if (this._tableModel.hasRowsWithChildren) {\n assert(\n '@isStriped must not be true if there are nested rows.',\n !isStriped\n );\n return isStriped;\n }\n\n return isStriped;\n }\n\n get density(): HdsAdvancedTableDensities {\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 hasStickyHeader(): boolean {\n if (this.args.maxHeight && this.args.hasStickyHeader !== false) {\n return true;\n } else if (this.args.hasStickyHeader && !this.args.maxHeight) {\n assert('Must set @maxHeight to use @hasStickyHeader.', false);\n }\n\n return false;\n }\n\n get valign(): HdsAdvancedTableVerticalAlignment {\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 // returns the grid-template-columns CSS attribute for the grid\n get gridTemplateColumns(): string {\n const { isSelectable, columns } = this.args;\n\n const DEFAULT_COLUMN_WIDTH = '1fr';\n\n // if there is a select checkbox, the first column has a 'min-content' width to hug the checkbox content\n let style = isSelectable ? 'min-content ' : '';\n\n if (!this.columnWidths) {\n // if there are no custom column widths, each column is the same width and they take up the available space\n style += `repeat(${columns.length}, ${DEFAULT_COLUMN_WIDTH})`;\n } else {\n // check the custom column widths, if the current column has a custom width use the custom width. otherwise take the available space.\n for (let i = 0; i < this.columnWidths.length; i++) {\n style += ` ${this.columnWidths[i] ? this.columnWidths[i] : DEFAULT_COLUMN_WIDTH}`;\n }\n }\n\n return style;\n }\n\n get classNames(): string {\n const classes = ['hds-advanced-table'];\n\n if (this.isStriped) {\n classes.push('hds-advanced-table--striped');\n }\n\n if (this.density) {\n classes.push(`hds-advanced-table--density-${this.density}`);\n }\n\n if (this.valign) {\n classes.push(`hds-advanced-table--valign-${this.valign}`);\n }\n\n if (this._tableModel.hasRowsWithChildren) {\n classes.push(`hds-advanced-table--nested`);\n }\n\n return classes.join(' ');\n }\n\n get theadClassNames(): string {\n const classes = ['hds-advanced-table__thead'];\n\n if (this.hasStickyHeader) {\n classes.push('hds-advanced-table__thead--sticky');\n }\n\n if (this.isStickyHeaderPinned) {\n classes.push('hds-advanced-table__thead--is-pinned');\n }\n\n return classes.join(' ');\n }\n\n private _didUpdateModel = modifier(() => {\n this._tableModel.updateModel(this.args.model);\n });\n\n private _setUpScrollWrapper = modifier((element: HTMLDivElement) => {\n this._scrollHandler = () => {\n // 6px as a buffer so the shadow doesn't appear over the border radius on the edge of the table\n const SCROLL_BUFFER = 6;\n\n // left scroll indicator and sticky column styles\n if (element.scrollLeft > SCROLL_BUFFER && !this.showScrollIndicatorLeft) {\n if (this.args.hasStickyFirstColumn) {\n this.isStickyColumnPinned = true;\n }\n this.showScrollIndicatorLeft = true;\n } else if (element.scrollLeft === 0 && this.showScrollIndicatorLeft) {\n this.isStickyColumnPinned = false;\n this.showScrollIndicatorLeft = false;\n }\n\n // the right edge is how far the user can scroll, which is the full width of the table - the visible section of the table (also subtract the buffer)\n const rightEdge =\n element.scrollWidth - element.clientWidth - SCROLL_BUFFER;\n\n // right scroll indicator\n if (element.scrollLeft < rightEdge) {\n this.showScrollIndicatorRight = true;\n } else {\n this.showScrollIndicatorRight = false;\n }\n\n // sticky header\n if (element.scrollTop > 0) {\n if (this.hasStickyHeader) {\n this.isStickyHeaderPinned = true;\n }\n this.showScrollIndicatorTop = true;\n } else {\n if (this.hasStickyHeader) {\n this.isStickyHeaderPinned = false;\n }\n this.showScrollIndicatorTop = false;\n }\n\n // the bottom edge is how far the user can scroll, which is the full height of the table - the visible section of the table (also subtract the buffer)\n const bottomEdge =\n element.scrollHeight - element.clientHeight - SCROLL_BUFFER;\n\n // bottom scroll indicator\n if (element.scrollTop < bottomEdge) {\n this.showScrollIndicatorBottom = true;\n } else {\n this.showScrollIndicatorBottom = false;\n }\n };\n\n element.addEventListener('scroll', this._scrollHandler);\n\n const updateMeasurements = () => {\n this.scrollIndicatorDimensions = getScrollIndicatorDimensions(\n element,\n this._theadElement,\n this.hasStickyHeader,\n hasStickyFirstColumn\n );\n\n if (hasStickyFirstColumn) {\n this.stickyColumnOffset = getStickyColumnLeftOffset(\n this._theadElement,\n isSelectable\n );\n }\n };\n\n const { hasStickyFirstColumn = false, isSelectable = false } = this.args;\n\n this._resizeObserver = new ResizeObserver((entries) => {\n entries.forEach(() => {\n updateMeasurements();\n });\n });\n\n this._resizeObserver.observe(element);\n\n updateMeasurements();\n\n // on render check if should show right scroll indicator\n if (element.clientWidth < element.scrollWidth) {\n this.showScrollIndicatorRight = true;\n }\n\n // on render check if should show bottom scroll indicator\n if (element.clientHeight < element.scrollHeight) {\n this.showScrollIndicatorBottom = true;\n }\n\n return () => {\n element.removeEventListener('scroll', this._scrollHandler);\n this._resizeObserver.disconnect();\n };\n });\n\n private _setUpThead = modifier((element: HTMLDivElement) => {\n this._theadElement = element;\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 === HdsAdvancedTableThSortOrderValues.Asc\n ? HdsAdvancedTableThSortOrderValues.Desc\n : HdsAdvancedTableThSortOrderValues.Asc;\n } else {\n // otherwise, set the sort order to ascending\n this._sortBy = column;\n this._sortOrder = HdsAdvancedTableThSortOrderValues.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\n if (typeof onSelectionChange !== 'function') return;\n\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 @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","HdsAdvancedTableDensityValues","DEFAULT_DENSITY","Medium","VALIGNMENTS","HdsAdvancedTableVerticalAlignmentValues","DEFAULT_VALIGN","Top","DEFAULT_SCROLL_DIMENSIONS","bottom","height","left","right","top","width","getScrollIndicatorDimensions","scrollWrapper","theadElement","hasStickyHeader","hasStickyFirstColumn","horizontalScrollBarHeight","offsetHeight","clientHeight","verticalScrollBarWidth","offsetWidth","clientWidth","leftOffset","stickyColumnHeaders","querySelectorAll","forEach","el","elAsHTMLElement","length","getStickyColumnLeftOffset","hasRowSelection","selectableCell","querySelector","HdsAdvancedTable","Component","g","prototype","tracked","args","sortBy","undefined","i","void 0","sortOrder","HdsAdvancedTableThSortOrderValues","Asc","_selectableRows","_captionId","guidFor","_tableModel","_scrollHandler","_resizeObserver","_theadElement","constructor","owner","model","childrenKey","columns","HdsAdvancedTableTableModel","hasRowsWithChildren","sortableColumns","filter","column","isSortable","sortableColumnLabels","map","label","assert","toString","getSortCriteria","currentColumn","find","key","_sortBy","sortingFunction","_sortOrder","columnWidths","widths","Array","hasCustomColumnWidth","identityKey","hasScrollIndicator","sortedMessageText","isSelectable","isStriped","density","join","includes","maxHeight","valign","gridTemplateColumns","DEFAULT_COLUMN_WIDTH","style","classNames","classes","push","theadClassNames","isStickyHeaderPinned","_didUpdateModel","modifier","updateModel","_setUpScrollWrapper","element","SCROLL_BUFFER","scrollLeft","showScrollIndicatorLeft","isStickyColumnPinned","rightEdge","scrollWidth","showScrollIndicatorRight","scrollTop","showScrollIndicatorTop","bottomEdge","scrollHeight","showScrollIndicatorBottom","addEventListener","updateMeasurements","scrollIndicatorDimensions","stickyColumnOffset","ResizeObserver","entries","observe","removeEventListener","disconnect","_setUpThead","setSortBy","Desc","onSort","n","action","onSelectionChangeCallback","checkbox","selectionKey","onSelectionChange","selectionCheckboxElement","selectedRowsKeys","reduce","acc","row","checked","selectableRowsStates","isSelected","onSelectionAllChange","_selectAllCheckbox","_isSelectAllCheckboxSelected","onSelectionRowChange","setSelectAllState","didInsertSelectAllCheckbox","willDestroySelectAllCheckbox","didInsertRowCheckbox","willDestroyRowCheckbox","selectableRowsCount","selectedRowsCount","indeterminate","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAmCO,MAAMA,SAAsC,GAAGC,MAAM,CAACC,MAAM,CACjEC,6BACF;AACaC,MAAAA,eAAe,GAAGD,6BAA6B,CAACE;AAEtD,MAAMC,WAAgD,GAAGL,MAAM,CAACC,MAAM,CAC3EK,uCACF;AACaC,MAAAA,cAAc,GAAGD,uCAAuC,CAACE;AAEtE,MAAMC,yBAAyB,GAAG;AAChCC,EAAAA,MAAM,EAAE,KAAK;AACbC,EAAAA,MAAM,EAAE,KAAK;AACbC,EAAAA,IAAI,EAAE,KAAK;AACXC,EAAAA,KAAK,EAAE,KAAK;AACZC,EAAAA,GAAG,EAAE,KAAK;AACVC,EAAAA,KAAK,EAAE;AACT,CAAC;AAED,MAAMC,4BAA4B,GAAGA,CACnCC,aAA6B,EAC7BC,YAA4B,EAC5BC,eAAwB,EACxBC,oBAA6B,KAC1B;EACH,MAAMC,yBAAyB,GAC7BJ,aAAa,CAACK,YAAY,GAAGL,aAAa,CAACM,YAAY;EACzD,MAAMC,sBAAsB,GAC1BP,aAAa,CAACQ,WAAW,GAAGR,aAAa,CAACS,WAAW;EAEvD,IAAIC,UAAU,GAAG,CAAC;AAElB,EAAA,IAAIP,oBAAoB,EAAE;AACxB,IAAA,MAAMQ,mBAAmB,GAAGV,YAAY,CAACW,gBAAgB,CACvD,2CACF,CAAC;AAEDD,IAAAA,mBAAmB,EAAEE,OAAO,CAAEC,EAAE,IAAK;AACnC;AACA;MACA,MAAMC,eAAe,GAAGD,EAAiB;MACzCJ,UAAU,IAAIK,eAAe,CAACP,WAAW;AAC3C,KAAC,CAAC;;AAEF;AACA,IAAA,IAAIG,mBAAmB,CAACK,MAAM,GAAG,CAAC,EAAE;AAClCN,MAAAA,UAAU,IAAI,CAAC;AACjB;AACF;EAEA,OAAO;IACLjB,MAAM,EAAE,CAAGW,EAAAA,yBAAyB,CAAI,EAAA,CAAA;AACxCV,IAAAA,MAAM,EAAE,CAAGM,EAAAA,aAAa,CAACK,YAAY,GAAGD,yBAAyB,CAAI,EAAA,CAAA;IACrET,IAAI,EAAE,CAAGe,EAAAA,UAAU,CAAI,EAAA,CAAA;IACvBd,KAAK,EAAE,CAAGW,EAAAA,sBAAsB,CAAI,EAAA,CAAA;IACpCV,GAAG,EAAEK,eAAe,GAAG,CAAA,EAAGD,YAAY,CAACI,YAAY,CAAI,EAAA,CAAA,GAAG,KAAK;AAC/DP,IAAAA,KAAK,EAAE,CAAGE,EAAAA,aAAa,CAACQ,WAAW,GAAGD,sBAAsB,CAAA,EAAA;GAC7D;AACH,CAAC;AAED,MAAMU,yBAAyB,GAAGA,CAChChB,YAA4B,EAC5BiB,eAAwB,KACrB;AACH;AACA,EAAA,IAAI,CAACA,eAAe,EAAE,OAAO,KAAK;AAElC,EAAA,MAAMC,cAAc,GAAGlB,YAAY,CAACmB,aAAa,CAC/C,wCACF,CAAgB;AAEhB,EAAA,OAAO,CAAGD,EAAAA,cAAc,EAAEX,WAAW,CAAI,EAAA,CAAA;AAC3C,CAAC;AA0Cc,MAAMa,gBAAgB,SAASC,SAAS,CAA4B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAChFC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAmB,IAAI,CAACC,IAAI,CAACC,MAAM,IAAIC,SAAS;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,YAAA,EAAA,CACvDC,OAAO,CAAA,EAAA,YAAA;MAAA,OACN,IAAI,CAACC,IAAI,CAACK,SAAS,IAAIC,iCAAiC,CAACC,GAAG;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,WAAA,IAAAJ,CAAA,CAAA,IAAA,EAAA,YAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,oBAAA,EAAA,CAC7DC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAENG,SAAS;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,mBAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,oBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,8BAAA,EAAA,CACVC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAkDG,SAAS;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,6BAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,8BAAA,CAAA,EAAAC,MAAA;AAE3DI,EAAAA,eAAe,GAAoC,EAAE;AACrDC,EAAAA,UAAU,GAAG,UAAU,GAAGC,OAAO,CAAC,IAAI,CAAC;EACvCC,WAAW;EACXC,cAAc;EACdC,eAAe;EACfC,aAAa;AAAkB,EAAA;IAAAjB,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,2BAAA,EAAA,CAEtCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA6BjC,yBAAyB;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,0BAAA,IAAAqC,CAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,sBAAA,EAAA,CAC7DC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAwB,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,qBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,sBAAA,EAAA,CACpCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAwB,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,qBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,sBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,yBAAA,EAAA,CACpCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA2B,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,wBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,yBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,0BAAA,EAAA,CACvCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA4B,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,yBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,0BAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,wBAAA,EAAA,CACxCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA0B,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,uBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,wBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,2BAAA,EAAA,CACtCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA6B,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,0BAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,2BAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAP,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,oBAAA,EAAA,CACzCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAsB,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,mBAAA,IAAAI,CAAA,CAAA,IAAA,EAAA,oBAAA,CAAA,EAAAC,MAAA;AAEnCW,EAAAA,WAAWA,CAACC,KAAY,EAAEhB,IAAuC,EAAE;AACjE,IAAA,KAAK,CAACgB,KAAK,EAAEhB,IAAI,CAAC;IAElB,MAAM;MAAEiB,KAAK;MAAEC,WAAW;MAAEC,OAAO;AAAE1C,MAAAA;AAAqB,KAAC,GAAGuB,IAAI;AAElE,IAAA,IAAI,CAACW,WAAW,GAAG,IAAIS,0BAA0B,CAAC;MAChDH,KAAK;AACLC,MAAAA;AACF,KAAC,CAAC;AAEF,IAAA,IAAI,IAAI,CAACP,WAAW,CAACU,mBAAmB,EAAE;MACxC,MAAMC,eAAe,GAAGH,OAAO,CAACI,MAAM,CAAEC,MAAM,IAAKA,MAAM,CAACC,UAAU,CAAC;MACrE,MAAMC,oBAAoB,GAAGJ,eAAe,CAACK,GAAG,CAC7CH,MAAM,IAAKA,MAAM,CAACI,KACrB,CAAC;AAEDC,MAAAA,MAAM,CACJ,CAAA,4EAAA,EAA+EH,oBAAoB,CAACI,QAAQ,EAAE,CAAE,CAAA,EAChHR,eAAe,CAAChC,MAAM,KAAK,CAC7B,CAAC;AAEDuC,MAAAA,MAAM,CACJ,6DAA6D,EAC7D,CAACpD,oBACH,CAAC;AACH;AACF;EAEA,IAAIsD,eAAeA,GAAsD;AACvE;AACA,IAAA,MAAMC,aAAa,GAAG,IAAI,CAAChC,IAAI,EAAEmB,OAAO,EAAEc,IAAI,CAC3CT,MAAM,IAAKA,MAAM,CAACU,GAAG,KAAK,IAAI,CAACC,OAClC,CAAC;AAED,IAAA;AACE;IACAH,aAAa,EAAEI,eAAe,IAC9B,OAAOJ,aAAa,CAACI,eAAe,KAAK,UAAU,EACnD;MACA,OAAOJ,aAAa,CAACI,eAAe;AACtC,KAAC,MAAM;AACL;MACA,OAAO,CAAA,EAAG,IAAI,CAACD,OAAO,IAAI,IAAI,CAACE,UAAU,CAAE,CAAA;AAC7C;AACF;EAEA,IAAIC,YAAYA,GAAyB;IACvC,MAAM;AAAEnB,MAAAA;KAAS,GAAG,IAAI,CAACnB,IAAI;AAC7B;IACA,MAAMuC,MAAgB,GAAG,IAAIC,KAAK,CAACrB,OAAO,CAAC7B,MAAM,CAAC;IAClD,IAAImD,oBAAoB,GAAG,KAAK;AAEhC,IAAA,KAAK,IAAItC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgB,OAAO,CAAC7B,MAAM,EAAEa,CAAC,EAAE,EAAE;AACvC,MAAA,MAAMqB,MAAM,GAAGL,OAAO,CAAChB,CAAC,CAAC;AAEzB,MAAA,IAAIqB,MAAM,GAAG,OAAO,CAAC,EAAE;AACrBe,QAAAA,MAAM,CAACpC,CAAC,CAAC,GAAGqB,MAAM,CAACpD,KAAK;AACxB,QAAA,IAAI,CAACqE,oBAAoB,EAAEA,oBAAoB,GAAG,IAAI;AACxD;AACF;AAEA,IAAA,OAAOA,oBAAoB,GAAGF,MAAM,GAAGrC,SAAS;AAClD;EAEA,IAAIwC,WAAWA,GAAuB;AACpC;AACA,IAAA,IAAI,IAAI,CAAC1C,IAAI,CAAC0C,WAAW,KAAK,MAAM,EAAE;AACpC,MAAA,OAAOxC,SAAS;AAClB,KAAC,MAAM;AACL,MAAA,OAAO,IAAI,CAACF,IAAI,CAAC0C,WAAW,IAAI,WAAW;AAC7C;AACF;EAEA,IAAIxB,WAAWA,GAAW;IACxB,MAAM;AAAEA,MAAAA,WAAW,GAAG;KAAY,GAAG,IAAI,CAAClB,IAAI;AAE9C,IAAA,OAAOkB,WAAW;AACpB;EAEA,IAAIyB,kBAAkBA,GAAY;AAChC,IAAA,IAAI,IAAI,CAAC3C,IAAI,CAACvB,oBAAoB,EAAE;AAClC,MAAA,OAAO,IAAI;AACb;AAEA,IAAA,OAAO,KAAK;AACd;EAEA,IAAImE,iBAAiBA,GAAW;AAC9B,IAAA,IAAI,IAAI,CAAC5C,IAAI,CAAC4C,iBAAiB,EAAE;AAC/B,MAAA,OAAO,IAAI,CAAC5C,IAAI,CAAC4C,iBAAiB;KACnC,MAAM,IAAI,IAAI,CAACT,OAAO,IAAI,IAAI,CAACE,UAAU,EAAE;AAC1C;MACA,OAAO,CAAA,UAAA,EAAa,IAAI,CAACF,OAAO,IAAI,IAAI,CAACE,UAAU,CAAQ,MAAA,CAAA;AAC7D,KAAC,MAAM;AACL,MAAA,OAAO,EAAE;AACX;AACF;EAEA,IAAIQ,YAAYA,GAAY;IAC1B,MAAM;AAAEA,MAAAA,YAAY,GAAG;KAAO,GAAG,IAAI,CAAC7C,IAAI;AAE1C,IAAA,IAAI,IAAI,CAACW,WAAW,CAACU,mBAAmB,EAAE;AACxCQ,MAAAA,MAAM,CACJ,0DAA0D,EAC1D,CAACgB,YACH,CAAC;AACD,MAAA,OAAOA,YAAY;AACrB;AAEA,IAAA,OAAOA,YAAY;AACrB;EAEA,IAAIC,SAASA,GAAY;IACvB,MAAM;AAAEA,MAAAA,SAAS,GAAG;KAAO,GAAG,IAAI,CAAC9C,IAAI;AAEvC,IAAA,IAAI,IAAI,CAACW,WAAW,CAACU,mBAAmB,EAAE;AACxCQ,MAAAA,MAAM,CACJ,uDAAuD,EACvD,CAACiB,SACH,CAAC;AACD,MAAA,OAAOA,SAAS;AAClB;AAEA,IAAA,OAAOA,SAAS;AAClB;EAEA,IAAIC,OAAOA,GAA8B;IACvC,MAAM;AAAEA,MAAAA,OAAO,GAAGvF;KAAiB,GAAG,IAAI,CAACwC,IAAI;AAE/C6B,IAAAA,MAAM,CACJ,CAA2DzE,wDAAAA,EAAAA,SAAS,CAAC4F,IAAI,CACvE,IACF,CAAC,CAAA,YAAA,EAAeD,OAAO,CAAA,CAAE,EACzB3F,SAAS,CAAC6F,QAAQ,CAACF,OAAO,CAC5B,CAAC;AAED,IAAA,OAAOA,OAAO;AAChB;EAEA,IAAIvE,eAAeA,GAAY;AAC7B,IAAA,IAAI,IAAI,CAACwB,IAAI,CAACkD,SAAS,IAAI,IAAI,CAAClD,IAAI,CAACxB,eAAe,KAAK,KAAK,EAAE;AAC9D,MAAA,OAAO,IAAI;AACb,KAAC,MAAM,IAAI,IAAI,CAACwB,IAAI,CAACxB,eAAe,IAAI,CAAC,IAAI,CAACwB,IAAI,CAACkD,SAAS,EAAE;AAC5DrB,MAAAA,MAAM,CAAC,8CAA8C,EAAE,KAAK,CAAC;AAC/D;AAEA,IAAA,OAAO,KAAK;AACd;EAEA,IAAIsB,MAAMA,GAAsC;IAC9C,MAAM;AAAEA,MAAAA,MAAM,GAAGvF;KAAgB,GAAG,IAAI,CAACoC,IAAI;AAE7C6B,IAAAA,MAAM,CACJ,CAA0DnE,uDAAAA,EAAAA,WAAW,CAACsF,IAAI,CACxE,IACF,CAAC,CAAA,YAAA,EAAeG,MAAM,CAAA,CAAE,EACxBzF,WAAW,CAACuF,QAAQ,CAACE,MAAM,CAC7B,CAAC;AAED,IAAA,OAAOA,MAAM;AACf;;AAEA;EACA,IAAIC,mBAAmBA,GAAW;IAChC,MAAM;MAAEP,YAAY;AAAE1B,MAAAA;KAAS,GAAG,IAAI,CAACnB,IAAI;IAE3C,MAAMqD,oBAAoB,GAAG,KAAK;;AAElC;AACA,IAAA,IAAIC,KAAK,GAAGT,YAAY,GAAG,cAAc,GAAG,EAAE;AAE9C,IAAA,IAAI,CAAC,IAAI,CAACP,YAAY,EAAE;AACtB;AACAgB,MAAAA,KAAK,IAAI,CAAUnC,OAAAA,EAAAA,OAAO,CAAC7B,MAAM,CAAA,EAAA,EAAK+D,oBAAoB,CAAG,CAAA,CAAA;AAC/D,KAAC,MAAM;AACL;AACA,MAAA,KAAK,IAAIlD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACmC,YAAY,CAAChD,MAAM,EAAEa,CAAC,EAAE,EAAE;AACjDmD,QAAAA,KAAK,IAAI,CAAI,CAAA,EAAA,IAAI,CAAChB,YAAY,CAACnC,CAAC,CAAC,GAAG,IAAI,CAACmC,YAAY,CAACnC,CAAC,CAAC,GAAGkD,oBAAoB,CAAE,CAAA;AACnF;AACF;AAEA,IAAA,OAAOC,KAAK;AACd;EAEA,IAAIC,UAAUA,GAAW;AACvB,IAAA,MAAMC,OAAO,GAAG,CAAC,oBAAoB,CAAC;IAEtC,IAAI,IAAI,CAACV,SAAS,EAAE;AAClBU,MAAAA,OAAO,CAACC,IAAI,CAAC,6BAA6B,CAAC;AAC7C;IAEA,IAAI,IAAI,CAACV,OAAO,EAAE;MAChBS,OAAO,CAACC,IAAI,CAAC,CAAA,4BAAA,EAA+B,IAAI,CAACV,OAAO,EAAE,CAAC;AAC7D;IAEA,IAAI,IAAI,CAACI,MAAM,EAAE;MACfK,OAAO,CAACC,IAAI,CAAC,CAAA,2BAAA,EAA8B,IAAI,CAACN,MAAM,EAAE,CAAC;AAC3D;AAEA,IAAA,IAAI,IAAI,CAACxC,WAAW,CAACU,mBAAmB,EAAE;AACxCmC,MAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,0BAAA,CAA4B,CAAC;AAC5C;AAEA,IAAA,OAAOD,OAAO,CAACR,IAAI,CAAC,GAAG,CAAC;AAC1B;EAEA,IAAIU,eAAeA,GAAW;AAC5B,IAAA,MAAMF,OAAO,GAAG,CAAC,2BAA2B,CAAC;IAE7C,IAAI,IAAI,CAAChF,eAAe,EAAE;AACxBgF,MAAAA,OAAO,CAACC,IAAI,CAAC,mCAAmC,CAAC;AACnD;IAEA,IAAI,IAAI,CAACE,oBAAoB,EAAE;AAC7BH,MAAAA,OAAO,CAACC,IAAI,CAAC,sCAAsC,CAAC;AACtD;AAEA,IAAA,OAAOD,OAAO,CAACR,IAAI,CAAC,GAAG,CAAC;AAC1B;EAEQY,eAAe,GAAGC,QAAQ,CAAC,MAAM;IACvC,IAAI,CAAClD,WAAW,CAACmD,WAAW,CAAC,IAAI,CAAC9D,IAAI,CAACiB,KAAK,CAAC;AAC/C,GAAC,CAAC;AAEM8C,EAAAA,mBAAmB,GAAGF,QAAQ,CAAEG,OAAuB,IAAK;IAClE,IAAI,CAACpD,cAAc,GAAG,MAAM;AAC1B;MACA,MAAMqD,aAAa,GAAG,CAAC;;AAEvB;MACA,IAAID,OAAO,CAACE,UAAU,GAAGD,aAAa,IAAI,CAAC,IAAI,CAACE,uBAAuB,EAAE;AACvE,QAAA,IAAI,IAAI,CAACnE,IAAI,CAACvB,oBAAoB,EAAE;UAClC,IAAI,CAAC2F,oBAAoB,GAAG,IAAI;AAClC;QACA,IAAI,CAACD,uBAAuB,GAAG,IAAI;OACpC,MAAM,IAAIH,OAAO,CAACE,UAAU,KAAK,CAAC,IAAI,IAAI,CAACC,uBAAuB,EAAE;QACnE,IAAI,CAACC,oBAAoB,GAAG,KAAK;QACjC,IAAI,CAACD,uBAAuB,GAAG,KAAK;AACtC;;AAEA;MACA,MAAME,SAAS,GACbL,OAAO,CAACM,WAAW,GAAGN,OAAO,CAACjF,WAAW,GAAGkF,aAAa;;AAE3D;AACA,MAAA,IAAID,OAAO,CAACE,UAAU,GAAGG,SAAS,EAAE;QAClC,IAAI,CAACE,wBAAwB,GAAG,IAAI;AACtC,OAAC,MAAM;QACL,IAAI,CAACA,wBAAwB,GAAG,KAAK;AACvC;;AAEA;AACA,MAAA,IAAIP,OAAO,CAACQ,SAAS,GAAG,CAAC,EAAE;QACzB,IAAI,IAAI,CAAChG,eAAe,EAAE;UACxB,IAAI,CAACmF,oBAAoB,GAAG,IAAI;AAClC;QACA,IAAI,CAACc,sBAAsB,GAAG,IAAI;AACpC,OAAC,MAAM;QACL,IAAI,IAAI,CAACjG,eAAe,EAAE;UACxB,IAAI,CAACmF,oBAAoB,GAAG,KAAK;AACnC;QACA,IAAI,CAACc,sBAAsB,GAAG,KAAK;AACrC;;AAEA;MACA,MAAMC,UAAU,GACdV,OAAO,CAACW,YAAY,GAAGX,OAAO,CAACpF,YAAY,GAAGqF,aAAa;;AAE7D;AACA,MAAA,IAAID,OAAO,CAACQ,SAAS,GAAGE,UAAU,EAAE;QAClC,IAAI,CAACE,yBAAyB,GAAG,IAAI;AACvC,OAAC,MAAM;QACL,IAAI,CAACA,yBAAyB,GAAG,KAAK;AACxC;KACD;IAEDZ,OAAO,CAACa,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACjE,cAAc,CAAC;IAEvD,MAAMkE,kBAAkB,GAAGA,MAAM;AAC/B,MAAA,IAAI,CAACC,yBAAyB,GAAG1G,4BAA4B,CAC3D2F,OAAO,EACP,IAAI,CAAClD,aAAa,EAClB,IAAI,CAACtC,eAAe,EACpBC,oBACF,CAAC;AAED,MAAA,IAAIA,oBAAoB,EAAE;QACxB,IAAI,CAACuG,kBAAkB,GAAGzF,yBAAyB,CACjD,IAAI,CAACuB,aAAa,EAClB+B,YACF,CAAC;AACH;KACD;IAED,MAAM;AAAEpE,MAAAA,oBAAoB,GAAG,KAAK;AAAEoE,MAAAA,YAAY,GAAG;KAAO,GAAG,IAAI,CAAC7C,IAAI;AAExE,IAAA,IAAI,CAACa,eAAe,GAAG,IAAIoE,cAAc,CAAEC,OAAO,IAAK;MACrDA,OAAO,CAAC/F,OAAO,CAAC,MAAM;AACpB2F,QAAAA,kBAAkB,EAAE;AACtB,OAAC,CAAC;AACJ,KAAC,CAAC;AAEF,IAAA,IAAI,CAACjE,eAAe,CAACsE,OAAO,CAACnB,OAAO,CAAC;AAErCc,IAAAA,kBAAkB,EAAE;;AAEpB;AACA,IAAA,IAAId,OAAO,CAACjF,WAAW,GAAGiF,OAAO,CAACM,WAAW,EAAE;MAC7C,IAAI,CAACC,wBAAwB,GAAG,IAAI;AACtC;;AAEA;AACA,IAAA,IAAIP,OAAO,CAACpF,YAAY,GAAGoF,OAAO,CAACW,YAAY,EAAE;MAC/C,IAAI,CAACC,yBAAyB,GAAG,IAAI;AACvC;AAEA,IAAA,OAAO,MAAM;MACXZ,OAAO,CAACoB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACxE,cAAc,CAAC;AAC1D,MAAA,IAAI,CAACC,eAAe,CAACwE,UAAU,EAAE;KAClC;AACH,GAAC,CAAC;AAEMC,EAAAA,WAAW,GAAGzB,QAAQ,CAAEG,OAAuB,IAAK;IAC1D,IAAI,CAAClD,aAAa,GAAGkD,OAAO;AAC9B,GAAC,CAAC;EAGFuB,SAASA,CAAC/D,MAAc,EAAQ;AAC9B,IAAA,IAAI,IAAI,CAACW,OAAO,KAAKX,MAAM,EAAE;AAC3B;AACA,MAAA,IAAI,CAACa,UAAU,GACb,IAAI,CAACA,UAAU,KAAK/B,iCAAiC,CAACC,GAAG,GACrDD,iCAAiC,CAACkF,IAAI,GACtClF,iCAAiC,CAACC,GAAG;AAC7C,KAAC,MAAM;AACL;MACA,IAAI,CAAC4B,OAAO,GAAGX,MAAM;AACrB,MAAA,IAAI,CAACa,UAAU,GAAG/B,iCAAiC,CAACC,GAAG;AACzD;IAEA,MAAM;AAAEkF,MAAAA;KAAQ,GAAG,IAAI,CAACzF,IAAI;AAE5B,IAAA,IAAI,OAAOyF,MAAM,KAAK,UAAU,EAAE;MAChCA,MAAM,CAAC,IAAI,CAACtD,OAAO,EAAE,IAAI,CAACE,UAAU,CAAC;AACvC;AACF;AAAC,EAAA;IAAAqD,CAAA,CAAA,IAAA,CAAA5F,SAAA,EAAA,WAAA,EAAA,CAnBA6F,MAAM,CAAA,CAAA;AAAA;AAqBPC,EAAAA,yBAAyBA,CACvBC,QAAkD,EAClDC,YAAqB,EACf;IACN,MAAM;AAAEC,MAAAA;KAAmB,GAAG,IAAI,CAAC/F,IAAI;AAEvC,IAAA,IAAI,OAAO+F,iBAAiB,KAAK,UAAU,EAAE;AAE7CA,IAAAA,iBAAiB,CAAC;AAChBD,MAAAA,YAAY,EAAEA,YAAY;AAC1BE,MAAAA,wBAAwB,EAAEH,QAAQ;MAClCI,gBAAgB,EAAE,IAAI,CAACzF,eAAe,CAAC0F,MAAM,CAAW,CAACC,GAAG,EAAEC,GAAG,KAAK;AACpE,QAAA,IAAIA,GAAG,CAACP,QAAQ,CAACQ,OAAO,EAAE;AACxBF,UAAAA,GAAG,CAAC1C,IAAI,CAAC2C,GAAG,CAACN,YAAY,CAAC;AAC5B;AACA,QAAA,OAAOK,GAAG;OACX,EAAE,EAAE,CAAC;MACNG,oBAAoB,EAAE,IAAI,CAAC9F,eAAe,CAAC0F,MAAM,CAC/C,CACEC,GAAgE,EAChEC,GAAG,KACA;QACHD,GAAG,CAAC1C,IAAI,CAAC;UACPqC,YAAY,EAAEM,GAAG,CAACN,YAAY;AAC9BS,UAAAA,UAAU,EAAEH,GAAG,CAACP,QAAQ,CAACQ;AAC3B,SAAC,CAAC;AACF,QAAA,OAAOF,GAAG;AACZ,OAAC,EACD,EACF;AACF,KAAC,CAAC;AACJ;AAGAK,EAAAA,oBAAoBA,GAAS;AAC3B,IAAA,IAAI,CAAChG,eAAe,CAACrB,OAAO,CAAEiH,GAAG,IAAK;MACpCA,GAAG,CAACP,QAAQ,CAACQ,OAAO,GAAG,IAAI,CAACI,kBAAkB,EAAEJ,OAAO,IAAI,KAAK;AAClE,KAAC,CAAC;IACF,IAAI,CAACK,4BAA4B,GAC/B,IAAI,CAACD,kBAAkB,EAAEJ,OAAO,IAAI,KAAK;IAC3C,IAAI,CAACT,yBAAyB,CAAC,IAAI,CAACa,kBAAkB,EAAE,KAAK,CAAC;AAChE;AAAC,EAAA;IAAAf,CAAA,CAAA,IAAA,CAAA5F,SAAA,EAAA,sBAAA,EAAA,CARA6F,MAAM,CAAA,CAAA;AAAA;AAWPgB,EAAAA,oBAAoBA,CAClBd,QAAkD,EAClDC,YAAqB,EACf;IACN,IAAI,CAACc,iBAAiB,EAAE;AACxB,IAAA,IAAI,CAAChB,yBAAyB,CAACC,QAAQ,EAAEC,YAAY,CAAC;AACxD;AAAC,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAA5F,SAAA,EAAA,sBAAA,EAAA,CAPA6F,MAAM,CAAA,CAAA;AAAA;EAUPkB,0BAA0BA,CACxBhB,QAAiD,EAC3C;IACN,IAAI,CAACY,kBAAkB,GAAGZ,QAAQ;AACpC;AAAC,EAAA;IAAAH,CAAA,CAAA,IAAA,CAAA5F,SAAA,EAAA,4BAAA,EAAA,CALA6F,MAAM,CAAA,CAAA;AAAA;AAQPmB,EAAAA,4BAA4BA,GAAS;IACnC,IAAI,CAACL,kBAAkB,GAAGvG,SAAS;AACrC;AAAC,EAAA;IAAAwF,CAAA,CAAA,IAAA,CAAA5F,SAAA,EAAA,8BAAA,EAAA,CAHA6F,MAAM,CAAA,CAAA;AAAA;AAMPoB,EAAAA,oBAAoBA,CAClBlB,QAAiD,EACjDC,YAAqB,EACf;AACN,IAAA,IAAIA,YAAY,EAAE;AAChB,MAAA,IAAI,CAACtF,eAAe,CAACiD,IAAI,CAAC;QAAEqC,YAAY;AAAED,QAAAA;AAAS,OAAC,CAAC;AACvD;IACA,IAAI,CAACe,iBAAiB,EAAE;AAC1B;AAAC,EAAA;IAAAlB,CAAA,CAAA,IAAA,CAAA5F,SAAA,EAAA,sBAAA,EAAA,CATA6F,MAAM,CAAA,CAAA;AAAA;EAYPqB,sBAAsBA,CAAClB,YAAqB,EAAQ;AAClD,IAAA,IAAI,CAACtF,eAAe,GAAG,IAAI,CAACA,eAAe,CAACe,MAAM,CAC/C6E,GAAG,IAAKA,GAAG,CAACN,YAAY,KAAKA,YAChC,CAAC;IACD,IAAI,CAACc,iBAAiB,EAAE;AAC1B;AAAC,EAAA;IAAAlB,CAAA,CAAA,IAAA,CAAA5F,SAAA,EAAA,wBAAA,EAAA,CANA6F,MAAM,CAAA,CAAA;AAAA;AASPiB,EAAAA,iBAAiBA,GAAS;IACxB,IAAI,IAAI,CAACH,kBAAkB,EAAE;AAC3B,MAAA,MAAMQ,mBAAmB,GAAG,IAAI,CAACzG,eAAe,CAAClB,MAAM;AACvD,MAAA,MAAM4H,iBAAiB,GAAG,IAAI,CAAC1G,eAAe,CAACe,MAAM,CAClD6E,GAAG,IAAKA,GAAG,CAACP,QAAQ,CAACQ,OACxB,CAAC,CAAC/G,MAAM;AAER,MAAA,IAAI,CAACmH,kBAAkB,CAACJ,OAAO,GAC7Ba,iBAAiB,KAAKD,mBAAmB;MAC3C,IAAI,CAACR,kBAAkB,CAACU,aAAa,GACnCD,iBAAiB,GAAG,CAAC,IAAIA,iBAAiB,GAAGD,mBAAmB;AAClE,MAAA,IAAI,CAACP,4BAA4B,GAAG,IAAI,CAACD,kBAAkB,CAACJ,OAAO;AACrE;AACF;AAAC,EAAA;IAAAX,CAAA,CAAA,IAAA,CAAA5F,SAAA,EAAA,mBAAA,EAAA,CAdA6F,MAAM,CAAA,CAAA;AAAA;AAeT;AAACyB,oBAAA,CAAAC,QAAA,EAtdoB1H,gBAAgB,CAAA;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import HdsAdvancedTableRow from './row.js';
|
|
2
2
|
import { action } from '@ember/object';
|
|
3
|
-
import {
|
|
3
|
+
import { tracked } from '@glimmer/tracking';
|
|
4
|
+
import { g, i, n } from 'decorator-transforms/runtime';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Copyright (c) HashiCorp, Inc.
|
|
@@ -20,18 +21,20 @@ function getChildrenCount(rows) {
|
|
|
20
21
|
return rows.reduce((acc, row) => acc + 1 + getChildrenCount(row.children), 0);
|
|
21
22
|
}
|
|
22
23
|
class HdsAdvancedTableTableModel {
|
|
23
|
-
|
|
24
|
+
static {
|
|
25
|
+
g(this.prototype, "rows", [tracked], function () {
|
|
26
|
+
return [];
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
#rows = (i(this, "rows"), void 0);
|
|
30
|
+
childrenKey;
|
|
24
31
|
constructor(args) {
|
|
25
32
|
const {
|
|
26
33
|
model,
|
|
27
34
|
childrenKey
|
|
28
35
|
} = args;
|
|
29
|
-
this.
|
|
30
|
-
|
|
31
|
-
...row,
|
|
32
|
-
childrenKey
|
|
33
|
-
});
|
|
34
|
-
});
|
|
36
|
+
this.childrenKey = childrenKey;
|
|
37
|
+
this.updateModel(model);
|
|
35
38
|
}
|
|
36
39
|
get totalRowCount() {
|
|
37
40
|
return getChildrenCount(this.rows);
|
|
@@ -55,6 +58,17 @@ class HdsAdvancedTableTableModel {
|
|
|
55
58
|
return false;
|
|
56
59
|
}
|
|
57
60
|
}
|
|
61
|
+
updateModel(model) {
|
|
62
|
+
this.rows = model.map(row => {
|
|
63
|
+
return new HdsAdvancedTableRow({
|
|
64
|
+
...row,
|
|
65
|
+
childrenKey: this.childrenKey
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
static {
|
|
70
|
+
n(this.prototype, "updateModel", [action]);
|
|
71
|
+
}
|
|
58
72
|
openAll() {
|
|
59
73
|
this.rows.forEach(row => row.openAll());
|
|
60
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sources":["../../../../../src/components/hds/advanced-table/models/table.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport HdsAdvancedTableRow from './row.ts';\nimport { action } from '@ember/object';\n\nimport type {\n HdsAdvancedTableExpandState,\n HdsAdvancedTableModel,\n} from '../types';\n\ninterface HdsAdvancedTableTableArgs {\n model: HdsAdvancedTableModel;\n childrenKey?: string;\n}\n\nfunction getVisibleRows(rows: HdsAdvancedTableRow[]): HdsAdvancedTableRow[] {\n return rows.reduce((acc, row) => {\n acc.push(row);\n\n if (row.isOpen && row.children) {\n acc.push(...getVisibleRows(row.children));\n }\n\n return acc;\n }, [] as HdsAdvancedTableRow[]);\n}\n\nfunction getChildrenCount(rows: HdsAdvancedTableRow[]): number {\n return rows.reduce((acc, row) => acc + 1 + getChildrenCount(row.children), 0);\n}\n\nexport default class HdsAdvancedTableTableModel {\n rows: HdsAdvancedTableRow[] = [];\n\n constructor(args: HdsAdvancedTableTableArgs) {\n const { model, childrenKey } = args;\n\n this.
|
|
1
|
+
{"version":3,"file":"table.js","sources":["../../../../../src/components/hds/advanced-table/models/table.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport HdsAdvancedTableRow from './row.ts';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nimport type {\n HdsAdvancedTableExpandState,\n HdsAdvancedTableModel,\n} from '../types';\n\ninterface HdsAdvancedTableTableArgs {\n model: HdsAdvancedTableModel;\n childrenKey?: string;\n}\n\nfunction getVisibleRows(rows: HdsAdvancedTableRow[]): HdsAdvancedTableRow[] {\n return rows.reduce((acc, row) => {\n acc.push(row);\n\n if (row.isOpen && row.children) {\n acc.push(...getVisibleRows(row.children));\n }\n\n return acc;\n }, [] as HdsAdvancedTableRow[]);\n}\n\nfunction getChildrenCount(rows: HdsAdvancedTableRow[]): number {\n return rows.reduce((acc, row) => acc + 1 + getChildrenCount(row.children), 0);\n}\n\nexport default class HdsAdvancedTableTableModel {\n @tracked rows: HdsAdvancedTableRow[] = [];\n\n childrenKey?: string;\n\n constructor(args: HdsAdvancedTableTableArgs) {\n const { model, childrenKey } = args;\n\n this.childrenKey = childrenKey;\n this.updateModel(model);\n }\n\n get totalRowCount(): number {\n return getChildrenCount(this.rows);\n }\n\n get flattenedVisibleRows(): HdsAdvancedTableRow[] {\n return getVisibleRows(this.rows);\n }\n\n get lastVisibleRow(): HdsAdvancedTableRow | undefined {\n return this.flattenedVisibleRows[this.flattenedVisibleRows.length - 1];\n }\n\n get hasRowsWithChildren(): boolean {\n return this.rows.some((row) => row.hasChildren);\n }\n\n get allRowsAreOpen(): boolean {\n return this.flattenedVisibleRows.length === this.totalRowCount;\n }\n\n get expandState(): HdsAdvancedTableExpandState {\n if (this.allRowsAreOpen) {\n return true;\n } else {\n return false;\n }\n }\n\n @action\n updateModel(model: HdsAdvancedTableModel) {\n this.rows = model.map((row) => {\n return new HdsAdvancedTableRow({ ...row, childrenKey: this.childrenKey });\n });\n }\n\n @action\n openAll() {\n this.rows.forEach((row) => row.openAll());\n }\n\n @action\n collapseAll() {\n this.rows.forEach((row) => row.collapseAll());\n }\n\n @action\n toggleAll() {\n if (this.allRowsAreOpen) {\n this.collapseAll();\n } else {\n this.openAll();\n }\n }\n}\n"],"names":["getVisibleRows","rows","reduce","acc","row","push","isOpen","children","getChildrenCount","HdsAdvancedTableTableModel","g","prototype","tracked","i","void 0","childrenKey","constructor","args","model","updateModel","totalRowCount","flattenedVisibleRows","lastVisibleRow","length","hasRowsWithChildren","some","hasChildren","allRowsAreOpen","expandState","map","HdsAdvancedTableRow","n","action","openAll","forEach","collapseAll","toggleAll"],"mappings":"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"}
|
|
@@ -2,11 +2,12 @@ import Component from '@glimmer/component';
|
|
|
2
2
|
import { tracked } from '@glimmer/tracking';
|
|
3
3
|
import { action } from '@ember/object';
|
|
4
4
|
import { schedule } from '@ember/runloop';
|
|
5
|
+
import { guidFor } from '@ember/object/internals';
|
|
5
6
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
6
7
|
import { g, i, n } from 'decorator-transforms/runtime';
|
|
7
8
|
import { setComponentTemplate } from '@ember/component';
|
|
8
9
|
|
|
9
|
-
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class=\"hds-disclosure-primitive\" {{did-update this.onStateChange @isOpen}} ...attributes>\n <div class=\"hds-disclosure-primitive__toggle\">\n {{yield (hash onClickToggle=this.onClickToggle isOpen=this.isOpen) to=\"toggle\"}}\n </div>\n
|
|
10
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class=\"hds-disclosure-primitive\" {{did-update this.onStateChange @isOpen}} ...attributes>\n <div class=\"hds-disclosure-primitive__toggle\">\n {{yield (hash onClickToggle=this.onClickToggle isOpen=this.isOpen contentId=this._contentId) to=\"toggle\"}}\n </div>\n <div class=\"hds-disclosure-primitive__content\" id={{this._contentId}}>\n {{#if this.isOpen}}\n {{yield (hash close=this.close) to=\"content\"}}\n {{/if}}\n </div>\n</div>");
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Copyright (c) HashiCorp, Inc.
|
|
@@ -26,6 +27,7 @@ class HdsDisclosurePrimitive extends Component {
|
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
29
|
#_isControlled = (i(this, "_isControlled"), void 0);
|
|
30
|
+
_contentId = 'content-' + guidFor(this);
|
|
29
31
|
get isOpen() {
|
|
30
32
|
if (this._isControlled) {
|
|
31
33
|
// if the state is controlled from outside, the argument overrides the internal state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/disclosure-primitive/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\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';\n\nexport interface HdsDisclosurePrimitiveSignature {\n Args: {\n isOpen?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClose?: (...args: any[]) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle?: (...args: any[]) => void;\n };\n Blocks: {\n toggle: [\n {\n isOpen: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle: (...args: any[]) => void;\n },\n ];\n content: [\n {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close: (...args: any[]) => void;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsDisclosurePrimitive extends Component<HdsDisclosurePrimitiveSignature> {\n @tracked private _isOpen = false;\n @tracked private _isControlled = this.args.isOpen !== undefined;\n\n get isOpen(): boolean {\n if (this._isControlled) {\n // if the state is controlled from outside, the argument overrides the internal state\n return this.args.isOpen ?? this._isOpen;\n } else {\n // if the state changes internally, the internal state overrides the argument\n return this._isOpen;\n }\n }\n\n set isOpen(value) {\n this._isOpen = value || false;\n }\n\n @action\n onClickToggle(): void {\n this.isOpen = !this.isOpen;\n this._isControlled = false;\n // we call the \"onClickToggle\" callback if it exists and it's a function\n if (\n this.args.onClickToggle &&\n typeof this.args.onClickToggle === 'function'\n ) {\n this.args.onClickToggle(this.isOpen);\n }\n }\n\n @action\n onStateChange(): void {\n if (this.args.isOpen !== undefined) {\n this.isOpen = this.args.isOpen;\n }\n this._isControlled = true;\n }\n\n @action\n close(): void {\n // we schedule this afterRender to avoid an error in tests caused by updating `isOpen` multiple times in the same computation\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.isOpen = false;\n // we call the \"onClose\" callback if it exists (and is a function)\n if (this.args.onClose && typeof this.args.onClose === 'function') {\n this.args.onClose();\n }\n });\n }\n}\n"],"names":["HdsDisclosurePrimitive","Component","g","prototype","tracked","i","void 0","args","isOpen","undefined","_isControlled","_isOpen","value","onClickToggle","n","action","onStateChange","close","schedule","onClose","setComponentTemplate","TEMPLATE"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/disclosure-primitive/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { schedule } from '@ember/runloop';\nimport { guidFor } from '@ember/object/internals';\n\nexport interface HdsDisclosurePrimitiveSignature {\n Args: {\n isOpen?: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClose?: (...args: any[]) => void;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle?: (...args: any[]) => void;\n };\n Blocks: {\n toggle: [\n {\n contentId: string;\n isOpen: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onClickToggle: (...args: any[]) => void;\n },\n ];\n content: [\n {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n close: (...args: any[]) => void;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsDisclosurePrimitive extends Component<HdsDisclosurePrimitiveSignature> {\n @tracked private _isOpen = false;\n @tracked private _isControlled = this.args.isOpen !== undefined;\n private _contentId = 'content-' + guidFor(this);\n\n get isOpen(): boolean {\n if (this._isControlled) {\n // if the state is controlled from outside, the argument overrides the internal state\n return this.args.isOpen ?? this._isOpen;\n } else {\n // if the state changes internally, the internal state overrides the argument\n return this._isOpen;\n }\n }\n\n set isOpen(value) {\n this._isOpen = value || false;\n }\n\n @action\n onClickToggle(): void {\n this.isOpen = !this.isOpen;\n this._isControlled = false;\n // we call the \"onClickToggle\" callback if it exists and it's a function\n if (\n this.args.onClickToggle &&\n typeof this.args.onClickToggle === 'function'\n ) {\n this.args.onClickToggle(this.isOpen);\n }\n }\n\n @action\n onStateChange(): void {\n if (this.args.isOpen !== undefined) {\n this.isOpen = this.args.isOpen;\n }\n this._isControlled = true;\n }\n\n @action\n close(): void {\n // we schedule this afterRender to avoid an error in tests caused by updating `isOpen` multiple times in the same computation\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.isOpen = false;\n // we call the \"onClose\" callback if it exists (and is a function)\n if (this.args.onClose && typeof this.args.onClose === 'function') {\n this.args.onClose();\n }\n });\n }\n}\n"],"names":["HdsDisclosurePrimitive","Component","g","prototype","tracked","i","void 0","args","isOpen","undefined","_contentId","guidFor","_isControlled","_isOpen","value","onClickToggle","n","action","onStateChange","close","schedule","onClose","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAmCe,MAAMA,sBAAsB,SAASC,SAAS,CAAkC;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAC5FC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAmB,KAAK;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,eAAA,EAAA,CAC/BC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAyB,IAAI,CAACG,IAAI,CAACC,MAAM,KAAKC,SAAS;AAAA,KAAA,CAAA;AAAA;AAAA,EAAA,cAAA,IAAAJ,CAAA,CAAA,IAAA,EAAA,eAAA,CAAA,EAAAC,MAAA;AACvDI,EAAAA,UAAU,GAAG,UAAU,GAAGC,OAAO,CAAC,IAAI,CAAC;EAE/C,IAAIH,MAAMA,GAAY;IACpB,IAAI,IAAI,CAACI,aAAa,EAAE;AACtB;MACA,OAAO,IAAI,CAACL,IAAI,CAACC,MAAM,IAAI,IAAI,CAACK,OAAO;AACzC,KAAC,MAAM;AACL;MACA,OAAO,IAAI,CAACA,OAAO;AACrB;AACF;EAEA,IAAIL,MAAMA,CAACM,KAAK,EAAE;AAChB,IAAA,IAAI,CAACD,OAAO,GAAGC,KAAK,IAAI,KAAK;AAC/B;AAGAC,EAAAA,aAAaA,GAAS;AACpB,IAAA,IAAI,CAACP,MAAM,GAAG,CAAC,IAAI,CAACA,MAAM;IAC1B,IAAI,CAACI,aAAa,GAAG,KAAK;AAC1B;AACA,IAAA,IACE,IAAI,CAACL,IAAI,CAACQ,aAAa,IACvB,OAAO,IAAI,CAACR,IAAI,CAACQ,aAAa,KAAK,UAAU,EAC7C;MACA,IAAI,CAACR,IAAI,CAACQ,aAAa,CAAC,IAAI,CAACP,MAAM,CAAC;AACtC;AACF;AAAC,EAAA;IAAAQ,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,eAAA,EAAA,CAXAc,MAAM,CAAA,CAAA;AAAA;AAcPC,EAAAA,aAAaA,GAAS;AACpB,IAAA,IAAI,IAAI,CAACX,IAAI,CAACC,MAAM,KAAKC,SAAS,EAAE;AAClC,MAAA,IAAI,CAACD,MAAM,GAAG,IAAI,CAACD,IAAI,CAACC,MAAM;AAChC;IACA,IAAI,CAACI,aAAa,GAAG,IAAI;AAC3B;AAAC,EAAA;IAAAI,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,eAAA,EAAA,CANAc,MAAM,CAAA,CAAA;AAAA;AASPE,EAAAA,KAAKA,GAAS;AACZ;AACA;IACAC,QAAQ,CAAC,aAAa,EAAE,MAAY;MAClC,IAAI,CAACZ,MAAM,GAAG,KAAK;AACnB;AACA,MAAA,IAAI,IAAI,CAACD,IAAI,CAACc,OAAO,IAAI,OAAO,IAAI,CAACd,IAAI,CAACc,OAAO,KAAK,UAAU,EAAE;AAChE,QAAA,IAAI,CAACd,IAAI,CAACc,OAAO,EAAE;AACrB;AACF,KAAC,CAAC;AACJ;AAAC,EAAA;IAAAL,CAAA,CAAA,IAAA,CAAAb,SAAA,EAAA,OAAA,EAAA,CAXAc,MAAM,CAAA,CAAA;AAAA;AAYT;AAACK,oBAAA,CAAAC,QAAA,EApDoBvB,sBAAsB,CAAA;;;;"}
|
|
@@ -12,7 +12,7 @@ import { precompileTemplate } from '@ember/template-compilation';
|
|
|
12
12
|
import { c, n } from 'decorator-transforms/runtime';
|
|
13
13
|
import { setComponentTemplate } from '@ember/component';
|
|
14
14
|
|
|
15
|
-
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class={{this.classNames}} ...attributes>\n {{yield\n (hash\n Label=(component\n \"hds/form/label\"\n controlId=this.id\n isRequired=this.isRequired\n isOptional=this.isOptional\n contextualClass=\"hds-form-field__label\"\n )\n )\n }}\n {{yield\n
|
|
15
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class={{this.classNames}} ...attributes>\n {{yield\n (hash\n Label=(component\n \"hds/form/label\"\n controlId=this.id\n isRequired=this.isRequired\n isOptional=this.isOptional\n contextualClass=\"hds-form-field__label\"\n )\n )\n }}\n {{#unless (eq @layout \"flag\")}}\n {{yield\n (hash\n HelperText=(component\n \"hds/form/helper-text\"\n controlId=this.id\n onInsert=this.appendDescriptor\n contextualClass=\"hds-form-field__helper-text\"\n )\n )\n }}\n {{/unless}}\n <div class=\"hds-form-field__control\">\n {{! @glint-expect-error }}\n {{yield (hash Control=(component \"hds/yield\") id=this.id ariaDescribedBy=this.ariaDescribedBy)}}\n </div>\n {{#if (eq @layout \"flag\")}}\n {{yield\n (hash\n HelperText=(component\n \"hds/form/helper-text\"\n controlId=this.id\n onInsert=this.appendDescriptor\n contextualClass=\"hds-form-field__helper-text\"\n )\n )\n }}\n {{/if}}\n {{yield\n (hash\n CharacterCount=(component\n \"hds/form/character-count\"\n controlId=this.id\n onInsert=this.appendDescriptor\n contextualClass=\"hds-form-field__character-count\"\n )\n )\n }}\n {{yield\n (hash\n Error=(component\n \"hds/form/error\"\n controlId=this.id\n onInsert=this.appendDescriptor\n onRemove=this.removeDescriptor\n contextualClass=\"hds-form-field__error\"\n )\n )\n }}\n</div>");
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Copyright (c) HashiCorp, Inc.
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import Component from '@glimmer/component';
|
|
2
|
-
import { guidFor } from '@ember/object/internals';
|
|
3
2
|
import { assert } from '@ember/debug';
|
|
4
3
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
5
4
|
import { setComponentTemplate } from '@ember/component';
|
|
6
5
|
|
|
7
|
-
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<Hds::DisclosurePrimitive class=\"hds-reveal\" @isOpen={{@isOpen}} ...attributes>\n <:toggle as |t|>\n <Hds::Reveal::Toggle::Button\n aria-controls={{
|
|
6
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n\n<Hds::DisclosurePrimitive class=\"hds-reveal\" @isOpen={{@isOpen}} ...attributes>\n <:toggle as |t|>\n <Hds::Reveal::Toggle::Button\n aria-controls={{t.contentId}}\n @text={{this.getText t.isOpen}}\n @isOpen={{t.isOpen}}\n {{on \"click\" t.onClickToggle}}\n />\n </:toggle>\n\n <:content>\n <div class=\"hds-reveal__content hds-typography-body-200 hds-foreground-primary\">\n {{yield}}\n </div>\n </:content>\n</Hds::DisclosurePrimitive>");
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* Copyright (c) HashiCorp, Inc.
|
|
@@ -12,13 +11,6 @@ var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-
|
|
|
12
11
|
*/
|
|
13
12
|
|
|
14
13
|
class HdsReveal extends Component {
|
|
15
|
-
/**
|
|
16
|
-
* Generates a unique ID for the Content
|
|
17
|
-
*
|
|
18
|
-
* @param _contentId
|
|
19
|
-
*/
|
|
20
|
-
_contentId = 'content-' + guidFor(this);
|
|
21
|
-
|
|
22
14
|
/**
|
|
23
15
|
* @param getText
|
|
24
16
|
* @type {string}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/reveal/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/reveal/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { assert } from '@ember/debug';\n\nimport type { HdsDisclosurePrimitiveSignature } from '../disclosure-primitive';\nimport type { HdsRevealToggleButtonSignature } from './toggle/button';\n\nexport interface HdsRevealSignature {\n Args: {\n text: HdsRevealToggleButtonSignature['Args']['text'];\n textWhenOpen?: HdsRevealToggleButtonSignature['Args']['text'];\n isOpen?: HdsRevealToggleButtonSignature['Args']['isOpen'];\n };\n Blocks: {\n default: [];\n };\n Element: HdsDisclosurePrimitiveSignature['Element'];\n}\n\nexport default class HdsReveal extends Component<HdsRevealSignature> {\n /**\n * @param getText\n * @type {string}\n * @description A local function that emulates a getter to compute the value of the `@text` argument for the button (mainly to make TypeScript happy)\n */\n getText = (isOpen: boolean): string => {\n if (isOpen && this.args.textWhenOpen !== undefined) {\n return this.args.textWhenOpen;\n } else {\n if (this.args.text !== undefined) {\n return this.args.text;\n } else {\n assert('@text for \"Hds::Reveal\" must have a valid value');\n }\n }\n };\n}\n"],"names":["HdsReveal","Component","getText","isOpen","args","textWhenOpen","undefined","text","assert","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;;AAoBe,MAAMA,SAAS,SAASC,SAAS,CAAqB;AACnE;AACF;AACA;AACA;AACA;EACEC,OAAO,GAAIC,MAAe,IAAa;IACrC,IAAIA,MAAM,IAAI,IAAI,CAACC,IAAI,CAACC,YAAY,KAAKC,SAAS,EAAE;AAClD,MAAA,OAAO,IAAI,CAACF,IAAI,CAACC,YAAY;AAC/B,KAAC,MAAM;AACL,MAAA,IAAI,IAAI,CAACD,IAAI,CAACG,IAAI,KAAKD,SAAS,EAAE;AAChC,QAAA,OAAO,IAAI,CAACF,IAAI,CAACG,IAAI;AACvB,OAAC,MAAM;QACLC,MAAM,CAAC,iDAAiD,CAAC;AAC3D;AACF;GACD;AACH;AAACC,oBAAA,CAAAC,QAAA,EAjBoBV,SAAS,CAAA;;;;"}
|
|
@@ -5,6 +5,8 @@ import { schedule } from '@ember/runloop';
|
|
|
5
5
|
import { assert } from '@ember/debug';
|
|
6
6
|
import { modifier } from 'ember-modifier';
|
|
7
7
|
import { HdsStepperTitleTagValues } from '../types.js';
|
|
8
|
+
import './step.js';
|
|
9
|
+
import './panel.js';
|
|
8
10
|
import { precompileTemplate } from '@ember/template-compilation';
|
|
9
11
|
import { g, i, n } from 'decorator-transforms/runtime';
|
|
10
12
|
import { setComponentTemplate } from '@ember/component';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/nav/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\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 { ComponentLike } from '@glint/template';\n\nimport type { HdsStepperNavStepSignature } from './step';\nimport type { HdsStepperNavPanelSignature } from './panel';\nimport { HdsStepperTitleTagValues } from '../types.ts';\nimport type {\n HdsStepperTitleTags,\n HdsStepperNavStepIds,\n HdsStepperNavStep,\n HdsStepperNavPanelIds,\n} from '../types.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?: ComponentLike<HdsStepperNavStepSignature>;\n Panel?: ComponentLike<HdsStepperNavPanelSignature>;\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
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/stepper/nav/index.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\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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"}
|