@warp-ds/elements 2.5.1-next.5 → 2.5.2
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/.storybook/utilities.d.ts +0 -1
- package/dist/.storybook/utilities.js +14 -22
- package/dist/custom-elements.json +31 -572
- package/dist/index.d.ts +0 -269
- package/dist/packages/combobox/combobox.d.ts +0 -5
- package/dist/packages/combobox/combobox.js +12 -12
- package/dist/packages/combobox/combobox.js.map +3 -3
- package/dist/packages/combobox/combobox.stories.js +7 -7
- package/dist/packages/combobox/combobox.test.js +0 -90
- package/dist/packages/toast/toast.d.ts +1 -0
- package/dist/packages/toast/toast.js +11 -11
- package/dist/packages/toast/toast.js.map +4 -4
- package/dist/web-types.json +1 -91
- package/package.json +1 -9
- package/dist/packages/pagination/locales/da/messages.d.mts +0 -1
- package/dist/packages/pagination/locales/da/messages.mjs +0 -1
- package/dist/packages/pagination/locales/en/messages.d.mts +0 -1
- package/dist/packages/pagination/locales/en/messages.mjs +0 -1
- package/dist/packages/pagination/locales/fi/messages.d.mts +0 -1
- package/dist/packages/pagination/locales/fi/messages.mjs +0 -1
- package/dist/packages/pagination/locales/nb/messages.d.mts +0 -1
- package/dist/packages/pagination/locales/nb/messages.mjs +0 -1
- package/dist/packages/pagination/locales/sv/messages.d.mts +0 -1
- package/dist/packages/pagination/locales/sv/messages.mjs +0 -1
- package/dist/packages/pagination/pagination.d.ts +0 -32
- package/dist/packages/pagination/pagination.js +0 -2503
- package/dist/packages/pagination/pagination.js.map +0 -7
- package/dist/packages/pagination/pagination.react.stories.d.ts +0 -21
- package/dist/packages/pagination/pagination.react.stories.js +0 -45
- package/dist/packages/pagination/pagination.stories.d.ts +0 -14
- package/dist/packages/pagination/pagination.stories.js +0 -56
- package/dist/packages/pagination/pagination.test.d.ts +0 -1
- package/dist/packages/pagination/pagination.test.js +0 -76
- package/dist/packages/pagination/react.d.ts +0 -5
- package/dist/packages/pagination/react.js +0 -15
- package/dist/packages/pagination/styles.d.ts +0 -1
- package/dist/packages/pagination/styles.js +0 -2
- package/dist/packages/textarea/locales/da/messages.d.mts +0 -1
- package/dist/packages/textarea/locales/da/messages.mjs +0 -1
- package/dist/packages/textarea/locales/en/messages.d.mts +0 -1
- package/dist/packages/textarea/locales/en/messages.mjs +0 -1
- package/dist/packages/textarea/locales/fi/messages.d.mts +0 -1
- package/dist/packages/textarea/locales/fi/messages.mjs +0 -1
- package/dist/packages/textarea/locales/nb/messages.d.mts +0 -1
- package/dist/packages/textarea/locales/nb/messages.mjs +0 -1
- package/dist/packages/textarea/locales/sv/messages.d.mts +0 -1
- package/dist/packages/textarea/locales/sv/messages.mjs +0 -1
- package/dist/packages/textarea/react.d.ts +0 -11
- package/dist/packages/textarea/react.js +0 -21
- package/dist/packages/textarea/styles.d.ts +0 -1
- package/dist/packages/textarea/styles.js +0 -2
- package/dist/packages/textarea/textarea.d.ts +0 -62
- package/dist/packages/textarea/textarea.js +0 -2476
- package/dist/packages/textarea/textarea.js.map +0 -7
- package/dist/packages/textarea/textarea.react.stories.d.ts +0 -33
- package/dist/packages/textarea/textarea.react.stories.js +0 -41
- package/dist/packages/textarea/textarea.stories.d.ts +0 -20
- package/dist/packages/textarea/textarea.stories.js +0 -113
- package/dist/packages/textarea/textarea.test.d.ts +0 -1
- package/dist/packages/textarea/textarea.test.js +0 -172
- package/dist/packages/utils.d.ts +0 -1
- package/dist/packages/utils.js +0 -4
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { userEvent } from '@vitest/browser/context';
|
|
2
|
-
import { html } from 'lit';
|
|
3
|
-
import { expect, test, vi } from 'vitest';
|
|
4
|
-
import { render } from 'vitest-browser-lit';
|
|
5
|
-
import './textarea.js';
|
|
6
|
-
test('renders the textarea', async () => {
|
|
7
|
-
const component = html `<w-textarea label="Test label"></w-textarea>`;
|
|
8
|
-
const page = render(component);
|
|
9
|
-
await expect.element(page.getByText('Test label')).toBeVisible();
|
|
10
|
-
});
|
|
11
|
-
test('works as expected in forms', async () => {
|
|
12
|
-
const label = 'Test label';
|
|
13
|
-
const component = html `
|
|
14
|
-
<form data-testid="form">
|
|
15
|
-
<w-textarea label="${label}" name="message" value="Hola el Mundo"></w-textarea>
|
|
16
|
-
</form>
|
|
17
|
-
`;
|
|
18
|
-
const page = render(component);
|
|
19
|
-
await expect.element(page.getByLabelText(label)).toHaveValue('Hola el Mundo');
|
|
20
|
-
let formData = new FormData(page.getByTestId('form').element());
|
|
21
|
-
expect(formData.get('message')).toBe('Hola el Mundo');
|
|
22
|
-
const inputHandler = vi.fn();
|
|
23
|
-
const changeHandler = vi.fn();
|
|
24
|
-
page.getByLabelText(label).element().addEventListener('input', inputHandler);
|
|
25
|
-
page.getByLabelText(label).element().addEventListener('change', changeHandler);
|
|
26
|
-
await page.getByLabelText(label).fill('Hello, World');
|
|
27
|
-
expect(inputHandler).toHaveBeenCalled();
|
|
28
|
-
expect(changeHandler).not.toHaveBeenCalled();
|
|
29
|
-
await userEvent.tab(); // trigger a blur to fire the change event
|
|
30
|
-
await expect.poll(() => changeHandler.mock.calls.length).toBeGreaterThan(0);
|
|
31
|
-
await expect.element(page.getByLabelText(label)).toHaveValue('Hello, World');
|
|
32
|
-
formData = new FormData(page.getByTestId('form').element());
|
|
33
|
-
expect(formData.get('message')).toBe('Hello, World');
|
|
34
|
-
});
|
|
35
|
-
test('renders help text if provided', async () => {
|
|
36
|
-
const component = html `<w-textarea label="Test label" help-text="Helpful help text"></w-textarea>`;
|
|
37
|
-
const page = render(component);
|
|
38
|
-
await expect.element(page.getByText('Helpful help text')).toBeVisible();
|
|
39
|
-
});
|
|
40
|
-
test('marks input field as aria-invalid if the invalid prop is true', async () => {
|
|
41
|
-
const component = html `<w-textarea label="Test label" invalid help-text="No, bad input!"></w-textarea>`;
|
|
42
|
-
const page = render(component);
|
|
43
|
-
await expect.element(page.getByLabelText('Test label')).toHaveAccessibleErrorMessage('No, bad input!');
|
|
44
|
-
});
|
|
45
|
-
test('aria-invalid attribute is absent when textarea is valid', async () => {
|
|
46
|
-
const component = html `<w-textarea label="Test label" data-testid="textarea"></w-textarea>`;
|
|
47
|
-
const page = render(component);
|
|
48
|
-
const textarea = page.getByLabelText('Test label');
|
|
49
|
-
await expect.element(textarea).toBeVisible();
|
|
50
|
-
// aria-invalid should NOT be present when valid
|
|
51
|
-
await expect.element(textarea).not.toHaveAttribute('aria-invalid');
|
|
52
|
-
});
|
|
53
|
-
test('aria-invalid attribute is "true" when textarea is invalid', async () => {
|
|
54
|
-
const component = html `<w-textarea label="Test label" invalid></w-textarea>`;
|
|
55
|
-
const page = render(component);
|
|
56
|
-
const textarea = page.getByLabelText('Test label');
|
|
57
|
-
await expect.element(textarea).toBeVisible();
|
|
58
|
-
// aria-invalid should be "true" when invalid
|
|
59
|
-
await expect.element(textarea).toHaveAttribute('aria-invalid', 'true');
|
|
60
|
-
});
|
|
61
|
-
test('marks input field as readonly if the readonly prop is true', async () => {
|
|
62
|
-
const component = html `<w-textarea label="Test label" readonly></w-textarea>`;
|
|
63
|
-
const page = render(component);
|
|
64
|
-
await expect.element(page.getByLabelText('Test label')).toHaveAttribute('readonly', '');
|
|
65
|
-
});
|
|
66
|
-
test('can reset textarea by resetting surrounding form', async () => {
|
|
67
|
-
render(html `
|
|
68
|
-
<form>
|
|
69
|
-
<w-textarea name="message" value="Hola el Mundo"></w-textarea>
|
|
70
|
-
</form>
|
|
71
|
-
`);
|
|
72
|
-
const form = document.querySelector('form');
|
|
73
|
-
const wTextArea = document.querySelector('w-textarea');
|
|
74
|
-
// sanity
|
|
75
|
-
expect(form).not.toBeNull();
|
|
76
|
-
expect(wTextArea).not.toBeNull();
|
|
77
|
-
await expect.poll(() => wTextArea.value).toBe('Hola el Mundo');
|
|
78
|
-
wTextArea.value = 'Definitely not Hola el Mundo';
|
|
79
|
-
await expect.poll(() => wTextArea.value).toBe('Definitely not Hola el Mundo');
|
|
80
|
-
// Reset the form
|
|
81
|
-
form.reset();
|
|
82
|
-
await expect.poll(() => wTextArea.value).toBe('Hola el Mundo');
|
|
83
|
-
});
|
|
84
|
-
test('checkValidity returns false when required textarea is empty', async () => {
|
|
85
|
-
render(html `<w-textarea label="Message" name="message" required></w-textarea>`);
|
|
86
|
-
const wTextArea = document.querySelector('w-textarea');
|
|
87
|
-
// Wait for component to be ready
|
|
88
|
-
await expect.poll(() => wTextArea.checkValidity()).toBe(false);
|
|
89
|
-
expect(wTextArea.validity.valueMissing).toBe(true);
|
|
90
|
-
expect(wTextArea.validationMessage).not.toBe('');
|
|
91
|
-
});
|
|
92
|
-
test('checkValidity returns true when required textarea has a value', async () => {
|
|
93
|
-
render(html `<w-textarea label="Message" name="message" required value="Hello"></w-textarea>`);
|
|
94
|
-
const wTextArea = document.querySelector('w-textarea');
|
|
95
|
-
// Wait for component to be ready
|
|
96
|
-
await expect.poll(() => wTextArea.checkValidity()).toBe(true);
|
|
97
|
-
expect(wTextArea.validity.valid).toBe(true);
|
|
98
|
-
});
|
|
99
|
-
test('form submission is blocked when required textarea is empty', async () => {
|
|
100
|
-
const submitHandler = vi.fn((e) => e.preventDefault());
|
|
101
|
-
render(html `
|
|
102
|
-
<form data-testid="form">
|
|
103
|
-
<w-textarea label="Message" name="message" required></w-textarea>
|
|
104
|
-
<button type="submit">Submit</button>
|
|
105
|
-
</form>
|
|
106
|
-
`);
|
|
107
|
-
const form = document.querySelector('form');
|
|
108
|
-
form.addEventListener('submit', submitHandler);
|
|
109
|
-
const wTextArea = document.querySelector('w-textarea');
|
|
110
|
-
// Wait for component to be ready
|
|
111
|
-
await expect.poll(() => wTextArea.checkValidity()).toBe(false);
|
|
112
|
-
// Try to submit - should be blocked by validation
|
|
113
|
-
const submitButton = document.querySelector('button');
|
|
114
|
-
submitButton.click();
|
|
115
|
-
// Component should show invalid state with error message
|
|
116
|
-
await expect.poll(() => wTextArea.invalid).toBe(true);
|
|
117
|
-
await expect.poll(() => wTextArea.helpText).not.toBe('');
|
|
118
|
-
// Form should not have been submitted
|
|
119
|
-
expect(submitHandler).not.toHaveBeenCalled();
|
|
120
|
-
});
|
|
121
|
-
test('form submission succeeds when required textarea has a value', async () => {
|
|
122
|
-
const submitHandler = vi.fn((e) => e.preventDefault());
|
|
123
|
-
render(html `
|
|
124
|
-
<form data-testid="form">
|
|
125
|
-
<w-textarea label="Message" name="message" required value="Hello"></w-textarea>
|
|
126
|
-
<button type="submit">Submit</button>
|
|
127
|
-
</form>
|
|
128
|
-
`);
|
|
129
|
-
const form = document.querySelector('form');
|
|
130
|
-
form.addEventListener('submit', submitHandler);
|
|
131
|
-
const wTextArea = document.querySelector('w-textarea');
|
|
132
|
-
// Wait for component to be ready
|
|
133
|
-
await expect.poll(() => wTextArea.checkValidity()).toBe(true);
|
|
134
|
-
// Submit should succeed
|
|
135
|
-
const submitButton = document.querySelector('button');
|
|
136
|
-
submitButton.click();
|
|
137
|
-
// Form should have been submitted
|
|
138
|
-
await expect.poll(() => submitHandler.mock.calls.length).toBeGreaterThan(0);
|
|
139
|
-
});
|
|
140
|
-
test('shows validation error on blur when required field is empty', async () => {
|
|
141
|
-
const page = render(html `<w-textarea label="Message" name="message" required></w-textarea>`);
|
|
142
|
-
const wTextArea = document.querySelector('w-textarea');
|
|
143
|
-
// Initially should not show error (no interaction yet)
|
|
144
|
-
await expect.poll(() => wTextArea.invalid).toBeFalsy();
|
|
145
|
-
// Focus and blur the textarea
|
|
146
|
-
const textarea = page.getByLabelText('Message');
|
|
147
|
-
await textarea.click();
|
|
148
|
-
await userEvent.tab(); // blur
|
|
149
|
-
// Should now show validation error
|
|
150
|
-
await expect.poll(() => wTextArea.invalid).toBe(true);
|
|
151
|
-
await expect.poll(() => wTextArea.helpText).not.toBe('');
|
|
152
|
-
});
|
|
153
|
-
test('restores original help text when validation passes', async () => {
|
|
154
|
-
const page = render(html `
|
|
155
|
-
<w-textarea label="Message" name="message" required help-text="Enter your message"></w-textarea>
|
|
156
|
-
`);
|
|
157
|
-
const wTextArea = document.querySelector('w-textarea');
|
|
158
|
-
// Initially should show original help text
|
|
159
|
-
await expect.poll(() => wTextArea.helpText).toBe('Enter your message');
|
|
160
|
-
// Focus and blur to trigger validation
|
|
161
|
-
const textarea = page.getByLabelText('Message');
|
|
162
|
-
await textarea.click();
|
|
163
|
-
await userEvent.tab();
|
|
164
|
-
// Should show validation error
|
|
165
|
-
await expect.poll(() => wTextArea.invalid).toBe(true);
|
|
166
|
-
await expect.poll(() => wTextArea.helpText).not.toBe('Enter your message');
|
|
167
|
-
// Fill in a value
|
|
168
|
-
await textarea.fill('Hello');
|
|
169
|
-
// Should restore original help text
|
|
170
|
-
await expect.poll(() => wTextArea.invalid).toBe(false);
|
|
171
|
-
await expect.poll(() => wTextArea.helpText).toBe('Enter your message');
|
|
172
|
-
});
|
package/dist/packages/utils.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function uniqueId(prefix?: string): string;
|
package/dist/packages/utils.js
DELETED