@sekiui/elements 0.0.49 → 0.0.50

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 (129) hide show
  1. package/dist/cdn/index.js +2 -2
  2. package/dist/cdn/{p-BLeUUc2-.js → p-DOQb1L-i.js} +28 -3
  3. package/dist/cdn/seki-button.js +1 -1
  4. package/dist/cdn/seki-field-description.js +1 -1
  5. package/dist/cdn/seki-field-error.js +1 -1
  6. package/dist/cdn/seki-field-group.js +1 -1
  7. package/dist/cdn/seki-field-label.js +1 -1
  8. package/dist/cdn/seki-field-legend.js +1 -1
  9. package/dist/cdn/seki-field.js +1 -1
  10. package/dist/cdn/seki-fieldset.js +1 -1
  11. package/dist/cdn/seki-input.js +1 -1
  12. package/dist/cdn/seki-select-content.d.ts +11 -0
  13. package/dist/cdn/seki-select-content.js +94 -0
  14. package/dist/cdn/seki-select-group.d.ts +11 -0
  15. package/dist/cdn/seki-select-group.js +42 -0
  16. package/dist/cdn/seki-select-option.d.ts +11 -0
  17. package/dist/cdn/seki-select-option.js +101 -0
  18. package/dist/cdn/seki-select-trigger.d.ts +11 -0
  19. package/dist/cdn/seki-select-trigger.js +147 -0
  20. package/dist/cdn/seki-select.d.ts +11 -0
  21. package/dist/cdn/seki-select.js +303 -0
  22. package/dist/cdn/seki-skeleton.js +2 -2
  23. package/dist/cjs/{index-BxD7Xe36.js → index-8TkHNmrx.js} +28 -3
  24. package/dist/cjs/index.cjs.js +1 -1
  25. package/dist/cjs/loader.cjs.js +2 -2
  26. package/dist/cjs/seki-button.cjs.entry.js +1 -1
  27. package/dist/cjs/seki-field-description.cjs.entry.js +1 -1
  28. package/dist/cjs/seki-field-error.cjs.entry.js +1 -1
  29. package/dist/cjs/seki-field-group.cjs.entry.js +1 -1
  30. package/dist/cjs/seki-field-label.cjs.entry.js +1 -1
  31. package/dist/cjs/seki-field-legend.cjs.entry.js +1 -1
  32. package/dist/cjs/seki-field.cjs.entry.js +1 -1
  33. package/dist/cjs/seki-fieldset.cjs.entry.js +1 -1
  34. package/dist/cjs/seki-input.cjs.entry.js +1 -1
  35. package/dist/cjs/seki-select-content.cjs.entry.js +72 -0
  36. package/dist/cjs/seki-select-group.cjs.entry.js +21 -0
  37. package/dist/cjs/seki-select-option.cjs.entry.js +78 -0
  38. package/dist/cjs/seki-select-trigger.cjs.entry.js +126 -0
  39. package/dist/cjs/seki-select.cjs.entry.js +254 -0
  40. package/dist/cjs/seki-skeleton.cjs.entry.js +2 -2
  41. package/dist/cjs/seki-switch.cjs.entry.js +1 -1
  42. package/dist/cjs/sekiui.cjs.js +2 -2
  43. package/dist/collection/collection-manifest.json +5 -0
  44. package/dist/collection/components/select/seki-select.css +410 -0
  45. package/dist/collection/components/select/seki-select.js +728 -0
  46. package/dist/collection/components/select-content/seki-select-content.css +403 -0
  47. package/dist/collection/components/select-content/seki-select-content.js +112 -0
  48. package/dist/collection/components/select-group/seki-select-group.css +393 -0
  49. package/dist/collection/components/select-group/seki-select-group.js +51 -0
  50. package/dist/collection/components/select-option/seki-select-option.css +423 -0
  51. package/dist/collection/components/select-option/seki-select-option.js +178 -0
  52. package/dist/collection/components/select-trigger/seki-select-trigger.css +477 -0
  53. package/dist/collection/components/select-trigger/seki-select-trigger.js +138 -0
  54. package/dist/collection/components/skeleton/seki-skeleton.js +1 -1
  55. package/dist/collection/utils/select/index.js +6 -0
  56. package/dist/collection/utils/select/select-context.js +38 -0
  57. package/dist/collection/utils/select/types.js +1 -0
  58. package/dist/components/index.js +2 -2
  59. package/dist/components/{p-BFmmBW7R.js → p-Bo3Iu2B_.js} +28 -3
  60. package/dist/components/seki-button.js +1 -1
  61. package/dist/components/seki-field-description.js +1 -1
  62. package/dist/components/seki-field-error.js +1 -1
  63. package/dist/components/seki-field-group.js +1 -1
  64. package/dist/components/seki-field-label.js +1 -1
  65. package/dist/components/seki-field-legend.js +1 -1
  66. package/dist/components/seki-field.js +1 -1
  67. package/dist/components/seki-fieldset.js +1 -1
  68. package/dist/components/seki-input.js +1 -1
  69. package/dist/components/seki-select-content.d.ts +11 -0
  70. package/dist/components/seki-select-content.js +94 -0
  71. package/dist/components/seki-select-group.d.ts +11 -0
  72. package/dist/components/seki-select-group.js +42 -0
  73. package/dist/components/seki-select-option.d.ts +11 -0
  74. package/dist/components/seki-select-option.js +101 -0
  75. package/dist/components/seki-select-trigger.d.ts +11 -0
  76. package/dist/components/seki-select-trigger.js +147 -0
  77. package/dist/components/seki-select.d.ts +11 -0
  78. package/dist/components/seki-select.js +303 -0
  79. package/dist/components/seki-skeleton.js +2 -2
  80. package/dist/esm/{index-ByHohxc0.js → index-CXbcuidh.js} +28 -3
  81. package/dist/esm/index.js +1 -1
  82. package/dist/esm/loader.js +3 -3
  83. package/dist/esm/seki-button.entry.js +1 -1
  84. package/dist/esm/seki-field-description.entry.js +1 -1
  85. package/dist/esm/seki-field-error.entry.js +1 -1
  86. package/dist/esm/seki-field-group.entry.js +1 -1
  87. package/dist/esm/seki-field-label.entry.js +1 -1
  88. package/dist/esm/seki-field-legend.entry.js +1 -1
  89. package/dist/esm/seki-field.entry.js +1 -1
  90. package/dist/esm/seki-fieldset.entry.js +1 -1
  91. package/dist/esm/seki-input.entry.js +1 -1
  92. package/dist/esm/seki-select-content.entry.js +70 -0
  93. package/dist/esm/seki-select-group.entry.js +19 -0
  94. package/dist/esm/seki-select-option.entry.js +76 -0
  95. package/dist/esm/seki-select-trigger.entry.js +124 -0
  96. package/dist/esm/seki-select.entry.js +252 -0
  97. package/dist/esm/seki-skeleton.entry.js +2 -2
  98. package/dist/esm/seki-switch.entry.js +1 -1
  99. package/dist/esm/sekiui.js +3 -3
  100. package/dist/sekiui/index.esm.js +1 -1
  101. package/dist/sekiui/{p-3b2d3e96.entry.js → p-0dc263b4.entry.js} +1 -1
  102. package/dist/sekiui/{p-51f2af94.entry.js → p-2c2c1b32.entry.js} +1 -1
  103. package/dist/sekiui/p-34efaa97.entry.js +1 -0
  104. package/dist/sekiui/p-422ca6b1.entry.js +1 -0
  105. package/dist/sekiui/p-462e506e.entry.js +1 -0
  106. package/dist/sekiui/{p-1b1a5e38.entry.js → p-46eb60c1.entry.js} +1 -1
  107. package/dist/sekiui/{p-128cfe90.entry.js → p-4b53d186.entry.js} +1 -1
  108. package/dist/sekiui/{p-1c923d08.entry.js → p-4d5088f9.entry.js} +1 -1
  109. package/dist/sekiui/{p-459bb637.entry.js → p-5071ac36.entry.js} +1 -1
  110. package/dist/sekiui/p-69c09654.entry.js +1 -0
  111. package/dist/sekiui/{p-bc921daa.entry.js → p-930b01ff.entry.js} +1 -1
  112. package/dist/sekiui/p-CXbcuidh.js +2 -0
  113. package/dist/sekiui/{p-70281e83.entry.js → p-b8aa77e4.entry.js} +1 -1
  114. package/dist/sekiui/{p-d034b071.entry.js → p-bdbf3000.entry.js} +1 -1
  115. package/dist/sekiui/p-cec05c04.entry.js +1 -0
  116. package/dist/sekiui/{p-2ecf7587.entry.js → p-ddc8d46e.entry.js} +1 -1
  117. package/dist/sekiui/{p-281803dd.entry.js → p-e79c7b4d.entry.js} +1 -1
  118. package/dist/sekiui/sekiui.esm.js +1 -1
  119. package/dist/types/components/select/seki-select.d.ts +80 -0
  120. package/dist/types/components/select-content/seki-select-content.d.ts +15 -0
  121. package/dist/types/components/select-group/seki-select-group.d.ts +10 -0
  122. package/dist/types/components/select-option/seki-select-option.d.ts +29 -0
  123. package/dist/types/components/select-trigger/seki-select-trigger.d.ts +21 -0
  124. package/dist/types/components.d.ts +310 -0
  125. package/dist/types/utils/select/index.d.ts +6 -0
  126. package/dist/types/utils/select/select-context.d.ts +19 -0
  127. package/dist/types/utils/select/types.d.ts +109 -0
  128. package/package.json +4 -1
  129. package/dist/sekiui/p-ByHohxc0.js +0 -2
