@hashicorp/design-system-components 5.0.0 → 5.1.0-rc-20251125151324

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 (76) hide show
  1. package/declarations/components/hds/advanced-table/index.d.ts +10 -0
  2. package/declarations/components/hds/dropdown/list-item/checkbox.d.ts +1 -0
  3. package/declarations/components/hds/dropdown/list-item/radio.d.ts +1 -0
  4. package/declarations/components/hds/filter-bar/dropdown.d.ts +38 -0
  5. package/declarations/components/hds/filter-bar/filter-group/checkbox.d.ts +21 -0
  6. package/declarations/components/hds/filter-bar/filter-group/date.d.ts +47 -0
  7. package/declarations/components/hds/filter-bar/filter-group/generic.d.ts +24 -0
  8. package/declarations/components/hds/filter-bar/filter-group/index.d.ts +51 -0
  9. package/declarations/components/hds/filter-bar/filter-group/numerical.d.ts +45 -0
  10. package/declarations/components/hds/filter-bar/filter-group/radio.d.ts +21 -0
  11. package/declarations/components/hds/filter-bar/index.d.ts +48 -0
  12. package/declarations/components/hds/filter-bar/tabs/index.d.ts +43 -0
  13. package/declarations/components/hds/filter-bar/tabs/panel.d.ts +28 -0
  14. package/declarations/components/hds/filter-bar/tabs/tab.d.ts +34 -0
  15. package/declarations/components/hds/filter-bar/types.d.ts +86 -0
  16. package/declarations/components/hds/form/text-input/field.d.ts +1 -1
  17. package/declarations/components.d.ts +12 -0
  18. package/declarations/template-registry.d.ts +33 -0
  19. package/dist/_app_/components/hds/filter-bar/dropdown.js +1 -0
  20. package/dist/_app_/components/hds/filter-bar/filter-group/checkbox.js +1 -0
  21. package/dist/_app_/components/hds/filter-bar/filter-group/date.js +1 -0
  22. package/dist/_app_/components/hds/filter-bar/filter-group/generic.js +1 -0
  23. package/dist/_app_/components/hds/filter-bar/filter-group/numerical.js +1 -0
  24. package/dist/_app_/components/hds/filter-bar/filter-group/radio.js +1 -0
  25. package/dist/_app_/components/hds/filter-bar/filter-group.js +1 -0
  26. package/dist/_app_/components/hds/filter-bar/tabs/panel.js +1 -0
  27. package/dist/_app_/components/hds/filter-bar/tabs/tab.js +1 -0
  28. package/dist/_app_/components/hds/filter-bar/tabs.js +1 -0
  29. package/dist/_app_/components/hds/filter-bar.js +1 -0
  30. package/dist/components/hds/advanced-table/index.js +10 -1
  31. package/dist/components/hds/advanced-table/index.js.map +1 -1
  32. package/dist/components/hds/dropdown/list-item/checkbox.js.map +1 -1
  33. package/dist/components/hds/dropdown/list-item/radio.js.map +1 -1
  34. package/dist/components/hds/filter-bar/dropdown.js +120 -0
  35. package/dist/components/hds/filter-bar/dropdown.js.map +1 -0
  36. package/dist/components/hds/filter-bar/filter-group/checkbox.js +40 -0
  37. package/dist/components/hds/filter-bar/filter-group/checkbox.js.map +1 -0
  38. package/dist/components/hds/filter-bar/filter-group/date.js +164 -0
  39. package/dist/components/hds/filter-bar/filter-group/date.js.map +1 -0
  40. package/dist/components/hds/filter-bar/filter-group/generic.js +43 -0
  41. package/dist/components/hds/filter-bar/filter-group/generic.js.map +1 -0
  42. package/dist/components/hds/filter-bar/filter-group/index.js +226 -0
  43. package/dist/components/hds/filter-bar/filter-group/index.js.map +1 -0
  44. package/dist/components/hds/filter-bar/filter-group/numerical.js +163 -0
  45. package/dist/components/hds/filter-bar/filter-group/numerical.js.map +1 -0
  46. package/dist/components/hds/filter-bar/filter-group/radio.js +40 -0
  47. package/dist/components/hds/filter-bar/filter-group/radio.js.map +1 -0
  48. package/dist/components/hds/filter-bar/index.js +237 -0
  49. package/dist/components/hds/filter-bar/index.js.map +1 -0
  50. package/dist/components/hds/filter-bar/tabs/index.js +181 -0
  51. package/dist/components/hds/filter-bar/tabs/index.js.map +1 -0
  52. package/dist/components/hds/filter-bar/tabs/panel.js +67 -0
  53. package/dist/components/hds/filter-bar/tabs/panel.js.map +1 -0
  54. package/dist/components/hds/filter-bar/tabs/tab.js +98 -0
  55. package/dist/components/hds/filter-bar/tabs/tab.js.map +1 -0
  56. package/dist/components/hds/filter-bar/types.js +35 -0
  57. package/dist/components/hds/filter-bar/types.js.map +1 -0
  58. package/dist/components.js +12 -0
  59. package/dist/components.js.map +1 -1
  60. package/dist/helpers/hds-link-to-query.js +0 -1
  61. package/dist/helpers/hds-link-to-query.js.map +1 -1
  62. package/dist/styles/@hashicorp/design-system-components.css +319 -1555
  63. package/dist/styles/@hashicorp/design-system-components.scss +1 -0
  64. package/dist/styles/components/advanced-table.scss +67 -1
  65. package/dist/styles/components/app-header.scss +6 -9
  66. package/dist/styles/components/filter-bar.scss +164 -0
  67. package/dist/styles/components/side-nav/header.scss +4 -12
  68. package/dist/styles/mixins/_interactive-dark-theme.scss +7 -4
  69. package/package.json +12 -1
  70. package/translations/hds/components/advanced-table/en-us.yaml +3 -0
  71. package/translations/hds/components/filter-bar/date/en-us.yaml +18 -0
  72. package/translations/hds/components/filter-bar/en-us.yaml +9 -0
  73. package/translations/hds/components/filter-bar/filter-group/en-us.yaml +1 -0
  74. package/translations/hds/components/filter-bar/filter-group/numerical/en-us.yaml +15 -0
  75. package/translations/hds/components/filter-bar/filter-options/en-us.yaml +1 -0
  76. package/translations/hds/components/filter-bar/filters-dropdown/en-us.yaml +7 -0
