ionbase-ui 0.84.0 → 0.86.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.
- package/dist/components/Checkbox.d.ts +39 -0
- package/dist/components/Checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox.js +77 -4
- package/dist/components/Checkbox.js.map +1 -1
- package/dist/components/Fieldset.d.ts +62 -0
- package/dist/components/Fieldset.d.ts.map +1 -0
- package/dist/components/Fieldset.js +58 -0
- package/dist/components/Fieldset.js.map +1 -0
- package/dist/components/Radio.d.ts +14 -0
- package/dist/components/Radio.d.ts.map +1 -1
- package/dist/components/Radio.js +15 -4
- package/dist/components/Radio.js.map +1 -1
- package/dist/components/SearchField.d.ts +36 -0
- package/dist/components/SearchField.d.ts.map +1 -0
- package/dist/components/SearchField.js +76 -0
- package/dist/components/SearchField.js.map +1 -0
- package/dist/components/index.d.ts +6 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +3 -1
- package/dist/components/index.js.map +1 -1
- package/dist/figma-descriptions.json +87 -77
- package/dist/figma-map.json +132 -3
- package/dist/meta/Checkbox.json +8 -6
- package/dist/meta/CheckboxGroup.json +268 -0
- package/dist/meta/Divider.json +2 -2
- package/dist/meta/Fieldset.json +162 -0
- package/dist/meta/Radio.json +0 -1
- package/dist/meta/RadioGroup.json +59 -7
- package/dist/meta/SearchField.json +487 -0
- package/dist/meta/Stepper.json +2 -2
- package/dist/meta/Tabs.json +3 -3
- package/dist/meta/components.json +1015 -45
- package/dist/meta/contrast.json +370 -74
- package/dist/meta/index.json +59 -8
- package/dist/meta/patterns/DataTable.json +14 -6
- package/dist/meta/patterns/Form.json +27 -2
- package/dist/meta/patterns/index.json +4 -2
- package/dist/styles/fieldset.css +65 -0
- package/dist/styles/index.css +2 -0
- package/dist/styles/radio.css +0 -20
- package/dist/styles/search-field.css +70 -0
- package/llms.txt +2 -2
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "ionbase-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.86.0",
|
|
4
4
|
"generated": "by scripts/build-meta.mjs — do not edit; intent lives in meta/*.json",
|
|
5
5
|
"hooks": [
|
|
6
6
|
"useAgentRun",
|
|
@@ -3080,8 +3080,7 @@
|
|
|
3080
3080
|
"summary": "A native checkbox with the system's styling, supporting an indeterminate state.",
|
|
3081
3081
|
"useWhen": [
|
|
3082
3082
|
"a single on/off choice inside a form that is submitted",
|
|
3083
|
-
"selecting rows in a Table"
|
|
3084
|
-
"several independent options where more than one may be picked"
|
|
3083
|
+
"selecting rows in a Table"
|
|
3085
3084
|
],
|
|
3086
3085
|
"useInstead": [
|
|
3087
3086
|
{
|
|
@@ -3089,6 +3088,11 @@
|
|
|
3089
3088
|
"use": "Toggle",
|
|
3090
3089
|
"why": "a switch reads as a setting taking effect now; a checkbox reads as a value being collected"
|
|
3091
3090
|
},
|
|
3091
|
+
{
|
|
3092
|
+
"when": "several options answer one question",
|
|
3093
|
+
"use": "CheckboxGroup",
|
|
3094
|
+
"why": "it announces the question with each option, carries the group's error, and can require at least one"
|
|
3095
|
+
},
|
|
3092
3096
|
{
|
|
3093
3097
|
"when": "the options are mutually exclusive",
|
|
3094
3098
|
"use": "RadioGroup"
|
|
@@ -3220,8 +3224,7 @@
|
|
|
3220
3224
|
"sm",
|
|
3221
3225
|
"md",
|
|
3222
3226
|
"lg"
|
|
3223
|
-
]
|
|
3224
|
-
"default": "md"
|
|
3227
|
+
]
|
|
3225
3228
|
},
|
|
3226
3229
|
"intent": {
|
|
3227
3230
|
"type": "CheckboxIntent | undefined",
|
|
@@ -3232,8 +3235,7 @@
|
|
|
3232
3235
|
"neutral",
|
|
3233
3236
|
"danger",
|
|
3234
3237
|
"brand"
|
|
3235
|
-
]
|
|
3236
|
-
"default": "brand"
|
|
3238
|
+
]
|
|
3237
3239
|
},
|
|
3238
3240
|
"isIndeterminate": {
|
|
3239
3241
|
"type": "boolean | undefined",
|
|
@@ -3282,6 +3284,274 @@
|
|
|
3282
3284
|
"other": 0
|
|
3283
3285
|
}
|
|
3284
3286
|
},
|
|
3287
|
+
"CheckboxGroup": {
|
|
3288
|
+
"name": "CheckboxGroup",
|
|
3289
|
+
"source": "src/components/Checkbox.tsx",
|
|
3290
|
+
"propsType": "CheckboxGroupProps",
|
|
3291
|
+
"description": "A set of checkboxes that answers one question — \"notify me when…\", \"which\nregions\". Owns the selected values, the group's label, help text and error,\nand \"select at least one\".\n\nA row of loose Checkboxes can do none of that accessibly: the question is\nnot announced with the options, an error has nothing to attach to, and\n\"at least one\" has no native expression at all. See the `required` note in\nCheckbox for how that last one is done.",
|
|
3292
|
+
"import": "import { CheckboxGroup } from 'ionbase-ui';",
|
|
3293
|
+
"status": "stable",
|
|
3294
|
+
"summary": "A set of checkboxes answering one question. Owns the selected values, the group's label, help and error, and \"select at least one\".",
|
|
3295
|
+
"useWhen": [
|
|
3296
|
+
"several options may be picked and they answer one question — \"notify me when\", \"regions\", \"columns to show\"",
|
|
3297
|
+
"the group needs a rule of its own — at least one, or an error that belongs to the set rather than to an option"
|
|
3298
|
+
],
|
|
3299
|
+
"useInstead": [
|
|
3300
|
+
{
|
|
3301
|
+
"when": "only one option may be picked",
|
|
3302
|
+
"use": "RadioGroup"
|
|
3303
|
+
},
|
|
3304
|
+
{
|
|
3305
|
+
"when": "the options are many, or space is tight",
|
|
3306
|
+
"use": "Select",
|
|
3307
|
+
"why": "past about seven options a list of boxes is longer than the form around it"
|
|
3308
|
+
},
|
|
3309
|
+
{
|
|
3310
|
+
"when": "there is one on/off choice",
|
|
3311
|
+
"use": "Checkbox",
|
|
3312
|
+
"why": "a group of one announces a question and then its only answer"
|
|
3313
|
+
},
|
|
3314
|
+
{
|
|
3315
|
+
"when": "each option takes effect immediately",
|
|
3316
|
+
"use": "Toggle"
|
|
3317
|
+
}
|
|
3318
|
+
],
|
|
3319
|
+
"composition": {
|
|
3320
|
+
"order": [
|
|
3321
|
+
"CheckboxGroup",
|
|
3322
|
+
"Checkbox"
|
|
3323
|
+
],
|
|
3324
|
+
"note": "Give every Checkbox a `value`; the group's `onChange` receives the array of ticked values. Selection lives on the group — do not also set `isSelected` on the boxes.",
|
|
3325
|
+
"example": "<CheckboxGroup label=\"Notify the team when\" isRequired value={notifyOn} onChange={setNotifyOn} isInvalid={!!error} errorMessage={error}><Checkbox value=\"failed\">A run fails</Checkbox><Checkbox value=\"approval\">A run needs approval</Checkbox></CheckboxGroup>"
|
|
3326
|
+
},
|
|
3327
|
+
"variants": {
|
|
3328
|
+
"size": {
|
|
3329
|
+
"sm": {
|
|
3330
|
+
"use": "dense forms and filter panels"
|
|
3331
|
+
},
|
|
3332
|
+
"md": {
|
|
3333
|
+
"use": "the default"
|
|
3334
|
+
},
|
|
3335
|
+
"lg": {
|
|
3336
|
+
"use": "touch targets and prominent choices"
|
|
3337
|
+
}
|
|
3338
|
+
},
|
|
3339
|
+
"intent": {
|
|
3340
|
+
"brand": {
|
|
3341
|
+
"use": "the default"
|
|
3342
|
+
},
|
|
3343
|
+
"neutral": {
|
|
3344
|
+
"use": "facts rather than approvals — the columns shown, the filters applied"
|
|
3345
|
+
},
|
|
3346
|
+
"danger": {
|
|
3347
|
+
"use": "a set of destructive consents"
|
|
3348
|
+
}
|
|
3349
|
+
},
|
|
3350
|
+
"orientation": {
|
|
3351
|
+
"vertical": {
|
|
3352
|
+
"use": "the default, and always when a label runs past a few words"
|
|
3353
|
+
},
|
|
3354
|
+
"horizontal": {
|
|
3355
|
+
"use": "two to four one-word options — weekdays, regions. Wraps rather than overflows"
|
|
3356
|
+
}
|
|
3357
|
+
}
|
|
3358
|
+
},
|
|
3359
|
+
"slots": {
|
|
3360
|
+
"label": {
|
|
3361
|
+
"accepts": "text",
|
|
3362
|
+
"note": "renders as the <legend> — the question the options answer"
|
|
3363
|
+
},
|
|
3364
|
+
"description": {
|
|
3365
|
+
"accepts": "text",
|
|
3366
|
+
"note": "help beneath the options; replaced by `errorMessage` while `isInvalid` is set"
|
|
3367
|
+
},
|
|
3368
|
+
"errorMessage": {
|
|
3369
|
+
"accepts": "text",
|
|
3370
|
+
"note": "shown only while `isInvalid` is set"
|
|
3371
|
+
},
|
|
3372
|
+
"children": {
|
|
3373
|
+
"accepts": "Checkbox"
|
|
3374
|
+
}
|
|
3375
|
+
},
|
|
3376
|
+
"a11y": {
|
|
3377
|
+
"role": "group, from <fieldset> and <legend>",
|
|
3378
|
+
"guarantees": [
|
|
3379
|
+
"the legend is announced as the group's name when focus enters any box",
|
|
3380
|
+
"the description or error is on every box's `aria-describedby` as well as the fieldset's, so it is read on the box that takes focus",
|
|
3381
|
+
"`isInvalid` sets `aria-invalid` on every box",
|
|
3382
|
+
"`isRequired` sets native `required` on every box while none is ticked and on none once one is: the browser blocks the submit in its own language, and each box announces \"required\" exactly while the rule is unmet",
|
|
3383
|
+
"`isDisabled` cascades to every Checkbox that has not set its own"
|
|
3384
|
+
],
|
|
3385
|
+
"requires": [
|
|
3386
|
+
"`label`, or `aria-label` when the question is already visible elsewhere",
|
|
3387
|
+
"a `value` on every Checkbox — the group tracks the selection by it"
|
|
3388
|
+
]
|
|
3389
|
+
},
|
|
3390
|
+
"antiPatterns": [
|
|
3391
|
+
{
|
|
3392
|
+
"dont": "loose Checkboxes under a text label",
|
|
3393
|
+
"why": "the question is not announced with the options, an error has nothing to attach to, and \"at least one\" cannot be expressed"
|
|
3394
|
+
},
|
|
3395
|
+
{
|
|
3396
|
+
"dont": "`isSelected` or `checked` on a Checkbox inside a group",
|
|
3397
|
+
"why": "the group owns the selection; the box's own value is ignored"
|
|
3398
|
+
},
|
|
3399
|
+
{
|
|
3400
|
+
"dont": "`isRequired` on every Checkbox in the group",
|
|
3401
|
+
"why": "that means every box must be ticked; `isRequired` on the group means at least one"
|
|
3402
|
+
}
|
|
3403
|
+
],
|
|
3404
|
+
"stylesheet": "src/styles/checkbox.css",
|
|
3405
|
+
"tokens": [
|
|
3406
|
+
"--border-disabled",
|
|
3407
|
+
"--border-error-strong",
|
|
3408
|
+
"--border-focus",
|
|
3409
|
+
"--border-inverse",
|
|
3410
|
+
"--border-primary-strong",
|
|
3411
|
+
"--border-stronger",
|
|
3412
|
+
"--border-width-default",
|
|
3413
|
+
"--border-width-thick",
|
|
3414
|
+
"--font-family-sans",
|
|
3415
|
+
"--icon-disabled",
|
|
3416
|
+
"--icon-on-color",
|
|
3417
|
+
"--ion-checkbox-border",
|
|
3418
|
+
"--ion-checkbox-fill",
|
|
3419
|
+
"--ion-checkbox-font-size",
|
|
3420
|
+
"--ion-checkbox-gap",
|
|
3421
|
+
"--ion-checkbox-line-height",
|
|
3422
|
+
"--ion-checkbox-mark",
|
|
3423
|
+
"--ion-checkbox-radius",
|
|
3424
|
+
"--ion-checkbox-raised",
|
|
3425
|
+
"--ion-checkbox-size",
|
|
3426
|
+
"--ion-duration-base",
|
|
3427
|
+
"--ion-ease-out",
|
|
3428
|
+
"--ion-shadow-raised-flush-lg",
|
|
3429
|
+
"--ion-shadow-raised-flush-sm",
|
|
3430
|
+
"--ion-shadow-raised-flush-xs",
|
|
3431
|
+
"--radius-sm",
|
|
3432
|
+
"--radius-xs",
|
|
3433
|
+
"--spacing-12",
|
|
3434
|
+
"--spacing-16",
|
|
3435
|
+
"--spacing-20",
|
|
3436
|
+
"--spacing-24",
|
|
3437
|
+
"--spacing-4",
|
|
3438
|
+
"--spacing-8",
|
|
3439
|
+
"--surface-default",
|
|
3440
|
+
"--surface-disabled",
|
|
3441
|
+
"--surface-error",
|
|
3442
|
+
"--surface-inverse",
|
|
3443
|
+
"--surface-primary",
|
|
3444
|
+
"--text-disabled",
|
|
3445
|
+
"--text-secondary",
|
|
3446
|
+
"--type-body",
|
|
3447
|
+
"--type-body-line-height",
|
|
3448
|
+
"--type-body-sm",
|
|
3449
|
+
"--type-body-sm-line-height"
|
|
3450
|
+
],
|
|
3451
|
+
"props": {
|
|
3452
|
+
"label": {
|
|
3453
|
+
"type": "React.ReactNode",
|
|
3454
|
+
"required": false,
|
|
3455
|
+
"origin": "own",
|
|
3456
|
+
"description": "The question the options answer. Renders as the `<legend>`."
|
|
3457
|
+
},
|
|
3458
|
+
"description": {
|
|
3459
|
+
"type": "React.ReactNode",
|
|
3460
|
+
"required": false,
|
|
3461
|
+
"origin": "own",
|
|
3462
|
+
"description": "Help text beneath the options. Replaced by `errorMessage` while invalid."
|
|
3463
|
+
},
|
|
3464
|
+
"errorMessage": {
|
|
3465
|
+
"type": "React.ReactNode",
|
|
3466
|
+
"required": false,
|
|
3467
|
+
"origin": "own",
|
|
3468
|
+
"description": "Shown in the description's place while `isInvalid` is set."
|
|
3469
|
+
},
|
|
3470
|
+
"isInvalid": {
|
|
3471
|
+
"type": "boolean | undefined",
|
|
3472
|
+
"required": false,
|
|
3473
|
+
"origin": "own",
|
|
3474
|
+
"description": "Marks every box invalid and shows `errorMessage`."
|
|
3475
|
+
},
|
|
3476
|
+
"isRequired": {
|
|
3477
|
+
"type": "boolean | undefined",
|
|
3478
|
+
"required": false,
|
|
3479
|
+
"origin": "own",
|
|
3480
|
+
"description": "At least one option must be selected — enforced by native validation."
|
|
3481
|
+
},
|
|
3482
|
+
"value": {
|
|
3483
|
+
"type": "readonly string[] | undefined",
|
|
3484
|
+
"required": false,
|
|
3485
|
+
"origin": "own",
|
|
3486
|
+
"description": "The selected values (controlled)."
|
|
3487
|
+
},
|
|
3488
|
+
"defaultValue": {
|
|
3489
|
+
"type": "readonly string[] | undefined",
|
|
3490
|
+
"required": false,
|
|
3491
|
+
"origin": "own",
|
|
3492
|
+
"description": "The initially selected values (uncontrolled)."
|
|
3493
|
+
},
|
|
3494
|
+
"onChange": {
|
|
3495
|
+
"type": "((value: string[]) => void) | undefined",
|
|
3496
|
+
"required": false,
|
|
3497
|
+
"origin": "own",
|
|
3498
|
+
"description": "Receives the whole new selection, in the order the options were ticked."
|
|
3499
|
+
},
|
|
3500
|
+
"name": {
|
|
3501
|
+
"type": "string | undefined",
|
|
3502
|
+
"required": false,
|
|
3503
|
+
"origin": "own",
|
|
3504
|
+
"description": "Shared input name, so a form submits every ticked value under it."
|
|
3505
|
+
},
|
|
3506
|
+
"size": {
|
|
3507
|
+
"type": "CheckboxSize | undefined",
|
|
3508
|
+
"required": false,
|
|
3509
|
+
"origin": "own",
|
|
3510
|
+
"values": [
|
|
3511
|
+
"sm",
|
|
3512
|
+
"md",
|
|
3513
|
+
"lg"
|
|
3514
|
+
]
|
|
3515
|
+
},
|
|
3516
|
+
"intent": {
|
|
3517
|
+
"type": "CheckboxIntent | undefined",
|
|
3518
|
+
"required": false,
|
|
3519
|
+
"origin": "own",
|
|
3520
|
+
"values": [
|
|
3521
|
+
"neutral",
|
|
3522
|
+
"danger",
|
|
3523
|
+
"brand"
|
|
3524
|
+
]
|
|
3525
|
+
},
|
|
3526
|
+
"isDisabled": {
|
|
3527
|
+
"type": "boolean | undefined",
|
|
3528
|
+
"required": false,
|
|
3529
|
+
"origin": "own",
|
|
3530
|
+
"description": "Whether every checkbox in the group is disabled."
|
|
3531
|
+
},
|
|
3532
|
+
"orientation": {
|
|
3533
|
+
"type": "FieldsetOrientation | undefined",
|
|
3534
|
+
"required": false,
|
|
3535
|
+
"origin": "own",
|
|
3536
|
+
"values": [
|
|
3537
|
+
"vertical",
|
|
3538
|
+
"horizontal"
|
|
3539
|
+
]
|
|
3540
|
+
},
|
|
3541
|
+
"children": {
|
|
3542
|
+
"type": "React.ReactNode",
|
|
3543
|
+
"required": false,
|
|
3544
|
+
"origin": "own",
|
|
3545
|
+
"description": "Checkboxes, each with a `value`."
|
|
3546
|
+
}
|
|
3547
|
+
},
|
|
3548
|
+
"propCounts": {
|
|
3549
|
+
"own": 14,
|
|
3550
|
+
"aria": 0,
|
|
3551
|
+
"dom": 276,
|
|
3552
|
+
"other": 0
|
|
3553
|
+
}
|
|
3554
|
+
},
|
|
3285
3555
|
"Citation": {
|
|
3286
3556
|
"name": "Citation",
|
|
3287
3557
|
"source": "src/components/Citation.tsx",
|
|
@@ -4736,8 +5006,8 @@
|
|
|
4736
5006
|
"origin": "own",
|
|
4737
5007
|
"description": "Matches Figma's `Style` variant.",
|
|
4738
5008
|
"values": [
|
|
4739
|
-
"
|
|
4740
|
-
"
|
|
5009
|
+
"vertical",
|
|
5010
|
+
"horizontal"
|
|
4741
5011
|
]
|
|
4742
5012
|
}
|
|
4743
5013
|
},
|
|
@@ -5219,43 +5489,205 @@
|
|
|
5219
5489
|
"other": 0
|
|
5220
5490
|
}
|
|
5221
5491
|
},
|
|
5222
|
-
"
|
|
5223
|
-
"name": "
|
|
5224
|
-
"source": "src/components/
|
|
5225
|
-
"propsType": "
|
|
5226
|
-
"description": "
|
|
5227
|
-
"import": "import {
|
|
5492
|
+
"Fieldset": {
|
|
5493
|
+
"name": "Fieldset",
|
|
5494
|
+
"source": "src/components/Fieldset.tsx",
|
|
5495
|
+
"propsType": "FieldsetProps",
|
|
5496
|
+
"description": "Groups related fields under one label, with one description and one error —\nan address, a date range typed as two fields, a set of limits.\n\nFor checkboxes use CheckboxGroup and for radios RadioGroup: both render this\nsame shell, and add the selection state it deliberately does not own.\n\nThere is no `isDisabled`. A native `disabled` fieldset does disable every\ncontrol inside, but Input, Select and the rest draw their disabled state from\ntheir own prop, so the fields would stop working while still looking live.\nDisable the fields themselves; the choice groups can cascade because their\ncheckboxes and radios style off `:disabled`.",
|
|
5497
|
+
"import": "import { Fieldset } from 'ionbase-ui';",
|
|
5228
5498
|
"status": "stable",
|
|
5229
|
-
"summary": "A
|
|
5499
|
+
"summary": "A <fieldset>/<legend> that groups related fields under one label, one description and one error — an address, a pair of limits, a date typed as two fields.",
|
|
5230
5500
|
"useWhen": [
|
|
5231
|
-
"
|
|
5232
|
-
"the
|
|
5501
|
+
"several fields answer one question and a reader must hear the question with each of them — street, city and postcode under \"Billing address\"",
|
|
5502
|
+
"one error belongs to the group rather than to a field — \"the minimum must be below the maximum\""
|
|
5233
5503
|
],
|
|
5234
5504
|
"useInstead": [
|
|
5235
5505
|
{
|
|
5236
|
-
"when": "
|
|
5237
|
-
"use": "
|
|
5238
|
-
"why": "
|
|
5506
|
+
"when": "the fields are checkboxes",
|
|
5507
|
+
"use": "CheckboxGroup",
|
|
5508
|
+
"why": "it renders this same shell and adds the selected values and \"select at least one\""
|
|
5239
5509
|
},
|
|
5240
5510
|
{
|
|
5241
|
-
"when": "
|
|
5242
|
-
"use": "
|
|
5243
|
-
"why": "
|
|
5511
|
+
"when": "the fields are radios",
|
|
5512
|
+
"use": "RadioGroup",
|
|
5513
|
+
"why": "it renders this same shell and adds the shared name and the selected value"
|
|
5514
|
+
},
|
|
5515
|
+
{
|
|
5516
|
+
"when": "a single field needs a label and help text",
|
|
5517
|
+
"use": "Input",
|
|
5518
|
+
"why": "every field already renders its own label, description and error; a fieldset around one field announces the label twice"
|
|
5519
|
+
},
|
|
5520
|
+
{
|
|
5521
|
+
"when": "the grouping is visual — a titled section of a settings page",
|
|
5522
|
+
"use": "Card",
|
|
5523
|
+
"why": "a fieldset is a form grouping that assistive technology announces on entry; a section of unrelated settings is not one question"
|
|
5244
5524
|
}
|
|
5245
5525
|
],
|
|
5526
|
+
"composition": {
|
|
5527
|
+
"order": [
|
|
5528
|
+
"Fieldset",
|
|
5529
|
+
"Input"
|
|
5530
|
+
],
|
|
5531
|
+
"note": "Each field keeps its own label — the legend names the group, not the fields. Put a group-level error in `errorMessage` with `isInvalid`, and keep field-level errors on the fields.",
|
|
5532
|
+
"example": "<Fieldset label=\"Run limits\" description=\"Runs stop at whichever comes first.\" orientation=\"horizontal\"><NumberInput label=\"Max steps\" /><NumberInput label=\"Max minutes\" /></Fieldset>"
|
|
5533
|
+
},
|
|
5246
5534
|
"variants": {
|
|
5247
|
-
"
|
|
5248
|
-
"
|
|
5249
|
-
"use": "
|
|
5535
|
+
"orientation": {
|
|
5536
|
+
"vertical": {
|
|
5537
|
+
"use": "the default — fields stacked, as a form reads"
|
|
5250
5538
|
},
|
|
5251
|
-
"
|
|
5252
|
-
"use": "
|
|
5539
|
+
"horizontal": {
|
|
5540
|
+
"use": "two or three short fields that read as one value — a range, a size, a city and postcode. Wraps rather than overflows"
|
|
5253
5541
|
}
|
|
5254
5542
|
}
|
|
5255
5543
|
},
|
|
5256
|
-
"
|
|
5257
|
-
"
|
|
5258
|
-
"
|
|
5544
|
+
"slots": {
|
|
5545
|
+
"label": {
|
|
5546
|
+
"accepts": "text",
|
|
5547
|
+
"note": "renders as the <legend> — the question the fields answer"
|
|
5548
|
+
},
|
|
5549
|
+
"description": {
|
|
5550
|
+
"accepts": "text",
|
|
5551
|
+
"note": "help beneath the fields; replaced by `errorMessage` while `isInvalid` is set, as Input's is"
|
|
5552
|
+
},
|
|
5553
|
+
"errorMessage": {
|
|
5554
|
+
"accepts": "text",
|
|
5555
|
+
"note": "the group's error, shown only while `isInvalid` is set"
|
|
5556
|
+
},
|
|
5557
|
+
"children": {
|
|
5558
|
+
"accepts": "Input, Select, NumberInput, DatePicker and other fields"
|
|
5559
|
+
}
|
|
5560
|
+
},
|
|
5561
|
+
"a11y": {
|
|
5562
|
+
"role": "group, from <fieldset> and <legend>",
|
|
5563
|
+
"guarantees": [
|
|
5564
|
+
"the legend is announced as the group's name when focus enters any field inside",
|
|
5565
|
+
"`aria-describedby` on the fieldset points at whichever of the description or the error is showing"
|
|
5566
|
+
],
|
|
5567
|
+
"requires": [
|
|
5568
|
+
"`label`, or `aria-label` when the question is already visible as a heading"
|
|
5569
|
+
],
|
|
5570
|
+
"notes": [
|
|
5571
|
+
"There is no `isDisabled`. A native disabled fieldset disables every control inside, but Input, Select and the rest draw their disabled look from their own prop — the fields would stop working while still looking live. Disable the fields themselves."
|
|
5572
|
+
]
|
|
5573
|
+
},
|
|
5574
|
+
"antiPatterns": [
|
|
5575
|
+
{
|
|
5576
|
+
"dont": "a Fieldset around one field",
|
|
5577
|
+
"why": "the field's label and the legend both announce, saying the same thing twice"
|
|
5578
|
+
},
|
|
5579
|
+
{
|
|
5580
|
+
"dont": "a Fieldset of Checkboxes",
|
|
5581
|
+
"do": "<CheckboxGroup label=\"Notify me when\">…</CheckboxGroup>",
|
|
5582
|
+
"why": "it looks the same, but nothing owns the selected values or \"select at least one\""
|
|
5583
|
+
},
|
|
5584
|
+
{
|
|
5585
|
+
"dont": "<fieldset disabled> around Inputs",
|
|
5586
|
+
"why": "the fields stop accepting input while still drawn as enabled"
|
|
5587
|
+
}
|
|
5588
|
+
],
|
|
5589
|
+
"stylesheet": "src/styles/fieldset.css",
|
|
5590
|
+
"tokens": [
|
|
5591
|
+
"--font-family-sans",
|
|
5592
|
+
"--font-weight-medium",
|
|
5593
|
+
"--font-weight-regular",
|
|
5594
|
+
"--ion-fieldset-gap",
|
|
5595
|
+
"--ion-fieldset-inline-gap",
|
|
5596
|
+
"--spacing-16",
|
|
5597
|
+
"--spacing-6",
|
|
5598
|
+
"--spacing-8",
|
|
5599
|
+
"--text-error",
|
|
5600
|
+
"--text-secondary",
|
|
5601
|
+
"--text-tertiary",
|
|
5602
|
+
"--type-body-sm",
|
|
5603
|
+
"--type-body-sm-line-height"
|
|
5604
|
+
],
|
|
5605
|
+
"props": {
|
|
5606
|
+
"label": {
|
|
5607
|
+
"type": "React.ReactNode",
|
|
5608
|
+
"required": false,
|
|
5609
|
+
"origin": "own",
|
|
5610
|
+
"description": "The question the fields answer. Renders as the `<legend>`."
|
|
5611
|
+
},
|
|
5612
|
+
"description": {
|
|
5613
|
+
"type": "React.ReactNode",
|
|
5614
|
+
"required": false,
|
|
5615
|
+
"origin": "own",
|
|
5616
|
+
"description": "Help text beneath the fields. Replaced by `errorMessage` while invalid."
|
|
5617
|
+
},
|
|
5618
|
+
"errorMessage": {
|
|
5619
|
+
"type": "React.ReactNode",
|
|
5620
|
+
"required": false,
|
|
5621
|
+
"origin": "own",
|
|
5622
|
+
"description": "Shown in the description's place while `isInvalid` is set."
|
|
5623
|
+
},
|
|
5624
|
+
"isInvalid": {
|
|
5625
|
+
"type": "boolean | undefined",
|
|
5626
|
+
"required": false,
|
|
5627
|
+
"origin": "own",
|
|
5628
|
+
"description": "Whether the group as a whole fails validation."
|
|
5629
|
+
},
|
|
5630
|
+
"orientation": {
|
|
5631
|
+
"type": "FieldsetOrientation | undefined",
|
|
5632
|
+
"required": false,
|
|
5633
|
+
"origin": "own",
|
|
5634
|
+
"description": "How the fields flow. Horizontal wraps rather than overflowing.",
|
|
5635
|
+
"values": [
|
|
5636
|
+
"vertical",
|
|
5637
|
+
"horizontal"
|
|
5638
|
+
],
|
|
5639
|
+
"default": "vertical"
|
|
5640
|
+
},
|
|
5641
|
+
"children": {
|
|
5642
|
+
"type": "React.ReactNode",
|
|
5643
|
+
"required": false,
|
|
5644
|
+
"origin": "own"
|
|
5645
|
+
}
|
|
5646
|
+
},
|
|
5647
|
+
"propCounts": {
|
|
5648
|
+
"own": 6,
|
|
5649
|
+
"aria": 0,
|
|
5650
|
+
"dom": 279,
|
|
5651
|
+
"other": 0
|
|
5652
|
+
}
|
|
5653
|
+
},
|
|
5654
|
+
"FileUpload": {
|
|
5655
|
+
"name": "FileUpload",
|
|
5656
|
+
"source": "src/components/FileUpload.tsx",
|
|
5657
|
+
"propsType": "FileUploadProps",
|
|
5658
|
+
"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.",
|
|
5659
|
+
"import": "import { FileUpload } from 'ionbase-ui';",
|
|
5660
|
+
"status": "stable",
|
|
5661
|
+
"summary": "A drop target wrapped around a real file input, with client-side accept and size checks.",
|
|
5662
|
+
"useWhen": [
|
|
5663
|
+
"the user attaches one or more files to a form or a message",
|
|
5664
|
+
"the constraints (types, size, count) should be stated before the upload is attempted rather than after"
|
|
5665
|
+
],
|
|
5666
|
+
"useInstead": [
|
|
5667
|
+
{
|
|
5668
|
+
"when": "a single file is picked and no drop target or file list is wanted",
|
|
5669
|
+
"use": "a plain <input type=\"file\">",
|
|
5670
|
+
"why": "this component adds a drop zone and a removable list; without either it is a heavier way to render the same control"
|
|
5671
|
+
},
|
|
5672
|
+
{
|
|
5673
|
+
"when": "upload progress needs to be shown",
|
|
5674
|
+
"use": "ProgressBar",
|
|
5675
|
+
"why": "FileUpload selects files; it does not transfer them, and deliberately owns no network state"
|
|
5676
|
+
}
|
|
5677
|
+
],
|
|
5678
|
+
"variants": {
|
|
5679
|
+
"size": {
|
|
5680
|
+
"sm": {
|
|
5681
|
+
"use": "inside a dense form, or beside other fields"
|
|
5682
|
+
},
|
|
5683
|
+
"md": {
|
|
5684
|
+
"use": "the default — a standalone attachment area"
|
|
5685
|
+
}
|
|
5686
|
+
}
|
|
5687
|
+
},
|
|
5688
|
+
"a11y": {
|
|
5689
|
+
"guarantees": [
|
|
5690
|
+
"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",
|
|
5259
5691
|
"the zone is a <label> for that input, so clicking anywhere opens the picker without any script",
|
|
5260
5692
|
"the input is clipped to 1px rather than display:none, which would remove it from the tab order and the accessibility tree",
|
|
5261
5693
|
"the focus ring is drawn on the zone, where the user is looking, not on the clipped input",
|
|
@@ -10212,7 +10644,6 @@
|
|
|
10212
10644
|
"--border-width-default",
|
|
10213
10645
|
"--border-width-thick",
|
|
10214
10646
|
"--font-family-sans",
|
|
10215
|
-
"--font-weight-medium",
|
|
10216
10647
|
"--icon-disabled",
|
|
10217
10648
|
"--icon-on-color",
|
|
10218
10649
|
"--ion-duration-base",
|
|
@@ -10304,10 +10735,10 @@
|
|
|
10304
10735
|
"name": "RadioGroup",
|
|
10305
10736
|
"source": "src/components/Radio.tsx",
|
|
10306
10737
|
"propsType": "RadioGroupProps",
|
|
10307
|
-
"description": "Renders a `<fieldset>` with a `<legend>` rather than a div with\n`role=\"radiogroup\"`. Both are announced correctly, but a fieldset also groups\nthe inputs for form submission and native validation, which the ARIA version\ndoes not.",
|
|
10738
|
+
"description": "Renders a `<fieldset>` with a `<legend>` rather than a div with\n`role=\"radiogroup\"`. Both are announced correctly, but a fieldset also groups\nthe inputs for form submission and native validation, which the ARIA version\ndoes not.\n\nThe fieldset itself is Fieldset's shell, shared with CheckboxGroup, so the\ntwo choice groups take the same label, help, error and orientation props.",
|
|
10308
10739
|
"import": "import { RadioGroup } from 'ionbase-ui';",
|
|
10309
10740
|
"status": "stable",
|
|
10310
|
-
"summary": "A <fieldset>/<legend> group of mutually exclusive options. Owns the shared name and the selected value.",
|
|
10741
|
+
"summary": "A <fieldset>/<legend> group of mutually exclusive options. Owns the shared name and the selected value, and the group's label, help and error.",
|
|
10311
10742
|
"useWhen": [
|
|
10312
10743
|
"exactly one choice from a small set, all worth showing at once",
|
|
10313
10744
|
"the options need explaining — each one can carry its own label text"
|
|
@@ -10319,7 +10750,7 @@
|
|
|
10319
10750
|
},
|
|
10320
10751
|
{
|
|
10321
10752
|
"when": "more than one may be picked",
|
|
10322
|
-
"use": "
|
|
10753
|
+
"use": "CheckboxGroup"
|
|
10323
10754
|
},
|
|
10324
10755
|
{
|
|
10325
10756
|
"when": "there are exactly two states and the change is immediate",
|
|
@@ -10348,6 +10779,14 @@
|
|
|
10348
10779
|
"danger": {
|
|
10349
10780
|
"use": "a set where the options are destructive"
|
|
10350
10781
|
}
|
|
10782
|
+
},
|
|
10783
|
+
"orientation": {
|
|
10784
|
+
"vertical": {
|
|
10785
|
+
"use": "the default, and always when a label runs past a few words"
|
|
10786
|
+
},
|
|
10787
|
+
"horizontal": {
|
|
10788
|
+
"use": "two to four one-word options. Wraps rather than overflows"
|
|
10789
|
+
}
|
|
10351
10790
|
}
|
|
10352
10791
|
},
|
|
10353
10792
|
"slots": {
|
|
@@ -10355,6 +10794,14 @@
|
|
|
10355
10794
|
"accepts": "text",
|
|
10356
10795
|
"note": "renders as the <legend> — the question the options answer"
|
|
10357
10796
|
},
|
|
10797
|
+
"description": {
|
|
10798
|
+
"accepts": "text",
|
|
10799
|
+
"note": "help beneath the options; replaced by `errorMessage` while `isInvalid` is set"
|
|
10800
|
+
},
|
|
10801
|
+
"errorMessage": {
|
|
10802
|
+
"accepts": "text",
|
|
10803
|
+
"note": "shown only while `isInvalid` is set"
|
|
10804
|
+
},
|
|
10358
10805
|
"children": {
|
|
10359
10806
|
"accepts": "Radio"
|
|
10360
10807
|
}
|
|
@@ -10364,7 +10811,10 @@
|
|
|
10364
10811
|
"guarantees": [
|
|
10365
10812
|
"a real fieldset rather than `role=\"radiogroup\"`: both announce correctly, but the fieldset also groups the inputs for form submission and native validation",
|
|
10366
10813
|
"`name` is generated when omitted, so two groups on one page never collide",
|
|
10367
|
-
"`isDisabled` cascades to every Radio that has not set its own"
|
|
10814
|
+
"`isDisabled` cascades to every Radio that has not set its own",
|
|
10815
|
+
"the fieldset is Fieldset's shell, shared with CheckboxGroup — the same label, help, error and orientation props",
|
|
10816
|
+
"the description or error is on every radio's `aria-describedby` as well as the fieldset's, so it is read on the radio that takes focus",
|
|
10817
|
+
"`isRequired` is native `required` on the radios, which the platform already reads as \"one of this name\""
|
|
10368
10818
|
],
|
|
10369
10819
|
"requires": [
|
|
10370
10820
|
"`label`, or `aria-label` when the question is already visible elsewhere"
|
|
@@ -10401,7 +10851,6 @@
|
|
|
10401
10851
|
"--border-width-default",
|
|
10402
10852
|
"--border-width-thick",
|
|
10403
10853
|
"--font-family-sans",
|
|
10404
|
-
"--font-weight-medium",
|
|
10405
10854
|
"--icon-disabled",
|
|
10406
10855
|
"--icon-on-color",
|
|
10407
10856
|
"--ion-duration-base",
|
|
@@ -10461,7 +10910,41 @@
|
|
|
10461
10910
|
"label": {
|
|
10462
10911
|
"type": "React.ReactNode",
|
|
10463
10912
|
"required": false,
|
|
10464
|
-
"origin": "own"
|
|
10913
|
+
"origin": "own",
|
|
10914
|
+
"description": "The question the options answer. Renders as the `<legend>`."
|
|
10915
|
+
},
|
|
10916
|
+
"description": {
|
|
10917
|
+
"type": "React.ReactNode",
|
|
10918
|
+
"required": false,
|
|
10919
|
+
"origin": "own",
|
|
10920
|
+
"description": "Help text beneath the options. Replaced by `errorMessage` while invalid."
|
|
10921
|
+
},
|
|
10922
|
+
"errorMessage": {
|
|
10923
|
+
"type": "React.ReactNode",
|
|
10924
|
+
"required": false,
|
|
10925
|
+
"origin": "own",
|
|
10926
|
+
"description": "Shown in the description's place while `isInvalid` is set."
|
|
10927
|
+
},
|
|
10928
|
+
"isInvalid": {
|
|
10929
|
+
"type": "boolean | undefined",
|
|
10930
|
+
"required": false,
|
|
10931
|
+
"origin": "own",
|
|
10932
|
+
"description": "Shows `errorMessage` in the description's place."
|
|
10933
|
+
},
|
|
10934
|
+
"isRequired": {
|
|
10935
|
+
"type": "boolean | undefined",
|
|
10936
|
+
"required": false,
|
|
10937
|
+
"origin": "own",
|
|
10938
|
+
"description": "One option must be chosen before the form submits."
|
|
10939
|
+
},
|
|
10940
|
+
"orientation": {
|
|
10941
|
+
"type": "FieldsetOrientation | undefined",
|
|
10942
|
+
"required": false,
|
|
10943
|
+
"origin": "own",
|
|
10944
|
+
"values": [
|
|
10945
|
+
"vertical",
|
|
10946
|
+
"horizontal"
|
|
10947
|
+
]
|
|
10465
10948
|
},
|
|
10466
10949
|
"size": {
|
|
10467
10950
|
"type": "RadioSize | undefined",
|
|
@@ -10504,7 +10987,7 @@
|
|
|
10504
10987
|
}
|
|
10505
10988
|
},
|
|
10506
10989
|
"propCounts": {
|
|
10507
|
-
"own":
|
|
10990
|
+
"own": 15,
|
|
10508
10991
|
"aria": 0,
|
|
10509
10992
|
"dom": 276,
|
|
10510
10993
|
"other": 0
|
|
@@ -10649,6 +11132,493 @@
|
|
|
10649
11132
|
"other": 0
|
|
10650
11133
|
}
|
|
10651
11134
|
},
|
|
11135
|
+
"SearchField": {
|
|
11136
|
+
"name": "SearchField",
|
|
11137
|
+
"source": "src/components/SearchField.tsx",
|
|
11138
|
+
"propsType": "SearchFieldProps",
|
|
11139
|
+
"description": "SearchField — a text field for a search query.\n\nNOT `<Input type=\"search\">`. That gets the right input type and nothing\nelse. `useSearchField` adds what a search box owes its user:\n\n `role=\"searchbox\"`, so a screen reader announces a search field, not a\n text field. Enter calls `onSubmit` with the query. Escape clears it — a\n second Escape then reaches whatever the field sits in, so a search inside\n a dialog clears first and closes second. A clear button appears once there\n is something to clear, named in the user's language by React Aria.\n\nThe clear button is out of the tab order on purpose, as React Aria sets it:\nEscape is the keyboard's way to clear, and an extra tab stop in every search\nbox costs every keyboard user a keystroke. Pressing it puts focus back in the\nfield.\n\nThe box IS Input's — the component renders `.ion-input` and its size and\nstate classes, so a search field beside an Input in a toolbar matches it\nexactly and cannot drift. Same arrangement as NumberInput.",
|
|
11140
|
+
"import": "import { SearchField } from 'ionbase-ui';",
|
|
11141
|
+
"status": "stable",
|
|
11142
|
+
"summary": "A text field for a search query: role=\"searchbox\", Enter submits, Escape clears, and a clear button once there is something to clear. Input's box and sizes.",
|
|
11143
|
+
"useWhen": [
|
|
11144
|
+
"the user types to search or filter a list, a table or a page — the search above a DataTable, the filter at the top of a Sidebar",
|
|
11145
|
+
"the query is free text that narrows what is shown, not a value chosen from a list"
|
|
11146
|
+
],
|
|
11147
|
+
"useInstead": [
|
|
11148
|
+
{
|
|
11149
|
+
"when": "the typed text picks one value from a known list — an assignee, a country",
|
|
11150
|
+
"use": "Combobox",
|
|
11151
|
+
"why": "a combobox commits a choice and offers the options; a search field commits a query and offers nothing"
|
|
11152
|
+
},
|
|
11153
|
+
{
|
|
11154
|
+
"when": "the user is looking for a page or an action anywhere in the product",
|
|
11155
|
+
"use": "CommandPalette",
|
|
11156
|
+
"why": "that is global and keyboard-first; a SearchField searches the content in front of it"
|
|
11157
|
+
},
|
|
11158
|
+
{
|
|
11159
|
+
"when": "it is ordinary text entry — a name, an email — that happens to be used for lookup later",
|
|
11160
|
+
"use": "Input",
|
|
11161
|
+
"why": "announcing a searchbox promises search behaviour: Escape clears, Enter searches"
|
|
11162
|
+
}
|
|
11163
|
+
],
|
|
11164
|
+
"composition": {
|
|
11165
|
+
"order": [
|
|
11166
|
+
"SearchField"
|
|
11167
|
+
],
|
|
11168
|
+
"note": "Filter as the user types with `onChange`, or search on Enter with `onSubmit` — pick one per field and say which in the placeholder or label. In a table toolbar, give it `aria-label` naming what it searches.",
|
|
11169
|
+
"example": "<SearchField aria-label=\"Search agents\" placeholder=\"Search by name or purpose\" value={query} onChange={setQuery} />"
|
|
11170
|
+
},
|
|
11171
|
+
"variants": {
|
|
11172
|
+
"size": {
|
|
11173
|
+
"sm": {
|
|
11174
|
+
"use": "toolbars, table headers and Sidebar filters, beside small Buttons"
|
|
11175
|
+
},
|
|
11176
|
+
"md": {
|
|
11177
|
+
"use": "the default"
|
|
11178
|
+
},
|
|
11179
|
+
"lg": {
|
|
11180
|
+
"use": "a page whose main task is searching"
|
|
11181
|
+
}
|
|
11182
|
+
}
|
|
11183
|
+
},
|
|
11184
|
+
"a11y": {
|
|
11185
|
+
"role": "searchbox",
|
|
11186
|
+
"guarantees": [
|
|
11187
|
+
"the input is role=\"searchbox\" and type=\"search\", so it is announced as a search field",
|
|
11188
|
+
"Escape clears the query; a second Escape is left for whatever contains the field, so a search in a dialog clears before it closes",
|
|
11189
|
+
"Enter calls onSubmit with the query",
|
|
11190
|
+
"the clear button is named by React Aria in the user's language, appears only when there is something to clear, and returns focus to the field",
|
|
11191
|
+
"the clear button is out of the tab order on purpose: Escape is the keyboard's way to clear, and an extra tab stop in every search box costs every keyboard user a keystroke",
|
|
11192
|
+
"the browser's own cancel button is hidden, so there are never two"
|
|
11193
|
+
],
|
|
11194
|
+
"requires": [
|
|
11195
|
+
"`label`, or an `aria-label` naming what is searched when no visible label is rendered — \"Search\" alone does not say what"
|
|
11196
|
+
],
|
|
11197
|
+
"notes": [
|
|
11198
|
+
"When filtering as the user types, announce the result count with a polite live region near the results. The field cannot know how many results its query produced; the list does."
|
|
11199
|
+
]
|
|
11200
|
+
},
|
|
11201
|
+
"antiPatterns": [
|
|
11202
|
+
{
|
|
11203
|
+
"dont": "<Input type=\"search\"> with a magnifier as leadingIcon",
|
|
11204
|
+
"why": "it looks the same and has none of the behaviour: no searchbox role, no Escape to clear, no labelled clear button"
|
|
11205
|
+
},
|
|
11206
|
+
{
|
|
11207
|
+
"dont": "placeholder as the only name",
|
|
11208
|
+
"why": "a placeholder disappears once the user types, and is not a reliable accessible name. Pass `aria-label` or `label`"
|
|
11209
|
+
},
|
|
11210
|
+
{
|
|
11211
|
+
"dont": "a separate Search button beside a field that already filters as you type",
|
|
11212
|
+
"why": "it teaches the user that nothing happens until they press it, and it does nothing when they do"
|
|
11213
|
+
}
|
|
11214
|
+
],
|
|
11215
|
+
"stylesheet": "src/styles/search-field.css",
|
|
11216
|
+
"tokens": [
|
|
11217
|
+
"--border-focus",
|
|
11218
|
+
"--border-width-thick",
|
|
11219
|
+
"--icon-default",
|
|
11220
|
+
"--icon-secondary",
|
|
11221
|
+
"--ion-input-height",
|
|
11222
|
+
"--ion-input-icon-size",
|
|
11223
|
+
"--radius-sm",
|
|
11224
|
+
"--spacing-4",
|
|
11225
|
+
"--spacing-8",
|
|
11226
|
+
"--surface-default",
|
|
11227
|
+
"--surface-hover",
|
|
11228
|
+
"--surface-pressed"
|
|
11229
|
+
],
|
|
11230
|
+
"props": {
|
|
11231
|
+
"size": {
|
|
11232
|
+
"type": "SearchFieldSize | undefined",
|
|
11233
|
+
"required": false,
|
|
11234
|
+
"origin": "own",
|
|
11235
|
+
"description": "Input's sizes: Small, Medium, Large.",
|
|
11236
|
+
"values": [
|
|
11237
|
+
"sm",
|
|
11238
|
+
"md",
|
|
11239
|
+
"lg"
|
|
11240
|
+
],
|
|
11241
|
+
"default": "md"
|
|
11242
|
+
},
|
|
11243
|
+
"className": {
|
|
11244
|
+
"type": "string | undefined",
|
|
11245
|
+
"required": false,
|
|
11246
|
+
"origin": "own",
|
|
11247
|
+
"description": "Class names for the control box (`.ion-input`)."
|
|
11248
|
+
},
|
|
11249
|
+
"wrapperClassName": {
|
|
11250
|
+
"type": "string | undefined",
|
|
11251
|
+
"required": false,
|
|
11252
|
+
"origin": "own",
|
|
11253
|
+
"description": "Class names for the `.ion-field` wrapper when a label or helper is shown."
|
|
11254
|
+
},
|
|
11255
|
+
"enterKeyHint": {
|
|
11256
|
+
"type": "\"done\" | \"enter\" | \"go\" | \"next\" | \"previous\" | \"search\" | \"send\" | undefined",
|
|
11257
|
+
"required": false,
|
|
11258
|
+
"origin": "aria",
|
|
11259
|
+
"description": "An enumerated attribute that defines what action label or icon to preset for the enter key on\nvirtual keyboards. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/enterkeyhint).",
|
|
11260
|
+
"values": [
|
|
11261
|
+
"done",
|
|
11262
|
+
"enter",
|
|
11263
|
+
"go",
|
|
11264
|
+
"next",
|
|
11265
|
+
"previous",
|
|
11266
|
+
"search",
|
|
11267
|
+
"send"
|
|
11268
|
+
]
|
|
11269
|
+
},
|
|
11270
|
+
"type": {
|
|
11271
|
+
"type": "(string & {}) | \"search\" | \"text\" | \"url\" | \"tel\" | \"email\" | \"password\" | undefined",
|
|
11272
|
+
"required": false,
|
|
11273
|
+
"origin": "aria",
|
|
11274
|
+
"description": "The type of input to render. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdeftype).",
|
|
11275
|
+
"tags": {
|
|
11276
|
+
"default": "'search'"
|
|
11277
|
+
}
|
|
11278
|
+
},
|
|
11279
|
+
"onSubmit": {
|
|
11280
|
+
"type": "((value: string) => void) | undefined",
|
|
11281
|
+
"required": false,
|
|
11282
|
+
"origin": "other",
|
|
11283
|
+
"description": "Handler that is called when the SearchField is submitted."
|
|
11284
|
+
},
|
|
11285
|
+
"onClear": {
|
|
11286
|
+
"type": "(() => void) | undefined",
|
|
11287
|
+
"required": false,
|
|
11288
|
+
"origin": "other",
|
|
11289
|
+
"description": "Handler that is called when the clear button is pressed."
|
|
11290
|
+
},
|
|
11291
|
+
"isDisabled": {
|
|
11292
|
+
"type": "boolean | undefined",
|
|
11293
|
+
"required": false,
|
|
11294
|
+
"origin": "aria",
|
|
11295
|
+
"description": "Whether the input is disabled."
|
|
11296
|
+
},
|
|
11297
|
+
"isReadOnly": {
|
|
11298
|
+
"type": "boolean | undefined",
|
|
11299
|
+
"required": false,
|
|
11300
|
+
"origin": "aria",
|
|
11301
|
+
"description": "Whether the input can be selected but not changed by the user."
|
|
11302
|
+
},
|
|
11303
|
+
"isRequired": {
|
|
11304
|
+
"type": "boolean | undefined",
|
|
11305
|
+
"required": false,
|
|
11306
|
+
"origin": "aria",
|
|
11307
|
+
"description": "Whether user input is required on the input before form submission."
|
|
11308
|
+
},
|
|
11309
|
+
"isInvalid": {
|
|
11310
|
+
"type": "boolean | undefined",
|
|
11311
|
+
"required": false,
|
|
11312
|
+
"origin": "aria",
|
|
11313
|
+
"description": "Whether the input value is invalid."
|
|
11314
|
+
},
|
|
11315
|
+
"validationState": {
|
|
11316
|
+
"type": "ValidationState | undefined",
|
|
11317
|
+
"required": false,
|
|
11318
|
+
"origin": "aria",
|
|
11319
|
+
"values": [
|
|
11320
|
+
"valid",
|
|
11321
|
+
"invalid"
|
|
11322
|
+
],
|
|
11323
|
+
"tags": {
|
|
11324
|
+
"deprecated": "Use `isInvalid` instead."
|
|
11325
|
+
}
|
|
11326
|
+
},
|
|
11327
|
+
"validationBehavior": {
|
|
11328
|
+
"type": "\"aria\" | \"native\" | undefined",
|
|
11329
|
+
"required": false,
|
|
11330
|
+
"origin": "aria",
|
|
11331
|
+
"description": "Whether to use native HTML form validation to prevent form submission\nwhen the value is missing or invalid, or mark the field as required\nor invalid via ARIA.",
|
|
11332
|
+
"values": [
|
|
11333
|
+
"aria",
|
|
11334
|
+
"native"
|
|
11335
|
+
],
|
|
11336
|
+
"tags": {
|
|
11337
|
+
"default": "'aria'"
|
|
11338
|
+
}
|
|
11339
|
+
},
|
|
11340
|
+
"validate": {
|
|
11341
|
+
"type": "((value: string) => ValidationError | true | null | undefined) | undefined",
|
|
11342
|
+
"required": false,
|
|
11343
|
+
"origin": "aria",
|
|
11344
|
+
"description": "A function that returns an error message if a given value is invalid.\nValidation errors are displayed to the user when the form is submitted\nif `validationBehavior=\"native\"`. For realtime validation, use the `isInvalid`\nprop instead."
|
|
11345
|
+
},
|
|
11346
|
+
"description": {
|
|
11347
|
+
"type": "ReactNode",
|
|
11348
|
+
"required": false,
|
|
11349
|
+
"origin": "aria",
|
|
11350
|
+
"description": "A description for the field. Provides a hint such as specific requirements for what to choose."
|
|
11351
|
+
},
|
|
11352
|
+
"errorMessage": {
|
|
11353
|
+
"type": "ReactNode | ((v: ValidationResult) => ReactNode)",
|
|
11354
|
+
"required": false,
|
|
11355
|
+
"origin": "aria",
|
|
11356
|
+
"description": "An error message for the field."
|
|
11357
|
+
},
|
|
11358
|
+
"autoFocus": {
|
|
11359
|
+
"type": "boolean | undefined",
|
|
11360
|
+
"required": false,
|
|
11361
|
+
"origin": "aria",
|
|
11362
|
+
"description": "Whether the element should receive focus on render."
|
|
11363
|
+
},
|
|
11364
|
+
"onFocus": {
|
|
11365
|
+
"type": "((e: FocusEvent<HTMLInputElement, Element>) => void) | undefined",
|
|
11366
|
+
"required": false,
|
|
11367
|
+
"origin": "aria",
|
|
11368
|
+
"description": "Handler that is called when the element receives focus."
|
|
11369
|
+
},
|
|
11370
|
+
"onBlur": {
|
|
11371
|
+
"type": "((e: FocusEvent<HTMLInputElement, Element>) => void) | undefined",
|
|
11372
|
+
"required": false,
|
|
11373
|
+
"origin": "aria",
|
|
11374
|
+
"description": "Handler that is called when the element loses focus."
|
|
11375
|
+
},
|
|
11376
|
+
"onFocusChange": {
|
|
11377
|
+
"type": "((isFocused: boolean) => void) | undefined",
|
|
11378
|
+
"required": false,
|
|
11379
|
+
"origin": "aria",
|
|
11380
|
+
"description": "Handler that is called when the element's focus status changes."
|
|
11381
|
+
},
|
|
11382
|
+
"onKeyDown": {
|
|
11383
|
+
"type": "((e: KeyboardEvent) => void) | undefined",
|
|
11384
|
+
"required": false,
|
|
11385
|
+
"origin": "aria",
|
|
11386
|
+
"description": "Handler that is called when a key is pressed."
|
|
11387
|
+
},
|
|
11388
|
+
"onKeyUp": {
|
|
11389
|
+
"type": "((e: KeyboardEvent) => void) | undefined",
|
|
11390
|
+
"required": false,
|
|
11391
|
+
"origin": "aria",
|
|
11392
|
+
"description": "Handler that is called when a key is released."
|
|
11393
|
+
},
|
|
11394
|
+
"placeholder": {
|
|
11395
|
+
"type": "string | undefined",
|
|
11396
|
+
"required": false,
|
|
11397
|
+
"origin": "aria",
|
|
11398
|
+
"description": "Temporary text that occupies the text input when it is empty."
|
|
11399
|
+
},
|
|
11400
|
+
"value": {
|
|
11401
|
+
"type": "string | undefined",
|
|
11402
|
+
"required": false,
|
|
11403
|
+
"origin": "aria",
|
|
11404
|
+
"description": "The current value (controlled)."
|
|
11405
|
+
},
|
|
11406
|
+
"defaultValue": {
|
|
11407
|
+
"type": "string | undefined",
|
|
11408
|
+
"required": false,
|
|
11409
|
+
"origin": "aria",
|
|
11410
|
+
"description": "The default value (uncontrolled)."
|
|
11411
|
+
},
|
|
11412
|
+
"onChange": {
|
|
11413
|
+
"type": "((value: string) => void) | undefined",
|
|
11414
|
+
"required": false,
|
|
11415
|
+
"origin": "aria",
|
|
11416
|
+
"description": "Handler that is called when the value changes."
|
|
11417
|
+
},
|
|
11418
|
+
"label": {
|
|
11419
|
+
"type": "ReactNode",
|
|
11420
|
+
"required": false,
|
|
11421
|
+
"origin": "aria",
|
|
11422
|
+
"description": "The content to display as the label."
|
|
11423
|
+
},
|
|
11424
|
+
"id": {
|
|
11425
|
+
"type": "string | undefined",
|
|
11426
|
+
"required": false,
|
|
11427
|
+
"origin": "aria",
|
|
11428
|
+
"description": "The element's unique identifier. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id)."
|
|
11429
|
+
},
|
|
11430
|
+
"spellCheck": {
|
|
11431
|
+
"type": "string | undefined",
|
|
11432
|
+
"required": false,
|
|
11433
|
+
"origin": "aria",
|
|
11434
|
+
"description": "An enumerated attribute that defines whether the element may be checked for spelling errors.\nSee [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/spellcheck)."
|
|
11435
|
+
},
|
|
11436
|
+
"autoCorrect": {
|
|
11437
|
+
"type": "string | undefined",
|
|
11438
|
+
"required": false,
|
|
11439
|
+
"origin": "aria",
|
|
11440
|
+
"description": "An attribute that takes as its value a space-separated string that describes what, if any, type\nof autocomplete functionality the input should provide. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#autocomplete)."
|
|
11441
|
+
},
|
|
11442
|
+
"inputMode": {
|
|
11443
|
+
"type": "\"none\" | \"search\" | \"text\" | \"url\" | \"tel\" | \"email\" | \"numeric\" | \"decimal\" | undefined",
|
|
11444
|
+
"required": false,
|
|
11445
|
+
"origin": "aria",
|
|
11446
|
+
"description": "Hints at the type of data that might be entered by the user while editing the element or its\ncontents. See\n[MDN](https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute).",
|
|
11447
|
+
"values": [
|
|
11448
|
+
"none",
|
|
11449
|
+
"search",
|
|
11450
|
+
"text",
|
|
11451
|
+
"url",
|
|
11452
|
+
"tel",
|
|
11453
|
+
"email",
|
|
11454
|
+
"numeric",
|
|
11455
|
+
"decimal"
|
|
11456
|
+
]
|
|
11457
|
+
},
|
|
11458
|
+
"aria-activedescendant": {
|
|
11459
|
+
"type": "string | undefined",
|
|
11460
|
+
"required": false,
|
|
11461
|
+
"origin": "aria",
|
|
11462
|
+
"description": "Identifies the currently active element when DOM focus is on a composite widget, textbox,\ngroup, or application."
|
|
11463
|
+
},
|
|
11464
|
+
"aria-autocomplete": {
|
|
11465
|
+
"type": "\"inline\" | \"list\" | \"none\" | \"both\" | undefined",
|
|
11466
|
+
"required": false,
|
|
11467
|
+
"origin": "aria",
|
|
11468
|
+
"description": "Indicates whether inputting text could trigger display of one or more predictions of the user's\nintended value for an input and specifies how predictions would be presented if they are made.",
|
|
11469
|
+
"values": [
|
|
11470
|
+
"inline",
|
|
11471
|
+
"list",
|
|
11472
|
+
"none",
|
|
11473
|
+
"both"
|
|
11474
|
+
]
|
|
11475
|
+
},
|
|
11476
|
+
"aria-controls": {
|
|
11477
|
+
"type": "string | undefined",
|
|
11478
|
+
"required": false,
|
|
11479
|
+
"origin": "aria",
|
|
11480
|
+
"description": "Identifies the element (or elements) whose contents or presence are controlled by the current\nelement."
|
|
11481
|
+
},
|
|
11482
|
+
"aria-describedby": {
|
|
11483
|
+
"type": "string | undefined",
|
|
11484
|
+
"required": false,
|
|
11485
|
+
"origin": "aria",
|
|
11486
|
+
"description": "Identifies the element (or elements) that describes the object."
|
|
11487
|
+
},
|
|
11488
|
+
"aria-details": {
|
|
11489
|
+
"type": "string | undefined",
|
|
11490
|
+
"required": false,
|
|
11491
|
+
"origin": "aria",
|
|
11492
|
+
"description": "Identifies the element (or elements) that provide a detailed, extended description for the\nobject."
|
|
11493
|
+
},
|
|
11494
|
+
"aria-errormessage": {
|
|
11495
|
+
"type": "string | undefined",
|
|
11496
|
+
"required": false,
|
|
11497
|
+
"origin": "aria",
|
|
11498
|
+
"description": "Identifies the element that provides an error message for the object."
|
|
11499
|
+
},
|
|
11500
|
+
"aria-haspopup": {
|
|
11501
|
+
"type": "boolean | \"true\" | \"false\" | \"menu\" | \"listbox\" | \"tree\" | \"grid\" | \"dialog\" | undefined",
|
|
11502
|
+
"required": false,
|
|
11503
|
+
"origin": "aria",
|
|
11504
|
+
"description": "Indicates the availability and type of interactive popup element, such as menu or dialog, that\ncan be triggered by an element."
|
|
11505
|
+
},
|
|
11506
|
+
"aria-label": {
|
|
11507
|
+
"type": "string | undefined",
|
|
11508
|
+
"required": false,
|
|
11509
|
+
"origin": "aria",
|
|
11510
|
+
"description": "Defines a string value that labels the current element."
|
|
11511
|
+
},
|
|
11512
|
+
"aria-labelledby": {
|
|
11513
|
+
"type": "string | undefined",
|
|
11514
|
+
"required": false,
|
|
11515
|
+
"origin": "aria",
|
|
11516
|
+
"description": "Identifies the element (or elements) that labels the current element."
|
|
11517
|
+
},
|
|
11518
|
+
"onCopy": {
|
|
11519
|
+
"type": "ClipboardEventHandler<HTMLInputElement> | undefined",
|
|
11520
|
+
"required": false,
|
|
11521
|
+
"origin": "aria",
|
|
11522
|
+
"description": "Handler that is called when the user copies text. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/oncopy)."
|
|
11523
|
+
},
|
|
11524
|
+
"onCut": {
|
|
11525
|
+
"type": "ClipboardEventHandler<HTMLInputElement> | undefined",
|
|
11526
|
+
"required": false,
|
|
11527
|
+
"origin": "aria",
|
|
11528
|
+
"description": "Handler that is called when the user cuts text. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/oncut)."
|
|
11529
|
+
},
|
|
11530
|
+
"onPaste": {
|
|
11531
|
+
"type": "ClipboardEventHandler<HTMLInputElement> | undefined",
|
|
11532
|
+
"required": false,
|
|
11533
|
+
"origin": "aria",
|
|
11534
|
+
"description": "Handler that is called when the user pastes text. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/onpaste)."
|
|
11535
|
+
},
|
|
11536
|
+
"onCompositionEnd": {
|
|
11537
|
+
"type": "CompositionEventHandler<HTMLInputElement> | undefined",
|
|
11538
|
+
"required": false,
|
|
11539
|
+
"origin": "aria",
|
|
11540
|
+
"description": "Handler that is called when a text composition system completes or cancels the current text\ncomposition session. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/API/Element/compositionend_event)."
|
|
11541
|
+
},
|
|
11542
|
+
"onCompositionStart": {
|
|
11543
|
+
"type": "CompositionEventHandler<HTMLInputElement> | undefined",
|
|
11544
|
+
"required": false,
|
|
11545
|
+
"origin": "aria",
|
|
11546
|
+
"description": "Handler that is called when a text composition system starts a new text composition session.\nSee [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Element/compositionstart_event)."
|
|
11547
|
+
},
|
|
11548
|
+
"onCompositionUpdate": {
|
|
11549
|
+
"type": "CompositionEventHandler<HTMLInputElement> | undefined",
|
|
11550
|
+
"required": false,
|
|
11551
|
+
"origin": "aria",
|
|
11552
|
+
"description": "Handler that is called when a new character is received in the current text composition\nsession. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/API/Element/compositionupdate_event)."
|
|
11553
|
+
},
|
|
11554
|
+
"onBeforeInput": {
|
|
11555
|
+
"type": "FormEventHandler<HTMLInputElement> | undefined",
|
|
11556
|
+
"required": false,
|
|
11557
|
+
"origin": "aria",
|
|
11558
|
+
"description": "Handler that is called when the input value is about to be modified. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/beforeinput_event)."
|
|
11559
|
+
},
|
|
11560
|
+
"onInput": {
|
|
11561
|
+
"type": "FormEventHandler<HTMLInputElement> | undefined",
|
|
11562
|
+
"required": false,
|
|
11563
|
+
"origin": "aria",
|
|
11564
|
+
"description": "Handler that is called when the input value is modified. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event)."
|
|
11565
|
+
},
|
|
11566
|
+
"onSelect": {
|
|
11567
|
+
"type": "ReactEventHandler<HTMLInputElement> | undefined",
|
|
11568
|
+
"required": false,
|
|
11569
|
+
"origin": "aria",
|
|
11570
|
+
"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)."
|
|
11571
|
+
},
|
|
11572
|
+
"form": {
|
|
11573
|
+
"type": "string | undefined",
|
|
11574
|
+
"required": false,
|
|
11575
|
+
"origin": "aria",
|
|
11576
|
+
"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)."
|
|
11577
|
+
},
|
|
11578
|
+
"name": {
|
|
11579
|
+
"type": "string | undefined",
|
|
11580
|
+
"required": false,
|
|
11581
|
+
"origin": "aria",
|
|
11582
|
+
"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)."
|
|
11583
|
+
},
|
|
11584
|
+
"autoComplete": {
|
|
11585
|
+
"type": "string | undefined",
|
|
11586
|
+
"required": false,
|
|
11587
|
+
"origin": "aria",
|
|
11588
|
+
"description": "Describes the type of autocomplete functionality the input should provide if any. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefautocomplete)."
|
|
11589
|
+
},
|
|
11590
|
+
"maxLength": {
|
|
11591
|
+
"type": "number | undefined",
|
|
11592
|
+
"required": false,
|
|
11593
|
+
"origin": "aria",
|
|
11594
|
+
"description": "The maximum number of characters supported by the input. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefmaxlength)."
|
|
11595
|
+
},
|
|
11596
|
+
"minLength": {
|
|
11597
|
+
"type": "number | undefined",
|
|
11598
|
+
"required": false,
|
|
11599
|
+
"origin": "aria",
|
|
11600
|
+
"description": "The minimum number of characters required by the input. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefminlength)."
|
|
11601
|
+
},
|
|
11602
|
+
"pattern": {
|
|
11603
|
+
"type": "string | undefined",
|
|
11604
|
+
"required": false,
|
|
11605
|
+
"origin": "aria",
|
|
11606
|
+
"description": "Regex pattern that the value of the input must match to be valid. See\n[MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#htmlattrdefpattern)."
|
|
11607
|
+
},
|
|
11608
|
+
"excludeFromTabOrder": {
|
|
11609
|
+
"type": "boolean | undefined",
|
|
11610
|
+
"required": false,
|
|
11611
|
+
"origin": "aria",
|
|
11612
|
+
"description": "Whether to exclude the element from the sequential tab order. If true,\nthe element will not be focusable via the keyboard by tabbing. This should\nbe avoided except in rare scenarios where an alternative means of accessing\nthe element or its functionality via the keyboard is available."
|
|
11613
|
+
}
|
|
11614
|
+
},
|
|
11615
|
+
"propCounts": {
|
|
11616
|
+
"own": 3,
|
|
11617
|
+
"aria": 51,
|
|
11618
|
+
"dom": 264,
|
|
11619
|
+
"other": 2
|
|
11620
|
+
}
|
|
11621
|
+
},
|
|
10652
11622
|
"SegmentedControl": {
|
|
10653
11623
|
"name": "SegmentedControl",
|
|
10654
11624
|
"source": "src/components/SegmentedControl.tsx",
|
|
@@ -12339,8 +13309,8 @@
|
|
|
12339
13309
|
"origin": "own",
|
|
12340
13310
|
"description": "`horizontal` for a page-width header above the form, `vertical` for a side\nrail. Below 40rem a horizontal stepper hides every label but the current\none, so it does not need a second variant for mobile.",
|
|
12341
13311
|
"values": [
|
|
12342
|
-
"
|
|
12343
|
-
"
|
|
13312
|
+
"vertical",
|
|
13313
|
+
"horizontal"
|
|
12344
13314
|
]
|
|
12345
13315
|
},
|
|
12346
13316
|
"children": {
|
|
@@ -13467,13 +14437,13 @@
|
|
|
13467
14437
|
"default": "md"
|
|
13468
14438
|
},
|
|
13469
14439
|
"orientation": {
|
|
13470
|
-
"type": "\"
|
|
14440
|
+
"type": "\"vertical\" | \"horizontal\" | undefined",
|
|
13471
14441
|
"required": false,
|
|
13472
14442
|
"origin": "own",
|
|
13473
14443
|
"description": "Drives both the arrow-key axis and the track layout.\n\n`vertical` is keyboard- and ARIA-complete — up/down move between tabs, and\nthe track stacks — but its *decoration* is not: the underline rule and the\npill track's padding are still written for the horizontal axis only. Those\nare Figma's to specify, not this file's to invent. See tabs.css.",
|
|
13474
14444
|
"values": [
|
|
13475
|
-
"
|
|
13476
|
-
"
|
|
14445
|
+
"vertical",
|
|
14446
|
+
"horizontal"
|
|
13477
14447
|
],
|
|
13478
14448
|
"tags": {
|
|
13479
14449
|
"default": "'horizontal'"
|