ionbase-ui 0.51.0 → 0.59.0

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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/dist/components/Accordion.d.ts +54 -0
  3. package/dist/components/Accordion.d.ts.map +1 -0
  4. package/dist/components/Accordion.js +68 -0
  5. package/dist/components/Accordion.js.map +1 -0
  6. package/dist/components/Breadcrumb.d.ts +45 -0
  7. package/dist/components/Breadcrumb.d.ts.map +1 -0
  8. package/dist/components/Breadcrumb.js +31 -0
  9. package/dist/components/Breadcrumb.js.map +1 -0
  10. package/dist/components/Checkbox.d.ts +2 -1
  11. package/dist/components/Checkbox.d.ts.map +1 -1
  12. package/dist/components/Checkbox.js +4 -2
  13. package/dist/components/Checkbox.js.map +1 -1
  14. package/dist/components/Combobox.d.ts +86 -0
  15. package/dist/components/Combobox.d.ts.map +1 -0
  16. package/dist/components/Combobox.js +261 -0
  17. package/dist/components/Combobox.js.map +1 -0
  18. package/dist/components/Drawer.d.ts +52 -0
  19. package/dist/components/Drawer.d.ts.map +1 -0
  20. package/dist/components/Drawer.js +66 -0
  21. package/dist/components/Drawer.js.map +1 -0
  22. package/dist/components/FileUpload.d.ts +79 -0
  23. package/dist/components/FileUpload.d.ts.map +1 -0
  24. package/dist/components/FileUpload.js +218 -0
  25. package/dist/components/FileUpload.js.map +1 -0
  26. package/dist/components/ProgressBar.d.ts +46 -0
  27. package/dist/components/ProgressBar.d.ts.map +1 -0
  28. package/dist/components/ProgressBar.js +52 -0
  29. package/dist/components/ProgressBar.js.map +1 -0
  30. package/dist/components/Select.d.ts +9 -2
  31. package/dist/components/Select.d.ts.map +1 -1
  32. package/dist/components/Select.js.map +1 -1
  33. package/dist/components/Skeleton.d.ts +39 -0
  34. package/dist/components/Skeleton.d.ts.map +1 -0
  35. package/dist/components/Skeleton.js +50 -0
  36. package/dist/components/Skeleton.js.map +1 -0
  37. package/dist/components/Spinner.d.ts +45 -0
  38. package/dist/components/Spinner.d.ts.map +1 -0
  39. package/dist/components/Spinner.js +44 -0
  40. package/dist/components/Spinner.js.map +1 -0
  41. package/dist/components/Toggle.d.ts +2 -1
  42. package/dist/components/Toggle.d.ts.map +1 -1
  43. package/dist/components/Toggle.js +4 -2
  44. package/dist/components/Toggle.js.map +1 -1
  45. package/dist/components/index.d.ts +16 -0
  46. package/dist/components/index.d.ts.map +1 -1
  47. package/dist/components/index.js +8 -0
  48. package/dist/components/index.js.map +1 -1
  49. package/dist/components/resolve-selection.d.ts +36 -0
  50. package/dist/components/resolve-selection.d.ts.map +1 -0
  51. package/dist/components/resolve-selection.js +14 -0
  52. package/dist/components/resolve-selection.js.map +1 -0
  53. package/dist/figma-descriptions.json +201 -146
  54. package/dist/figma-map.json +2296 -1684
  55. package/dist/meta/Accordion.json +123 -0
  56. package/dist/meta/AccordionItem.json +90 -0
  57. package/dist/meta/Breadcrumb.json +87 -0
  58. package/dist/meta/BreadcrumbItem.json +78 -0
  59. package/dist/meta/Checkbox.json +18 -1
  60. package/dist/meta/Combobox.json +265 -0
  61. package/dist/meta/Drawer.json +234 -0
  62. package/dist/meta/EmptyState.json +1 -1
  63. package/dist/meta/FileUpload.json +246 -0
  64. package/dist/meta/PhoneInput.json +39 -39
  65. package/dist/meta/Popover.json +3 -3
  66. package/dist/meta/ProgressBar.json +166 -0
  67. package/dist/meta/Select.json +4 -3
  68. package/dist/meta/Skeleton.json +120 -0
  69. package/dist/meta/Spinner.json +123 -0
  70. package/dist/meta/Toggle.json +18 -1
  71. package/dist/meta/Tooltip.json +3 -3
  72. package/dist/meta/components.json +1837 -270
  73. package/dist/meta/contrast.json +2873 -194
  74. package/dist/meta/index.json +128 -7
  75. package/dist/meta/patterns/index.json +1 -1
  76. package/dist/styles/accordion.css +102 -0
  77. package/dist/styles/breadcrumb.css +72 -0
  78. package/dist/styles/combobox.css +154 -0
  79. package/dist/styles/drawer.css +181 -0
  80. package/dist/styles/empty-state.css +16 -4
  81. package/dist/styles/file-upload.css +236 -0
  82. package/dist/styles/index.css +8 -0
  83. package/dist/styles/progress-bar.css +107 -0
  84. package/dist/styles/skeleton.css +76 -0
  85. package/dist/styles/spinner.css +70 -0
  86. package/llms.txt +2 -2
  87. package/package.json +19 -19
