@warp-ds/elements 2.2.0-next.12 → 2.2.0-next.14

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 (62) hide show
  1. package/dist/custom-elements.json +2082 -920
  2. package/dist/packages/attention/index.js +11 -11
  3. package/dist/packages/attention/index.js.map +4 -4
  4. package/dist/packages/breadcrumbs/index.js.map +1 -1
  5. package/dist/packages/combobox/combobox.stories.d.ts +14 -0
  6. package/dist/packages/combobox/combobox.stories.js +95 -0
  7. package/dist/packages/combobox/index.d.ts +100 -0
  8. package/dist/packages/combobox/index.js +2492 -0
  9. package/dist/packages/combobox/index.js.map +7 -0
  10. package/dist/packages/combobox/locales/da/messages.d.mts +1 -0
  11. package/dist/packages/combobox/locales/da/messages.mjs +1 -0
  12. package/dist/packages/combobox/locales/en/messages.d.mts +1 -0
  13. package/dist/packages/combobox/locales/en/messages.mjs +1 -0
  14. package/dist/packages/combobox/locales/fi/messages.d.mts +1 -0
  15. package/dist/packages/combobox/locales/fi/messages.mjs +1 -0
  16. package/dist/packages/combobox/locales/nb/messages.d.mts +1 -0
  17. package/dist/packages/combobox/locales/nb/messages.mjs +1 -0
  18. package/dist/packages/combobox/locales/sv/messages.d.mts +1 -0
  19. package/dist/packages/combobox/locales/sv/messages.mjs +1 -0
  20. package/dist/packages/combobox/styles.d.ts +1 -0
  21. package/dist/packages/combobox/styles.js +2 -0
  22. package/dist/packages/expandable/index.d.ts +2 -0
  23. package/dist/packages/expandable/index.js +20 -11
  24. package/dist/packages/expandable/index.js.map +4 -4
  25. package/dist/packages/slider/Slider.d.ts +2 -0
  26. package/dist/packages/slider/Slider.js +8 -0
  27. package/dist/packages/slider/SliderThumb.d.ts +2 -0
  28. package/dist/packages/slider/SliderThumb.js +8 -0
  29. package/dist/packages/slider/index.d.ts +2 -0
  30. package/dist/packages/slider/index.js +2791 -0
  31. package/dist/packages/slider/index.js.map +7 -0
  32. package/dist/packages/slider/oddbird-css-anchor-positioning.d.ts +2 -0
  33. package/dist/packages/slider/oddbird-css-anchor-positioning.js +3 -0
  34. package/dist/packages/slider/slider-thumb.d.ts +60 -0
  35. package/dist/packages/slider/slider-thumb.js +2663 -0
  36. package/dist/packages/slider/slider-thumb.js.map +7 -0
  37. package/dist/packages/slider/slider.d.ts +51 -0
  38. package/dist/packages/slider/slider.js +2569 -0
  39. package/dist/packages/slider/slider.js.map +7 -0
  40. package/dist/packages/slider/slider.stories.d.ts +17 -0
  41. package/dist/packages/slider/slider.stories.js +203 -0
  42. package/dist/packages/slider/slider.test.d.ts +4 -0
  43. package/dist/packages/slider/slider.test.js +62 -0
  44. package/dist/packages/slider/styles/w-slider-thumb.styles.d.ts +1 -0
  45. package/dist/packages/slider/styles/w-slider-thumb.styles.js +132 -0
  46. package/dist/packages/slider/styles/w-slider.styles.d.ts +1 -0
  47. package/dist/packages/slider/styles/w-slider.styles.js +118 -0
  48. package/dist/packages/slider/styles.d.ts +1 -0
  49. package/dist/packages/slider/styles.js +2 -0
  50. package/dist/packages/textfield/index.d.ts +12 -1
  51. package/dist/packages/textfield/index.js +77 -28
  52. package/dist/packages/textfield/index.js.map +4 -4
  53. package/dist/packages/textfield/styles/w-textfield.styles.d.ts +1 -0
  54. package/dist/packages/textfield/styles/w-textfield.styles.js +46 -0
  55. package/dist/packages/textfield/styles.js +1 -1
  56. package/dist/packages/textfield/textfield.stories.d.ts +1 -0
  57. package/dist/packages/textfield/textfield.stories.js +19 -0
  58. package/dist/packages/textfield/textfield.test.d.ts +1 -0
  59. package/dist/packages/textfield/textfield.test.js +62 -3
  60. package/dist/vscode.html-custom-data.json +148 -24
  61. package/dist/web-types.json +382 -51
  62. package/package.json +5 -3