@@ -0,0 +1,163 @@
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 { service } from '@ember/service';
6
+ import { HdsFilterBarNumericalFilterSelectorValues } from '../types.js';
7
+ import { precompileTemplate } from '@ember/template-compilation';
8
+ import { g, i, n } from 'decorator-transforms/runtime';
9
+ import { setComponentTemplate } from '@ember/component';
10
+
11
+ var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class=\"hds-filter-bar__filter-group__numerical\">\n <Hds::Layout::Flex class=\"hds-filter-bar__filter-group__fields\" @direction=\"column\" @gap=\"16\">\n <Hds::Form::Select::Field\n @id={{this._selectorInputId}}\n class=\"hds-filter-bar__filter-group__field\"\n {{on \"change\" this.onSelectorChange}}\n as |F|\n >\n <F.Label>\n {{hds-t \"hds.components.filter-bar.filter-group.numerical.label\" default=\"Number is\"}}\n </F.Label>\n <F.Options>\n <option value=\"\">{{hds-t\n \"hds.components.filter-bar.filter-group.numerical.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::Field>\n {{#if (eq this._selector \"between\")}}\n <Hds::Layout::Flex @gap=\"8\">\n <Hds::Form::TextInput::Base\n @id={{this._betweenValueStartInputId}}\n @type=\"text\"\n @value={{this.stringBetweenValueStart}}\n placeholder={{hds-t \"hds.components.filter-bar.between-value-inputs.start-placeholder\" default=\"Start\"}}\n class=\"hds-filter-bar__filter-group__field\"\n {{on \"change\" this.onBetweenValueStartChange}}\n />\n <Hds::Form::TextInput::Base\n @id={{this._betweenValueEndInputId}}\n @type=\"text\"\n @value={{this.stringBetweenValueEnd}}\n placeholder={{hds-t \"hds.components.filter-bar.between-value-inputs.end-placeholder\" default=\"End\"}}\n class=\"hds-filter-bar__filter-group__field\"\n {{on \"change\" this.onBetweenValueEndChange}}\n />\n </Hds::Layout::Flex>\n {{else}}\n <Hds::Form::TextInput::Base\n @id={{this._valueInputId}}\n @type=\"text\"\n @value={{this.stringValue}}\n placeholder={{hds-t\n \"hds.components.filter-bar.filter-group.numerical.value-input.placeholder\"\n default=\"Enter a value\"\n }}\n class=\"hds-filter-bar__filter-group__field\"\n {{on \"change\" this.onValueChange}}\n />\n {{/if}}\n </Hds::Layout::Flex>\n <div class=\"hds-filter-bar__filter-group__clear\">\n <Hds::Button\n @text={{hds-t \"hds.components.filter-bar.filter-group.numerical.clear\" default=\"Clear filter\"}}\n @color=\"tertiary\"\n @icon=\"rotate-ccw\"\n @isInline={{true}}\n {{on \"click\" this.onClear}}\n />\n </div>\n</div>");
12
+
13
+ /**
14
+ * Copyright (c) HashiCorp, Inc.
15
+ * SPDX-License-Identifier: MPL-2.0
16
+ */
17
+
18
+ const NUMERICAL_SELECTORS = Object.values(HdsFilterBarNumericalFilterSelectorValues);
19
+ const NUMERICAL_SELECTORS_TEXT = {
20
+ [HdsFilterBarNumericalFilterSelectorValues.lessThan]: '<',
21
+ [HdsFilterBarNumericalFilterSelectorValues.lessThanOrEqualTo]: '≤',
22
+ [HdsFilterBarNumericalFilterSelectorValues.equalTo]: '=',
23
+ [HdsFilterBarNumericalFilterSelectorValues.greaterThanOrEqualTo]: '≥',
24
+ [HdsFilterBarNumericalFilterSelectorValues.greaterThan]: '>',
25
+ [HdsFilterBarNumericalFilterSelectorValues.between]: 'between'
26
+ };
27
+ const NUMERICAL_SELECTORS_INPUT_TEXT = {
28
+ [HdsFilterBarNumericalFilterSelectorValues.lessThan]: 'Less than (<)',
29
+ [HdsFilterBarNumericalFilterSelectorValues.lessThanOrEqualTo]: 'Less than or equal to (≤)',
30
+ [HdsFilterBarNumericalFilterSelectorValues.equalTo]: 'Equal to (=)',
31
+ [HdsFilterBarNumericalFilterSelectorValues.greaterThanOrEqualTo]: 'Greater than or equal to (≥)',
32
+ [HdsFilterBarNumericalFilterSelectorValues.greaterThan]: 'Greater than (>)',
33
+ [HdsFilterBarNumericalFilterSelectorValues.between]: 'Between'
34
+ };
35
+ class HdsFilterBarFilterGroupNumerical extends Component {
36
+ static {
37
+ g(this.prototype, "hdsIntl", [service]);
38
+ }
39
+ #hdsIntl = (i(this, "hdsIntl"), void 0);
40
+ static {
41
+ g(this.prototype, "_selector", [tracked]);
42
+ }
43
+ #_selector = (i(this, "_selector"), void 0);
44
+ static {
45
+ g(this.prototype, "_value", [tracked]);
46
+ }
47
+ #_value = (i(this, "_value"), void 0);
48
+ static {
49
+ g(this.prototype, "_betweenValueStart", [tracked]);
50
+ }
51
+ #_betweenValueStart = (i(this, "_betweenValueStart"), void 0);
52
+ static {
53
+ g(this.prototype, "_betweenValueEnd", [tracked]);
54
+ }
55
+ #_betweenValueEnd = (i(this, "_betweenValueEnd"), void 0);
56
+ _selectorValues = NUMERICAL_SELECTORS;
57
+ _selectorInputId = 'selector-input-' + guidFor(this);
58
+ _valueInputId = 'value-input-' + guidFor(this);
59
+ _betweenValueStartInputId = 'between-value-start-input-' + guidFor(this);
60
+ _betweenValueEndInputId = 'between-value-end-input-' + guidFor(this);
61
+ constructor(owner, args) {
62
+ super(owner, args);
63
+ const {
64
+ keyFilter
65
+ } = this.args;
66
+ if (keyFilter && keyFilter.type === 'numerical') {
67
+ const data = keyFilter.data;
68
+ this._selector = data?.selector;
69
+ if (data.selector === 'between') {
70
+ if (data.value && typeof data.value === 'object') {
71
+ this._betweenValueStart = Number(data.value.start);
72
+ this._betweenValueEnd = Number(data.value.end);
73
+ }
74
+ } else {
75
+ this._value = Number(data.value);
76
+ }
77
+ }
78
+ }
79
+ get stringValue() {
80
+ return this._value !== undefined ? this._value.toString() : undefined;
81
+ }
82
+ get stringBetweenValueStart() {
83
+ return this._betweenValueStart !== undefined ? this._betweenValueStart.toString() : undefined;
84
+ }
85
+ get stringBetweenValueEnd() {
86
+ return this._betweenValueEnd !== undefined ? this._betweenValueEnd.toString() : undefined;
87
+ }
88
+ onSelectorChange(event) {
89
+ const select = event.target;
90
+ this._selector = select.value;
91
+ if (this._selector === 'between') {
92
+ this._value = undefined;
93
+ } else {
94
+ this._betweenValueStart = undefined;
95
+ this._betweenValueEnd = undefined;
96
+ }
97
+ this._onChange();
98
+ }
99
+ static {
100
+ n(this.prototype, "onSelectorChange", [action]);
101
+ }
102
+ onValueChange(event) {
103
+ const input = event.target;
104
+ this._value = parseFloat(input.value);
105
+ this._onChange();
106
+ }
107
+ static {
108
+ n(this.prototype, "onValueChange", [action]);
109
+ }
110
+ onBetweenValueStartChange(event) {
111
+ const input = event.target;
112
+ this._betweenValueStart = parseFloat(input.value);
113
+ this._onChange();
114
+ }
115
+ static {
116
+ n(this.prototype, "onBetweenValueStartChange", [action]);
117
+ }
118
+ onBetweenValueEndChange(event) {
119
+ const input = event.target;
120
+ this._betweenValueEnd = parseFloat(input.value);
121
+ this._onChange();
122
+ }
123
+ static {
124
+ n(this.prototype, "onBetweenValueEndChange", [action]);
125
+ }
126
+ onClear() {
127
+ this._resetInputValues();
128
+ this._onChange();
129
+ }
130
+ static {
131
+ n(this.prototype, "onClear", [action]);
132
+ }
133
+ _onChange() {
134
+ const {
135
+ onChange
136
+ } = this.args;
137
+ if (onChange && typeof onChange === 'function') {
138
+ if (this._selector === 'between' && this._betweenValueStart !== undefined && this._betweenValueEnd !== undefined) {
139
+ onChange(this._selector, {
140
+ start: this._betweenValueStart,
141
+ end: this._betweenValueEnd
142
+ });
143
+ } else {
144
+ onChange(this._selector, this._value);
145
+ }
146
+ }
147
+ }
148
+ _selectorText = selector => {
149
+ return this.hdsIntl.t(`hds.components.filter-bar.filter-group.numerical.selector-input.${selector}`, {
150
+ default: NUMERICAL_SELECTORS_INPUT_TEXT[selector]
151
+ });
152
+ };
153
+ _resetInputValues = () => {
154
+ this._selector = undefined;
155
+ this._value = undefined;
156
+ this._betweenValueStart = undefined;
157
+ this._betweenValueEnd = undefined;
158
+ };
159
+ }
160
+ setComponentTemplate(TEMPLATE, HdsFilterBarFilterGroupNumerical);
161
+
162
+ export { NUMERICAL_SELECTORS, NUMERICAL_SELECTORS_INPUT_TEXT, NUMERICAL_SELECTORS_TEXT, HdsFilterBarFilterGroupNumerical as default };
163
+ //# sourceMappingURL=numerical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numerical.js","sources":["../../../../../src/components/hds/filter-bar/filter-group/numerical.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';\nimport { service } from '@ember/service';\n\nimport type HdsIntlService from '../../../../services/hds-intl';\nimport type {\n HdsFilterBarFilter,\n HdsFilterBarNumericalFilterSelector,\n HdsFilterBarNumericalFilterValue,\n} from '../types.ts';\nimport { HdsFilterBarNumericalFilterSelectorValues } from '../types.ts';\n\nexport const NUMERICAL_SELECTORS: HdsFilterBarNumericalFilterSelector[] =\n Object.values(HdsFilterBarNumericalFilterSelectorValues);\n\nexport const NUMERICAL_SELECTORS_TEXT: Record<\n HdsFilterBarNumericalFilterSelector,\n string\n> = {\n [HdsFilterBarNumericalFilterSelectorValues.lessThan]: '<',\n [HdsFilterBarNumericalFilterSelectorValues.lessThanOrEqualTo]: '≤',\n [HdsFilterBarNumericalFilterSelectorValues.equalTo]: '=',\n [HdsFilterBarNumericalFilterSelectorValues.greaterThanOrEqualTo]: '≥',\n [HdsFilterBarNumericalFilterSelectorValues.greaterThan]: '>',\n [HdsFilterBarNumericalFilterSelectorValues.between]: 'between',\n};\n\nexport const NUMERICAL_SELECTORS_INPUT_TEXT: Record<\n HdsFilterBarNumericalFilterSelector,\n string\n> = {\n [HdsFilterBarNumericalFilterSelectorValues.lessThan]: 'Less than (<)',\n [HdsFilterBarNumericalFilterSelectorValues.lessThanOrEqualTo]:\n 'Less than or equal to (≤)',\n [HdsFilterBarNumericalFilterSelectorValues.equalTo]: 'Equal to (=)',\n [HdsFilterBarNumericalFilterSelectorValues.greaterThanOrEqualTo]:\n 'Greater than or equal to (≥)',\n [HdsFilterBarNumericalFilterSelectorValues.greaterThan]: 'Greater than (>)',\n [HdsFilterBarNumericalFilterSelectorValues.between]: 'Between',\n};\n\nexport interface HdsFilterBarFilterGroupNumericalSignature {\n Args: {\n keyFilter: HdsFilterBarFilter | undefined;\n onChange?: (\n selector?: HdsFilterBarNumericalFilterSelector,\n value?: HdsFilterBarNumericalFilterValue\n ) => void;\n };\n Blocks: {\n default: [];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBarFilterGroupNumerical extends Component<HdsFilterBarFilterGroupNumericalSignature> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked private _selector: HdsFilterBarNumericalFilterSelector | undefined;\n @tracked private _value: number | undefined;\n @tracked private _betweenValueStart: number | undefined;\n @tracked private _betweenValueEnd: number | undefined;\n\n private _selectorValues = NUMERICAL_SELECTORS;\n private _selectorInputId = 'selector-input-' + guidFor(this);\n private _valueInputId = 'value-input-' + guidFor(this);\n private _betweenValueStartInputId =\n 'between-value-start-input-' + guidFor(this);\n private _betweenValueEndInputId = 'between-value-end-input-' + guidFor(this);\n\n constructor(\n owner: Owner,\n args: HdsFilterBarFilterGroupNumericalSignature['Args']\n ) {\n super(owner, args);\n\n const { keyFilter } = this.args;\n if (keyFilter && keyFilter.type === 'numerical') {\n const data = keyFilter.data;\n this._selector = data?.selector;\n if (data.selector === 'between') {\n if (data.value && typeof data.value === 'object') {\n this._betweenValueStart = Number(data.value.start);\n this._betweenValueEnd = Number(data.value.end);\n }\n } else {\n this._value = Number(data.value);\n }\n }\n }\n\n get stringValue(): string | undefined {\n return this._value !== undefined ? this._value.toString() : undefined;\n }\n\n get stringBetweenValueStart(): string | undefined {\n return this._betweenValueStart !== undefined\n ? this._betweenValueStart.toString()\n : undefined;\n }\n\n get stringBetweenValueEnd(): string | undefined {\n return this._betweenValueEnd !== undefined\n ? this._betweenValueEnd.toString()\n : undefined;\n }\n\n @action\n onSelectorChange(event: Event): void {\n const select = event.target as HTMLSelectElement;\n this._selector = select.value as HdsFilterBarNumericalFilterSelector;\n if (this._selector === 'between') {\n this._value = undefined;\n } else {\n this._betweenValueStart = undefined;\n this._betweenValueEnd = undefined;\n }\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 @action\n onBetweenValueStartChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this._betweenValueStart = parseFloat(input.value);\n this._onChange();\n }\n\n @action\n onBetweenValueEndChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n this._betweenValueEnd = parseFloat(input.value);\n this._onChange();\n }\n\n @action\n onClear(): void {\n this._resetInputValues();\n this._onChange();\n }\n\n private _onChange(): void {\n const { onChange } = this.args;\n if (onChange && typeof onChange === 'function') {\n if (\n this._selector === 'between' &&\n this._betweenValueStart !== undefined &&\n this._betweenValueEnd !== undefined\n ) {\n onChange(this._selector, {\n start: this._betweenValueStart,\n end: this._betweenValueEnd,\n });\n } else {\n onChange(this._selector, this._value);\n }\n }\n }\n\n private _selectorText = (\n selector: HdsFilterBarNumericalFilterSelector\n ): string => {\n return this.hdsIntl.t(\n `hds.components.filter-bar.filter-group.numerical.selector-input.${selector}`,\n {\n default: NUMERICAL_SELECTORS_INPUT_TEXT[selector],\n }\n );\n };\n\n private _resetInputValues = (): void => {\n this._selector = undefined;\n this._value = undefined;\n this._betweenValueStart = undefined;\n this._betweenValueEnd = undefined;\n };\n}\n"],"names":["NUMERICAL_SELECTORS","Object","values","HdsFilterBarNumericalFilterSelectorValues","NUMERICAL_SELECTORS_TEXT","lessThan","lessThanOrEqualTo","equalTo","greaterThanOrEqualTo","greaterThan","between","NUMERICAL_SELECTORS_INPUT_TEXT","HdsFilterBarFilterGroupNumerical","Component","g","prototype","service","i","void 0","tracked","_selectorValues","_selectorInputId","guidFor","_valueInputId","_betweenValueStartInputId","_betweenValueEndInputId","constructor","owner","args","keyFilter","type","data","_selector","selector","value","_betweenValueStart","Number","start","_betweenValueEnd","end","_value","stringValue","undefined","toString","stringBetweenValueStart","stringBetweenValueEnd","onSelectorChange","event","select","target","_onChange","n","action","onValueChange","input","parseFloat","onBetweenValueStartChange","onBetweenValueEndChange","onClear","_resetInputValues","onChange","_selectorText","hdsIntl","t","default","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__filter-group__selection-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 HdsFilterBarFilterGroupRadio 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 && keyFilter.type === 'single-select' && value && 'value' in keyFilter.data) {
32
+ return keyFilter.data.value === value;
33
+ }
34
+ return false;
35
+ }
36
+ }
37
+ setComponentTemplate(TEMPLATE, HdsFilterBarFilterGroupRadio);
38
+
39
+ export { HdsFilterBarFilterGroupRadio as default };
40
+ //# sourceMappingURL=radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"radio.js","sources":["../../../../../src/components/hds/filter-bar/filter-group/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 { HdsFilterBarFilter } from '../types.ts';\n\nexport interface HdsFilterBarFilterGroupRadioSignature {\n Args: {\n value?: string;\n keyFilter: HdsFilterBarFilter | undefined;\n onChange?: (event: Event) => void;\n };\n Blocks: {\n default: [];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBarFilterGroupRadio extends Component<HdsFilterBarFilterGroupRadioSignature> {\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 (\n keyFilter &&\n keyFilter.type === 'single-select' &&\n value &&\n 'value' in keyFilter.data\n ) {\n return keyFilter.data.value === value;\n }\n return false;\n }\n}\n"],"names":["HdsFilterBarFilterGroupRadio","Component","onChange","event","args","n","prototype","action","isChecked","keyFilter","value","type","data","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAmBe,MAAMA,4BAA4B,SAASC,SAAS,CAAwC;EAEzGC,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,IACEK,SAAS,IACTA,SAAS,CAACE,IAAI,KAAK,eAAe,IAClCD,KAAK,IACL,OAAO,IAAID,SAAS,CAACG,IAAI,EACzB;AACA,MAAA,OAAOH,SAAS,CAACG,IAAI,CAACF,KAAK,KAAKA,KAAK;AACvC,IAAA;AACA,IAAA,OAAO,KAAK;AACd,EAAA;AACF;AAACG,oBAAA,CAAAC,QAAA,EArBoBd,4BAA4B,CAAA;;;;"}
@@ -0,0 +1,237 @@
1
+ import Component from '@glimmer/component';
2
+ import { action } from '@ember/object';
3
+ import { tracked } from '@glimmer/tracking';
4
+ import { service } from '@ember/service';
5
+ import '../dropdown/index.js';
6
+ import '../yield/index.js';
7
+ import './dropdown.js';
8
+ import { isArray } from '@ember/array';
9
+ import { NUMERICAL_SELECTORS_TEXT } from './filter-group/numerical.js';
10
+ import { DATE_SELECTORS_TEXT } from './filter-group/date.js';
11
+ import { precompileTemplate } from '@ember/template-compilation';
12
+ import { g, i, n } from 'decorator-transforms/runtime';
13
+ import { setComponentTemplate } from '@ember/component';
14
+
15
+ var TEMPLATE = precompileTemplate("{{!\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n}}\n<div class=\"hds-filter-bar\" ...attributes>\n <Hds::Layout::Flex @align=\"end\" @gap=\"8\" class=\"hds-filter-bar__actions\">\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 {{yield\n (hash\n Dropdown=(component\n \"hds/filter-bar/dropdown\" filters=@filters isLiveFilter=@isLiveFilter onFilter=this.onFilter\n )\n )\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 <Hds::Layout::Flex @gap=\"8\" @align=\"center\" class=\"hds-filter-bar__actions__right\">\n {{yield (hash ActionsGeneric=(component \"hds/yield\"))}}\n {{yield (hash ActionsDropdown=(component \"hds/dropdown\"))}}\n </Hds::Layout::Flex>\n </Hds::Layout::Flex>\n {{#if this._isExpanded}}\n <div class=\"hds-filter-bar__filters\">\n {{#if this.hasActiveFilters}}\n {{#each-in @filters as |key filter|}}\n {{#if filter.data}}\n {{#if (eq filter.type \"single-select\")}}\n <Hds::Tag\n @text=\"{{this._filterKeyText key filter}}: {{this._filterText filter}}\"\n @onDismiss={{fn this.onFilterDismiss key}}\n />\n {{else if (eq filter.type \"numerical\")}}\n <Hds::Tag\n @text=\"{{this._filterKeyText key filter}} {{this._numericalFilterText filter}}\"\n @onDismiss={{fn this.onFilterDismiss key}}\n />\n {{else if (or (eq filter.type \"date\") (eq filter.type \"datetime\") (eq filter.type \"time\"))}}\n <Hds::Tag\n @text=\"{{this._filterKeyText key filter}} {{this._dateFilterText filter}}\"\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}}\"\n @onDismiss={{fn this.onFilterDismiss key}}\n />\n {{else if (eq filter.type \"generic\")}}\n <Hds::Tag\n @text=\"{{this._filterKeyText key filter}} {{this._genericFilterText filter}}\"\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 {{else}}\n <Hds::Text::Body @size={{100}} @color=\"faint\">\n {{hds-t \"hds.components.filter-bar.no-filters-applied\" default=\"No filters applied\"}}\n </Hds::Text::Body>\n {{/if}}\n </div>\n {{/if}}\n</div>");
16
+
17
+ /**
18
+ * Copyright (c) HashiCorp, Inc.
19
+ * SPDX-License-Identifier: MPL-2.0
20
+ */
21
+
22
+ class HdsFilterBar extends Component {
23
+ static {
24
+ g(this.prototype, "hdsIntl", [service]);
25
+ }
26
+ #hdsIntl = (i(this, "hdsIntl"), void 0);
27
+ static {
28
+ g(this.prototype, "_isExpanded", [tracked], function () {
29
+ return false;
30
+ });
31
+ }
32
+ #_isExpanded = (i(this, "_isExpanded"), void 0);
33
+ get searchValue() {
34
+ const {
35
+ filters
36
+ } = this.args;
37
+ if (filters['search']) {
38
+ return this._filterText(filters['search']);
39
+ }
40
+ return '';
41
+ }
42
+ onFilter(filters) {
43
+ const {
44
+ onFilter
45
+ } = this.args;
46
+ if (onFilter && typeof onFilter === 'function') {
47
+ onFilter(filters);
48
+ if (Object.keys(filters).length > 0) {
49
+ this._isExpanded = true;
50
+ } else {
51
+ this._isExpanded = false;
52
+ }
53
+ }
54
+ }
55
+ static {
56
+ n(this.prototype, "onFilter", [action]);
57
+ }
58
+ clearFilters() {
59
+ const {
60
+ onFilter
61
+ } = this.args;
62
+ if (onFilter && typeof onFilter === 'function') {
63
+ onFilter({});
64
+ this._isExpanded = false;
65
+ }
66
+ }
67
+ static {
68
+ n(this.prototype, "clearFilters", [action]);
69
+ }
70
+ onSearch(event) {
71
+ const {
72
+ filters
73
+ } = this.args;
74
+ const input = event.target;
75
+ const value = input?.value;
76
+ const newFilters = {};
77
+ Object.keys(filters).forEach(k => {
78
+ newFilters[k] = JSON.parse(JSON.stringify(filters[k]));
79
+ });
80
+ if (value.length > 0) {
81
+ newFilters['search'] = {
82
+ type: 'search',
83
+ text: 'Search',
84
+ data: {
85
+ value
86
+ }
87
+ };
88
+ } else {
89
+ delete newFilters['search'];
90
+ }
91
+ this.onFilter({
92
+ ...newFilters
93
+ });
94
+ }
95
+ static {
96
+ n(this.prototype, "onSearch", [action]);
97
+ }
98
+ toggleExpand() {
99
+ this._isExpanded = !this._isExpanded;
100
+ }
101
+ static {
102
+ n(this.prototype, "toggleExpand", [action]);
103
+ }
104
+ get hasActiveFilters() {
105
+ return Object.keys(this.args.filters).length > 0;
106
+ }
107
+ onFilterDismiss = (key, filterValue) => {
108
+ const {
109
+ filters
110
+ } = this.args;
111
+ if (filters && filters[key]) {
112
+ const keyFilter = filters[key];
113
+ const newFilters = {};
114
+ Object.keys(filters).forEach(k => {
115
+ newFilters[k] = JSON.parse(JSON.stringify(filters[k]));
116
+ });
117
+ if (keyFilter.type === 'multi-select' && isArray(keyFilter.data)) {
118
+ const newKeyfilter = keyFilter.data?.filter(item => item.value !== filterValue);
119
+ if (newKeyfilter.length === 0) {
120
+ delete newFilters[key];
121
+ } else {
122
+ newFilters[key] = {
123
+ type: 'multi-select',
124
+ text: keyFilter.text,
125
+ data: newKeyfilter
126
+ };
127
+ }
128
+ } else {
129
+ delete newFilters[key];
130
+ }
131
+ this.onFilter({
132
+ ...newFilters
133
+ });
134
+ }
135
+ };
136
+ _filterData = data => {
137
+ if ('value' in data) {
138
+ return {
139
+ value: data.value
140
+ };
141
+ }
142
+ return {
143
+ value: ''
144
+ };
145
+ };
146
+ _filterText = filter => {
147
+ const result = this._filterData(filter.data);
148
+ const resultText = result?.value;
149
+ return resultText ?? '';
150
+ };
151
+ _filterArrayData = data => {
152
+ if (isArray(data)) {
153
+ return data.map(item => this._filterData(item));
154
+ }
155
+ return [];
156
+ };
157
+ _filterKeyText = (key, data) => {
158
+ if (data.text) {
159
+ return data.text;
160
+ } else {
161
+ return key;
162
+ }
163
+ };
164
+ _numericalFilterText = filter => {
165
+ const data = filter.data;
166
+ if (filter.type === 'numerical' && 'selector' in data && 'value' in data) {
167
+ const selector = data.selector;
168
+ if (selector === 'between' && typeof data.value === 'object' && data.value !== null) {
169
+ const separatorText = this.hdsIntl.t('hds.components.filter-bar.filter-text.numerical-filter.separator', {
170
+ default: 'and'
171
+ });
172
+ return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value.start} ${separatorText} ${data.value.end}`;
173
+ } else if (typeof data.value !== 'object') {
174
+ return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value}`;
175
+ }
176
+ return '';
177
+ } else {
178
+ return '';
179
+ }
180
+ };
181
+ _dateFilterText = filter => {
182
+ const data = filter.data;
183
+ if ((filter.type === 'date' || filter.type === 'datetime' || filter.type === 'time') && 'selector' in data && 'value' in data) {
184
+ const selector = data.selector;
185
+ if (selector === 'between' && typeof data.value === 'object' && data.value !== null) {
186
+ const separatorText = this.hdsIntl.t('hds.components.filter-bar.filter-text.date-filter.separator', {
187
+ default: 'and'
188
+ });
189
+ const startDateText = this._dateDisplayText(data.value.start, filter.type);
190
+ const endDateText = this._dateDisplayText(data.value.end, filter.type);
191
+ return `${DATE_SELECTORS_TEXT[selector]} ${startDateText} ${separatorText} ${endDateText}`;
192
+ } else if (data.value !== null && typeof data.value !== 'object') {
193
+ const dateText = this._dateDisplayText(data.value, filter.type);
194
+ return `${DATE_SELECTORS_TEXT[selector]} ${dateText}`;
195
+ }
196
+ return '';
197
+ } else {
198
+ return '';
199
+ }
200
+ };
201
+ _dateDisplayText = (dateString, filterType) => {
202
+ let date;
203
+ if (filterType === 'time') {
204
+ date = new Date(`1970-01-01T${dateString}`);
205
+ } else {
206
+ date = new Date(dateString);
207
+ }
208
+ let options = {};
209
+ if (filterType === 'date') {
210
+ options = {
211
+ dateStyle: 'short'
212
+ };
213
+ } else if (filterType === 'time') {
214
+ options = {
215
+ timeStyle: 'short'
216
+ };
217
+ } else {
218
+ options = {
219
+ dateStyle: 'short',
220
+ timeStyle: 'short'
221
+ };
222
+ }
223
+ const newDate = new Intl.DateTimeFormat(undefined, options);
224
+ return newDate.format(date);
225
+ };
226
+ _genericFilterText = filter => {
227
+ if ('dismissTagText' in filter) {
228
+ return filter.dismissTagText ?? '';
229
+ } else {
230
+ return '';
231
+ }
232
+ };
233
+ }
234
+ setComponentTemplate(TEMPLATE, HdsFilterBar);
235
+
236
+ export { HdsFilterBar as default };
237
+ //# 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';\nimport { service } from '@ember/service';\n\nimport type { WithBoundArgs } from '@glint/template';\n\nimport type HdsIntlService from '../../../services/hds-intl';\nimport type {\n HdsFilterBarFilters,\n HdsFilterBarFilter,\n HdsFilterBarFilterType,\n HdsFilterBarData,\n HdsFilterBarGenericFilterData,\n} from './types.ts';\nimport HdsDropdown from '../dropdown/index.ts';\nimport HdsYield from '../yield/index.ts';\nimport HdsFilterBarDropdown from './dropdown.ts';\nimport { isArray } from '@ember/array';\n\nimport { NUMERICAL_SELECTORS_TEXT } from './filter-group/numerical.ts';\nimport { DATE_SELECTORS_TEXT } from './filter-group/date.ts';\n\nexport interface HdsFilterBarSignature {\n Args: {\n filters: HdsFilterBarFilters;\n isLiveFilter?: boolean;\n hasSearch?: boolean;\n onFilter?: (filters: HdsFilterBarFilters) => void;\n };\n Blocks: {\n default?: [\n {\n ActionsDropdown?: WithBoundArgs<typeof HdsDropdown, never>;\n ActionsGeneric?: WithBoundArgs<typeof HdsYield, never>;\n Dropdown?: WithBoundArgs<\n typeof HdsFilterBarDropdown,\n 'filters' | 'isLiveFilter' | 'onFilter'\n >;\n },\n ];\n };\n Element: HTMLDivElement;\n}\n\nexport default class HdsFilterBar extends Component<HdsFilterBarSignature> {\n @service hdsIntl!: HdsIntlService;\n\n @tracked _isExpanded: boolean = false;\n\n get searchValue(): string {\n const { filters } = this.args;\n if (filters['search']) {\n return this._filterText(filters['search']);\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 if (Object.keys(filters).length > 0) {\n this._isExpanded = true;\n } else {\n this._isExpanded = false;\n }\n }\n }\n\n @action\n clearFilters(): void {\n const { onFilter } = this.args;\n if (onFilter && typeof onFilter === 'function') {\n onFilter({});\n this._isExpanded = false;\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 = (filter: HdsFilterBarFilter): string => {\n const result = this._filterData(filter.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 _numericalFilterText = (filter: HdsFilterBarFilter): string => {\n const data = filter.data;\n\n if (filter.type === 'numerical' && 'selector' in data && 'value' in data) {\n const selector = data.selector as keyof typeof NUMERICAL_SELECTORS_TEXT;\n if (\n selector === 'between' &&\n typeof data.value === 'object' &&\n data.value !== null\n ) {\n const separatorText = this.hdsIntl.t(\n 'hds.components.filter-bar.filter-text.numerical-filter.separator',\n {\n default: 'and',\n }\n );\n return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value.start} ${separatorText} ${data.value.end}`;\n } else if (typeof data.value !== 'object') {\n return `${NUMERICAL_SELECTORS_TEXT[selector]} ${data.value}`;\n }\n return '';\n } else {\n return '';\n }\n };\n\n private _dateFilterText = (filter: HdsFilterBarFilter): string => {\n const data = filter.data;\n\n if (\n (filter.type === 'date' ||\n filter.type === 'datetime' ||\n filter.type === 'time') &&\n 'selector' in data &&\n 'value' in data\n ) {\n const selector = data.selector as keyof typeof DATE_SELECTORS_TEXT;\n if (\n selector === 'between' &&\n typeof data.value === 'object' &&\n data.value !== null\n ) {\n const separatorText = this.hdsIntl.t(\n 'hds.components.filter-bar.filter-text.date-filter.separator',\n {\n default: 'and',\n }\n );\n const startDateText = this._dateDisplayText(\n data.value.start as string,\n filter.type\n );\n const endDateText = this._dateDisplayText(\n data.value.end as string,\n filter.type\n );\n return `${DATE_SELECTORS_TEXT[selector]} ${startDateText} ${separatorText} ${endDateText}`;\n } else if (data.value !== null && typeof data.value !== 'object') {\n const dateText = this._dateDisplayText(\n data.value as string,\n filter.type\n );\n return `${DATE_SELECTORS_TEXT[selector]} ${dateText}`;\n }\n return '';\n } else {\n return '';\n }\n };\n\n private _dateDisplayText = (\n dateString: string,\n filterType: HdsFilterBarFilterType\n ): string => {\n let date;\n if (filterType === 'time') {\n date = new Date(`1970-01-01T${dateString}`);\n } else {\n date = new Date(dateString);\n }\n\n let options = {};\n if (filterType === 'date') {\n options = { dateStyle: 'short' };\n } else if (filterType === 'time') {\n options = { timeStyle: 'short' };\n } else {\n options = { dateStyle: 'short', timeStyle: 'short' };\n }\n\n const newDate = new Intl.DateTimeFormat(undefined, options);\n return newDate.format(date);\n };\n\n private _genericFilterText = (filter: HdsFilterBarFilter): string => {\n if ('dismissTagText' in filter) {\n return filter.dismissTagText ?? '';\n } else {\n return '';\n }\n };\n}\n"],"names":["HdsFilterBar","Component","g","prototype","service","i","void 0","tracked","searchValue","filters","args","_filterText","onFilter","Object","keys","length","_isExpanded","n","action","clearFilters","onSearch","event","input","target","value","newFilters","forEach","k","JSON","parse","stringify","type","text","data","toggleExpand","hasActiveFilters","onFilterDismiss","key","filterValue","keyFilter","isArray","newKeyfilter","filter","item","_filterData","result","resultText","_filterArrayData","map","_filterKeyText","_numericalFilterText","selector","separatorText","hdsIntl","t","default","NUMERICAL_SELECTORS_TEXT","start","end","_dateFilterText","startDateText","_dateDisplayText","endDateText","DATE_SELECTORS_TEXT","dateText","dateString","filterType","date","Date","options","dateStyle","timeStyle","newDate","Intl","DateTimeFormat","undefined","format","_genericFilterText","dismissTagText","setComponentTemplate","TEMPLATE"],"mappings":"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"}