@warp-ds/elements 2.8.2-next.1 → 2.8.2-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.
- package/dist/custom-elements.json +195 -121
- package/dist/index.d.ts +52 -22
- package/dist/packages/affix/affix.hydration.test.d.ts +1 -0
- package/dist/packages/affix/affix.hydration.test.js +33 -0
- package/dist/packages/affix/affix.js +5 -5
- package/dist/packages/affix/affix.js.map +3 -3
- package/dist/packages/alert/alert.d.ts +1 -0
- package/dist/packages/alert/alert.hydration.test.d.ts +1 -0
- package/dist/packages/alert/alert.hydration.test.js +47 -0
- package/dist/packages/alert/alert.js +7 -7
- package/dist/packages/alert/alert.js.map +3 -3
- package/dist/packages/alert/alert.test.js +21 -0
- package/dist/packages/attention/attention.hydration.test.d.ts +1 -0
- package/dist/packages/attention/attention.hydration.test.js +66 -0
- package/dist/packages/attention/attention.js +15 -15
- package/dist/packages/attention/attention.js.map +3 -3
- package/dist/packages/badge/badge.hydration.test.d.ts +1 -0
- package/dist/packages/badge/badge.hydration.test.js +50 -0
- package/dist/packages/badge/badge.js +2 -2
- package/dist/packages/badge/badge.js.map +3 -3
- package/dist/packages/badge/badge.test.js +14 -0
- package/dist/packages/box/box.hydration.test.d.ts +1 -0
- package/dist/packages/box/box.hydration.test.js +37 -0
- package/dist/packages/breadcrumbs/breadcrumbs.d.ts +1 -1
- package/dist/packages/breadcrumbs/breadcrumbs.hydration.test.d.ts +1 -0
- package/dist/packages/breadcrumbs/breadcrumbs.hydration.test.js +141 -0
- package/dist/packages/breadcrumbs/breadcrumbs.js +7 -7
- package/dist/packages/breadcrumbs/breadcrumbs.js.map +3 -3
- package/dist/packages/breadcrumbs/breadcrumbs.test.js +3 -1
- package/dist/packages/button/button.hydration.test.d.ts +1 -0
- package/dist/packages/button/button.hydration.test.js +43 -0
- package/dist/packages/button/button.js +9 -9
- package/dist/packages/button/button.js.map +3 -3
- package/dist/packages/button/button.react.stories.d.ts +1 -1
- package/dist/packages/card/card.hydration.test.d.ts +1 -0
- package/dist/packages/card/card.hydration.test.js +38 -0
- package/dist/packages/card/card.react.stories.d.ts +1 -1
- package/dist/packages/checkbox/checkbox.d.ts +17 -1
- package/dist/packages/checkbox/checkbox.hydration.test.d.ts +1 -0
- package/dist/packages/checkbox/checkbox.hydration.test.js +47 -0
- package/dist/packages/checkbox/checkbox.js +20 -19
- package/dist/packages/checkbox/checkbox.js.map +3 -3
- package/dist/packages/checkbox/styles.js +10 -9
- package/dist/packages/checkbox-group/checkbox-group.d.ts +7 -0
- package/dist/packages/checkbox-group/checkbox-group.hydration.test.d.ts +2 -0
- package/dist/packages/checkbox-group/checkbox-group.hydration.test.js +40 -0
- package/dist/packages/checkbox-group/checkbox-group.js +14 -14
- package/dist/packages/checkbox-group/checkbox-group.js.map +3 -3
- package/dist/packages/checkbox-group/checkbox-group.test.js +10 -0
- package/dist/packages/combobox/combobox.hydration.test.d.ts +1 -0
- package/dist/packages/combobox/combobox.hydration.test.js +43 -0
- package/dist/packages/combobox/combobox.js +2 -2
- package/dist/packages/combobox/combobox.js.map +2 -2
- package/dist/packages/combobox/combobox.react.stories.d.ts +1 -1
- package/dist/packages/combobox/combobox.test.js +5 -2
- package/dist/packages/datepicker/datepicker.hydration.test.d.ts +1 -0
- package/dist/packages/datepicker/datepicker.hydration.test.js +40 -0
- package/dist/packages/datepicker/datepicker.js +5 -5
- package/dist/packages/datepicker/datepicker.js.map +3 -3
- package/dist/packages/datepicker/datepicker.react.stories.d.ts +1 -1
- package/dist/packages/expandable/expandable.hydration.test.d.ts +1 -0
- package/dist/packages/expandable/expandable.hydration.test.js +47 -0
- package/dist/packages/expandable/expandable.js +12 -12
- package/dist/packages/expandable/expandable.js.map +3 -3
- package/dist/packages/icon/icon.hydration.test.d.ts +1 -0
- package/dist/packages/icon/icon.hydration.test.js +47 -0
- package/dist/packages/icon/icon.js +2 -2
- package/dist/packages/icon/icon.js.map +3 -3
- package/dist/packages/icon/icon.test.d.ts +1 -0
- package/dist/packages/icon/icon.test.js +51 -0
- package/dist/packages/link/link.hydration.test.d.ts +1 -0
- package/dist/packages/link/link.hydration.test.js +54 -0
- package/dist/packages/link/link.js +4 -4
- package/dist/packages/link/link.js.map +3 -3
- package/dist/packages/link/link.test.js +14 -0
- package/dist/packages/modal/modal.hydration.test.d.ts +1 -0
- package/dist/packages/modal/modal.hydration.test.js +25 -0
- package/dist/packages/modal-header/modal-header.js +6 -6
- package/dist/packages/modal-header/modal-header.js.map +3 -3
- package/dist/packages/page-indicator/page-indicator.hydration.test.d.ts +1 -0
- package/dist/packages/page-indicator/page-indicator.hydration.test.js +41 -0
- package/dist/packages/page-indicator/page-indicator.js +7 -7
- package/dist/packages/page-indicator/page-indicator.js.map +3 -3
- package/dist/packages/page-indicator/page-indicator.test.js +23 -0
- package/dist/packages/pagination/pagination.d.ts +4 -0
- package/dist/packages/pagination/pagination.hydration.test.d.ts +1 -0
- package/dist/packages/pagination/pagination.hydration.test.js +38 -0
- package/dist/packages/pagination/pagination.js +20 -20
- package/dist/packages/pagination/pagination.js.map +3 -3
- package/dist/packages/pagination/pagination.react.stories.d.ts +1 -1
- package/dist/packages/pagination/pagination.test.js +18 -0
- package/dist/packages/pill/pill.hydration.test.d.ts +1 -0
- package/dist/packages/pill/pill.hydration.test.js +32 -0
- package/dist/packages/pill/pill.js +5 -5
- package/dist/packages/pill/pill.js.map +3 -3
- package/dist/packages/radio/radio.a11y.test.js +15 -6
- package/dist/packages/radio/radio.d.ts +33 -1
- package/dist/packages/radio/radio.hydration.test.d.ts +1 -0
- package/dist/packages/radio/radio.hydration.test.js +29 -0
- package/dist/packages/radio/radio.js +7 -7
- package/dist/packages/radio/radio.js.map +3 -3
- package/dist/packages/radio/radio.test.js +22 -15
- package/dist/packages/radio-group/radio-group.a11y.test.js +4 -0
- package/dist/packages/radio-group/radio-group.hydration.test.d.ts +2 -0
- package/dist/packages/radio-group/radio-group.hydration.test.js +32 -0
- package/dist/packages/radio-group/radio-group.js +17 -17
- package/dist/packages/radio-group/radio-group.js.map +3 -3
- package/dist/packages/radio-group/radio-group.test.js +3 -2
- package/dist/packages/select/select.hydration.test.d.ts +1 -0
- package/dist/packages/select/select.hydration.test.js +37 -0
- package/dist/packages/select/select.js +13 -13
- package/dist/packages/select/select.js.map +3 -3
- package/dist/packages/select/select.react.stories.d.ts +1 -1
- package/dist/packages/slider/slider.hydration.test.d.ts +1 -0
- package/dist/packages/slider/slider.hydration.test.js +33 -0
- package/dist/packages/slider/slider.js +9 -9
- package/dist/packages/slider/slider.js.map +3 -3
- package/dist/packages/slider/slider.test.js +54 -0
- package/dist/packages/slider-thumb/slider-thumb.hydration.test.d.ts +1 -0
- package/dist/packages/slider-thumb/slider-thumb.hydration.test.js +35 -0
- package/dist/packages/slider-thumb/slider-thumb.js +16 -16
- package/dist/packages/slider-thumb/slider-thumb.js.map +3 -3
- package/dist/packages/step/step.d.ts +1 -0
- package/dist/packages/step/step.hydration.test.d.ts +1 -0
- package/dist/packages/step/step.hydration.test.js +25 -0
- package/dist/packages/step/step.js +4 -4
- package/dist/packages/step/step.js.map +3 -3
- package/dist/packages/step-indicator/step-indicator.a11y.test.js +3 -1
- package/dist/packages/step-indicator/step-indicator.hydration.test.d.ts +1 -0
- package/dist/packages/step-indicator/step-indicator.hydration.test.js +25 -0
- package/dist/packages/switch/switch.a11y.test.js +23 -9
- package/dist/packages/switch/switch.d.ts +6 -0
- package/dist/packages/switch/switch.hydration.test.d.ts +1 -0
- package/dist/packages/switch/switch.hydration.test.js +54 -0
- package/dist/packages/switch/switch.js +7 -13
- package/dist/packages/switch/switch.js.map +3 -3
- package/dist/packages/switch/switch.test.js +0 -5
- package/dist/packages/tab/tab.d.ts +39 -2
- package/dist/packages/tab/tab.hydration.test.d.ts +1 -0
- package/dist/packages/tab/tab.hydration.test.js +25 -0
- package/dist/packages/tab/tab.js +22 -12
- package/dist/packages/tab/tab.js.map +3 -3
- package/dist/packages/tab-panel/tab-panel.d.ts +23 -1
- package/dist/packages/tab-panel/tab-panel.hydration.test.d.ts +1 -0
- package/dist/packages/tab-panel/tab-panel.hydration.test.js +21 -0
- package/dist/packages/tab-panel/tab-panel.js +18 -3
- package/dist/packages/tab-panel/tab-panel.js.map +3 -3
- package/dist/packages/tabs/tabs.a11y.test.js +59 -8
- package/dist/packages/tabs/tabs.hydration.test.d.ts +1 -0
- package/dist/packages/tabs/tabs.hydration.test.js +20 -0
- package/dist/packages/tabs/tabs.js +6 -6
- package/dist/packages/tabs/tabs.js.map +3 -3
- package/dist/packages/tabs/tabs.test.js +93 -1
- package/dist/packages/textarea/textarea.hydration.test.d.ts +1 -0
- package/dist/packages/textarea/textarea.hydration.test.js +43 -0
- package/dist/packages/textarea/textarea.react.stories.d.ts +1 -1
- package/dist/packages/textfield/textfield.hydration.test.d.ts +1 -0
- package/dist/packages/textfield/textfield.hydration.test.js +43 -0
- package/dist/packages/textfield/textfield.js +2 -2
- package/dist/packages/textfield/textfield.js.map +2 -2
- package/dist/packages/textfield/textfield.react.stories.d.ts +1 -1
- package/dist/packages/textfield/textfield.test.js +26 -0
- package/dist/packages/toast/toast.js +6 -6
- package/dist/packages/toast/toast.js.map +3 -3
- package/dist/packages/toast/toast.test.d.ts +1 -0
- package/dist/packages/toast/toast.test.js +58 -0
- package/dist/setup-tests.d.ts +2 -1
- package/dist/setup-tests.js +4 -3
- package/dist/tests/react-hydration.d.ts +20 -0
- package/dist/tests/react-hydration.js +138 -0
- package/dist/web-types.json +67 -63
- package/package.json +4 -3
|
@@ -68,10 +68,102 @@ test('clicking a tab changes the active attribute, visible tab panel', async ()
|
|
|
68
68
|
</w-tab-panel>
|
|
69
69
|
</w-tabs>`;
|
|
70
70
|
const page = render(component);
|
|
71
|
-
|
|
71
|
+
// Query tabs by element tag name since role is set via ElementInternals
|
|
72
|
+
const tabs = page.container.querySelectorAll('w-tab');
|
|
73
|
+
await userEvent.click(tabs[2]);
|
|
72
74
|
await page.container.querySelector('w-tabs').updateComplete;
|
|
73
75
|
await page.container.querySelectorAll('w-tab-panel')[2].updateComplete;
|
|
74
76
|
await expect.element(page.getByText('I am no man')).toBeVisible();
|
|
75
77
|
await expect.element(page.getByText('And my axe!')).not.toBeVisible();
|
|
76
78
|
await expect.element(page.getByText('I am on nobody\'s side')).not.toBeVisible();
|
|
77
79
|
});
|
|
80
|
+
test('switches panel content when panels are initialized with hidden attribute', async () => {
|
|
81
|
+
const component = html `<w-tabs active="tab2">
|
|
82
|
+
<w-tab for="tab1">First Tab</w-tab>
|
|
83
|
+
<w-tab-panel id="tab1">
|
|
84
|
+
<p>Content for the first tab.</p>
|
|
85
|
+
</w-tab-panel>
|
|
86
|
+
|
|
87
|
+
<w-tab for="tab2">Second Tab</w-tab>
|
|
88
|
+
<w-tab-panel id="tab2" hidden>
|
|
89
|
+
<p>Content for the second tab.</p>
|
|
90
|
+
</w-tab-panel>
|
|
91
|
+
|
|
92
|
+
<w-tab for="tab3">Third Tab</w-tab>
|
|
93
|
+
<w-tab-panel id="tab3" hidden>
|
|
94
|
+
<p>Content for the third tab.</p>
|
|
95
|
+
</w-tab-panel>
|
|
96
|
+
</w-tabs>`;
|
|
97
|
+
const page = render(component);
|
|
98
|
+
await page.container.querySelector('w-tabs').updateComplete;
|
|
99
|
+
await expect.element(page.getByText('Content for the second tab.')).toBeVisible();
|
|
100
|
+
await expect.element(page.getByText('Content for the first tab.')).not.toBeVisible();
|
|
101
|
+
await expect.element(page.getByText('Content for the third tab.')).not.toBeVisible();
|
|
102
|
+
const tabs = page.container.querySelectorAll('w-tab');
|
|
103
|
+
await userEvent.click(tabs[2]);
|
|
104
|
+
await page.container.querySelector('w-tabs').updateComplete;
|
|
105
|
+
await page.container.querySelectorAll('w-tab-panel')[2].updateComplete;
|
|
106
|
+
await expect.element(page.getByText('Content for the third tab.')).toBeVisible();
|
|
107
|
+
await expect.element(page.getByText('Content for the second tab.')).not.toBeVisible();
|
|
108
|
+
});
|
|
109
|
+
test('tab-panel visibility is controlled via internal shadow DOM (no host attribute changes) to avoid hydration mismatch', async () => {
|
|
110
|
+
const component = html `<w-tabs>
|
|
111
|
+
<w-tab for="panel1">Tab 1</w-tab>
|
|
112
|
+
<w-tab-panel id="panel1">
|
|
113
|
+
<p>Content 1</p>
|
|
114
|
+
</w-tab-panel>
|
|
115
|
+
|
|
116
|
+
<w-tab for="panel2">Tab 2</w-tab>
|
|
117
|
+
<w-tab-panel id="panel2">
|
|
118
|
+
<p>Content 2</p>
|
|
119
|
+
</w-tab-panel>
|
|
120
|
+
</w-tabs>`;
|
|
121
|
+
const page = render(component);
|
|
122
|
+
// Wait for tabs component to initialize
|
|
123
|
+
await page.container.querySelector('w-tabs').updateComplete;
|
|
124
|
+
const panels = page.container.querySelectorAll('w-tab-panel');
|
|
125
|
+
// Visibility is controlled via internal shadow DOM elements, not host attributes
|
|
126
|
+
// This avoids hydration mismatches when parent sets _parentActive
|
|
127
|
+
expect(panels[0].active).toBe(true);
|
|
128
|
+
expect(panels[1].active).toBe(false);
|
|
129
|
+
// Internal shadow DOM wrapper has data-active attribute for CSS visibility
|
|
130
|
+
const activeWrapper = panels[0].shadowRoot?.querySelector('.panel-content');
|
|
131
|
+
const inactiveWrapper = panels[1].shadowRoot?.querySelector('.panel-content');
|
|
132
|
+
expect(activeWrapper?.hasAttribute('data-active')).toBe(true);
|
|
133
|
+
expect(inactiveWrapper?.hasAttribute('data-active')).toBe(false);
|
|
134
|
+
// Verify visibility works correctly
|
|
135
|
+
await expect.element(page.getByText('Content 1')).toBeVisible();
|
|
136
|
+
await expect.element(page.getByText('Content 2')).not.toBeVisible();
|
|
137
|
+
});
|
|
138
|
+
test('aria-selected uses ElementInternals (no DOM attribute) to avoid hydration mismatch', async () => {
|
|
139
|
+
const component = html `<w-tabs>
|
|
140
|
+
<w-tab for="panel1">Tab 1</w-tab>
|
|
141
|
+
<w-tab-panel id="panel1"><p>Content 1</p></w-tab-panel>
|
|
142
|
+
|
|
143
|
+
<w-tab for="panel2">Tab 2</w-tab>
|
|
144
|
+
<w-tab-panel id="panel2"><p>Content 2</p></w-tab-panel>
|
|
145
|
+
</w-tabs>`;
|
|
146
|
+
const page = render(component);
|
|
147
|
+
const tabsEl = page.container.querySelector('w-tabs');
|
|
148
|
+
await tabsEl.updateComplete;
|
|
149
|
+
const tabs = page.container.querySelectorAll('w-tab');
|
|
150
|
+
// aria-selected is set via ElementInternals, not as a DOM attribute (to avoid hydration mismatch)
|
|
151
|
+
expect(tabs[0].hasAttribute('aria-selected')).toBe(false);
|
|
152
|
+
expect(tabs[1].hasAttribute('aria-selected')).toBe(false);
|
|
153
|
+
// But the property should be set correctly by the parent
|
|
154
|
+
expect(tabs[0].ariaSelected).toBe('true');
|
|
155
|
+
expect(tabs[1].ariaSelected).toBe('false');
|
|
156
|
+
});
|
|
157
|
+
test('w-tab does not mutate host aria-controls by default', async () => {
|
|
158
|
+
const component = html `<w-tabs>
|
|
159
|
+
<w-tab for="panel1">Tab 1</w-tab>
|
|
160
|
+
<w-tab-panel id="panel1"><p>Content 1</p></w-tab-panel>
|
|
161
|
+
</w-tabs>`;
|
|
162
|
+
const page = render(component);
|
|
163
|
+
const tabsEl = page.container.querySelector('w-tabs');
|
|
164
|
+
await tabsEl.updateComplete;
|
|
165
|
+
const tab = page.container.querySelector('w-tab');
|
|
166
|
+
const internalButton = tab.shadowRoot?.querySelector('button');
|
|
167
|
+
expect(tab.hasAttribute('aria-controls')).toBe(false);
|
|
168
|
+
expect(internalButton?.getAttribute('aria-controls')).toBe('panel1');
|
|
169
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './textarea.js';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { describe, expect, test, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { setupHydrationWarningCapture, testHydration } from '../../tests/react-hydration';
|
|
3
|
+
import './textarea.js';
|
|
4
|
+
describe('w-textarea React SSR hydration', () => {
|
|
5
|
+
beforeEach(() => setupHydrationWarningCapture());
|
|
6
|
+
afterEach(() => {
|
|
7
|
+
window.__HYDRATION_WARNINGS__ = [];
|
|
8
|
+
});
|
|
9
|
+
test('default (no attributes) hydrates without warnings', async () => {
|
|
10
|
+
const warnings = await testHydration('w-textarea', {});
|
|
11
|
+
expect(warnings).toEqual([]);
|
|
12
|
+
});
|
|
13
|
+
test('with label hydrates without warnings', async () => {
|
|
14
|
+
const warnings = await testHydration('w-textarea', {
|
|
15
|
+
label: 'Description',
|
|
16
|
+
});
|
|
17
|
+
expect(warnings).toEqual([]);
|
|
18
|
+
});
|
|
19
|
+
test('with value hydrates without warnings', async () => {
|
|
20
|
+
const warnings = await testHydration('w-textarea', {
|
|
21
|
+
value: 'Some text content',
|
|
22
|
+
});
|
|
23
|
+
expect(warnings).toEqual([]);
|
|
24
|
+
});
|
|
25
|
+
test('with disabled state hydrates without warnings', async () => {
|
|
26
|
+
const warnings = await testHydration('w-textarea', {
|
|
27
|
+
disabled: true,
|
|
28
|
+
});
|
|
29
|
+
expect(warnings).toEqual([]);
|
|
30
|
+
});
|
|
31
|
+
test('with invalid state hydrates without warnings', async () => {
|
|
32
|
+
const warnings = await testHydration('w-textarea', {
|
|
33
|
+
invalid: true,
|
|
34
|
+
});
|
|
35
|
+
expect(warnings).toEqual([]);
|
|
36
|
+
});
|
|
37
|
+
test('with help text hydrates without warnings', async () => {
|
|
38
|
+
const warnings = await testHydration('w-textarea', {
|
|
39
|
+
'help-text': 'Enter a detailed description',
|
|
40
|
+
});
|
|
41
|
+
expect(warnings).toEqual([]);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
@@ -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>, "
|
|
6
|
+
render(args: Omit<React.HTMLAttributes<import("./textarea").WarpTextarea>, "value" | "form" | "label" | "name" | "onblur" | "onchange" | "onfocus" | "oninput" | "onFocus" | "onBlur" | "onChange" | "onInput" | "render" | "renderOptions" | "connectedCallback" | "disconnectedCallback" | "renderRoot" | "isUpdatePending" | "hasUpdated" | "addController" | "removeController" | "attributeChangedCallback" | "requestUpdate" | "updateComplete" | "disabled" | "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;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './textfield.js';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { describe, expect, test, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { setupHydrationWarningCapture, testHydration } from '../../tests/react-hydration';
|
|
3
|
+
import './textfield.js';
|
|
4
|
+
describe('w-textfield React SSR hydration', () => {
|
|
5
|
+
beforeEach(() => setupHydrationWarningCapture());
|
|
6
|
+
afterEach(() => {
|
|
7
|
+
window.__HYDRATION_WARNINGS__ = [];
|
|
8
|
+
});
|
|
9
|
+
test('default (no attributes) hydrates without warnings', async () => {
|
|
10
|
+
const warnings = await testHydration('w-textfield', {});
|
|
11
|
+
expect(warnings).toEqual([]);
|
|
12
|
+
});
|
|
13
|
+
test('with label hydrates without warnings', async () => {
|
|
14
|
+
const warnings = await testHydration('w-textfield', {
|
|
15
|
+
label: 'Email',
|
|
16
|
+
});
|
|
17
|
+
expect(warnings).toEqual([]);
|
|
18
|
+
});
|
|
19
|
+
test('with value hydrates without warnings', async () => {
|
|
20
|
+
const warnings = await testHydration('w-textfield', {
|
|
21
|
+
value: 'test@example.com',
|
|
22
|
+
});
|
|
23
|
+
expect(warnings).toEqual([]);
|
|
24
|
+
});
|
|
25
|
+
test('with disabled state hydrates without warnings', async () => {
|
|
26
|
+
const warnings = await testHydration('w-textfield', {
|
|
27
|
+
disabled: true,
|
|
28
|
+
});
|
|
29
|
+
expect(warnings).toEqual([]);
|
|
30
|
+
});
|
|
31
|
+
test('with invalid state hydrates without warnings', async () => {
|
|
32
|
+
const warnings = await testHydration('w-textfield', {
|
|
33
|
+
invalid: true,
|
|
34
|
+
});
|
|
35
|
+
expect(warnings).toEqual([]);
|
|
36
|
+
});
|
|
37
|
+
test('with help text hydrates without warnings', async () => {
|
|
38
|
+
const warnings = await testHydration('w-textfield', {
|
|
39
|
+
'help-text': 'Enter your email address',
|
|
40
|
+
});
|
|
41
|
+
expect(warnings).toEqual([]);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
@@ -2495,7 +2495,7 @@ var te=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var R=a=>{th
|
|
|
2495
2495
|
text-overflow: ellipsis;
|
|
2496
2496
|
z-index: 1;
|
|
2497
2497
|
}
|
|
2498
|
-
`;import{css as ne}from"lit";var W=ne`*,:before,:after{--w-rotate:0;--w-rotate-x:0;--w-rotate-y:0;--w-rotate-z:0;--w-scale-x:1;--w-scale-y:1;--w-scale-z:1;--w-skew-x:0;--w-skew-y:0;--w-translate-x:0;--w-translate-y:0;--w-translate-z:0}.focus\\:\\[--w-outline-offset\\:-2px\\]:focus{--w-outline-offset:-2px}.bg-transparent{background-color:#0000}.border-1{border-width:1px}.rounded-4{border-radius:4px}.caret-current{caret-color:currentColor}.block{display:block}.focusable:focus{outline:2px solid var(--w-s-color-border-focus);outline-offset:var(--w-outline-offset,1px)}.focusable:focus-visible{outline:2px solid var(--w-s-color-border-focus);outline-offset:var(--w-outline-offset,1px)}.focusable:not(:focus-visible){outline:none}.outline-\\[--w-s-color-border-negative\\]\\!{outline-color:var(--w-s-color-border-negative)!important}.relative{position:relative}.static{position:static}.s-bg{background-color:var(--w-s-color-background)}.s-bg-disabled-subtle{background-color:var(--w-s-color-background-disabled-subtle)}.s-text{color:var(--w-s-color-text)}.s-text-disabled{color:var(--w-s-color-text-disabled)}.s-text-negative{color:var(--w-s-color-text-negative)}.s-text-subtle{color:var(--w-s-color-text-subtle)}.placeholder\\:s-text-placeholder::placeholder{color:var(--w-s-color-text-placeholder)}.s-border-disabled{border-color:var(--w-s-color-border-disabled)}.s-border-negative{border-color:var(--w-s-color-border-negative)}.s-border-strong{border-color:var(--w-s-color-border-strong)}.hover\\:s-border-negative-hover:hover{border-color:var(--w-s-color-border-negative-hover)}.hover\\:s-border-strong-hover:hover{border-color:var(--w-s-color-border-strong-hover)}.active\\:s-border-selected:active{border-color:var(--w-s-color-border-selected)}.w-full{width:100%}.min-h-\\[42\\]{min-height:4.2rem}.mb-0{margin-bottom:0}.mt-4{margin-top:.4rem}.px-8{padding-left:.8rem;padding-right:.8rem}.py-12{padding-top:1.2rem;padding-bottom:1.2rem}.pb-4{padding-bottom:.4rem}.pl-0{padding-left:0}.pl-8{padding-left:.8rem}.pr-40{padding-right:4rem}.pl-\\[var\\(--w-prefix-width\\,_40px\\)\\]{padding-left:var(--w-prefix-width,40px)}.cursor-pointer{cursor:pointer}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:grayscale}.font-bold{font-weight:700}.font-normal{font-weight:400}.pointer-events-none{pointer-events:none}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.text-m{font-size:var(--w-font-size-m);line-height:var(--w-line-height-m)}.text-s{font-size:var(--w-font-size-s);line-height:var(--w-line-height-s)}.text-xs{font-size:var(--w-font-size-xs);line-height:var(--w-line-height-xs)}.leading-m{line-height:var(--w-line-height-m)}@media (min-width:480px){.sm\\:min-h-\\[45\\]{min-height:4.5rem}}`;var x={base:"block text-m leading-m mb-0 px-8 py-12 rounded-4 w-full focusable focus:[--w-outline-offset:-2px] caret-current",default:"border-1 s-text s-bg s-border-strong hover:s-border-strong-hover active:s-border-selected",disabled:"border-1 s-text-disabled s-bg-disabled-subtle s-border-disabled pointer-events-none",invalid:"border-1 s-text-negative s-bg s-border-negative hover:s-border-negative-hover outline-[--w-s-color-border-negative]!",readOnly:"pl-0 bg-transparent pointer-events-none",placeholder:"placeholder:s-text-placeholder",suffix:"pr-40",prefix:"pl-[var(--w-prefix-width,_40px)]",textArea:"min-h-[42] sm:min-h-[45]"},ce={base:"antialiased block relative text-s font-bold pb-4 cursor-pointer s-text",optional:"pl-8 font-normal text-s s-text-subtle"},q={base:"text-xs mt-4 block",color:"s-text-subtle",colorInvalid:"s-text-negative"},V,s=class extends J(ee){constructor(){super(...arguments);this.disabled=!1;this.invalid=!1;this.readOnly=!1;this.readonly=!1;this.required=!1;this.
|
|
2498
|
+
`;import{css as ne}from"lit";var W=ne`*,:before,:after{--w-rotate:0;--w-rotate-x:0;--w-rotate-y:0;--w-rotate-z:0;--w-scale-x:1;--w-scale-y:1;--w-scale-z:1;--w-skew-x:0;--w-skew-y:0;--w-translate-x:0;--w-translate-y:0;--w-translate-z:0}.focus\\:\\[--w-outline-offset\\:-2px\\]:focus{--w-outline-offset:-2px}.bg-transparent{background-color:#0000}.border-1{border-width:1px}.rounded-4{border-radius:4px}.caret-current{caret-color:currentColor}.block{display:block}.focusable:focus{outline:2px solid var(--w-s-color-border-focus);outline-offset:var(--w-outline-offset,1px)}.focusable:focus-visible{outline:2px solid var(--w-s-color-border-focus);outline-offset:var(--w-outline-offset,1px)}.focusable:not(:focus-visible){outline:none}.outline-\\[--w-s-color-border-negative\\]\\!{outline-color:var(--w-s-color-border-negative)!important}.relative{position:relative}.static{position:static}.s-bg{background-color:var(--w-s-color-background)}.s-bg-disabled-subtle{background-color:var(--w-s-color-background-disabled-subtle)}.s-text{color:var(--w-s-color-text)}.s-text-disabled{color:var(--w-s-color-text-disabled)}.s-text-negative{color:var(--w-s-color-text-negative)}.s-text-subtle{color:var(--w-s-color-text-subtle)}.placeholder\\:s-text-placeholder::placeholder{color:var(--w-s-color-text-placeholder)}.s-border-disabled{border-color:var(--w-s-color-border-disabled)}.s-border-negative{border-color:var(--w-s-color-border-negative)}.s-border-strong{border-color:var(--w-s-color-border-strong)}.hover\\:s-border-negative-hover:hover{border-color:var(--w-s-color-border-negative-hover)}.hover\\:s-border-strong-hover:hover{border-color:var(--w-s-color-border-strong-hover)}.active\\:s-border-selected:active{border-color:var(--w-s-color-border-selected)}.w-full{width:100%}.min-h-\\[42\\]{min-height:4.2rem}.mb-0{margin-bottom:0}.mt-4{margin-top:.4rem}.px-8{padding-left:.8rem;padding-right:.8rem}.py-12{padding-top:1.2rem;padding-bottom:1.2rem}.pb-4{padding-bottom:.4rem}.pl-0{padding-left:0}.pl-8{padding-left:.8rem}.pr-40{padding-right:4rem}.pl-\\[var\\(--w-prefix-width\\,_40px\\)\\]{padding-left:var(--w-prefix-width,40px)}.cursor-pointer{cursor:pointer}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:grayscale}.font-bold{font-weight:700}.font-normal{font-weight:400}.pointer-events-none{pointer-events:none}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.text-m{font-size:var(--w-font-size-m);line-height:var(--w-line-height-m)}.text-s{font-size:var(--w-font-size-s);line-height:var(--w-line-height-s)}.text-xs{font-size:var(--w-font-size-xs);line-height:var(--w-line-height-xs)}.leading-m{line-height:var(--w-line-height-m)}@media (min-width:480px){.sm\\:min-h-\\[45\\]{min-height:4.5rem}}`;var x={base:"block text-m leading-m mb-0 px-8 py-12 rounded-4 w-full focusable focus:[--w-outline-offset:-2px] caret-current",default:"border-1 s-text s-bg s-border-strong hover:s-border-strong-hover active:s-border-selected",disabled:"border-1 s-text-disabled s-bg-disabled-subtle s-border-disabled pointer-events-none",invalid:"border-1 s-text-negative s-bg s-border-negative hover:s-border-negative-hover outline-[--w-s-color-border-negative]!",readOnly:"pl-0 bg-transparent pointer-events-none",placeholder:"placeholder:s-text-placeholder",suffix:"pr-40",prefix:"pl-[var(--w-prefix-width,_40px)]",textArea:"min-h-[42] sm:min-h-[45]"},ce={base:"antialiased block relative text-s font-bold pb-4 cursor-pointer s-text",optional:"pl-8 font-normal text-s s-text-subtle"},q={base:"text-xs mt-4 block",color:"s-text-subtle",colorInvalid:"s-text-negative"},V,s=class extends J(ee){constructor(){super(...arguments);this.disabled=!1;this.invalid=!1;this.readOnly=!1;this.readonly=!1;this.required=!1;this._hasPrefix=!1;this._hasSuffix=!1;D(this,V,null)}updated(r){r.has("value")&&(this.setValue(this.value),this.formatter&&(this.mask.innerText=this.formatter(this.value)))}firstUpdated(r){G(this,V,this.value)}resetFormControl(){this.value=H(this,V)}get _inputstyles(){return j([x.base,this._hasSuffix&&x.suffix,this._hasPrefix&&x.prefix,!this.invalid&&!this.disabled&&!(this.readonly||this.readOnly)&&x.default,this.invalid&&!this.disabled&&!(this.readonly||this.readOnly)&&x.invalid,!this.invalid&&this.disabled&&!(this.readonly||this.readOnly)&&x.disabled,!this.invalid&&!this.disabled&&(this.readonly||this.readOnly)&&x.readOnly])}get _helptextstyles(){return j([q.base,this.invalid?q.colorInvalid:q.color])}get _label(){if(this.label)return P`<label for="${this._id}" class=${ce.base}>${this.label}</label>`}get _helpId(){if(this.helpText)return`${this._id}__hint`}get _id(){return"textfield"}get _error(){if(this.invalid&&this._helpId)return this._helpId}handler(r){let{name:o,value:l}=r.currentTarget;this.value=l;let u=new CustomEvent(r.type,{detail:{name:o,value:l,target:r.target}});this.dispatchEvent(u)}prefixSlotChange(){this.renderRoot.querySelector("slot[name=prefix]").assignedElements().length&&(this._hasPrefix=!0)}suffixSlotChange(){this.renderRoot.querySelector("slot[name=suffix]").assignedElements().length&&(this._hasSuffix=!0)}render(){return P`
|
|
2499
2499
|
${this._label}
|
|
2500
2500
|
<div
|
|
2501
2501
|
class="${de({"w-textfield":!0,"w-textfield--has-prefix":this._hasPrefix,"w-textfield--has-suffix":this._hasSuffix})}">
|
|
@@ -2503,7 +2503,7 @@ var te=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var R=a=>{th
|
|
|
2503
2503
|
${this.formatter?P`<div class="w-textfield__mask"></div>`:se}
|
|
2504
2504
|
<input
|
|
2505
2505
|
class="${this._inputstyles}"
|
|
2506
|
-
type="${this.type}"
|
|
2506
|
+
type="${this.type||"text"}"
|
|
2507
2507
|
min="${g(this.min)}"
|
|
2508
2508
|
max="${g(this.max)}"
|
|
2509
2509
|
size="${g(this.size)}"
|