@threadlabs/looma 0.28.6 → 0.28.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/components/ui-editor-block-actions/ui-editor-block-actions.html +20 -0
  2. package/components/ui-editor-block-actions/ui-editor-block-actions.js +14 -0
  3. package/components/ui-editor-image-toolbar/ui-editor-image-toolbar.html +7 -6
  4. package/components/ui-editor-image-toolbar/ui-editor-image-toolbar.js +2 -1
  5. package/components/ui-editor-link-card/ui-editor-link-card.html +57 -0
  6. package/components/ui-editor-link-card/ui-editor-link-card.js +27 -0
  7. package/dist/index.js +36 -34
  8. package/package.json +1 -1
  9. package/styles/ui-editor-block-actions.css +1 -0
  10. package/styles/ui-editor-link-card.css +1 -0
  11. package/vanilla/UiEditorBlockActions.d.ts +16 -0
  12. package/vanilla/UiEditorBlockActions.js +41 -0
  13. package/vanilla/UiEditorImageToolbar.js +1 -1
  14. package/vanilla/UiEditorLinkCard.d.ts +20 -0
  15. package/vanilla/UiEditorLinkCard.js +153 -0
  16. package/vanilla/index.js +2 -0
  17. package/vue/UiEditorBlockActions.d.ts +33 -0
  18. package/vue/UiEditorBlockActions.js +2 -0
  19. package/vue/UiEditorBlockActions.vue +125 -0
  20. package/vue/UiEditorImageToolbar.vue +5 -6
  21. package/vue/UiEditorLinkCard.d.ts +58 -0
  22. package/vue/UiEditorLinkCard.js +2 -0
  23. package/vue/UiEditorLinkCard.vue +319 -0
  24. package/vue/chunks/UiAffordanceScope.js +1 -1
  25. package/vue/chunks/UiAvatar.js +1 -1
  26. package/vue/chunks/UiAvatarGroup.js +1 -1
  27. package/vue/chunks/UiBadge.js +1 -1
  28. package/vue/chunks/UiBreadcrumbItem.js +1 -1
  29. package/vue/chunks/UiBreadcrumbs.js +1 -1
  30. package/vue/chunks/UiButton.js +1 -1
  31. package/vue/chunks/UiCallout.js +1 -1
  32. package/vue/chunks/UiCard.js +1 -1
  33. package/vue/chunks/UiCheckbox.js +1 -1
  34. package/vue/chunks/UiCluster.js +1 -1
  35. package/vue/chunks/UiCombobox.js +1 -1
  36. package/vue/chunks/UiContainer.js +1 -1
  37. package/vue/chunks/UiContextMenu.js +1 -1
  38. package/vue/chunks/UiCover.js +1 -1
  39. package/vue/chunks/UiDescriptionItem.js +1 -1
  40. package/vue/chunks/UiDescriptionList.js +1 -1
  41. package/vue/chunks/UiDialog.js +1 -1
  42. package/vue/chunks/UiDisclosure.js +1 -1
  43. package/vue/chunks/UiEditable.js +1 -1
  44. package/vue/chunks/UiEditorBlockActions.js +127 -0
  45. package/vue/chunks/UiEditorImageToolbar.js +7 -25
  46. package/vue/chunks/UiEditorInsertTableGrid.js +1 -1
  47. package/vue/chunks/UiEditorLinkCard.js +356 -0
  48. package/vue/chunks/UiEditorMentionMenu.js +1 -1
  49. package/vue/chunks/UiEditorMentionMenuItem.js +1 -1
  50. package/vue/chunks/UiEditorSlashMenu.js +1 -1
  51. package/vue/chunks/UiEditorSlashMenuGroup.js +1 -1
  52. package/vue/chunks/UiEditorSlashMenuItem.js +1 -1
  53. package/vue/chunks/UiEditorSurface.js +1 -1
  54. package/vue/chunks/UiEditorTableContextMenu.js +1 -1
  55. package/vue/chunks/UiEditorTableOverlay.js +1 -1
  56. package/vue/chunks/UiEditorTableToolbar.js +1 -1
  57. package/vue/chunks/UiEditorToolbar.js +1 -1
  58. package/vue/chunks/UiFloatingActionButton.js +1 -1
  59. package/vue/chunks/UiFormField.js +1 -1
  60. package/vue/chunks/UiGrid.js +1 -1
  61. package/vue/chunks/UiIcon.js +1 -1
  62. package/vue/chunks/UiIconButton.js +1 -1
  63. package/vue/chunks/UiImage.js +1 -1
  64. package/vue/chunks/UiInput.js +1 -1
  65. package/vue/chunks/UiInputGroup.js +1 -1
  66. package/vue/chunks/UiList.js +1 -1
  67. package/vue/chunks/UiListItem.js +1 -1
  68. package/vue/chunks/UiListbox.js +1 -1
  69. package/vue/chunks/UiMenu.js +1 -1
  70. package/vue/chunks/UiMenuGroup.js +1 -1
  71. package/vue/chunks/UiMenuItem.js +1 -1
  72. package/vue/chunks/UiMeter.js +1 -1
  73. package/vue/chunks/UiNavItem.js +1 -1
  74. package/vue/chunks/UiPageHeader.js +1 -1
  75. package/vue/chunks/UiPopover.js +1 -1
  76. package/vue/chunks/UiRadio.js +1 -1
  77. package/vue/chunks/UiRadioGroup.js +1 -1
  78. package/vue/chunks/UiReel.js +1 -1
  79. package/vue/chunks/UiScrollArea.js +1 -1
  80. package/vue/chunks/UiSearchResultRow.js +1 -1
  81. package/vue/chunks/UiSearchShell.js +1 -1
  82. package/vue/chunks/UiSection.js +1 -1
  83. package/vue/chunks/UiSelect.js +1 -1
  84. package/vue/chunks/UiSeparator.js +1 -1
  85. package/vue/chunks/UiSidebar.js +1 -1
  86. package/vue/chunks/UiSpinner.js +1 -1
  87. package/vue/chunks/UiStack.js +1 -1
  88. package/vue/chunks/UiStatusMessage.js +1 -1
  89. package/vue/chunks/UiSwitch.js +1 -1
  90. package/vue/chunks/UiSwitcher.js +1 -1
  91. package/vue/chunks/UiTable.js +1 -1
  92. package/vue/chunks/UiTabs.js +1 -1
  93. package/vue/chunks/UiText.js +1 -1
  94. package/vue/chunks/UiTextarea.js +1 -1
  95. package/vue/chunks/UiToast.js +1 -1
  96. package/vue/chunks/UiToastRegion.js +1 -1
  97. package/vue/chunks/UiTooltip.js +1 -1
  98. package/vue/chunks/UiTree.js +1 -1
  99. package/vue/chunks/UiTreeItem.js +1 -1
  100. package/vue/chunks/_plugin-vue_export-helper.js +1 -1
  101. package/vue/components.css +1176 -1176
  102. package/vue/editor/index.js +29 -94
  103. package/vue/editor/primitives.d.ts +8 -2
  104. package/vue/index.d.ts +2 -0
  105. package/vue/index.js +5 -3
@@ -3517,356 +3517,663 @@ footer[data-v-de6bc526]:empty {
3517
3517
  }
3518
3518
  }
3519
3519
 