@@ -0,0 +1,46 @@
1
+ import { css } from 'lit';
2
+ /* For some reason the pseudoselectors for webkit and moz must be separate blocks :shrug: */
3
+ export const wTextfieldStyles = css `
4
+ .w-textfield {
5
+ --_input-padding-top: 12px;
6
+ --_input-padding-left: 8px;
7
+ --_input-padding-right: 8px;
8
+ position: relative;
9
+ }
10
+
11
+ .w-textfield--has-prefix {
12
+ --_input-padding-left: 40px;
13
+ }
14
+
15
+ .w-textfield--has-suffix {
16
+ --_input-padding-right: var(--w-prefix-width, 40px);
17
+ }
18
+
19
+ .w-textfield__input-wrapper {
20
+ position: relative;
21
+ overflow: hidden;
22
+ }
23
+
24
+ .w-textfield__input-wrapper:focus-within .w-textfield__mask {
25
+ display: none;
26
+ }
27
+
28
+ /* Could also consider giving the input mask a background color instead of this */
29
+ .w-textfield__input-wrapper:has(.w-textfield__mask):not(:focus-within) input {
30
+ color: transparent;
31
+ }
32
+
33
+ .w-textfield__mask {
34
+ display: block;
35
+ border: 1px solid transparent;
36
+ top: var(--_input-padding-top);
37
+ left: var(--_input-padding-left);
38
+ right: var(--_input-padding-right);
39
+ position: absolute;
40
+ pointer-events: none;
41
+ white-space: nowrap;
42
+ overflow: hidden;
43
+ text-overflow: ellipsis;
44
+ z-index: 1;
45
+ }
46
+ `;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const styles = css `*,: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{border-color:var(--w-s-color-border)}.s-border-disabled{border-color:var(--w-s-color-border-disabled)}.s-border-negative{border-color:var(--w-s-color-border-negative)}.hover\\:s-border-hover:hover{border-color:var(--w-s-color-border-hover)}.hover\\:s-border-negative-hover:hover{border-color:var(--w-s-color-border-negative-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}.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}}`;
2
+ export const styles = css `*,: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{border-color:var(--w-s-color-border)}.s-border-disabled{border-color:var(--w-s-color-border-disabled)}.s-border-negative{border-color:var(--w-s-color-border-negative)}.hover\\:s-border-hover:hover{border-color:var(--w-s-color-border-hover)}.hover\\:s-border-negative-hover:hover{border-color:var(--w-s-color-border-negative-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}}`;
@@ -15,3 +15,4 @@ export declare const Disabled: Story;
15
15
  export declare const ReadOnly: Story;
16
16
  export declare const Required: Story;
17
17
  export declare const WithAffix: Story;
