@dso-toolkit/core 62.12.1 → 62.14.0

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 (88) hide show
  1. package/dist/cjs/dso-advanced-select.cjs.entry.js +98 -0
  2. package/dist/cjs/dso-advanced-select.cjs.entry.js.map +1 -0
  3. package/dist/cjs/dso-alert_7.cjs.entry.js +1 -1
  4. package/dist/cjs/dso-alert_7.cjs.entry.js.map +1 -1
  5. package/dist/cjs/dso-input-range.cjs.entry.js +39 -0
  6. package/dist/cjs/dso-input-range.cjs.entry.js.map +1 -0
  7. package/dist/cjs/dso-pagination.cjs.entry.js +1 -1
  8. package/dist/cjs/dso-pagination.cjs.entry.js.map +1 -1
  9. package/dist/cjs/dso-scrollable.cjs.entry.js +1 -1
  10. package/dist/cjs/dso-scrollable.cjs.entry.js.map +1 -1
  11. package/dist/cjs/dso-toggletip.cjs.entry.js.map +1 -1
  12. package/dist/cjs/dso-toolkit.cjs.js +1 -1
  13. package/dist/cjs/dso-tooltip.cjs.entry.js.map +1 -1
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/collection/collection-manifest.json +2 -0
  16. package/dist/collection/components/advanced-select/advanced-select.css +206 -0
  17. package/dist/collection/components/advanced-select/advanced-select.js +220 -0
  18. package/dist/collection/components/advanced-select/advanced-select.js.map +1 -0
  19. package/dist/collection/components/advanced-select/advanced-select.models.js +2 -0
  20. package/dist/collection/components/advanced-select/advanced-select.models.js.map +1 -0
  21. package/dist/collection/components/input-range/input-range.css +74 -0
  22. package/dist/collection/components/input-range/input-range.interfaces.js +2 -0
  23. package/dist/collection/components/input-range/input-range.interfaces.js.map +1 -0
  24. package/dist/collection/components/input-range/input-range.js +186 -0
  25. package/dist/collection/components/input-range/input-range.js.map +1 -0
  26. package/dist/collection/components/pagination/pagination.css +3 -2
  27. package/dist/collection/components/scrollable/scrollable.css +1 -0
  28. package/dist/collection/components/table/table.css +1 -1
  29. package/dist/collection/components/toggletip/toggletip.js +9 -3
  30. package/dist/collection/components/toggletip/toggletip.js.map +1 -1
  31. package/dist/collection/components/tooltip/tooltip.js +9 -3
  32. package/dist/collection/components/tooltip/tooltip.js.map +1 -1
  33. package/dist/components/dso-advanced-select.d.ts +11 -0
  34. package/dist/components/dso-advanced-select.js +129 -0
  35. package/dist/components/dso-advanced-select.js.map +1 -0
  36. package/dist/components/dso-input-range.d.ts +11 -0
  37. package/dist/components/dso-input-range.js +61 -0
  38. package/dist/components/dso-input-range.js.map +1 -0
  39. package/dist/components/dso-pagination.js +1 -1
  40. package/dist/components/dso-pagination.js.map +1 -1
  41. package/dist/components/dso-toggletip.js.map +1 -1
  42. package/dist/components/index.d.ts +4 -0
  43. package/dist/components/index.js +2 -0
  44. package/dist/components/index.js.map +1 -1
  45. package/dist/components/scrollable.js +1 -1
  46. package/dist/components/scrollable.js.map +1 -1
  47. package/dist/components/table.js +1 -1
  48. package/dist/components/table.js.map +1 -1
  49. package/dist/components/tooltip.js.map +1 -1
  50. package/dist/dso-toolkit/dso-toolkit.esm.js +1 -1
  51. package/dist/dso-toolkit/dso-toolkit.esm.js.map +1 -1
  52. package/dist/dso-toolkit/{p-2862c19a.entry.js → p-0ebbcbef.entry.js} +2 -2
  53. package/dist/dso-toolkit/{p-2862c19a.entry.js.map → p-0ebbcbef.entry.js.map} +1 -1
  54. package/dist/dso-toolkit/p-1a85e2f8.entry.js +2 -0
  55. package/dist/dso-toolkit/{p-6d602847.entry.js.map → p-1a85e2f8.entry.js.map} +1 -1
  56. package/dist/dso-toolkit/p-43511221.entry.js.map +1 -1
  57. package/dist/dso-toolkit/p-b0116121.entry.js.map +1 -1
  58. package/dist/dso-toolkit/p-e0f9a16f.entry.js +2 -0
  59. package/dist/dso-toolkit/p-e0f9a16f.entry.js.map +1 -0
  60. package/dist/dso-toolkit/p-e32f287e.entry.js +2 -0
  61. package/dist/dso-toolkit/p-e32f287e.entry.js.map +1 -0
  62. package/dist/dso-toolkit/p-f3facab4.entry.js +2 -0
  63. package/dist/dso-toolkit/p-f3facab4.entry.js.map +1 -0
  64. package/dist/esm/dso-advanced-select.entry.js +94 -0
  65. package/dist/esm/dso-advanced-select.entry.js.map +1 -0
  66. package/dist/esm/dso-alert_7.entry.js +1 -1
  67. package/dist/esm/dso-alert_7.entry.js.map +1 -1
  68. package/dist/esm/dso-input-range.entry.js +35 -0
  69. package/dist/esm/dso-input-range.entry.js.map +1 -0
  70. package/dist/esm/dso-pagination.entry.js +1 -1
  71. package/dist/esm/dso-pagination.entry.js.map +1 -1
  72. package/dist/esm/dso-scrollable.entry.js +1 -1
  73. package/dist/esm/dso-scrollable.entry.js.map +1 -1
  74. package/dist/esm/dso-toggletip.entry.js.map +1 -1
  75. package/dist/esm/dso-toolkit.js +1 -1
  76. package/dist/esm/dso-tooltip.entry.js.map +1 -1
  77. package/dist/esm/loader.js +1 -1
  78. package/dist/types/components/advanced-select/advanced-select.d.ts +40 -0
  79. package/dist/types/components/advanced-select/advanced-select.models.d.ts +26 -0
  80. package/dist/types/components/input-range/input-range.d.ts +38 -0
  81. package/dist/types/components/input-range/input-range.interfaces.d.ts +7 -0
  82. package/dist/types/components/toggletip/toggletip.d.ts +2 -1
  83. package/dist/types/components/tooltip/tooltip.d.ts +2 -1
  84. package/dist/types/components.d.ts +157 -4
  85. package/package.json +2 -2
  86. package/dist/dso-toolkit/p-1180ebe3.entry.js +0 -2
  87. package/dist/dso-toolkit/p-1180ebe3.entry.js.map +0 -1
  88. package/dist/dso-toolkit/p-6d602847.entry.js +0 -2