3520
- /* One row, always. When the controls outgrow the space, the row scrolls sideways rather than
3521
- wrapping into several lines, and a fade at each edge that has more to show says so. */
3522
-
3523
- /* The edge fades are the scroll fade every Looma scroller uses (see ui-scroll-area), a mask on the
3524
- strip, so a floating toolbar's border and shadow stay whole. */
3525
-
3526
- /* Inside LoomaEditor's sticky shell, the shell is the sticky surface. */
3527
-
3528
- /* Inside LoomaEditor's mobile shell, the toolbar is a scroll-snapping strip. */
3529
-
3530
- /* A component that sets its display still honours the hidden attribute on its root. */
3531
- @scope (.ui-editor-toolbar) {
3532
- :scope:where([data-v-4659067f]:scope) {
3533
- position: sticky;
3534
- top: 0;
3535
- z-index: var(--ui-editor-toolbar-z-index, 10);
3536
- display: flex;
3537
- align-items: center;
3538
- padding: var(--ui-editor-toolbar-padding-block, 6px)
3539
- var(--ui-editor-toolbar-padding-inline, 12px);
3540
- min-height: var(--ui-editor-toolbar-min-height, 48px);
3541
- background: var(--ui-editor-toolbar-surface, var(--ui-surface));
3542
- border-bottom: var(--ui-border-width) solid
3543
- var(--ui-editor-toolbar-border, var(--ui-border-divider));
3520
+ /* This component's hooks style the element they are set on, and never a nested one. */
3521
+ @property --ui-menu-surface {
3522
+ syntax: "*";
3523
+ inherits: false;
3544
3524
  }
3545
- .strip[data-v-4659067f] {
3546
- display: flex;
3547
- flex: 1 1 auto;
3548
- align-items: center;
3549
- justify-content: flex-start;
3550
- gap: var(--ui-editor-toolbar-gap, 2px);
3551
- min-width: 0;
3552
- overflow-x: auto;
3553
- overflow-y: hidden;
3554
- overscroll-behavior-inline: contain;
3555
- scrollbar-width: none;
3525
+ @property --ui-menu-border {
3526
+ syntax: "*";
3527
+ inherits: false;
3556
3528
  }
3557
- .strip[data-v-4659067f]::-webkit-scrollbar {
3558
- display: none;
3529
+ @property --ui-menu-radius {
3530
+ syntax: "*";
3531
+ inherits: false;
3559
3532
  }
3560
- .strip > [data-v-4659067f-s] {
3561
- flex: 0 0 auto;
3533
+ @property --ui-menu-shadow {
3534
+ syntax: "*";
3535
+ inherits: false;
3562
3536
  }
3563
- .strip[data-v-4659067f] {
3564
- --_ui-scroll-fade-direction: to right;
3565
- --_ui-scroll-fade-size: var(--ui-editor-toolbar-fade-size, var(--ui-scroll-fade-size, 24px));
3566
- mask-image: linear-gradient(
3567
- var(--_ui-scroll-fade-direction),
3568
- transparent,
3569
- #000 var(--_ui-scroll-fade-start),
3570
- #000 calc(100% - var(--_ui-scroll-fade-end)),
3571
- transparent
3572
- );
3573
- animation:
3574
- ui-scroll-fade-start linear,
3575
- ui-scroll-fade-start-hold linear,
3576
- ui-scroll-fade-end-hold linear,
3577
- ui-scroll-fade-end linear;
3578
- animation-timeline: scroll(self inline);
3579
- animation-range:
3580
- 0 var(--_ui-scroll-fade-size),
3581
- var(--_ui-scroll-fade-size) calc(100% + 1px),
3582
- -1px calc(100% - var(--_ui-scroll-fade-size)),
3583
- calc(100% - var(--_ui-scroll-fade-size)) 100%;
3537
+ @property --ui-menu-viewport-gap {
3538
+ syntax: "*";
3539
+ inherits: false;
3584
3540
  }
3585
- :scope:dir(rtl) .strip[data-v-4659067f] {
3586
- --_ui-scroll-fade-direction: to left;
3541
+
3542
+ /* Compact sets its items' defaults, so nothing has to rescale a global; an item's own hooks
3543
+ still win. */
3544
+
3545
+ /* Small follows its trigger down: an item's own hooks still win. */
3546
+ @scope (.ui-menu) {
3547
+ :scope:where([data-v-1ded0073]:scope):is([data-ui-menu-state~="density=compact"]) {
3548
+ --_ui-default-menu-item-padding-block: var(--ui-space-1);
3549
+ --_ui-default-menu-item-padding-inline: var(--ui-space-2);
3550
+ --_ui-default-menu-item-font-size: var(--ui-font-size-sm);
3551
+ --_ui-default-menu-item-radius: var(--ui-radius-sm);
3552
+ padding: var(--ui-space-1);
3553
+ gap: 0;
3587
3554
  }
3588
- .divider[data-v-4659067f-s] {
3589
- width: 1px;
3590
- height: 20px;
3591
- background: var(--ui-editor-toolbar-divider, var(--ui-border-divider));
3592
- flex-shrink: 0;
3593
- margin: 0 var(--ui-editor-toolbar-divider-margin, 4px);
3555
+ :scope:where([data-v-1ded0073]:scope):is([data-ui-menu-state~="size=sm"]) {
3556
+ --_ui-default-menu-item-padding-block: var(--ui-space-0-5);
3557
+ --_ui-default-menu-item-padding-inline: var(--ui-space-2);
3558
+ --_ui-default-menu-item-font-size: var(--ui-font-size-xs);
3559
+ --_ui-default-menu-item-radius: var(--ui-radius-sm);
3560
+ --_ui-default-menu-item-min-block-size: 1.5rem;
3561
+ --_ui-default-menu-indicator-size: 0.75rem;
3562
+ min-inline-size: min(8rem, calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2));
3563
+ padding: var(--ui-space-1);
3564
+ gap: 0;
3594
3565
  }
3595
- :scope:where([data-v-4659067f]:scope):is([data-ui-editor-toolbar-state~="floating"]) {
3596
- position: relative;
3597
- top: auto;
3598
- width: max-content;
3599
- max-width: min(calc(100vw - 24px), 100%);
3600
- min-height: auto;
3601
- padding: var(--ui-editor-toolbar-floating-padding, 4px);
3602
- background: color-mix(
3603
- in srgb,
3604
- var(--ui-editor-toolbar-surface, var(--ui-surface)) 96%,
3605
- transparent
3606
- );
3607
- border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
3608
- border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
3566
+ :scope:where([data-v-1ded0073]:scope):is([data-ui-menu-state~="icons"]) {
3567
+ --_ui-default-menu-icon-display: inline-flex;
3568
+ }
3569
+ :scope:where([data-v-1ded0073]:scope) {
3570
+ --_ui-menu-surface: var(--ui-menu-surface);
3571
+ --_ui-menu-border: var(--ui-menu-border);
3572
+ --_ui-menu-radius: var(--ui-menu-radius);
3573
+ --_ui-menu-shadow: var(--ui-menu-shadow);
3574
+ /* A menu nested in a compact one starts again from its own density. */
3575
+ --_ui-default-menu-item-padding-block: initial;
3576
+ --_ui-default-menu-item-padding-inline: initial;
3577
+ --_ui-default-menu-item-font-size: initial;
3578
+ --_ui-default-menu-item-radius: initial;
3579
+ --_ui-default-menu-item-min-block-size: initial;
3580
+ --_ui-default-menu-indicator-size: initial;
3581
+ --_ui-default-menu-icon-display: none;
3582
+ display: flex;
3583
+ flex-direction: column;
3584
+ box-sizing: border-box;
3585
+ inline-size: max-content;
3586
+ min-inline-size: min(12rem, calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2));
3587
+ max-inline-size: calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2);
3588
+ padding: 0;
3589
+ border: 0;
3590
+ outline: 0;
3591
+ border-radius: 0;
3592
+ background: transparent;
3593
+ box-shadow: none;
3594
+ overflow: visible;
3595
+ }
3596
+ .surface[data-v-1ded0073] {
3597
+ display: flex;
3598
+ flex-direction: column;
3599
+ box-sizing: border-box;
3600
+ max-inline-size: inherit;
3601
+ padding: var(--ui-space-1);
3602
+ background: var(--_ui-menu-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
3603
+ border: var(--ui-border-width) solid
3604
+ var(--_ui-menu-border, var(--ui-overlay-border, var(--ui-border-strong)));
3605
+ border-radius: var(--_ui-menu-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
3609
3606
  box-shadow: var(
3610
- --ui-editor-toolbar-floating-shadow,
3611
- var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12))
3607
+ --_ui-menu-shadow,
3608
+ var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
3612
3609
  );
3613
- backdrop-filter: blur(10px);
3610
+ max-block-size: inherit;
3611
+ overflow: auto;
3614
3612
  }
3615
- @media (max-width: 767px) {
3616
- :scope:where([data-v-4659067f]:scope) {
3617
- position: fixed;
3618
- top: auto;
3619
- bottom: env(safe-area-inset-bottom);
3620
- left: 0;
3621
- right: 0;
3622
- min-height: var(--ui-editor-toolbar-mobile-min-height, 56px);
3623
- border-top: var(--ui-border-width) solid
3624
- var(--ui-editor-toolbar-border, var(--ui-border-divider));
3625
- border-bottom: none;
3626
- box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
3613
+ .surface hr[data-v-1ded0073] {
3614
+ align-self: stretch;
3615
+ block-size: 0;
3616
+ margin: var(--ui-space-1) 0;
3617
+ border: 0;
3618
+ border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
3627
3619
  }
3628
- :scope:where([data-v-4659067f]:scope):is([data-ui-editor-toolbar-state~="floating"]) {
3629
- position: relative;
3630
- inset: auto;
3631
- min-height: auto;
3632
- border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
3633
- border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
3634
- box-shadow: var(
3635
- --ui-editor-toolbar-floating-shadow,
3636
- var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12))
3637
- );
3620
+ :scope:where([data-v-1ded0073]:scope):is(:not(:scope[data-ui-menu-state~="internalOpen"]):not(:scope[data-ui-menu-state~="inline"])) {
3621
+ display: none;
3638
3622
  }
3623
+ :scope:where([data-v-1ded0073]:scope):is([popover]) {
3624
+ position: fixed;
3625
+ inset: auto;
3626
+ margin: 0;
3627
+ overflow: visible;
3628
+ max-block-size: calc(100dvh - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2);
3629
+ opacity: 0;
3630
+ transform: translateY(-4px) scale(0.99);
3631
+ transition:
3632
+ opacity var(--ui-motion-fast) var(--ui-motion-ease),
3633
+ transform var(--ui-motion-fast) var(--ui-motion-ease),
3634
+ display var(--ui-motion-fast) allow-discrete,
3635
+ overlay var(--ui-motion-fast) allow-discrete;
3639
3636
  }
3640
- :scope:where([data-v-4659067f]:scope):is(.looma-editor__sticky-toolbar-shell *) {
3641
- position: relative;
3642
- min-height: var(--ui-editor-toolbar-min-height, 48px);
3643
- background: transparent;
3644
- border: 0;
3645
- box-shadow: none;
3637
+ :scope:where([data-v-1ded0073]:scope):is([popover]:popover-open) {
3638
+ opacity: 1;
3639
+ transform: translateY(0) scale(1);
3646
3640
  }
3647
- :scope:where([data-v-4659067f]:scope):is(.looma-editor__mobile-toolbar-shell
3648
- [data-ui-editor-toolbar-state~="floating"]) {
3649
- width: 100%;
3650
- max-width: none;
3651
- min-height: 100%;
3652
- padding: 0;
3653
- background: transparent;
3654
- border: 0;
3655
- border-radius: 0;
3656
- box-shadow: none;
3657
- backdrop-filter: none;
3641
+ @starting-style {
3642
+ :scope:where([data-v-1ded0073]:scope):is([popover]:popover-open) {
3643
+ opacity: 0;
3644
+ transform: translateY(-4px) scale(0.99);
3658
3645
  }
3659
- .looma-editor__mobile-toolbar-shell :scope[data-ui-editor-toolbar-state~="floating"] .strip[data-v-4659067f] {
3660
- scroll-snap-type: x mandatory;
3661
3646
  }
3662
- :scope:where([data-v-4659067f]:scope):is([hidden]) {
3647
+ :scope:where([data-v-1ded0073]:scope):is([hidden]) {
3663
3648
  display: none;
3664
3649
  }
3650
+ @media (prefers-reduced-motion: reduce) {
3651
+ :scope:where([data-v-1ded0073]:scope):is([popover]) {
3652
+ transition: none;
3653
+ }
3654
+ }
3665
3655
  }
3666
3656
 
3667
3657
  /* This component's hooks style the element they are set on, and never a nested one. */
3668
- @property --ui-form-field-danger {
3658
+ @property --ui-menu-item-font-size {
3669
3659
  syntax: "*";
3670
3660
  inherits: false;
3671
3661
  }
3672
- @property --ui-form-field-help-font-size {
3662
+ @property --ui-menu-item-hover-surface {
3673
3663
  syntax: "*";
3674
3664
  inherits: false;
3675
3665
  }
3676
- @property --ui-form-field-help-min-block-size {
3666
+ @property --ui-menu-item-min-block-size {
3677
3667
  syntax: "*";
3678
3668
  inherits: false;
3679
3669
  }
3680
- @property --ui-form-field-help-text {
3670
+ @property --ui-menu-item-padding-block {
3681
3671
  syntax: "*";
3682
3672
  inherits: false;
3683
3673
  }
3684
- @property --ui-form-field-label-font-size {
3674
+ @property --ui-menu-item-padding-inline {
3685
3675
  syntax: "*";
3686
3676
  inherits: false;
3687
3677
  }
3688
- @property --ui-form-field-label-text {
3689
- syntax: "*";
3690
- inherits: false;
3691
- }
3692
- @property --ui-form-field-min-inline-size {
3678
+ @property --ui-menu-item-radius {
3693
3679
  syntax: "*";
3694
3680
  inherits: false;
3695
3681
  }
3696
3682
 
3697
- /* Each named region styles whatever fills it, however it was slotted (slot="…" in HTML, #label
3698
- in Vue), and generates no box of its own, so an empty region adds no gap. */
3683
+ /* A named icon has a fixed column; an icon-enabled menu reserves it on every row. */
3699
3684
 
3700
- /* A label action, such as a small help button, sits after the label text in a box one line
3701
- tall, centred on the first line and overflowing it. A button taller than a line of label
3702
- text then never makes this field's label row taller than its neighbours' in a grid row. */
3685
+ /* A menu marks its chosen item with a check, as menus conventionally do; a radio circle reads
3686
+ as a form control. The empty slot keeps unchosen labels aligned with the chosen one. */
3703
3687
 
3704
- /* An error reads in the danger colour, the one the invalid control's border takes. */
3688
+ /* A <kbd> takes the browser's monospace; the hint reads in the item's own type. */
3705
3689
 
3706
- /* A component that sets its display still honours the hidden attribute on its root. */
3707
- @scope (.ui-form-field) {
3708
- :scope:where([data-v-50ee887a]:scope) {
3709
- /* Hooks do not inherit, so the parts below read them from the root. */
3710
- --_ui-form-field-danger: var(--ui-form-field-danger);
3711
- --_ui-form-field-help-min-block-size: var(--ui-form-field-help-min-block-size);
3712
- --_ui-form-field-label-text: var(--ui-form-field-label-text);
3713
- --_ui-form-field-label-font-size: var(--ui-form-field-label-font-size);
3714
- --_ui-form-field-help-text: var(--ui-form-field-help-text);
3715
- --_ui-form-field-help-font-size: var(--ui-form-field-help-font-size);
3690
+ /* Keep the text row at the shared control height where cap trimming is available. */
3716
3691
 
3717
- display: grid;
3692
+ /* A component that sets its display still honours the hidden attribute on its root. */
3693
+ @scope (.ui-menu-item) to (.ui-icon) {
3694
+ :scope:where([data-v-50b6e1bc]:scope) {
3695
+ display: flex;
3696
+ align-items: center;
3718
3697
  gap: var(--ui-space-2);
3719
- min-inline-size: var(--ui-form-field-min-inline-size, 0);
3720
- align-content: start;
3698
+ box-sizing: border-box;
3699
+ width: 100%;
3700
+ padding: var(
3701
+ --ui-menu-item-padding-block,
3702
+ var(--_ui-default-menu-item-padding-block, var(--ui-space-2))
3703
+ )
3704
+ var(
3705
+ --ui-menu-item-padding-inline,
3706
+ var(--_ui-default-menu-item-padding-inline, var(--ui-space-3))
3707
+ );
3708
+ text-align: left;
3709
+ border-radius: var(
3710
+ --ui-menu-item-radius,
3711
+ var(--_ui-default-menu-item-radius, var(--ui-selection-radius))
3712
+ );
3721
3713
  color: var(--ui-text-primary);
3714
+ font-size: var(
3715
+ --ui-menu-item-font-size,
3716
+ var(--_ui-default-menu-item-font-size, var(--ui-font-size-md))
3717
+ );
3718
+ font-weight: var(--ui-font-medium);
3719
+ text-decoration: none;
3720
+ cursor: pointer;
3721
+ outline: none;
3722
+ transition:
3723
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
3724
+ color var(--ui-motion-fast) var(--ui-motion-ease);
3722
3725
  }
3723
- .label[data-v-50ee887a], .help[data-v-50ee887a], .error[data-v-50ee887a] {
3724
- display: contents;
3725
- }
3726
- .label[data-v-50ee887a] {
3727
- color: var(--_ui-form-field-label-text, var(--ui-text-secondary));
3728
- font-size: var(--_ui-form-field-label-font-size, var(--ui-font-size-sm));
3726
+ .icon[data-v-50b6e1bc] {
3727
+ display: var(--_ui-default-menu-icon-display, none);
3728
+ align-items: center;
3729
+ justify-content: center;
3730
+ flex: none;
3731
+ inline-size: var(--ui-icon-size-sm);
3732
+ block-size: var(--ui-icon-size-sm);
3729
3733
  }
3730
- .label[data-v-50ee887a]:has(> .label-action > *) {
3731
- display: flex;
3732
- align-items: start;
3733
- gap: var(--ui-space-1);
3734
+ .icon[data-v-50b6e1bc]:not(:empty) {
3735
+ display: inline-flex;
3734
3736
  }
3735
- .label-action[data-v-50ee887a] {
3736
- display: flex;
3737
- align-items: unsafe center;
3738
- block-size: 1lh;
3737
+ .icon svg[data-v-50b6e1bc-s] {
3738
+ inline-size: 100%;
3739
+ block-size: 100%;
3739
3740
  }
3740
- .label-action[data-v-50ee887a]:not(:has(> *)) {
3741
- display: none;
3741
+ :scope:where([data-v-50b6e1bc]:scope):is([data-ui-menu-item-state~="tone=danger"]) {
3742
+ color: var(--ui-danger);
3742
3743
  }
3743
- .help[data-v-50ee887a] {
3744
- color: var(--_ui-form-field-help-text, var(--ui-text-muted));
3745
- font-size: var(--_ui-form-field-help-font-size, var(--ui-font-size-sm));
3746
- line-height: var(--ui-line-height-md);
3744
+ .label[data-v-50b6e1bc] {
3745
+ display: flex;
3746
+ align-items: center;
3747
+ gap: var(--ui-space-2);
3748
+ flex: 1;
3749
+ min-inline-size: 0;
3747
3750
  }
3748
- .help > [data-v-50ee887a-s] {
3749
- min-block-size: var(--_ui-form-field-help-min-block-size, 0);
3751
+ .indicator[data-v-50b6e1bc] {
3752
+ display: inline-flex;
3753
+ align-items: center;
3754
+ justify-content: center;
3755
+ flex: none;
3756
+ box-sizing: border-box;
3757
+ inline-size: var(--_ui-default-menu-indicator-size, var(--ui-icon-size-sm));
3758
+ block-size: var(--_ui-default-menu-indicator-size, var(--ui-icon-size-sm));
3759
+ border: var(--ui-border-width) solid var(--ui-control-border);
3760
+ border-radius: var(--ui-radius-sm);
3761
+ color: var(--ui-surface);
3762
+ --_ui-default-icon-size: 0.75rem;
3750
3763
  }
3751
- .error[data-v-50ee887a] {
3764
+ :scope[data-ui-menu-item-state~="type=action"] .indicator[data-v-50b6e1bc] {
3752
3765
  display: none;
3753
3766
  }
3754
- :scope[data-ui-form-field-state~="invalid"] .error[data-v-50ee887a] {
3755
- display: contents;
3767
+ :scope[data-ui-menu-item-state~="type=checkbox"][aria-checked="true"] .indicator[data-v-50b6e1bc] {
3768
+ border-color: var(--ui-accent);
3769
+ background: var(--ui-accent);
3756
3770
  }
3757
- .error[data-v-50ee887a],[role="alert"][data-v-50ee887a-s] {
3758
- color: var(--_ui-form-field-danger, var(--ui-field-danger, var(--ui-danger)));
3771
+ :scope[data-ui-menu-item-state~="type=radio"] .indicator[data-v-50b6e1bc] {
3772
+ border-color: transparent;
3773
+ color: var(--ui-text-secondary);
3774
+ }
3775
+ .shortcut[data-v-50b6e1bc] {
3776
+ margin-inline-start: auto;
3777
+ color: var(--ui-text-secondary);
3759
3778
  font-size: var(--ui-font-size-sm);
3779
+ font-weight: var(--ui-font-normal);
3760
3780
  }
3761
- :scope:where([data-v-50ee887a]:scope):is([hidden]) {
3781
+ .shortcut[data-v-50b6e1bc]:empty {
3762
3782
  display: none;
3763
3783
  }
3784
+ .shortcut kbd[data-v-50b6e1bc-s] {
3785
+ font: inherit;
3764
3786
  }
3765
-
3766
- /* This component's hooks style the element they are set on, and never a nested one. */
3767
- @property --ui-icon-button-active-scale {
3768
- syntax: "*";
3769
- inherits: false;
3770
- }
3771
- @property --ui-icon-button-active-surface {
3772
- syntax: "*";
3773
- inherits: false;
3774
- }
3775
- @property --ui-icon-button-border {
3776
- syntax: "*";
3777
- inherits: false;
3778
- }
3779
- @property --ui-icon-button-disabled-filter {
3780
- syntax: "*";
3781
- inherits: false;
3782
- }
3783
- @property --ui-icon-button-disabled-opacity {
3784
- syntax: "*";
3785
- inherits: false;
3786
- }
3787
- @property --ui-icon-button-hover-border {
3788
- syntax: "*";
3789
- inherits: false;
3790
- }
3791
- @property --ui-icon-button-hover-surface {
3792
- syntax: "*";
3793
- inherits: false;
3794
- }
3795
- @property --ui-icon-button-hover-text {
3796
- syntax: "*";
3797
- inherits: false;
3798
- }
3799
- @property --ui-icon-button-icon-size {
3800
- syntax: "*";
3801
- inherits: false;
3787
+ @supports (text-box-trim: trim-both) {
3788
+ :scope:where([data-v-50b6e1bc]:scope) {
3789
+ min-block-size: var(
3790
+ --ui-menu-item-min-block-size,
3791
+ var(--_ui-default-menu-item-min-block-size, var(--ui-control-size-md, 2.5rem))
3792
+ );
3793
+ text-box-trim: trim-both;
3794
+ text-box-edge: cap alphabetic;
3802
3795
  }
3803
- @property --ui-icon-button-icon-stroke-width {
3804
- syntax: "*";
3805
- inherits: false;
3806
3796
  }
3807
- @property --ui-icon-button-outline-surface {
3808
- syntax: "*";
3809
- inherits: false;
3797
+ :scope:where([data-v-50b6e1bc]:scope):is(:is(:hover, :focus-visible):not([aria-disabled="true"])) {
3798
+ background: var(--ui-menu-item-hover-surface, var(--ui-surface-subtle));
3810
3799
  }
3811
- @property --ui-icon-button-outline-text {
3812
- syntax: "*";
3813
- inherits: false;
3800
+ :scope:where([data-v-50b6e1bc]:scope):is(:focus-visible) {
3801
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
3802
+ outline-offset: calc(-1 * var(--ui-focus-width));
3814
3803
  }
3815
- @property --ui-icon-button-radius {
3816
- syntax: "*";
3817
- inherits: false;
3804
+ :scope:where([data-v-50b6e1bc]:scope):is([aria-disabled="true"]) {
3805
+ background: var(--ui-disabled-surface);
3806
+ color: var(--ui-disabled-text);
3807
+ cursor: not-allowed;
3818
3808
  }
3819
- @property --ui-icon-button-size {
3820
- syntax: "*";
3821
- inherits: false;
3809
+ :scope[aria-disabled="true"] .indicator[data-v-50b6e1bc] {
3810
+ border-color: var(--ui-disabled-border);
3811
+ background: transparent;
3812
+ color: var(--ui-disabled-text);
3822
3813
  }
3823
- @property --ui-icon-button-solid-hover-surface {
3824
- syntax: "*";
3825
- inherits: false;
3814
+ :scope[aria-disabled="true"] .indicator[data-v-50b6e1bc]::after {
3815
+ background: var(--ui-disabled-text);
3826
3816
  }
3827
- @property --ui-icon-button-solid-shadow {
3828
- syntax: "*";
3829
- inherits: false;
3817
+ @media (forced-colors: active) {
3818
+ :scope:where([data-v-50b6e1bc]:scope):is(:focus-visible) {
3819
+ outline-color: Highlight;
3830
3820
  }
3831
- @property --ui-icon-button-solid-surface {
3832
- syntax: "*";
3833
- inherits: false;
3834
3821
  }
3835
- @property --ui-icon-button-solid-text {
3836
- syntax: "*";
3837
- inherits: false;
3822
+ :scope:where([data-v-50b6e1bc]:scope):is([hidden]) {
3823
+ display: none;
3838
3824
  }
3839
- @property --ui-icon-button-surface {
3840
- syntax: "*";
3841
- inherits: false;
3842
3825
  }
3843
3826
 
3844
- /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
3845
-
3846
- /* At rest an anticipatory button shows only its guide dot. The icon grows into place when
3847
- proximity, hover, or focus reveals it; the button's hit area and guide remain stable. */
3848
-
3849
- /* A touch target without a bigger button: an invisible hit area, at least the control
3850
- minimum, centred on the button (::before is the anticipatory guide). */
3827
+ /* One row, always. When the controls outgrow the space, the row scrolls sideways rather than
3828
+ wrapping into several lines, and a fade at each edge that has more to show says so. */
3851
3829
 
3852
- /* A text button's companion uses control geometry; compact icon buttons keep their own density. */
3830
+ /* The edge fades are the scroll fade every Looma scroller uses (see ui-scroll-area), a mask on the
3831
+ strip, so a floating toolbar's border and shadow stay whole. */
3853
3832
 
3854
- /* Native toggle state persists after pointer release, including during loading. */
3833
+ /* Inside LoomaEditor's sticky shell, the shell is the sticky surface. */
3855
3834
 
3856
- /* Disabled is a flat neutral control, independent of the active variant's tone. */
3835
+ /* Inside LoomaEditor's mobile shell, the toolbar is a scroll-snapping strip. */
3857
3836
 
3858
3837
  /* A component that sets its display still honours the hidden attribute on its root. */
3859
- @scope (.ui-icon-button) to (.ui-spinner) {
3860
- :scope:where([data-v-4a58a364]:scope) {
3861
- /* Optional inherited action-group values keep text and icon actions under the same light.
3862
- One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
3863
- A single ambient lift avoids stacking a face gradient or another inset bevel. */
3864
- --_ui-action-start: 1px;
3865
- --_ui-action-edge: var(
3866
- --ui-action-edge,
3867
- inset var(--_ui-action-start) 1px 0 light-dark(
3868
- rgb(255 255 255 / 0.08),
3869
- rgb(255 255 255 / 0.06)
3838
+ @scope (.ui-editor-toolbar) {
3839
+ :scope:where([data-v-4659067f]:scope) {
3840
+ position: sticky;
3841
+ top: 0;
3842
+ z-index: var(--ui-editor-toolbar-z-index, 10);
3843
+ display: flex;
3844
+ align-items: center;
3845
+ padding: var(--ui-editor-toolbar-padding-block, 6px)
3846
+ var(--ui-editor-toolbar-padding-inline, 12px);
3847
+ min-height: var(--ui-editor-toolbar-min-height, 48px);
3848
+ background: var(--ui-editor-toolbar-surface, var(--ui-surface));
3849
+ border-bottom: var(--ui-border-width) solid
3850
+ var(--ui-editor-toolbar-border, var(--ui-border-divider));
3851
+ }
3852
+ .strip[data-v-4659067f] {
3853
+ display: flex;
3854
+ flex: 1 1 auto;
3855
+ align-items: center;
3856
+ justify-content: flex-start;
3857
+ gap: var(--ui-editor-toolbar-gap, 2px);
3858
+ min-width: 0;
3859
+ overflow-x: auto;
3860
+ overflow-y: hidden;
3861
+ overscroll-behavior-inline: contain;
3862
+ scrollbar-width: none;
3863
+ }
3864
+ .strip[data-v-4659067f]::-webkit-scrollbar {
3865
+ display: none;
3866
+ }
3867
+ .strip > [data-v-4659067f-s] {
3868
+ flex: 0 0 auto;
3869
+ }
3870
+ .strip[data-v-4659067f] {
3871
+ --_ui-scroll-fade-direction: to right;
3872
+ --_ui-scroll-fade-size: var(--ui-editor-toolbar-fade-size, var(--ui-scroll-fade-size, 24px));
3873
+ mask-image: linear-gradient(
3874
+ var(--_ui-scroll-fade-direction),
3875
+ transparent,
3876
+ #000 var(--_ui-scroll-fade-start),
3877
+ #000 calc(100% - var(--_ui-scroll-fade-end)),
3878
+ transparent
3879
+ );
3880
+ animation:
3881
+ ui-scroll-fade-start linear,
3882
+ ui-scroll-fade-start-hold linear,
3883
+ ui-scroll-fade-end-hold linear,
3884
+ ui-scroll-fade-end linear;
3885
+ animation-timeline: scroll(self inline);
3886
+ animation-range:
3887
+ 0 var(--_ui-scroll-fade-size),
3888
+ var(--_ui-scroll-fade-size) calc(100% + 1px),
3889
+ -1px calc(100% - var(--_ui-scroll-fade-size)),
3890
+ calc(100% - var(--_ui-scroll-fade-size)) 100%;
3891
+ }
3892
+ :scope:dir(rtl) .strip[data-v-4659067f] {
3893
+ --_ui-scroll-fade-direction: to left;
3894
+ }
3895
+ .divider[data-v-4659067f-s] {
3896
+ width: 1px;
3897
+ height: 20px;
3898
+ background: var(--ui-editor-toolbar-divider, var(--ui-border-divider));
3899
+ flex-shrink: 0;
3900
+ margin: 0 var(--ui-editor-toolbar-divider-margin, 4px);
3901
+ }
3902
+ :scope:where([data-v-4659067f]:scope):is([data-ui-editor-toolbar-state~="floating"]) {
3903
+ position: relative;
3904
+ top: auto;
3905
+ width: max-content;
3906
+ max-width: min(calc(100vw - 24px), 100%);
3907
+ min-height: auto;
3908
+ padding: var(--ui-editor-toolbar-floating-padding, 4px);
3909
+ background: color-mix(
3910
+ in srgb,
3911
+ var(--ui-editor-toolbar-surface, var(--ui-surface)) 96%,
3912
+ transparent
3913
+ );
3914
+ border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
3915
+ border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
3916
+ box-shadow: var(
3917
+ --ui-editor-toolbar-floating-shadow,
3918
+ var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12))
3919
+ );
3920
+ backdrop-filter: blur(10px);
3921
+ }
3922
+ @media (max-width: 767px) {
3923
+ :scope:where([data-v-4659067f]:scope) {
3924
+ position: fixed;
3925
+ top: auto;
3926
+ bottom: env(safe-area-inset-bottom);
3927
+ left: 0;
3928
+ right: 0;
3929
+ min-height: var(--ui-editor-toolbar-mobile-min-height, 56px);
3930
+ border-top: var(--ui-border-width) solid
3931
+ var(--ui-editor-toolbar-border, var(--ui-border-divider));
3932
+ border-bottom: none;
3933
+ box-shadow: var(--ui-editor-toolbar-mobile-shadow, 0 -2px 8px rgb(0 0 0 / 0.06));
3934
+ }
3935
+ :scope:where([data-v-4659067f]:scope):is([data-ui-editor-toolbar-state~="floating"]) {
3936
+ position: relative;
3937
+ inset: auto;
3938
+ min-height: auto;
3939
+ border: var(--ui-border-width) solid var(--ui-editor-toolbar-border, var(--ui-border-strong));
3940
+ border-radius: var(--ui-editor-toolbar-floating-radius, var(--ui-radius-lg));
3941
+ box-shadow: var(
3942
+ --ui-editor-toolbar-floating-shadow,
3943
+ var(--ui-shadow-lg, 0 10px 24px rgb(0 0 0 / 0.12))
3944
+ );
3945
+ }
3946
+ }
3947
+ :scope:where([data-v-4659067f]:scope):is(.looma-editor__sticky-toolbar-shell *) {
3948
+ position: relative;
3949
+ min-height: var(--ui-editor-toolbar-min-height, 48px);
3950
+ background: transparent;
3951
+ border: 0;
3952
+ box-shadow: none;
3953
+ }
3954
+ :scope:where([data-v-4659067f]:scope):is(.looma-editor__mobile-toolbar-shell
3955
+ [data-ui-editor-toolbar-state~="floating"]) {
3956
+ width: 100%;
3957
+ max-width: none;
3958
+ min-height: 100%;
3959
+ padding: 0;
3960
+ background: transparent;
3961
+ border: 0;
3962
+ border-radius: 0;
3963
+ box-shadow: none;
3964
+ backdrop-filter: none;
3965
+ }
3966
+ .looma-editor__mobile-toolbar-shell :scope[data-ui-editor-toolbar-state~="floating"] .strip[data-v-4659067f] {
3967
+ scroll-snap-type: x mandatory;
3968
+ }
3969
+ :scope:where([data-v-4659067f]:scope):is([hidden]) {
3970
+ display: none;
3971
+ }
3972
+ }
3973
+
3974
+ /* This component's hooks style the element they are set on, and never a nested one. */
3975
+ @property --ui-form-field-danger {
3976
+ syntax: "*";
3977
+ inherits: false;
3978
+ }
3979
+ @property --ui-form-field-help-font-size {
3980
+ syntax: "*";
3981
+ inherits: false;
3982
+ }
3983
+ @property --ui-form-field-help-min-block-size {
3984
+ syntax: "*";
3985
+ inherits: false;
3986
+ }
3987
+ @property --ui-form-field-help-text {
3988
+ syntax: "*";
3989
+ inherits: false;
3990
+ }
3991
+ @property --ui-form-field-label-font-size {
3992
+ syntax: "*";
3993
+ inherits: false;
3994
+ }
3995
+ @property --ui-form-field-label-text {
3996
+ syntax: "*";
3997
+ inherits: false;
3998
+ }
3999
+ @property --ui-form-field-min-inline-size {
4000
+ syntax: "*";
4001
+ inherits: false;
4002
+ }
4003
+
4004
+ /* Each named region styles whatever fills it, however it was slotted (slot="…" in HTML, #label
4005
+ in Vue), and generates no box of its own, so an empty region adds no gap. */
4006
+
4007
+ /* A label action, such as a small help button, sits after the label text in a box one line
4008
+ tall, centred on the first line and overflowing it. A button taller than a line of label
4009
+ text then never makes this field's label row taller than its neighbours' in a grid row. */
4010
+
4011
+ /* An error reads in the danger colour, the one the invalid control's border takes. */
4012
+
4013
+ /* A component that sets its display still honours the hidden attribute on its root. */
4014
+ @scope (.ui-form-field) {
4015
+ :scope:where([data-v-50ee887a]:scope) {
4016
+ /* Hooks do not inherit, so the parts below read them from the root. */
4017
+ --_ui-form-field-danger: var(--ui-form-field-danger);
4018
+ --_ui-form-field-help-min-block-size: var(--ui-form-field-help-min-block-size);
4019
+ --_ui-form-field-label-text: var(--ui-form-field-label-text);
4020
+ --_ui-form-field-label-font-size: var(--ui-form-field-label-font-size);
4021
+ --_ui-form-field-help-text: var(--ui-form-field-help-text);
4022
+ --_ui-form-field-help-font-size: var(--ui-form-field-help-font-size);
4023
+
4024
+ display: grid;
4025
+ gap: var(--ui-space-2);
4026
+ min-inline-size: var(--ui-form-field-min-inline-size, 0);
4027
+ align-content: start;
4028
+ color: var(--ui-text-primary);
4029
+ }
4030
+ .label[data-v-50ee887a], .help[data-v-50ee887a], .error[data-v-50ee887a] {
4031
+ display: contents;
4032
+ }
4033
+ .label[data-v-50ee887a] {
4034
+ color: var(--_ui-form-field-label-text, var(--ui-text-secondary));
4035
+ font-size: var(--_ui-form-field-label-font-size, var(--ui-font-size-sm));
4036
+ }
4037
+ .label[data-v-50ee887a]:has(> .label-action > *) {
4038
+ display: flex;
4039
+ align-items: start;
4040
+ gap: var(--ui-space-1);
4041
+ }
4042
+ .label-action[data-v-50ee887a] {
4043
+ display: flex;
4044
+ align-items: unsafe center;
4045
+ block-size: 1lh;
4046
+ }
4047
+ .label-action[data-v-50ee887a]:not(:has(> *)) {
4048
+ display: none;
4049
+ }
4050
+ .help[data-v-50ee887a] {
4051
+ color: var(--_ui-form-field-help-text, var(--ui-text-muted));
4052
+ font-size: var(--_ui-form-field-help-font-size, var(--ui-font-size-sm));
4053
+ line-height: var(--ui-line-height-md);
4054
+ }
4055
+ .help > [data-v-50ee887a-s] {
4056
+ min-block-size: var(--_ui-form-field-help-min-block-size, 0);
4057
+ }
4058
+ .error[data-v-50ee887a] {
4059
+ display: none;
4060
+ }
4061
+ :scope[data-ui-form-field-state~="invalid"] .error[data-v-50ee887a] {
4062
+ display: contents;
4063
+ }
4064
+ .error[data-v-50ee887a],[role="alert"][data-v-50ee887a-s] {
4065
+ color: var(--_ui-form-field-danger, var(--ui-field-danger, var(--ui-danger)));
4066
+ font-size: var(--ui-font-size-sm);
4067
+ }
4068
+ :scope:where([data-v-50ee887a]:scope):is([hidden]) {
4069
+ display: none;
4070
+ }
4071
+ }
4072
+
4073
+ /* This component's hooks style the element they are set on, and never a nested one. */
4074
+ @property --ui-icon-button-active-scale {
4075
+ syntax: "*";
4076
+ inherits: false;
4077
+ }
4078
+ @property --ui-icon-button-active-surface {
4079
+ syntax: "*";
4080
+ inherits: false;
4081
+ }
4082
+ @property --ui-icon-button-border {
4083
+ syntax: "*";
4084
+ inherits: false;
4085
+ }
4086
+ @property --ui-icon-button-disabled-filter {
4087
+ syntax: "*";
4088
+ inherits: false;
4089
+ }
4090
+ @property --ui-icon-button-disabled-opacity {
4091
+ syntax: "*";
4092
+ inherits: false;
4093
+ }
4094
+ @property --ui-icon-button-hover-border {
4095
+ syntax: "*";
4096
+ inherits: false;
4097
+ }
4098
+ @property --ui-icon-button-hover-surface {
4099
+ syntax: "*";
4100
+ inherits: false;
4101
+ }
4102
+ @property --ui-icon-button-hover-text {
4103
+ syntax: "*";
4104
+ inherits: false;
4105
+ }
4106
+ @property --ui-icon-button-icon-size {
4107
+ syntax: "*";
4108
+ inherits: false;
4109
+ }
4110
+ @property --ui-icon-button-icon-stroke-width {
4111
+ syntax: "*";
4112
+ inherits: false;
4113
+ }
4114
+ @property --ui-icon-button-outline-surface {
4115
+ syntax: "*";
4116
+ inherits: false;
4117
+ }
4118
+ @property --ui-icon-button-outline-text {
4119
+ syntax: "*";
4120
+ inherits: false;
4121
+ }
4122
+ @property --ui-icon-button-radius {
4123
+ syntax: "*";
4124
+ inherits: false;
4125
+ }
4126
+ @property --ui-icon-button-size {
4127
+ syntax: "*";
4128
+ inherits: false;
4129
+ }
4130
+ @property --ui-icon-button-solid-hover-surface {
4131
+ syntax: "*";
4132
+ inherits: false;
4133
+ }
4134
+ @property --ui-icon-button-solid-shadow {
4135
+ syntax: "*";
4136
+ inherits: false;
4137
+ }
4138
+ @property --ui-icon-button-solid-surface {
4139
+ syntax: "*";
4140
+ inherits: false;
4141
+ }
4142
+ @property --ui-icon-button-solid-text {
4143
+ syntax: "*";
4144
+ inherits: false;
4145
+ }
4146
+ @property --ui-icon-button-surface {
4147
+ syntax: "*";
4148
+ inherits: false;
4149
+ }
4150
+
4151
+ /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
4152
+
4153
+ /* At rest an anticipatory button shows only its guide dot. The icon grows into place when
4154
+ proximity, hover, or focus reveals it; the button's hit area and guide remain stable. */
4155
+
4156
+ /* A touch target without a bigger button: an invisible hit area, at least the control
4157
+ minimum, centred on the button (::before is the anticipatory guide). */
4158
+
4159
+ /* A text button's companion uses control geometry; compact icon buttons keep their own density. */
4160
+
4161
+ /* Native toggle state persists after pointer release, including during loading. */
4162
+
4163
+ /* Disabled is a flat neutral control, independent of the active variant's tone. */
4164
+
4165
+ /* A component that sets its display still honours the hidden attribute on its root. */
4166
+ @scope (.ui-icon-button) to (.ui-spinner) {
4167
+ :scope:where([data-v-4a58a364]:scope) {
4168
+ /* Optional inherited action-group values keep text and icon actions under the same light.
4169
+ One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
4170
+ A single ambient lift avoids stacking a face gradient or another inset bevel. */
4171
+ --_ui-action-start: 1px;
4172
+ --_ui-action-edge: var(
4173
+ --ui-action-edge,
4174
+ inset var(--_ui-action-start) 1px 0 light-dark(
4175
+ rgb(255 255 255 / 0.08),
4176
+ rgb(255 255 255 / 0.06)
3870
4177
  ),
3871
4178
  inset calc(-1 * var(--_ui-action-start)) -1px 0 light-dark(
3872
4179
  rgb(0 0 0 / 0.08),
@@ -5923,1124 +6230,817 @@ ul[data-v-7d408909] {
5923
6230
  svg[data-v-3d55b8dc-s] {
5924
6231
  inline-size: var(--ui-icon-size-lg);
5925
6232
  block-size: var(--ui-icon-size-lg);
5926
- flex-shrink: 0;
5927
- }
5928
- @media (min-width: 768px) {
5929
- :scope:where([data-v-3d55b8dc]:scope):is([data-ui-floating-action-button-state~="mobileOnly"]) {
5930
- display: none;
5931
- }
5932
- }
5933
- :scope:where([data-v-3d55b8dc]:scope):is([hidden]) {
5934
- display: none;
5935
- }
5936
- }
5937
-
5938
- /* This component's hooks style the element they are set on, and never a nested one. */
5939
- @property --ui-grid-gap {
5940
- syntax: "*";
5941
- inherits: false;
5942
- }
5943
- @property --ui-grid-min {
5944
- syntax: "*";
5945
- inherits: false;
5946
- }
5947
-
5948
- /* A component that sets its display still honours the hidden attribute on its root. */
5949
- @scope (.ui-grid) {
5950
- :scope:where([data-v-30a8e139]:scope) {
5951
- --_grid-gap: var(--ui-space-4);
5952
- --_grid-min: 12rem;
5953
- display: grid;
5954
- gap: var(--ui-grid-gap, var(--_grid-gap));
5955
- grid-template-columns:
5956
- repeat(
5957
- auto-fit,
5958
- minmax(
5959
- min(
5960
- max(
5961
- var(--ui-grid-min, var(--_grid-min)),
5962
- calc(
5963
- (
5964
- 100% -
5965
- (
5966
- max(1, var(--_grid-column-cap, 9999)) - 1
5967
- ) *
5968
- var(--ui-grid-gap, var(--_grid-gap))
5969
- ) /
5970
- max(1, var(--_grid-column-cap, 9999))
5971
- )
5972
- ),
5973
- 100%
5974
- ),
5975
- 1fr
5976
- )
5977
- );
5978
- min-inline-size: 0;
5979
- max-inline-size: 100%;
5980
- margin: 0;
5981
- }
5982
- :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=xs"]) {
5983
- --_grid-gap: var(--ui-space-2);
5984
- }
5985
- :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=s"]) {
5986
- --_grid-gap: var(--ui-space-3);
5987
- }
5988
- :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=m"]) {
5989
- --_grid-gap: var(--ui-space-4);
5990
- }
5991
- :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=l"]) {
5992
- --_grid-gap: var(--ui-space-5);
5993
- }
5994
- :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=xl"]) {
5995
- --_grid-gap: var(--ui-space-6);
5996
- }
5997
- :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="min=md"]) {
5998
- --_grid-min: 16rem;
5999
- }
6000
- :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="min=lg"]) {
6001
- --_grid-min: 20rem;
6002
- }
6003
- :scope:where([data-v-30a8e139]:scope):is([hidden]) {
6004
- display: none;
6005
- }
6006
- }
6007
-
6008
- @scope (.ui-image) {
6009
- :scope:where([data-v-73881051]:scope) {
6010
- display: flex;
6011
- justify-content: flex-start;
6012
- box-sizing: border-box;
6013
- max-inline-size: 100%;
6014
- min-inline-size: 0;
6015
- margin: 0;
6016
- padding: var(--ui-space-3) 0;
6017
- }
6018
- :scope:where([data-v-73881051]:scope):is([data-ui-image-state~="placement=center"]) {
6019
- justify-content: center;
6020
- }
6021
- :scope:where([data-v-73881051]:scope):is([data-ui-image-state~="placement=wrap-left"]) {
6022
- float: left;
6023
- padding-inline-end: var(--ui-space-4);
6024
- }
6025
- :scope:where([data-v-73881051]:scope):is([data-ui-image-state~="placement=wrap-right"]) {
6026
- float: right;
6027
- padding-inline-start: var(--ui-space-4);
6028
- }
6029
- :scope:where([data-v-73881051]:scope):is(:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])) {
6030
- inline-size: calc(var(--_ui-image-width, calc(100% / 3)) + var(--ui-space-4));
6031
- }
6032
- :scope:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])
6033
- .frame[data-v-73881051] {
6034
- inline-size: 100%;
6035
- }
6036
- :scope:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])
6037
- .frame
6038
- img[data-v-73881051],
6039
- :scope:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])
6040
- .frame
6041
- img[data-v-73881051-s] {
6042
- inline-size: 100%;
6043
- }
6044
- .frame[data-v-73881051] {
6045
- position: relative;
6046
- flex: 0 1 auto;
6047
- inline-size: var(--_ui-image-width, fit-content);
6048
- max-inline-size: 100%;
6049
- min-inline-size: 0;
6050
- align-self: flex-start;
6051
- border-radius: var(--ui-radius-md);
6052
- }
6053
- .frame img[data-v-73881051], .frame img[data-v-73881051-s] {
6054
- display: block;
6055
- max-inline-size: 100%;
6056
- block-size: auto;
6057
- margin: 0;
6058
- border-radius: inherit;
6059
- }
6060
- :scope[data-resizing] .frame img[data-v-73881051], :scope[data-resizing] .frame img[data-v-73881051-s] {
6061
- inline-size: 100%;
6062
- }
6063
- :scope[data-ui-image-state~="selected"] .frame[data-v-73881051] {
6064
- outline: var(--ui-focus-width) solid var(--ui-focus-ring);
6065
- outline-offset: var(--ui-border-width);
6066
- }
6067
- .handle[data-v-73881051] {
6068
- position: absolute;
6069
- z-index: 1;
6070
- inline-size: 24px;
6071
- block-size: 24px;
6072
- padding: 0;
6073
- border: 0;
6074
- background: transparent;
6075
- touch-action: none;
6076
- }
6077
- .handle[data-v-73881051]::after {
6078
- content: "";
6079
- position: absolute;
6080
- inset: 8px;
6081
- background: var(--ui-surface);
6082
- border: var(--ui-border-width) solid var(--ui-focus-ring);
6083
- border-radius: var(--ui-radius-sm);
6084
- }
6085
- .handle[data-v-73881051]:focus-visible {
6086
- outline: var(--ui-focus-width) solid var(--ui-focus-ring);
6087
- border-radius: var(--ui-radius-sm);
6088
- }
6089
- .handle[data-corner="top-left"][data-v-73881051] {
6090
- top: -12px;
6091
- left: -12px;
6092
- cursor: nwse-resize;
6093
- }
6094
- .handle[data-corner="top-right"][data-v-73881051] {
6095
- top: -12px;
6096
- right: -12px;
6097
- cursor: nesw-resize;
6098
- }
6099
- .handle[data-corner="bottom-left"][data-v-73881051] {
6100
- bottom: -12px;
6101
- left: -12px;
6102
- cursor: nesw-resize;
6103
- }
6104
- .handle[data-corner="bottom-right"][data-v-73881051] {
6105
- bottom: -12px;
6106
- right: -12px;
6107
- cursor: nwse-resize;
6108
- }
6109
- .handles[hidden][data-v-73881051], :scope:where([data-v-73881051]:scope):is([hidden]) {
6110
- display: none;
6111
- }
6112
- @media (max-width: 767px) {
6113
- :scope:where([data-v-73881051]:scope):is(:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])) {
6114
- float: none;
6115
- inline-size: 100%;
6116
- padding-inline: 0;
6117
- }
6118
- :scope:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])
6119
- .handles[data-v-73881051] {
6120
- display: none;
6121
- }
6122
- }
6123
- @media (pointer: coarse) {
6124
- .handle[data-v-73881051] {
6125
- inline-size: 44px;
6126
- block-size: 44px;
6127
- }
6128
- .handle[data-v-73881051]::after {
6129
- inset: 18px;
6130
- }
6131
- .handle[data-corner="top-left"][data-v-73881051] {
6132
- top: -22px;
6133
- left: -22px;
6134
- }
6135
- .handle[data-corner="top-right"][data-v-73881051] {
6136
- top: -22px;
6137
- right: -22px;
6138
- }
6139
- .handle[data-corner="bottom-left"][data-v-73881051] {
6140
- bottom: -22px;
6141
- left: -22px;
6142
- }
6143
- .handle[data-corner="bottom-right"][data-v-73881051] {
6144
- bottom: -22px;
6145
- right: -22px;
6146
- }
6233
+ flex-shrink: 0;
6147
6234
  }
6148
- @media (forced-colors: active) {
6149
- :scope[data-ui-image-state~="selected"] .frame[data-v-73881051], .handle[data-v-73881051]:focus-visible {
6150
- outline-color: Highlight;
6235
+ @media (min-width: 768px) {
6236
+ :scope:where([data-v-3d55b8dc]:scope):is([data-ui-floating-action-button-state~="mobileOnly"]) {
6237
+ display: none;
6151
6238
  }
6152
- .handle[data-v-73881051]::after {
6153
- border-color: Highlight;
6154
- background: Canvas;
6155
6239
  }
6240
+ :scope:where([data-v-3d55b8dc]:scope):is([hidden]) {
6241
+ display: none;
6156
6242
  }
6157
6243
  }
6158
6244
 
6159
- @property --ui-input-group-radius {
6160
- syntax: "*";
6161
- inherits: false;
6162
- }
6163
- @property --ui-input-group-invalid-border {
6245
+ /* This component's hooks style the element they are set on, and never a nested one. */
6246
+ @property --ui-grid-gap {
6164
6247
  syntax: "*";
6165
6248
  inherits: false;
6166
6249
  }
6167
- @property --ui-input-group-invalid-focus-shadow {
6250
+ @property --ui-grid-min {
6168
6251
  syntax: "*";
6169
6252
  inherits: false;
6170
6253
  }
6171
- /* An input with fixed text before or after it, such as a domain after a site's name
6172
- ("acme" + ".example.com") or slashes around a path. The group draws the field's border and
6173
- focus ring around the input and its affixes together; the input inside drops its own through
6174
- its custom properties, so it is still the one ui-input, with its form behaviour intact. The
6175
- affixes are plain text beside the input, so name the input with a label that says what the
6176
- whole value is. The action slot takes one button at the end, inside the border, for the one
6177
- thing the field is for ("Continue" after a site's address), so it reads as the field's action
6178
- and not the form's. */
6179
-
6180
- /* The frame takes its input's size, so a small group lines up with small buttons and fields. */
6181
-
6182
- /* The ring shows when the field's input would show its own: when it is focus-visible, which a
6183
- text input is for a pointer as well as a keyboard. A focused action button draws its own. */
6184
-
6185
- /* Forced colors drop box shadows, so the focus ring becomes an outline. */
6186
-
6187
- /* Fixed text is part of the value, but should not look editable. */
6188
-
6189
- /* Centred rather than padded above and below: the group is exactly a lone Input's height, so a
6190
- small button sits inside it with the difference split evenly, and the field keeps its height. */
6191
-
6192
- /* Multiline text owns the first row; its action remains inside the same frame below it. */
6193
-
6194
- /* The same textarea keeps its full resizeable box. Its text reserves the action's live width,
6195
- so a translated label or pending indicator cannot cover what the person types. */
6196
6254
 
6197
6255
  /* A component that sets its display still honours the hidden attribute on its root. */
6198
- @scope (.ui-input-group) {
6199
- :scope:where([data-v-8b90cc23]:scope) {
6200
- /* The group's own border and height stand for the input's, so the group is a lone Input's height.
6201
- Hooks do not inherit, so these are defaults for the input; its own hooks still win. */
6202
- --_ui-default-input-border-width: 0;
6203
- --_ui-default-input-min-block-size: 0;
6204
- --_ui-default-input-border: transparent;
6205
- --_ui-default-input-border-hover: transparent;
6206
- --_ui-default-input-focus-border: transparent;
6207
- --_ui-default-input-invalid-border: transparent;
6208
- --_ui-default-input-invalid-focus-shadow: none;
6209
- --_ui-default-input-shadow: none;
6210
- --_ui-default-input-focus-shadow: none;
6211
- --_ui-default-input-focus-outline: none;
6212
- --_ui-default-input-radius: 0;
6213
- --_ui-default-input-surface: transparent;
6214
- --_ui-default-textarea-border-width: 0;
6215
- --_ui-default-textarea-border: transparent;
6216
- --_ui-default-textarea-border-hover: transparent;
6217
- --_ui-default-textarea-focus-border: transparent;
6218
- --_ui-default-textarea-invalid-border: transparent;
6219
- --_ui-default-textarea-invalid-focus-shadow: none;
6220
- --_ui-default-textarea-shadow: none;
6221
- --_ui-default-textarea-focus-shadow: none;
6222
- --_ui-default-textarea-focus-outline: none;
6223
- --_ui-default-textarea-radius: 0;
6224
- --_ui-default-textarea-surface: transparent;
6225
-
6226
- display: flex;
6227
- align-items: stretch;
6228
- box-sizing: border-box;
6229
- inline-size: 100%;
6256
+ @scope (.ui-grid) {
6257
+ :scope:where([data-v-30a8e139]:scope) {
6258
+ --_grid-gap: var(--ui-space-4);
6259
+ --_grid-min: 12rem;
6260
+ display: grid;
6261
+ gap: var(--ui-grid-gap, var(--_grid-gap));
6262
+ grid-template-columns:
6263
+ repeat(
6264
+ auto-fit,
6265
+ minmax(
6266
+ min(
6267
+ max(
6268
+ var(--ui-grid-min, var(--_grid-min)),
6269
+ calc(
6270
+ (
6271
+ 100% -
6272
+ (
6273
+ max(1, var(--_grid-column-cap, 9999)) - 1
6274
+ ) *
6275
+ var(--ui-grid-gap, var(--_grid-gap))
6276
+ ) /
6277
+ max(1, var(--_grid-column-cap, 9999))
6278
+ )
6279
+ ),
6280
+ 100%
6281
+ ),
6282
+ 1fr
6283
+ )
6284
+ );
6230
6285
  min-inline-size: 0;
6231
- min-block-size: var(--ui-control-size-md);
6232
- /* The frame reads the shared control tokens with a lone Input's fallbacks, so the two match. */
6233
- border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
6234
- border-radius: var(--ui-input-group-radius, var(--ui-field-radius, var(--ui-radius-md)));
6235
- background: var(--ui-control-surface, var(--ui-surface-elevated));
6236
- box-shadow: var(--ui-control-inset);
6237
- overflow: hidden;
6238
- /* A press anywhere in the frame focuses the input. */
6239
- cursor: text;
6240
- transition:
6241
- border-color var(--ui-motion-fast) var(--ui-motion-ease),
6242
- box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
6286
+ max-inline-size: 100%;
6287
+ margin: 0;
6243
6288
  }
6244
- :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="variant=subtle"]) {
6245
- border-color: var(--ui-border);
6246
- background: var(--ui-surface-muted);
6247
- box-shadow: none;
6289
+ :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=xs"]) {
6290
+ --_grid-gap: var(--ui-space-2);
6248
6291
  }
6249
- :scope:where([data-v-8b90cc23]:scope):is(:has(.field [data-ui-input-state~="size=sm"])) {
6250
- min-block-size: var(--ui-control-size-sm);
6292
+ :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=s"]) {
6293
+ --_grid-gap: var(--ui-space-3);
6251
6294
  }
6252
- :scope:where([data-v-8b90cc23]:scope):is(:has(.field [data-ui-input-state~="size=lg"])) {
6253
- min-block-size: var(--ui-control-size-lg);
6295
+ :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=m"]) {
6296
+ --_grid-gap: var(--ui-space-4);
6254
6297
  }
6255
- @media (pointer: coarse) {
6256
- :scope:where([data-v-8b90cc23]:scope) {
6257
- min-block-size: max(var(--ui-control-size-md), var(--ui-control-min-block-size));
6298
+ :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=l"]) {
6299
+ --_grid-gap: var(--ui-space-5);
6258
6300
  }
6259
- :scope:where([data-v-8b90cc23]:scope):is(:has(.field [data-ui-input-state~="size=sm"])) {
6260
- min-block-size: var(--ui-control-min-block-size);
6301
+ :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="gap=xl"]) {
6302
+ --_grid-gap: var(--ui-space-6);
6261
6303
  }
6304
+ :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="min=md"]) {
6305
+ --_grid-min: 16rem;
6262
6306
  }
6263
- :scope:where([data-v-8b90cc23]:scope):is(:hover:not(:has(:is(input, textarea):focus, :is(input, textarea):disabled, :is(input, textarea):read-only, [aria-invalid="true"], :is(:user-invalid, [data-user-invalid])))) {
6264
- border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
6307
+ :scope:where([data-v-30a8e139]:scope):is([data-ui-grid-state~="min=lg"]) {
6308
+ --_grid-min: 20rem;
6265
6309
  }
6266
- :scope:where([data-v-8b90cc23]:scope):is(:has(.field :is(input, textarea):focus-visible)) {
6267
- border-color: var(--ui-control-focus, var(--ui-accent-solid));
6268
- box-shadow:
6269
- var(--ui-control-inset),
6270
- var(--ui-control-focus-halo-shadow);
6310
+ :scope:where([data-v-30a8e139]:scope):is([hidden]) {
6311
+ display: none;
6271
6312
  }
6272
- :scope:where([data-v-8b90cc23]:scope):is(:has([aria-invalid="true"], :is(:user-invalid, [data-user-invalid]))) {
6273
- border-color: var(
6274
- --ui-input-group-invalid-border,
6275
- var(--ui-field-danger, var(--ui-danger-solid))
6276
- );
6277
6313
  }
6278
- :scope:where([data-v-8b90cc23]:scope):is(:has(:is(input, textarea):is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible)) {
6279
- box-shadow: var(
6280
- --ui-input-group-invalid-focus-shadow,
6281
- var(--ui-control-inset),
6282
- 0 0 0 calc(var(--ui-focus-width) * 1.5) color-mix(
6283
- in srgb,
6284
- var(--ui-input-group-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%,
6285
- transparent
6286
- )
6287
- );
6314
+
6315
+ @scope (.ui-image) {
6316
+ :scope:where([data-v-73881051]:scope) {
6317
+ display: flex;
6318
+ justify-content: flex-start;
6319
+ box-sizing: border-box;
6320
+ max-inline-size: 100%;
6321
+ min-inline-size: 0;
6322
+ margin: 0;
6323
+ padding: var(--ui-space-3) 0;
6288
6324
  }
6289
- @media (forced-colors: active) {
6290
- :scope:where([data-v-8b90cc23]:scope):is(:has(:is(input, textarea):focus-visible)) {
6291
- outline: var(--ui-focus-width) solid Highlight;
6292
- outline-offset: var(--ui-border-width);
6325
+ :scope:where([data-v-73881051]:scope):is([data-ui-image-state~="placement=center"]) {
6326
+ justify-content: center;
6293
6327
  }
6328
+ :scope:where([data-v-73881051]:scope):is([data-ui-image-state~="placement=wrap-left"]) {
6329
+ float: left;
6330
+ padding-inline-end: var(--ui-space-4);
6294
6331
  }
6295
- :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="disabled"]),
6296
- :scope:where([data-v-8b90cc23]:scope):is(:has(:is(input, textarea):disabled)) {
6297
- background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
6298
- box-shadow: none;
6299
- cursor: not-allowed;
6332
+ :scope:where([data-v-73881051]:scope):is([data-ui-image-state~="placement=wrap-right"]) {
6333
+ float: right;
6334
+ padding-inline-start: var(--ui-space-4);
6300
6335
  }
6301
- .field[data-v-8b90cc23] {
6302
- display: flex;
6303
- flex: 1;
6304
- min-inline-size: 0;
6336
+ :scope:where([data-v-73881051]:scope):is(:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])) {
6337
+ inline-size: calc(var(--_ui-image-width, calc(100% / 3)) + var(--ui-space-4));
6305
6338
  }
6306
- .affix[data-v-8b90cc23] {
6307
- display: inline-flex;
6308
- flex: none;
6309
- align-items: center;
6310
- padding-inline: var(--ui-space-2);
6311
- color: var(--ui-text-muted);
6312
- font-family: var(--ui-font-family-mono);
6313
- font-size: var(--ui-font-size-sm);
6314
- white-space: nowrap;
6339
+ :scope:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])
6340
+ .frame[data-v-73881051] {
6341
+ inline-size: 100%;
6315
6342
  }
6316
- .affix[data-v-8b90cc23]:has([slot="prefix"]), .affix[data-v-8b90cc23]:has([slot="suffix"]) {
6317
- background: var(--ui-surface-muted);
6343
+ :scope:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])
6344
+ .frame
6345
+ img[data-v-73881051],
6346
+ :scope:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])
6347
+ .frame
6348
+ img[data-v-73881051-s] {
6349
+ inline-size: 100%;
6318
6350
  }
6319
- .affix[data-v-8b90cc23]:has([slot="prefix"]) {
6320
- border-inline-end: var(--ui-border-width) solid var(--ui-border-divider);
6351
+ .frame[data-v-73881051] {
6352
+ position: relative;
6353
+ flex: 0 1 auto;
6354
+ inline-size: var(--_ui-image-width, fit-content);
6355
+ max-inline-size: 100%;
6356
+ min-inline-size: 0;
6357
+ align-self: flex-start;
6358
+ border-radius: var(--ui-radius-md);
6321
6359
  }
6322
- .affix[data-v-8b90cc23]:has([slot="suffix"]) {
6323
- border-inline-start: var(--ui-border-width) solid var(--ui-border-divider);
6360
+ .frame img[data-v-73881051], .frame img[data-v-73881051-s] {
6361
+ display: block;
6362
+ max-inline-size: 100%;
6363
+ block-size: auto;
6364
+ margin: 0;
6365
+ border-radius: inherit;
6324
6366
  }
6325
- :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="prefixKind=icon"]) {
6326
- --_ui-default-input-padding-inline-start: var(--ui-space-2);
6367
+ :scope[data-resizing] .frame img[data-v-73881051], :scope[data-resizing] .frame img[data-v-73881051-s] {
6368
+ inline-size: 100%;
6327
6369
  }
6328
- :scope[data-ui-input-group-state~="prefixKind=icon"] .affix[data-v-8b90cc23]:first-child {
6329
- padding-inline-end: 0;
6330
- border-inline-end: 0;
6370
+ :scope[data-ui-image-state~="selected"] .frame[data-v-73881051] {
6371
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
6372
+ outline-offset: var(--ui-border-width);
6373
+ }
6374
+ .handle[data-v-73881051] {
6375
+ position: absolute;
6376
+ z-index: 1;
6377
+ inline-size: 24px;
6378
+ block-size: 24px;
6379
+ padding: 0;
6380
+ border: 0;
6331
6381
  background: transparent;
6382
+ touch-action: none;
6332
6383
  }
6333
- .action[data-v-8b90cc23] {
6334
- display: flex;
6335
- flex: none;
6336
- align-items: center;
6337
- padding-inline: var(--ui-space-1);
6338
- }
6339
- :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="multiline"]) {
6340
- display: grid;
6341
- grid-template-columns: auto minmax(0, 1fr) auto;
6384
+ .handle[data-v-73881051]::after {
6385
+ content: "";
6386
+ position: absolute;
6387
+ inset: 8px;
6388
+ background: var(--ui-surface);
6389
+ border: var(--ui-border-width) solid var(--ui-focus-ring);
6390
+ border-radius: var(--ui-radius-sm);
6342
6391
  }
6343
- :scope[data-ui-input-group-state~="multiline"] .field[data-v-8b90cc23] {
6344
- grid-column: 2;
6392
+ .handle[data-v-73881051]:focus-visible {
6393
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
6394
+ border-radius: var(--ui-radius-sm);
6345
6395
  }
6346
- :scope[data-ui-input-group-state~="multiline"] .action[data-v-8b90cc23] {
6347
- grid-column: 1 / -1;
6348
- justify-content: end;
6349
- padding: var(--ui-space-2);
6350
- padding-block-start: 0;
6396
+ .handle[data-corner="top-left"][data-v-73881051] {
6397
+ top: -12px;
6398
+ left: -12px;
6399
+ cursor: nwse-resize;
6351
6400
  }
6352
- :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="multiline"][data-ui-input-group-state~="actionPosition=top-end"]) {
6353
- --_ui-default-textarea-padding-inline-end: calc(
6354
- var(--_ui-input-group-action-inline-size, 7rem) + var(--ui-space-3)
6355
- );
6401
+ .handle[data-corner="top-right"][data-v-73881051] {
6402
+ top: -12px;
6403
+ right: -12px;
6404
+ cursor: nesw-resize;
6356
6405
  }
6357
- :scope[data-ui-input-group-state~="multiline"][data-ui-input-group-state~="actionPosition=top-end"]
6358
- .field[data-v-8b90cc23] {
6359
- grid-row: 1;
6406
+ .handle[data-corner="bottom-left"][data-v-73881051] {
6407
+ bottom: -12px;
6408
+ left: -12px;
6409
+ cursor: nesw-resize;
6360
6410
  }
6361
- :scope[data-ui-input-group-state~="multiline"][data-ui-input-group-state~="actionPosition=top-end"]
6362
- .action[data-v-8b90cc23] {
6363
- grid-column: 2;
6364
- grid-row: 1;
6365
- align-self: start;
6366
- justify-self: end;
6367
- padding: var(--ui-space-2);
6411
+ .handle[data-corner="bottom-right"][data-v-73881051] {
6412
+ bottom: -12px;
6413
+ right: -12px;
6414
+ cursor: nwse-resize;
6368
6415
  }
6369
- .affix[data-v-8b90cc23]:empty, .action[data-v-8b90cc23]:empty {
6416
+ .handles[hidden][data-v-73881051], :scope:where([data-v-73881051]:scope):is([hidden]) {
6370
6417
  display: none;
6371
6418
  }
6372
- :scope:where([data-v-8b90cc23]:scope):is([hidden]) {
6373
- display: none;
6419
+ @media (max-width: 767px) {
6420
+ :scope:where([data-v-73881051]:scope):is(:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])) {
6421
+ float: none;
6422
+ inline-size: 100%;
6423
+ padding-inline: 0;
6374
6424
  }
6425
+ :scope:is(:scope[data-ui-image-state~="placement=wrap-left"], :scope[data-ui-image-state~="placement=wrap-right"])
6426
+ .handles[data-v-73881051] {
6427
+ display: none;
6375
6428
  }
6376
-
6377
- /* This component's hooks style the element they are set on, and never a nested one. */
6378
- @property --ui-list-gap {
6379
- syntax: "*";
6380
- inherits: false;
6381
6429
  }
6382
- @property --ui-list-min-item-width {
6383
- syntax: "*";
6384
- inherits: false;
6430
+ @media (pointer: coarse) {
6431
+ .handle[data-v-73881051] {
6432
+ inline-size: 44px;
6433
+ block-size: 44px;
6385
6434
  }
6386
-
6387
- /* A list of native li elements or structured ui-list-item components. It owns the spacing between them, so a view never sets it. The
6388
- explicit list role keeps the list announced as one: some browsers drop it from a list with no
6389
- markers. */
6390
-
6391
- /* Compact passes its size to the items through private properties, which cross into each item. */
6392
-
6393
- /* A component that sets its display still honours the hidden attribute on its root. */
6394
- @scope (.ui-list) {
6395
- :scope:where([data-v-4ed3243c]:scope) {
6396
- --_list-gap: var(--ui-list-gap, var(--ui-space-1));
6397
- --_list-min-item-width: var(--ui-list-min-item-width, 14rem);
6398
- display: flex;
6399
- flex-direction: column;
6400
- inline-size: 100%;
6401
- gap: var(--_list-gap);
6402
- min-inline-size: 0;
6403
- margin: 0;
6404
- padding: 0;
6405
- list-style: none;
6435
+ .handle[data-v-73881051]::after {
6436
+ inset: 18px;
6406
6437
  }
6407
- :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="as=ol"]),
6408
- :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="markers=disc"]) {
6409
- padding-inline-start: var(--ui-space-5);
6438
+ .handle[data-corner="top-left"][data-v-73881051] {
6439
+ top: -22px;
6440
+ left: -22px;
6410
6441
  }
6411
- :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="as=ol"]) {
6412
- list-style: decimal;
6442
+ .handle[data-corner="top-right"][data-v-73881051] {
6443
+ top: -22px;
6444
+ right: -22px;
6413
6445
  }
6414
- :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="markers=disc"]) {
6415
- list-style: disc;
6446
+ .handle[data-corner="bottom-left"][data-v-73881051] {
6447
+ bottom: -22px;
6448
+ left: -22px;
6416
6449
  }
6417
- :scope > li[data-v-4ed3243c-s] {
6418
- box-sizing: border-box;
6419
- min-inline-size: 0;
6420
- padding: var(--_ui-list-native-padding-block, var(--ui-space-2))
6421
- var(--_ui-list-native-padding-inline, var(--ui-space-3));
6422
- border-radius: var(--ui-radius-md);
6423
- color: var(--ui-text-primary);
6424
- list-style: inherit;
6450
+ .handle[data-corner="bottom-right"][data-v-73881051] {
6451
+ bottom: -22px;
6452
+ right: -22px;
6425
6453
  }
6426
- :scope > li.card[data-v-4ed3243c-s] {
6427
- padding: var(--_ui-list-native-padding-block, var(--ui-space-3))
6428
- var(--_ui-list-native-padding-inline, var(--ui-space-4));
6429
- border: var(--ui-border-width) solid var(--ui-border-strong);
6430
- border-radius: var(--ui-radius-lg);
6431
- background: var(--ui-surface-raised);
6432
- list-style: none;
6433
6454
  }
6434
- :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="density=compact"]) {
6435
- --_list-gap: var(--ui-list-gap, var(--ui-space-2));
6436
- --_ui-list-item-min-size: 0;
6437
- --_ui-list-item-padding-block: 0;
6438
- --_ui-list-item-padding-inline: 0;
6439
- --_ui-list-item-title-weight: var(--ui-font-normal);
6440
- --_ui-list-native-padding-block: 0;
6441
- --_ui-list-native-padding-inline: 0;
6455
+ @media (forced-colors: active) {
6456
+ :scope[data-ui-image-state~="selected"] .frame[data-v-73881051], .handle[data-v-73881051]:focus-visible {
6457
+ outline-color: Highlight;
6442
6458
  }
6443
- :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="layout=grid"]) {
6444
- --_list-gap: var(--ui-list-gap, var(--ui-space-3));
6445
- display: grid;
6446
- grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--_list-min-item-width)), 1fr));
6459
+ .handle[data-v-73881051]::after {
6460
+ border-color: Highlight;
6461
+ background: Canvas;
6447
6462
  }
6448
- :scope:where([data-v-4ed3243c]:scope):is([hidden]) {
6449
- display: none;
6450
6463
  }
6451
6464
  }
6452
6465
 
6453
- /* This component's hooks style the element they are set on, and never a nested one. */
6454
- @property --ui-list-item-gap {
6455
- syntax: "*";
6456
- inherits: false;
6457
- }
6458
- @property --ui-list-item-icon-size {
6466
+ @property --ui-input-group-radius {
6459
6467
  syntax: "*";
6460
6468
  inherits: false;
6461
6469
  }
6462
- @property --ui-list-item-padding-block {
6470
+ @property --ui-input-group-invalid-border {
6463
6471
  syntax: "*";
6464
6472
  inherits: false;
6465
6473
  }
6466
- @property --ui-list-item-padding-inline {
6474
+ @property --ui-input-group-invalid-focus-shadow {
6467
6475
  syntax: "*";
6468
6476
  inherits: false;
6469
6477
  }
6478
+ /* An input with fixed text before or after it, such as a domain after a site's name
6479
+ ("acme" + ".example.com") or slashes around a path. The group draws the field's border and
6480
+ focus ring around the input and its affixes together; the input inside drops its own through
6481
+ its custom properties, so it is still the one ui-input, with its form behaviour intact. The
6482
+ affixes are plain text beside the input, so name the input with a label that says what the
6483
+ whole value is. The action slot takes one button at the end, inside the border, for the one
6484
+ thing the field is for ("Continue" after a site's address), so it reads as the field's action
6485
+ and not the form's. */
6470
6486
 
6471
- /* One entry in a list: something to recognise (leading, usually an icon), its name (the default
6472
- slot), one line about it (description), and what it offers (trailing, such as a button or a
6473
- badge). The title and description are one line each and end in an ellipsis, so every item in a
6474
- list has the same height.
6487
+ /* The frame takes its input's size, so a small group lines up with small buttons and fields. */
6475
6488
 
6476
- A link in the title is the whole item: its hit area stretches over the item, so the icon and the
6477
- padding follow it too, and the item takes the link's focus ring. The link stays a real link, so
6478
- a router, a modified click, and "open in new tab" all work. Trailing controls sit above it and
6479
- stay their own. */
6489
+ /* The ring shows when the field's input would show its own: when it is focus-visible, which a
6490
+ text input is for a pointer as well as a keyboard. A focused action button draws its own. */
6480
6491
 
6481
- /* Framed cards already have their own edge; the stronger focus ring stays separate. */
6492
+ /* Forced colors drop box shadows, so the focus ring becomes an outline. */
6482
6493
 
6483
- /* An explicitly independent leading control sits above the stretched row link. */
6494
+ /* Fixed text is part of the value, but should not look editable. */
6484
6495
 
6485
- /* Trailing controls take their own clicks, above the title link's stretched hit area. */
6496
+ /* Centred rather than padded above and below: the group is exactly a lone Input's height, so a
6497
+ small button sits inside it with the difference split evenly, and the field keeps its height. */
6486
6498
 
6487
- /* Keep identity and disclosure marks beside the first line, even with a long description. */
6499
+ /* Multiline text owns the first row; its action remains inside the same frame below it. */
6488
6500
 
6489
- /* An unused region takes no space. */
6501
+ /* The same textarea keeps its full resizeable box. Its text reserves the action's live width,
6502
+ so a translated label or pending indicator cannot cover what the person types. */
6490
6503
 
6491
6504
  /* A component that sets its display still honours the hidden attribute on its root. */
6492
- @scope (.ui-list-item) {
6493
- :scope:where([data-v-8c851f73]:scope) {
6494
- /* Hooks do not inherit, so the parts below read them from the root. */
6495
- --_ui-list-item-icon-size: var(--ui-list-item-icon-size);
6505
+ @scope (.ui-input-group) {
6506
+ :scope:where([data-v-8b90cc23]:scope) {
6507
+ /* The group's own border and height stand for the input's, so the group is a lone Input's height.
6508
+ Hooks do not inherit, so these are defaults for the input; its own hooks still win. */
6509
+ --_ui-default-input-border-width: 0;
6510
+ --_ui-default-input-min-block-size: 0;
6511
+ --_ui-default-input-border: transparent;
6512
+ --_ui-default-input-border-hover: transparent;
6513
+ --_ui-default-input-focus-border: transparent;
6514
+ --_ui-default-input-invalid-border: transparent;
6515
+ --_ui-default-input-invalid-focus-shadow: none;
6516
+ --_ui-default-input-shadow: none;
6517
+ --_ui-default-input-focus-shadow: none;
6518
+ --_ui-default-input-focus-outline: none;
6519
+ --_ui-default-input-radius: 0;
6520
+ --_ui-default-input-surface: transparent;
6521
+ --_ui-default-textarea-border-width: 0;
6522
+ --_ui-default-textarea-border: transparent;
6523
+ --_ui-default-textarea-border-hover: transparent;
6524
+ --_ui-default-textarea-focus-border: transparent;
6525
+ --_ui-default-textarea-invalid-border: transparent;
6526
+ --_ui-default-textarea-invalid-focus-shadow: none;
6527
+ --_ui-default-textarea-shadow: none;
6528
+ --_ui-default-textarea-focus-shadow: none;
6529
+ --_ui-default-textarea-focus-outline: none;
6530
+ --_ui-default-textarea-radius: 0;
6531
+ --_ui-default-textarea-surface: transparent;
6496
6532
 
6497
- position: relative;
6498
- box-sizing: border-box;
6499
6533
  display: flex;
6500
- align-items: center;
6501
- gap: var(--ui-list-item-gap, var(--ui-space-3));
6534
+ align-items: stretch;
6535
+ box-sizing: border-box;
6536
+ inline-size: 100%;
6502
6537
  min-inline-size: 0;
6503
- min-block-size: var(--_ui-list-item-min-size, var(--ui-control-size, 2.5rem));
6504
- padding-block: var(
6505
- --ui-list-item-padding-block,
6506
- var(--_ui-list-item-padding-block, var(--ui-space-2))
6507
- );
6508
- padding-inline: var(
6509
- --ui-list-item-padding-inline,
6510
- var(--_ui-list-item-padding-inline, var(--ui-space-3))
6511
- );
6512
- border-radius: var(--ui-selection-radius);
6513
- color: var(--ui-text-primary);
6538
+ min-block-size: var(--ui-control-size-md);
6539
+ /* The frame reads the shared control tokens with a lone Input's fallbacks, so the two match. */
6540
+ border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
6541
+ border-radius: var(--ui-input-group-radius, var(--ui-field-radius, var(--ui-radius-md)));
6542
+ background: var(--ui-control-surface, var(--ui-surface-elevated));
6543
+ box-shadow: var(--ui-control-inset);
6544
+ overflow: hidden;
6545
+ /* A press anywhere in the frame focuses the input. */
6546
+ cursor: text;
6514
6547
  transition:
6515
- background-color var(--ui-motion-fast) var(--ui-motion-ease),
6516
- border-color var(--ui-motion-fast) var(--ui-motion-ease);
6548
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
6549
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
6517
6550
  }
6518
- :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="variant=card"]) {
6519
- padding-block: var(--ui-list-item-padding-block, var(--ui-space-3));
6520
- padding-inline: var(--ui-list-item-padding-inline, var(--ui-space-4));
6521
- border: var(--ui-border-width) solid var(--ui-border-strong);
6522
- border-radius: var(--ui-radius-lg);
6523
- background: var(--ui-surface-raised);
6551
+ :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="variant=subtle"]) {
6552
+ border-color: var(--ui-border);
6553
+ background: var(--ui-surface-muted);
6554
+ box-shadow: none;
6524
6555
  }
6525
- :scope:where([data-v-8c851f73]:scope):is(:where(:has(.title a[href])):hover),
6526
- :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="highlighted"]),
6527
- :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="current"]) {
6528
- background: var(--_ui-selection-context-surface, var(--ui-selection-surface));
6529
- box-shadow: inset 0 0 0 var(--ui-border-width)
6530
- var(--_ui-selection-context-border, var(--ui-selection-border));
6556
+ :scope:where([data-v-8b90cc23]:scope):is(:has(.field [data-ui-input-state~="size=sm"])) {
6557
+ min-block-size: var(--ui-control-size-sm);
6531
6558
  }
6532
- :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="variant=card"]:where(:has(.title
6533
- a[href])):hover) {
6534
- border-color: var(--ui-border-strong);
6559
+ :scope:where([data-v-8b90cc23]:scope):is(:has(.field [data-ui-input-state~="size=lg"])) {
6560
+ min-block-size: var(--ui-control-size-lg);
6535
6561
  }
6536
- :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="current"]) {
6537
- color: var(--_ui-selection-context-text, var(--ui-selection-text));
6562
+ @media (pointer: coarse) {
6563
+ :scope:where([data-v-8b90cc23]:scope) {
6564
+ min-block-size: max(var(--ui-control-size-md), var(--ui-control-min-block-size));
6538
6565
  }
6539
- :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="variant=card"]) {
6540
- box-shadow: none;
6566
+ :scope:where([data-v-8b90cc23]:scope):is(:has(.field [data-ui-input-state~="size=sm"])) {
6567
+ min-block-size: var(--ui-control-min-block-size);
6541
6568
  }
6542
- :scope:where([data-v-8c851f73]:scope):is(:has(.title a[href]:focus-visible)) {
6543
- box-shadow: 0 0 0 var(--ui-focus-width) var(--ui-focus-ring);
6544
6569
  }
6545
- .leading[data-v-8c851f73], .trailing[data-v-8c851f73] {
6546
- display: inline-flex;
6547
- flex: none;
6548
- align-items: center;
6549
- gap: var(--ui-space-2);
6570
+ :scope:where([data-v-8b90cc23]:scope):is(:hover:not(:has(:is(input, textarea):focus, :is(input, textarea):disabled, :is(input, textarea):read-only, [aria-invalid="true"], :is(:user-invalid, [data-user-invalid])))) {
6571
+ border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
6550
6572
  }
6551
- .leading[data-v-8c851f73] {
6552
- color: var(--ui-text-muted);
6553
- font-size: var(--_ui-list-item-icon-size, var(--ui-font-size-lg));
6573
+ :scope:where([data-v-8b90cc23]:scope):is(:has(.field :is(input, textarea):focus-visible)) {
6574
+ border-color: var(--ui-control-focus, var(--ui-accent-solid));
6575
+ box-shadow:
6576
+ var(--ui-control-inset),
6577
+ var(--ui-control-focus-halo-shadow);
6554
6578
  }
6555
- :scope[data-ui-list-item-state~="current"] .leading[data-v-8c851f73] {
6556
- color: var(--_ui-selection-context-text, var(--ui-selection-text));
6579
+ :scope:where([data-v-8b90cc23]:scope):is(:has([aria-invalid="true"], :is(:user-invalid, [data-user-invalid]))) {
6580
+ border-color: var(
6581
+ --ui-input-group-invalid-border,
6582
+ var(--ui-field-danger, var(--ui-danger-solid))
6583
+ );
6557
6584
  }
6558
- :scope[data-ui-list-item-state~="leadingInteractive"] .leading[data-v-8c851f73] {
6559
- position: relative;
6560
- z-index: 1;
6585
+ :scope:where([data-v-8b90cc23]:scope):is(:has(:is(input, textarea):is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible)) {
6586
+ box-shadow: var(
6587
+ --ui-input-group-invalid-focus-shadow,
6588
+ var(--ui-control-inset),
6589
+ 0 0 0 calc(var(--ui-focus-width) * 1.5) color-mix(
6590
+ in srgb,
6591
+ var(--ui-input-group-invalid-border, var(--ui-field-danger, var(--ui-danger-solid))) 22%,
6592
+ transparent
6593
+ )
6594
+ );
6561
6595
  }
6562
- .trailing[data-v-8c851f73] {
6563
- position: relative;
6564
- z-index: 1;
6565
- color: var(--ui-text-muted);
6566
- font-size: var(--ui-font-size-sm);
6596
+ @media (forced-colors: active) {
6597
+ :scope:where([data-v-8b90cc23]:scope):is(:has(:is(input, textarea):focus-visible)) {
6598
+ outline: var(--ui-focus-width) solid Highlight;
6599
+ outline-offset: var(--ui-border-width);
6567
6600
  }
6568
- .content[data-v-8c851f73] {
6601
+ }
6602
+ :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="disabled"]),
6603
+ :scope:where([data-v-8b90cc23]:scope):is(:has(:is(input, textarea):disabled)) {
6604
+ background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
6605
+ box-shadow: none;
6606
+ cursor: not-allowed;
6607
+ }
6608
+ .field[data-v-8b90cc23] {
6569
6609
  display: flex;
6570
6610
  flex: 1;
6571
- flex-direction: column;
6572
- gap: var(--ui-space-0-5, 2px);
6573
6611
  min-inline-size: 0;
6574
6612
  }
6575
- .title[data-v-8c851f73], .description[data-v-8c851f73] {
6576
- display: block;
6577
- min-inline-size: 0;
6578
- overflow: hidden;
6579
- text-overflow: ellipsis;
6613
+ .affix[data-v-8b90cc23] {
6614
+ display: inline-flex;
6615
+ flex: none;
6616
+ align-items: center;
6617
+ padding-inline: var(--ui-space-2);
6618
+ color: var(--ui-text-muted);
6619
+ font-family: var(--ui-font-family-mono);
6620
+ font-size: var(--ui-font-size-sm);
6580
6621
  white-space: nowrap;
6581
6622
  }
6582
- :scope[data-ui-list-item-state~="wrap"] .title[data-v-8c851f73],
6583
- :scope[data-ui-list-item-state~="wrap"] .description[data-v-8c851f73] {
6584
- white-space: normal;
6585
- overflow-wrap: anywhere;
6623
+ .affix[data-v-8b90cc23]:has([slot="prefix"]), .affix[data-v-8b90cc23]:has([slot="suffix"]) {
6624
+ background: var(--ui-surface-muted);
6586
6625
  }
6587
- .title[data-v-8c851f73] {
6588
- font-size: var(--ui-font-size-md);
6589
- font-weight: var(--_ui-list-item-title-weight, var(--ui-font-medium));
6590
- line-height: var(--ui-line-height-tight);
6626
+ .affix[data-v-8b90cc23]:has([slot="prefix"]) {
6627
+ border-inline-end: var(--ui-border-width) solid var(--ui-border-divider);
6591
6628
  }
6592
- :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="align=title"]) {
6593
- align-items: flex-start;
6629
+ .affix[data-v-8b90cc23]:has([slot="suffix"]) {
6630
+ border-inline-start: var(--ui-border-width) solid var(--ui-border-divider);
6594
6631
  }
6595
- :scope[data-ui-list-item-state~="align=title"] .leading[data-v-8c851f73],
6596
- :scope[data-ui-list-item-state~="align=title"] .trailing[data-v-8c851f73] {
6597
- min-block-size: calc(var(--ui-font-size-md) * var(--ui-line-height-tight));
6632
+ :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="prefixKind=icon"]) {
6633
+ --_ui-default-input-padding-inline-start: var(--ui-space-2);
6598
6634
  }
6599
- .description[data-v-8c851f73] {
6600
- color: var(--ui-text-muted);
6601
- font-size: var(--ui-font-size-sm);
6602
- line-height: var(--ui-line-height-tight);
6635
+ :scope[data-ui-input-group-state~="prefixKind=icon"] .affix[data-v-8b90cc23]:first-child {
6636
+ padding-inline-end: 0;
6637
+ border-inline-end: 0;
6638
+ background: transparent;
6603
6639
  }
6604
- .title > a[data-v-8c851f73-s] {
6605
- color: inherit;
6606
- text-decoration: none;
6640
+ .action[data-v-8b90cc23] {
6641
+ display: flex;
6642
+ flex: none;
6643
+ align-items: center;
6644
+ padding-inline: var(--ui-space-1);
6607
6645
  }
6608
- .title > a[data-v-8c851f73-s]:focus-visible {
6609
- outline: none;
6610
- box-shadow: none;
6646
+ :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="multiline"]) {
6647
+ display: grid;
6648
+ grid-template-columns: auto minmax(0, 1fr) auto;
6611
6649
  }
6612
- .title > a[href][data-v-8c851f73-s]::after {
6613
- position: absolute;
6614
- inset: 0;
6615
- border-radius: inherit;
6616
- content: "";
6650
+ :scope[data-ui-input-group-state~="multiline"] .field[data-v-8b90cc23] {
6651
+ grid-column: 2;
6617
6652
  }
6618
- .leading[data-v-8c851f73]:empty, .description[data-v-8c851f73]:empty, .trailing[data-v-8c851f73]:empty {
6619
- display: none;
6653
+ :scope[data-ui-input-group-state~="multiline"] .action[data-v-8b90cc23] {
6654
+ grid-column: 1 / -1;
6655
+ justify-content: end;
6656
+ padding: var(--ui-space-2);
6657
+ padding-block-start: 0;
6620
6658
  }
6621
- @media (forced-colors: active) {
6622
- :scope:where([data-v-8c851f73]:scope):is(:has(a:focus-visible)) {
6623
- outline: var(--ui-focus-width) solid Highlight;
6624
- outline-offset: calc(-1 * var(--ui-focus-width));
6659
+ :scope:where([data-v-8b90cc23]:scope):is([data-ui-input-group-state~="multiline"][data-ui-input-group-state~="actionPosition=top-end"]) {
6660
+ --_ui-default-textarea-padding-inline-end: calc(
6661
+ var(--_ui-input-group-action-inline-size, 7rem) + var(--ui-space-3)
6662
+ );
6625
6663
  }
6626
- :is(:scope[data-ui-list-item-state~="current"][data-v-8c851f73], :scope[data-ui-list-item-state~="highlighted"][data-v-8c851f73]):not(:has(a:focus-visible)) {
6627
- outline: var(--ui-border-width) solid Highlight;
6628
- outline-offset: calc(-1 * var(--ui-border-width));
6664
+ :scope[data-ui-input-group-state~="multiline"][data-ui-input-group-state~="actionPosition=top-end"]
6665
+ .field[data-v-8b90cc23] {
6666
+ grid-row: 1;
6629
6667
  }
6668
+ :scope[data-ui-input-group-state~="multiline"][data-ui-input-group-state~="actionPosition=top-end"]
6669
+ .action[data-v-8b90cc23] {
6670
+ grid-column: 2;
6671
+ grid-row: 1;
6672
+ align-self: start;
6673
+ justify-self: end;
6674
+ padding: var(--ui-space-2);
6630
6675
  }
6631
- :scope:where([data-v-8c851f73]:scope):is([hidden]) {
6676
+ .affix[data-v-8b90cc23]:empty, .action[data-v-8b90cc23]:empty {
6632
6677
  display: none;
6633
6678
  }
6679
+ :scope:where([data-v-8b90cc23]:scope):is([hidden]) {
6680
+ display: none;
6634
6681
  }
6635
-
6636
- @property --ui-listbox-radius {
6637
- syntax: "*";
6638
- inherits: false;
6639
- }
6640
- @property --ui-listbox-border {
6641
- syntax: "*";
6642
- inherits: false;
6643
- }
6644
- @property --ui-listbox-surface {
6645
- syntax: "*";
6646
- inherits: false;
6647
6682
  }
6648
- @property --ui-listbox-focus-shadow {
6683
+
6684
+ /* This component's hooks style the element they are set on, and never a nested one. */
6685
+ @property --ui-list-gap {
6649
6686
  syntax: "*";
6650
6687
  inherits: false;
6651
6688
  }
6652
- @property --ui-listbox-invalid-border {
6689
+ @property --ui-list-min-item-width {
6653
6690
  syntax: "*";
6654
6691
  inherits: false;
6655
6692
  }
6656
6693
 
6657
- /* Its own box around the nested Scroll Area, which it shrinks into so the choices scroll. */
6658
- @scope (.ui-listbox) to (.ui-scroll-area) {
6659
- :scope:where([data-v-93820102]:scope) {
6660
- position: relative;
6661
- box-sizing: border-box;
6662
- display: block;
6694
+ /* A list of native li elements or structured ui-list-item components. It owns the spacing between them, so a view never sets it. The
6695
+ explicit list role keeps the list announced as one: some browsers drop it from a list with no
6696
+ markers. */
6697
+
6698
+ /* Compact passes its size to the items through private properties, which cross into each item. */
6699
+
6700
+ /* A component that sets its display still honours the hidden attribute on its root. */
6701
+ @scope (.ui-list) {
6702
+ :scope:where([data-v-4ed3243c]:scope) {
6703
+ --_list-gap: var(--ui-list-gap, var(--ui-space-1));
6704
+ --_list-min-item-width: var(--ui-list-min-item-width, 14rem);
6705
+ display: flex;
6706
+ flex-direction: column;
6663
6707
  inline-size: 100%;
6708
+ gap: var(--_list-gap);
6664
6709
  min-inline-size: 0;
6665
6710
  margin: 0;
6666
- padding: var(--ui-space-1);
6667
- border: var(--ui-border-width) solid var(--ui-listbox-border, var(--ui-control-border));
6668
- border-radius: var(--ui-listbox-radius, var(--ui-field-radius, var(--ui-radius-md)));
6669
- background: var(--ui-listbox-surface, var(--ui-control-surface));
6670
- color: var(--ui-text-primary);
6671
- font: inherit;
6672
- line-height: var(--ui-line-height-md);
6673
- box-shadow: var(--ui-control-inset);
6674
- outline: none;
6711
+ padding: 0;
6712
+ list-style: none;
6675
6713
  }
6676
- .choices[data-v-93820102] {
6677
- display: flex;
6678
- flex-direction: column;
6679
- max-block-size: calc(max(2, var(--_rows, 5)) * var(--ui-control-size-md));
6714
+ :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="as=ol"]),
6715
+ :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="markers=disc"]) {
6716
+ padding-inline-start: var(--ui-space-5);
6680
6717
  }
6681
- :scope:where([data-v-93820102]:scope):is(:not([data-enhanced])) {
6682
- padding: 0;
6683
- border: 0;
6684
- background: transparent;
6685
- box-shadow: none;
6718
+ :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="as=ol"]) {
6719
+ list-style: decimal;
6686
6720
  }
6687
- :scope:not([data-enhanced]) .choices[data-v-93820102], :scope[data-enhanced] .fallback[data-v-93820102] {
6688
- display: none;
6721
+ :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="markers=disc"]) {
6722
+ list-style: disc;
6689
6723
  }
6690
- .fallback[data-v-93820102] {
6724
+ :scope > li[data-v-4ed3243c-s] {
6691
6725
  box-sizing: border-box;
6692
- inline-size: 100%;
6693
- font: inherit;
6694
- }
6695
- .validity[data-v-93820102] {
6696
- position: absolute;
6697
- inline-size: 1px;
6698
- block-size: 1px;
6699
- overflow: hidden;
6700
- clip-path: inset(50%);
6701
- opacity: 0;
6702
- pointer-events: none;
6726
+ min-inline-size: 0;
6727
+ padding: var(--_ui-list-native-padding-block, var(--ui-space-2))
6728
+ var(--_ui-list-native-padding-inline, var(--ui-space-3));
6729
+ border-radius: var(--ui-radius-md);
6730
+ color: var(--ui-text-primary);
6731
+ list-style: inherit;
6703
6732
  }
6704
- :scope:where([data-v-93820102]:scope):is(:focus-visible) {
6705
- border-color: var(--ui-control-focus);
6706
- outline: var(--ui-focus-width) solid var(--ui-focus-ring);
6707
- outline-offset: var(--ui-focus-width);
6708
- box-shadow: var(--ui-listbox-focus-shadow, var(--ui-focus-halo));
6733
+ :scope > li.card[data-v-4ed3243c-s] {
6734
+ padding: var(--_ui-list-native-padding-block, var(--ui-space-3))
6735
+ var(--_ui-list-native-padding-inline, var(--ui-space-4));
6736
+ border: var(--ui-border-width) solid var(--ui-border-strong);
6737
+ border-radius: var(--ui-radius-lg);
6738
+ background: var(--ui-surface-raised);
6739
+ list-style: none;
6709
6740
  }
6710
- :scope:where([data-v-93820102]:scope):is([aria-invalid="true"]) {
6711
- border-color: var(--ui-listbox-invalid-border, var(--ui-field-danger, var(--ui-danger)));
6741
+ :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="density=compact"]) {
6742
+ --_list-gap: var(--ui-list-gap, var(--ui-space-2));
6743
+ --_ui-list-item-min-size: 0;
6744
+ --_ui-list-item-padding-block: 0;
6745
+ --_ui-list-item-padding-inline: 0;
6746
+ --_ui-list-item-title-weight: var(--ui-font-normal);
6747
+ --_ui-list-native-padding-block: 0;
6748
+ --_ui-list-native-padding-inline: 0;
6712
6749
  }
6713
- :scope:where([data-v-93820102]:scope):is([aria-disabled="true"]) {
6714
- background: var(--ui-control-surface-disabled);
6715
- color: var(--ui-disabled-text);
6716
- box-shadow: none;
6717
- cursor: not-allowed;
6750
+ :scope:where([data-v-4ed3243c]:scope):is([data-ui-list-state~="layout=grid"]) {
6751
+ --_list-gap: var(--ui-list-gap, var(--ui-space-3));
6752
+ display: grid;
6753
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--_list-min-item-width)), 1fr));
6718
6754
  }
6719
- :scope:where([data-v-93820102]:scope):is([hidden]) {
6755
+ :scope:where([data-v-4ed3243c]:scope):is([hidden]) {
6720
6756
  display: none;
6721
6757
  }
6722
6758
  }
6723
6759
 
6724
6760
  /* This component's hooks style the element they are set on, and never a nested one. */
6725
- @property --ui-menu-surface {
6726
- syntax: "*";
6727
- inherits: false;
6728
- }
6729
- @property --ui-menu-border {
6761
+ @property --ui-list-item-gap {
6730
6762
  syntax: "*";
6731
6763
  inherits: false;
6732
6764
  }
6733
- @property --ui-menu-radius {
6765
+ @property --ui-list-item-icon-size {
6734
6766
  syntax: "*";
6735
6767
  inherits: false;
6736
6768
  }
6737
- @property --ui-menu-shadow {
6769
+ @property --ui-list-item-padding-block {
6738
6770
  syntax: "*";
6739
6771
  inherits: false;
6740
6772
  }
6741
- @property --ui-menu-viewport-gap {
6773
+ @property --ui-list-item-padding-inline {
6742
6774
  syntax: "*";
6743
6775
  inherits: false;
6744
6776
  }
6745
6777
 
6746
- /* Compact sets its items' defaults, so nothing has to rescale a global; an item's own hooks
6747
- still win. */
6778
+ /* One entry in a list: something to recognise (leading, usually an icon), its name (the default
6779
+ slot), one line about it (description), and what it offers (trailing, such as a button or a
6780
+ badge). The title and description are one line each and end in an ellipsis, so every item in a
6781
+ list has the same height.
6748
6782
 
6749
- /* Small follows its trigger down: an item's own hooks still win. */
6750
- @scope (.ui-menu) {
6751
- :scope:where([data-v-1ded0073]:scope):is([data-ui-menu-state~="density=compact"]) {
6752
- --_ui-default-menu-item-padding-block: var(--ui-space-1);
6753
- --_ui-default-menu-item-padding-inline: var(--ui-space-2);
6754
- --_ui-default-menu-item-font-size: var(--ui-font-size-sm);
6755
- --_ui-default-menu-item-radius: var(--ui-radius-sm);
6756
- padding: var(--ui-space-1);
6757
- gap: 0;
6783
+ A link in the title is the whole item: its hit area stretches over the item, so the icon and the
6784
+ padding follow it too, and the item takes the link's focus ring. The link stays a real link, so
6785
+ a router, a modified click, and "open in new tab" all work. Trailing controls sit above it and
6786
+ stay their own. */
6787
+
6788
+ /* Framed cards already have their own edge; the stronger focus ring stays separate. */
6789
+
6790
+ /* An explicitly independent leading control sits above the stretched row link. */
6791
+
6792
+ /* Trailing controls take their own clicks, above the title link's stretched hit area. */
6793
+
6794
+ /* Keep identity and disclosure marks beside the first line, even with a long description. */
6795
+
6796
+ /* An unused region takes no space. */
6797
+
6798
+ /* A component that sets its display still honours the hidden attribute on its root. */
6799
+ @scope (.ui-list-item) {
6800
+ :scope:where([data-v-8c851f73]:scope) {
6801
+ /* Hooks do not inherit, so the parts below read them from the root. */
6802
+ --_ui-list-item-icon-size: var(--ui-list-item-icon-size);
6803
+
6804
+ position: relative;
6805
+ box-sizing: border-box;
6806
+ display: flex;
6807
+ align-items: center;
6808
+ gap: var(--ui-list-item-gap, var(--ui-space-3));
6809
+ min-inline-size: 0;
6810
+ min-block-size: var(--_ui-list-item-min-size, var(--ui-control-size, 2.5rem));
6811
+ padding-block: var(
6812
+ --ui-list-item-padding-block,
6813
+ var(--_ui-list-item-padding-block, var(--ui-space-2))
6814
+ );
6815
+ padding-inline: var(
6816
+ --ui-list-item-padding-inline,
6817
+ var(--_ui-list-item-padding-inline, var(--ui-space-3))
6818
+ );
6819
+ border-radius: var(--ui-selection-radius);
6820
+ color: var(--ui-text-primary);
6821
+ transition:
6822
+ background-color var(--ui-motion-fast) var(--ui-motion-ease),
6823
+ border-color var(--ui-motion-fast) var(--ui-motion-ease);
6758
6824
  }
6759
- :scope:where([data-v-1ded0073]:scope):is([data-ui-menu-state~="size=sm"]) {
6760
- --_ui-default-menu-item-padding-block: var(--ui-space-0-5);
6761
- --_ui-default-menu-item-padding-inline: var(--ui-space-2);
6762
- --_ui-default-menu-item-font-size: var(--ui-font-size-xs);
6763
- --_ui-default-menu-item-radius: var(--ui-radius-sm);
6764
- --_ui-default-menu-item-min-block-size: 1.5rem;
6765
- --_ui-default-menu-indicator-size: 0.75rem;
6766
- min-inline-size: min(8rem, calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2));
6767
- padding: var(--ui-space-1);
6768
- gap: 0;
6825
+ :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="variant=card"]) {
6826
+ padding-block: var(--ui-list-item-padding-block, var(--ui-space-3));
6827
+ padding-inline: var(--ui-list-item-padding-inline, var(--ui-space-4));
6828
+ border: var(--ui-border-width) solid var(--ui-border-strong);
6829
+ border-radius: var(--ui-radius-lg);
6830
+ background: var(--ui-surface-raised);
6769
6831
  }
6770
- :scope:where([data-v-1ded0073]:scope):is([data-ui-menu-state~="icons"]) {
6771
- --_ui-default-menu-icon-display: inline-flex;
6832
+ :scope:where([data-v-8c851f73]:scope):is(:where(:has(.title a[href])):hover),
6833
+ :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="highlighted"]),
6834
+ :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="current"]) {
6835
+ background: var(--_ui-selection-context-surface, var(--ui-selection-surface));
6836
+ box-shadow: inset 0 0 0 var(--ui-border-width)
6837
+ var(--_ui-selection-context-border, var(--ui-selection-border));
6772
6838
  }
6773
- :scope:where([data-v-1ded0073]:scope) {
6774
- --_ui-menu-surface: var(--ui-menu-surface);
6775
- --_ui-menu-border: var(--ui-menu-border);
6776
- --_ui-menu-radius: var(--ui-menu-radius);
6777
- --_ui-menu-shadow: var(--ui-menu-shadow);
6778
- /* A menu nested in a compact one starts again from its own density. */
6779
- --_ui-default-menu-item-padding-block: initial;
6780
- --_ui-default-menu-item-padding-inline: initial;
6781
- --_ui-default-menu-item-font-size: initial;
6782
- --_ui-default-menu-item-radius: initial;
6783
- --_ui-default-menu-item-min-block-size: initial;
6784
- --_ui-default-menu-indicator-size: initial;
6785
- --_ui-default-menu-icon-display: none;
6786
- display: flex;
6787
- flex-direction: column;
6788
- box-sizing: border-box;
6789
- inline-size: max-content;
6790
- min-inline-size: min(12rem, calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2));
6791
- max-inline-size: calc(100vw - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2);
6792
- padding: 0;
6793
- border: 0;
6794
- outline: 0;
6795
- border-radius: 0;
6796
- background: transparent;
6839
+ :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="variant=card"]:where(:has(.title
6840
+ a[href])):hover) {
6841
+ border-color: var(--ui-border-strong);
6842
+ }
6843
+ :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="current"]) {
6844
+ color: var(--_ui-selection-context-text, var(--ui-selection-text));
6845
+ }
6846
+ :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="variant=card"]) {
6797
6847
  box-shadow: none;
6798
- overflow: visible;
6799
6848
  }
6800
- .surface[data-v-1ded0073] {
6849
+ :scope:where([data-v-8c851f73]:scope):is(:has(.title a[href]:focus-visible)) {
6850
+ box-shadow: 0 0 0 var(--ui-focus-width) var(--ui-focus-ring);
6851
+ }
6852
+ .leading[data-v-8c851f73], .trailing[data-v-8c851f73] {
6853
+ display: inline-flex;
6854
+ flex: none;
6855
+ align-items: center;
6856
+ gap: var(--ui-space-2);
6857
+ }
6858
+ .leading[data-v-8c851f73] {
6859
+ color: var(--ui-text-muted);
6860
+ font-size: var(--_ui-list-item-icon-size, var(--ui-font-size-lg));
6861
+ }
6862
+ :scope[data-ui-list-item-state~="current"] .leading[data-v-8c851f73] {
6863
+ color: var(--_ui-selection-context-text, var(--ui-selection-text));
6864
+ }
6865
+ :scope[data-ui-list-item-state~="leadingInteractive"] .leading[data-v-8c851f73] {
6866
+ position: relative;
6867
+ z-index: 1;
6868
+ }
6869
+ .trailing[data-v-8c851f73] {
6870
+ position: relative;
6871
+ z-index: 1;
6872
+ color: var(--ui-text-muted);
6873
+ font-size: var(--ui-font-size-sm);
6874
+ }
6875
+ .content[data-v-8c851f73] {
6801
6876
  display: flex;
6877
+ flex: 1;
6802
6878
  flex-direction: column;
6803
- box-sizing: border-box;
6804
- max-inline-size: inherit;
6805
- padding: var(--ui-space-1);
6806
- background: var(--_ui-menu-surface, var(--ui-overlay-surface, var(--ui-surface-elevated)));
6807
- border: var(--ui-border-width) solid
6808
- var(--_ui-menu-border, var(--ui-overlay-border, var(--ui-border-strong)));
6809
- border-radius: var(--_ui-menu-radius, var(--ui-overlay-radius, var(--ui-radius-lg)));
6810
- box-shadow: var(
6811
- --_ui-menu-shadow,
6812
- var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
6813
- );
6814
- max-block-size: inherit;
6815
- overflow: auto;
6816
- }
6817
- .surface hr[data-v-1ded0073] {
6818
- align-self: stretch;
6819
- block-size: 0;
6820
- margin: var(--ui-space-1) 0;
6821
- border: 0;
6822
- border-block-start: var(--ui-border-width) solid var(--ui-border-divider);
6879
+ gap: var(--ui-space-0-5, 2px);
6880
+ min-inline-size: 0;
6823
6881
  }
6824
- :scope:where([data-v-1ded0073]:scope):is(:not(:scope[data-ui-menu-state~="internalOpen"]):not(:scope[data-ui-menu-state~="inline"])) {
6825
- display: none;
6882
+ .title[data-v-8c851f73], .description[data-v-8c851f73] {
6883
+ display: block;
6884
+ min-inline-size: 0;
6885
+ overflow: hidden;
6886
+ text-overflow: ellipsis;
6887
+ white-space: nowrap;
6826
6888
  }
6827
- :scope:where([data-v-1ded0073]:scope):is([popover]) {
6828
- position: fixed;
6829
- inset: auto;
6830
- margin: 0;
6831
- overflow: visible;
6832
- max-block-size: calc(100dvh - var(--ui-menu-viewport-gap, var(--ui-space-2)) * 2);
6833
- opacity: 0;
6834
- transform: translateY(-4px) scale(0.99);
6835
- transition:
6836
- opacity var(--ui-motion-fast) var(--ui-motion-ease),
6837
- transform var(--ui-motion-fast) var(--ui-motion-ease),
6838
- display var(--ui-motion-fast) allow-discrete,
6839
- overlay var(--ui-motion-fast) allow-discrete;
6889
+ :scope[data-ui-list-item-state~="wrap"] .title[data-v-8c851f73],
6890
+ :scope[data-ui-list-item-state~="wrap"] .description[data-v-8c851f73] {
6891
+ white-space: normal;
6892
+ overflow-wrap: anywhere;
6840
6893
  }
6841
- :scope:where([data-v-1ded0073]:scope):is([popover]:popover-open) {
6842
- opacity: 1;
6843
- transform: translateY(0) scale(1);
6894
+ .title[data-v-8c851f73] {
6895
+ font-size: var(--ui-font-size-md);
6896
+ font-weight: var(--_ui-list-item-title-weight, var(--ui-font-medium));
6897
+ line-height: var(--ui-line-height-tight);
6844
6898
  }
6845
- @starting-style {
6846
- :scope:where([data-v-1ded0073]:scope):is([popover]:popover-open) {
6847
- opacity: 0;
6848
- transform: translateY(-4px) scale(0.99);
6899
+ :scope:where([data-v-8c851f73]:scope):is([data-ui-list-item-state~="align=title"]) {
6900
+ align-items: flex-start;
6849
6901
  }
6902
+ :scope[data-ui-list-item-state~="align=title"] .leading[data-v-8c851f73],
6903
+ :scope[data-ui-list-item-state~="align=title"] .trailing[data-v-8c851f73] {
6904
+ min-block-size: calc(var(--ui-font-size-md) * var(--ui-line-height-tight));
6850
6905
  }
6851
- :scope:where([data-v-1ded0073]:scope):is([hidden]) {
6852
- display: none;
6906
+ .description[data-v-8c851f73] {
6907
+ color: var(--ui-text-muted);
6908
+ font-size: var(--ui-font-size-sm);
6909
+ line-height: var(--ui-line-height-tight);
6853
6910
  }
6854
- @media (prefers-reduced-motion: reduce) {
6855
- :scope:where([data-v-1ded0073]:scope):is([popover]) {
6856
- transition: none;
6911
+ .title > a[data-v-8c851f73-s] {
6912
+ color: inherit;
6913
+ text-decoration: none;
6914
+ }
6915
+ .title > a[data-v-8c851f73-s]:focus-visible {
6916
+ outline: none;
6917
+ box-shadow: none;
6857
6918
  }
6919
+ .title > a[href][data-v-8c851f73-s]::after {
6920
+ position: absolute;
6921
+ inset: 0;
6922
+ border-radius: inherit;
6923
+ content: "";
6858
6924
  }
6925
+ .leading[data-v-8c851f73]:empty, .description[data-v-8c851f73]:empty, .trailing[data-v-8c851f73]:empty {
6926
+ display: none;
6859
6927
  }
6860
-
6861
- @scope (.ui-menu-group) {
6862
- :scope:where([data-v-d68e51f2]:scope) {
6863
- display: flex;
6864
- flex-direction: column;
6865
- min-inline-size: 0;
6928
+ @media (forced-colors: active) {
6929
+ :scope:where([data-v-8c851f73]:scope):is(:has(a:focus-visible)) {
6930
+ outline: var(--ui-focus-width) solid Highlight;
6931
+ outline-offset: calc(-1 * var(--ui-focus-width));
6866
6932
  }
6867
- .heading[data-v-d68e51f2] {
6868
- padding: var(--ui-space-2) var(--ui-space-3) var(--ui-space-1);
6869
- color: var(--ui-text-muted);
6870
- font-size: var(--ui-font-size-sm);
6871
- font-weight: var(--ui-font-semibold);
6933
+ :is(:scope[data-ui-list-item-state~="current"][data-v-8c851f73], :scope[data-ui-list-item-state~="highlighted"][data-v-8c851f73]):not(:has(a:focus-visible)) {
6934
+ outline: var(--ui-border-width) solid Highlight;
6935
+ outline-offset: calc(-1 * var(--ui-border-width));
6872
6936
  }
6873
- :scope:where([data-v-d68e51f2]:scope):is([hidden]) {
6937
+ }
6938
+ :scope:where([data-v-8c851f73]:scope):is([hidden]) {
6874
6939
  display: none;
6875
6940
  }
6876
6941
  }
6877
6942
 
6878
- /* This component's hooks style the element they are set on, and never a nested one. */
6879
- @property --ui-menu-item-font-size {
6880
- syntax: "*";
6881
- inherits: false;
6882
- }
6883
- @property --ui-menu-item-hover-surface {
6943
+ @property --ui-listbox-radius {
6884
6944
  syntax: "*";
6885
6945
  inherits: false;
6886
6946
  }
6887
- @property --ui-menu-item-min-block-size {
6947
+ @property --ui-listbox-border {
6888
6948
  syntax: "*";
6889
6949
  inherits: false;
6890
6950
  }
6891
- @property --ui-menu-item-padding-block {
6951
+ @property --ui-listbox-surface {
6892
6952
  syntax: "*";
6893
6953
  inherits: false;
6894
6954
  }
6895
- @property --ui-menu-item-padding-inline {
6955
+ @property --ui-listbox-focus-shadow {
6896
6956
  syntax: "*";
6897
6957
  inherits: false;
6898
6958
  }
6899
- @property --ui-menu-item-radius {
6959
+ @property --ui-listbox-invalid-border {
6900
6960
  syntax: "*";
6901
6961
  inherits: false;
6902
6962
  }
6903
6963
 
6904
- /* A named icon has a fixed column; an icon-enabled menu reserves it on every row. */
6905
-
6906
- /* A menu marks its chosen item with a check, as menus conventionally do; a radio circle reads
6907
- as a form control. The empty slot keeps unchosen labels aligned with the chosen one. */
6908
-
6909
- /* A <kbd> takes the browser's monospace; the hint reads in the item's own type. */
6910
-
6911
- /* Keep the text row at the shared control height where cap trimming is available. */
6912
-
6913
- /* A component that sets its display still honours the hidden attribute on its root. */
6914
- @scope (.ui-menu-item) to (.ui-icon) {
6915
- :scope:where([data-v-50b6e1bc]:scope) {
6916
- display: flex;
6917
- align-items: center;
6918
- gap: var(--ui-space-2);
6964
+ /* Its own box around the nested Scroll Area, which it shrinks into so the choices scroll. */
6965
+ @scope (.ui-listbox) to (.ui-scroll-area) {
6966
+ :scope:where([data-v-93820102]:scope) {
6967
+ position: relative;
6919
6968
  box-sizing: border-box;
6920
- width: 100%;
6921
- padding: var(
6922
- --ui-menu-item-padding-block,
6923
- var(--_ui-default-menu-item-padding-block, var(--ui-space-2))
6924
- )
6925
- var(
6926
- --ui-menu-item-padding-inline,
6927
- var(--_ui-default-menu-item-padding-inline, var(--ui-space-3))
6928
- );
6929
- text-align: left;
6930
- border-radius: var(
6931
- --ui-menu-item-radius,
6932
- var(--_ui-default-menu-item-radius, var(--ui-selection-radius))
6933
- );
6969
+ display: block;
6970
+ inline-size: 100%;
6971
+ min-inline-size: 0;
6972
+ margin: 0;
6973
+ padding: var(--ui-space-1);
6974
+ border: var(--ui-border-width) solid var(--ui-listbox-border, var(--ui-control-border));
6975
+ border-radius: var(--ui-listbox-radius, var(--ui-field-radius, var(--ui-radius-md)));
6976
+ background: var(--ui-listbox-surface, var(--ui-control-surface));
6934
6977
  color: var(--ui-text-primary);
6935
- font-size: var(
6936
- --ui-menu-item-font-size,
6937
- var(--_ui-default-menu-item-font-size, var(--ui-font-size-md))
6938
- );
6939
- font-weight: var(--ui-font-medium);
6940
- text-decoration: none;
6941
- cursor: pointer;
6978
+ font: inherit;
6979
+ line-height: var(--ui-line-height-md);
6980
+ box-shadow: var(--ui-control-inset);
6942
6981
  outline: none;
6943
- transition:
6944
- background-color var(--ui-motion-fast) var(--ui-motion-ease),
6945
- color var(--ui-motion-fast) var(--ui-motion-ease);
6946
- }
6947
- .icon[data-v-50b6e1bc] {
6948
- display: var(--_ui-default-menu-icon-display, none);
6949
- align-items: center;
6950
- justify-content: center;
6951
- flex: none;
6952
- inline-size: var(--ui-icon-size-sm);
6953
- block-size: var(--ui-icon-size-sm);
6954
- }
6955
- .icon[data-v-50b6e1bc]:not(:empty) {
6956
- display: inline-flex;
6957
- }
6958
- .icon svg[data-v-50b6e1bc-s] {
6959
- inline-size: 100%;
6960
- block-size: 100%;
6961
- }
6962
- :scope:where([data-v-50b6e1bc]:scope):is([data-ui-menu-item-state~="tone=danger"]) {
6963
- color: var(--ui-danger);
6964
6982
  }
6965
- .label[data-v-50b6e1bc] {
6983
+ .choices[data-v-93820102] {
6966
6984
  display: flex;
6967
- align-items: center;
6968
- gap: var(--ui-space-2);
6969
- flex: 1;
6970
- min-inline-size: 0;
6971
- }
6972
- .indicator[data-v-50b6e1bc] {
6973
- display: inline-flex;
6974
- align-items: center;
6975
- justify-content: center;
6976
- flex: none;
6977
- box-sizing: border-box;
6978
- inline-size: var(--_ui-default-menu-indicator-size, var(--ui-icon-size-sm));
6979
- block-size: var(--_ui-default-menu-indicator-size, var(--ui-icon-size-sm));
6980
- border: var(--ui-border-width) solid var(--ui-control-border);
6981
- border-radius: var(--ui-radius-sm);
6982
- color: var(--ui-surface);
6983
- --_ui-default-icon-size: 0.75rem;
6984
- }
6985
- :scope[data-ui-menu-item-state~="type=action"] .indicator[data-v-50b6e1bc] {
6986
- display: none;
6987
- }
6988
- :scope[data-ui-menu-item-state~="type=checkbox"][aria-checked="true"] .indicator[data-v-50b6e1bc] {
6989
- border-color: var(--ui-accent);
6990
- background: var(--ui-accent);
6991
- }
6992
- :scope[data-ui-menu-item-state~="type=radio"] .indicator[data-v-50b6e1bc] {
6993
- border-color: transparent;
6994
- color: var(--ui-text-secondary);
6985
+ flex-direction: column;
6986
+ max-block-size: calc(max(2, var(--_rows, 5)) * var(--ui-control-size-md));
6995
6987
  }
6996
- .shortcut[data-v-50b6e1bc] {
6997
- margin-inline-start: auto;
6998
- color: var(--ui-text-secondary);
6999
- font-size: var(--ui-font-size-sm);
7000
- font-weight: var(--ui-font-normal);
6988
+ :scope:where([data-v-93820102]:scope):is(:not([data-enhanced])) {
6989
+ padding: 0;
6990
+ border: 0;
6991
+ background: transparent;
6992
+ box-shadow: none;
7001
6993
  }
7002
- .shortcut[data-v-50b6e1bc]:empty {
6994
+ :scope:not([data-enhanced]) .choices[data-v-93820102], :scope[data-enhanced] .fallback[data-v-93820102] {
7003
6995
  display: none;
7004
6996
  }
7005
- .shortcut kbd[data-v-50b6e1bc-s] {
6997
+ .fallback[data-v-93820102] {
6998
+ box-sizing: border-box;
6999
+ inline-size: 100%;
7006
7000
  font: inherit;
7007
7001
  }
7008
- @supports (text-box-trim: trim-both) {
7009
- :scope:where([data-v-50b6e1bc]:scope) {
7010
- min-block-size: var(
7011
- --ui-menu-item-min-block-size,
7012
- var(--_ui-default-menu-item-min-block-size, var(--ui-control-size-md, 2.5rem))
7013
- );
7014
- text-box-trim: trim-both;
7015
- text-box-edge: cap alphabetic;
7016
- }
7017
- }
7018
- :scope:where([data-v-50b6e1bc]:scope):is(:is(:hover, :focus-visible):not([aria-disabled="true"])) {
7019
- background: var(--ui-menu-item-hover-surface, var(--ui-surface-subtle));
7002
+ .validity[data-v-93820102] {
7003
+ position: absolute;
7004
+ inline-size: 1px;
7005
+ block-size: 1px;
7006
+ overflow: hidden;
7007
+ clip-path: inset(50%);
7008
+ opacity: 0;
7009
+ pointer-events: none;
7020
7010
  }
7021
- :scope:where([data-v-50b6e1bc]:scope):is(:focus-visible) {
7011
+ :scope:where([data-v-93820102]:scope):is(:focus-visible) {
7012
+ border-color: var(--ui-control-focus);
7022
7013
  outline: var(--ui-focus-width) solid var(--ui-focus-ring);
7023
- outline-offset: calc(-1 * var(--ui-focus-width));
7014
+ outline-offset: var(--ui-focus-width);
7015
+ box-shadow: var(--ui-listbox-focus-shadow, var(--ui-focus-halo));
7024
7016
  }
7025
- :scope:where([data-v-50b6e1bc]:scope):is([aria-disabled="true"]) {
7026
- background: var(--ui-disabled-surface);
7017
+ :scope:where([data-v-93820102]:scope):is([aria-invalid="true"]) {
7018
+ border-color: var(--ui-listbox-invalid-border, var(--ui-field-danger, var(--ui-danger)));
7019
+ }
7020
+ :scope:where([data-v-93820102]:scope):is([aria-disabled="true"]) {
7021
+ background: var(--ui-control-surface-disabled);
7027
7022
  color: var(--ui-disabled-text);
7023
+ box-shadow: none;
7028
7024
  cursor: not-allowed;
7029
7025
  }
7030
- :scope[aria-disabled="true"] .indicator[data-v-50b6e1bc] {
7031
- border-color: var(--ui-disabled-border);
7032
- background: transparent;
7033
- color: var(--ui-disabled-text);
7026
+ :scope:where([data-v-93820102]:scope):is([hidden]) {
7027
+ display: none;
7034
7028
  }
7035
- :scope[aria-disabled="true"] .indicator[data-v-50b6e1bc]::after {
7036
- background: var(--ui-disabled-text);
7037
7029
  }
7038
- @media (forced-colors: active) {
7039
- :scope:where([data-v-50b6e1bc]:scope):is(:focus-visible) {
7040
- outline-color: Highlight;
7030
+
7031
+ @scope (.ui-menu-group) {
7032
+ :scope:where([data-v-d68e51f2]:scope) {
7033
+ display: flex;
7034
+ flex-direction: column;
7035
+ min-inline-size: 0;
7041
7036
  }
7037
+ .heading[data-v-d68e51f2] {
7038
+ padding: var(--ui-space-2) var(--ui-space-3) var(--ui-space-1);
7039
+ color: var(--ui-text-muted);
7040
+ font-size: var(--ui-font-size-sm);
7041
+ font-weight: var(--ui-font-semibold);
7042
7042
  }
7043
- :scope:where([data-v-50b6e1bc]:scope):is([hidden]) {
7043
+ :scope:where([data-v-d68e51f2]:scope):is([hidden]) {
7044
7044
  display: none;
7045
7045
  }
7046
7046
  }