@@ -0,0 +1,234 @@
1
+ {
2
+ "name": "Drawer",
3
+ "source": "src/components/Drawer.tsx",
4
+ "propsType": "DrawerProps",
5
+ "description": "Drawer — a modal panel anchored to an edge.\n\nWHY IT IS A MODAL AND NOT A SIDEBAR\n\nIt takes focus, traps it, closes on Escape and on an outside click, and marks\nthe rest of the page inert — all of `Modal`'s behaviour, differing only in\nwhere the panel sits and how it enters. A persistent side panel that does not\ndo those things is layout, not a drawer, and belongs in the page rather than\nin an overlay.\n\nWHEN TO REACH FOR MODAL INSTEAD\n\nA drawer suits work that is long or list-shaped — filters, a record's detail,\na sequence of settings — because an edge panel can be tall without becoming a\nsquare that fights the viewport. A decision, especially a destructive one,\nbelongs in a Modal: it is centred, it is smaller, and it does not invite\nscrolling past the thing being confirmed.\n\nRENDERS NOTHING WHEN CLOSED, and portals when open, for the reasons recorded\non Modal: a closed overlay left in the tree is still keyboard-focusable, and\nan inline one inherits whatever `overflow` and stacking context surrounds it.",
6
+ "import": "import { Drawer } from 'ionbase-ui';",
7
+ "status": "stable",
8
+ "summary": "A modal panel anchored to an edge. Modal behaviour — focus trap, Escape, scrim — with the shape of a side panel.",
9
+ "useWhen": [
10
+ "work that is long or list-shaped: filters, a record's detail, a run of settings",
11
+ "the page behind should stay visible as context while a task is done beside it",
12
+ "a form long enough that a centred dialog would scroll its own actions off screen"
13
+ ],
14
+ "useInstead": [
15
+ {
16
+ "when": "the user is making a decision, especially a destructive one",
17
+ "use": "Modal",
18
+ "why": "a modal is centred and small enough that the thing being confirmed cannot be scrolled past"
19
+ },
20
+ {
21
+ "when": "the panel should stay open while the user works elsewhere",
22
+ "use": "page layout",
23
+ "why": "a drawer traps focus and marks the rest of the page inert. A panel that does not do those things is layout, not an overlay"
24
+ },
25
+ {
26
+ "when": "the content is a short menu of actions",
27
+ "use": "Popover or Menu"
28
+ }
29
+ ],
30
+ "variants": {
31
+ "placement": {
32
+ "start": {
33
+ "use": "navigation and hierarchy, which readers expect at the leading edge"
34
+ },
35
+ "end": {
36
+ "use": "the default — detail and editing beside the record that opened it"
37
+ },
38
+ "top": {
39
+ "use": "rare: a global search or command surface"
40
+ },
41
+ "bottom": {
42
+ "use": "touch-first layouts, where the bottom edge is the reachable one"
43
+ }
44
+ },
45
+ "size": {
46
+ "sm": {
47
+ "use": "a short form or a filter list"
48
+ },
49
+ "md": {
50
+ "use": "the default"
51
+ },
52
+ "lg": {
53
+ "use": "a record detail with its own sections"
54
+ }
55
+ }
56
+ },
57
+ "slots": {
58
+ "title": {
59
+ "accepts": "text",
60
+ "note": "required — it is the dialog's accessible name"
61
+ },
62
+ "description": {
63
+ "accepts": "text"
64
+ },
65
+ "children": {
66
+ "accepts": "any content",
67
+ "note": "the only scrolling region"
68
+ },
69
+ "footer": {
70
+ "accepts": "Button",
71
+ "note": "pinned to the bottom edge, so actions stay reachable in a long panel"
72
+ }
73
+ },
74
+ "a11y": {
75
+ "requires": [
76
+ "`title`, which becomes the dialog's accessible name via aria-labelledby"
77
+ ],
78
+ "notes": [
79
+ "start and end follow writing direction, so a right-hand drawer in English is a left-hand one in Arabic with no second variant",
80
+ "renders nothing when closed and portals when open: a closed overlay left in the tree is still keyboard-focusable",
81
+ "only the body scrolls, so the title stays on screen — the one piece of context a user needs while working down a long list"
82
+ ]
83
+ },
84
+ "antiPatterns": [
85
+ {
86
+ "dont": "a Drawer that stays open while the user edits the page behind it",
87
+ "do": "a layout panel",
88
+ "why": "it traps focus and marks the rest inert; a keyboard user cannot reach the page behind it"
89
+ },
90
+ {
91
+ "dont": "<Drawer> for a delete confirmation",
92
+ "do": "<Modal>",
93
+ "why": "an edge panel is tall, so the confirm button can sit below the fold — the one control that must never be missed"
94
+ }
95
+ ],
96
+ "stylesheet": "src/styles/drawer.css",
97
+ "tokens": [
98
+ "--border-focus",
99
+ "--border-subtle",
100
+ "--border-width-default",
101
+ "--border-width-thick",
102
+ "--font-family-sans",
103
+ "--font-weight-semibold",
104
+ "--icon-secondary",
105
+ "--icon-size-md",
106
+ "--ion-drawer-size",
107
+ "--radius-lg",
108
+ "--radius-sm",
109
+ "--spacing-12",
110
+ "--spacing-24",
111
+ "--spacing-32",
112
+ "--spacing-4",
113
+ "--spacing-8",
114
+ "--surface-hover",
115
+ "--surface-raised",
116
+ "--surface-scrim",
117
+ "--text-default",
118
+ "--text-secondary",
119
+ "--type-body",
120
+ "--type-body-line-height",
121
+ "--type-body-sm",
122
+ "--type-body-sm-line-height",
123
+ "--type-h5",
124
+ "--type-h5-line-height"
125
+ ],
126
+ "props": {
127
+ "isOpen": {
128
+ "type": "boolean | undefined",
129
+ "required": false,
130
+ "origin": "own",
131
+ "description": "Whether the drawer is shown."
132
+ },
133
+ "onOpenChange": {
134
+ "type": "((isOpen: boolean) => void) | undefined",
135
+ "required": false,
136
+ "origin": "own",
137
+ "description": "Called with the next open state — `false` when the drawer asks to close."
138
+ },
139
+ "placement": {
140
+ "type": "DrawerPlacement | undefined",
141
+ "required": false,
142
+ "origin": "own",
143
+ "description": "Which edge it enters from. `start` and `end` follow writing direction, so\na right-hand drawer in English is a left-hand one in Arabic without a\nsecond variant.",
144
+ "values": [
145
+ "start",
146
+ "end",
147
+ "top",
148
+ "bottom"
149
+ ],
150
+ "default": "end"
151
+ },
152
+ "size": {
153
+ "type": "DrawerSize | undefined",
154
+ "required": false,
155
+ "origin": "own",
156
+ "values": [
157
+ "sm",
158
+ "md",
159
+ "lg"
160
+ ],
161
+ "default": "md"
162
+ },
163
+ "title": {
164
+ "type": "React.ReactNode",
165
+ "required": true,
166
+ "origin": "own",
167
+ "description": "Required: the dialog's accessible name, wired via `aria-labelledby`."
168
+ },
169
+ "description": {
170
+ "type": "React.ReactNode",
171
+ "required": false,
172
+ "origin": "own",
173
+ "description": "Supporting copy under the title."
174
+ },
175
+ "footer": {
176
+ "type": "React.ReactNode",
177
+ "required": false,
178
+ "origin": "own",
179
+ "description": "Action row, pinned to the bottom edge."
180
+ },
181
+ "showClose": {
182
+ "type": "boolean | undefined",
183
+ "required": false,
184
+ "origin": "own",
185
+ "default": true
186
+ },
187
+ "closeLabel": {
188
+ "type": "string | undefined",
189
+ "required": false,
190
+ "origin": "own",
191
+ "default": "Close drawer"
192
+ },
193
+ "children": {
194
+ "type": "React.ReactNode",
195
+ "required": false,
196
+ "origin": "own"
197
+ },
198
+ "className": {
199
+ "type": "string | undefined",
200
+ "required": false,
201
+ "origin": "own"
202
+ },
203
+ "isDismissable": {
204
+ "type": "boolean | undefined",
205
+ "required": false,
206
+ "origin": "aria",
207
+ "description": "Whether to close the modal when the user interacts outside it.",
208
+ "tags": {
209
+ "default": "false"
210
+ }
211
+ },
212
+ "isKeyboardDismissDisabled": {
213
+ "type": "boolean | undefined",
214
+ "required": false,
215
+ "origin": "aria",
216
+ "description": "Whether pressing the escape key to close the modal should be disabled.",
217
+ "tags": {
218
+ "default": "false"
219
+ }
220
+ },
221
+ "shouldCloseOnInteractOutside": {
222
+ "type": "((element: Element) => boolean) | undefined",
223
+ "required": false,
224
+ "origin": "aria",
225
+ "description": "When user interacts with the argument element outside of the overlay ref,\nreturn true if onClose should be called. This gives you a chance to filter\nout interaction with elements that should not dismiss the overlay.\nBy default, onClose will always be called on interaction outside the overlay ref."
226
+ }
227
+ },
228
+ "propCounts": {
229
+ "own": 11,
230
+ "aria": 3,
231
+ "dom": 0,
232
+ "other": 0
233
+ }
234
+ }
@@ -130,7 +130,7 @@
130
130
  "stylesheet": "src/styles/empty-state.css",