@@ -0,0 +1,728 @@
1
+ import { Host, h } from "@stencil/core";
2
+ /**
3
+ * @slot - Content containing seki-select-trigger and seki-select-content
4
+ */
5
+ export class SekiSelect {
6
+ constructor() {
7
+ /** Enable multi-select mode */
8
+ this.multiple = false;
9
+ /** Placeholder text shown when no selection */
10
+ this.placeholder = 'Select an option';
11
+ /** Disable all interactions */
12
+ this.disabled = false;
13
+ /** Mark as required for form validation */
14
+ this.required = false;
15
+ /** Initial dropdown open state (uncontrolled mode) */
16
+ this.defaultOpen = false;
17
+ /** Maximum visible pills in multi-select mode */
18
+ this.maxVisiblePills = 3;
19
+ /** Preferred dropdown placement */
20
+ this.placement = 'bottom';
21
+ /** Maximum dropdown height */
22
+ this.maxHeight = '12.5rem';
23
+ // ===========================
24
+ // State
25
+ // ===========================
26
+ this.internalValue = '';
27
+ this.isOpen = false;
28
+ this.focusedOptionValue = null;
29
+ this.registeredOptions = [];
30
+ this.hasBeenActivated = false;
31
+ this.contentId = `select-content-${Math.random().toString(36).substr(2, 9)}`;
32
+ this.triggerId = `select-trigger-${Math.random().toString(36).substr(2, 9)}`;
33
+ // ===========================
34
+ // Internal Handlers
35
+ // ===========================
36
+ this.handleValueChange = (newValue) => {
37
+ this.internalValue = newValue;
38
+ // Update controlled prop if it exists
39
+ if (this.value !== undefined) {
40
+ this.value = newValue;
41
+ }
42
+ // Emit change event
43
+ const selectedOptions = this.getSelectedOptions();
44
+ if (this.multiple && Array.isArray(newValue)) {
45
+ this.sekiChange.emit({
46
+ value: newValue,
47
+ options: selectedOptions,
48
+ });
49
+ }
50
+ else {
51
+ this.sekiChange.emit({
52
+ value: newValue,
53
+ option: selectedOptions[0],
54
+ });
55
+ }
56
+ // Close dropdown in single-select mode
57
+ if (!this.multiple) {
58
+ this.handleOpenChange(false);
59
+ }
60
+ };
61
+ this.handleOpenChange = (open) => {
62
+ this.isOpen = open;
63
+ // Update controlled prop if it exists
64
+ if (this.open !== undefined) {
65
+ this.open = open;
66
+ }
67
+ // Mark as activated when opened
68
+ if (open) {
69
+ this.hasBeenActivated = true;
70
+ }
71
+ // Emit event
72
+ this.sekiOpenChange.emit({ open });
73
+ // Validate on close if required
74
+ if (!open && this.required && this.hasBeenActivated) {
75
+ this.validateRequired();
76
+ }
77
+ };
78
+ this.handleOptionFocus = (value) => {
79
+ this.focusedOptionValue = value;
80
+ };
81
+ this.handleOptionSelect = (value) => {
82
+ if (this.multiple) {
83
+ const currentValue = Array.isArray(this.internalValue) ? this.internalValue : [];
84
+ if (currentValue.includes(value)) {
85
+ // Deselect
86
+ this.handleValueChange(currentValue.filter(v => v !== value));
87
+ }
88
+ else {
89
+ // Select
90
+ this.handleValueChange([...currentValue, value]);
91
+ }
92
+ }
93
+ else {
94
+ this.handleValueChange(value);
95
+ }
96
+ };
97
+ this.isValueSelected = (value) => {
98
+ if (this.multiple && Array.isArray(this.internalValue)) {
99
+ return this.internalValue.includes(value);
100
+ }
101
+ return this.internalValue === value;
102
+ };
103
+ this.getSelectedOptions = () => {
104
+ if (this.multiple && Array.isArray(this.internalValue)) {
105
+ return this.registeredOptions.filter(opt => this.internalValue.includes(opt.value));
106
+ }
107
+ return this.registeredOptions.filter(opt => opt.value === this.internalValue);
108
+ };
109
+ this.registerOption = (option) => {
110
+ this.registeredOptions = [...this.registeredOptions, option];
111
+ };
112
+ this.unregisterOption = (value) => {
113
+ this.registeredOptions = this.registeredOptions.filter(opt => opt.value !== value);
114
+ };
115
+ this.validateRequired = () => {
116
+ const isValid = this.multiple
117
+ ? Array.isArray(this.internalValue) && this.internalValue.length > 0
118
+ : Boolean(this.internalValue);
119
+ this.sekiValidate.emit({
120
+ valid: isValid,
121
+ errorMessage: isValid ? undefined : 'This field is required',
122
+ });
123
+ };
124
+ this.handleValidate = (valid, errorMessage) => {
125
+ this.sekiValidate.emit({ valid, errorMessage });
126
+ };
127
+ }
128
+ // ===========================
129
+ // Lifecycle
130
+ // ===========================
131
+ componentWillLoad() {
132
+ // Initialize internal state
133
+ if (this.value !== undefined) {
134
+ this.internalValue = this.value;
135
+ }
136
+ else if (this.defaultValue !== undefined) {
137
+ this.internalValue = this.defaultValue;
138
+ }
139
+ else {
140
+ this.internalValue = this.multiple ? [] : '';
141
+ }
142
+ if (this.open !== undefined) {
143
+ this.isOpen = this.open;
144
+ }
145
+ else if (this.defaultOpen) {
146
+ this.isOpen = this.defaultOpen;
147
+ }
148
+ // Expose context on the element for child components
149
+ this.el.selectContext = this.selectContext;
150
+ }
151
+ componentDidLoad() {
152
+ // Expose context on the element for child components
153
+ this.el.selectContext = this.selectContext;
154
+ }
155
+ componentDidRender() {
156
+ // Update context reference after each render
157
+ this.el.selectContext = this.selectContext;
158
+ }
159
+ handleValuePropChange(newValue) {
160
+ if (newValue !== undefined) {
161
+ this.internalValue = newValue;
162
+ }
163
+ this.updateContextOnElement();
164
+ }
165
+ handleOpenPropChange(newOpen) {
166
+ if (newOpen !== undefined) {
167
+ this.isOpen = newOpen;
168
+ }
169
+ this.updateContextOnElement();
170
+ }
171
+ handleIsOpenChange() {
172
+ this.updateContextOnElement();
173
+ }
174
+ handleInternalValueChange() {
175
+ this.updateContextOnElement();
176
+ }
177
+ updateContextOnElement() {
178
+ this.el.selectContext = this.selectContext;
179
+ }
180
+ // ===========================
181
+ // Methods
182
+ // ===========================
183
+ /** Programmatically open the dropdown */
184
+ async openDropdown() {
185
+ this.handleOpenChange(true);
186
+ }
187
+ /** Programmatically close the dropdown */
188
+ async closeDropdown() {
189
+ this.handleOpenChange(false);
190
+ }
191
+ /** Focus the trigger element */
192
+ async focusTrigger() {
193
+ // Implementation will focus the trigger
194
+ }
195
+ /** Clear all selections */
196
+ async clearSelection() {
197
+ this.handleValueChange(this.multiple ? [] : '');
198
+ }
199
+ // Context to provide to children
200
+ get selectContext() {
201
+ return {
202
+ value: this.internalValue,
203
+ multiple: this.multiple,
204
+ open: this.isOpen,
205
+ disabled: this.disabled,
206
+ required: this.required,
207
+ focusedOptionValue: this.focusedOptionValue,
208
+ contentId: this.contentId,
209
+ triggerId: this.triggerId,
210
+ ariaLabel: this.ariaLabel,
211
+ ariaLabelledby: this.ariaLabelledby,
212
+ ariaDescribedby: this.ariaDescribedby,
213
+ onValueChange: this.handleValueChange,
214
+ onOpenChange: this.handleOpenChange,
215
+ onOptionFocus: this.handleOptionFocus,
216
+ onOptionSelect: this.handleOptionSelect,
217
+ isValueSelected: this.isValueSelected,
218
+ getSelectedOptions: this.getSelectedOptions,
219
+ registerOption: this.registerOption,
220
+ unregisterOption: this.unregisterOption,
221
+ };
222
+ }
223
+ // ===========================
224
+ // Render
225
+ // ===========================
226
+ render() {
227
+ return (h(Host, { key: 'e8228e9d231c9e9261a2d4053c7f5f2b0ef09785' }, h("slot", { key: '9b87147de8705e01ad5d45a84c04258feaab286e' }), this.name && this.renderHiddenNativeElement()));
228
+ }
229
+ renderHiddenNativeElement() {
230
+ if (this.multiple) {
231
+ return (h("select", { class: "select-native", name: this.name, multiple: true, required: this.required, disabled: this.disabled, "aria-hidden": "true", tabindex: -1 }, Array.isArray(this.internalValue) &&
232
+ this.internalValue.map(val => (h("option", { value: val, selected: true }, val)))));
233
+ }
234
+ else {
235
+ return (h("input", { type: "hidden", class: "select-native", name: this.name, value: this.internalValue, required: this.required, disabled: this.disabled }));
236
+ }
237
+ }
238
+ static get is() { return "seki-select"; }
239
+ static get encapsulation() { return "shadow"; }
240
+ static get originalStyleUrls() {
241
+ return {
242
+ "$": ["seki-select.css"]
243
+ };
244
+ }
245
+ static get styleUrls() {
246
+ return {
247
+ "$": ["seki-select.css"]
248
+ };
249
+ }
250
+ static get properties() {
251
+ return {
252
+ "value": {
253
+ "type": "any",
254
+ "mutable": true,
255
+ "complexType": {
256
+ "original": "SelectValue",
257
+ "resolved": "(string | number)[] | number | string | undefined",
258
+ "references": {
259
+ "SelectValue": {
260
+ "location": "import",
261
+ "path": "../../utils/select",
262
+ "id": "src/utils/select/index.ts::SelectValue"
263
+ }
264
+ }
265
+ },
266
+ "required": false,
267
+ "optional": true,
268
+ "docs": {
269
+ "tags": [],
270
+ "text": "Current selected value (controlled mode)"
271
+ },
272
+ "getter": false,
273
+ "setter": false,
274
+ "reflect": false,
275
+ "attribute": "value"
276
+ },
277
+ "defaultValue": {
278
+ "type": "any",
279
+ "mutable": false,
280
+ "complexType": {
281
+ "original": "SelectValue",
282
+ "resolved": "(string | number)[] | number | string | undefined",
283
+ "references": {
284
+ "SelectValue": {
285
+ "location": "import",
286
+ "path": "../../utils/select",
287
+ "id": "src/utils/select/index.ts::SelectValue"
288
+ }
289
+ }
290
+ },
291
+ "required": false,
292
+ "optional": true,
293
+ "docs": {
294
+ "tags": [],
295
+ "text": "Initial selected value (uncontrolled mode)"
296
+ },
297
+ "getter": false,
298
+ "setter": false,
299
+ "reflect": false,
300
+ "attribute": "default-value"
301
+ },
302
+ "multiple": {
303
+ "type": "boolean",
304
+ "mutable": false,
305
+ "complexType": {
306
+ "original": "boolean",
307
+ "resolved": "boolean",
308
+ "references": {}
309
+ },
310
+ "required": false,
311
+ "optional": false,
312
+ "docs": {
313
+ "tags": [],
314
+ "text": "Enable multi-select mode"
315
+ },
316
+ "getter": false,
317
+ "setter": false,
318
+ "reflect": false,
319
+ "attribute": "multiple",
320
+ "defaultValue": "false"
321
+ },
322
+ "placeholder": {
323
+ "type": "string",
324
+ "mutable": false,
325
+ "complexType": {
326
+ "original": "string",
327
+ "resolved": "string",
328
+ "references": {}
329
+ },
330
+ "required": false,
331
+ "optional": false,
332
+ "docs": {
333
+ "tags": [],
334
+ "text": "Placeholder text shown when no selection"
335
+ },
336
+ "getter": false,
337
+ "setter": false,
338
+ "reflect": false,
339
+ "attribute": "placeholder",
340
+ "defaultValue": "'Select an option'"
341
+ },
342
+ "disabled": {
343
+ "type": "boolean",
344
+ "mutable": false,
345
+ "complexType": {
346
+ "original": "boolean",
347
+ "resolved": "boolean",
348
+ "references": {}
349
+ },
350
+ "required": false,
351
+ "optional": false,
352
+ "docs": {
353
+ "tags": [],
354
+ "text": "Disable all interactions"
355
+ },
356
+ "getter": false,
357
+ "setter": false,
358
+ "reflect": false,
359
+ "attribute": "disabled",
360
+ "defaultValue": "false"
361
+ },
362
+ "required": {
363
+ "type": "boolean",
364
+ "mutable": false,
365
+ "complexType": {
366
+ "original": "boolean",
367
+ "resolved": "boolean",
368
+ "references": {}
369
+ },
370
+ "required": false,
371
+ "optional": false,
372
+ "docs": {
373
+ "tags": [],
374
+ "text": "Mark as required for form validation"
375
+ },
376
+ "getter": false,
377
+ "setter": false,
378
+ "reflect": false,
379
+ "attribute": "required",
380
+ "defaultValue": "false"
381
+ },
382
+ "open": {
383
+ "type": "boolean",
384
+ "mutable": true,
385
+ "complexType": {
386
+ "original": "boolean",
387
+ "resolved": "boolean | undefined",
388
+ "references": {}
389
+ },
390
+ "required": false,
391
+ "optional": true,
392
+ "docs": {
393
+ "tags": [],
394
+ "text": "Control dropdown open state (controlled mode)"
395
+ },
396
+ "getter": false,
397
+ "setter": false,
398
+ "reflect": false,
399
+ "attribute": "open"
400
+ },
401
+ "defaultOpen": {
402
+ "type": "boolean",
403
+ "mutable": false,
404
+ "complexType": {
405
+ "original": "boolean",
406
+ "resolved": "boolean",
407
+ "references": {}
408
+ },
409
+ "required": false,
410
+ "optional": false,
411
+ "docs": {
412
+ "tags": [],
413
+ "text": "Initial dropdown open state (uncontrolled mode)"
414
+ },
415
+ "getter": false,
416
+ "setter": false,
417
+ "reflect": false,
418
+ "attribute": "default-open",
419
+ "defaultValue": "false"
420
+ },
421
+ "name": {
422
+ "type": "string",
423
+ "mutable": false,
424
+ "complexType": {
425
+ "original": "string",
426
+ "resolved": "string | undefined",
427
+ "references": {}
428
+ },
429
+ "required": false,
430
+ "optional": true,
431
+ "docs": {
432
+ "tags": [],
433
+ "text": "Form field name for form submission"
434
+ },
435
+ "getter": false,
436
+ "setter": false,
437
+ "reflect": false,
438
+ "attribute": "name"
439
+ },
440
+ "maxVisiblePills": {
441
+ "type": "number",
442
+ "mutable": false,
443
+ "complexType": {
444
+ "original": "number",
445
+ "resolved": "number",
446
+ "references": {}
447
+ },
448
+ "required": false,
449
+ "optional": false,
450
+ "docs": {
451
+ "tags": [],
452
+ "text": "Maximum visible pills in multi-select mode"
453
+ },
454
+ "getter": false,
455
+ "setter": false,
456
+ "reflect": false,
457
+ "attribute": "max-visible-pills",
458
+ "defaultValue": "3"
459
+ },
460
+ "ariaLabel": {
461
+ "type": "string",
462
+ "mutable": false,
463
+ "complexType": {
464
+ "original": "string",
465
+ "resolved": "string | undefined",
466
+ "references": {}
467
+ },
468
+ "required": false,
469
+ "optional": true,
470
+ "docs": {
471
+ "tags": [],
472
+ "text": "Accessible label for screen readers"
473
+ },
474
+ "getter": false,
475
+ "setter": false,
476
+ "reflect": false,
477
+ "attribute": "aria-label"
478
+ },
479
+ "ariaLabelledby": {
480
+ "type": "string",
481
+ "mutable": false,
482
+ "complexType": {
483
+ "original": "string",
484
+ "resolved": "string | undefined",
485
+ "references": {}
486
+ },
487
+ "required": false,
488
+ "optional": true,
489
+ "docs": {
490
+ "tags": [],
491
+ "text": "ID of element that labels this select"
492
+ },
493
+ "getter": false,
494
+ "setter": false,
495
+ "reflect": false,
496
+ "attribute": "aria-labelledby"
497
+ },
498
+ "ariaDescribedby": {
499
+ "type": "string",
500
+ "mutable": false,
501
+ "complexType": {
502
+ "original": "string",
503
+ "resolved": "string | undefined",
504
+ "references": {}
505
+ },
506
+ "required": false,
507
+ "optional": true,
508
+ "docs": {
509
+ "tags": [],
510
+ "text": "ID of element that describes this select"
511
+ },
512
+ "getter": false,
513
+ "setter": false,
514
+ "reflect": false,
515
+ "attribute": "aria-describedby"
516
+ },
517
+ "placement": {
518
+ "type": "string",
519
+ "mutable": false,
520
+ "complexType": {
521
+ "original": "SelectPlacement",
522
+ "resolved": "\"bottom\" | \"left\" | \"right\" | \"top\"",
523
+ "references": {
524
+ "SelectPlacement": {
525
+ "location": "import",
526
+ "path": "../../utils/select",
527
+ "id": "src/utils/select/index.ts::SelectPlacement"
528
+ }
529
+ }
530
+ },
531
+ "required": false,
532
+ "optional": false,
533
+ "docs": {
534
+ "tags": [],
535
+ "text": "Preferred dropdown placement"
536
+ },
537
+ "getter": false,
538
+ "setter": false,
539
+ "reflect": false,
540
+ "attribute": "placement",
541
+ "defaultValue": "'bottom'"
542
+ },
543
+ "maxHeight": {
544
+ "type": "string",
545
+ "mutable": false,
546
+ "complexType": {
547
+ "original": "string",
548
+ "resolved": "string",
549
+ "references": {}
550
+ },
551
+ "required": false,
552
+ "optional": false,
553
+ "docs": {
554
+ "tags": [],
555
+ "text": "Maximum dropdown height"
556
+ },
557
+ "getter": false,
558
+ "setter": false,
559
+ "reflect": false,
560
+ "attribute": "max-height",
561
+ "defaultValue": "'12.5rem'"
562
+ }
563
+ };
564
+ }
565
+ static get states() {
566
+ return {
567
+ "internalValue": {},
568
+ "isOpen": {},
569
+ "focusedOptionValue": {},
570
+ "registeredOptions": {},
571
+ "hasBeenActivated": {}
572
+ };
573
+ }
574
+ static get events() {
575
+ return [{
576
+ "method": "sekiChange",
577
+ "name": "sekiChange",
578
+ "bubbles": true,
579
+ "cancelable": true,
580
+ "composed": true,
581
+ "docs": {
582
+ "tags": [],
583
+ "text": "Emitted when selected value changes"
584
+ },
585
+ "complexType": {
586
+ "original": "SelectChangeEventDetail",
587
+ "resolved": "SelectChangeEventDetail",
588
+ "references": {
589
+ "SelectChangeEventDetail": {
590
+ "location": "import",
591
+ "path": "../../utils/select",
592
+ "id": "src/utils/select/index.ts::SelectChangeEventDetail"
593
+ }
594
+ }
595
+ }
596
+ }, {
597
+ "method": "sekiOpenChange",
598
+ "name": "sekiOpenChange",
599
+ "bubbles": true,
600
+ "cancelable": true,
601
+ "composed": true,
602
+ "docs": {
603
+ "tags": [],
604
+ "text": "Emitted when dropdown open state changes"
605
+ },
606
+ "complexType": {
607
+ "original": "SelectOpenChangeEventDetail",
608
+ "resolved": "SelectOpenChangeEventDetail",
609
+ "references": {
610
+ "SelectOpenChangeEventDetail": {
611
+ "location": "import",
612
+ "path": "../../utils/select",
613
+ "id": "src/utils/select/index.ts::SelectOpenChangeEventDetail"
614
+ }
615
+ }
616
+ }
617
+ }, {
618
+ "method": "sekiValidate",
619
+ "name": "sekiValidate",
620
+ "bubbles": true,
621
+ "cancelable": true,
622
+ "composed": true,
623
+ "docs": {
624
+ "tags": [],
625
+ "text": "Emitted when validation state changes"
626
+ },
627
+ "complexType": {
628
+ "original": "SelectValidateEventDetail",
629
+ "resolved": "SelectValidateEventDetail",
630
+ "references": {
631
+ "SelectValidateEventDetail": {
632
+ "location": "import",
633
+ "path": "../../utils/select",
634
+ "id": "src/utils/select/index.ts::SelectValidateEventDetail"
635
+ }
636
+ }
637
+ }
638
+ }];
639
+ }
640
+ static get methods() {
641
+ return {
642
+ "openDropdown": {
643
+ "complexType": {
644
+ "signature": "() => Promise<void>",
645
+ "parameters": [],
646
+ "references": {
647
+ "Promise": {
648
+ "location": "global",
649
+ "id": "global::Promise"
650
+ }
651
+ },
652
+ "return": "Promise<void>"
653
+ },
654
+ "docs": {
655
+ "text": "Programmatically open the dropdown",
656
+ "tags": []
657
+ }
658
+ },
659
+ "closeDropdown": {
660
+ "complexType": {
661
+ "signature": "() => Promise<void>",
662
+ "parameters": [],
663
+ "references": {
664
+ "Promise": {
665
+ "location": "global",
666
+ "id": "global::Promise"
667
+ }
668
+ },
669
+ "return": "Promise<void>"
670
+ },
671
+ "docs": {
672
+ "text": "Programmatically close the dropdown",
673
+ "tags": []
674
+ }
675
+ },
676
+ "focusTrigger": {
677
+ "complexType": {
678
+ "signature": "() => Promise<void>",
679
+ "parameters": [],
680
+ "references": {
681
+ "Promise": {
682
+ "location": "global",
683
+ "id": "global::Promise"
684
+ }
685
+ },
686
+ "return": "Promise<void>"
687
+ },
688
+ "docs": {
689
+ "text": "Focus the trigger element",
690
+ "tags": []
691
+ }
692
+ },
693
+ "clearSelection": {
694
+ "complexType": {
695
+ "signature": "() => Promise<void>",
696
+ "parameters": [],
697
+ "references": {
698
+ "Promise": {
699
+ "location": "global",
700
+ "id": "global::Promise"
701
+ }
702
+ },
703
+ "return": "Promise<void>"
704
+ },
705
+ "docs": {
706
+ "text": "Clear all selections",
707
+ "tags": []
708
+ }
709
+ }
710
+ };
711
+ }
712
+ static get elementRef() { return "el"; }
713
+ static get watchers() {
714
+ return [{
715
+ "propName": "value",
716
+ "methodName": "handleValuePropChange"
717
+ }, {
718
+ "propName": "open",
719
+ "methodName": "handleOpenPropChange"
720
+ }, {
721
+ "propName": "isOpen",
722
+ "methodName": "handleIsOpenChange"
723
+ }, {
724
+ "propName": "internalValue",
725
+ "methodName": "handleInternalValueChange"
726
+ }];
727
+ }
728
+ }