18
+ export declare const Masking: Story;
@@ -84,3 +84,22 @@ export const WithAffix = {
84
84
  `;
85
85
  },
86
86
  };
87
+ export const Masking = {
88
+ args: {
89
+ label: 'Price',
90
+ placeholder: '1 000 000',
91
+ type: 'text',
92
+ locale: 'nb',
93
+ },
94
+ render({ locale, ...args }) {
95
+ return html `
96
+ <w-textfield ${spread(prespread(args))} data-testid="masking">
97
+ <w-affix slot="suffix" label="kr"></w-affix>
98
+ </w-textfield>
99
+ <script type="module">
100
+ const maskingTextfield = document.querySelector('w-textfield[data-testid="masking"]');
101
+ maskingTextfield.formatter = window.getNumberFormatter('${locale}').format;
102
+ </script>
103
+ `;
104
+ },
105
+ };
@@ -1 +1,2 @@
1
+ import '../affix/index.js';
1
2
  import './index.js';
@@ -1,9 +1,68 @@
1
1
  import { html } from 'lit';
2
- import { expect, test } from 'vitest';
2
+ import { userEvent } from '@vitest/browser/context';
3
+ import { expect, test, vi } from 'vitest';
3
4
  import { render } from 'vitest-browser-lit';
5
+ import '../affix/index.js';
4
6
  import './index.js';
5
7
  test('renders the textfield', async () => {
6
- const component = html `<w-textfield label="Email" help-text="Ugyldig e-post"></w-textfield>`;
8
+ const component = html `<w-textfield label="Test label"></w-textfield>`;
7
9
  const page = render(component);
8
- await expect.element(page.getByText('Email')).toBeVisible();
10
+ await expect.element(page.getByText('Test label')).toBeVisible();
11
+ });
12
+ test('works as expected in forms', async () => {
13
+ const label = 'Test label';
14
+ const component = html `
15
+ <form data-testid="form">
16
+ <w-textfield label="${label}" name="message" value="Hola el Mundo"></w-textfield>
17
+ </form>
18
+ `;
19
+ const page = render(component);
20
+ await expect.element(page.getByLabelText(label)).toHaveValue('Hola el Mundo');
21
+ let formData = new FormData(page.getByTestId('form').element());
22
+ expect(formData.get('message')).toBe('Hola el Mundo');
23
+ const inputHandler = vi.fn();
24
+ const changeHandler = vi.fn();
25
+ page.getByLabelText(label).element().addEventListener('input', inputHandler);
26
+ page.getByLabelText(label).element().addEventListener('change', changeHandler);
27
+ await page.getByLabelText(label).fill('Hello, World');
28
+ expect(inputHandler).toHaveBeenCalled();
29
+ expect(changeHandler).not.toHaveBeenCalled();
30
+ await userEvent.tab(); // trigger a blur to fire the change event
31
+ expect(changeHandler).toHaveBeenCalled();
32
+ await expect.element(page.getByLabelText(label)).toHaveValue('Hello, World');
33
+ formData = new FormData(page.getByTestId('form').element());
34
+ expect(formData.get('message')).toBe('Hello, World');
35
+ });
36
+ test('renders help text if provided', async () => {
37
+ const component = html `<w-textfield label="Test label" help-text="Helpful help text"></w-textfield>`;
38
+ const page = render(component);
39
+ await expect.element(page.getByText('Helpful help text')).toBeVisible();
40
+ });
41
+ test('marks input field as aria-invalid if the invalid prop is true', async () => {
42
+ const component = html `<w-textfield label="Test label" invalid help-text="No, bad input!"></w-textfield>`;
43
+ const page = render(component);
44
+ await expect.element(page.getByLabelText('Test label')).toHaveAccessibleErrorMessage('No, bad input!');
45
+ });
46
+ test('marks input field as readonly if the read-only prop is true', async () => {
47
+ const component = html `<w-textfield label="Test label" read-only></w-textfield>`;
48
+ const page = render(component);
49
+ await expect.element(page.getByLabelText('Test label')).toHaveAttribute('readonly', '');
50
+ });
51
+ test('renders affix component in the prefix slot', async () => {
52
+ const component = html `
53
+ <w-textfield label="Test label">
54
+ <w-affix slot="prefix" label="kr"></w-affix>
55
+ </w-textfield>
56
+ `;
57
+ const page = render(component);
58
+ await expect.element(page.getByText('kr')).toBeVisible();
59
+ });
60
+ test('renders affix component in the suffix slot', async () => {
61
+ const component = html `
62
+ <w-textfield label="Test label">
63
+ <w-affix slot="suffix" label="kr"></w-affix>
64
+ </w-textfield>
65
+ `;
66
+ const page = render(component);
67
+ await expect.element(page.getByText('kr')).toBeVisible();
9
68
  });
@@ -187,6 +187,85 @@
187
187
  ],
188
188
  "references": []
189
189
  },
190
+ {
191
+ "name": "w-combobox",
192
+ "description": "A combobox element for text input with selectable options.\n\n[See Storybook for usage examples](https://warp-ds.github.io/elements/?path=/docs/forms-combobox--docs)\n\n---\n\n",
193
+ "attributes": [
194
+ {
195
+ "name": "options",
196
+ "description": "The available options to select from",
197
+ "values": [{ "name": "ComboboxOption[]" }]
198
+ },
199
+ { "name": "label", "description": "Label above input", "values": [] },
200
+ {
201
+ "name": "placeholder",
202
+ "description": "Input placeholder",
203
+ "values": []
204
+ },
205
+ { "name": "value", "description": "The input value", "values": [] },
206
+ {
207
+ "name": "open-on-focus",
208
+ "description": "Whether the popover opens when focus is on the text field",
209
+ "values": []
210
+ },
211
+ {
212
+ "name": "select-on-blur",
213
+ "description": "Select active option on blur",
214
+ "values": []
215
+ },
216
+ {
217
+ "name": "match-text-segments",
218
+ "description": "Whether the matching text segments in the options should be highlighted",
219
+ "values": []
220
+ },
221
+ {
222
+ "name": "disable-static-filtering",
223
+ "description": "Disable client-side static filtering",
224
+ "values": []
225
+ },
226
+ {
227
+ "name": "invalid",
228
+ "description": "Renders the input field in an invalid state",
229
+ "values": []
230
+ },
231
+ {
232
+ "name": "help-text",
233
+ "description": "The content to display as the help text",
234
+ "values": []
235
+ },
236
+ {
237
+ "name": "disabled",
238
+ "description": "Whether the element is disabled",
239
+ "values": []
240
+ },
241
+ {
242
+ "name": "required",
243
+ "description": "Whether the element is required",
244
+ "values": []
245
+ },
246
+ {
247
+ "name": "optional",
248
+ "description": "Whether to show optional text",
249
+ "values": []
250
+ },
251
+ {
252
+ "name": "class-name",
253
+ "description": "Additional container styling",
254
+ "values": []
255
+ },
256
+ {
257
+ "name": "list-class-name",
258
+ "description": "Additional list styling",
259
+ "values": []
260
+ },
261
+ {
262
+ "name": "name",
263
+ "description": "Name attribute for form submission",
264
+ "values": []
265
+ }
266
+ ],
267
+ "references": []
268
+ },
190
269
  {
191
270
  "name": "w-datepicker",
192
271
  "description": "An input for dates.\n\nUses the `lang` attribute on either the element or on `<html>` to determine the locale options.\n\n[See Storybook for usage examples](https://warp-ds.github.io/elements/?path=/docs/forms-datepicker--docs)\n\n---\n\n",
@@ -366,6 +445,75 @@
366
445
  ],
367
446
  "references": []
368
447
  },
448
+ {
449
+ "name": "w-textfield",
450
+ "description": "A single line text input element.\n\n[See Storybook for usage examples](https://warp-ds.github.io/elements/?path=/docs/forms-textfield--docs)\n\n---\n\n",
451
+ "attributes": [
452
+ { "name": "disabled", "values": [] },
453
+ { "name": "invalid", "values": [] },
454
+ { "name": "id", "values": [] },
455
+ { "name": "label", "values": [] },
456
+ { "name": "help-text", "values": [] },
457
+ { "name": "size", "values": [] },
458
+ { "name": "max", "values": [] },
459
+ { "name": "min", "values": [] },
460
+ { "name": "min-length", "values": [] },
461
+ { "name": "max-length", "values": [] },
462
+ { "name": "pattern", "values": [] },
463
+ { "name": "placeholder", "values": [] },
464
+ { "name": "read-only", "values": [] },
465
+ { "name": "required", "values": [] },
466
+ { "name": "type", "values": [] },
467
+ { "name": "value", "values": [] },
468
+ { "name": "name", "values": [] }
469
+ ],
470
+ "references": []
471
+ },
472
+ {
473
+ "name": "w-slider-thumb",
474
+ "description": "Component to place inside a `<w-slider>`.\n\n[See Storybook for usage examples](https://warp-ds.github.io/elements/?path=/docs/forms-slider-and-range-slider--docs)\n\n---\n\n\n\n### **Events:**\n - **slidervalidity**",
475
+ "attributes": [
476
+ { "name": "aria-label", "values": [] },
477
+ { "name": "aria-description", "values": [] },
478
+ { "name": "label", "values": [] },
479
+ { "name": "name", "values": [] },
480
+ { "name": "value", "values": [] },
481
+ { "name": "disabled", "values": [] }
482
+ ],
483
+ "references": []
484
+ },
485
+ {
486
+ "name": "w-slider",
487
+ "description": "Parent component for sliders (both single and range sliders). Used in combination with a `<w-slider-thumb>`.\n\n[See Storybook for usage examples](https://warp-ds.github.io/elements/?path=/docs/forms-slider-and-range-slider--docs)\n\n---\n\n\n\n### **Slots:**\n - _default_ - For single sliders place a `<w-slider-thumb>` in the default slot.\n- **label** - Label for the slider or range slider as a whole.\n- **description** - Optional description between the label and slider.\n- **from** - Range sliders need to place a `<w-slider-thumb>` in the from and to slots.\n- **to** - Range sliders need to place a `<w-slider-thumb>` in the from and to slots.",
488
+ "attributes": [
489
+ {
490
+ "name": "label",
491
+ "description": "The slider fieldset label. Required for proper accessibility.\n\nIf you need to display HTML, use the `label` slot instead.",
492
+ "values": []
493
+ },
494
+ { "name": "disabled", "values": [] },
495
+ { "name": "invalid", "values": [] },
496
+ {
497
+ "name": "required",
498
+ "description": "Ensures a child slider thumb has a value before allowing the containing form to submit.",
499
+ "values": []
500
+ },
501
+ { "name": "min", "values": [] },
502
+ { "name": "max", "values": [] },
503
+ {
504
+ "name": "markers",
505
+ "description": "Pass a value similar to step to create visual markers at that interval",
506
+ "values": []
507
+ },
508
+ { "name": "step", "values": [] },
509
+ {
510
+ "name": "suffix",
511
+ "description": "Suffix used in text input fields and for the min and max values of the slider.",
512
+ "values": []
513
+ }
514
+ ],
515
+ "references": []
516
+ },
369
517
  {
370
518
  "name": "w-steps",
371
519
  "description": "Steps are used to show progress through a process or to guide users through a multi-step task.\n\n[See Storybook for usage examples](https://warp-ds.github.io/elements/?path=/docs/components-steps--docs)\n\n---\n\n",
@@ -392,30 +540,6 @@
392
540
  { "name": "disabled", "values": [] }
393
541
  ],
394
542
  "references": []
395
- },
396
- {
397
- "name": "w-textfield",
398
- "description": "A single line text input element.\n\n[See Storybook for usage examples](https://warp-ds.github.io/elements/?path=/docs/forms-textfield--docs)\n\n---\n\n",
399
- "attributes": [
400
- { "name": "disabled", "values": [] },
401
- { "name": "invalid", "values": [] },
402
- { "name": "id", "values": [] },
403
- { "name": "label", "values": [] },
404
- { "name": "help-text", "values": [] },
405
- { "name": "size", "values": [] },
406
- { "name": "max", "values": [] },
407
- { "name": "min", "values": [] },
408
- { "name": "min-length", "values": [] },
409
- { "name": "max-length", "values": [] },
410
- { "name": "pattern", "values": [] },
411
- { "name": "placeholder", "values": [] },
412
- { "name": "read-only", "values": [] },
413
- { "name": "required", "values": [] },
414
- { "name": "type", "values": [] },
415
- { "name": "value", "values": [] },
416
- { "name": "name", "values": [] }
417
- ],
418
- "references": []
419
543
  }
420
544
  ]
421
545
  }