131
131
  "tokens": [
132
132
  "--font-family-sans",
133
- "--font-weight-medium",
133
+ "--font-weight-semibold",
134
134
  "--icon-error",
135
135
  "--icon-primary",
136
136
  "--icon-size-md",
@@ -0,0 +1,246 @@
1
+ {
2
+ "name": "FileUpload",
3
+ "source": "src/components/FileUpload.tsx",
4
+ "propsType": "FileUploadProps",
5
+ "description": "FileUpload — a drop target wrapped around a real `<input type=\"file\">`.\n\nDrawn in Figma as `File Upload` (1367:2333) — two sizes by five states. The\nmeasurements came from `Input` and `EmptyState` rather than being invented:\nthe border, radius and disabled treatment are Input's; the centred\nicon-over-text stack is EmptyState's. Figma draws the drop zone alone, the\nsame split `Input` makes against `Form Field`.\n\nTHE INPUT IS THE CONTROL. THE DROP ZONE IS DECORATION.\n\nThe usual build of this component is a `<div>` with drag handlers and a\nclick that calls `input.click()`. That version cannot be reached by keyboard,\nhas no accessible name, does not participate in a form, and does not work in\nany environment without a pointer — which includes switch access, voice\ncontrol and most screen-reader browse modes.\n\nHere the file input is a real, focusable, labelled control that is visually\nhidden but NOT `display: none` — it keeps its place in the tab order and its\nlabel. Drag-and-drop is layered on top as an enhancement, and every path it\noffers is also reachable without it. That ordering is the whole component.\n\nVALIDATION IS ADVISORY, NOT SECURITY. `accept` and `maxSize` are checked here\nso the user finds out immediately instead of after an upload. A server that\ntrusts either one is trusting a value the client chose.",
6
+ "import": "import { FileUpload } from 'ionbase-ui';",
7
+ "status": "stable",
8
+ "summary": "A drop target wrapped around a real file input, with client-side accept and size checks.",
9
+ "useWhen": [
10
+ "the user attaches one or more files to a form or a message",
11
+ "the constraints (types, size, count) should be stated before the upload is attempted rather than after"
12
+ ],
13
+ "useInstead": [
14
+ {
15
+ "when": "a single file is picked and no drop target or file list is wanted",
16
+ "use": "a plain <input type=\"file\">",
17
+ "why": "this component adds a drop zone and a removable list; without either it is a heavier way to render the same control"
18
+ },
19
+ {
20
+ "when": "upload progress needs to be shown",
21
+ "use": "ProgressBar",
22
+ "why": "FileUpload selects files; it does not transfer them, and deliberately owns no network state"
23
+ }
24
+ ],
25
+ "variants": {
26
+ "size": {
27
+ "sm": {
28
+ "use": "inside a dense form, or beside other fields"
29
+ },
30
+ "md": {
31
+ "use": "the default — a standalone attachment area"
32
+ }
33
+ }
34
+ },
35
+ "a11y": {
36
+ "guarantees": [
37
+ "the control is a real <input type=\"file\">, focusable and in the tab order — the drop zone is an enhancement layered on top, never the only way in",
38
+ "the zone is a <label> for that input, so clicking anywhere opens the picker without any script",
39
+ "the input is clipped to 1px rather than display:none, which would remove it from the tab order and the accessibility tree",
40
+ "the focus ring is drawn on the zone, where the user is looking, not on the clipped input",
41
+ "a polite live region announces the number of files held, because a drop changes nothing near the user's focus",
42
+ "dragging is signalled by a solid border as well as a colour, so it is not conveyed by colour alone (WCAG 1.4.1)",
43
+ "each remove button is a 24px target with a name that includes the file (WCAG 2.5.8)"
44
+ ],
45
+ "requires": [
46
+ "`label`, or an `aria-label` — an unnamed file input announces only as \"button\"",
47
+ "`hint` describing the accepted types and size limit, since `accept` itself is never announced"
48
+ ]
49
+ },
50
+ "antiPatterns": [
51
+ {
52
+ "dont": "treating `accept` or `maxSize` as validation",
53
+ "why": "both are client-side and advisory. A browser does not enforce `accept` on drop, and every platform picker offers an \"All files\" escape. The server must check again"
54
+ },
55
+ {
56
+ "dont": "rebuilding this as a div with onClick={() => inputRef.current.click()}",
57
+ "why": "that version has no accessible name, no tab stop, no form participation and no keyboard path — it is the usual build of this component and the usual defect"
58
+ },
59
+ {
60
+ "dont": "putting the file list inside the drop zone",
61
+ "why": "the zone is a label, so every row in it — including each remove button — would also open the file picker"
62
+ },
63
+ {
64
+ "dont": "using `onChange` as a delta",
65
+ "why": "it fires with the complete list after every add and every remove, never with what changed"
66
+ }
67
+ ],
68
+ "slots": {
69
+ "prompt": {
70
+ "expects": "the call to action inside the zone"
71
+ },
72
+ "hint": {
73
+ "expects": "the constraints in words — \"PNG or JPG, up to 5 MB\""
74
+ }
75
+ },
76
+ "stylesheet": "src/styles/file-upload.css",
77
+ "tokens": [
78
+ "--border-default",
79
+ "--border-disabled",
80
+ "--border-error",
81
+ "--border-focus",
82
+ "--border-strong",
83
+ "--border-width-default",
84
+ "--border-width-thick",
85
+ "--font-family-sans",
86
+ "--font-weight-medium",
87
+ "--icon-default",
88
+ "--icon-disabled",
89
+ "--icon-secondary",
90
+ "--icon-size-lg",
91
+ "--icon-size-md",
92
+ "--icon-size-sm",
93
+ "--ion-duration-base",
94
+ "--ion-ease-out",
95
+ "--ion-file-upload-gap",
96
+ "--ion-file-upload-icon-size",
97
+ "--ion-file-upload-padding",
98
+ "--radius-md",
99
+ "--radius-sm",
100
+ "--ring-focus",
101
+ "--spacing-12",
102
+ "--spacing-20",
103
+ "--spacing-24",
104
+ "--spacing-32",
105
+ "--spacing-6",
106
+ "--spacing-8",
107
+ "--surface-default",
108
+ "--surface-disabled",
109
+ "--surface-hover",
110
+ "--surface-primary-subtle",
111
+ "--surface-subtle",
112
+ "--text-default",
113
+ "--text-disabled",
114
+ "--text-tertiary",
115
+ "--type-body",
116
+ "--type-body-line-height",
117
+ "--type-body-sm",
118
+ "--type-body-sm-line-height"
119
+ ],
120
+ "props": {
121
+ "label": {
122
+ "type": "React.ReactNode",
123
+ "required": false,
124
+ "origin": "own",
125
+ "description": "Field label. Also the accessible name of the file input."
126
+ },
127
+ "description": {
128
+ "type": "React.ReactNode",
129
+ "required": false,
130
+ "origin": "own",
131
+ "description": "Helper text below the control."
132
+ },
133
+ "errorMessage": {
134
+ "type": "React.ReactNode",
135
+ "required": false,
136
+ "origin": "own",
137
+ "description": "Replaces the helper text when `isInvalid` is set."
138
+ },
139
+ "isInvalid": {
140
+ "type": "boolean | undefined",
141
+ "required": false,
142
+ "origin": "own"
143
+ },
144
+ "isDisabled": {
145
+ "type": "boolean | undefined",
146
+ "required": false,
147
+ "origin": "own"
148
+ },
149
+ "size": {
150
+ "type": "FileUploadSize | undefined",
151
+ "required": false,
152
+ "origin": "own",
153
+ "description": "Matches the Figma `Size` variant when drawn. Height of the drop target.",
154
+ "values": [
155
+ "sm",
156
+ "md"
157
+ ]
158
+ },
159
+ "accept": {
160
+ "type": "string | undefined",
161
+ "required": false,
162
+ "origin": "own",
163
+ "description": "Native `accept` — a comma-separated list of extensions or MIME types."
164
+ },
165
+ "multiple": {
166
+ "type": "boolean | undefined",
167
+ "required": false,
168
+ "origin": "own",
169
+ "description": "Allow more than one file."
170
+ },
171
+ "maxSize": {
172
+ "type": "number | undefined",
173
+ "required": false,
174
+ "origin": "own",
175
+ "description": "Reject anything larger, in bytes."
176
+ },
177
+ "maxFiles": {
178
+ "type": "number | undefined",
179
+ "required": false,
180
+ "origin": "own",
181
+ "description": "Reject once this many files are held. Only meaningful with `multiple`."
182
+ },
183
+ "files": {
184
+ "type": "readonly File[] | undefined",
185
+ "required": false,
186
+ "origin": "own",
187
+ "description": "The files held. Pass it to control the list; omit and the component keeps\nits own. A controlled list is the usual case, because the caller is the\nonly thing that knows which uploads have since succeeded or failed."
188
+ },
189
+ "onChange": {
190
+ "type": "((files: File[]) => void) | undefined",
191
+ "required": false,
192
+ "origin": "own",
193
+ "description": "Fires with the full list after every add or remove, never with a delta."
194
+ },
195
+ "onReject": {
196
+ "type": "((rejected: RejectedFile[]) => void) | undefined",
197
+ "required": false,
198
+ "origin": "own",
199
+ "description": "Fires with anything refused by `accept`, `maxSize` or `maxFiles`."
200
+ },
201
+ "prompt": {
202
+ "type": "React.ReactNode",
203
+ "required": false,
204
+ "origin": "own",
205
+ "description": "Call-to-action inside the drop target."
206
+ },
207
+ "hint": {
208
+ "type": "React.ReactNode",
209
+ "required": false,
210
+ "origin": "own",
211
+ "description": "Second line inside the drop target — the constraints, in words."
212
+ },
213
+ "removeLabel": {
214
+ "type": "((name: string) => string) | undefined",
215
+ "required": false,
216
+ "origin": "own",
217
+ "description": "Accessible label for each file's remove button. Receives the file name."
218
+ },
219
+ "className": {
220
+ "type": "string | undefined",
221
+ "required": false,
222
+ "origin": "own"
223
+ },
224
+ "wrapperClassName": {
225
+ "type": "string | undefined",
226
+ "required": false,
227
+ "origin": "own"
228
+ },
229
+ "id": {
230
+ "type": "string | undefined",
231
+ "required": false,
232
+ "origin": "own"
233
+ },
234
+ "name": {
235
+ "type": "string | undefined",
236
+ "required": false,
237
+ "origin": "own"
238
+ }
239
+ },
240
+ "propCounts": {
241
+ "own": 20,
242
+ "aria": 0,
243
+ "dom": 0,
244
+ "other": 0
245
+ }
246
+ }
@@ -122,41 +122,11 @@
122
122
  "origin": "own",
123
123
  "description": "Spread onto the dial-code `<button>`. This is how a country picker gets\nattached — see the note on scope below."
124
124
  },
