@warp-ds/elements 2.8.0-next.1 → 2.8.0-next.3

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 (63) hide show
  1. package/dist/api.js.map +1 -1
  2. package/dist/custom-elements.json +4097 -3178
  3. package/dist/index.d.ts +1053 -832
  4. package/dist/packages/combobox/combobox.react.stories.d.ts +1 -1
  5. package/dist/packages/radio/base-element.d.ts +46 -0
  6. package/dist/packages/radio/base-element.js +100 -0
  7. package/dist/packages/radio/custom-error-validator.d.ts +6 -0
  8. package/dist/packages/radio/custom-error-validator.js +22 -0
  9. package/dist/packages/radio/form-associated-element.d.ts +103 -0
  10. package/dist/packages/radio/form-associated-element.js +282 -0
  11. package/dist/packages/radio/host-styles.d.ts +1 -0
  12. package/dist/packages/radio/host-styles.js +12 -0
  13. package/dist/packages/radio/invalid.d.ts +8 -0
  14. package/dist/packages/radio/invalid.js +5 -0
  15. package/dist/packages/radio/radio-styles.d.ts +1 -0
  16. package/dist/packages/radio/radio-styles.js +148 -0
  17. package/dist/packages/radio/radio.a11y.test.d.ts +2 -0
  18. package/dist/packages/radio/radio.a11y.test.js +81 -0
  19. package/dist/packages/radio/radio.d.ts +53 -0
  20. package/dist/packages/radio/radio.js +2602 -0
  21. package/dist/packages/radio/radio.js.map +7 -0
  22. package/dist/packages/radio/radio.react.stories.d.ts +9 -0
  23. package/dist/packages/radio/radio.react.stories.js +10 -0
  24. package/dist/packages/radio/radio.stories.d.ts +32 -0
  25. package/dist/packages/radio/radio.stories.js +275 -0
  26. package/dist/packages/radio/radio.test.d.ts +1 -0
  27. package/dist/packages/radio/radio.test.js +185 -0
  28. package/dist/packages/radio/react.d.ts +2 -0
  29. package/dist/packages/radio/react.js +11 -0
  30. package/dist/packages/radio/required-validator.d.ts +11 -0
  31. package/dist/packages/radio/required-validator.js +34 -0
  32. package/dist/packages/radio/slot.d.ts +20 -0
  33. package/dist/packages/radio/slot.js +71 -0
  34. package/dist/packages/radio/watch.d.ts +26 -0
  35. package/dist/packages/radio/watch.js +39 -0
  36. package/dist/packages/radio-group/locales/da/messages.d.mts +1 -0
  37. package/dist/packages/radio-group/locales/da/messages.mjs +1 -0
  38. package/dist/packages/radio-group/locales/en/messages.d.mts +1 -0
  39. package/dist/packages/radio-group/locales/en/messages.mjs +1 -0
  40. package/dist/packages/radio-group/locales/fi/messages.d.mts +1 -0
  41. package/dist/packages/radio-group/locales/fi/messages.mjs +1 -0
  42. package/dist/packages/radio-group/locales/nb/messages.d.mts +1 -0
  43. package/dist/packages/radio-group/locales/nb/messages.mjs +1 -0
  44. package/dist/packages/radio-group/locales/sv/messages.d.mts +1 -0
  45. package/dist/packages/radio-group/locales/sv/messages.mjs +1 -0
  46. package/dist/packages/radio-group/radio-group-styles.d.ts +1 -0
  47. package/dist/packages/radio-group/radio-group-styles.js +61 -0
  48. package/dist/packages/radio-group/radio-group.a11y.test.d.ts +2 -0
  49. package/dist/packages/radio-group/radio-group.a11y.test.js +118 -0
  50. package/dist/packages/radio-group/radio-group.d.ts +88 -0
  51. package/dist/packages/radio-group/radio-group.js +2704 -0
  52. package/dist/packages/radio-group/radio-group.js.map +7 -0
  53. package/dist/packages/radio-group/radio-group.test.d.ts +2 -0
  54. package/dist/packages/radio-group/radio-group.test.js +392 -0
  55. package/dist/packages/radio-group/react.d.ts +7 -0
  56. package/dist/packages/radio-group/react.js +17 -0
  57. package/dist/packages/select/select.react.stories.d.ts +1 -1
  58. package/dist/packages/textarea/textarea.react.stories.d.ts +1 -1
  59. package/dist/packages/textfield/textfield.react.stories.d.ts +1 -1
  60. package/dist/packages/toast/api.js +1 -1
  61. package/dist/packages/toast/toast.js.map +1 -1
  62. package/dist/web-types.json +579 -398
  63. package/package.json +1 -1
