@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.
Files changed (56) hide show
  1. package/declarations/components/hds/advanced-table/index.d.ts +10 -0
  2. package/declarations/components/hds/filter-bar/checkbox.d.ts +21 -0
  3. package/declarations/components/hds/filter-bar/filter-group.d.ts +46 -0
  4. package/declarations/components/hds/filter-bar/filters-dropdown.d.ts +36 -0
  5. package/declarations/components/hds/filter-bar/index.d.ts +40 -0
  6. package/declarations/components/hds/filter-bar/radio.d.ts +21 -0
  7. package/declarations/components/hds/filter-bar/range.d.ts +33 -0
  8. package/declarations/components/hds/filter-bar/tabs/index.d.ts +43 -0
  9. package/declarations/components/hds/filter-bar/tabs/panel.d.ts +28 -0
  10. package/declarations/components/hds/filter-bar/tabs/tab.d.ts +33 -0
  11. package/declarations/components/hds/filter-bar/types.d.ts +52 -0
  12. package/declarations/components.d.ts +10 -0
  13. package/declarations/template-registry.d.ts +27 -0
  14. package/dist/_app_/components/hds/filter-bar/checkbox.js +1 -0
  15. package/dist/_app_/components/hds/filter-bar/filter-group.js +1 -0
  16. package/dist/_app_/components/hds/filter-bar/filters-dropdown.js +1 -0
  17. package/dist/_app_/components/hds/filter-bar/radio.js +1 -0
  18. package/dist/_app_/components/hds/filter-bar/range.js +1 -0
  19. package/dist/_app_/components/hds/filter-bar/tabs/panel.js +1 -0
  20. package/dist/_app_/components/hds/filter-bar/tabs/tab.js +1 -0
  21. package/dist/_app_/components/hds/filter-bar/tabs.js +1 -0
  22. package/dist/_app_/components/hds/filter-bar.js +1 -0
  23. package/dist/components/hds/advanced-table/index.js +10 -1
  24. package/dist/components/hds/advanced-table/index.js.map +1 -1
  25. package/dist/components/hds/filter-bar/checkbox.js +40 -0
  26. package/dist/components/hds/filter-bar/checkbox.js.map +1 -0
  27. package/dist/components/hds/filter-bar/filter-group.js +173 -0
  28. package/dist/components/hds/filter-bar/filter-group.js.map +1 -0
  29. package/dist/components/hds/filter-bar/filters-dropdown.js +125 -0
  30. package/dist/components/hds/filter-bar/filters-dropdown.js.map +1 -0
  31. package/dist/components/hds/filter-bar/index.js +162 -0
  32. package/dist/components/hds/filter-bar/index.js.map +1 -0
  33. package/dist/components/hds/filter-bar/radio.js +40 -0
  34. package/dist/components/hds/filter-bar/radio.js.map +1 -0
  35. package/dist/components/hds/filter-bar/range.js +88 -0
  36. package/dist/components/hds/filter-bar/range.js.map +1 -0
  37. package/dist/components/hds/filter-bar/tabs/index.js +182 -0
  38. package/dist/components/hds/filter-bar/tabs/index.js.map +1 -0
  39. package/dist/components/hds/filter-bar/tabs/panel.js +67 -0
  40. package/dist/components/hds/filter-bar/tabs/panel.js.map +1 -0
  41. package/dist/components/hds/filter-bar/tabs/tab.js +99 -0
  42. package/dist/components/hds/filter-bar/tabs/tab.js.map +1 -0
  43. package/dist/components/hds/filter-bar/types.js +24 -0
  44. package/dist/components/hds/filter-bar/types.js.map +1 -0
  45. package/dist/components.js +10 -0
  46. package/dist/components.js.map +1 -1
  47. package/dist/styles/@hashicorp/design-system-components.css +198 -3
  48. package/dist/styles/@hashicorp/design-system-components.scss +1 -0
  49. package/dist/styles/components/advanced-table.scss +67 -1
  50. package/dist/styles/components/filter-bar.scss +155 -0
  51. package/package.json +10 -1
  52. package/translations/hds/components/advanced-table/en-us.yaml +3 -0
  53. package/translations/hds/components/filter-bar/en-us.yaml +3 -0
  54. package/translations/hds/components/filter-bar/filter-options/en-us.yaml +1 -0
  55. package/translations/hds/components/filter-bar/filters-dropdown/en-us.yaml +7 -0
  56. 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;;;;"}