@hashicorp/design-system-components 5.0.0 → 5.1.0-rc-20251106155636
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/advanced-table/index.d.ts +10 -0
- package/declarations/components/hds/filter-bar/checkbox.d.ts +21 -0
- package/declarations/components/hds/filter-bar/filter-group.d.ts +46 -0
- package/declarations/components/hds/filter-bar/filters-dropdown.d.ts +36 -0
- package/declarations/components/hds/filter-bar/index.d.ts +40 -0
- package/declarations/components/hds/filter-bar/radio.d.ts +21 -0
- package/declarations/components/hds/filter-bar/range.d.ts +33 -0
- package/declarations/components/hds/filter-bar/tabs/index.d.ts +43 -0
- package/declarations/components/hds/filter-bar/tabs/panel.d.ts +28 -0
- package/declarations/components/hds/filter-bar/tabs/tab.d.ts +33 -0
- package/declarations/components/hds/filter-bar/types.d.ts +52 -0
- package/declarations/components.d.ts +10 -0
- package/declarations/template-registry.d.ts +27 -0
- package/dist/_app_/components/hds/filter-bar/checkbox.js +1 -0
- package/dist/_app_/components/hds/filter-bar/filter-group.js +1 -0
- package/dist/_app_/components/hds/filter-bar/filters-dropdown.js +1 -0
- package/dist/_app_/components/hds/filter-bar/radio.js +1 -0
- package/dist/_app_/components/hds/filter-bar/range.js +1 -0
- package/dist/_app_/components/hds/filter-bar/tabs/panel.js +1 -0
- package/dist/_app_/components/hds/filter-bar/tabs/tab.js +1 -0
- package/dist/_app_/components/hds/filter-bar/tabs.js +1 -0
- package/dist/_app_/components/hds/filter-bar.js +1 -0
- package/dist/components/hds/advanced-table/index.js +10 -1
- package/dist/components/hds/advanced-table/index.js.map +1 -1
- package/dist/components/hds/filter-bar/checkbox.js +40 -0
- package/dist/components/hds/filter-bar/checkbox.js.map +1 -0
- package/dist/components/hds/filter-bar/filter-group.js +173 -0
- package/dist/components/hds/filter-bar/filter-group.js.map +1 -0
- package/dist/components/hds/filter-bar/filters-dropdown.js +125 -0
- package/dist/components/hds/filter-bar/filters-dropdown.js.map +1 -0
- package/dist/components/hds/filter-bar/index.js +162 -0
- package/dist/components/hds/filter-bar/index.js.map +1 -0
- package/dist/components/hds/filter-bar/radio.js +40 -0
- package/dist/components/hds/filter-bar/radio.js.map +1 -0
- package/dist/components/hds/filter-bar/range.js +88 -0
- package/dist/components/hds/filter-bar/range.js.map +1 -0
- package/dist/components/hds/filter-bar/tabs/index.js +182 -0
- package/dist/components/hds/filter-bar/tabs/index.js.map +1 -0
- package/dist/components/hds/filter-bar/tabs/panel.js +67 -0
- package/dist/components/hds/filter-bar/tabs/panel.js.map +1 -0
- package/dist/components/hds/filter-bar/tabs/tab.js +99 -0
- package/dist/components/hds/filter-bar/tabs/tab.js.map +1 -0
- package/dist/components/hds/filter-bar/types.js +24 -0
- package/dist/components/hds/filter-bar/types.js.map +1 -0
- package/dist/components.js +10 -0
- package/dist/components.js.map +1 -1
- package/dist/styles/@hashicorp/design-system-components.css +198 -3
- package/dist/styles/@hashicorp/design-system-components.scss +1 -0
- package/dist/styles/components/advanced-table.scss +67 -1
- package/dist/styles/components/filter-bar.scss +155 -0
- package/package.json +10 -1
- package/translations/hds/components/advanced-table/en-us.yaml +3 -0
- package/translations/hds/components/filter-bar/en-us.yaml +3 -0
- package/translations/hds/components/filter-bar/filter-options/en-us.yaml +1 -0
- package/translations/hds/components/filter-bar/filters-dropdown/en-us.yaml +7 -0
- package/translations/hds/components/filter-bar/range/en-us.yaml +3 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { action } from '@ember/object';
|
|
3
|
+
import { tracked } from '@glimmer/tracking';
|
|
4
|
+
import '../dropdown/index.js';
|
|
5
|
+
import './filters-dropdown.js';
|
|
6
|
+
import { isArray } from '@ember/array';
|
|
7
|
+
import { SELECTORS_DISPLAY_SYMBOL } from './range.js';
|
|
8
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
9
|
+
import { g, i, n } from 'decorator-transforms/runtime';
|
|
10
|
+
import { setComponentTemplate } from '@ember/component';
|
|
11
|
+
|
|
12
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class=\"hds-filter-bar\" ...attributes>\n <div class=\"hds-filter-bar__actions\">\n {{yield\n (hash FiltersDropdown=(component \"hds/filter-bar/filters-dropdown\" onFilter=this.onFilter filters=@filters))\n }}\n {{#if @hasSearch}}\n <Hds::Form::TextInput::Base\n @type=\"search\"\n @width=\"320px\"\n @value={{this.searchValue}}\n class=\"hds-filter-bar__search\"\n placeholder={{hds-t \"hds.components.filter-bar.search.placeholder\" default=\"Search\"}}\n aria-label={{hds-t \"hds.components.filter-bar.search.aria-label\" default=\"Search filters\"}}\n name=\"search\"\n {{on \"change\" this.onSearch}}\n />\n {{/if}}\n <div class=\"hds-filter-bar__actions__right\">\n {{yield (hash ActionsDropdown=(component \"hds/dropdown\"))}}\n {{#if this.hasActiveFilters}}\n <Hds::Button\n @text={{if\n this._isExpanded\n (hds-t \"hds.components.filter-bar.expand-collapse-button.collapse\" default=\"Collapse filters\")\n (hds-t \"hds.components.filter-bar.expand-collapse-button.expand\" default=\"Expand filters\")\n }}\n @color=\"secondary\"\n @size=\"small\"\n @icon={{if this._isExpanded \"unfold-close\" \"unfold-open\"}}\n @isIconOnly={{true}}\n {{on \"click\" this.toggleExpand}}\n />\n {{/if}}\n </div>\n </div>\n {{#if (and this.hasActiveFilters this._isExpanded)}}\n <div class=\"hds-filter-bar__filters\">\n {{#each-in @filters as |key filter|}}\n {{#if filter.data}}\n {{#if (and (eq filter.type \"single-select\"))}}\n <Hds::Tag\n @text=\"{{this._filterKeyText key filter}}: {{this._filterText filter.data}}\"\n @onDismiss={{fn this.onFilterDismiss key}}\n />\n {{else if (eq filter.type \"range\")}}\n <Hds::Tag\n @text=\"{{this._filterKeyText key filter}} {{this._rangeFilterText filter.data}}\"\n @onDismiss={{fn this.onFilterDismiss key}}\n />\n {{else if (eq filter.type \"search\")}}\n <Hds::Tag\n @text=\"{{this._filterKeyText key filter}}: {{this._filterText filter.data}}\"\n @onDismiss={{fn this.onFilterDismiss key}}\n />\n {{else if (eq filter.type \"multi-select\")}}\n {{#each (this._filterArrayData filter.data) as |item|}}\n <Hds::Tag\n @text=\"{{this._filterKeyText key filter}}: {{item.value}}\"\n @onDismiss={{fn this.onFilterDismiss key item.value}}\n />\n {{/each}}\n {{/if}}\n {{/if}}\n {{/each-in}}\n <Hds::Button\n class=\"hds-filter-bar__clear-button\"\n @text=\"Clear all filters\"\n @color=\"tertiary\"\n @icon=\"x\"\n @size=\"small\"\n {{on \"click\" this.clearFilters}}\n />\n </div>\n {{/if}}\n</div>");
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Copyright (c) HashiCorp, Inc.
|
|
16
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
class HdsFilterBar extends Component {
|
|
20
|
+
static {
|
|
21
|
+
g(this.prototype, "_isExpanded", [tracked], function () {
|
|
22
|
+
return true;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
#_isExpanded = (i(this, "_isExpanded"), void 0);
|
|
26
|
+
get searchValue() {
|
|
27
|
+
const {
|
|
28
|
+
filters
|
|
29
|
+
} = this.args;
|
|
30
|
+
if (filters['search']) {
|
|
31
|
+
return this._filterText(filters['search'].data);
|
|
32
|
+
}
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
onFilter(filters) {
|
|
36
|
+
const {
|
|
37
|
+
onFilter
|
|
38
|
+
} = this.args;
|
|
39
|
+
if (onFilter && typeof onFilter === 'function') {
|
|
40
|
+
onFilter(filters);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
static {
|
|
44
|
+
n(this.prototype, "onFilter", [action]);
|
|
45
|
+
}
|
|
46
|
+
clearFilters() {
|
|
47
|
+
const {
|
|
48
|
+
onFilter
|
|
49
|
+
} = this.args;
|
|
50
|
+
if (onFilter && typeof onFilter === 'function') {
|
|
51
|
+
onFilter({});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
static {
|
|
55
|
+
n(this.prototype, "clearFilters", [action]);
|
|
56
|
+
}
|
|
57
|
+
onSearch(event) {
|
|
58
|
+
const {
|
|
59
|
+
filters
|
|
60
|
+
} = this.args;
|
|
61
|
+
const input = event.target;
|
|
62
|
+
const value = input?.value;
|
|
63
|
+
const newFilters = {};
|
|
64
|
+
Object.keys(filters).forEach(k => {
|
|
65
|
+
newFilters[k] = JSON.parse(JSON.stringify(filters[k]));
|
|
66
|
+
});
|
|
67
|
+
if (value.length > 0) {
|
|
68
|
+
newFilters['search'] = {
|
|
69
|
+
type: 'search',
|
|
70
|
+
text: 'Search',
|
|
71
|
+
data: {
|
|
72
|
+
value
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
} else {
|
|
76
|
+
delete newFilters['search'];
|
|
77
|
+
}
|
|
78
|
+
this.onFilter({
|
|
79
|
+
...newFilters
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
static {
|
|
83
|
+
n(this.prototype, "onSearch", [action]);
|
|
84
|
+
}
|
|
85
|
+
toggleExpand() {
|
|
86
|
+
this._isExpanded = !this._isExpanded;
|
|
87
|
+
}
|
|
88
|
+
static {
|
|
89
|
+
n(this.prototype, "toggleExpand", [action]);
|
|
90
|
+
}
|
|
91
|
+
get hasActiveFilters() {
|
|
92
|
+
return Object.keys(this.args.filters).length > 0;
|
|
93
|
+
}
|
|
94
|
+
onFilterDismiss = (key, filterValue) => {
|
|
95
|
+
const {
|
|
96
|
+
filters
|
|
97
|
+
} = this.args;
|
|
98
|
+
if (filters && filters[key]) {
|
|
99
|
+
const keyFilter = filters[key];
|
|
100
|
+
const newFilters = {};
|
|
101
|
+
Object.keys(filters).forEach(k => {
|
|
102
|
+
newFilters[k] = JSON.parse(JSON.stringify(filters[k]));
|
|
103
|
+
});
|
|
104
|
+
if (keyFilter.type === 'multi-select' && isArray(keyFilter.data)) {
|
|
105
|
+
const newKeyfilter = keyFilter.data?.filter(item => item.value !== filterValue);
|
|
106
|
+
if (newKeyfilter.length === 0) {
|
|
107
|
+
delete newFilters[key];
|
|
108
|
+
} else {
|
|
109
|
+
newFilters[key] = {
|
|
110
|
+
type: 'multi-select',
|
|
111
|
+
text: keyFilter.text,
|
|
112
|
+
data: newKeyfilter
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
} else {
|
|
116
|
+
delete newFilters[key];
|
|
117
|
+
}
|
|
118
|
+
this.onFilter({
|
|
119
|
+
...newFilters
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
_filterData = data => {
|
|
124
|
+
if ('value' in data) {
|
|
125
|
+
return {
|
|
126
|
+
value: data.value
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
value: ''
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
_filterText = data => {
|
|
134
|
+
const result = this._filterData(data);
|
|
135
|
+
const resultText = result?.value;
|
|
136
|
+
return resultText ?? '';
|
|
137
|
+
};
|
|
138
|
+
_filterArrayData = data => {
|
|
139
|
+
if (isArray(data)) {
|
|
140
|
+
return data.map(item => this._filterData(item));
|
|
141
|
+
}
|
|
142
|
+
return [];
|
|
143
|
+
};
|
|
144
|
+
_filterKeyText = (key, data) => {
|
|
145
|
+
if (data.text) {
|
|
146
|
+
return data.text;
|
|
147
|
+
} else {
|
|
148
|
+
return key;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
_rangeFilterText = data => {
|
|
152
|
+
if ('selector' in data && 'value' in data) {
|
|
153
|
+
return `${SELECTORS_DISPLAY_SYMBOL[data.selector]} ${data.value}`;
|
|
154
|
+
} else {
|
|
155
|
+
return '';
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
setComponentTemplate(TEMPLATE, HdsFilterBar);
|
|
160
|
+
|
|
161
|
+
export { HdsFilterBar as default };
|
|
162
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/hds/filter-bar/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 { tracked } from '@glimmer/tracking';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport type {\n HdsFilterBarFilters,\n HdsFilterBarFilter,\n HdsFilterBarData,\n HdsFilterBarGenericFilterData,\n} from './types.ts';\nimport HdsDropdown from '../dropdown/index.ts';\nimport HdsFilterBarFiltersDropdown from './filters-dropdown.ts';\nimport { isArray } from '@ember/array';\n\nimport { SELECTORS_DISPLAY_SYMBOL } from './range.ts';\n\nexport interface HdsFilterBarSignature {\n Args: {\n filters: HdsFilterBarFilters;\n hasSearch?: boolean;\n onFilter?: (filters: HdsFilterBarFilters) => void;\n };\n Blocks: {\n default?: [\n {\n ActionsDropdown?: WithBoundArgs<typeof HdsDropdown, never>;\n FiltersDropdown?: WithBoundArgs<\n typeof HdsFilterBarFiltersDropdown,\n 'filters' | 'onFilter'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBar extends Component<HdsFilterBarSignature> {\n @tracked _isExpanded: boolean = true;\n\n get searchValue(): string {\n const { filters } = this.args;\n if (filters['search']) {\n return this._filterText(filters['search'].data);\n }\n return '';\n }\n\n @action\n onFilter(filters: HdsFilterBarFilters): void {\n const { onFilter } = this.args;\n if (onFilter && typeof onFilter === 'function') {\n onFilter(filters);\n }\n }\n\n @action\n clearFilters(): void {\n const { onFilter } = this.args;\n if (onFilter && typeof onFilter === 'function') {\n onFilter({});\n }\n }\n\n @action\n onSearch(event: Event): void {\n const { filters } = this.args;\n const input = event.target as HTMLInputElement;\n const value = input?.value;\n\n const newFilters = {} as HdsFilterBarFilters;\n\n Object.keys(filters).forEach((k) => {\n newFilters[k] = JSON.parse(\n JSON.stringify(filters[k])\n ) as HdsFilterBarFilter;\n });\n\n if (value.length > 0) {\n newFilters['search'] = {\n type: 'search',\n text: 'Search',\n data: { value },\n };\n } else {\n delete newFilters['search'];\n }\n\n this.onFilter({ ...newFilters });\n }\n\n @action\n toggleExpand(): void {\n this._isExpanded = !this._isExpanded;\n }\n\n get hasActiveFilters(): boolean {\n return Object.keys(this.args.filters).length > 0;\n }\n\n private onFilterDismiss = (key: string, filterValue?: unknown): void => {\n const { filters } = this.args;\n if (filters && filters[key]) {\n const keyFilter: HdsFilterBarFilter = filters[key];\n const newFilters = {} as HdsFilterBarFilters;\n\n Object.keys(filters).forEach((k) => {\n newFilters[k] = JSON.parse(\n JSON.stringify(filters[k])\n ) as HdsFilterBarFilter;\n });\n\n if (keyFilter.type === 'multi-select' && isArray(keyFilter.data)) {\n const newKeyfilter = keyFilter.data?.filter(\n (item) => item.value !== filterValue\n );\n if (newKeyfilter.length === 0) {\n delete newFilters[key];\n } else {\n newFilters[key] = {\n type: 'multi-select',\n text: keyFilter.text,\n data: newKeyfilter,\n };\n }\n } else {\n delete newFilters[key];\n }\n\n this.onFilter({ ...newFilters });\n }\n };\n\n private _filterData = (\n data: HdsFilterBarData\n ): HdsFilterBarGenericFilterData => {\n if ('value' in data) {\n return { value: data.value };\n }\n return { value: '' };\n };\n\n private _filterText = (data: HdsFilterBarData): string => {\n const result = this._filterData(data);\n const resultText = result?.value as string;\n return resultText ?? '';\n };\n\n private _filterArrayData = (data: HdsFilterBarData): { value: unknown }[] => {\n if (isArray(data)) {\n return data.map((item) => this._filterData(item));\n }\n return [];\n };\n\n private _filterKeyText = (key: string, data: HdsFilterBarFilter): string => {\n if (data.text) {\n return data.text;\n } else {\n return key;\n }\n };\n\n private _rangeFilterText = (data: HdsFilterBarData): string => {\n if ('selector' in data && 'value' in data) {\n return `${SELECTORS_DISPLAY_SYMBOL[data.selector]} ${data.value}`;\n } else {\n return '';\n }\n };\n}\n"],"names":["HdsFilterBar","Component","g","prototype","tracked","i","void 0","searchValue","filters","args","_filterText","data","onFilter","n","action","clearFilters","onSearch","event","input","target","value","newFilters","Object","keys","forEach","k","JSON","parse","stringify","length","type","text","toggleExpand","_isExpanded","hasActiveFilters","onFilterDismiss","key","filterValue","keyFilter","isArray","newKeyfilter","filter","item","_filterData","result","resultText","_filterArrayData","map","_filterKeyText","_rangeFilterText","SELECTORS_DISPLAY_SYMBOL","selector","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { action } from '@ember/object';
|
|
3
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
4
|
+
import { n } from 'decorator-transforms/runtime';
|
|
5
|
+
import { setComponentTemplate } from '@ember/component';
|
|
6
|
+
|
|
7
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<li class=\"hds-filter-bar__filters-dropdown__filter-option\">\n <Hds::Form::Radio::Field checked={{this.isChecked}} @value={{@value}} {{on \"change\" this.onChange}} as |F|>\n <F.Label>{{yield}}</F.Label>\n </Hds::Form::Radio::Field>\n</li>");
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Copyright (c) HashiCorp, Inc.
|
|
11
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
class HdsFilterBarRadio extends Component {
|
|
15
|
+
onChange(event) {
|
|
16
|
+
const {
|
|
17
|
+
onChange
|
|
18
|
+
} = this.args;
|
|
19
|
+
if (onChange && typeof onChange === 'function') {
|
|
20
|
+
onChange(event);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
static {
|
|
24
|
+
n(this.prototype, "onChange", [action]);
|
|
25
|
+
}
|
|
26
|
+
get isChecked() {
|
|
27
|
+
const {
|
|
28
|
+
keyFilter,
|
|
29
|
+
value
|
|
30
|
+
} = this.args;
|
|
31
|
+
if (keyFilter && value && 'value' in keyFilter) {
|
|
32
|
+
return keyFilter.value === value;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
setComponentTemplate(TEMPLATE, HdsFilterBarRadio);
|
|
38
|
+
|
|
39
|
+
export { HdsFilterBarRadio as default };
|
|
40
|
+
//# sourceMappingURL=radio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio.js","sources":["../../../../src/components/hds/filter-bar/radio.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';\n\nimport type { HdsFilterBarData } from './types.ts';\n\nexport interface HdsFilterBarRadioSignature {\n Args: {\n value?: string;\n keyFilter: HdsFilterBarData | undefined;\n onChange?: (event: Event) => void;\n };\n Blocks: {\n default: [];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBarRadio extends Component<HdsFilterBarRadioSignature> {\n @action\n onChange(event: Event): void {\n const { onChange } = this.args;\n if (onChange && typeof onChange === 'function') {\n onChange(event);\n }\n }\n\n get isChecked(): boolean {\n const { keyFilter, value } = this.args;\n if (keyFilter && value && 'value' in keyFilter) {\n return keyFilter.value === value;\n }\n return false;\n }\n}\n"],"names":["HdsFilterBarRadio","Component","onChange","event","args","n","prototype","action","isChecked","keyFilter","value","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAmBe,MAAMA,iBAAiB,SAASC,SAAS,CAA6B;EAEnFC,QAAQA,CAACC,KAAY,EAAQ;IAC3B,MAAM;AAAED,MAAAA;KAAU,GAAG,IAAI,CAACE,IAAI;AAC9B,IAAA,IAAIF,QAAQ,IAAI,OAAOA,QAAQ,KAAK,UAAU,EAAE;MAC9CA,QAAQ,CAACC,KAAK,CAAC;AACjB,IAAA;AACF,EAAA;AAAC,EAAA;IAAAE,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,UAAA,EAAA,CANAC,MAAM,CAAA,CAAA;AAAA;EAQP,IAAIC,SAASA,GAAY;IACvB,MAAM;MAAEC,SAAS;AAAEC,MAAAA;KAAO,GAAG,IAAI,CAACN,IAAI;AACtC,IAAA,IAAIK,SAAS,IAAIC,KAAK,IAAI,OAAO,IAAID,SAAS,EAAE;AAC9C,MAAA,OAAOA,SAAS,CAACC,KAAK,KAAKA,KAAK;AAClC,IAAA;AACA,IAAA,OAAO,KAAK;AACd,EAAA;AACF;AAACC,oBAAA,CAAAC,QAAA,EAhBoBZ,iBAAiB,CAAA;;;;"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { action } from '@ember/object';
|
|
3
|
+
import { tracked } from '@glimmer/tracking';
|
|
4
|
+
import { guidFor } from '@ember/object/internals';
|
|
5
|
+
import { HdsFilterBarRangeFilterSelectorValues } from './types.js';
|
|
6
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
7
|
+
import { g, i, n } from 'decorator-transforms/runtime';
|
|
8
|
+
import { setComponentTemplate } from '@ember/component';
|
|
9
|
+
|
|
10
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class=\"hds-filter-bar__filters-dropdown__filter-range\">\n <Hds::Form::Label>\n {{hds-t \"hds.components.filter-bar.range.label\" default=\"Number is\"}}\n </Hds::Form::Label>\n <Hds::Layout::Flex @direction=\"column\" @gap=\"16\">\n <Hds::Form::Select::Base @id={{this._selectorInputId}} {{on \"change\" this.onSelectorChange}} as |F|>\n <F.Options>\n <option value=\"\">{{hds-t\n \"hds.components.filter-bar.range.selector-input.default-value\"\n default=\"Pick a selector\"\n }}</option>\n {{#each this._selectorValues as |selectorValue|}}\n <option value={{selectorValue}} selected={{eq selectorValue this._selector}}>{{this.selectorText\n selectorValue\n }}</option>\n {{/each}}\n </F.Options>\n </Hds::Form::Select::Base>\n <Hds::Form::TextInput::Base\n @id={{this._valueInputId}}\n @type=\"text\"\n @value={{this.stringValue}}\n placeholder=\"Enter a number\"\n {{on \"change\" this.onValueChange}}\n />\n </Hds::Layout::Flex>\n</div>");
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Copyright (c) HashiCorp, Inc.
|
|
14
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const SELECTORS = Object.values(HdsFilterBarRangeFilterSelectorValues);
|
|
18
|
+
const SELECTORS_DISPLAY_TEXT = {
|
|
19
|
+
[HdsFilterBarRangeFilterSelectorValues.lessThan]: 'Less than',
|
|
20
|
+
[HdsFilterBarRangeFilterSelectorValues.lessThanOrEqualTo]: 'Less than or equal to',
|
|
21
|
+
[HdsFilterBarRangeFilterSelectorValues.equalTo]: 'Equal to',
|
|
22
|
+
[HdsFilterBarRangeFilterSelectorValues.greaterThanOrEqualTo]: 'Greater than or equal to',
|
|
23
|
+
[HdsFilterBarRangeFilterSelectorValues.greaterThan]: 'Greater than'
|
|
24
|
+
};
|
|
25
|
+
const SELECTORS_DISPLAY_SYMBOL = {
|
|
26
|
+
[HdsFilterBarRangeFilterSelectorValues.lessThan]: '<',
|
|
27
|
+
[HdsFilterBarRangeFilterSelectorValues.lessThanOrEqualTo]: '<=',
|
|
28
|
+
[HdsFilterBarRangeFilterSelectorValues.equalTo]: '=',
|
|
29
|
+
[HdsFilterBarRangeFilterSelectorValues.greaterThanOrEqualTo]: '>=',
|
|
30
|
+
[HdsFilterBarRangeFilterSelectorValues.greaterThan]: '>'
|
|
31
|
+
};
|
|
32
|
+
class HdsFilterBarRange extends Component {
|
|
33
|
+
static {
|
|
34
|
+
g(this.prototype, "_selector", [tracked]);
|
|
35
|
+
}
|
|
36
|
+
#_selector = (i(this, "_selector"), void 0);
|
|
37
|
+
static {
|
|
38
|
+
g(this.prototype, "_value", [tracked]);
|
|
39
|
+
}
|
|
40
|
+
#_value = (i(this, "_value"), void 0);
|
|
41
|
+
_selectorValues = SELECTORS;
|
|
42
|
+
_selectorInputId = 'selector-input-' + guidFor(this);
|
|
43
|
+
_valueInputId = 'value-input-' + guidFor(this);
|
|
44
|
+
constructor(owner, args) {
|
|
45
|
+
super(owner, args);
|
|
46
|
+
const {
|
|
47
|
+
keyFilter
|
|
48
|
+
} = this.args;
|
|
49
|
+
if (keyFilter && 'selector' in keyFilter) {
|
|
50
|
+
this._selector = keyFilter.selector;
|
|
51
|
+
this._value = keyFilter.value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
get stringValue() {
|
|
55
|
+
return this._value !== undefined ? this._value.toString() : undefined;
|
|
56
|
+
}
|
|
57
|
+
selectorText(selector) {
|
|
58
|
+
return SELECTORS_DISPLAY_TEXT[selector];
|
|
59
|
+
}
|
|
60
|
+
onSelectorChange(event) {
|
|
61
|
+
const select = event.target;
|
|
62
|
+
this._selector = select.value;
|
|
63
|
+
this._onChange();
|
|
64
|
+
}
|
|
65
|
+
static {
|
|
66
|
+
n(this.prototype, "onSelectorChange", [action]);
|
|
67
|
+
}
|
|
68
|
+
onValueChange(event) {
|
|
69
|
+
const input = event.target;
|
|
70
|
+
this._value = parseFloat(input.value);
|
|
71
|
+
this._onChange();
|
|
72
|
+
}
|
|
73
|
+
static {
|
|
74
|
+
n(this.prototype, "onValueChange", [action]);
|
|
75
|
+
}
|
|
76
|
+
_onChange() {
|
|
77
|
+
const {
|
|
78
|
+
onChange
|
|
79
|
+
} = this.args;
|
|
80
|
+
if (onChange && typeof onChange === 'function') {
|
|
81
|
+
onChange(this._selector, this._value);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
setComponentTemplate(TEMPLATE, HdsFilterBarRange);
|
|
86
|
+
|
|
87
|
+
export { SELECTORS, SELECTORS_DISPLAY_SYMBOL, SELECTORS_DISPLAY_TEXT, HdsFilterBarRange as default };
|
|
88
|
+
//# sourceMappingURL=range.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"range.js","sources":["../../../../src/components/hds/filter-bar/range.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 { tracked } from '@glimmer/tracking';\nimport type Owner from '@ember/owner';\nimport { guidFor } from '@ember/object/internals';\n\nimport type {\n HdsFilterBarData,\n HdsFilterBarRangeFilterSelector,\n} from './types.ts';\nimport { HdsFilterBarRangeFilterSelectorValues } from './types.ts';\n\nexport const SELECTORS: HdsFilterBarRangeFilterSelector[] = Object.values(\n HdsFilterBarRangeFilterSelectorValues\n);\n\nexport const SELECTORS_DISPLAY_TEXT: Record<\n HdsFilterBarRangeFilterSelector,\n string\n> = {\n [HdsFilterBarRangeFilterSelectorValues.lessThan]: 'Less than',\n [HdsFilterBarRangeFilterSelectorValues.lessThanOrEqualTo]:\n 'Less than or equal to',\n [HdsFilterBarRangeFilterSelectorValues.equalTo]: 'Equal to',\n [HdsFilterBarRangeFilterSelectorValues.greaterThanOrEqualTo]:\n 'Greater than or equal to',\n [HdsFilterBarRangeFilterSelectorValues.greaterThan]: 'Greater than',\n};\n\nexport const SELECTORS_DISPLAY_SYMBOL: Record<\n HdsFilterBarRangeFilterSelector,\n string\n> = {\n [HdsFilterBarRangeFilterSelectorValues.lessThan]: '<',\n [HdsFilterBarRangeFilterSelectorValues.lessThanOrEqualTo]: '<=',\n [HdsFilterBarRangeFilterSelectorValues.equalTo]: '=',\n [HdsFilterBarRangeFilterSelectorValues.greaterThanOrEqualTo]: '>=',\n [HdsFilterBarRangeFilterSelectorValues.greaterThan]: '>',\n};\n\nexport interface HdsFilterBarRangeSignature {\n Args: {\n keyFilter: HdsFilterBarData | undefined;\n onChange?: (\n selector?: HdsFilterBarRangeFilterSelector,\n value?: number\n ) => void;\n };\n Blocks: {\n default: [];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBarRange extends Component<HdsFilterBarRangeSignature> {\n @tracked private _selector: HdsFilterBarRangeFilterSelector | undefined;\n @tracked private _value: number | undefined;\n\n private _selectorValues = SELECTORS;\n private _selectorInputId = 'selector-input-' + guidFor(this);\n private _valueInputId = 'value-input-' + guidFor(this);\n\n constructor(owner: Owner, args: HdsFilterBarRangeSignature['Args']) {\n super(owner, args);\n\n const { keyFilter } = this.args;\n if (keyFilter && 'selector' in keyFilter) {\n this._selector = keyFilter.selector;\n this._value = keyFilter.value;\n }\n }\n\n get stringValue(): string | undefined {\n return this._value !== undefined ? this._value.toString() : undefined;\n }\n\n selectorText(selector: HdsFilterBarRangeFilterSelector): string {\n return SELECTORS_DISPLAY_TEXT[selector];\n }\n\n @action\n onSelectorChange(event: Event): void {\n const select = event.target as HTMLSelectElement;\n this._selector = select.value as HdsFilterBarRangeFilterSelector;\n this._onChange();\n }\n\n @action\n onValueChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this._value = parseFloat(input.value);\n this._onChange();\n }\n\n private _onChange(): void {\n const { onChange } = this.args;\n if (onChange && typeof onChange === 'function') {\n onChange(this._selector, this._value);\n }\n }\n}\n"],"names":["SELECTORS","Object","values","HdsFilterBarRangeFilterSelectorValues","SELECTORS_DISPLAY_TEXT","lessThan","lessThanOrEqualTo","equalTo","greaterThanOrEqualTo","greaterThan","SELECTORS_DISPLAY_SYMBOL","HdsFilterBarRange","Component","g","prototype","tracked","i","void 0","_selectorValues","_selectorInputId","guidFor","_valueInputId","constructor","owner","args","keyFilter","_selector","selector","_value","value","stringValue","undefined","toString","selectorText","onSelectorChange","event","select","target","_onChange","n","action","onValueChange","input","parseFloat","onChange","setComponentTemplate","TEMPLATE"],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { tracked } from '@glimmer/tracking';
|
|
3
|
+
import { action } from '@ember/object';
|
|
4
|
+
import { schedule } from '@ember/runloop';
|
|
5
|
+
import { modifier } from 'ember-modifier';
|
|
6
|
+
import './tab.js';
|
|
7
|
+
import './panel.js';
|
|
8
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
9
|
+
import { g, i, n } from 'decorator-transforms/runtime';
|
|
10
|
+
import { setComponentTemplate } from '@ember/component';
|
|
11
|
+
|
|
12
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class=\"hds-filter-bar__tabs\" ...attributes {{this._setUpFilterBarTabs}}>\n <ol class=\"hds-filter-bar__tabs__list\" aria-label={{@ariaLabel}} role=\"tablist\">\n {{yield\n (hash\n Tab=(component\n \"hds/filter-bar/tabs/tab\"\n selectedTabIndex=this._selectedTabIndex\n tabIds=this._tabIds\n panelIds=this._panelIds\n didInsertNode=this.didInsertTab\n willDestroyNode=this.willDestroyTab\n onClick=this.onClick\n onKeyUp=this.onKeyUp\n )\n )\n }}\n </ol>\n {{yield\n (hash\n Panel=(component\n \"hds/filter-bar/tabs/panel\"\n selectedTabIndex=this._selectedTabIndex\n tabIds=this._tabIds\n panelIds=this._panelIds\n didInsertNode=this.didInsertPanel\n willDestroyNode=this.willDestroyPanel\n )\n )\n }}\n</div>");
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Copyright (c) HashiCorp, Inc.
|
|
16
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const TAB_ELEMENT_SELECTOR = '.hds-filter-bar__tabs__tab__button';
|
|
20
|
+
const PANEL_ELEMENT_SELECTOR = '.hds-filter-bar__tabs__panel';
|
|
21
|
+
class HdsFilterBarTabs extends Component {
|
|
22
|
+
static {
|
|
23
|
+
g(this.prototype, "_tabIds", [tracked], function () {
|
|
24
|
+
return [];
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
#_tabIds = (i(this, "_tabIds"), void 0);
|
|
28
|
+
static {
|
|
29
|
+
g(this.prototype, "_tabNodes", [tracked], function () {
|
|
30
|
+
return [];
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
#_tabNodes = (i(this, "_tabNodes"), void 0);
|
|
34
|
+
static {
|
|
35
|
+
g(this.prototype, "_panelNodes", [tracked], function () {
|
|
36
|
+
return [];
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
#_panelNodes = (i(this, "_panelNodes"), void 0);
|
|
40
|
+
static {
|
|
41
|
+
g(this.prototype, "_panelIds", [tracked], function () {
|
|
42
|
+
return [];
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
#_panelIds = (i(this, "_panelIds"), void 0);
|
|
46
|
+
static {
|
|
47
|
+
g(this.prototype, "_selectedTabIndex", [tracked], function () {
|
|
48
|
+
return 0;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
#_selectedTabIndex = (i(this, "_selectedTabIndex"), void 0);
|
|
52
|
+
static {
|
|
53
|
+
g(this.prototype, "_selectedTabId", [tracked]);
|
|
54
|
+
}
|
|
55
|
+
#_selectedTabId = (i(this, "_selectedTabId"), void 0);
|
|
56
|
+
_element;
|
|
57
|
+
_setUpFilterBarTabs = modifier(element => {
|
|
58
|
+
const {
|
|
59
|
+
selectedTabIndex
|
|
60
|
+
} = this.args;
|
|
61
|
+
if (selectedTabIndex) {
|
|
62
|
+
this._selectedTabIndex = selectedTabIndex;
|
|
63
|
+
}
|
|
64
|
+
this._element = element;
|
|
65
|
+
return () => {};
|
|
66
|
+
});
|
|
67
|
+
didInsertTab() {
|
|
68
|
+
// eslint-disable-next-line ember/no-runloop
|
|
69
|
+
schedule('afterRender', () => {
|
|
70
|
+
this.updateTabs();
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
static {
|
|
74
|
+
n(this.prototype, "didInsertTab", [action]);
|
|
75
|
+
}
|
|
76
|
+
willDestroyTab(element) {
|
|
77
|
+
// eslint-disable-next-line ember/no-runloop
|
|
78
|
+
schedule('afterRender', () => {
|
|
79
|
+
this._tabNodes = this._tabNodes.filter(node => node.id !== element.id);
|
|
80
|
+
this._tabIds = this._tabIds.filter(tabId => tabId !== element.id);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
static {
|
|
84
|
+
n(this.prototype, "willDestroyTab", [action]);
|
|
85
|
+
}
|
|
86
|
+
didInsertPanel() {
|
|
87
|
+
// eslint-disable-next-line ember/no-runloop
|
|
88
|
+
schedule('afterRender', () => {
|
|
89
|
+
this.updatePanels();
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
static {
|
|
93
|
+
n(this.prototype, "didInsertPanel", [action]);
|
|
94
|
+
}
|
|
95
|
+
willDestroyPanel(element) {
|
|
96
|
+
// eslint-disable-next-line ember/no-runloop
|
|
97
|
+
schedule('afterRender', () => {
|
|
98
|
+
this._panelNodes = this._panelNodes.filter(node => node.id !== element.id);
|
|
99
|
+
this._panelIds = this._panelIds.filter(panelId => panelId !== element.id);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
static {
|
|
103
|
+
n(this.prototype, "willDestroyPanel", [action]);
|
|
104
|
+
}
|
|
105
|
+
onClick(event, tabIndex) {
|
|
106
|
+
console.log('onClick event in Tabs:', event, tabIndex);
|
|
107
|
+
this._selectedTabIndex = tabIndex;
|
|
108
|
+
|
|
109
|
+
// invoke the callback function if it's provided as argument
|
|
110
|
+
if (typeof this.args.onClickTab === 'function') {
|
|
111
|
+
this.args.onClickTab(event, tabIndex);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
static {
|
|
115
|
+
n(this.prototype, "onClick", [action]);
|
|
116
|
+
}
|
|
117
|
+
onKeyUp(event, tabIndex) {
|
|
118
|
+
const leftArrow = 'ArrowLeft';
|
|
119
|
+
const rightArrow = 'ArrowRight';
|
|
120
|
+
const upArrow = 'ArrowUp';
|
|
121
|
+
const downArrow = 'ArrowDown';
|
|
122
|
+
const enterKey = 'Enter';
|
|
123
|
+
const spaceKey = ' ';
|
|
124
|
+
if (event.key === rightArrow || event.key === downArrow) {
|
|
125
|
+
const nextTabIndex = (tabIndex + 1) % this._tabIds.length;
|
|
126
|
+
this.focusTab(nextTabIndex, event);
|
|
127
|
+
} else if (event.key === leftArrow || event.key === upArrow) {
|
|
128
|
+
const prevTabIndex = (tabIndex + this._tabIds.length - 1) % this._tabIds.length;
|
|
129
|
+
this.focusTab(prevTabIndex, event);
|
|
130
|
+
} else if (event.key === enterKey || event.key === spaceKey) {
|
|
131
|
+
this._selectedTabIndex = tabIndex;
|
|
132
|
+
}
|
|
133
|
+
// scroll selected tab into view (it may be out of view when activated using a keyboard with `prev/next`)
|
|
134
|
+
const parentNode = this._tabNodes[this._selectedTabIndex]?.parentNode;
|
|
135
|
+
if (parentNode instanceof HTMLElement) {
|
|
136
|
+
parentNode.scrollIntoView({
|
|
137
|
+
behavior: 'smooth',
|
|
138
|
+
block: 'nearest',
|
|
139
|
+
inline: 'nearest'
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Focus tab for keyboard & mouse navigation:
|
|
145
|
+
static {
|
|
146
|
+
n(this.prototype, "onKeyUp", [action]);
|
|
147
|
+
}
|
|
148
|
+
focusTab(tabIndex, event) {
|
|
149
|
+
event.preventDefault();
|
|
150
|
+
this._tabNodes[tabIndex]?.focus();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Update the tab arrays based on how they are ordered in the DOM
|
|
154
|
+
updateTabs() {
|
|
155
|
+
const tabs = this._element.querySelectorAll(TAB_ELEMENT_SELECTOR);
|
|
156
|
+
let newTabIds = [];
|
|
157
|
+
let newTabNodes = [];
|
|
158
|
+
tabs.forEach(tab => {
|
|
159
|
+
newTabIds = [...newTabIds, tab.id];
|
|
160
|
+
newTabNodes = [...newTabNodes, tab];
|
|
161
|
+
});
|
|
162
|
+
this._tabIds = newTabIds;
|
|
163
|
+
this._tabNodes = newTabNodes;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Update the panel arrays based on how they are ordered in the DOM
|
|
167
|
+
updatePanels() {
|
|
168
|
+
const panels = this._element.querySelectorAll(PANEL_ELEMENT_SELECTOR);
|
|
169
|
+
let newPanelIds = [];
|
|
170
|
+
let newPanelNodes = [];
|
|
171
|
+
panels.forEach(panel => {
|
|
172
|
+
newPanelIds = [...newPanelIds, panel.id];
|
|
173
|
+
newPanelNodes = [...newPanelNodes, panel];
|
|
174
|
+
});
|
|
175
|
+
this._panelIds = newPanelIds;
|
|
176
|
+
this._panelNodes = newPanelNodes;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
setComponentTemplate(TEMPLATE, HdsFilterBarTabs);
|
|
180
|
+
|
|
181
|
+
export { HdsFilterBarTabs as default };
|
|
182
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/hds/filter-bar/tabs/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 { modifier } from 'ember-modifier';\nimport type { WithBoundArgs } from '@glint/template';\nimport HdsFilterBarTabsTabComponent from './tab.ts';\nimport HdsFilterBarTabsPanelComponent from './panel.ts';\n\nconst TAB_ELEMENT_SELECTOR = '.hds-filter-bar__tabs__tab__button';\nconst PANEL_ELEMENT_SELECTOR = '.hds-filter-bar__tabs__panel';\n\nexport interface HdsFilterBarTabsSignature {\n Args: {\n selectedTabIndex?: number;\n ariaLabel: string;\n onClickTab?: (event: MouseEvent, tabIndex: number) => void;\n };\n Blocks: {\n default: [\n {\n Tab?: WithBoundArgs<\n typeof HdsFilterBarTabsTabComponent,\n | 'selectedTabIndex'\n | 'tabIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n | 'onClick'\n | 'onKeyUp'\n >;\n Panel?: WithBoundArgs<\n typeof HdsFilterBarTabsPanelComponent,\n | 'selectedTabIndex'\n | 'tabIds'\n | 'panelIds'\n | 'didInsertNode'\n | 'willDestroyNode'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBarTabs extends Component<HdsFilterBarTabsSignature> {\n @tracked private _tabIds: string[] = [];\n @tracked private _tabNodes: HTMLElement[] = [];\n @tracked private _panelNodes: HTMLElement[] = [];\n @tracked private _panelIds: string[] = [];\n @tracked private _selectedTabIndex: number = 0;\n @tracked private _selectedTabId?: string;\n\n private _element!: HTMLDivElement;\n\n private _setUpFilterBarTabs = modifier((element: HTMLDivElement) => {\n const { selectedTabIndex } = this.args;\n\n if (selectedTabIndex) {\n this._selectedTabIndex = selectedTabIndex;\n }\n\n this._element = element;\n\n return () => {};\n });\n\n @action\n didInsertTab(): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this.updateTabs();\n });\n }\n\n @action\n willDestroyTab(element: HTMLElement): void {\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', (): void => {\n this._tabNodes = this._tabNodes.filter(\n (node): boolean => node.id !== element.id\n );\n this._tabIds = this._tabIds.filter(\n (tabId): boolean => tabId !== element.id\n );\n });\n }\n\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 onClick(event: MouseEvent, tabIndex: number): void {\n console.log('onClick event in Tabs:', event, tabIndex);\n this._selectedTabIndex = tabIndex;\n\n // invoke the callback function if it's provided as argument\n if (typeof this.args.onClickTab === 'function') {\n this.args.onClickTab(event, tabIndex);\n }\n }\n\n @action\n onKeyUp(event: KeyboardEvent, tabIndex: number): void {\n const leftArrow = 'ArrowLeft';\n const rightArrow = 'ArrowRight';\n const upArrow = 'ArrowUp';\n const downArrow = 'ArrowDown';\n const enterKey = 'Enter';\n const spaceKey = ' ';\n\n if (event.key === rightArrow || event.key === downArrow) {\n const nextTabIndex = (tabIndex + 1) % this._tabIds.length;\n this.focusTab(nextTabIndex, event);\n } else if (event.key === leftArrow || event.key === upArrow) {\n const prevTabIndex =\n (tabIndex + this._tabIds.length - 1) % this._tabIds.length;\n this.focusTab(prevTabIndex, event);\n } else if (event.key === enterKey || event.key === spaceKey) {\n this._selectedTabIndex = tabIndex;\n }\n // scroll selected tab into view (it may be out of view when activated using a keyboard with `prev/next`)\n const parentNode = this._tabNodes[this._selectedTabIndex]?.parentNode;\n if (parentNode instanceof HTMLElement) {\n parentNode.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n // Focus tab for keyboard & mouse navigation:\n focusTab(tabIndex: number, event: KeyboardEvent): void {\n event.preventDefault();\n this._tabNodes[tabIndex]?.focus();\n }\n\n // Update the tab arrays based on how they are ordered in the DOM\n private updateTabs(): void {\n const tabs = this._element.querySelectorAll(TAB_ELEMENT_SELECTOR);\n let newTabIds: string[] = [];\n let newTabNodes: HTMLElement[] = [];\n tabs.forEach((tab) => {\n newTabIds = [...newTabIds, tab.id];\n newTabNodes = [...newTabNodes, tab as HTMLElement];\n });\n this._tabIds = newTabIds;\n this._tabNodes = newTabNodes;\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: string[] = [];\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"],"names":["TAB_ELEMENT_SELECTOR","PANEL_ELEMENT_SELECTOR","HdsFilterBarTabs","Component","g","prototype","tracked","i","void 0","_element","_setUpFilterBarTabs","modifier","element","selectedTabIndex","args","_selectedTabIndex","didInsertTab","schedule","updateTabs","n","action","willDestroyTab","_tabNodes","filter","node","id","_tabIds","tabId","didInsertPanel","updatePanels","willDestroyPanel","_panelNodes","_panelIds","panelId","onClick","event","tabIndex","console","log","onClickTab","onKeyUp","leftArrow","rightArrow","upArrow","downArrow","enterKey","spaceKey","key","nextTabIndex","length","focusTab","prevTabIndex","parentNode","HTMLElement","scrollIntoView","behavior","block","inline","preventDefault","focus","tabs","querySelectorAll","newTabIds","newTabNodes","forEach","tab","panels","newPanelIds","newPanelNodes","panel","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AACA;;AAWA,MAAMA,oBAAoB,GAAG,oCAAoC;AACjE,MAAMC,sBAAsB,GAAG,8BAA8B;AAmC9C,MAAMC,gBAAgB,SAASC,SAAS,CAA4B;AAAA,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,SAAA,EAAA,CAChFC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA6B,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,QAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CACtCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAoC,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,aAAA,EAAA,CAC7CC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAsC,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,YAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,aAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,WAAA,EAAA,CAC/CC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAA+B,EAAE;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,UAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,WAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,mBAAA,EAAA,CACxCC,OAAO,CAAA,EAAA,YAAA;AAAA,MAAA,OAAqC,CAAC;AAAA,IAAA,CAAA,CAAA;AAAA;AAAA,EAAA,kBAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,EAAAC,MAAA;AAAA,EAAA;IAAAJ,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,gBAAA,EAAA,CAC7CC,OAAO,CAAA,CAAA;AAAA;AAAA,EAAA,eAAA,IAAAC,CAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,EAAAC,MAAA;EAEAC,QAAQ;AAERC,EAAAA,mBAAmB,GAAGC,QAAQ,CAAEC,OAAuB,IAAK;IAClE,MAAM;AAAEC,MAAAA;KAAkB,GAAG,IAAI,CAACC,IAAI;AAEtC,IAAA,IAAID,gBAAgB,EAAE;MACpB,IAAI,CAACE,iBAAiB,GAAGF,gBAAgB;AAC3C,IAAA;IAEA,IAAI,CAACJ,QAAQ,GAAGG,OAAO;IAEvB,OAAO,MAAM,CAAC,CAAC;AACjB,EAAA,CAAC,CAAC;AAGFI,EAAAA,YAAYA,GAAS;AACnB;IACAC,QAAQ,CAAC,aAAa,EAAE,MAAY;MAClC,IAAI,CAACC,UAAU,EAAE;AACnB,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAC,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,cAAA,EAAA,CANAe,MAAM,CAAA,CAAA;AAAA;EASPC,cAAcA,CAACT,OAAoB,EAAQ;AACzC;IACAK,QAAQ,CAAC,aAAa,EAAE,MAAY;AAClC,MAAA,IAAI,CAACK,SAAS,GAAG,IAAI,CAACA,SAAS,CAACC,MAAM,CACnCC,IAAI,IAAcA,IAAI,CAACC,EAAE,KAAKb,OAAO,CAACa,EACzC,CAAC;AACD,MAAA,IAAI,CAACC,OAAO,GAAG,IAAI,CAACA,OAAO,CAACH,MAAM,CAC/BI,KAAK,IAAcA,KAAK,KAAKf,OAAO,CAACa,EACxC,CAAC;AACH,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAN,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,gBAAA,EAAA,CAXAe,MAAM,CAAA,CAAA;AAAA;AAcPQ,EAAAA,cAAcA,GAAS;AACrB;IACAX,QAAQ,CAAC,aAAa,EAAE,MAAY;MAClC,IAAI,CAACY,YAAY,EAAE;AACrB,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAV,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,gBAAA,EAAA,CANAe,MAAM,CAAA,CAAA;AAAA;EASPU,gBAAgBA,CAAClB,OAAoB,EAAQ;AAC3C;IACAK,QAAQ,CAAC,aAAa,EAAE,MAAY;AAClC,MAAA,IAAI,CAACc,WAAW,GAAG,IAAI,CAACA,WAAW,CAACR,MAAM,CACvCC,IAAI,IAAcA,IAAI,CAACC,EAAE,KAAKb,OAAO,CAACa,EACzC,CAAC;AACD,MAAA,IAAI,CAACO,SAAS,GAAG,IAAI,CAACA,SAAS,CAACT,MAAM,CACnCU,OAAO,IAAcA,OAAO,KAAKrB,OAAO,CAACa,EAC5C,CAAC;AACH,IAAA,CAAC,CAAC;AACJ,EAAA;AAAC,EAAA;IAAAN,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,kBAAA,EAAA,CAXAe,MAAM,CAAA,CAAA;AAAA;AAcPc,EAAAA,OAAOA,CAACC,KAAiB,EAAEC,QAAgB,EAAQ;IACjDC,OAAO,CAACC,GAAG,CAAC,wBAAwB,EAAEH,KAAK,EAAEC,QAAQ,CAAC;IACtD,IAAI,CAACrB,iBAAiB,GAAGqB,QAAQ;;AAEjC;IACA,IAAI,OAAO,IAAI,CAACtB,IAAI,CAACyB,UAAU,KAAK,UAAU,EAAE;MAC9C,IAAI,CAACzB,IAAI,CAACyB,UAAU,CAACJ,KAAK,EAAEC,QAAQ,CAAC;AACvC,IAAA;AACF,EAAA;AAAC,EAAA;IAAAjB,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,SAAA,EAAA,CATAe,MAAM,CAAA,CAAA;AAAA;AAYPoB,EAAAA,OAAOA,CAACL,KAAoB,EAAEC,QAAgB,EAAQ;IACpD,MAAMK,SAAS,GAAG,WAAW;IAC7B,MAAMC,UAAU,GAAG,YAAY;IAC/B,MAAMC,OAAO,GAAG,SAAS;IACzB,MAAMC,SAAS,GAAG,WAAW;IAC7B,MAAMC,QAAQ,GAAG,OAAO;IACxB,MAAMC,QAAQ,GAAG,GAAG;IAEpB,IAAIX,KAAK,CAACY,GAAG,KAAKL,UAAU,IAAIP,KAAK,CAACY,GAAG,KAAKH,SAAS,EAAE;MACvD,MAAMI,YAAY,GAAG,CAACZ,QAAQ,GAAG,CAAC,IAAI,IAAI,CAACV,OAAO,CAACuB,MAAM;AACzD,MAAA,IAAI,CAACC,QAAQ,CAACF,YAAY,EAAEb,KAAK,CAAC;AACpC,IAAA,CAAC,MAAM,IAAIA,KAAK,CAACY,GAAG,KAAKN,SAAS,IAAIN,KAAK,CAACY,GAAG,KAAKJ,OAAO,EAAE;AAC3D,MAAA,MAAMQ,YAAY,GAChB,CAACf,QAAQ,GAAG,IAAI,CAACV,OAAO,CAACuB,MAAM,GAAG,CAAC,IAAI,IAAI,CAACvB,OAAO,CAACuB,MAAM;AAC5D,MAAA,IAAI,CAACC,QAAQ,CAACC,YAAY,EAAEhB,KAAK,CAAC;AACpC,IAAA,CAAC,MAAM,IAAIA,KAAK,CAACY,GAAG,KAAKF,QAAQ,IAAIV,KAAK,CAACY,GAAG,KAAKD,QAAQ,EAAE;MAC3D,IAAI,CAAC/B,iBAAiB,GAAGqB,QAAQ;AACnC,IAAA;AACA;IACA,MAAMgB,UAAU,GAAG,IAAI,CAAC9B,SAAS,CAAC,IAAI,CAACP,iBAAiB,CAAC,EAAEqC,UAAU;IACrE,IAAIA,UAAU,YAAYC,WAAW,EAAE;MACrCD,UAAU,CAACE,cAAc,CAAC;AACxBC,QAAAA,QAAQ,EAAE,QAAQ;AAClBC,QAAAA,KAAK,EAAE,SAAS;AAChBC,QAAAA,MAAM,EAAE;AACV,OAAC,CAAC;AACJ,IAAA;AACF,EAAA;;AAEA;AAAA,EAAA;IAAAtC,CAAA,CAAA,IAAA,CAAAd,SAAA,EAAA,SAAA,EAAA,CA9BCe,MAAM,CAAA,CAAA;AAAA;AA+BP8B,EAAAA,QAAQA,CAACd,QAAgB,EAAED,KAAoB,EAAQ;IACrDA,KAAK,CAACuB,cAAc,EAAE;IACtB,IAAI,CAACpC,SAAS,CAACc,QAAQ,CAAC,EAAEuB,KAAK,EAAE;AACnC,EAAA;;AAEA;AACQzC,EAAAA,UAAUA,GAAS;IACzB,MAAM0C,IAAI,GAAG,IAAI,CAACnD,QAAQ,CAACoD,gBAAgB,CAAC7D,oBAAoB,CAAC;IACjE,IAAI8D,SAAmB,GAAG,EAAE;IAC5B,IAAIC,WAA0B,GAAG,EAAE;AACnCH,IAAAA,IAAI,CAACI,OAAO,CAAEC,GAAG,IAAK;MACpBH,SAAS,GAAG,CAAC,GAAGA,SAAS,EAAEG,GAAG,CAACxC,EAAE,CAAC;AAClCsC,MAAAA,WAAW,GAAG,CAAC,GAAGA,WAAW,EAAEE,GAAG,CAAgB;AACpD,IAAA,CAAC,CAAC;IACF,IAAI,CAACvC,OAAO,GAAGoC,SAAS;IACxB,IAAI,CAACxC,SAAS,GAAGyC,WAAW;AAC9B,EAAA;;AAEA;AACQlC,EAAAA,YAAYA,GAAS;IAC3B,MAAMqC,MAAM,GAAG,IAAI,CAACzD,QAAQ,CAACoD,gBAAgB,CAAC5D,sBAAsB,CAAC;IACrE,IAAIkE,WAAqB,GAAG,EAAE;IAC9B,IAAIC,aAA4B,GAAG,EAAE;AACrCF,IAAAA,MAAM,CAACF,OAAO,CAAEK,KAAK,IAAK;MACxBF,WAAW,GAAG,CAAC,GAAGA,WAAW,EAAEE,KAAK,CAAC5C,EAAE,CAAC;AACxC2C,MAAAA,aAAa,GAAG,CAAC,GAAGA,aAAa,EAAEC,KAAK,CAAgB;AAC1D,IAAA,CAAC,CAAC;IACF,IAAI,CAACrC,SAAS,GAAGmC,WAAW;IAC5B,IAAI,CAACpC,WAAW,GAAGqC,aAAa;AAClC,EAAA;AACF;AAACE,oBAAA,CAAAC,QAAA,EAxIoBrE,gBAAgB,CAAA;;;;"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import Component from '@glimmer/component';
|
|
2
|
+
import { guidFor } from '@ember/object/internals';
|
|
3
|
+
import { action } from '@ember/object';
|
|
4
|
+
import { modifier } from 'ember-modifier';
|
|
5
|
+
import { precompileTemplate } from '@ember/template-compilation';
|
|
6
|
+
import { n } from 'decorator-transforms/runtime';
|
|
7
|
+
import { setComponentTemplate } from '@ember/component';
|
|
8
|
+
|
|
9
|
+
var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<section\n class=\"hds-filter-bar__tabs__panel\"\n ...attributes\n role=\"tabpanel\"\n id={{this._panelId}}\n hidden={{not this.isVisible}}\n aria-labelledby={{this.coupledTabId}}\n {{this._setUpPanel this.didInsertNode this.willDestroyNode}}\n>\n {{#if this.isVisible}}\n {{yield}}\n {{/if}}\n</section>");
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Copyright (c) HashiCorp, Inc.
|
|
13
|
+
* SPDX-License-Identifier: MPL-2.0
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
class HdsFilterBarTabsPanel extends Component {
|
|
17
|
+
_panelId = 'panel-' + guidFor(this);
|
|
18
|
+
_elementId;
|
|
19
|
+
_setUpPanel = modifier((element, [insertCallbackFunction, destroyCallbackFunction]) => {
|
|
20
|
+
if (typeof insertCallbackFunction === 'function') {
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
22
|
+
insertCallbackFunction(element);
|
|
23
|
+
}
|
|
24
|
+
return () => {
|
|
25
|
+
if (typeof destroyCallbackFunction === 'function') {
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
27
|
+
destroyCallbackFunction(element);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
get nodeIndex() {
|
|
32
|
+
return this.args.panelIds?.indexOf(this._panelId);
|
|
33
|
+
}
|
|
34
|
+
get coupledTabId() {
|
|
35
|
+
return this.nodeIndex !== undefined ? this.args.tabIds?.[this.nodeIndex] : undefined;
|
|
36
|
+
}
|
|
37
|
+
get isVisible() {
|
|
38
|
+
return this.nodeIndex === this.args.selectedTabIndex;
|
|
39
|
+
}
|
|
40
|
+
didInsertNode(element) {
|
|
41
|
+
const {
|
|
42
|
+
didInsertNode
|
|
43
|
+
} = this.args;
|
|
44
|
+
if (typeof didInsertNode === 'function') {
|
|
45
|
+
this._elementId = element.id;
|
|
46
|
+
didInsertNode();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
static {
|
|
50
|
+
n(this.prototype, "didInsertNode", [action]);
|
|
51
|
+
}
|
|
52
|
+
willDestroyNode(element) {
|
|
53
|
+
const {
|
|
54
|
+
willDestroyNode
|
|
55
|
+
} = this.args;
|
|
56
|
+
if (typeof willDestroyNode === 'function') {
|
|
57
|
+
willDestroyNode(element);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
static {
|
|
61
|
+
n(this.prototype, "willDestroyNode", [action]);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
setComponentTemplate(TEMPLATE, HdsFilterBarTabsPanel);
|
|
65
|
+
|
|
66
|
+
export { HdsFilterBarTabsPanel as default };
|
|
67
|
+
//# sourceMappingURL=panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel.js","sources":["../../../../../src/components/hds/filter-bar/tabs/panel.ts"],"sourcesContent":["/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Component from '@glimmer/component';\nimport { guidFor } from '@ember/object/internals';\nimport { action } from '@ember/object';\nimport { modifier } from 'ember-modifier';\n\nexport interface HdsFilterBarTabsPanelSignature {\n Args: {\n selectedTabIndex?: number;\n tabIds?: string[];\n panelIds?: string[];\n didInsertNode?: () => void;\n willDestroyNode?: (element: HTMLElement) => void;\n };\n Blocks: {\n default: [];\n };\n Element: HTMLElement;\n}\n\nexport default class HdsFilterBarTabsPanel extends Component<HdsFilterBarTabsPanelSignature> {\n private _panelId = 'panel-' + guidFor(this);\n private _elementId?: string;\n\n private _setUpPanel = modifier(\n (\n element: HTMLElement,\n [insertCallbackFunction, destroyCallbackFunction]\n ) => {\n if (typeof insertCallbackFunction === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n insertCallbackFunction(element);\n }\n\n return () => {\n if (typeof destroyCallbackFunction === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n destroyCallbackFunction(element);\n }\n };\n }\n );\n\n get nodeIndex(): number | undefined {\n return this.args.panelIds?.indexOf(this._panelId);\n }\n\n get coupledTabId(): string | undefined {\n return this.nodeIndex !== undefined\n ? this.args.tabIds?.[this.nodeIndex]\n : undefined;\n }\n\n get isVisible(): boolean {\n return this.nodeIndex === this.args.selectedTabIndex;\n }\n\n @action\n didInsertNode(element: HTMLElement): void {\n const { didInsertNode } = this.args;\n\n if (typeof didInsertNode === 'function') {\n this._elementId = element.id;\n didInsertNode();\n }\n }\n\n @action\n willDestroyNode(element: HTMLElement): void {\n const { willDestroyNode } = this.args;\n\n if (typeof willDestroyNode === 'function') {\n willDestroyNode(element);\n }\n }\n}\n"],"names":["HdsFilterBarTabsPanel","Component","_panelId","guidFor","_elementId","_setUpPanel","modifier","element","insertCallbackFunction","destroyCallbackFunction","nodeIndex","args","panelIds","indexOf","coupledTabId","undefined","tabIds","isVisible","selectedTabIndex","didInsertNode","id","n","prototype","action","willDestroyNode","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;;AAqBe,MAAMA,qBAAqB,SAASC,SAAS,CAAiC;AACnFC,EAAAA,QAAQ,GAAG,QAAQ,GAAGC,OAAO,CAAC,IAAI,CAAC;EACnCC,UAAU;EAEVC,WAAW,GAAGC,QAAQ,CAC5B,CACEC,OAAoB,EACpB,CAACC,sBAAsB,EAAEC,uBAAuB,CAAC,KAC9C;AACH,IAAA,IAAI,OAAOD,sBAAsB,KAAK,UAAU,EAAE;AAChD;MACAA,sBAAsB,CAACD,OAAO,CAAC;AACjC,IAAA;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,OAAOE,uBAAuB,KAAK,UAAU,EAAE;AACjD;QACAA,uBAAuB,CAACF,OAAO,CAAC;AAClC,MAAA;IACF,CAAC;AACH,EAAA,CACF,CAAC;EAED,IAAIG,SAASA,GAAuB;IAClC,OAAO,IAAI,CAACC,IAAI,CAACC,QAAQ,EAAEC,OAAO,CAAC,IAAI,CAACX,QAAQ,CAAC;AACnD,EAAA;EAEA,IAAIY,YAAYA,GAAuB;AACrC,IAAA,OAAO,IAAI,CAACJ,SAAS,KAAKK,SAAS,GAC/B,IAAI,CAACJ,IAAI,CAACK,MAAM,GAAG,IAAI,CAACN,SAAS,CAAC,GAClCK,SAAS;AACf,EAAA;EAEA,IAAIE,SAASA,GAAY;IACvB,OAAO,IAAI,CAACP,SAAS,KAAK,IAAI,CAACC,IAAI,CAACO,gBAAgB;AACtD,EAAA;EAGAC,aAAaA,CAACZ,OAAoB,EAAQ;IACxC,MAAM;AAAEY,MAAAA;KAAe,GAAG,IAAI,CAACR,IAAI;AAEnC,IAAA,IAAI,OAAOQ,aAAa,KAAK,UAAU,EAAE;AACvC,MAAA,IAAI,CAACf,UAAU,GAAGG,OAAO,CAACa,EAAE;AAC5BD,MAAAA,aAAa,EAAE;AACjB,IAAA;AACF,EAAA;AAAC,EAAA;IAAAE,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,eAAA,EAAA,CARAC,MAAM,CAAA,CAAA;AAAA;EAWPC,eAAeA,CAACjB,OAAoB,EAAQ;IAC1C,MAAM;AAAEiB,MAAAA;KAAiB,GAAG,IAAI,CAACb,IAAI;AAErC,IAAA,IAAI,OAAOa,eAAe,KAAK,UAAU,EAAE;MACzCA,eAAe,CAACjB,OAAO,CAAC;AAC1B,IAAA;AACF,EAAA;AAAC,EAAA;IAAAc,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,iBAAA,EAAA,CAPAC,MAAM,CAAA,CAAA;AAAA;AAQT;AAACE,oBAAA,CAAAC,QAAA,EAvDoB1B,qBAAqB,CAAA;;;;"}
|