@@ -0,0 +1,206 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ *,
6
+ *::after,
7
+ *::before {
8
+ box-sizing: border-box;
9
+ }
10
+
11
+ .active-option {
12
+ display: flex;
13
+ inline-size: 100%;
14
+ justify-content: space-between;
15
+ align-items: center;
16
+ padding: 0;
17
+ border: 1px solid #275937;
18
+ border-radius: 4px;
19
+ cursor: pointer;
20
+ background-color: #fff;
21
+ line-height: inherit;
22
+ font-family: inherit;
23
+ font-size: inherit;
24
+ }
25
+ .active-option.open {
26
+ border-radius: 4px 4px 0 0;
27
+ }
28
+ .active-option dso-icon {
29
+ color: #275937;
30
+ }
31
+
32
+ .active-option-label {
33
+ padding: 4px 16px;
34
+ overflow: hidden;
35
+ /* stylelint-disable-next-line declaration-property-value-disallowed-list -- Nodig om lange titels op de zelfde regel te houden */
36
+ white-space: nowrap;
37
+ /* stylelint-disable-next-line declaration-property-value-disallowed-list -- Nodig om lange titels op de zelfde regel te houden */
38
+ text-overflow: ellipsis;
39
+ }
40
+
41
+ .active-option-aside {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: 8px;
45
+ padding: 0 8px;
46
+ }
47
+
48
+ .badges {
49
+ display: flex;
50
+ justify-content: space-between;
51
+ align-items: center;
52
+ gap: 4px;
53
+ }
54
+
55
+ .groups-container {
56
+ position: relative;
57
+ }
58
+
59
+ .groups {
60
+ position: absolute;
61
+ inset-block-start: -1px;
62
+ inset-inline-start: 0;
63
+ inline-size: 100%;
64
+ max-block-size: 500px;
65
+ margin: 0;
66
+ padding: 0;
67
+ overflow-y: auto;
68
+ background-color: #fff;
69
+ border: 1px solid #275937;
70
+ border-radius: 0 0 4px 4px;
71
+ }
72
+ .groups li::marker {
73
+ display: none;
74
+ }
75
+
76
+ .group {
77
+ border-bottom: 1px solid #ccc;
78
+ }
79
+ .group:last-child {
80
+ border-bottom: none;
81
+ }
82
+ .group .option {
83
+ padding-left: 37px;
84
+ }
85
+ .group .option-label::before {
86
+ content: "";
87
+ position: absolute;
88
+ display: block;
89
+ block-size: 10px;
90
+ inline-size: 10px;
91
+ inset: 4px auto auto -20px;
92
+ border-radius: 50%;
93
+ background-color: #ccc;
94
+ border-color: #ccc;
95
+ color: #191919;
96
+ }
97
+
98
+ .group-label {
99
+ margin: 0;
100
+ padding: 4px 16px;
101
+ color: #666;
102
+ font-size: 14px;
103
+ font-weight: 500;
104
+ border-bottom: 1px solid #ccc;
105
+ }
106
+
107
+ .group-link {
108
+ display: block;
109
+ padding: 8px 4px;
110
+ text-align: end;
111
+ color: #000;
112
+ text-decoration: none;
113
+ }
114
+ .group-link:hover {
115
+ text-decoration: underline;
116
+ }
117
+ .group-link dso-icon {
118
+ color: #39870c;
119
+ }
120
+
121
+ .group-info .option-label::before {
122
+ background-color: #6ca4d9;
123
+ border-color: #6ca4d9;
124
+ color: #191919;
125
+ }
126
+
127
+ .group-primary .option-label::before {
128
+ background-color: #275937;
129
+ border-color: #275937;
130
+ color: #fff;
131
+ }
132
+
133
+ .group-success .option-label::before {
134
+ background-color: #39870c;
135
+ border-color: #39870c;
136
+ color: #fff;
137
+ }
138
+
139
+ .group-warning .option-label::before {
140
+ background-color: #dcd400;
141
+ border-color: #dcd400;
142
+ color: #191919;
143
+ }
144
+
145
+ .group-danger .option-label::before {
146
+ background-color: #ce3f51;
147
+ border-color: #ce3f51;
148
+ color: #fff;
149
+ }
150
+
151
+ .group-error .option-label::before {
152
+ background-color: #ce3f51;
153
+ border-color: #ce3f51;
154
+ color: #fff;
155
+ }
156
+
157
+ .group-attention .option-label::before {
158
+ background-color: #8b4a6a;
159
+ border-color: #8b4a6a;
160
+ color: #fff;
161
+ }
162
+
163
+ .options {
164
+ margin: 0;
165
+ padding: 0;
166
+ }
167
+
168
+ .option {
169
+ display: block;
170
+ inline-size: 100%;
171
+ padding: 8px 16px;
172
+ cursor: pointer;
173
+ line-height: inherit;
174
+ font-family: inherit;
175
+ font-size: inherit;
176
+ border: none;
177
+ text-align: left;
178
+ background-color: #fff;
179
+ }
180
+ .option:hover {
181
+ background-color: #ebf3e6;
182
+ }
183
+ .option:hover .option-label {
184
+ color: #39870c;
185
+ font-weight: bold;
186
+ }
187
+
188
+ .option.option-active .option-label {
189
+ color: #39870c;
190
+ font-weight: bold;
191
+ text-decoration: underline;
192
+ }
193
+
194
+ .option-label {
195
+ position: relative;
196
+ color: #000;
197
+ font-size: Asap, sans-serif;
198
+ font-weight: 400;
199
+ }
200
+
201
+ .option-hint {
202
+ padding-left: 5px;
203
+ color: #39870c;
204
+ font-size: Asap, sans-serif;
205
+ font-weight: bold;
206
+ }
@@ -0,0 +1,220 @@
1
+ import { h, Fragment, } from "@stencil/core";
2
+ import clsx from "clsx";
3
+ import { createFocusTrap } from "focus-trap";
4
+ import { tabbable } from "tabbable";
5
+ import { isModifiedEvent } from "../../utils/is-modified-event";
6
+ export class AdvancedSelect {
7
+ constructor() {
8
+ this.toggleOpen = () => {
9
+ this.open = !this.open;
10
+ };
11
+ this.handleOptionClick = (event, option) => {
12
+ this.dsoChange.emit({ originalEvent: event, option });
13
+ this.open = false;
14
+ };
15
+ this.handleRedirectClick = (event, redirect) => {
16
+ this.dsoRedirect.emit({ originalEvent: event, isModifiedEvent: isModifiedEvent(event), redirect });
17
+ this.open = false;
18
+ };
19
+ this.options = [];
20
+ this.active = undefined;
21
+ this.activeHint = undefined;
22
+ this.open = false;
23
+ }
24
+ keyDownListener(event) {
25
+ if (this.open && event.key === "ArrowUp") {
26
+ event.preventDefault();
27
+ this.handleTab(-1);
28
+ }
29
+ else if (this.open && event.key === "ArrowDown") {
30
+ event.preventDefault();
31
+ this.handleTab(1);
32
+ }
33
+ }
34
+ componentDidRender() {
35
+ if (this.open && !this.trap) {
36
+ this.createTrap();
37
+ }
38
+ else if (!this.open && this.trap) {
39
+ this.removeTrap();
40
+ }
41
+ }
42
+ createTrap() {
43
+ this.trap = createFocusTrap(this.host, {
44
+ clickOutsideDeactivates: true,
45
+ escapeDeactivates: true,
46
+ setReturnFocus: this.toggleButtonElementRef,
47
+ tabbableOptions: {
48
+ getShadowRoot: true,
49
+ },
50
+ onDeactivate: () => {
51
+ this.open = false;
52
+ },
53
+ }).activate();
54
+ }
55
+ removeTrap() {
56
+ var _a;
57
+ (_a = this.trap) === null || _a === void 0 ? void 0 : _a.deactivate();
58
+ delete this.trap;
59
+ }
60
+ handleTab(direction) {
61
+ var _a;
62
+ const elements = tabbable(this.host, { getShadowRoot: true });
63
+ const currentIndex = elements.findIndex((e) => { var _a; return e === ((_a = this.host.shadowRoot) === null || _a === void 0 ? void 0 : _a.activeElement); });
64
+ let nextIndex = currentIndex + direction;
65
+ if (nextIndex >= elements.length) {
66
+ nextIndex = 0;
67
+ }
68
+ else if (nextIndex < 0) {
69
+ nextIndex = elements.length - 1;
70
+ }
71
+ (_a = elements[nextIndex]) === null || _a === void 0 ? void 0 : _a.focus();
72
+ }
73
+ render() {
74
+ var _a, _b;
75
+ return (h(Fragment, null, h("button", { "aria-expanded": this.open.toString(), class: clsx(["active-option", { open: this.open }]), type: "button", onClick: this.toggleOpen, ref: (element) => (this.toggleButtonElementRef = element) }, h("span", { class: "active-option-label" }, (_b = (_a = this.active) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : "Selecteer een optie"), h("span", { class: "active-option-aside" }, this.options.some((optionOrGroup) => "summaryCounter" in optionOrGroup && (optionOrGroup === null || optionOrGroup === void 0 ? void 0 : optionOrGroup.summaryCounter)) && (h("span", { class: "badges" }, this.options
76
+ .filter((option) => "options" in option && "summaryCounter" in option && !!(option === null || option === void 0 ? void 0 : option.summaryCounter))
77
+ .map((group) => {
78
+ var _a;
79
+ return h("dso-badge", { status: (_a = group.variant) !== null && _a !== void 0 ? _a : "outline" }, group.options.length);
80
+ }))), h("dso-icon", { icon: "caret-down" }))), this.open && (h("div", { class: "groups-container" }, h("ul", { class: "groups" }, this.options.map((optionOrGroup) => "options" in optionOrGroup ? (h("li", { class: clsx(["group", { [`group-${optionOrGroup.variant}`]: !!optionOrGroup.variant }]) }, optionOrGroup.label && h("p", { class: "group-label" }, optionOrGroup.label), h("ul", { class: "options" }, optionOrGroup.options.map((option) => (h(OptionElement, { option: option, active: this.active, activeHint: this.activeHint, callback: this.handleOptionClick })))), optionOrGroup.redirect && (h("a", { class: "group-link", href: optionOrGroup.redirect.href, onClick: (e) => optionOrGroup.redirect && this.handleRedirectClick(e, optionOrGroup.redirect) }, optionOrGroup.redirect.label, h("dso-icon", { icon: "chevron-right" }))))) : (h(OptionElement, { option: optionOrGroup, active: this.active, activeHint: this.activeHint, callback: this.handleOptionClick }))))))));
81
+ }
82
+ static get is() { return "dso-advanced-select"; }
83
+ static get encapsulation() { return "shadow"; }
84
+ static get originalStyleUrls() {
85
+ return {
86
+ "$": ["advanced-select.scss"]
87
+ };
88
+ }
89
+ static get styleUrls() {
90
+ return {
91
+ "$": ["advanced-select.css"]
92
+ };
93
+ }
94
+ static get properties() {
95
+ return {
96
+ "options": {
97
+ "type": "unknown",
98
+ "mutable": false,
99
+ "complexType": {
100
+ "original": "AdvancedSelectOptionOrGroup<never>[]",
101
+ "resolved": "AdvancedSelectOptionOrGroup<never>[]",
102
+ "references": {
103
+ "AdvancedSelectOptionOrGroup": {
104
+ "location": "import",
105
+ "path": "./advanced-select.models",
106
+ "id": "src/components/advanced-select/advanced-select.models.ts::AdvancedSelectOptionOrGroup"
107
+ }
108
+ }
109
+ },
110
+ "required": false,
111
+ "optional": false,
112
+ "docs": {
113
+ "tags": [],
114
+ "text": "The options to display in the select."
115
+ },
116
+ "defaultValue": "[]"
117
+ },
118
+ "active": {
119
+ "type": "unknown",
120
+ "mutable": false,
121
+ "complexType": {
122
+ "original": "AdvancedSelectOption<never>",
123
+ "resolved": "AdvancedSelectOption<never> | undefined",
124
+ "references": {
125
+ "AdvancedSelectOption": {
126
+ "location": "import",
127
+ "path": "./advanced-select.models",
128
+ "id": "src/components/advanced-select/advanced-select.models.ts::AdvancedSelectOption"
129
+ }
130
+ }
131
+ },
132
+ "required": false,
133
+ "optional": true,
134
+ "docs": {
135
+ "tags": [],
136
+ "text": "The active option. By object reference."
137
+ }
138
+ },
139
+ "activeHint": {
140
+ "type": "string",
141
+ "mutable": false,
142
+ "complexType": {
143
+ "original": "string",
144
+ "resolved": "string | undefined",
145
+ "references": {}
146
+ },
147
+ "required": false,
148
+ "optional": true,
149
+ "docs": {
150
+ "tags": [],
151
+ "text": "An extra text for the active option. Only visible in the list of options."
152
+ },
153
+ "attribute": "active-hint",
154
+ "reflect": false
155
+ }
156
+ };
157
+ }
158
+ static get states() {
159
+ return {
160
+ "open": {}
161
+ };
162
+ }
163
+ static get events() {
164
+ return [{
165
+ "method": "dsoChange",
166
+ "name": "dsoChange",
167
+ "bubbles": false,
168
+ "cancelable": true,
169
+ "composed": true,
170
+ "docs": {
171
+ "tags": [],
172
+ "text": "Emitted when user selects an option"
173
+ },
174
+ "complexType": {
175
+ "original": "AdvancedSelectChangeEvent<never>",
176
+ "resolved": "AdvancedSelectChangeEvent<never>",
177
+ "references": {
178
+ "AdvancedSelectChangeEvent": {
179
+ "location": "import",
180
+ "path": "./advanced-select.models",
181
+ "id": "src/components/advanced-select/advanced-select.models.ts::AdvancedSelectChangeEvent"
182
+ }
183
+ }
184
+ }
185
+ }, {
186
+ "method": "dsoRedirect",
187
+ "name": "dsoRedirect",
188
+ "bubbles": false,
189
+ "cancelable": true,
190
+ "composed": true,
191
+ "docs": {
192
+ "tags": [],
193
+ "text": "Emitted when user activates a group redirect link."
194
+ },
195
+ "complexType": {
196
+ "original": "AdvancedSelectRedirectEvent",
197
+ "resolved": "AdvancedSelectRedirectEvent",
198
+ "references": {
199
+ "AdvancedSelectRedirectEvent": {
200
+ "location": "import",
201
+ "path": "./advanced-select.models",
202
+ "id": "src/components/advanced-select/advanced-select.models.ts::AdvancedSelectRedirectEvent"
203
+ }
204
+ }
205
+ }
206
+ }];
207
+ }
208
+ static get elementRef() { return "host"; }
209
+ static get listeners() {
210
+ return [{
211
+ "name": "keydown",
212
+ "method": "keyDownListener",
213
+ "target": "window",
214
+ "capture": false,
215
+ "passive": false
216
+ }];
217
+ }
218
+ }
219
+ const OptionElement = ({ option, active, activeHint, callback }) => (h("li", null, h("button", { class: clsx(["option", { "option-active": active === option }]), type: "button", onClick: (e) => callback(e, option) }, h("span", { class: "option-label" }, option.label), !!activeHint && active === option && h("span", { class: "option-hint" }, "(", activeHint, ")"))));
220
+ //# sourceMappingURL=advanced-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-select.js","sourceRoot":"","sources":["../../../../src/components/advanced-select/advanced-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\r\n Component,\r\n ComponentInterface,\r\n Prop,\r\n h,\r\n FunctionalComponent,\r\n Element,\r\n Event,\r\n EventEmitter,\r\n State,\r\n Fragment,\r\n Listen,\r\n} from \"@stencil/core\";\r\nimport clsx from \"clsx\";\r\nimport {\r\n AdvancedSelectGroup,\r\n AdvancedSelectGroupRedirect,\r\n AdvancedSelectOption,\r\n AdvancedSelectChangeEvent,\r\n AdvancedSelectOptionOrGroup,\r\n AdvancedSelectRedirectEvent,\r\n} from \"./advanced-select.models\";\r\nimport { createFocusTrap, FocusTrap } from \"focus-trap\";\r\nimport { tabbable } from \"tabbable\";\r\nimport { isModifiedEvent } from \"../../utils/is-modified-event\";\r\n\r\n@Component({\r\n tag: \"dso-advanced-select\",\r\n styleUrl: \"advanced-select.scss\",\r\n shadow: true,\r\n})\r\nexport class AdvancedSelect implements ComponentInterface {\r\n private trap?: FocusTrap;\r\n\r\n @Element()\r\n host!: HTMLDsoAdvancedSelectElement;\r\n\r\n /**\r\n * The options to display in the select.\r\n */\r\n @Prop()\r\n options: AdvancedSelectOptionOrGroup<never>[] = [];\r\n\r\n /**\r\n * The active option. By object reference.\r\n */\r\n @Prop()\r\n active?: AdvancedSelectOption<never>;\r\n\r\n /**\r\n * An extra text for the active option. Only visible in the list of options.\r\n */\r\n @Prop()\r\n activeHint?: string;\r\n\r\n /**\r\n * The open state of the options list.\r\n */\r\n @State()\r\n open: boolean = false;\r\n\r\n /**\r\n * Emitted when user selects an option\r\n */\r\n @Event({ bubbles: false })\r\n dsoChange!: EventEmitter<AdvancedSelectChangeEvent<never>>;\r\n\r\n /**\r\n * Emitted when user activates a group redirect link.\r\n */\r\n @Event({ bubbles: false })\r\n dsoRedirect!: EventEmitter<AdvancedSelectRedirectEvent>;\r\n\r\n private toggleButtonElementRef: HTMLButtonElement | undefined;\r\n\r\n @Listen(\"keydown\", { target: \"window\" })\r\n keyDownListener(event: KeyboardEvent) {\r\n if (this.open && event.key === \"ArrowUp\") {\r\n event.preventDefault();\r\n this.handleTab(-1);\r\n } else if (this.open && event.key === \"ArrowDown\") {\r\n event.preventDefault();\r\n this.handleTab(1);\r\n }\r\n }\r\n\r\n componentDidRender() {\r\n if (this.open && !this.trap) {\r\n this.createTrap();\r\n } else if (!this.open && this.trap) {\r\n this.removeTrap();\r\n }\r\n }\r\n\r\n private toggleOpen = () => {\r\n this.open = !this.open;\r\n };\r\n\r\n private createTrap() {\r\n this.trap = createFocusTrap(this.host, {\r\n clickOutsideDeactivates: true,\r\n escapeDeactivates: true,\r\n setReturnFocus: this.toggleButtonElementRef,\r\n tabbableOptions: {\r\n getShadowRoot: true,\r\n },\r\n onDeactivate: () => {\r\n this.open = false;\r\n },\r\n }).activate();\r\n }\r\n\r\n private removeTrap() {\r\n this.trap?.deactivate();\r\n delete this.trap;\r\n }\r\n\r\n private handleTab(direction: number) {\r\n const elements = tabbable(this.host, { getShadowRoot: true });\r\n const currentIndex = elements.findIndex((e) => e === this.host.shadowRoot?.activeElement);\r\n\r\n let nextIndex = currentIndex + direction;\r\n if (nextIndex >= elements.length) {\r\n nextIndex = 0;\r\n } else if (nextIndex < 0) {\r\n nextIndex = elements.length - 1;\r\n }\r\n\r\n elements[nextIndex]?.focus();\r\n }\r\n\r\n private handleOptionClick = (event: MouseEvent, option: AdvancedSelectOption<never>) => {\r\n this.dsoChange.emit({ originalEvent: event, option });\r\n this.open = false;\r\n };\r\n\r\n private handleRedirectClick = (event: MouseEvent, redirect: AdvancedSelectGroupRedirect) => {\r\n this.dsoRedirect.emit({ originalEvent: event, isModifiedEvent: isModifiedEvent(event), redirect });\r\n this.open = false;\r\n };\r\n\r\n render() {\r\n return (\r\n <>\r\n <button\r\n aria-expanded={this.open.toString()}\r\n class={clsx([\"active-option\", { open: this.open }])}\r\n type=\"button\"\r\n onClick={this.toggleOpen}\r\n ref={(element) => (this.toggleButtonElementRef = element)}\r\n >\r\n <span class=\"active-option-label\">{this.active?.label ?? \"Selecteer een optie\"}</span>\r\n <span class=\"active-option-aside\">\r\n {this.options.some(\r\n (optionOrGroup) => \"summaryCounter\" in optionOrGroup && optionOrGroup?.summaryCounter,\r\n ) && (\r\n <span class=\"badges\">\r\n {this.options\r\n .filter(\r\n (option): option is AdvancedSelectGroup<never> =>\r\n \"options\" in option && \"summaryCounter\" in option && !!option?.summaryCounter,\r\n )\r\n .map((group) => {\r\n return <dso-badge status={group.variant ?? \"outline\"}>{group.options.length}</dso-badge>;\r\n })}\r\n </span>\r\n )}\r\n <dso-icon icon=\"caret-down\"></dso-icon>\r\n </span>\r\n </button>\r\n {this.open && (\r\n <div class=\"groups-container\">\r\n <ul class=\"groups\">\r\n {this.options.map((optionOrGroup) =>\r\n \"options\" in optionOrGroup ? (\r\n <li class={clsx([\"group\", { [`group-${optionOrGroup.variant}`]: !!optionOrGroup.variant }])}>\r\n {optionOrGroup.label && <p class=\"group-label\">{optionOrGroup.label}</p>}\r\n <ul class=\"options\">\r\n {optionOrGroup.options.map((option) => (\r\n <OptionElement\r\n option={option}\r\n active={this.active}\r\n activeHint={this.activeHint}\r\n callback={this.handleOptionClick}\r\n />\r\n ))}\r\n </ul>\r\n {optionOrGroup.redirect && (\r\n <a\r\n class=\"group-link\"\r\n href={optionOrGroup.redirect.href}\r\n onClick={(e) => optionOrGroup.redirect && this.handleRedirectClick(e, optionOrGroup.redirect)}\r\n >\r\n {optionOrGroup.redirect.label}\r\n <dso-icon icon=\"chevron-right\"></dso-icon>\r\n </a>\r\n )}\r\n </li>\r\n ) : (\r\n <OptionElement\r\n option={optionOrGroup}\r\n active={this.active}\r\n activeHint={this.activeHint}\r\n callback={this.handleOptionClick}\r\n />\r\n ),\r\n )}\r\n </ul>\r\n </div>\r\n )}\r\n </>\r\n );\r\n }\r\n}\r\n\r\nconst OptionElement: FunctionalComponent<{\r\n option: AdvancedSelectOption<never>;\r\n active: AdvancedSelectOption<never> | undefined;\r\n activeHint: string | undefined;\r\n callback: (event: MouseEvent, value: AdvancedSelectOption<never>) => void;\r\n}> = ({ option, active, activeHint, callback }) => (\r\n <li>\r\n <button\r\n class={clsx([\"option\", { \"option-active\": active === option }])}\r\n type=\"button\"\r\n onClick={(e) => callback(e, option)}\r\n >\r\n <span class=\"option-label\">{option.label}</span>\r\n {!!activeHint && active === option && <span class=\"option-hint\">({activeHint})</span>}\r\n </button>\r\n </li>\r\n);\r\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=advanced-select.models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced-select.models.js","sourceRoot":"","sources":["../../../../src/components/advanced-select/advanced-select.models.ts"],"names":[],"mappings":"","sourcesContent":["export type AdvancedSelectVariant = \"primary\" | \"success\" | \"info\" | \"warning\" | \"danger\" | \"error\" | \"attention\";\r\n\r\nexport interface AdvancedSelectOption<T> {\r\n label: string;\r\n value?: T;\r\n}\r\n\r\nexport interface AdvancedSelectGroupRedirect {\r\n label: string;\r\n href: string;\r\n}\r\n\r\nexport interface AdvancedSelectGroup<T> {\r\n label: string;\r\n summaryCounter?: boolean;\r\n redirect?: AdvancedSelectGroupRedirect;\r\n options: AdvancedSelectOption<T>[];\r\n variant?: AdvancedSelectVariant;\r\n}\r\n\r\nexport type AdvancedSelectOptionOrGroup<T> = AdvancedSelectOption<T> | AdvancedSelectGroup<T>;\r\n\r\nexport interface AdvancedSelectChangeEvent<T> {\r\n originalEvent: MouseEvent;\r\n option: AdvancedSelectOption<T>;\r\n}\r\n\r\nexport interface AdvancedSelectRedirectEvent {\r\n originalEvent: MouseEvent;\r\n isModifiedEvent: boolean;\r\n redirect: AdvancedSelectGroupRedirect;\r\n}\r\n"]}
@@ -0,0 +1,74 @@
1
+ :host {
2
+ display: flex;
3
+ align-items: center;
4
+ gap: 0.5rem;
5
+ padding: 0.5rem;
6
+ inline-size: 100%;
7
+ }
8
+
9
+ *,
10
+ *::after,
11
+ *::before {
12
+ box-sizing: border-box;
13
+ }
14
+
15
+ .counter {
16
+ flex-shrink: 0;
17
+ min-inline-size: 5ch;
18
+ }
19
+ .counter.min {
20
+ text-align: end;
21
+ }
22
+ .counter.max {
23
+ text-align: start;
24
+ }
25
+
26
+ .input {
27
+ flex-grow: 1;
28
+ appearance: none;
29
+ background-color: transparent;
30
+ cursor: pointer;
31
+ }
32
+ .input::-webkit-slider-runnable-track {
33
+ block-size: 0.5rem;
34
+ background-color: #e5e5e5;
35
+ border: 1px solid #666;
36
+ border-radius: 0.5rem;
37
+ }
38
+ .input::-webkit-slider-runnable-track:hover {
39
+ background-color: #ccc;
40
+ }
41
+ .input::-webkit-slider-thumb {
42
+ block-size: 1.5rem;
43
+ inline-size: 1.5rem;
44
+ appearance: none;
45
+ margin-block-start: -0.55rem;
46
+ background-color: #39870c;
47
+ border-radius: 50%;
48
+ }
49
+ .input::-webkit-slider-thumb:hover {
50
+ background-color: #275937;
51
+ }
52
+ .input::-moz-range-track {
53
+ box-sizing: border-box;
54
+ block-size: 0.5rem;
55
+ background-color: #e5e5e5;
56
+ border: 1px solid #666;
57
+ border-radius: 0.5rem;
58
+ }
59
+ .input::-moz-range-track:hover {
60
+ background-color: #ccc;
61
+ }
62
+ .input::-moz-range-thumb {
63
+ box-sizing: border-box;
64
+ block-size: 1.5rem;
65
+ inline-size: 1.5rem;
66
+ appearance: none;
67
+ margin-block-start: -0.5rem;
68
+ background-color: #39870c;
69
+ border-color: transparent;
70
+ border-radius: 50%;
71
+ }
72
+ .input::-moz-range-thumb:hover {
73
+ background-color: #275937;
74
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=input-range.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-range.interfaces.js","sourceRoot":"","sources":["../../../../src/components/input-range/input-range.interfaces.ts"],"names":[],"mappings":"","sourcesContent":["export interface InputRangeChangeEvent {\r\n originalEvent: Event;\r\n value: number | undefined;\r\n min: number;\r\n max: number;\r\n step: number;\r\n}\r\n"]}