@@ -0,0 +1,392 @@
1
+ import { i18n } from '@lingui/core';
2
+ import { html } from 'lit';
3
+ import { expect, test, vi } from 'vitest';
4
+ import { render } from 'vitest-browser-lit';
5
+ import './radio-group.js';
6
+ import '../radio/radio.js';
7
+ // Initialize i18n with English locale for tests
8
+ i18n.load('en', {
9
+ 'radio-group.label.optional': ['(optional)'],
10
+ 'radio-group.validation.required': ['Please select an option.'],
11
+ });
12
+ i18n.activate('en');
13
+ test('selects radio on click and dispatches input/change', async () => {
14
+ render(html `
15
+ <w-radio-group label="Choices" name="choice">
16
+ <w-radio value="alpha">Alpha</w-radio>
17
+ <w-radio value="beta">Beta</w-radio>
18
+ </w-radio-group>
19
+ `);
20
+ const group = document.querySelector('w-radio-group');
21
+ const radios = Array.from(document.querySelectorAll('w-radio'));
22
+ const onInput = vi.fn();
23
+ const onChange = vi.fn();
24
+ group.addEventListener('input', onInput);
25
+ group.addEventListener('change', onChange);
26
+ await group.updateComplete;
27
+ radios[1].click();
28
+ await group.updateComplete;
29
+ expect(radios[0].checked).toBe(false);
30
+ expect(radios[1].checked).toBe(true);
31
+ expect(onInput).toHaveBeenCalledTimes(1);
32
+ expect(onChange).toHaveBeenCalledTimes(1);
33
+ radios[1].click();
34
+ await group.updateComplete;
35
+ expect(onChange).toHaveBeenCalledTimes(1);
36
+ });
37
+ test('renders help text when provided', async () => {
38
+ const page = render(html `
39
+ <w-radio-group name="choices" label="Choices" help-text="Select one">
40
+ <w-radio value="alpha">Alpha</w-radio>
41
+ <w-radio value="beta">Beta</w-radio>
42
+ </w-radio-group>
43
+ `);
44
+ await expect.element(page.getByText('Select one')).toBeVisible();
45
+ });
46
+ test('disabled group renders help text in disabled color', async () => {
47
+ render(html `
48
+ <w-radio-group name="choices" label="Choices" help-text="Select one" disabled>
49
+ <w-radio value="alpha">Alpha</w-radio>
50
+ <w-radio value="beta">Beta</w-radio>
51
+ </w-radio-group>
52
+ `);
53
+ const group = document.querySelector('w-radio-group');
54
+ await group.updateComplete;
55
+ const helpText = group.shadowRoot?.querySelector('[part~="help-text"]');
56
+ expect(helpText).not.toBeNull();
57
+ const swatch = document.createElement('div');
58
+ swatch.style.color = 'var(--w-s-color-text-disabled)';
59
+ document.body.append(swatch);
60
+ const disabledColor = getComputedStyle(swatch).color;
61
+ swatch.remove();
62
+ if (!helpText) {
63
+ throw new Error('Expected help text element to exist');
64
+ }
65
+ expect(getComputedStyle(helpText).color).toBe(disabledColor);
66
+ });
67
+ test('renders optional text when optional is true', async () => {
68
+ const page = render(html `
69
+ <w-radio-group name="choices" label="Choices" optional>
70
+ <w-radio value="alpha">Alpha</w-radio>
71
+ <w-radio value="beta">Beta</w-radio>
72
+ </w-radio-group>
73
+ `);
74
+ await expect.element(page.getByText('(optional)')).toBeVisible();
75
+ });
76
+ test('associates selected value with form submission', async () => {
77
+ render(html `
78
+ <form>
79
+ <w-radio-group label="Choices" name="choice">
80
+ <w-radio value="alpha">Alpha</w-radio>
81
+ <w-radio value="beta">Beta</w-radio>
82
+ </w-radio-group>
83
+ </form>
84
+ `);
85
+ const form = document.querySelector('form');
86
+ const group = document.querySelector('w-radio-group');
87
+ const radios = Array.from(document.querySelectorAll('w-radio'));
88
+ await group.updateComplete;
89
+ let data = new FormData(form);
90
+ expect(data.get('choice')).toBeNull();
91
+ radios[0].click();
92
+ await group.updateComplete;
93
+ data = new FormData(form);
94
+ expect(data.get('choice')).toBe('alpha');
95
+ });
96
+ test('radio group does not submit its own value', async () => {
97
+ render(html `
98
+ <form>
99
+ <w-radio-group label="Choices" name="choice">
100
+ <w-radio value="alpha">Alpha</w-radio>
101
+ <w-radio value="beta">Beta</w-radio>
102
+ </w-radio-group>
103
+ </form>
104
+ `);
105
+ const form = document.querySelector('form');
106
+ const group = document.querySelector('w-radio-group');
107
+ const radios = Array.from(document.querySelectorAll('w-radio'));
108
+ await group.updateComplete;
109
+ radios[1].click();
110
+ await group.updateComplete;
111
+ const data = new FormData(form);
112
+ expect(data.get('choice')).toBe('beta');
113
+ });
114
+ test('does not submit a value when name is missing', async () => {
115
+ render(html `
116
+ <form>
117
+ <w-radio-group name="choices" label="Choices">
118
+ <w-radio value="alpha">Alpha</w-radio>
119
+ <w-radio value="beta">Beta</w-radio>
120
+ </w-radio-group>
121
+ </form>
122
+ `);
123
+ const form = document.querySelector('form');
124
+ const group = document.querySelector('w-radio-group');
125
+ const radios = Array.from(document.querySelectorAll('w-radio'));
126
+ await group.updateComplete;
127
+ radios[0].click();
128
+ await group.updateComplete;
129
+ const data = new FormData(form);
130
+ expect(data.get('choice')).toBeNull();
131
+ });
132
+ test('required group reports validity based on selection', async () => {
133
+ render(html `
134
+ <w-radio-group label="Choices" name="choice" required>
135
+ <w-radio value="alpha">Alpha</w-radio>
136
+ <w-radio value="beta">Beta</w-radio>
137
+ </w-radio-group>
138
+ `);
139
+ const group = document.querySelector('w-radio-group');
140
+ const radios = Array.from(document.querySelectorAll('w-radio'));
141
+ await group.updateComplete;
142
+ await expect.poll(() => group.checkValidity()).toBe(false);
143
+ expect(group.validity.valueMissing).toBe(true);
144
+ expect(group.validationMessage).not.toBe('');
145
+ radios[0].click();
146
+ await group.updateComplete;
147
+ await expect.poll(() => group.checkValidity()).toBe(true);
148
+ expect(group.validity.valid).toBe(true);
149
+ });
150
+ test('required group blocks form submission until a selection is made', async () => {
151
+ render(html `
152
+ <form>
153
+ <w-radio-group label="Choices" name="choice" required>
154
+ <w-radio value="alpha">Alpha</w-radio>
155
+ <w-radio value="beta">Beta</w-radio>
156
+ </w-radio-group>
157
+ <button type="submit">Submit</button>
158
+ </form>
159
+ `);
160
+ const form = document.querySelector('form');
161
+ const group = document.querySelector('w-radio-group');
162
+ const radios = Array.from(document.querySelectorAll('w-radio'));
163
+ const submit = document.querySelector('button[type="submit"]');
164
+ const onSubmit = vi.fn(() => {
165
+ const data = new FormData(form);
166
+ expect(data.get('choice')).toBe('alpha');
167
+ });
168
+ form.addEventListener('submit', (event) => {
169
+ if (!form.checkValidity()) {
170
+ event.preventDefault();
171
+ return;
172
+ }
173
+ event.preventDefault();
174
+ onSubmit();
175
+ });
176
+ await group.updateComplete;
177
+ await expect.poll(() => form.checkValidity()).toBe(false);
178
+ submit.click();
179
+ await expect.poll(() => form.checkValidity()).toBe(false);
180
+ expect(onSubmit).not.toHaveBeenCalled();
181
+ radios[0].click();
182
+ await group.updateComplete;
183
+ submit.click();
184
+ await group.updateComplete;
185
+ await expect.poll(() => form.checkValidity()).toBe(true);
186
+ expect(onSubmit).toHaveBeenCalledTimes(1);
187
+ });
188
+ test('required group exposes a validation message when empty', async () => {
189
+ render(html `
190
+ <w-radio-group label="Choices" name="choice" required>
191
+ <w-radio value="alpha">Alpha</w-radio>
192
+ <w-radio value="beta">Beta</w-radio>
193
+ </w-radio-group>
194
+ `);
195
+ const group = document.querySelector('w-radio-group');
196
+ await group.updateComplete;
197
+ await expect.poll(() => group.reportValidity()).toBe(false);
198
+ expect(group.validationMessage).not.toBe('');
199
+ });
200
+ test('resets to default selection on form reset', async () => {
201
+ render(html `
202
+ <form>
203
+ <w-radio-group label="Choices" name="choice">
204
+ <w-radio value="alpha" checked>Alpha</w-radio>
205
+ <w-radio value="beta">Beta</w-radio>
206
+ </w-radio-group>
207
+ </form>
208
+ `);
209
+ const form = document.querySelector('form');
210
+ const group = document.querySelector('w-radio-group');
211
+ const radios = Array.from(document.querySelectorAll('w-radio'));
212
+ await group.updateComplete;
213
+ await expect.poll(() => radios[0].checked).toBe(true);
214
+ await expect.poll(() => radios[1].checked).toBe(false);
215
+ radios[1].click();
216
+ await group.updateComplete;
217
+ form.reset();
218
+ await group.updateComplete;
219
+ await expect.poll(() => radios[0].checked).toBe(true);
220
+ await expect.poll(() => radios[1].checked).toBe(false);
221
+ });
222
+ test('disabled group prevents selection and disables child radios', async () => {
223
+ render(html `
224
+ <w-radio-group name="choices" label="Choices" disabled>
225
+ <w-radio value="alpha">Alpha</w-radio>
226
+ <w-radio value="beta">Beta</w-radio>
227
+ </w-radio-group>
228
+ `);
229
+ const group = document.querySelector('w-radio-group');
230
+ const radios = Array.from(document.querySelectorAll('w-radio'));
231
+ await group.updateComplete;
232
+ expect(radios[0].getAttribute('aria-disabled')).toBe('true');
233
+ expect(radios[1].getAttribute('aria-disabled')).toBe('true');
234
+ expect(radios[0].tabIndex).toBe(-1);
235
+ expect(radios[1].tabIndex).toBe(-1);
236
+ radios[0].click();
237
+ await group.updateComplete;
238
+ expect(radios[0].checked).toBe(false);
239
+ });
240
+ test('name changes after render affect form submission', async () => {
241
+ render(html `
242
+ <form>
243
+ <w-radio-group label="Choices" name="choice">
244
+ <w-radio value="alpha">Alpha</w-radio>
245
+ <w-radio value="beta">Beta</w-radio>
246
+ </w-radio-group>
247
+ </form>
248
+ `);
249
+ const form = document.querySelector('form');
250
+ const group = document.querySelector('w-radio-group');
251
+ const radios = Array.from(document.querySelectorAll('w-radio'));
252
+ await group.updateComplete;
253
+ radios[0].click();
254
+ await group.updateComplete;
255
+ let data = new FormData(form);
256
+ expect(data.get('choice')).toBe('alpha');
257
+ group.name = 'preference';
258
+ await group.updateComplete;
259
+ data = new FormData(form);
260
+ expect(data.get('choice')).toBeNull();
261
+ expect(data.get('preference')).toBe('alpha');
262
+ });
263
+ test('re-enabling a disabled group restores tabbable radio', async () => {
264
+ render(html `
265
+ <w-radio-group name="choices" label="Choices" disabled>
266
+ <w-radio value="alpha">Alpha</w-radio>
267
+ <w-radio value="beta" checked>Beta</w-radio>
268
+ </w-radio-group>
269
+ `);
270
+ const group = document.querySelector('w-radio-group');
271
+ const radios = Array.from(document.querySelectorAll('w-radio'));
272
+ await group.updateComplete;
273
+ expect(radios[0].tabIndex).toBe(-1);
274
+ expect(radios[1].tabIndex).toBe(-1);
275
+ group.disabled = false;
276
+ await group.updateComplete;
277
+ await expect.poll(() => radios[1].checked).toBe(true);
278
+ await expect.poll(() => radios[1].tabIndex).toBe(0);
279
+ await expect.poll(() => radios[0].tabIndex).toBe(-1);
280
+ });
281
+ test('only one radio is tabbable at a time', async () => {
282
+ render(html `
283
+ <w-radio-group name="choices" label="Choices">
284
+ <w-radio value="alpha">Alpha</w-radio>
285
+ <w-radio value="beta">Beta</w-radio>
286
+ </w-radio-group>
287
+ `);
288
+ const group = document.querySelector('w-radio-group');
289
+ const radios = Array.from(document.querySelectorAll('w-radio'));
290
+ await group.updateComplete;
291
+ await expect.poll(() => radios[0].tabIndex).toBe(0);
292
+ await expect.poll(() => radios[1].tabIndex).toBe(-1);
293
+ radios[1].click();
294
+ await group.updateComplete;
295
+ await expect.poll(() => radios[0].tabIndex).toBe(-1);
296
+ await expect.poll(() => radios[1].tabIndex).toBe(0);
297
+ });
298
+ test('warns when used in a form without a name', async () => {
299
+ const warn = vi.spyOn(console, 'warn').mockImplementation(() => { });
300
+ render(html `
301
+ <form>
302
+ <w-radio-group label="Choices">
303
+ <w-radio value="alpha">Alpha</w-radio>
304
+ <w-radio value="beta">Beta</w-radio>
305
+ </w-radio-group>
306
+ </form>
307
+ `);
308
+ const group = document.querySelector('w-radio-group');
309
+ await group.updateComplete;
310
+ expect(warn).toHaveBeenCalledWith('w-radio-group: "name" is required for form submission.');
311
+ warn.mockRestore();
312
+ });
313
+ test('propagates invalid state to child radios', async () => {
314
+ render(html `
315
+ <w-radio-group label="Choices" name="choice" required>
316
+ <w-radio value="alpha">Alpha</w-radio>
317
+ <w-radio value="beta">Beta</w-radio>
318
+ </w-radio-group>
319
+ `);
320
+ const group = document.querySelector('w-radio-group');
321
+ const radios = Array.from(document.querySelectorAll('w-radio'));
322
+ await group.updateComplete;
323
+ group.reportValidity();
324
+ await group.updateComplete;
325
+ expect(radios[0].invalid).toBe(true);
326
+ expect(radios[1].invalid).toBe(true);
327
+ radios[0].click();
328
+ await group.updateComplete;
329
+ expect(radios[0].invalid).toBe(false);
330
+ expect(radios[1].invalid).toBe(false);
331
+ });
332
+ test('adds and removes tabindex on the host when invalid', async () => {
333
+ render(html `
334
+ <w-radio-group label="Choices" name="choice">
335
+ <w-radio value="alpha">Alpha</w-radio>
336
+ <w-radio value="beta">Beta</w-radio>
337
+ </w-radio-group>
338
+ `);
339
+ const group = document.querySelector('w-radio-group');
340
+ await group.updateComplete;
341
+ expect(group.hasAttribute('tabindex')).toBe(false);
342
+ group.setAttribute('invalid', '');
343
+ await group.updateComplete;
344
+ expect(group.getAttribute('tabindex')).toBe('0');
345
+ group.removeAttribute('invalid');
346
+ await group.updateComplete;
347
+ expect(group.hasAttribute('tabindex')).toBe(false);
348
+ });
349
+ test('updates optional text when locale changes', async () => {
350
+ i18n.load('fr', {
351
+ 'radio-group.label.optional': ['(optionnel)'],
352
+ 'radio-group.validation.required': ['Please select an option.'],
353
+ });
354
+ const page = render(html `
355
+ <w-radio-group name="choices" label="Choices" optional>
356
+ <w-radio value="alpha">Alpha</w-radio>
357
+ <w-radio value="beta">Beta</w-radio>
358
+ </w-radio-group>
359
+ `);
360
+ const group = document.querySelector('w-radio-group');
361
+ await group.updateComplete;
362
+ await expect.element(page.getByText('(optional)')).toBeVisible();
363
+ i18n.activate('fr');
364
+ await group.updateComplete;
365
+ await expect.element(page.getByText('(optionnel)')).toBeVisible();
366
+ i18n.activate('en');
367
+ });
368
+ test('does not set aria-labelledby when label is missing', async () => {
369
+ render(html `
370
+ <w-radio-group name="choices">
371
+ <w-radio value="alpha">Alpha</w-radio>
372
+ <w-radio value="beta">Beta</w-radio>
373
+ </w-radio-group>
374
+ `);
375
+ const group = document.querySelector('w-radio-group');
376
+ await group.updateComplete;
377
+ const fieldset = group.shadowRoot?.querySelector('fieldset');
378
+ expect(fieldset?.getAttribute('aria-labelledby')).toBeNull();
379
+ });
380
+ test('applies group name to child radios when missing', async () => {
381
+ render(html `
382
+ <w-radio-group label="Choices" name="choice">
383
+ <w-radio value="alpha">Alpha</w-radio>
384
+ <w-radio value="beta">Beta</w-radio>
385
+ </w-radio-group>
386
+ `);
387
+ const group = document.querySelector('w-radio-group');
388
+ const radios = Array.from(document.querySelectorAll('w-radio'));
389
+ await group.updateComplete;
390
+ expect(radios[0].getAttribute('name')).toBe('choice');
391
+ expect(radios[1].getAttribute('name')).toBe('choice');
392
+ });
@@ -0,0 +1,7 @@
1
+ import { WRadioGroup } from './radio-group.js';
2
+ export declare const RadioGroup: import("@lit/react").ReactWebComponent<WRadioGroup, {
3
+ onInput: string;
4
+ oninput: string;
5
+ onChange: string;
6
+ onchange: string;
7
+ }>;
@@ -0,0 +1,17 @@
1
+ import { createComponent } from '@lit/react';
2
+ import { LitElement } from 'lit';
3
+ import React from 'react';
4
+ // decouple from CDN by providing a dummy class
5
+ class Component extends LitElement {
6
+ }
7
+ export const RadioGroup = createComponent({
8
+ tagName: 'w-radio-group',
9
+ elementClass: Component,
10
+ react: React,
11
+ events: {
12
+ onInput: 'input',
13
+ oninput: 'input',
14
+ onChange: 'change',
15
+ onchange: 'change',
16
+ },
17
+ });
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { Select } from './react';
4
4
  declare const _default: {
5
5
  title: string;
6
- render(args: Omit<React.HTMLAttributes<import("./select").WarpSelect>, "name" | "form" | "label" | "onchange" | "autoFocus" | "onChange" | "render" | "renderOptions" | "connectedCallback" | "disconnectedCallback" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "disabled" | "value" | "resetFormControl" | "validationTarget" | "internals" | "showError" | "validationMessage" | "validity" | "validationComplete" | "checkValidity" | "formResetCallback" | "valueChangedCallback" | "validityCallback" | "validationMessageCallback" | "setValue" | "shouldFormValueUpdate" | "invalid" | "helpText" | "optional" | "readOnly" | "readonly" | "always" | "hint" | "_options" | "_setValue" | "handleKeyDown"> & {
6
+ render(args: Omit<React.HTMLAttributes<import("./select").WarpSelect>, "name" | "form" | "label" | "onchange" | "autoFocus" | "onChange" | "render" | "renderOptions" | "connectedCallback" | "disconnectedCallback" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "disabled" | "value" | "resetFormControl" | "validationTarget" | "internals" | "showError" | "validationMessage" | "validity" | "validationComplete" | "checkValidity" | "formResetCallback" | "valueChangedCallback" | "validityCallback" | "validationMessageCallback" | "setValue" | "shouldFormValueUpdate" | "invalid" | "optional" | "helpText" | "readOnly" | "readonly" | "always" | "hint" | "_options" | "_setValue" | "handleKeyDown"> & {
7
7
  onChange?: (e: Event) => void;
8
8
  onchange?: (e: Event) => void;
9
9
  } & Partial<Omit<import("./select").WarpSelect, keyof HTMLElement>> & React.RefAttributes<import("./select").WarpSelect>): React.JSX.Element;
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { Textarea } from './react';
4
4
  declare const _default: {
5
5
  title: string;
6
- render(args: Omit<React.HTMLAttributes<import("./textarea").WarpTextarea>, "name" | "form" | "label" | "onblur" | "onchange" | "onfocus" | "oninput" | "onFocus" | "onBlur" | "onChange" | "onInput" | "render" | "renderOptions" | "connectedCallback" | "disconnectedCallback" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "disabled" | "value" | "updated" | "firstUpdated" | "resetFormControl" | "validationTarget" | "internals" | "showError" | "validationMessage" | "validity" | "validationComplete" | "checkValidity" | "formResetCallback" | "valueChangedCallback" | "validityCallback" | "validationMessageCallback" | "setValue" | "shouldFormValueUpdate" | "invalid" | "placeholder" | "helpText" | "required" | "optional" | "readOnly" | "readonly" | "_helptextstyles" | "_helpId" | "_id" | "_error" | "handler" | "maxRows" | "minRows" | "minHeight" | "maxHeight" | "reportValidity" | "setCustomValidity" | "_textareaStyles"> & {
6
+ render(args: Omit<React.HTMLAttributes<import("./textarea").WarpTextarea>, "name" | "form" | "label" | "onblur" | "onchange" | "onfocus" | "oninput" | "onFocus" | "onBlur" | "onChange" | "onInput" | "render" | "renderOptions" | "connectedCallback" | "disconnectedCallback" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "disabled" | "value" | "updated" | "firstUpdated" | "resetFormControl" | "validationTarget" | "internals" | "showError" | "validationMessage" | "validity" | "validationComplete" | "checkValidity" | "formResetCallback" | "valueChangedCallback" | "validityCallback" | "validationMessageCallback" | "setValue" | "shouldFormValueUpdate" | "invalid" | "required" | "reportValidity" | "optional" | "helpText" | "placeholder" | "readOnly" | "readonly" | "_helptextstyles" | "_helpId" | "_id" | "_error" | "handler" | "setCustomValidity" | "maxRows" | "minRows" | "minHeight" | "maxHeight" | "_textareaStyles"> & {
7
7
  onBlur?: (e: Event) => void;
8
8
  onblur?: (e: Event) => void;
9
9
  onChange?: (e: Event) => void;
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { TextField } from './react';
4
4
  declare const _default: {
5
5
  title: string;
6
- render(args: Omit<React.HTMLAttributes<import("./textfield").WarpTextField>, "name" | "size" | "form" | "label" | "mask" | "pattern" | "onblur" | "onchange" | "onfocus" | "oninput" | "onFocus" | "onBlur" | "onChange" | "onInput" | "render" | "renderOptions" | "connectedCallback" | "disconnectedCallback" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "disabled" | "type" | "value" | "updated" | "firstUpdated" | "resetFormControl" | "validationTarget" | "internals" | "showError" | "validationMessage" | "validity" | "validationComplete" | "checkValidity" | "formResetCallback" | "valueChangedCallback" | "validityCallback" | "validationMessageCallback" | "setValue" | "shouldFormValueUpdate" | "invalid" | "step" | "placeholder" | "helpText" | "required" | "autocomplete" | "max" | "min" | "minLength" | "maxLength" | "readOnly" | "readonly" | "formatter" | "_hasPrefix" | "_hasSuffix" | "_inputstyles" | "_helptextstyles" | "_label" | "_helpId" | "_id" | "_error" | "handler" | "prefixSlotChange" | "suffixSlotChange"> & {
6
+ render(args: Omit<React.HTMLAttributes<import("./textfield").WarpTextField>, "name" | "size" | "form" | "label" | "mask" | "pattern" | "onblur" | "onchange" | "onfocus" | "oninput" | "onFocus" | "onBlur" | "onChange" | "onInput" | "render" | "renderOptions" | "connectedCallback" | "disconnectedCallback" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "disabled" | "type" | "value" | "updated" | "firstUpdated" | "resetFormControl" | "validationTarget" | "internals" | "showError" | "validationMessage" | "validity" | "validationComplete" | "checkValidity" | "formResetCallback" | "valueChangedCallback" | "validityCallback" | "validationMessageCallback" | "setValue" | "shouldFormValueUpdate" | "invalid" | "step" | "required" | "helpText" | "placeholder" | "autocomplete" | "max" | "min" | "minLength" | "maxLength" | "readOnly" | "readonly" | "formatter" | "_hasPrefix" | "_hasSuffix" | "_inputstyles" | "_helptextstyles" | "_label" | "_helpId" | "_id" | "_error" | "handler" | "prefixSlotChange" | "suffixSlotChange"> & {
7
7
  onBlur?: (e: Event) => void;
8
8
  onblur?: (e: Event) => void;
9
9
  onChange?: (e: Event) => void;
@@ -1,4 +1,4 @@
1
- import { windowExists } from '../utils/window-exists';
1
+ import { windowExists } from '../utils/window-exists.js';
2
2
  function getToastContainer() {
3
3
  const container = customElements.get('w-toast-container');
4
4
  return container;