@duro-app/cli 5.0.0 → 5.2.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/README.md +16 -12
- package/dist/commands/doctor.d.ts +4 -2
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +269 -27
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/mockup.d.ts.map +1 -1
- package/dist/commands/mockup.js +23 -3
- package/dist/commands/mockup.js.map +1 -1
- package/dist/manifest.js +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/skill-template.d.ts +1 -1
- package/dist/skill-template.d.ts.map +1 -1
- package/dist/skill-template.js +3 -1
- package/dist/skill-template.js.map +1 -1
- package/package.json +5 -5
- package/registry.json +569 -21
package/registry.json
CHANGED
|
@@ -353,6 +353,24 @@
|
|
|
353
353
|
"required": false,
|
|
354
354
|
"type": "string"
|
|
355
355
|
},
|
|
356
|
+
{
|
|
357
|
+
"description": "For a button that shows or hides another element (a disclosure, a panel).",
|
|
358
|
+
"name": "aria-expanded",
|
|
359
|
+
"required": false,
|
|
360
|
+
"type": "boolean"
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
"description": "Id of the element this button controls.",
|
|
364
|
+
"name": "aria-controls",
|
|
365
|
+
"required": false,
|
|
366
|
+
"type": "string"
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
"description": "The underlying <button>, e.g. to anchor a Popover or return focus to it. Web only: on native the ref is not attached.",
|
|
370
|
+
"name": "ref",
|
|
371
|
+
"required": false,
|
|
372
|
+
"type": "Ref<HTMLButtonElement>"
|
|
373
|
+
},
|
|
356
374
|
{
|
|
357
375
|
"name": "children",
|
|
358
376
|
"required": true,
|
|
@@ -1603,7 +1621,7 @@
|
|
|
1603
1621
|
"Portal"
|
|
1604
1622
|
]
|
|
1605
1623
|
},
|
|
1606
|
-
"description": "Modal dialog with backdrop overlay. Centered on screen with scale+fade animation.
|
|
1624
|
+
"description": "Modal dialog with backdrop overlay. Centered on screen with scale+fade animation. Moves focus in on open (initialFocus, else the first focusable element, else the dialog) and back on close; dismisses on backdrop click (dismissable) or Escape (closeOnEscape, independent of dismissable). Use for confirmations, forms, or content that requires user attention before continuing.",
|
|
1607
1625
|
"example": "<Dialog.Root open={open} onOpenChange={setOpen}>\n <Dialog.Trigger>\n <Button>Open dialog</Button>\n </Dialog.Trigger>\n <Dialog.Portal size=\"md\">\n <Dialog.Header>\n <Dialog.Title>Confirm action</Dialog.Title>\n <Dialog.Close />\n </Dialog.Header>\n <Dialog.Body>\n <Text>Are you sure you want to proceed?</Text>\n </Dialog.Body>\n <Dialog.Footer>\n <Button variant=\"secondary\" onClick={() => setOpen(false)}>Cancel</Button>\n <Button variant=\"danger\" onClick={handleConfirm}>Confirm</Button>\n </Dialog.Footer>\n </Dialog.Portal>\n</Dialog.Root>",
|
|
1608
1626
|
"relatedTo": [
|
|
1609
1627
|
{
|
|
@@ -1749,11 +1767,24 @@
|
|
|
1749
1767
|
},
|
|
1750
1768
|
{
|
|
1751
1769
|
"default": "true",
|
|
1752
|
-
"description": "Whether clicking backdrop closes the dialog. Default: true",
|
|
1770
|
+
"description": "Whether clicking the backdrop closes the dialog. Default: true",
|
|
1753
1771
|
"name": "dismissable",
|
|
1754
1772
|
"required": false,
|
|
1755
1773
|
"type": "boolean"
|
|
1756
1774
|
},
|
|
1775
|
+
{
|
|
1776
|
+
"default": "true",
|
|
1777
|
+
"description": "Whether Escape closes the dialog. Default: true, also when `dismissable` is false. Turning it off leaves the keyboard no way out but a Dialog.Close, so render one.",
|
|
1778
|
+
"name": "closeOnEscape",
|
|
1779
|
+
"required": false,
|
|
1780
|
+
"type": "boolean"
|
|
1781
|
+
},
|
|
1782
|
+
{
|
|
1783
|
+
"description": "Element to focus on open. Default: the first focusable element, else the dialog itself.",
|
|
1784
|
+
"name": "initialFocus",
|
|
1785
|
+
"required": false,
|
|
1786
|
+
"type": "RefObject<HTMLElement | null>"
|
|
1787
|
+
},
|
|
1757
1788
|
{
|
|
1758
1789
|
"default": "'fast'",
|
|
1759
1790
|
"description": "Motion token for the close animation. Default: 'fast' (150ms)",
|
|
@@ -2526,7 +2557,7 @@
|
|
|
2526
2557
|
"importPath": "@duro-app/ui",
|
|
2527
2558
|
"kind": "component",
|
|
2528
2559
|
"meta": {
|
|
2529
|
-
"description": "Grid layout. Columns are a count (1-6), a list of weights ([1, 2] for one-third / two-thirds), responsive auto-fit via minColumnWidth, or a named split layout (list/detail, nav/content) that collapses to one column on the width of its own container, so it is safe to nest and to place beside a DetailPanel. Weights rather than CSS template strings, so the same props render as CSS grid on web and as a wrapping flex row on native.",
|
|
2560
|
+
"description": "Grid layout. Columns are a count (1-6), a list of weights ([1, 2] for one-third / two-thirds), responsive auto-fit via minColumnWidth, or a named split layout (list/detail, nav/content) that collapses to one column on the width of its own container, so it is safe to nest and to place beside a DetailPanel. Weights rather than CSS template strings, so the same props render as CSS grid on web and as a wrapping flex row on native. For a fixed track beside fractions (content + a 320px aside), tracks takes a token track list — tracks={['1fr', 'asideW']} — web only, equal columns on native.",
|
|
2530
2561
|
"example": "// Split: list ≥ sizes.gridColSm (240px) beside a detail pane, one column below md\n<Grid layout=\"split\" gap=\"lg\">\n <List.Root>…</List.Root>\n <Panel.Root>…</Panel.Root>\n</Grid>\n\n// Responsive: columns auto-fit based on min width\n<Grid minColumnWidth=\"gridColMd\" gap=\"md\">\n <Card>A</Card>\n <Card>B</Card>\n <Card>C</Card>\n</Grid>\n\n// Fixed: always 3 columns\n<Grid columns={3} gap=\"md\">\n <Card>A</Card>\n <Card>B</Card>\n <Card>C</Card>\n</Grid>\n\n// Weighted: a one-third / two-thirds split (works on native too)\n<Grid columns={[1, 2]} gap=\"md\">\n <Card>Sidebar</Card>\n <Card>Content</Card>\n</Grid>",
|
|
2531
2562
|
"relatedTo": [
|
|
2532
2563
|
{
|
|
@@ -2586,6 +2617,12 @@
|
|
|
2586
2617
|
"required": false,
|
|
2587
2618
|
"type": "GridLayout"
|
|
2588
2619
|
},
|
|
2620
|
+
{
|
|
2621
|
+
"description": "An explicit track list, for columns that are not all fractions: a size token for a fixed track (`['1fr', 'asideW']`), or `minmax()` / `fit-content()` of tokens and fractions (`'minmax(gridColXs, 1fr)'`). A px is a type error. Web only — on native it falls back to equal columns, one per track. Wins over `columns` / `minColumnWidth`; `layout` wins over it.",
|
|
2622
|
+
"name": "tracks",
|
|
2623
|
+
"required": false,
|
|
2624
|
+
"type": "readonly GridTrack[]"
|
|
2625
|
+
},
|
|
2589
2626
|
{
|
|
2590
2627
|
"name": "children",
|
|
2591
2628
|
"required": true,
|
|
@@ -2819,7 +2856,7 @@
|
|
|
2819
2856
|
"importPath": "@duro-app/ui",
|
|
2820
2857
|
"kind": "component",
|
|
2821
2858
|
"meta": {
|
|
2822
|
-
"description": "Text input with automatic Field/Form integration. Variant auto-switches to error when inside an invalid Field.",
|
|
2859
|
+
"description": "Text input with automatic Field/Form integration. Variant auto-switches to error when inside an invalid Field. variant=\"ghost\" reads as text until hovered (hairline border) or focused (accent border and ring): only for inline edit where a visible Field.Label names it; it shows the error state when the Field is invalid.",
|
|
2823
2860
|
"example": "<Field.Root name=\"email\">\n <Field.Label>Email</Field.Label>\n <Input type=\"email\" placeholder=\"you@example.com\" autoComplete=\"email\" />\n <Field.Error />\n</Field.Root>",
|
|
2824
2861
|
"relatedTo": [
|
|
2825
2862
|
{
|
|
@@ -2840,22 +2877,26 @@
|
|
|
2840
2877
|
],
|
|
2841
2878
|
"whenNotToUse": [
|
|
2842
2879
|
"Multi-line text — use Textarea",
|
|
2843
|
-
"Picking from predefined options — use Select"
|
|
2880
|
+
"Picking from predefined options — use Select",
|
|
2881
|
+
"A ghost field without a visible label — it reads as plain text, so the label is what says it is editable"
|
|
2844
2882
|
],
|
|
2845
2883
|
"whenToUse": [
|
|
2846
|
-
"Single-line text entry (text, email, password, url, tel, number, search)"
|
|
2884
|
+
"Single-line text entry (text, email, password, url, tel, number, search)",
|
|
2885
|
+
"Inline edit of a labelled value in place (a ticket title) — variant=\"ghost\""
|
|
2847
2886
|
]
|
|
2848
2887
|
},
|
|
2849
2888
|
"name": "Input",
|
|
2850
2889
|
"props": [
|
|
2851
2890
|
{
|
|
2852
2891
|
"default": "'default'",
|
|
2892
|
+
"description": "`ghost` reads as text until hovered or focused — only for inline edit where a visible label names the field (Field.Label). It shows the error state when the Field is invalid.",
|
|
2853
2893
|
"name": "variant",
|
|
2854
2894
|
"required": false,
|
|
2855
2895
|
"type": "InputVariant",
|
|
2856
2896
|
"union": [
|
|
2857
2897
|
"default",
|
|
2858
|
-
"error"
|
|
2898
|
+
"error",
|
|
2899
|
+
"ghost"
|
|
2859
2900
|
]
|
|
2860
2901
|
},
|
|
2861
2902
|
{
|
|
@@ -3072,6 +3113,12 @@
|
|
|
3072
3113
|
"required": false,
|
|
3073
3114
|
"type": "Length"
|
|
3074
3115
|
},
|
|
3116
|
+
{
|
|
3117
|
+
"description": "Accessible name of a clickable addon (it renders a button). Required when its content is an icon (copy, reveal): without it the button has no name.",
|
|
3118
|
+
"name": "aria-label",
|
|
3119
|
+
"required": false,
|
|
3120
|
+
"type": "string"
|
|
3121
|
+
},
|
|
3075
3122
|
{
|
|
3076
3123
|
"name": "children",
|
|
3077
3124
|
"required": true,
|
|
@@ -3363,6 +3410,197 @@
|
|
|
3363
3410
|
"props": null,
|
|
3364
3411
|
"sourcePath": "packages/ui/src/components/List/List.tsx"
|
|
3365
3412
|
},
|
|
3413
|
+
"Listbox": {
|
|
3414
|
+
"importPath": "@duro-app/ui",
|
|
3415
|
+
"kind": "compound",
|
|
3416
|
+
"meta": {
|
|
3417
|
+
"anatomy": {
|
|
3418
|
+
"optional": [
|
|
3419
|
+
"Empty"
|
|
3420
|
+
],
|
|
3421
|
+
"required": [
|
|
3422
|
+
"Root",
|
|
3423
|
+
"Option"
|
|
3424
|
+
]
|
|
3425
|
+
},
|
|
3426
|
+
"description": "Popup list of options for an input that keeps focus — an editor typeahead (mentions, slash commands) or a custom combobox. The anchor owns focus and the keyboard: it sets the controlled highlightedId and spreads Listbox.getAnchorProps() for aria-controls / aria-expanded / aria-activedescendant. A press on an option never takes focus from the anchor. Portalled and placed against anchor() (an input rect or a caret rect), capped at a size-token maxHeight (default listMaxH).",
|
|
3427
|
+
"example": "const id = useId()\nconst [highlightedId, setHighlightedId] = useState<string | null>(null)\nconst optionId = (value: string) => `${id}-${value}`\n// On the editor root: Object.entries(Listbox.getAnchorProps({id, open, highlightedId}))\n<Listbox.Root\n id={id}\n open={open}\n anchor={() => caretRect()}\n highlightedId={highlightedId}\n onHighlight={setHighlightedId}\n onSelect={(value) => insertMention(value)}\n getOptionId={optionId}\n aria-label=\"Mentions\"\n>\n {people.map((p) => (\n <Listbox.Option key={p.id} value={p.id}>{p.name}</Listbox.Option>\n ))}\n {people.length === 0 && <Listbox.Empty>No match</Listbox.Empty>}\n</Listbox.Root>",
|
|
3428
|
+
"relatedTo": [
|
|
3429
|
+
{
|
|
3430
|
+
"component": "Combobox",
|
|
3431
|
+
"kind": "contrast",
|
|
3432
|
+
"relationship": "Combobox is a ready-made input + Listbox; Listbox alone serves an anchor you own (an editor)"
|
|
3433
|
+
},
|
|
3434
|
+
{
|
|
3435
|
+
"component": "Menu",
|
|
3436
|
+
"kind": "contrast",
|
|
3437
|
+
"relationship": "Menu takes focus and triggers actions; Listbox leaves focus on its anchor and offers values"
|
|
3438
|
+
}
|
|
3439
|
+
],
|
|
3440
|
+
"whenNotToUse": [
|
|
3441
|
+
"Picking a value from a filterable list in a form — use Combobox (built on Listbox)",
|
|
3442
|
+
"A short fixed list — use Select",
|
|
3443
|
+
"Actions — use Menu"
|
|
3444
|
+
],
|
|
3445
|
+
"whenToUse": [
|
|
3446
|
+
"Typeahead inside a rich-text editor, where focus must stay in the editor",
|
|
3447
|
+
"A custom combobox whose input is not Combobox.Input"
|
|
3448
|
+
]
|
|
3449
|
+
},
|
|
3450
|
+
"name": "Listbox",
|
|
3451
|
+
"parts": {
|
|
3452
|
+
"Empty": {
|
|
3453
|
+
"name": "Empty",
|
|
3454
|
+
"props": [
|
|
3455
|
+
{
|
|
3456
|
+
"name": "children",
|
|
3457
|
+
"required": true,
|
|
3458
|
+
"type": "ReactNode"
|
|
3459
|
+
}
|
|
3460
|
+
],
|
|
3461
|
+
"sourcePath": "packages/ui/src/components/Listbox/Listbox.tsx"
|
|
3462
|
+
},
|
|
3463
|
+
"Option": {
|
|
3464
|
+
"name": "Option",
|
|
3465
|
+
"props": [
|
|
3466
|
+
{
|
|
3467
|
+
"name": "value",
|
|
3468
|
+
"required": true,
|
|
3469
|
+
"type": "string"
|
|
3470
|
+
},
|
|
3471
|
+
{
|
|
3472
|
+
"description": "DOM id. Default: Root's getOptionId(value).",
|
|
3473
|
+
"name": "id",
|
|
3474
|
+
"required": false,
|
|
3475
|
+
"type": "string"
|
|
3476
|
+
},
|
|
3477
|
+
{
|
|
3478
|
+
"default": "false",
|
|
3479
|
+
"description": "The committed choice (aria-selected).",
|
|
3480
|
+
"name": "selected",
|
|
3481
|
+
"required": false,
|
|
3482
|
+
"type": "boolean"
|
|
3483
|
+
},
|
|
3484
|
+
{
|
|
3485
|
+
"default": "false",
|
|
3486
|
+
"name": "disabled",
|
|
3487
|
+
"required": false,
|
|
3488
|
+
"type": "boolean"
|
|
3489
|
+
},
|
|
3490
|
+
{
|
|
3491
|
+
"name": "children",
|
|
3492
|
+
"required": true,
|
|
3493
|
+
"type": "ReactNode"
|
|
3494
|
+
},
|
|
3495
|
+
{
|
|
3496
|
+
"name": "ref",
|
|
3497
|
+
"required": false,
|
|
3498
|
+
"type": "Ref<HTMLDivElement>"
|
|
3499
|
+
}
|
|
3500
|
+
],
|
|
3501
|
+
"sourcePath": "packages/ui/src/components/Listbox/Listbox.tsx"
|
|
3502
|
+
},
|
|
3503
|
+
"Root": {
|
|
3504
|
+
"name": "Root",
|
|
3505
|
+
"props": [
|
|
3506
|
+
{
|
|
3507
|
+
"description": "DOM id of the list; pass the same to getAnchorProps.",
|
|
3508
|
+
"name": "id",
|
|
3509
|
+
"required": true,
|
|
3510
|
+
"type": "string"
|
|
3511
|
+
},
|
|
3512
|
+
{
|
|
3513
|
+
"name": "open",
|
|
3514
|
+
"required": true,
|
|
3515
|
+
"type": "boolean"
|
|
3516
|
+
},
|
|
3517
|
+
{
|
|
3518
|
+
"description": "The rect the list is placed against: the input, or the editor's caret.",
|
|
3519
|
+
"name": "anchor",
|
|
3520
|
+
"required": true,
|
|
3521
|
+
"type": "() => DOMRect | null | undefined"
|
|
3522
|
+
},
|
|
3523
|
+
{
|
|
3524
|
+
"default": "false",
|
|
3525
|
+
"description": "Give the list the anchor's width (a Combobox under its input).",
|
|
3526
|
+
"name": "matchAnchorWidth",
|
|
3527
|
+
"required": false,
|
|
3528
|
+
"type": "boolean"
|
|
3529
|
+
},
|
|
3530
|
+
{
|
|
3531
|
+
"description": "Id of the highlighted option, controlled by the anchor's keyboard handling.",
|
|
3532
|
+
"name": "highlightedId",
|
|
3533
|
+
"required": true,
|
|
3534
|
+
"type": "string | null"
|
|
3535
|
+
},
|
|
3536
|
+
{
|
|
3537
|
+
"description": "Pointer hover asks to move the highlight.",
|
|
3538
|
+
"name": "onHighlight",
|
|
3539
|
+
"required": false,
|
|
3540
|
+
"type": "(id: string | null) => void"
|
|
3541
|
+
},
|
|
3542
|
+
{
|
|
3543
|
+
"description": "A press on an option.",
|
|
3544
|
+
"name": "onSelect",
|
|
3545
|
+
"required": false,
|
|
3546
|
+
"type": "(value: string) => void"
|
|
3547
|
+
},
|
|
3548
|
+
{
|
|
3549
|
+
"description": "Option value → DOM id. Default: defaultOptionId(id, value).",
|
|
3550
|
+
"name": "getOptionId",
|
|
3551
|
+
"required": false,
|
|
3552
|
+
"type": "(value: string) => string"
|
|
3553
|
+
},
|
|
3554
|
+
{
|
|
3555
|
+
"description": "Accessible name of the list.",
|
|
3556
|
+
"name": "aria-label",
|
|
3557
|
+
"required": false,
|
|
3558
|
+
"type": "string"
|
|
3559
|
+
},
|
|
3560
|
+
{
|
|
3561
|
+
"default": "'listMaxH'",
|
|
3562
|
+
"description": "Size-token key capping the list's height; longer lists scroll. Default: listMaxH.",
|
|
3563
|
+
"name": "maxHeight",
|
|
3564
|
+
"required": false,
|
|
3565
|
+
"type": "ListboxMaxHeight",
|
|
3566
|
+
"union": [
|
|
3567
|
+
"listMaxH",
|
|
3568
|
+
"listMaxHSm"
|
|
3569
|
+
]
|
|
3570
|
+
},
|
|
3571
|
+
{
|
|
3572
|
+
"name": "children",
|
|
3573
|
+
"required": true,
|
|
3574
|
+
"type": "ReactNode"
|
|
3575
|
+
}
|
|
3576
|
+
],
|
|
3577
|
+
"sourcePath": "packages/ui/src/components/Listbox/Listbox.tsx"
|
|
3578
|
+
},
|
|
3579
|
+
"getAnchorProps": {
|
|
3580
|
+
"name": "getAnchorProps",
|
|
3581
|
+
"props": [
|
|
3582
|
+
{
|
|
3583
|
+
"name": "id",
|
|
3584
|
+
"required": true,
|
|
3585
|
+
"type": "string"
|
|
3586
|
+
},
|
|
3587
|
+
{
|
|
3588
|
+
"name": "open",
|
|
3589
|
+
"required": true,
|
|
3590
|
+
"type": "boolean"
|
|
3591
|
+
},
|
|
3592
|
+
{
|
|
3593
|
+
"name": "highlightedId",
|
|
3594
|
+
"required": true,
|
|
3595
|
+
"type": "string | null | undefined"
|
|
3596
|
+
}
|
|
3597
|
+
],
|
|
3598
|
+
"sourcePath": "packages/ui/src/components/Listbox/Listbox.tsx"
|
|
3599
|
+
}
|
|
3600
|
+
},
|
|
3601
|
+
"props": null,
|
|
3602
|
+
"sourcePath": "packages/ui/src/components/Listbox/Listbox.tsx"
|
|
3603
|
+
},
|
|
3366
3604
|
"Menu": {
|
|
3367
3605
|
"importPath": "@duro-app/ui",
|
|
3368
3606
|
"kind": "compound",
|
|
@@ -3379,7 +3617,7 @@
|
|
|
3379
3617
|
"Item"
|
|
3380
3618
|
]
|
|
3381
3619
|
},
|
|
3382
|
-
"description": "Dropdown action menu. Triggers actions (not value selection). Compound component — Root is required (throws without it). Menu.Trigger renders the button itself: give it the label (text, an Icon), never a Button.",
|
|
3620
|
+
"description": "Dropdown action menu. Triggers actions (not value selection). Compound component — Root is required (throws without it). Menu.Trigger renders the button itself: give it the label (text, an Icon), never a Button; an icon-only trigger takes aria-label, and variant=\"ghost\" suits toolbars. The popup is portalled and placed against the trigger (never clipped by a sticky or overflow ancestor), capped at sizes.listMaxH with scrolling, and takes focus on open (WAI-ARIA menu button); Escape closes only the menu, not an enclosing Popover or Dialog.",
|
|
3383
3621
|
"example": "<Menu.Root>\n <Menu.Trigger>Actions</Menu.Trigger>\n <Menu.Popup>\n <Menu.Item onClick={() => console.log('edit')}>Edit</Menu.Item>\n <Menu.Item onClick={() => console.log('duplicate')}>Duplicate</Menu.Item>\n <Menu.Separator />\n <Menu.LinkItem href=\"/settings\">Settings</Menu.LinkItem>\n </Menu.Popup>\n</Menu.Root>",
|
|
3384
3622
|
"relatedTo": [
|
|
3385
3623
|
{
|
|
@@ -3401,7 +3639,8 @@
|
|
|
3401
3639
|
"whenToUse": [
|
|
3402
3640
|
"Context menu or \"more actions\" dropdown",
|
|
3403
3641
|
"Navigation links in a dropdown",
|
|
3404
|
-
"Overflow menu for toolbar actions"
|
|
3642
|
+
"Overflow menu for toolbar actions",
|
|
3643
|
+
"A toolbar dropdown (align, insert) in an editor — Menu.Trigger variant=\"ghost\""
|
|
3405
3644
|
]
|
|
3406
3645
|
},
|
|
3407
3646
|
"name": "Menu",
|
|
@@ -3462,6 +3701,24 @@
|
|
|
3462
3701
|
"name": "children",
|
|
3463
3702
|
"required": true,
|
|
3464
3703
|
"type": "ReactNode"
|
|
3704
|
+
},
|
|
3705
|
+
{
|
|
3706
|
+
"description": "Controlled open state.",
|
|
3707
|
+
"name": "open",
|
|
3708
|
+
"required": false,
|
|
3709
|
+
"type": "boolean"
|
|
3710
|
+
},
|
|
3711
|
+
{
|
|
3712
|
+
"description": "Initial open state (uncontrolled).",
|
|
3713
|
+
"name": "defaultOpen",
|
|
3714
|
+
"required": false,
|
|
3715
|
+
"type": "boolean"
|
|
3716
|
+
},
|
|
3717
|
+
{
|
|
3718
|
+
"description": "Called when the menu opens or closes.",
|
|
3719
|
+
"name": "onOpenChange",
|
|
3720
|
+
"required": false,
|
|
3721
|
+
"type": "(open: boolean) => void"
|
|
3465
3722
|
}
|
|
3466
3723
|
],
|
|
3467
3724
|
"sourcePath": "packages/ui/src/components/Menu/Menu.tsx"
|
|
@@ -3478,6 +3735,24 @@
|
|
|
3478
3735
|
"name": "children",
|
|
3479
3736
|
"required": true,
|
|
3480
3737
|
"type": "ReactNode"
|
|
3738
|
+
},
|
|
3739
|
+
{
|
|
3740
|
+
"description": "Accessible name — required when the label is an icon only.",
|
|
3741
|
+
"name": "aria-label",
|
|
3742
|
+
"required": false,
|
|
3743
|
+
"type": "string"
|
|
3744
|
+
},
|
|
3745
|
+
{
|
|
3746
|
+
"default": "'default'",
|
|
3747
|
+
"description": "`ghost`: no border or fill until hover, for toolbars. Default: `default`.",
|
|
3748
|
+
"name": "variant",
|
|
3749
|
+
"required": false,
|
|
3750
|
+
"type": "MenuTriggerVariant"
|
|
3751
|
+
},
|
|
3752
|
+
{
|
|
3753
|
+
"name": "ref",
|
|
3754
|
+
"required": false,
|
|
3755
|
+
"type": "Ref<HTMLButtonElement>"
|
|
3481
3756
|
}
|
|
3482
3757
|
],
|
|
3483
3758
|
"sourcePath": "packages/ui/src/components/Menu/Menu.tsx"
|
|
@@ -5677,6 +5952,78 @@
|
|
|
5677
5952
|
],
|
|
5678
5953
|
"sourcePath": "packages/diagrams/src/components/Text/Text.tsx"
|
|
5679
5954
|
},
|
|
5955
|
+
"TextLink": {
|
|
5956
|
+
"importPath": "@duro-app/ui",
|
|
5957
|
+
"kind": "component",
|
|
5958
|
+
"meta": {
|
|
5959
|
+
"description": "Inline hyperlink for running text and standalone text links (\"View all\", \"Edit profile\"). Always underlined, so colour is never the only cue: default is accent text with an accent underline; subtle keeps the surrounding text colour with a muted underline and turns accent on hover. target=\"_blank\" defaults rel to noopener noreferrer.",
|
|
5960
|
+
"example": "<Text>\n Read the <TextLink href=\"/docs/migrate\">migration guide</TextLink> before you change seats, or{' '}\n <TextLink href=\"/plans\" variant=\"subtle\">compare plans</TextLink> first.\n</Text>",
|
|
5961
|
+
"relatedTo": [
|
|
5962
|
+
{
|
|
5963
|
+
"component": "LinkButton",
|
|
5964
|
+
"kind": "contrast",
|
|
5965
|
+
"relationship": "LinkButton is a hyperlink styled as a button; TextLink is a hyperlink styled as text"
|
|
5966
|
+
},
|
|
5967
|
+
{
|
|
5968
|
+
"component": "Button",
|
|
5969
|
+
"kind": "contrast",
|
|
5970
|
+
"relationship": "Button runs an action; TextLink navigates"
|
|
5971
|
+
}
|
|
5972
|
+
],
|
|
5973
|
+
"whenNotToUse": [
|
|
5974
|
+
"A link that should look like a button — use LinkButton",
|
|
5975
|
+
"An action that does not navigate — use Button (variant=\"link\" for a text-styled action)",
|
|
5976
|
+
"A link inside a dropdown — use Menu.LinkItem"
|
|
5977
|
+
],
|
|
5978
|
+
"whenToUse": [
|
|
5979
|
+
"A link inside a sentence or paragraph",
|
|
5980
|
+
"A standalone text link under a list or card (\"View all requests\")",
|
|
5981
|
+
"A quiet link in dense UI (variant=\"subtle\")"
|
|
5982
|
+
]
|
|
5983
|
+
},
|
|
5984
|
+
"name": "TextLink",
|
|
5985
|
+
"props": [
|
|
5986
|
+
{
|
|
5987
|
+
"name": "href",
|
|
5988
|
+
"required": true,
|
|
5989
|
+
"type": "string"
|
|
5990
|
+
},
|
|
5991
|
+
{
|
|
5992
|
+
"description": "`_blank` opens a new tab; `rel` then defaults to `noopener noreferrer`.",
|
|
5993
|
+
"name": "target",
|
|
5994
|
+
"required": false,
|
|
5995
|
+
"type": "'_blank' | '_self'"
|
|
5996
|
+
},
|
|
5997
|
+
{
|
|
5998
|
+
"name": "rel",
|
|
5999
|
+
"required": false,
|
|
6000
|
+
"type": "string"
|
|
6001
|
+
},
|
|
6002
|
+
{
|
|
6003
|
+
"default": "'default'",
|
|
6004
|
+
"description": "`default`: accent text with an accent underline. `subtle`: the surrounding text colour with a muted underline, accent on hover. Both stay underlined, so colour is never the only cue in running text.",
|
|
6005
|
+
"name": "variant",
|
|
6006
|
+
"required": false,
|
|
6007
|
+
"type": "TextLinkVariant",
|
|
6008
|
+
"union": [
|
|
6009
|
+
"default",
|
|
6010
|
+
"subtle"
|
|
6011
|
+
]
|
|
6012
|
+
},
|
|
6013
|
+
{
|
|
6014
|
+
"description": "Accessible name, when the visible text alone does not say where it goes.",
|
|
6015
|
+
"name": "aria-label",
|
|
6016
|
+
"required": false,
|
|
6017
|
+
"type": "string"
|
|
6018
|
+
},
|
|
6019
|
+
{
|
|
6020
|
+
"name": "children",
|
|
6021
|
+
"required": true,
|
|
6022
|
+
"type": "ReactNode"
|
|
6023
|
+
}
|
|
6024
|
+
],
|
|
6025
|
+
"sourcePath": "packages/ui/src/components/TextLink/TextLink.tsx"
|
|
6026
|
+
},
|
|
5680
6027
|
"Textarea": {
|
|
5681
6028
|
"importPath": "@duro-app/ui",
|
|
5682
6029
|
"kind": "component",
|
|
@@ -6410,6 +6757,38 @@
|
|
|
6410
6757
|
],
|
|
6411
6758
|
"sourcePath": "packages/ui/src/components/VirtualTable/VirtualTable.tsx"
|
|
6412
6759
|
},
|
|
6760
|
+
"VisuallyHidden": {
|
|
6761
|
+
"importPath": "@duro-app/ui",
|
|
6762
|
+
"kind": "component",
|
|
6763
|
+
"meta": {
|
|
6764
|
+
"description": "Text for assistive tech only: kept in the accessibility tree, clipped off screen. Gives words to an icon-only control or a visual-only cue.",
|
|
6765
|
+
"example": "<Button variant=\"secondary\">\n <Icon name=\"search\" size=\"sm\" />\n <VisuallyHidden>Search</VisuallyHidden>\n</Button>",
|
|
6766
|
+
"whenNotToUse": [
|
|
6767
|
+
"Naming a control that takes aria-label — pass aria-label instead",
|
|
6768
|
+
"Hiding content from everyone — render nothing, or use display: none"
|
|
6769
|
+
],
|
|
6770
|
+
"whenToUse": [
|
|
6771
|
+
"A label for an icon inside a control that has no aria-label prop",
|
|
6772
|
+
"Spelling out what a colour or icon shows (a status dot, \"(opens in a new tab)\")",
|
|
6773
|
+
"A heading that structures a page for screen readers without a visible title"
|
|
6774
|
+
]
|
|
6775
|
+
},
|
|
6776
|
+
"name": "VisuallyHidden",
|
|
6777
|
+
"props": [
|
|
6778
|
+
{
|
|
6779
|
+
"name": "children",
|
|
6780
|
+
"required": true,
|
|
6781
|
+
"type": "ReactNode"
|
|
6782
|
+
},
|
|
6783
|
+
{
|
|
6784
|
+
"description": "For aria-describedby / aria-labelledby to point at.",
|
|
6785
|
+
"name": "id",
|
|
6786
|
+
"required": false,
|
|
6787
|
+
"type": "string"
|
|
6788
|
+
}
|
|
6789
|
+
],
|
|
6790
|
+
"sourcePath": "packages/ui/src/components/VisuallyHidden/VisuallyHidden.tsx"
|
|
6791
|
+
},
|
|
6413
6792
|
"useColorMode": {
|
|
6414
6793
|
"importPath": "@duro-app/ui",
|
|
6415
6794
|
"kind": "hook",
|
|
@@ -7006,15 +7385,6 @@
|
|
|
7006
7385
|
},
|
|
7007
7386
|
"severity": "error"
|
|
7008
7387
|
},
|
|
7009
|
-
{
|
|
7010
|
-
"description": "Disallow non-zero flexGrow in css.create styles (react-strict-dom forces flex-grow: 0 on web)",
|
|
7011
|
-
"fixable": "none",
|
|
7012
|
-
"id": "duro/no-flex-grow-web",
|
|
7013
|
-
"messages": {
|
|
7014
|
-
"flexGrowForced": "flexGrow has no effect under react-strict-dom on web — the runtime forces computed flex-grow: 0, so this layout silently collapses. Lay out with a plain DOM scaffold, or absolute-position against a measured container."
|
|
7015
|
-
},
|
|
7016
|
-
"severity": "warn"
|
|
7017
|
-
},
|
|
7018
7388
|
{
|
|
7019
7389
|
"description": "Disallow raw px breakpoints in media-query strings; use breakpoints.<key>",
|
|
7020
7390
|
"fixable": "autofix",
|
|
@@ -7031,6 +7401,7 @@
|
|
|
7031
7401
|
"messages": {
|
|
7032
7402
|
"ambiguousMeasure": "{{value}} on `{{property}}` matches several {{group}} tokens ({{tokens}}). Pick the one that says what this measure is, from {{pkg}}/tokens/{{group}}.css.",
|
|
7033
7403
|
"missingMeasureToken": "{{value}} on `{{property}}` has no token. Add a token (design-system.a-missing-token-is-added-not-approximated) instead of using a raw value.",
|
|
7404
|
+
"nearestMeasureRole": "{{value}} on `{{property}}` has no token; nearest role: {{nearest}}. If this measure plays that role, use its token and take its value; if not, add a token (design-system.a-missing-token-is-added-not-approximated).",
|
|
7034
7405
|
"offScaleRadius": "{{value}} on `{{property}}` is off the radius scale ({{scale}}px). Use the nearest `radii.*` token from {{pkg}}/tokens/spacing.css, or disable this line with the reason.",
|
|
7035
7406
|
"offScaleSpacing": "{{value}} on `{{property}}` is off the spacing scale ({{scale}}px). Use the nearest `spacing.*` token from {{pkg}}/tokens/spacing.css, or disable this line with the reason.",
|
|
7036
7407
|
"rawBreakpoint": "{{value}}px in `{{key}}` is a raw breakpoint. Use `breakpoints.{{token}}` from {{pkg}}/tokens/breakpoints.css in a template-literal key (the scale is {{scale}}px).",
|
|
@@ -7044,7 +7415,9 @@
|
|
|
7044
7415
|
"rawMicroSpacing": "{{value}} on `{{property}}` is off the spacing scale; it is the {{token}} micro-spacing token. Use `microSpacing.{{token}}` from {{pkg}}/tokens/spacing.css, or the scale if the nudge is not needed.",
|
|
7045
7416
|
"rawRadius": "{{value}} on `{{property}}` is the {{token}} radius token. Use `radii.{{token}}` from {{pkg}}/tokens/spacing.css.",
|
|
7046
7417
|
"rawShadow": "'{{value}}' on `boxShadow` is a raw shadow. Use `shadows.{{token}}` from {{pkg}}/tokens/shadows.css.",
|
|
7418
|
+
"rawShadowLength": "{{value}} on `boxShadow` builds a shadow from a raw px length. Use a `shadows.*` token from {{pkg}}/tokens/shadows.css.",
|
|
7047
7419
|
"rawSpacing": "{{value}} on `{{property}}` is the {{token}} spacing token. Use `spacing.{{token}}` from {{pkg}}/tokens/spacing.css.",
|
|
7420
|
+
"rawTrack": "{{value}} on `{{property}}` sizes a track in px. Put a size token inside it: `minmax(${sizes.gridColSm}, 1fr)` from {{pkg}}/tokens/sizes.css.",
|
|
7048
7421
|
"replaceWithToken": "Replace with {{replacement}}"
|
|
7049
7422
|
},
|
|
7050
7423
|
"severity": "error"
|
|
@@ -7407,6 +7780,38 @@
|
|
|
7407
7780
|
"highContrast": "#ffffff",
|
|
7408
7781
|
"light": "#ffffff"
|
|
7409
7782
|
}
|
|
7783
|
+
},
|
|
7784
|
+
{
|
|
7785
|
+
"key": "overlayLight",
|
|
7786
|
+
"values": {
|
|
7787
|
+
"dark": "rgba(255, 255, 255, 0.78)",
|
|
7788
|
+
"highContrast": "rgba(255, 255, 255, 0.78)",
|
|
7789
|
+
"light": "rgba(255, 255, 255, 0.78)"
|
|
7790
|
+
}
|
|
7791
|
+
},
|
|
7792
|
+
{
|
|
7793
|
+
"key": "contrastSurface",
|
|
7794
|
+
"values": {
|
|
7795
|
+
"dark": "#f5f5f5",
|
|
7796
|
+
"highContrast": "#ffffff",
|
|
7797
|
+
"light": "#1a1a1a"
|
|
7798
|
+
}
|
|
7799
|
+
},
|
|
7800
|
+
{
|
|
7801
|
+
"key": "onContrastSurface",
|
|
7802
|
+
"values": {
|
|
7803
|
+
"dark": "#1a1a1a",
|
|
7804
|
+
"highContrast": "#000000",
|
|
7805
|
+
"light": "#e5e5e5"
|
|
7806
|
+
}
|
|
7807
|
+
},
|
|
7808
|
+
{
|
|
7809
|
+
"key": "contrastBorder",
|
|
7810
|
+
"values": {
|
|
7811
|
+
"dark": "rgba(0, 0, 0, 0.42)",
|
|
7812
|
+
"highContrast": "rgba(0, 0, 0, 0.42)",
|
|
7813
|
+
"light": "rgba(255, 255, 255, 0.33)"
|
|
7814
|
+
}
|
|
7410
7815
|
}
|
|
7411
7816
|
],
|
|
7412
7817
|
"exportName": "colors",
|
|
@@ -7611,6 +8016,14 @@
|
|
|
7611
8016
|
{
|
|
7612
8017
|
"key": "lg",
|
|
7613
8018
|
"value": "0 8px 24px rgba(0, 0, 0, 0.5)"
|
|
8019
|
+
},
|
|
8020
|
+
{
|
|
8021
|
+
"key": "dropReady",
|
|
8022
|
+
"value": "inset 0 0 0 1px #333333"
|
|
8023
|
+
},
|
|
8024
|
+
{
|
|
8025
|
+
"key": "dropOver",
|
|
8026
|
+
"value": "inset 0 0 0 2px #6aaffc"
|
|
7614
8027
|
}
|
|
7615
8028
|
],
|
|
7616
8029
|
"exportName": "shadows",
|
|
@@ -7809,6 +8222,130 @@
|
|
|
7809
8222
|
{
|
|
7810
8223
|
"key": "pageLg",
|
|
7811
8224
|
"value": "1200px"
|
|
8225
|
+
},
|
|
8226
|
+
{
|
|
8227
|
+
"key": "sidebarW",
|
|
8228
|
+
"value": "240px"
|
|
8229
|
+
},
|
|
8230
|
+
{
|
|
8231
|
+
"key": "pageXs",
|
|
8232
|
+
"value": "480px"
|
|
8233
|
+
},
|
|
8234
|
+
{
|
|
8235
|
+
"key": "pageXl",
|
|
8236
|
+
"value": "1440px"
|
|
8237
|
+
},
|
|
8238
|
+
{
|
|
8239
|
+
"key": "asideW",
|
|
8240
|
+
"value": "320px"
|
|
8241
|
+
},
|
|
8242
|
+
{
|
|
8243
|
+
"key": "gridColXs",
|
|
8244
|
+
"value": "200px"
|
|
8245
|
+
},
|
|
8246
|
+
{
|
|
8247
|
+
"key": "fieldMinWSm",
|
|
8248
|
+
"value": "80px"
|
|
8249
|
+
},
|
|
8250
|
+
{
|
|
8251
|
+
"key": "fieldMinW",
|
|
8252
|
+
"value": "160px"
|
|
8253
|
+
},
|
|
8254
|
+
{
|
|
8255
|
+
"key": "popoverWSm",
|
|
8256
|
+
"value": "240px"
|
|
8257
|
+
},
|
|
8258
|
+
{
|
|
8259
|
+
"key": "popoverW",
|
|
8260
|
+
"value": "320px"
|
|
8261
|
+
},
|
|
8262
|
+
{
|
|
8263
|
+
"key": "popupMaxW",
|
|
8264
|
+
"value": "280px"
|
|
8265
|
+
},
|
|
8266
|
+
{
|
|
8267
|
+
"key": "meterH",
|
|
8268
|
+
"value": "6px"
|
|
8269
|
+
},
|
|
8270
|
+
{
|
|
8271
|
+
"key": "skeletonChipW",
|
|
8272
|
+
"value": "96px"
|
|
8273
|
+
},
|
|
8274
|
+
{
|
|
8275
|
+
"key": "dropZoneMinH",
|
|
8276
|
+
"value": "128px"
|
|
8277
|
+
},
|
|
8278
|
+
{
|
|
8279
|
+
"key": "canvasMinH",
|
|
8280
|
+
"value": "480px"
|
|
8281
|
+
},
|
|
8282
|
+
{
|
|
8283
|
+
"key": "editorMinH",
|
|
8284
|
+
"value": "160px"
|
|
8285
|
+
},
|
|
8286
|
+
{
|
|
8287
|
+
"key": "toolbarH",
|
|
8288
|
+
"value": "36px"
|
|
8289
|
+
},
|
|
8290
|
+
{
|
|
8291
|
+
"key": "embedW",
|
|
8292
|
+
"value": "550px"
|
|
8293
|
+
},
|
|
8294
|
+
{
|
|
8295
|
+
"key": "colorPickerW",
|
|
8296
|
+
"value": "196px"
|
|
8297
|
+
},
|
|
8298
|
+
{
|
|
8299
|
+
"key": "colorAreaH",
|
|
8300
|
+
"value": "150px"
|
|
8301
|
+
},
|
|
8302
|
+
{
|
|
8303
|
+
"key": "colorTrackH",
|
|
8304
|
+
"value": "12px"
|
|
8305
|
+
},
|
|
8306
|
+
{
|
|
8307
|
+
"key": "colorSwatch",
|
|
8308
|
+
"value": "20px"
|
|
8309
|
+
},
|
|
8310
|
+
{
|
|
8311
|
+
"key": "colorPreviewH",
|
|
8312
|
+
"value": "22px"
|
|
8313
|
+
},
|
|
8314
|
+
{
|
|
8315
|
+
"key": "handle",
|
|
8316
|
+
"value": "16px"
|
|
8317
|
+
},
|
|
8318
|
+
{
|
|
8319
|
+
"key": "chip",
|
|
8320
|
+
"value": "24px"
|
|
8321
|
+
},
|
|
8322
|
+
{
|
|
8323
|
+
"key": "placeholderMinH",
|
|
8324
|
+
"value": "80px"
|
|
8325
|
+
},
|
|
8326
|
+
{
|
|
8327
|
+
"key": "previewMaxH",
|
|
8328
|
+
"value": "320px"
|
|
8329
|
+
},
|
|
8330
|
+
{
|
|
8331
|
+
"key": "barH",
|
|
8332
|
+
"value": "4px"
|
|
8333
|
+
},
|
|
8334
|
+
{
|
|
8335
|
+
"key": "readoutW",
|
|
8336
|
+
"value": "40px"
|
|
8337
|
+
},
|
|
8338
|
+
{
|
|
8339
|
+
"key": "sliderW",
|
|
8340
|
+
"value": "96px"
|
|
8341
|
+
},
|
|
8342
|
+
{
|
|
8343
|
+
"key": "paletteMinW",
|
|
8344
|
+
"value": "96px"
|
|
8345
|
+
},
|
|
8346
|
+
{
|
|
8347
|
+
"key": "deviceBarW",
|
|
8348
|
+
"value": "96px"
|
|
7812
8349
|
}
|
|
7813
8350
|
],
|
|
7814
8351
|
"exportName": "sizes",
|
|
@@ -7959,7 +8496,7 @@
|
|
|
7959
8496
|
"importPath": "@duro-app/tokens/tokens/typography.css"
|
|
7960
8497
|
}
|
|
7961
8498
|
},
|
|
7962
|
-
"mockupCss": "/*\n * GENERATED by scripts/generate-mockup-css.mjs — do not edit.\n *\n * The design tokens as resolved values, for HTML that loads no stylesheet\n * (mockup artboards, static previews). Same names as vars.css; where vars.css\n * follows the live theme, this file carries every theme and switches on\n * <html data-theme=\"light|high-contrast\">.\n *\n * Inside the component library and the apps, never use this: go through\n * css.create() and the token imports, or vars.css from plain CSS.\n */\n:root {\n color-scheme: dark;\n /* colors */\n --duro-color-accent: #6aaffc;\n --duro-color-accent-contrast: #000000;\n --duro-color-accent-hover: #93c5fd;\n --duro-color-bg: #0f0f0f;\n --duro-color-bg-card: #1a1a1a;\n --duro-color-bg-card-hover: #242424;\n --duro-color-border: #333333;\n --duro-color-error: #f87171;\n --duro-color-error-bg: rgba(248, 113, 113, 0.1);\n --duro-color-error-border: rgba(248, 113, 113, 0.3);\n --duro-color-error-contrast: #000000;\n --duro-color-error-hover: #fca5a5;\n --duro-color-error-text: #fca5a5;\n --duro-color-fixed-light: #ffffff;\n --duro-color-info: #6aaffc;\n --duro-color-info-bg: rgba(106, 175, 252, 0.1);\n --duro-color-info-border: rgba(106, 175, 252, 0.3);\n --duro-color-info-text: #93c5fd;\n --duro-color-inverse-border: rgba(0, 0, 0, 0.55);\n --duro-color-inverse-border-hover: rgba(0, 0, 0, 0.70);\n --duro-color-inverse-fill: rgba(0, 0, 0, 0.10);\n --duro-color-inverse-fill-hover: rgba(0, 0, 0, 0.18);\n --duro-color-scrim: rgba(0, 0, 0, 0.4);\n --duro-color-success: #22c55e;\n --duro-color-success-bg: rgba(34, 197, 94, 0.1);\n --duro-color-success-border: rgba(34, 197, 94, 0.3);\n --duro-color-success-text: #86efac;\n --duro-color-text: #e5e5e5;\n --duro-color-text-muted: #b0b0b0;\n --duro-color-warning: #fbbf24;\n --duro-color-warning-bg: rgba(251, 191, 36, 0.1);\n --duro-color-warning-border: rgba(251, 191, 36, 0.3);\n --duro-color-warning-text: #fde68a;\n /* shadows */\n --duro-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);\n --duro-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);\n --duro-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.3);\n /* spacing */\n --duro-spacing-lg: 24px;\n --duro-spacing-md: 16px;\n --duro-spacing-ms: 12px;\n --duro-spacing-sm: 8px;\n --duro-spacing-xl: 32px;\n --duro-spacing-xs: 4px;\n --duro-spacing-xxl: 48px;\n --duro-spacing-xxxl: 64px;\n /* microSpacing */\n --duro-micro-spacing-px1: 1px;\n --duro-micro-spacing-px2: 2px;\n --duro-micro-spacing-px3: 3px;\n --duro-micro-spacing-px5: 5px;\n --duro-micro-spacing-px6: 6px;\n /* radii */\n --duro-radius-full: 9999px;\n --duro-radius-lg: 16px;\n --duro-radius-md: 12px;\n --duro-radius-px6: 6px;\n --duro-radius-sm: 8px;\n --duro-radius-xs: 4px;\n /* sizes */\n --duro-size-check-mark-h: 9px;\n --duro-size-check-mark-w: 5px;\n --duro-size-control-lg: 40px;\n --duro-size-control-md: 39px;\n --duro-size-control-sm: 28px;\n --duro-size-dialog-lg: 680px;\n --duro-size-dialog-md: 520px;\n --duro-size-dialog-sm: 400px;\n --duro-size-divider: 1px;\n --duro-size-edge-fade: 32px;\n --duro-size-glyph-md: 16px;\n --duro-size-glyph-sm: 12px;\n --duro-size-glyph-xs: 10px;\n --duro-size-grid-col-md: 280px;\n --duro-size-grid-col-sm: 240px;\n --duro-size-icon-button: 32px;\n --duro-size-icon-button-sm: 28px;\n --duro-size-icon-lg: 24px;\n --duro-size-icon-md: 18px;\n --duro-size-icon-sm: 16px;\n --duro-size-icon-xl: 36px;\n --duro-size-icon-xxl: 48px;\n --duro-size-indicator: 18px;\n --duro-size-indicator-dot: 8px;\n --duro-size-label-min-w: 120px;\n --duro-size-list-max-h: 280px;\n --duro-size-list-max-h-sm: 200px;\n --duro-size-nav-marker-h: 18px;\n --duro-size-nav-marker-w: 3px;\n --duro-size-page-lg: 1200px;\n --duro-size-page-md: 800px;\n --duro-size-page-sm: 600px;\n --duro-size-panel-lg: 640px;\n --duro-size-panel-md: 480px;\n --duro-size-panel-sm: 360px;\n --duro-size-popup-min-w: 160px;\n --duro-size-scrollbar: 8px;\n --duro-size-spinner-lg: 40px;\n --duro-size-spinner-md: 24px;\n --duro-size-spinner-sm: 16px;\n --duro-size-swatch-h: 34px;\n --duro-size-swatch-w: 44px;\n --duro-size-switch-thumb: 16px;\n --duro-size-switch-track-h: 20px;\n --duro-size-switch-track-w: 36px;\n --duro-size-tab-indicator: 2px;\n --duro-size-toast-max-w: 440px;\n --duro-size-touch-target: 44px;\n /* borders */\n --duro-border-accent: 3px;\n --duro-border-focus-offset: 2px;\n --duro-border-focus-offset-sm: 1px;\n --duro-border-focus-ring: 2px;\n --duro-border-hairline: 1px;\n --duro-border-strong: 2px;\n /* layoutSpacing */\n --duro-layout-spacing-container-lg: 32px;\n --duro-layout-spacing-container-md: 24px;\n --duro-layout-spacing-container-sm: 16px;\n --duro-layout-spacing-inline-lg: 24px;\n --duro-layout-spacing-inline-md: 16px;\n --duro-layout-spacing-inline-sm: 8px;\n --duro-layout-spacing-inline-xs: 4px;\n --duro-layout-spacing-stack-lg: 24px;\n --duro-layout-spacing-stack-md: 16px;\n --duro-layout-spacing-stack-sm: 8px;\n --duro-layout-spacing-stack-xl: 48px;\n --duro-layout-spacing-stack-xs: 4px;\n /* typography */\n --duro-typography-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n --duro-typography-font-family-mono: \"SF Mono\", \"Fira Code\", \"Fira Mono\", \"Roboto Mono\", \"Courier New\", monospace;\n --duro-typography-font-size-heading: 1.5rem;\n --duro-typography-font-size-lg: 1.125rem;\n --duro-typography-font-size-md: 1rem;\n --duro-typography-font-size-sm: 0.875rem;\n --duro-typography-font-size-xl: 1.25rem;\n --duro-typography-font-size-xs: 0.75rem;\n --duro-typography-font-weight-bold: 700;\n --duro-typography-font-weight-medium: 500;\n --duro-typography-font-weight-normal: 400;\n --duro-typography-font-weight-semibold: 600;\n --duro-typography-line-height: 1.5;\n /* typeScale */\n --duro-type-scale-display-lg: clamp(3.5rem, 2rem + 3.5vw, 4.5rem);\n --duro-type-scale-display-md: clamp(2.75rem, 1.75rem + 2.5vw, 3.75rem);\n --duro-type-scale-display-sm: clamp(2.25rem, 1.5rem + 2vw, 3rem);\n --duro-type-scale-font-size1: 0.75rem;\n --duro-type-scale-font-size2: 0.8125rem;\n --duro-type-scale-font-size3: 0.875rem;\n --duro-type-scale-font-size4: 1rem;\n --duro-type-scale-font-size5: 1.125rem;\n --duro-type-scale-font-size6: 1.25rem;\n --duro-type-scale-font-size7: 1.5rem;\n --duro-type-scale-font-size8: 1.875rem;\n --duro-type-scale-font-size9: 2.25rem;\n --duro-type-scale-letter-spacing-normal: 0;\n --duro-type-scale-letter-spacing-tight: -0.02em;\n --duro-type-scale-letter-spacing-wide: 0.04em;\n --duro-type-scale-line-height1: 1rem;\n --duro-type-scale-line-height2: 1.25rem;\n --duro-type-scale-line-height3: 1.25rem;\n --duro-type-scale-line-height4: 1.5rem;\n --duro-type-scale-line-height5: 1.5rem;\n --duro-type-scale-line-height6: 1.75rem;\n --duro-type-scale-line-height7: 2rem;\n --duro-type-scale-line-height8: 2.25rem;\n --duro-type-scale-line-height9: 2.75rem;\n /* duration */\n --duro-duration-base: 200ms;\n --duro-duration-brisk: 160ms;\n --duro-duration-fast: 150ms;\n --duro-duration-instant: 0ms;\n --duro-duration-minimal: 1ms;\n --duro-duration-quick: 120ms;\n --duro-duration-slow: 280ms;\n /* easing */\n --duro-easing-ease-in: cubic-bezier(0.72, 0, 0.68, 0.28);\n --duro-easing-ease-out: cubic-bezier(0.32, 0.72, 0, 1);\n --duro-easing-linear: linear;\n --duro-easing-standard: ease;\n /* breakpoints */\n --duro-breakpoint-lg: 1024px;\n --duro-breakpoint-md: 768px;\n --duro-breakpoint-sm: 640px;\n --duro-breakpoint-xl: 1280px;\n --duro-breakpoint-xs: 480px;\n}\n\n:root[data-theme=\"light\"] {\n color-scheme: light;\n /* colors */\n --duro-color-accent: #1e40af;\n --duro-color-accent-contrast: #ffffff;\n --duro-color-accent-hover: #1a3799;\n --duro-color-bg: #ffffff;\n --duro-color-bg-card: #f5f5f5;\n --duro-color-bg-card-hover: #ebebeb;\n --duro-color-border: #d4d4d4;\n --duro-color-error: #991b1b;\n --duro-color-error-bg: rgba(153, 27, 27, 0.08);\n --duro-color-error-border: rgba(153, 27, 27, 0.3);\n --duro-color-error-contrast: #ffffff;\n --duro-color-error-hover: #7f1d1d;\n --duro-color-error-text: #7f1d1d;\n --duro-color-fixed-light: #ffffff;\n --duro-color-info: #1e40af;\n --duro-color-info-bg: rgba(30, 64, 175, 0.08);\n --duro-color-info-border: rgba(30, 64, 175, 0.3);\n --duro-color-info-text: #1e40af;\n --duro-color-inverse-border: rgba(0, 0, 0, 0.55);\n --duro-color-inverse-border-hover: rgba(0, 0, 0, 0.70);\n --duro-color-inverse-fill: rgba(0, 0, 0, 0.10);\n --duro-color-inverse-fill-hover: rgba(0, 0, 0, 0.18);\n --duro-color-scrim: rgba(0, 0, 0, 0.4);\n --duro-color-success: #166534;\n --duro-color-success-bg: rgba(22, 101, 52, 0.08);\n --duro-color-success-border: rgba(22, 101, 52, 0.3);\n --duro-color-success-text: #14532d;\n --duro-color-text: #1a1a1a;\n --duro-color-text-muted: #4a4a4a;\n --duro-color-warning: #92400e;\n --duro-color-warning-bg: rgba(146, 64, 14, 0.08);\n --duro-color-warning-border: rgba(146, 64, 14, 0.3);\n --duro-color-warning-text: #78350f;\n /* shadows */\n --duro-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.16);\n --duro-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.12);\n --duro-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n:root[data-theme=\"high-contrast\"] {\n color-scheme: dark;\n /* colors */\n --duro-color-accent: #60a5fa;\n --duro-color-accent-contrast: #000000;\n --duro-color-accent-hover: #93c5fd;\n --duro-color-bg: #000000;\n --duro-color-bg-card: #111111;\n --duro-color-bg-card-hover: #1a1a1a;\n --duro-color-border: #555555;\n --duro-color-error: #f87171;\n --duro-color-error-bg: rgba(248, 113, 113, 0.15);\n --duro-color-error-border: rgba(248, 113, 113, 0.5);\n --duro-color-error-contrast: #000000;\n --duro-color-error-hover: #fca5a5;\n --duro-color-error-text: #fca5a5;\n --duro-color-fixed-light: #ffffff;\n --duro-color-info: #60a5fa;\n --duro-color-info-bg: rgba(96, 165, 250, 0.15);\n --duro-color-info-border: rgba(96, 165, 250, 0.5);\n --duro-color-info-text: #bfdbfe;\n --duro-color-inverse-border: rgba(0, 0, 0, 0.55);\n --duro-color-inverse-border-hover: rgba(0, 0, 0, 0.70);\n --duro-color-inverse-fill: rgba(0, 0, 0, 0.10);\n --duro-color-inverse-fill-hover: rgba(0, 0, 0, 0.18);\n --duro-color-scrim: rgba(0, 0, 0, 0.4);\n --duro-color-success: #4ade80;\n --duro-color-success-bg: rgba(74, 222, 128, 0.15);\n --duro-color-success-border: rgba(74, 222, 128, 0.5);\n --duro-color-success-text: #86efac;\n --duro-color-text: #ffffff;\n --duro-color-text-muted: #b0b0b0;\n --duro-color-warning: #fcd34d;\n --duro-color-warning-bg: rgba(252, 211, 77, 0.15);\n --duro-color-warning-border: rgba(252, 211, 77, 0.5);\n --duro-color-warning-text: #fef08a;\n /* shadows */\n --duro-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.8);\n --duro-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.7);\n --duro-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.6);\n}\n"
|
|
8499
|
+
"mockupCss": "/*\n * GENERATED by scripts/generate-mockup-css.mjs — do not edit.\n *\n * The design tokens as resolved values, for HTML that loads no stylesheet\n * (mockup artboards, static previews). Same names as vars.css; where vars.css\n * follows the live theme, this file carries every theme and switches on\n * <html data-theme=\"light|high-contrast\">.\n *\n * Inside the component library and the apps, never use this: go through\n * css.create() and the token imports, or vars.css from plain CSS.\n */\n:root {\n color-scheme: dark;\n /* colors */\n --duro-color-accent: #6aaffc;\n --duro-color-accent-contrast: #000000;\n --duro-color-accent-hover: #93c5fd;\n --duro-color-bg: #0f0f0f;\n --duro-color-bg-card: #1a1a1a;\n --duro-color-bg-card-hover: #242424;\n --duro-color-border: #333333;\n --duro-color-contrast-border: rgba(0, 0, 0, 0.42);\n --duro-color-contrast-surface: #f5f5f5;\n --duro-color-error: #f87171;\n --duro-color-error-bg: rgba(248, 113, 113, 0.1);\n --duro-color-error-border: rgba(248, 113, 113, 0.3);\n --duro-color-error-contrast: #000000;\n --duro-color-error-hover: #fca5a5;\n --duro-color-error-text: #fca5a5;\n --duro-color-fixed-light: #ffffff;\n --duro-color-info: #6aaffc;\n --duro-color-info-bg: rgba(106, 175, 252, 0.1);\n --duro-color-info-border: rgba(106, 175, 252, 0.3);\n --duro-color-info-text: #93c5fd;\n --duro-color-inverse-border: rgba(0, 0, 0, 0.55);\n --duro-color-inverse-border-hover: rgba(0, 0, 0, 0.70);\n --duro-color-inverse-fill: rgba(0, 0, 0, 0.10);\n --duro-color-inverse-fill-hover: rgba(0, 0, 0, 0.18);\n --duro-color-on-contrast-surface: #1a1a1a;\n --duro-color-overlay-light: rgba(255, 255, 255, 0.78);\n --duro-color-scrim: rgba(0, 0, 0, 0.4);\n --duro-color-success: #22c55e;\n --duro-color-success-bg: rgba(34, 197, 94, 0.1);\n --duro-color-success-border: rgba(34, 197, 94, 0.3);\n --duro-color-success-text: #86efac;\n --duro-color-text: #e5e5e5;\n --duro-color-text-muted: #b0b0b0;\n --duro-color-warning: #fbbf24;\n --duro-color-warning-bg: rgba(251, 191, 36, 0.1);\n --duro-color-warning-border: rgba(251, 191, 36, 0.3);\n --duro-color-warning-text: #fde68a;\n /* shadows */\n --duro-shadow-drop-over: inset 0 0 0 2px #6aaffc;\n --duro-shadow-drop-ready: inset 0 0 0 1px #333333;\n --duro-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);\n --duro-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);\n --duro-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.3);\n /* spacing */\n --duro-spacing-lg: 24px;\n --duro-spacing-md: 16px;\n --duro-spacing-ms: 12px;\n --duro-spacing-sm: 8px;\n --duro-spacing-xl: 32px;\n --duro-spacing-xs: 4px;\n --duro-spacing-xxl: 48px;\n --duro-spacing-xxxl: 64px;\n /* microSpacing */\n --duro-micro-spacing-px1: 1px;\n --duro-micro-spacing-px2: 2px;\n --duro-micro-spacing-px3: 3px;\n --duro-micro-spacing-px5: 5px;\n --duro-micro-spacing-px6: 6px;\n /* radii */\n --duro-radius-full: 9999px;\n --duro-radius-lg: 16px;\n --duro-radius-md: 12px;\n --duro-radius-px6: 6px;\n --duro-radius-sm: 8px;\n --duro-radius-xs: 4px;\n /* sizes */\n --duro-size-aside-w: 320px;\n --duro-size-bar-h: 4px;\n --duro-size-canvas-min-h: 480px;\n --duro-size-check-mark-h: 9px;\n --duro-size-check-mark-w: 5px;\n --duro-size-chip: 24px;\n --duro-size-color-area-h: 150px;\n --duro-size-color-picker-w: 196px;\n --duro-size-color-preview-h: 22px;\n --duro-size-color-swatch: 20px;\n --duro-size-color-track-h: 12px;\n --duro-size-control-lg: 40px;\n --duro-size-control-md: 39px;\n --duro-size-control-sm: 28px;\n --duro-size-device-bar-w: 96px;\n --duro-size-dialog-lg: 680px;\n --duro-size-dialog-md: 520px;\n --duro-size-dialog-sm: 400px;\n --duro-size-divider: 1px;\n --duro-size-drop-zone-min-h: 128px;\n --duro-size-edge-fade: 32px;\n --duro-size-editor-min-h: 160px;\n --duro-size-embed-w: 550px;\n --duro-size-field-min-w: 160px;\n --duro-size-field-min-w-sm: 80px;\n --duro-size-glyph-md: 16px;\n --duro-size-glyph-sm: 12px;\n --duro-size-glyph-xs: 10px;\n --duro-size-grid-col-md: 280px;\n --duro-size-grid-col-sm: 240px;\n --duro-size-grid-col-xs: 200px;\n --duro-size-handle: 16px;\n --duro-size-icon-button: 32px;\n --duro-size-icon-button-sm: 28px;\n --duro-size-icon-lg: 24px;\n --duro-size-icon-md: 18px;\n --duro-size-icon-sm: 16px;\n --duro-size-icon-xl: 36px;\n --duro-size-icon-xxl: 48px;\n --duro-size-indicator: 18px;\n --duro-size-indicator-dot: 8px;\n --duro-size-label-min-w: 120px;\n --duro-size-list-max-h: 280px;\n --duro-size-list-max-h-sm: 200px;\n --duro-size-meter-h: 6px;\n --duro-size-nav-marker-h: 18px;\n --duro-size-nav-marker-w: 3px;\n --duro-size-page-lg: 1200px;\n --duro-size-page-md: 800px;\n --duro-size-page-sm: 600px;\n --duro-size-page-xl: 1440px;\n --duro-size-page-xs: 480px;\n --duro-size-palette-min-w: 96px;\n --duro-size-panel-lg: 640px;\n --duro-size-panel-md: 480px;\n --duro-size-panel-sm: 360px;\n --duro-size-placeholder-min-h: 80px;\n --duro-size-popover-w: 320px;\n --duro-size-popover-w-sm: 240px;\n --duro-size-popup-max-w: 280px;\n --duro-size-popup-min-w: 160px;\n --duro-size-preview-max-h: 320px;\n --duro-size-readout-w: 40px;\n --duro-size-scrollbar: 8px;\n --duro-size-sidebar-w: 240px;\n --duro-size-skeleton-chip-w: 96px;\n --duro-size-slider-w: 96px;\n --duro-size-spinner-lg: 40px;\n --duro-size-spinner-md: 24px;\n --duro-size-spinner-sm: 16px;\n --duro-size-swatch-h: 34px;\n --duro-size-swatch-w: 44px;\n --duro-size-switch-thumb: 16px;\n --duro-size-switch-track-h: 20px;\n --duro-size-switch-track-w: 36px;\n --duro-size-tab-indicator: 2px;\n --duro-size-toast-max-w: 440px;\n --duro-size-toolbar-h: 36px;\n --duro-size-touch-target: 44px;\n /* borders */\n --duro-border-accent: 3px;\n --duro-border-focus-offset: 2px;\n --duro-border-focus-offset-sm: 1px;\n --duro-border-focus-ring: 2px;\n --duro-border-hairline: 1px;\n --duro-border-strong: 2px;\n /* layoutSpacing */\n --duro-layout-spacing-container-lg: 32px;\n --duro-layout-spacing-container-md: 24px;\n --duro-layout-spacing-container-sm: 16px;\n --duro-layout-spacing-inline-lg: 24px;\n --duro-layout-spacing-inline-md: 16px;\n --duro-layout-spacing-inline-sm: 8px;\n --duro-layout-spacing-inline-xs: 4px;\n --duro-layout-spacing-stack-lg: 24px;\n --duro-layout-spacing-stack-md: 16px;\n --duro-layout-spacing-stack-sm: 8px;\n --duro-layout-spacing-stack-xl: 48px;\n --duro-layout-spacing-stack-xs: 4px;\n /* typography */\n --duro-typography-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n --duro-typography-font-family-mono: \"SF Mono\", \"Fira Code\", \"Fira Mono\", \"Roboto Mono\", \"Courier New\", monospace;\n --duro-typography-font-size-heading: 1.5rem;\n --duro-typography-font-size-lg: 1.125rem;\n --duro-typography-font-size-md: 1rem;\n --duro-typography-font-size-sm: 0.875rem;\n --duro-typography-font-size-xl: 1.25rem;\n --duro-typography-font-size-xs: 0.75rem;\n --duro-typography-font-weight-bold: 700;\n --duro-typography-font-weight-medium: 500;\n --duro-typography-font-weight-normal: 400;\n --duro-typography-font-weight-semibold: 600;\n --duro-typography-line-height: 1.5;\n /* typeScale */\n --duro-type-scale-display-lg: clamp(3.5rem, 2rem + 3.5vw, 4.5rem);\n --duro-type-scale-display-md: clamp(2.75rem, 1.75rem + 2.5vw, 3.75rem);\n --duro-type-scale-display-sm: clamp(2.25rem, 1.5rem + 2vw, 3rem);\n --duro-type-scale-font-size1: 0.75rem;\n --duro-type-scale-font-size2: 0.8125rem;\n --duro-type-scale-font-size3: 0.875rem;\n --duro-type-scale-font-size4: 1rem;\n --duro-type-scale-font-size5: 1.125rem;\n --duro-type-scale-font-size6: 1.25rem;\n --duro-type-scale-font-size7: 1.5rem;\n --duro-type-scale-font-size8: 1.875rem;\n --duro-type-scale-font-size9: 2.25rem;\n --duro-type-scale-letter-spacing-normal: 0;\n --duro-type-scale-letter-spacing-tight: -0.02em;\n --duro-type-scale-letter-spacing-wide: 0.04em;\n --duro-type-scale-line-height1: 1rem;\n --duro-type-scale-line-height2: 1.25rem;\n --duro-type-scale-line-height3: 1.25rem;\n --duro-type-scale-line-height4: 1.5rem;\n --duro-type-scale-line-height5: 1.5rem;\n --duro-type-scale-line-height6: 1.75rem;\n --duro-type-scale-line-height7: 2rem;\n --duro-type-scale-line-height8: 2.25rem;\n --duro-type-scale-line-height9: 2.75rem;\n /* duration */\n --duro-duration-base: 200ms;\n --duro-duration-brisk: 160ms;\n --duro-duration-fast: 150ms;\n --duro-duration-instant: 0ms;\n --duro-duration-minimal: 1ms;\n --duro-duration-quick: 120ms;\n --duro-duration-slow: 280ms;\n /* easing */\n --duro-easing-ease-in: cubic-bezier(0.72, 0, 0.68, 0.28);\n --duro-easing-ease-out: cubic-bezier(0.32, 0.72, 0, 1);\n --duro-easing-linear: linear;\n --duro-easing-standard: ease;\n /* breakpoints */\n --duro-breakpoint-lg: 1024px;\n --duro-breakpoint-md: 768px;\n --duro-breakpoint-sm: 640px;\n --duro-breakpoint-xl: 1280px;\n --duro-breakpoint-xs: 480px;\n}\n\n:root[data-theme=\"light\"] {\n color-scheme: light;\n /* colors */\n --duro-color-accent: #1e40af;\n --duro-color-accent-contrast: #ffffff;\n --duro-color-accent-hover: #1a3799;\n --duro-color-bg: #ffffff;\n --duro-color-bg-card: #f5f5f5;\n --duro-color-bg-card-hover: #ebebeb;\n --duro-color-border: #d4d4d4;\n --duro-color-contrast-border: rgba(255, 255, 255, 0.33);\n --duro-color-contrast-surface: #1a1a1a;\n --duro-color-error: #991b1b;\n --duro-color-error-bg: rgba(153, 27, 27, 0.08);\n --duro-color-error-border: rgba(153, 27, 27, 0.3);\n --duro-color-error-contrast: #ffffff;\n --duro-color-error-hover: #7f1d1d;\n --duro-color-error-text: #7f1d1d;\n --duro-color-fixed-light: #ffffff;\n --duro-color-info: #1e40af;\n --duro-color-info-bg: rgba(30, 64, 175, 0.08);\n --duro-color-info-border: rgba(30, 64, 175, 0.3);\n --duro-color-info-text: #1e40af;\n --duro-color-inverse-border: rgba(0, 0, 0, 0.55);\n --duro-color-inverse-border-hover: rgba(0, 0, 0, 0.70);\n --duro-color-inverse-fill: rgba(0, 0, 0, 0.10);\n --duro-color-inverse-fill-hover: rgba(0, 0, 0, 0.18);\n --duro-color-on-contrast-surface: #e5e5e5;\n --duro-color-overlay-light: rgba(255, 255, 255, 0.78);\n --duro-color-scrim: rgba(0, 0, 0, 0.4);\n --duro-color-success: #166534;\n --duro-color-success-bg: rgba(22, 101, 52, 0.08);\n --duro-color-success-border: rgba(22, 101, 52, 0.3);\n --duro-color-success-text: #14532d;\n --duro-color-text: #1a1a1a;\n --duro-color-text-muted: #4a4a4a;\n --duro-color-warning: #92400e;\n --duro-color-warning-bg: rgba(146, 64, 14, 0.08);\n --duro-color-warning-border: rgba(146, 64, 14, 0.3);\n --duro-color-warning-text: #78350f;\n /* shadows */\n --duro-shadow-drop-over: inset 0 0 0 2px #1e40af;\n --duro-shadow-drop-ready: inset 0 0 0 1px #d4d4d4;\n --duro-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.16);\n --duro-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.12);\n --duro-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.08);\n}\n\n:root[data-theme=\"high-contrast\"] {\n color-scheme: dark;\n /* colors */\n --duro-color-accent: #60a5fa;\n --duro-color-accent-contrast: #000000;\n --duro-color-accent-hover: #93c5fd;\n --duro-color-bg: #000000;\n --duro-color-bg-card: #111111;\n --duro-color-bg-card-hover: #1a1a1a;\n --duro-color-border: #555555;\n --duro-color-contrast-border: rgba(0, 0, 0, 0.42);\n --duro-color-contrast-surface: #ffffff;\n --duro-color-error: #f87171;\n --duro-color-error-bg: rgba(248, 113, 113, 0.15);\n --duro-color-error-border: rgba(248, 113, 113, 0.5);\n --duro-color-error-contrast: #000000;\n --duro-color-error-hover: #fca5a5;\n --duro-color-error-text: #fca5a5;\n --duro-color-fixed-light: #ffffff;\n --duro-color-info: #60a5fa;\n --duro-color-info-bg: rgba(96, 165, 250, 0.15);\n --duro-color-info-border: rgba(96, 165, 250, 0.5);\n --duro-color-info-text: #bfdbfe;\n --duro-color-inverse-border: rgba(0, 0, 0, 0.55);\n --duro-color-inverse-border-hover: rgba(0, 0, 0, 0.70);\n --duro-color-inverse-fill: rgba(0, 0, 0, 0.10);\n --duro-color-inverse-fill-hover: rgba(0, 0, 0, 0.18);\n --duro-color-on-contrast-surface: #000000;\n --duro-color-overlay-light: rgba(255, 255, 255, 0.78);\n --duro-color-scrim: rgba(0, 0, 0, 0.4);\n --duro-color-success: #4ade80;\n --duro-color-success-bg: rgba(74, 222, 128, 0.15);\n --duro-color-success-border: rgba(74, 222, 128, 0.5);\n --duro-color-success-text: #86efac;\n --duro-color-text: #ffffff;\n --duro-color-text-muted: #b0b0b0;\n --duro-color-warning: #fcd34d;\n --duro-color-warning-bg: rgba(252, 211, 77, 0.15);\n --duro-color-warning-border: rgba(252, 211, 77, 0.5);\n --duro-color-warning-text: #fef08a;\n /* shadows */\n --duro-shadow-drop-over: inset 0 0 0 2px #60a5fa;\n --duro-shadow-drop-ready: inset 0 0 0 1px #555555;\n --duro-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.8);\n --duro-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.7);\n --duro-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.6);\n}\n"
|
|
7963
8500
|
},
|
|
7964
8501
|
"unions": {
|
|
7965
8502
|
"AlertVariant": [
|
|
@@ -8109,7 +8646,8 @@
|
|
|
8109
8646
|
],
|
|
8110
8647
|
"InputVariant": [
|
|
8111
8648
|
"default",
|
|
8112
|
-
"error"
|
|
8649
|
+
"error",
|
|
8650
|
+
"ghost"
|
|
8113
8651
|
],
|
|
8114
8652
|
"LabelPosition": [
|
|
8115
8653
|
"top",
|
|
@@ -8128,6 +8666,10 @@
|
|
|
8128
8666
|
"single",
|
|
8129
8667
|
"multiple"
|
|
8130
8668
|
],
|
|
8669
|
+
"ListboxMaxHeight": [
|
|
8670
|
+
"listMaxH",
|
|
8671
|
+
"listMaxHSm"
|
|
8672
|
+
],
|
|
8131
8673
|
"PageShellMaxWidth": [
|
|
8132
8674
|
"sm",
|
|
8133
8675
|
"md",
|
|
@@ -8161,7 +8703,9 @@
|
|
|
8161
8703
|
"ShadowToken": [
|
|
8162
8704
|
"sm",
|
|
8163
8705
|
"md",
|
|
8164
|
-
"lg"
|
|
8706
|
+
"lg",
|
|
8707
|
+
"dropReady",
|
|
8708
|
+
"dropOver"
|
|
8165
8709
|
],
|
|
8166
8710
|
"SpacingKey": [
|
|
8167
8711
|
"xs",
|
|
@@ -8228,6 +8772,10 @@
|
|
|
8228
8772
|
"success",
|
|
8229
8773
|
"warning"
|
|
8230
8774
|
],
|
|
8775
|
+
"TextLinkVariant": [
|
|
8776
|
+
"default",
|
|
8777
|
+
"subtle"
|
|
8778
|
+
],
|
|
8231
8779
|
"TextVariant": [
|
|
8232
8780
|
"t",
|
|
8233
8781
|
"ts",
|