125
- "type": {
126
- "type": "(string & {}) | \"search\" | \"text\" | \"url\" | \"tel\" | \"email\" | \"password\" | undefined",
127
- "required": false,
128
- "origin": "aria",
129
- "description": "The type of input to render. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdeftype).",
130
- "tags": {
131
- "default": "'text'"
132
- },
133
- "default": "tel"
134
- },
135
- "disabled": {
136
- "type": "boolean | undefined",
137
- "required": false,
138
- "origin": "own",
139
- "tags": {
140
- "deprecated": "Use `isDisabled`. Accepted as an alias for one minor version."
141
- }
142
- },
143
- "form": {
144
- "type": "string | undefined",
145
- "required": false,
146
- "origin": "aria",
147
- "description": "The `<form>` element to associate the input with.\nThe value of this attribute must be the id of a `<form>` in the same document.\nSee [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#form)."
148
- },
149
- "name": {
150
- "type": "string | undefined",
151
- "required": false,
152
- "origin": "aria",
153
- "description": "The name of the input element, used when submitting an HTML form. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefname)."
154
- },
155
- "value": {
156
- "type": "string | undefined",
125
+ "onChange": {
126
+ "type": "((value: string) => void) | undefined",
157
127
  "required": false,
158
128
  "origin": "aria",
159
- "description": "The current value (controlled)."
129
+ "description": "Handler that is called when the value changes."
160
130
  },
161
131
  "defaultValue": {
162
132
  "type": "string | undefined",
@@ -347,12 +317,6 @@
347
317
  "origin": "aria",
348
318
  "description": "Handler that is called when the element loses focus."
349
319
  },
350
- "onChange": {
351
- "type": "((value: string) => void) | undefined",
352
- "required": false,
353
- "origin": "aria",
354
- "description": "Handler that is called when the value changes."
355
- },
356
320
  "onBeforeInput": {
357
321
  "type": "FormEventHandler<HTMLInputElement> | undefined",
358
322
  "required": false,
@@ -383,6 +347,42 @@
383
347
  "origin": "aria",
384
348
  "description": "Handler that is called when text in the input is selected. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/API/Element/select_event)."
385
349
  },
350
+ "type": {
351
+ "type": "(string & {}) | \"search\" | \"text\" | \"url\" | \"tel\" | \"email\" | \"password\" | undefined",
352
+ "required": false,
353
+ "origin": "aria",
354
+ "description": "The type of input to render. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdeftype).",
355
+ "tags": {
356
+ "default": "'text'"
357
+ },
358
+ "default": "tel"
359
+ },
360
+ "disabled": {
361
+ "type": "boolean | undefined",
362
+ "required": false,
363
+ "origin": "own",
364
+ "tags": {
365
+ "deprecated": "Use `isDisabled`. Accepted as an alias for one minor version."
366
+ }
367
+ },
368
+ "form": {
369
+ "type": "string | undefined",
370
+ "required": false,
371
+ "origin": "aria",
372
+ "description": "The `<form>` element to associate the input with.\nThe value of this attribute must be the id of a `<form>` in the same document.\nSee [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#form)."
373
+ },
374
+ "name": {
375
+ "type": "string | undefined",
376
+ "required": false,
377
+ "origin": "aria",
378
+ "description": "The name of the input element, used when submitting an HTML form. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefname)."
379
+ },
380
+ "value": {
381
+ "type": "string | undefined",
382
+ "required": false,
383
+ "origin": "aria",
384
+ "description": "The current value (controlled)."
385
+ },
386
386
  "size": {
387
387
  "type": "InputSize | undefined",
388
388
  "required": false,
@@ -157,10 +157,10 @@
157
157
  "origin": "own",
158
158
  "description": "Matches the Figma `Placement` variant, and names where the POPOVER sits —\nnot where the arrow points. A preference, not a guarantee: it flips when\nthere is no room, and the arrow follows.",
159
159
  "values": [
160
- "right",
161
- "left",
162
160
  "top",
163
- "bottom"
161
+ "bottom",
162
+ "right",
163
+ "left"
164
164
  ]
165
165
  },
166
166
  "size": {