@warp-ds/elements 2.9.2-next.1 → 2.10.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/api.js +1 -1
- package/dist/api.js.map +1 -1
- package/dist/custom-elements.json +508 -145
- package/dist/docs/affix/affix.md +2 -2
- package/dist/docs/affix/styling.md +1 -0
- package/dist/docs/alert/alert.md +2 -2
- package/dist/docs/alert/styling.md +1 -0
- package/dist/docs/attention/attention.md +2 -0
- package/dist/docs/attention/styling.md +1 -0
- package/dist/docs/badge/badge.md +2 -0
- package/dist/docs/badge/styling.md +1 -0
- package/dist/docs/box/box.md +22 -40
- package/dist/docs/box/examples.md +20 -38
- package/dist/docs/box/styling.md +1 -0
- package/dist/docs/breadcrumbs/breadcrumbs.md +8 -2
- package/dist/docs/breadcrumbs/examples.md +7 -1
- package/dist/docs/breadcrumbs/styling.md +1 -0
- package/dist/docs/button/accessibility.md +42 -0
- package/dist/docs/button/api.md +63 -39
- package/dist/docs/button/button.md +395 -42
- package/dist/docs/button/examples.md +126 -0
- package/dist/docs/button/styling.md +72 -0
- package/dist/docs/button/usage.md +89 -0
- package/dist/docs/card/accessibility.md +74 -0
- package/dist/docs/card/api.md +9 -3
- package/dist/docs/card/card.md +236 -5
- package/dist/docs/card/examples.md +75 -0
- package/dist/docs/card/styling.md +1 -0
- package/dist/docs/card/usage.md +76 -0
- package/dist/docs/checkbox/api.md +128 -0
- package/dist/docs/checkbox/checkbox.md +134 -0
- package/dist/docs/checkbox-group/accessibility.md +71 -0
- package/dist/docs/checkbox-group/api.md +79 -0
- package/dist/docs/checkbox-group/checkbox-group.md +492 -0
- package/dist/docs/checkbox-group/examples.md +105 -0
- package/dist/docs/checkbox-group/styling.md +132 -0
- package/dist/docs/checkbox-group/usage.md +95 -0
- package/dist/docs/combobox/accessibility.md +71 -0
- package/dist/docs/combobox/api.md +60 -30
- package/dist/docs/combobox/combobox.md +205 -32
- package/dist/docs/combobox/examples.md +44 -0
- package/dist/docs/combobox/styling.md +1 -0
- package/dist/docs/combobox/usage.md +28 -0
- package/dist/docs/datepicker/accessibility.md +25 -0
- package/dist/docs/datepicker/api.md +22 -14
- package/dist/docs/datepicker/datepicker.md +208 -16
- package/dist/docs/datepicker/examples.md +75 -0
- package/dist/docs/datepicker/styling.md +1 -0
- package/dist/docs/datepicker/usage.md +84 -0
- package/dist/docs/expandable/api.md +20 -32
- package/dist/docs/expandable/examples.md +54 -0
- package/dist/docs/expandable/expandable.md +74 -32
- package/dist/docs/expandable/styling.md +1 -0
- package/dist/docs/icon/accessibility.md +5 -0
- package/dist/docs/icon/api.md +43 -0
- package/dist/docs/icon/examples.md +45 -0
- package/dist/docs/icon/icon.md +115 -0
- package/dist/docs/icon/styling.md +1 -0
- package/dist/docs/icon/usage.md +11 -0
- package/dist/docs/index.md +46 -0
- package/dist/docs/link/api.md +18 -22
- package/dist/docs/link/examples.md +75 -0
- package/dist/docs/link/link.md +113 -24
- package/dist/docs/link/styling.md +1 -0
- package/dist/docs/link/usage.md +18 -0
- package/dist/docs/modal/api.md +51 -0
- package/dist/docs/modal/examples.md +67 -0
- package/dist/docs/modal/modal.md +240 -0
- package/dist/docs/modal/styling.md +1 -0
- package/dist/docs/modal/usage.md +110 -0
- package/dist/docs/modal-footer/api.md +11 -0
- package/dist/docs/modal-footer/modal-footer.md +17 -0
- package/dist/docs/modal-header/api.md +42 -0
- package/dist/docs/modal-header/modal-header.md +48 -0
- package/dist/docs/page-indicator/api.md +6 -6
- package/dist/docs/page-indicator/examples.md +8 -0
- package/dist/docs/page-indicator/page-indicator.md +25 -6
- package/dist/docs/page-indicator/styling.md +1 -0
- package/dist/docs/page-indicator/usage.md +8 -0
- package/dist/docs/pagination/api.md +12 -10
- package/dist/docs/pagination/examples.md +20 -0
- package/dist/docs/pagination/pagination.md +52 -12
- package/dist/docs/pagination/styling.md +1 -0
- package/dist/docs/pagination/usage.md +18 -0
- package/dist/docs/pill/accessibility.md +2 -0
- package/dist/docs/pill/api.md +10 -26
- package/dist/docs/pill/examples.md +23 -0
- package/dist/docs/pill/pill.md +45 -28
- package/dist/docs/pill/styling.md +1 -0
- package/dist/docs/pill/usage.md +8 -0
- package/dist/docs/radio/radio.md +1 -7
- package/dist/docs/select/select.md +2 -0
- package/dist/docs/select/styling.md +1 -0
- package/dist/docs/slider/slider.md +2 -0
- package/dist/docs/slider/styling.md +1 -0
- package/dist/docs/slider-thumb/slider-thumb.md +2 -0
- package/dist/docs/slider-thumb/styling.md +1 -0
- package/dist/docs/step-indicator/step-indicator.md +2 -0
- package/dist/docs/step-indicator/styling.md +1 -0
- package/dist/docs/switch/styling.md +1 -0
- package/dist/docs/switch/switch.md +2 -0
- package/dist/docs/tabs/styling.md +1 -0
- package/dist/docs/tabs/tabs.md +2 -0
- package/dist/docs/textarea/styling.md +1 -0
- package/dist/docs/textarea/textarea.md +2 -0
- package/dist/docs/textfield/styling.md +1 -0
- package/dist/docs/textfield/textfield.md +2 -0
- package/dist/index.d.ts +950 -602
- package/dist/packages/affix/affix.hydration.test.js +1 -1
- package/dist/packages/affix/affix.js +4 -4
- package/dist/packages/affix/affix.js.map +4 -4
- package/dist/packages/alert/alert.hydration.test.js +1 -1
- package/dist/packages/alert/alert.js +3 -3
- package/dist/packages/alert/alert.js.map +3 -3
- package/dist/packages/attention/attention.hydration.test.js +1 -1
- package/dist/packages/attention/attention.js +397 -444
- package/dist/packages/attention/attention.js.map +4 -4
- package/dist/packages/attention/attention.test.js +1 -1
- package/dist/packages/badge/badge.hydration.test.js +1 -1
- package/dist/packages/box/box.hydration.test.js +1 -1
- package/dist/packages/box/box.js +1 -1
- package/dist/packages/box/box.js.map +1 -1
- package/dist/packages/breadcrumbs/breadcrumbs.hydration.test.js +3 -2
- package/dist/packages/breadcrumbs/breadcrumbs.js +4 -4
- package/dist/packages/breadcrumbs/breadcrumbs.js.map +3 -3
- package/dist/packages/button/button.d.ts +54 -37
- package/dist/packages/button/button.hydration.test.js +1 -1
- package/dist/packages/button/button.js +385 -432
- package/dist/packages/button/button.js.map +4 -4
- package/dist/packages/button/button.react.stories.d.ts +2 -2
- package/dist/packages/button/button.stories.d.ts +29 -0
- package/dist/packages/button/button.stories.js +176 -2
- package/dist/packages/button/react.d.ts +1 -1
- package/dist/packages/button/styles.d.ts +22 -1
- package/dist/packages/button/styles.js +390 -1
- package/dist/packages/card/card.d.ts +9 -6
- package/dist/packages/card/card.hydration.test.js +1 -1
- package/dist/packages/card/card.js +3 -3
- package/dist/packages/card/card.js.map +4 -4
- package/dist/packages/checkbox/checkbox.d.ts +45 -14
- package/dist/packages/checkbox/checkbox.hydration.test.js +1 -1
- package/dist/packages/checkbox/checkbox.js +3 -3
- package/dist/packages/checkbox/checkbox.js.map +3 -3
- package/dist/packages/checkbox/checkbox.react.stories.d.ts +1 -1
- package/dist/packages/checkbox/checkbox.stories.d.ts +2 -2
- package/dist/packages/checkbox/checkbox.test.js +1 -1
- package/dist/packages/checkbox/react.d.ts +2 -2
- package/dist/packages/checkbox-group/checkbox-group.a11y.test.js +1 -1
- package/dist/packages/checkbox-group/checkbox-group.d.ts +35 -8
- package/dist/packages/checkbox-group/checkbox-group.hydration.test.js +1 -1
- package/dist/packages/checkbox-group/checkbox-group.js +6 -6
- package/dist/packages/checkbox-group/checkbox-group.js.map +4 -4
- package/dist/packages/checkbox-group/react.d.ts +3 -3
- package/dist/packages/combobox/combobox.a11y.test.js +24 -0
- package/dist/packages/combobox/combobox.d.ts +65 -45
- package/dist/packages/combobox/combobox.hydration.test.js +39 -1
- package/dist/packages/combobox/combobox.js +21 -21
- package/dist/packages/combobox/combobox.js.map +4 -4
- package/dist/packages/combobox/combobox.stories.js +28 -15
- package/dist/packages/combobox/combobox.test.js +110 -0
- package/dist/packages/datepicker/DatePicker.test.js +1 -1
- package/dist/packages/datepicker/datepicker.d.ts +22 -30
- package/dist/packages/datepicker/datepicker.hydration.test.js +1 -1
- package/dist/packages/datepicker/datepicker.js +49 -49
- package/dist/packages/datepicker/datepicker.js.map +4 -4
- package/dist/packages/datepicker/datepicker.test.js +1 -1
- package/dist/packages/expandable/expandable.d.ts +11 -32
- package/dist/packages/expandable/expandable.hydration.test.js +1 -1
- package/dist/packages/expandable/expandable.js +11 -11
- package/dist/packages/expandable/expandable.js.map +3 -3
- package/dist/packages/expandable/expandable.react.stories.d.ts +2 -2
- package/dist/packages/expandable/react.d.ts +1 -1
- package/dist/packages/icon/icon.d.ts +16 -4
- package/dist/packages/icon/icon.hydration.test.js +1 -1
- package/dist/packages/icon/icon.js +2 -2
- package/dist/packages/icon/icon.js.map +3 -3
- package/dist/packages/icon/icon.react.stories.d.ts +1 -1
- package/dist/packages/icon/react.d.ts +2 -2
- package/dist/packages/link/link.d.ts +15 -16
- package/dist/packages/link/link.hydration.test.js +1 -1
- package/dist/packages/link/link.js +420 -190
- package/dist/packages/link/link.js.map +4 -4
- package/dist/packages/link/link.test.js +1 -1
- package/dist/packages/link/styles.d.ts +5 -0
- package/dist/packages/link/styles.js +80 -0
- package/dist/packages/modal/index.d.ts +4 -4
- package/dist/packages/modal/index.js +4 -4
- package/dist/packages/modal/modal.d.ts +22 -12
- package/dist/packages/modal/modal.hydration.test.js +1 -1
- package/dist/packages/modal/modal.js +5 -5
- package/dist/packages/modal/modal.js.map +3 -3
- package/dist/packages/modal/modal.react.stories.d.ts +3 -3
- package/dist/packages/modal/modal.stories.d.ts +2 -1
- package/dist/packages/modal/modal.stories.js +85 -3
- package/dist/packages/modal/react.d.ts +2 -2
- package/dist/packages/modal-footer/modal-footer.d.ts +5 -3
- package/dist/packages/modal-footer/modal-footer.js +4 -4
- package/dist/packages/modal-footer/modal-footer.js.map +3 -3
- package/dist/packages/modal-footer/react.d.ts +1 -1
- package/dist/packages/modal-header/modal-header.d.ts +21 -11
- package/dist/packages/modal-header/modal-header.js +11 -9
- package/dist/packages/modal-header/modal-header.js.map +4 -4
- package/dist/packages/modal-header/react.d.ts +2 -2
- package/dist/packages/page-indicator/page-indicator.d.ts +9 -14
- package/dist/packages/page-indicator/page-indicator.hydration.test.js +1 -1
- package/dist/packages/page-indicator/page-indicator.js +5 -5
- package/dist/packages/page-indicator/page-indicator.js.map +4 -4
- package/dist/packages/pagination/pagination.d.ts +11 -11
- package/dist/packages/pagination/pagination.hydration.test.js +1 -1
- package/dist/packages/pagination/pagination.js +4 -4
- package/dist/packages/pagination/pagination.js.map +4 -4
- package/dist/packages/pagination/pagination.test.js +1 -1
- package/dist/packages/pill/pill.d.ts +14 -29
- package/dist/packages/pill/pill.hydration.test.js +1 -1
- package/dist/packages/pill/pill.js +3 -3
- package/dist/packages/pill/pill.js.map +4 -4
- package/dist/packages/pill/pill.react.stories.d.ts +2 -2
- package/dist/packages/pill/react.d.ts +1 -1
- package/dist/packages/radio/radio.hydration.test.js +1 -1
- package/dist/packages/radio/radio.js +3 -3
- package/dist/packages/radio/radio.js.map +3 -3
- package/dist/packages/radio/radio.test.js +1 -1
- package/dist/packages/radio-group/radio-group.a11y.test.js +7 -3
- package/dist/packages/radio-group/radio-group.hydration.test.js +6 -2
- package/dist/packages/radio-group/radio-group.js +11 -11
- package/dist/packages/radio-group/radio-group.js.map +4 -4
- package/dist/packages/select/select.a11y.test.js +6 -2
- package/dist/packages/select/select.hydration.test.js +1 -1
- package/dist/packages/select/select.js +7 -7
- package/dist/packages/select/select.js.map +4 -4
- package/dist/packages/select/select.test.js +4 -2
- package/dist/packages/slider/slider.hydration.test.js +7 -2
- package/dist/packages/slider/slider.js +5 -5
- package/dist/packages/slider/slider.js.map +4 -4
- package/dist/packages/slider/slider.react.stories.js +2 -2
- package/dist/packages/slider/slider.test.js +1 -1
- package/dist/packages/slider-thumb/slider-thumb.hydration.test.js +1 -1
- package/dist/packages/slider-thumb/slider-thumb.js +20 -20
- package/dist/packages/slider-thumb/slider-thumb.js.map +4 -4
- package/dist/packages/step/step.hydration.test.js +1 -1
- package/dist/packages/step/step.js +8 -8
- package/dist/packages/step/step.js.map +4 -4
- package/dist/packages/step-indicator/step-indicator.hydration.test.js +1 -1
- package/dist/packages/switch/switch.a11y.test.js +1 -1
- package/dist/packages/switch/switch.hydration.test.js +1 -1
- package/dist/packages/switch/switch.js +1 -1
- package/dist/packages/switch/switch.js.map +1 -1
- package/dist/packages/tab/tab.hydration.test.js +1 -1
- package/dist/packages/tab/tab.js +10 -10
- package/dist/packages/tab/tab.js.map +2 -2
- package/dist/packages/tab-panel/tab-panel.hydration.test.js +1 -1
- package/dist/packages/tab-panel/tab-panel.js +3 -3
- package/dist/packages/tab-panel/tab-panel.js.map +2 -2
- package/dist/packages/tabs/tabs.a11y.test.js +2 -2
- package/dist/packages/tabs/tabs.hydration.test.js +1 -1
- package/dist/packages/tabs/tabs.js +1 -1
- package/dist/packages/tabs/tabs.js.map +2 -2
- package/dist/packages/tabs/tabs.test.js +4 -4
- package/dist/packages/textarea/textarea.hydration.test.js +1 -1
- package/dist/packages/textarea/textarea.js +4 -4
- package/dist/packages/textarea/textarea.js.map +3 -3
- package/dist/packages/textarea/textarea.test.js +1 -1
- package/dist/packages/textfield/textfield.hydration.test.js +1 -1
- package/dist/packages/textfield/textfield.js +1 -1
- package/dist/packages/textfield/textfield.js.map +1 -1
- package/dist/packages/textfield/textfield.test.js +1 -1
- package/dist/packages/toast/toast.js +6 -6
- package/dist/packages/toast/toast.js.map +4 -4
- package/dist/packages/toast/toast.stories.d.ts +1 -5
- package/dist/packages/toast/toast.stories.js +0 -17
- package/dist/packages/toast-container/toast-container.js +2 -2
- package/dist/packages/toast-container/toast-container.js.map +2 -2
- package/dist/web-types.json +509 -172
- package/eik/index.js +2536 -0
- package/package.json +18 -12
- package/dist/docs/radio/examples.md +0 -1
- package/dist/docs/radio/usage.md +0 -1
- package/dist/packages/button/styles/w-button.styles.d.ts +0 -1
- package/dist/packages/button/styles/w-button.styles.js +0 -282
- package/dist/packages/link/styles/w-link.styles.d.ts +0 -1
- package/dist/packages/link/styles/w-link.styles.js +0 -213
- /package/dist/docs/{radio → modal}/accessibility.md +0 -0
|
@@ -9,7 +9,11 @@ const meta = {
|
|
|
9
9
|
title: 'Forms/Combobox',
|
|
10
10
|
component: 'w-combobox',
|
|
11
11
|
render(args) {
|
|
12
|
-
return html `
|
|
12
|
+
return html `
|
|
13
|
+
<w-combobox ${spread(prespread(args))}>
|
|
14
|
+
${sampleOptionElements}
|
|
15
|
+
</w-combobox>
|
|
16
|
+
`;
|
|
13
17
|
},
|
|
14
18
|
parameters: {
|
|
15
19
|
docs: {
|
|
@@ -34,21 +38,32 @@ const sampleOptions = [
|
|
|
34
38
|
{ value: 'pineapple', label: 'Pineapple' },
|
|
35
39
|
{ value: 'mango', label: 'Mango' },
|
|
36
40
|
];
|
|
41
|
+
const sampleOptionElements = html `
|
|
42
|
+
<option value="apple">Apple</option>
|
|
43
|
+
<option value="banana">Banana</option>
|
|
44
|
+
<option value="orange">Orange</option>
|
|
45
|
+
<option value="grape">Grape</option>
|
|
46
|
+
<option value="strawberry">Strawberry</option>
|
|
47
|
+
<option value="pineapple">Pineapple</option>
|
|
48
|
+
<option value="mango">Mango</option>
|
|
49
|
+
`;
|
|
37
50
|
export const Default = {
|
|
38
51
|
args: {},
|
|
39
|
-
render: () => html `
|
|
52
|
+
render: () => html `
|
|
53
|
+
<w-combobox label="Select a fruit" placeholder="Type to search...">
|
|
54
|
+
${sampleOptionElements}
|
|
55
|
+
</w-combobox>
|
|
56
|
+
`,
|
|
40
57
|
};
|
|
41
58
|
export const WithValue = {
|
|
42
59
|
args: {
|
|
43
|
-
options: sampleOptions,
|
|
44
60
|
label: 'Select a fruit',
|
|
45
61
|
placeholder: 'Type to search...',
|
|
46
|
-
value: '
|
|
62
|
+
value: 'apple',
|
|
47
63
|
},
|
|
48
64
|
};
|
|
49
65
|
export const OpenOnFocus = {
|
|
50
66
|
args: {
|
|
51
|
-
options: sampleOptions,
|
|
52
67
|
label: 'Select a fruit',
|
|
53
68
|
placeholder: 'Type to search...',
|
|
54
69
|
openOnFocus: true,
|
|
@@ -56,7 +71,6 @@ export const OpenOnFocus = {
|
|
|
56
71
|
};
|
|
57
72
|
export const WithTextMatching = {
|
|
58
73
|
args: {
|
|
59
|
-
options: sampleOptions,
|
|
60
74
|
label: 'Select a fruit',
|
|
61
75
|
placeholder: 'Type to search...',
|
|
62
76
|
matchTextSegments: true,
|
|
@@ -64,7 +78,6 @@ export const WithTextMatching = {
|
|
|
64
78
|
};
|
|
65
79
|
export const Invalid = {
|
|
66
80
|
args: {
|
|
67
|
-
options: sampleOptions,
|
|
68
81
|
label: 'Select a fruit',
|
|
69
82
|
placeholder: 'Type to search...',
|
|
70
83
|
value: 'Invalid fruit',
|
|
@@ -74,16 +87,14 @@ export const Invalid = {
|
|
|
74
87
|
};
|
|
75
88
|
export const Disabled = {
|
|
76
89
|
args: {
|
|
77
|
-
options: sampleOptions,
|
|
78
90
|
label: 'Select a fruit',
|
|
79
91
|
placeholder: 'Type to search...',
|
|
80
|
-
value: '
|
|
92
|
+
value: 'apple',
|
|
81
93
|
disabled: true,
|
|
82
94
|
},
|
|
83
95
|
};
|
|
84
96
|
export const Optional = {
|
|
85
97
|
args: {
|
|
86
|
-
options: sampleOptions,
|
|
87
98
|
label: 'Select a fruit',
|
|
88
99
|
placeholder: 'Type to search...',
|
|
89
100
|
optional: true,
|
|
@@ -125,17 +136,19 @@ export const FormSubmission = {
|
|
|
125
136
|
name="warp-combo-1"
|
|
126
137
|
label="Select a fruit (dynamic)"
|
|
127
138
|
placeholder="Type to search..."
|
|
128
|
-
|
|
129
|
-
|
|
139
|
+
>
|
|
140
|
+
${sampleOptionElements}
|
|
141
|
+
</w-combobox>
|
|
130
142
|
<br>
|
|
131
143
|
<w-combobox
|
|
132
144
|
id="form-submission"
|
|
133
145
|
name="warp-combo-2"
|
|
134
146
|
label="Select a fruit (dynamic)"
|
|
135
|
-
value="
|
|
147
|
+
value="banana"
|
|
136
148
|
placeholder="Type to search..."
|
|
137
|
-
|
|
138
|
-
|
|
149
|
+
>
|
|
150
|
+
${sampleOptionElements}
|
|
151
|
+
</w-combobox>
|
|
139
152
|
<button type="reset">Reset</button>
|
|
140
153
|
<button type="submit">Submit</button>
|
|
141
154
|
</form>
|
|
@@ -134,3 +134,113 @@ test('announces suggestion count when opened on focus with empty input', async (
|
|
|
134
134
|
const statusText = el.shadowRoot?.querySelector('[role="status"]')?.textContent?.trim();
|
|
135
135
|
expect(statusText).toBe('3 suggestions');
|
|
136
136
|
});
|
|
137
|
+
test('renders light-DOM option children in the generated popup', async () => {
|
|
138
|
+
const component = html `
|
|
139
|
+
<w-combobox data-testid="combobox" open-on-focus>
|
|
140
|
+
<option value="no">Norway</option>
|
|
141
|
+
<option value="se">Sweden</option>
|
|
142
|
+
<option value="dk">Denmark</option>
|
|
143
|
+
</w-combobox>
|
|
144
|
+
`;
|
|
145
|
+
const page = render(component);
|
|
146
|
+
const locator = page.getByTestId('combobox');
|
|
147
|
+
await expect.element(locator).toBeVisible();
|
|
148
|
+
const el = (await locator.element());
|
|
149
|
+
const input = el.shadowRoot?.querySelector('w-textfield')?.shadowRoot?.querySelector('input');
|
|
150
|
+
input?.focus();
|
|
151
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
152
|
+
const visibleOptions = el.shadowRoot?.querySelectorAll('[role="listbox"] [role="option"]');
|
|
153
|
+
const optionTexts = Array.from(visibleOptions || []).map((opt) => opt.textContent?.trim());
|
|
154
|
+
expect(optionTexts).toEqual(['Norway', 'Sweden', 'Denmark']);
|
|
155
|
+
});
|
|
156
|
+
test('filters light-DOM options by label attribute and stores option value on select', async () => {
|
|
157
|
+
const component = html `
|
|
158
|
+
<w-combobox data-testid="combobox" open-on-focus>
|
|
159
|
+
<option value="us" label="United States">US</option>
|
|
160
|
+
<option value="uk" label="United Kingdom">UK</option>
|
|
161
|
+
<option value="no">Norway</option>
|
|
162
|
+
</w-combobox>
|
|
163
|
+
`;
|
|
164
|
+
const page = render(component);
|
|
165
|
+
const locator = page.getByTestId('combobox');
|
|
166
|
+
await expect.element(locator).toBeVisible();
|
|
167
|
+
const el = (await locator.element());
|
|
168
|
+
const input = el.shadowRoot?.querySelector('w-textfield')?.shadowRoot?.querySelector('input');
|
|
169
|
+
const selectEvents = [];
|
|
170
|
+
el.addEventListener('select', (event) => selectEvents.push(event));
|
|
171
|
+
input.focus();
|
|
172
|
+
input.value = 'United';
|
|
173
|
+
input.dispatchEvent(new InputEvent('input', { bubbles: true, composed: true }));
|
|
174
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
175
|
+
const visibleOptions = el.shadowRoot?.querySelectorAll('[role="listbox"] [role="option"]');
|
|
176
|
+
const optionTexts = Array.from(visibleOptions || []).map((opt) => opt.textContent?.trim());
|
|
177
|
+
expect(optionTexts).toEqual(['United States', 'United Kingdom']);
|
|
178
|
+
visibleOptions?.[1]?.dispatchEvent(new MouseEvent('mousedown', { bubbles: true }));
|
|
179
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
180
|
+
expect(input.value).toBe('United Kingdom');
|
|
181
|
+
expect(el.value).toBe('uk');
|
|
182
|
+
expect(selectEvents.at(-1)?.detail).toEqual({ value: 'uk' });
|
|
183
|
+
});
|
|
184
|
+
test('uses light-DOM options to display an initial value label', async () => {
|
|
185
|
+
const component = html `
|
|
186
|
+
<w-combobox data-testid="combobox" value="no">
|
|
187
|
+
<option value="se">Sweden</option>
|
|
188
|
+
<option value="no">Norway</option>
|
|
189
|
+
</w-combobox>
|
|
190
|
+
`;
|
|
191
|
+
const page = render(component);
|
|
192
|
+
const locator = page.getByTestId('combobox');
|
|
193
|
+
await expect.element(locator).toBeVisible();
|
|
194
|
+
const el = (await locator.element());
|
|
195
|
+
const input = el.shadowRoot?.querySelector('w-textfield')?.shadowRoot?.querySelector('input');
|
|
196
|
+
expect(input.value).toBe('Norway');
|
|
197
|
+
expect(el.value).toBe('no');
|
|
198
|
+
});
|
|
199
|
+
test('syncs dynamic light-DOM option child changes', async () => {
|
|
200
|
+
const component = html `
|
|
201
|
+
<w-combobox data-testid="combobox" open-on-focus>
|
|
202
|
+
<option value="no">Norway</option>
|
|
203
|
+
<option value="se">Sweden</option>
|
|
204
|
+
</w-combobox>
|
|
205
|
+
`;
|
|
206
|
+
const page = render(component);
|
|
207
|
+
const locator = page.getByTestId('combobox');
|
|
208
|
+
await expect.element(locator).toBeVisible();
|
|
209
|
+
const el = (await locator.element());
|
|
210
|
+
const input = el.shadowRoot?.querySelector('w-textfield')?.shadowRoot?.querySelector('input');
|
|
211
|
+
const denmark = document.createElement('option');
|
|
212
|
+
denmark.value = 'dk';
|
|
213
|
+
denmark.textContent = 'Denmark';
|
|
214
|
+
el.appendChild(denmark);
|
|
215
|
+
const sweden = el.querySelector('option[value="se"]');
|
|
216
|
+
sweden?.remove();
|
|
217
|
+
const norway = el.querySelector('option[value="no"]');
|
|
218
|
+
norway?.setAttribute('value', 'nor');
|
|
219
|
+
if (norway) {
|
|
220
|
+
norway.textContent = 'Norge';
|
|
221
|
+
}
|
|
222
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
223
|
+
input.focus();
|
|
224
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
225
|
+
const visibleOptions = el.shadowRoot?.querySelectorAll('[role="listbox"] [role="option"]');
|
|
226
|
+
const optionTexts = Array.from(visibleOptions || []).map((opt) => opt.textContent?.trim());
|
|
227
|
+
expect(optionTexts).toEqual(['Norge', 'Denmark']);
|
|
228
|
+
});
|
|
229
|
+
test('non-empty options property takes precedence over light-DOM option children', async () => {
|
|
230
|
+
const options = [{ value: 'apple', label: 'Apple' }];
|
|
231
|
+
const component = html `
|
|
232
|
+
<w-combobox data-testid="combobox" open-on-focus .options="${options}">
|
|
233
|
+
<option value="banana">Banana</option>
|
|
234
|
+
</w-combobox>
|
|
235
|
+
`;
|
|
236
|
+
const page = render(component);
|
|
237
|
+
const locator = page.getByTestId('combobox');
|
|
238
|
+
await expect.element(locator).toBeVisible();
|
|
239
|
+
const el = (await locator.element());
|
|
240
|
+
const input = el.shadowRoot?.querySelector('w-textfield')?.shadowRoot?.querySelector('input');
|
|
241
|
+
input.focus();
|
|
242
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
243
|
+
const visibleOptions = el.shadowRoot?.querySelectorAll('[role="listbox"] [role="option"]');
|
|
244
|
+
const optionTexts = Array.from(visibleOptions || []).map((opt) => opt.textContent?.trim());
|
|
245
|
+
expect(optionTexts).toEqual(['Apple']);
|
|
246
|
+
});
|
|
@@ -21,47 +21,45 @@ declare class WarpDatepicker extends WarpDatepicker_base {
|
|
|
21
21
|
};
|
|
22
22
|
static styles: import("lit").CSSResult[];
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
24
|
+
* The label displayed above the date input.
|
|
25
|
+
*
|
|
26
|
+
* Use this to give the datepicker a visible and accessible name.
|
|
26
27
|
*/
|
|
27
28
|
label: string;
|
|
28
|
-
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
/**
|
|
30
|
+
* The locale used for calendar labels and date formatting.
|
|
31
|
+
*
|
|
32
|
+
* This takes precedence over the `<html>` `lang` attribute. Supported built-in locales are `en`, `nb`, `sv`, `da`, and `fi`.
|
|
31
33
|
*/
|
|
32
34
|
lang: string;
|
|
33
35
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
+
* The name submitted with the date value.
|
|
37
|
+
*
|
|
38
|
+
* Use this when the datepicker belongs to a form and its value should be included in form data.
|
|
36
39
|
*/
|
|
37
40
|
name: string;
|
|
38
41
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
42
|
+
* The selected date value.
|
|
43
|
+
*
|
|
44
|
+
* Use an ISO date string in `YYYY-MM-DD` format. The value is submitted with the form and is reset to its initial value when the form resets.
|
|
41
45
|
*/
|
|
42
46
|
value: string;
|
|
43
47
|
/**
|
|
44
|
-
*
|
|
48
|
+
* The date format used in the calendar header.
|
|
45
49
|
*
|
|
46
50
|
* The syntax is defined by [date-fns/format](https://date-fns.org/v4.1.0/docs/format).
|
|
47
|
-
|
|
48
|
-
* @summary
|
|
49
|
-
* @description
|
|
50
|
-
*/
|
|
51
|
+
*/
|
|
51
52
|
headerFormat: string;
|
|
52
53
|
/**
|
|
53
|
-
*
|
|
54
|
+
* The weekday format shown above the calendar grid.
|
|
54
55
|
*
|
|
55
56
|
* The syntax is defined by [date-fns/format](https://date-fns.org/v4.1.0/docs/format).
|
|
56
|
-
|
|
57
|
-
* @summary
|
|
58
|
-
* @description
|
|
59
|
-
*/
|
|
57
|
+
*/
|
|
60
58
|
weekdayFormat: string;
|
|
61
59
|
/**
|
|
62
|
-
*
|
|
60
|
+
* Function used to disable dates in the calendar.
|
|
63
61
|
*
|
|
64
|
-
*
|
|
62
|
+
* Set this on the element instance in JavaScript, not as an HTML attribute. Disabled dates cannot be selected from the calendar.
|
|
65
63
|
*
|
|
66
64
|
* @example
|
|
67
65
|
* ```ts
|
|
@@ -72,19 +70,13 @@ declare class WarpDatepicker extends WarpDatepicker_base {
|
|
|
72
70
|
* const datePicker = document.querySelector('w-datepicker') as WarpDatepicker;
|
|
73
71
|
* datePicker.isDayDisabled = (day: Date) => isBefore(startOfDay(day), today);
|
|
74
72
|
* ```
|
|
75
|
-
|
|
76
|
-
* @summary
|
|
77
|
-
* @description
|
|
78
|
-
*/
|
|
73
|
+
*/
|
|
79
74
|
isDayDisabled: (day: Date) => boolean;
|
|
80
75
|
/**
|
|
81
|
-
*
|
|
76
|
+
* The date format used for calendar day accessible names.
|
|
82
77
|
*
|
|
83
78
|
* The syntax is defined by [date-fns/format](https://date-fns.org/v4.1.0/docs/format).
|
|
84
|
-
|
|
85
|
-
* @summary
|
|
86
|
-
* @description
|
|
87
|
-
*/
|
|
79
|
+
*/
|
|
88
80
|
dayFormat: string;
|
|
89
81
|
isCalendarOpen: boolean;
|
|
90
82
|
navigationDate: Date;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, test } from 'vitest';
|
|
2
2
|
import { setupHydrationWarningCapture, testHydration } from '../../tests/react-hydration';
|
|
3
3
|
import './datepicker.js';
|
|
4
4
|
describe('w-datepicker React SSR hydration', () => {
|