@nonoun/native-ui 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ui-accordion/ui-accordion-element.d.ts.map +1 -1
- package/dist/components/ui-avatar/ui-avatar-element.d.ts +2 -0
- package/dist/components/ui-avatar/ui-avatar-element.d.ts.map +1 -1
- package/dist/components/ui-calendar/calendar-store.d.ts.map +1 -1
- package/dist/components/ui-calendar/ui-calendar-element.d.ts +1 -0
- package/dist/components/ui-calendar/ui-calendar-element.d.ts.map +1 -1
- package/dist/components/ui-chat/ui-chat-input-element.d.ts.map +1 -1
- package/dist/components/ui-checkbox/ui-checkbox-element.d.ts +1 -0
- package/dist/components/ui-checkbox/ui-checkbox-element.d.ts.map +1 -1
- package/dist/components/ui-combobox/ui-combobox-element.d.ts +1 -0
- package/dist/components/ui-combobox/ui-combobox-element.d.ts.map +1 -1
- package/dist/components/ui-command/ui-command-element.d.ts.map +1 -1
- package/dist/components/ui-command/ui-command-group-element.d.ts +1 -0
- package/dist/components/ui-command/ui-command-group-element.d.ts.map +1 -1
- package/dist/components/ui-controller/ui-controller-element.d.ts +1 -0
- package/dist/components/ui-controller/ui-controller-element.d.ts.map +1 -1
- package/dist/components/ui-dialog/ui-dialog-element.d.ts +0 -1
- package/dist/components/ui-dialog/ui-dialog-element.d.ts.map +1 -1
- package/dist/components/ui-drawer/ui-drawer-element.d.ts +0 -1
- package/dist/components/ui-drawer/ui-drawer-element.d.ts.map +1 -1
- package/dist/components/ui-field/ui-field-element.d.ts.map +1 -1
- package/dist/components/ui-input/ui-input-element.d.ts +1 -0
- package/dist/components/ui-input/ui-input-element.d.ts.map +1 -1
- package/dist/components/ui-input-otp/ui-input-otp-element.d.ts +1 -0
- package/dist/components/ui-input-otp/ui-input-otp-element.d.ts.map +1 -1
- package/dist/components/ui-listbox/ui-listbox-element.d.ts.map +1 -1
- package/dist/components/ui-nav/ui-nav-group-element.d.ts +1 -1
- package/dist/components/ui-pagination/ui-pagination-element.d.ts.map +1 -1
- package/dist/components/ui-radio/ui-radio-element.d.ts.map +1 -1
- package/dist/components/ui-radio/ui-radio-group-element.d.ts +1 -0
- package/dist/components/ui-radio/ui-radio-group-element.d.ts.map +1 -1
- package/dist/components/ui-range/ui-range-element.d.ts +4 -0
- package/dist/components/ui-range/ui-range-element.d.ts.map +1 -1
- package/dist/components/ui-segmented-control/ui-segment-element.d.ts.map +1 -1
- package/dist/components/ui-segmented-control/ui-segmented-control-element.d.ts +1 -0
- package/dist/components/ui-segmented-control/ui-segmented-control-element.d.ts.map +1 -1
- package/dist/components/ui-select/ui-select-element.d.ts +1 -0
- package/dist/components/ui-select/ui-select-element.d.ts.map +1 -1
- package/dist/components/ui-slideshow/ui-slideshow-element.d.ts.map +1 -1
- package/dist/components/ui-switch/ui-switch-element.d.ts +4 -0
- package/dist/components/ui-switch/ui-switch-element.d.ts.map +1 -1
- package/dist/components/ui-table/index.d.ts +1 -1
- package/dist/components/ui-table/index.d.ts.map +1 -1
- package/dist/components/ui-table/table-store.d.ts +0 -1
- package/dist/components/ui-table/table-store.d.ts.map +1 -1
- package/dist/components/ui-table/ui-table-element.d.ts +1 -0
- package/dist/components/ui-table/ui-table-element.d.ts.map +1 -1
- package/dist/components/ui-table/ui-table-header-element.d.ts +1 -0
- package/dist/components/ui-table/ui-table-header-element.d.ts.map +1 -1
- package/dist/components/ui-tabs/ui-tab-element.d.ts.map +1 -1
- package/dist/components/ui-tabs/ui-tabs-element.d.ts.map +1 -1
- package/dist/components/ui-textarea/ui-textarea-element.d.ts +1 -0
- package/dist/components/ui-textarea/ui-textarea-element.d.ts.map +1 -1
- package/dist/components/ui-tree/ui-tree-item-element.d.ts +4 -0
- package/dist/components/ui-tree/ui-tree-item-element.d.ts.map +1 -1
- package/dist/components-lean.css +208 -84
- package/dist/components.css +216 -84
- package/dist/containers/ui-layout-sidebar/ui-layout-sidebar-element.d.ts.map +1 -1
- package/dist/core/form-associable.d.ts +2 -2
- package/dist/core/trait-runtime.d.ts.map +1 -1
- package/dist/core/ui-element.d.ts +2 -0
- package/dist/core/ui-element.d.ts.map +1 -1
- package/dist/custom-elements.json +4715 -2573
- package/dist/dialog-controller.js +54 -349
- package/dist/foundation.css +1 -15
- package/dist/icons/ui-icon-element.d.ts +1 -0
- package/dist/icons/ui-icon-element.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/{nav/inspector → inspector}/build-inspector.d.ts +2 -2
- package/dist/inspector/build-inspector.d.ts.map +1 -0
- package/dist/{nav/inspector → inspector}/ds-color-swatch-element.d.ts +1 -1
- package/dist/inspector/ds-color-swatch-element.d.ts.map +1 -0
- package/dist/inspector/ds-color-swatch.d.ts.map +1 -0
- package/dist/{nav/inspector → inspector}/ds-colors-element.d.ts +1 -1
- package/dist/inspector/ds-colors-element.d.ts.map +1 -0
- package/dist/inspector/ds-colors.d.ts.map +1 -0
- package/dist/inspector/ds-inspector-element.d.ts +15 -0
- package/dist/inspector/ds-inspector-element.d.ts.map +1 -0
- package/dist/inspector/ds-inspector.d.ts +3 -0
- package/dist/inspector/ds-inspector.d.ts.map +1 -0
- package/dist/{nav/inspector → inspector}/ds-themes-element.d.ts +1 -1
- package/dist/inspector/ds-themes-element.d.ts.map +1 -0
- package/dist/inspector/ds-themes.d.ts.map +1 -0
- package/dist/{nav/inspector → inspector}/ds-variable-element.d.ts +1 -1
- package/dist/inspector/ds-variable-element.d.ts.map +1 -0
- package/dist/inspector/ds-variable.d.ts.map +1 -0
- package/dist/{nav/inspector → inspector}/index.d.ts +1 -0
- package/dist/inspector/index.d.ts.map +1 -0
- package/dist/inspector.css +1 -1
- package/dist/inspector.d.ts +10 -6
- package/dist/inspector.d.ts.map +1 -1
- package/dist/inspector.js +94 -75
- package/dist/kernel/index.d.ts +1 -0
- package/dist/kernel/index.d.ts.map +1 -1
- package/dist/kernel/overlay-manager.d.ts +5 -1
- package/dist/kernel/overlay-manager.d.ts.map +1 -1
- package/dist/kernel.js +212 -194
- package/dist/list-navigate-controller.js +457 -0
- package/dist/native-ui-lean.css +209 -99
- package/dist/native-ui.css +217 -99
- package/dist/native-ui.js +7 -7
- package/dist/register-all.js +4 -3
- package/dist/register-all2.js +151 -79
- package/dist/traits/adapters/collapsible-adapter.d.ts.map +1 -1
- package/dist/traits/adapters/copyable-adapter.d.ts.map +1 -1
- package/dist/traits/adapters/draggable-adapter.d.ts.map +1 -1
- package/dist/traits/adapters/hoverable-adapter.d.ts.map +1 -1
- package/dist/traits/adapters/intersectable-adapter.d.ts.map +1 -1
- package/dist/traits/adapters/resizable-adapter.d.ts.map +1 -1
- package/dist/traits/adapters/searchable-adapter.d.ts.map +1 -1
- package/dist/traits/adapters/sortable-adapter.d.ts.map +1 -1
- package/dist/traits/adapters/swipeable-adapter.d.ts.map +1 -1
- package/dist/traits/adapters/virtualizable-adapter.d.ts.map +1 -1
- package/dist/traits/collapsible-controller.d.ts.map +1 -1
- package/dist/traits/dialog-controller.d.ts.map +1 -1
- package/dist/traits/drag-controller.d.ts +3 -0
- package/dist/traits/drag-controller.d.ts.map +1 -1
- package/dist/traits/drop-zone-controller.d.ts +1 -1
- package/dist/traits/drop-zone-controller.d.ts.map +1 -1
- package/dist/traits/focus-trap-controller.d.ts.map +1 -1
- package/dist/traits/hover-controller.d.ts +1 -1
- package/dist/traits/hover-controller.d.ts.map +1 -1
- package/dist/traits/intersect-controller.d.ts.map +1 -1
- package/dist/traits/popover-controller.d.ts.map +1 -1
- package/dist/traits/press-controller.d.ts.map +1 -1
- package/dist/traits/resize-controller.d.ts.map +1 -1
- package/dist/traits/selection-controller.d.ts.map +1 -1
- package/dist/traits/sort-controller.d.ts.map +1 -1
- package/dist/traits/swipe-controller.d.ts.map +1 -1
- package/dist/traits/validate-controller.d.ts +2 -0
- package/dist/traits/validate-controller.d.ts.map +1 -1
- package/dist/traits.js +5 -6
- package/dist/ui-icon-element.js +407 -3949
- package/dist/ui-layout-inspector-element.js +3777 -0
- package/dist/uid.js +63 -3
- package/package.json +1 -1
- package/dist/define.js +0 -62
- package/dist/nav/inspector/build-inspector.d.ts.map +0 -1
- package/dist/nav/inspector/ds-color-swatch-element.d.ts.map +0 -1
- package/dist/nav/inspector/ds-color-swatch.d.ts.map +0 -1
- package/dist/nav/inspector/ds-colors-element.d.ts.map +0 -1
- package/dist/nav/inspector/ds-colors.d.ts.map +0 -1
- package/dist/nav/inspector/ds-themes-element.d.ts.map +0 -1
- package/dist/nav/inspector/ds-themes.d.ts.map +0 -1
- package/dist/nav/inspector/ds-variable-element.d.ts.map +0 -1
- package/dist/nav/inspector/ds-variable.d.ts.map +0 -1
- package/dist/nav/inspector/index.d.ts.map +0 -1
- package/dist/ui-element.js +0 -128
- /package/dist/{nav/inspector → inspector}/ds-color-swatch.d.ts +0 -0
- /package/dist/{nav/inspector → inspector}/ds-colors.d.ts +0 -0
- /package/dist/{nav/inspector → inspector}/ds-themes.d.ts +0 -0
- /package/dist/{nav/inspector → inspector}/ds-variable.d.ts +0 -0
package/dist/native-ui-lean.css
CHANGED
|
@@ -1374,21 +1374,6 @@
|
|
|
1374
1374
|
|
|
1375
1375
|
|
|
1376
1376
|
|
|
1377
|
-
/* ── Popover Anchor Positioning ──
|
|
1378
|
-
Shared anchor-to-trigger positioning for dropdown popovers.
|
|
1379
|
-
Coordinators (select, combobox) use this for their popover listbox. */
|
|
1380
|
-
|
|
1381
|
-
:where(ui-select) > :where(ui-listbox[popover]),
|
|
1382
|
-
:where(ui-combobox) > :where(ui-listbox[popover]) {
|
|
1383
|
-
position: fixed;
|
|
1384
|
-
position-area: block-end span-inline-end;
|
|
1385
|
-
position-try-fallbacks: flip-block;
|
|
1386
|
-
margin: var(--ui-popover-gap) 0 0;
|
|
1387
|
-
min-width: anchor-size(inline);
|
|
1388
|
-
max-height: var(--ui-popover-max-height);
|
|
1389
|
-
overflow-y: auto;
|
|
1390
|
-
}
|
|
1391
|
-
|
|
1392
1377
|
/* ── Container-Level Disabled ──
|
|
1393
1378
|
Containers that disable all children use aria-disabled="true".
|
|
1394
1379
|
Disabled colors propagate via inheritance — children inherit the muted text.
|
|
@@ -1510,6 +1495,7 @@
|
|
|
1510
1495
|
/* Popover (select / combobox / command) */
|
|
1511
1496
|
--ui-popover-max-height: calc(100dvh - 2rem);
|
|
1512
1497
|
--ui-popover-gap: 0.25rem;
|
|
1498
|
+
--ui-popover-viewport-margin: 0.5rem;
|
|
1513
1499
|
|
|
1514
1500
|
/* Drawer */
|
|
1515
1501
|
--ui-drawer-width: 24rem;
|
|
@@ -2080,6 +2066,57 @@
|
|
|
2080
2066
|
}
|
|
2081
2067
|
}
|
|
2082
2068
|
|
|
2069
|
+
@layer ui {
|
|
2070
|
+
|
|
2071
|
+
/* ── Icon Base ── */
|
|
2072
|
+
|
|
2073
|
+
:where(ui-icon) {
|
|
2074
|
+
--ui-icon-size: var(--_icon-size);
|
|
2075
|
+
--ui-icon-color: currentColor;
|
|
2076
|
+
|
|
2077
|
+
box-sizing: border-box;
|
|
2078
|
+
display: inline-flex;
|
|
2079
|
+
align-items: center;
|
|
2080
|
+
justify-content: center;
|
|
2081
|
+
width: var(--ui-icon-size);
|
|
2082
|
+
height: var(--ui-icon-size);
|
|
2083
|
+
color: var(--ui-icon-color);
|
|
2084
|
+
flex-shrink: 0;
|
|
2085
|
+
vertical-align: middle;
|
|
2086
|
+
line-height: 0;
|
|
2087
|
+
}
|
|
2088
|
+
|
|
2089
|
+
:where(ui-icon) > :where(svg) {
|
|
2090
|
+
width: 100%;
|
|
2091
|
+
height: 100%;
|
|
2092
|
+
}
|
|
2093
|
+
|
|
2094
|
+
/* WHY: Unregistered icons (no SVG content) should collapse to zero size
|
|
2095
|
+
so surrounding buttons/slots don't render with phantom dimensions */
|
|
2096
|
+
:where(ui-icon:empty) {
|
|
2097
|
+
width: 0;
|
|
2098
|
+
height: 0;
|
|
2099
|
+
overflow: hidden;
|
|
2100
|
+
}
|
|
2101
|
+
|
|
2102
|
+
/* ── Icon Size Variants ── */
|
|
2103
|
+
|
|
2104
|
+
:where(ui-icon[size="xs"]) { --ui-icon-size: var(--ui-icon-xs); }
|
|
2105
|
+
:where(ui-icon[size="sm"]) { --ui-icon-size: var(--ui-icon-sm); }
|
|
2106
|
+
:where(ui-icon[size="md"]) { --ui-icon-size: var(--ui-icon-md); }
|
|
2107
|
+
:where(ui-icon[size="lg"]) { --ui-icon-size: var(--ui-icon-lg); }
|
|
2108
|
+
:where(ui-icon[size="xl"]) { --ui-icon-size: var(--ui-icon-xl); }
|
|
2109
|
+
|
|
2110
|
+
/* ── Forced Colors ── */
|
|
2111
|
+
|
|
2112
|
+
@media (forced-colors: active) {
|
|
2113
|
+
:where(ui-icon) {
|
|
2114
|
+
--ui-icon-color: ButtonText;
|
|
2115
|
+
}
|
|
2116
|
+
}
|
|
2117
|
+
|
|
2118
|
+
}
|
|
2119
|
+
|
|
2083
2120
|
@layer ui {
|
|
2084
2121
|
|
|
2085
2122
|
/* ── Accordion Container ── */
|
|
@@ -2549,7 +2586,8 @@
|
|
|
2549
2586
|
display: inline-flex;
|
|
2550
2587
|
flex-direction: column;
|
|
2551
2588
|
gap: calc(var(--_space));
|
|
2552
|
-
padding: calc(var(--_space) * 2);
|
|
2589
|
+
padding-block: calc(var(--_space) * 2);
|
|
2590
|
+
padding-inline: calc(var(--_space) * 2);
|
|
2553
2591
|
border: 1px solid var(--_border-color);
|
|
2554
2592
|
border-radius: var(--_radius);
|
|
2555
2593
|
background: var(--_background);
|
|
@@ -2756,11 +2794,17 @@
|
|
|
2756
2794
|
}
|
|
2757
2795
|
|
|
2758
2796
|
:where(ui-calendar) :where([data-range-start]) {
|
|
2759
|
-
border-radius: calc(var(--_radius) - var(--_space))
|
|
2797
|
+
border-start-start-radius: calc(var(--_radius) - var(--_space));
|
|
2798
|
+
border-end-start-radius: calc(var(--_radius) - var(--_space));
|
|
2799
|
+
border-start-end-radius: 0;
|
|
2800
|
+
border-end-end-radius: 0;
|
|
2760
2801
|
}
|
|
2761
2802
|
|
|
2762
2803
|
:where(ui-calendar) :where([data-range-end]) {
|
|
2763
|
-
border-radius: 0
|
|
2804
|
+
border-start-start-radius: 0;
|
|
2805
|
+
border-end-start-radius: 0;
|
|
2806
|
+
border-start-end-radius: calc(var(--_radius) - var(--_space));
|
|
2807
|
+
border-end-end-radius: calc(var(--_radius) - var(--_space));
|
|
2764
2808
|
}
|
|
2765
2809
|
|
|
2766
2810
|
:where(ui-calendar) :where([data-range-start][data-range-end]) {
|
|
@@ -3097,13 +3141,14 @@
|
|
|
3097
3141
|
|
|
3098
3142
|
/* ── Active (pressed) ── */
|
|
3099
3143
|
|
|
3100
|
-
:where(ui-checkbox)[pressed]::before
|
|
3144
|
+
:where(ui-checkbox)[pressed]::before{
|
|
3101
3145
|
background: var(--_background-active, var(--_widget-active));
|
|
3102
3146
|
border-color: var(--_border-color-active, var(--_border-active));
|
|
3103
3147
|
}
|
|
3104
3148
|
|
|
3105
3149
|
:where(ui-checkbox)[aria-checked="true"][pressed]::before,
|
|
3106
|
-
:where(ui-checkbox)[aria-checked="mixed"][pressed]::before
|
|
3150
|
+
:where(ui-checkbox)[aria-checked="mixed"][pressed]::before
|
|
3151
|
+
:where(ui-checkbox)[aria-checked="mixed"][force-active]::before {
|
|
3107
3152
|
background: var(--_surface-active);
|
|
3108
3153
|
border-color: var(--_surface-active);
|
|
3109
3154
|
}
|
|
@@ -3159,6 +3204,23 @@
|
|
|
3159
3204
|
cursor: text;
|
|
3160
3205
|
}
|
|
3161
3206
|
|
|
3207
|
+
/* ── Popover Listbox Positioning ──
|
|
3208
|
+
WHY: Must come after ui-listbox.css base rule (which sets min-width: 0
|
|
3209
|
+
for flex-child shrinking) so min-width: anchor-size(inline) wins by
|
|
3210
|
+
source order — both are zero-specificity via :where(). */
|
|
3211
|
+
|
|
3212
|
+
:where(ui-combobox) > :where(ui-listbox[popover]) {
|
|
3213
|
+
position: fixed;
|
|
3214
|
+
position-area: block-end span-inline-end;
|
|
3215
|
+
position-try-fallbacks: flip-block;
|
|
3216
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
3217
|
+
margin-inline: 0;
|
|
3218
|
+
margin-block-start: var(--ui-popover-gap);
|
|
3219
|
+
min-width: anchor-size(inline);
|
|
3220
|
+
max-height: var(--ui-popover-max-height);
|
|
3221
|
+
overflow-y: auto;
|
|
3222
|
+
}
|
|
3223
|
+
|
|
3162
3224
|
}
|
|
3163
3225
|
|
|
3164
3226
|
@layer ui {
|
|
@@ -3211,7 +3273,8 @@
|
|
|
3211
3273
|
:where(ui-command-list) {
|
|
3212
3274
|
overflow-y: auto;
|
|
3213
3275
|
max-height: var(--ui-popover-max-height);
|
|
3214
|
-
padding: var(--_space);
|
|
3276
|
+
padding-block: var(--_space);
|
|
3277
|
+
padding-inline: var(--_space);
|
|
3215
3278
|
}
|
|
3216
3279
|
|
|
3217
3280
|
/* ── Command Group ── */
|
|
@@ -3303,7 +3366,8 @@
|
|
|
3303
3366
|
}
|
|
3304
3367
|
|
|
3305
3368
|
:where(ui-dialog) > :where(dialog)::backdrop {
|
|
3306
|
-
background: var(--ui-backdrop-color)
|
|
3369
|
+
background: var(--ui-backdrop-color);
|
|
3370
|
+
opacity: var(--ui-backdrop-opacity);
|
|
3307
3371
|
}
|
|
3308
3372
|
|
|
3309
3373
|
}
|
|
@@ -3343,7 +3407,8 @@
|
|
|
3343
3407
|
/* WHY: Animate backdrop opacity on open for a smooth reveal. */
|
|
3344
3408
|
|
|
3345
3409
|
:where(ui-drawer) > :where(dialog)::backdrop {
|
|
3346
|
-
background: var(--ui-backdrop-color)
|
|
3410
|
+
background: var(--ui-backdrop-color);
|
|
3411
|
+
opacity: var(--ui-backdrop-opacity);
|
|
3347
3412
|
animation: drawer-backdrop-in var(--_duration) ease-out;
|
|
3348
3413
|
}
|
|
3349
3414
|
|
|
@@ -3799,7 +3864,8 @@
|
|
|
3799
3864
|
min-width: 0;
|
|
3800
3865
|
flex-direction: column;
|
|
3801
3866
|
gap: 0;
|
|
3802
|
-
padding: var(--_space);
|
|
3867
|
+
padding-block: var(--_space);
|
|
3868
|
+
padding-inline: var(--_space);
|
|
3803
3869
|
border-radius: var(--_radius);
|
|
3804
3870
|
border: 1px solid var(--_border-color, var(--_border-rest));
|
|
3805
3871
|
background: var(--_background, var(--_control));
|
|
@@ -3815,6 +3881,39 @@
|
|
|
3815
3881
|
display: none;
|
|
3816
3882
|
}
|
|
3817
3883
|
|
|
3884
|
+
/* ── Popover Animation ──
|
|
3885
|
+
WHY: Shared entry/exit transition for all popover listboxes.
|
|
3886
|
+
Context CSS overrides --_popover-origin and --_popover-from
|
|
3887
|
+
to match the popover's anchor direction (e.g. sidebar flyouts
|
|
3888
|
+
open to the right → rotateY instead of rotateX). */
|
|
3889
|
+
|
|
3890
|
+
:where(ui-listbox[popover]) {
|
|
3891
|
+
--_popover-origin: top center;
|
|
3892
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(-20deg);
|
|
3893
|
+
|
|
3894
|
+
transform-origin: var(--_popover-origin);
|
|
3895
|
+
opacity: 0;
|
|
3896
|
+
transform: var(--_popover-from);
|
|
3897
|
+
|
|
3898
|
+
transition:
|
|
3899
|
+
opacity var(--_duration) var(--_easing),
|
|
3900
|
+
transform var(--_duration) var(--_easing),
|
|
3901
|
+
display var(--_duration) var(--_easing) allow-discrete,
|
|
3902
|
+
overlay var(--_duration) var(--_easing) allow-discrete;
|
|
3903
|
+
}
|
|
3904
|
+
|
|
3905
|
+
:where(ui-listbox[popover]):popover-open {
|
|
3906
|
+
opacity: 1;
|
|
3907
|
+
transform: none;
|
|
3908
|
+
}
|
|
3909
|
+
|
|
3910
|
+
@starting-style {
|
|
3911
|
+
:where(ui-listbox[popover]):popover-open {
|
|
3912
|
+
opacity: 0;
|
|
3913
|
+
transform: var(--_popover-from);
|
|
3914
|
+
}
|
|
3915
|
+
}
|
|
3916
|
+
|
|
3818
3917
|
/* ── Option / Command Item Base ── */
|
|
3819
3918
|
|
|
3820
3919
|
:where(ui-option, ui-command-item, [role="option"]) {
|
|
@@ -3975,10 +4074,6 @@
|
|
|
3975
4074
|
color: var(--_ink-hover);
|
|
3976
4075
|
}
|
|
3977
4076
|
|
|
3978
|
-
:where(ui-nav-item)[active] {
|
|
3979
|
-
color: var(--_ink-hover);
|
|
3980
|
-
}
|
|
3981
|
-
|
|
3982
4077
|
:where(ui-nav-item):active{
|
|
3983
4078
|
color: var(--_ink-active);
|
|
3984
4079
|
}
|
|
@@ -4199,10 +4294,15 @@
|
|
|
4199
4294
|
instead of expanding the <details>. Same pattern as sidebar-trigger menus. */
|
|
4200
4295
|
|
|
4201
4296
|
:where(ui-nav-group) > :where(ui-listbox.nav-group-flyout[popover]) {
|
|
4297
|
+
--_popover-origin: left center;
|
|
4298
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(20deg);
|
|
4299
|
+
|
|
4202
4300
|
position: fixed;
|
|
4203
4301
|
position-area: inline-end span-block-end;
|
|
4204
4302
|
position-try-fallbacks: --nav-flyout-flip-up;
|
|
4205
|
-
margin:
|
|
4303
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
4304
|
+
margin-inline: 0;
|
|
4305
|
+
margin-inline-start: var(--ui-popover-gap);
|
|
4206
4306
|
min-width: 200px;
|
|
4207
4307
|
max-height: var(--ui-popover-max-height);
|
|
4208
4308
|
overflow-y: auto;
|
|
@@ -4212,6 +4312,10 @@
|
|
|
4212
4312
|
position-area: inline-end span-block-start;
|
|
4213
4313
|
}
|
|
4214
4314
|
|
|
4315
|
+
@position-try --nav-flyout-flip-down {
|
|
4316
|
+
position-area: inline-end span-block-end;
|
|
4317
|
+
}
|
|
4318
|
+
|
|
4215
4319
|
/* ── Container Query: Collapsed Sidebar ── */
|
|
4216
4320
|
/* WHY: Nav components own their own collapsed behavior via @container.
|
|
4217
4321
|
The sidebar aside declares container-name: sidebar. When it shrinks
|
|
@@ -4255,6 +4359,14 @@
|
|
|
4255
4359
|
font-size: var(--_font-size, 1rem);
|
|
4256
4360
|
}
|
|
4257
4361
|
|
|
4362
|
+
/* WHY: In collapsed mode the group is a small icon — centering
|
|
4363
|
+
the flyout vertically with the anchor is more natural than top-aligning.
|
|
4364
|
+
Fallbacks handle viewport clipping (top/bottom edge). */
|
|
4365
|
+
:where(ui-nav-group) > :where(ui-listbox.nav-group-flyout[popover]) {
|
|
4366
|
+
position-area: inline-end;
|
|
4367
|
+
position-try-fallbacks: --nav-flyout-flip-up, --nav-flyout-flip-down;
|
|
4368
|
+
}
|
|
4369
|
+
|
|
4258
4370
|
/* Collapse inter-group spacing in icon rail. */
|
|
4259
4371
|
:where(ui-nav-group) + :where(ui-nav-group) {
|
|
4260
4372
|
margin-block-start: 0;
|
|
@@ -4430,12 +4542,12 @@
|
|
|
4430
4542
|
|
|
4431
4543
|
/* ── Active (pressed) ── */
|
|
4432
4544
|
|
|
4433
|
-
:where(ui-radio)[pressed]::before
|
|
4545
|
+
:where(ui-radio)[pressed]::before{
|
|
4434
4546
|
background: var(--_background-active, var(--_widget-active));
|
|
4435
4547
|
border-color: var(--_border-color-active, var(--_border-active));
|
|
4436
4548
|
}
|
|
4437
4549
|
|
|
4438
|
-
:where(ui-radio)[aria-checked="true"][pressed]::before
|
|
4550
|
+
:where(ui-radio)[aria-checked="true"][pressed]::before{
|
|
4439
4551
|
background: var(--_surface-active);
|
|
4440
4552
|
border-color: var(--_surface-active);
|
|
4441
4553
|
}
|
|
@@ -4488,6 +4600,8 @@
|
|
|
4488
4600
|
min-width: 0;
|
|
4489
4601
|
align-items: center;
|
|
4490
4602
|
position: relative;
|
|
4603
|
+
/* WHY: Isolate internal z-index (thumb z-index: 1) from parent stacking context */
|
|
4604
|
+
isolation: isolate;
|
|
4491
4605
|
|
|
4492
4606
|
min-height: var(--_track-height);
|
|
4493
4607
|
|
|
@@ -4581,11 +4695,11 @@
|
|
|
4581
4695
|
|
|
4582
4696
|
/* ── Active (dragging) ── */
|
|
4583
4697
|
|
|
4584
|
-
:where(ui-range)[pressed]::after
|
|
4698
|
+
:where(ui-range)[pressed]::after{
|
|
4585
4699
|
background: var(--_surface-active);
|
|
4586
4700
|
}
|
|
4587
4701
|
|
|
4588
|
-
:where(ui-range)[pressed] > :where(.ui-range-thumb)
|
|
4702
|
+
:where(ui-range)[pressed] > :where(.ui-range-thumb){
|
|
4589
4703
|
border-color: var(--_surface-active);
|
|
4590
4704
|
box-shadow: var(--ui-shadow-sm), 0 0 0 6px var(--_surface);
|
|
4591
4705
|
}
|
|
@@ -4769,6 +4883,23 @@
|
|
|
4769
4883
|
display: contents;
|
|
4770
4884
|
}
|
|
4771
4885
|
|
|
4886
|
+
/* ── Popover Listbox Positioning ──
|
|
4887
|
+
WHY: Must come after ui-listbox.css base rule (which sets min-width: 0
|
|
4888
|
+
for flex-child shrinking) so min-width: anchor-size(inline) wins by
|
|
4889
|
+
source order — both are zero-specificity via :where(). */
|
|
4890
|
+
|
|
4891
|
+
:where(ui-select) > :where(ui-listbox[popover]) {
|
|
4892
|
+
position: fixed;
|
|
4893
|
+
position-area: block-end span-inline-end;
|
|
4894
|
+
position-try-fallbacks: flip-block;
|
|
4895
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
4896
|
+
margin-inline: 0;
|
|
4897
|
+
margin-block-start: var(--ui-popover-gap);
|
|
4898
|
+
min-width: anchor-size(inline);
|
|
4899
|
+
max-height: var(--ui-popover-max-height);
|
|
4900
|
+
overflow-y: auto;
|
|
4901
|
+
}
|
|
4902
|
+
|
|
4772
4903
|
}
|
|
4773
4904
|
|
|
4774
4905
|
@layer ui {
|
|
@@ -5160,12 +5291,12 @@
|
|
|
5160
5291
|
|
|
5161
5292
|
/* ── Active (pressed) ── */
|
|
5162
5293
|
|
|
5163
|
-
:where(ui-switch)[pressed]::before
|
|
5294
|
+
:where(ui-switch)[pressed]::before{
|
|
5164
5295
|
background: var(--_track-bg-active);
|
|
5165
5296
|
border-color: var(--_track-border-active);
|
|
5166
5297
|
}
|
|
5167
5298
|
|
|
5168
|
-
:where(ui-switch)[aria-checked="true"][pressed]::before
|
|
5299
|
+
:where(ui-switch)[aria-checked="true"][pressed]::before{
|
|
5169
5300
|
background: var(--_surface-active);
|
|
5170
5301
|
border-color: var(--_surface-active);
|
|
5171
5302
|
}
|
|
@@ -5895,7 +6026,7 @@
|
|
|
5895
6026
|
/* Default placement: above the anchor */
|
|
5896
6027
|
position-area: block-start;
|
|
5897
6028
|
position-try-fallbacks: flip-block, flip-inline;
|
|
5898
|
-
margin:
|
|
6029
|
+
margin: var(--ui-popover-viewport-margin);
|
|
5899
6030
|
|
|
5900
6031
|
max-width: var(--ui-tooltip-max-width);
|
|
5901
6032
|
padding-block: calc(var(--_space) * 1.5);
|
|
@@ -5917,8 +6048,12 @@
|
|
|
5917
6048
|
inset: unset;
|
|
5918
6049
|
overflow: visible;
|
|
5919
6050
|
|
|
6051
|
+
--_popover-origin: bottom center;
|
|
6052
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(10deg);
|
|
6053
|
+
|
|
6054
|
+
transform-origin: var(--_popover-origin);
|
|
5920
6055
|
opacity: 0;
|
|
5921
|
-
transform:
|
|
6056
|
+
transform: var(--_popover-from);
|
|
5922
6057
|
transition:
|
|
5923
6058
|
opacity var(--_duration) var(--_easing),
|
|
5924
6059
|
transform var(--_duration) var(--_easing),
|
|
@@ -5930,37 +6065,45 @@
|
|
|
5930
6065
|
|
|
5931
6066
|
:where(ui-tooltip[popover]):popover-open {
|
|
5932
6067
|
opacity: 1;
|
|
5933
|
-
transform:
|
|
6068
|
+
transform: none;
|
|
5934
6069
|
}
|
|
5935
6070
|
|
|
5936
6071
|
/* Starting style for entry animation */
|
|
5937
6072
|
@starting-style {
|
|
5938
6073
|
:where(ui-tooltip[popover]):popover-open {
|
|
5939
6074
|
opacity: 0;
|
|
5940
|
-
transform:
|
|
6075
|
+
transform: var(--_popover-from);
|
|
5941
6076
|
}
|
|
5942
6077
|
}
|
|
5943
6078
|
|
|
5944
6079
|
/* ── Placement Variants ── */
|
|
5945
6080
|
|
|
5946
6081
|
:where(ui-tooltip[placement="top"]) {
|
|
6082
|
+
--_popover-origin: bottom center;
|
|
6083
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(10deg);
|
|
5947
6084
|
position-area: block-start;
|
|
5948
|
-
margin-
|
|
6085
|
+
margin-block-end: calc(var(--_space) * 2);
|
|
5949
6086
|
}
|
|
5950
6087
|
|
|
5951
6088
|
:where(ui-tooltip[placement="bottom"]) {
|
|
6089
|
+
--_popover-origin: top center;
|
|
6090
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(-10deg);
|
|
5952
6091
|
position-area: block-end;
|
|
5953
|
-
margin-
|
|
6092
|
+
margin-block-start: calc(var(--_space) * 2);
|
|
5954
6093
|
}
|
|
5955
6094
|
|
|
5956
6095
|
:where(ui-tooltip[placement="left"]) {
|
|
6096
|
+
--_popover-origin: right center;
|
|
6097
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(-10deg);
|
|
5957
6098
|
position-area: inline-start;
|
|
5958
|
-
margin-
|
|
6099
|
+
margin-inline-end: calc(var(--_space) * 2);
|
|
5959
6100
|
}
|
|
5960
6101
|
|
|
5961
6102
|
:where(ui-tooltip[placement="right"]) {
|
|
6103
|
+
--_popover-origin: left center;
|
|
6104
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(10deg);
|
|
5962
6105
|
position-area: inline-end;
|
|
5963
|
-
margin-
|
|
6106
|
+
margin-inline-start: calc(var(--_space) * 2);
|
|
5964
6107
|
}
|
|
5965
6108
|
|
|
5966
6109
|
/* ── Hidden (not :popover-open) ── */
|
|
@@ -5984,7 +6127,8 @@
|
|
|
5984
6127
|
flex: 1 1 0%;
|
|
5985
6128
|
min-width: 0;
|
|
5986
6129
|
flex-direction: column;
|
|
5987
|
-
padding: var(--_space);
|
|
6130
|
+
padding-block: var(--_space);
|
|
6131
|
+
padding-inline: var(--_space);
|
|
5988
6132
|
font-size: var(--_font-size);
|
|
5989
6133
|
line-height: var(--_line-height);
|
|
5990
6134
|
}
|
|
@@ -6067,7 +6211,7 @@
|
|
|
6067
6211
|
|
|
6068
6212
|
/* ── Disabled ── */
|
|
6069
6213
|
|
|
6070
|
-
:where(ui-tree-item[disabled]) > :where([slot="label"]) {
|
|
6214
|
+
:where(ui-tree-item[aria-disabled="true"]) > :where([slot="label"]) {
|
|
6071
6215
|
color: var(--_ink-disabled);
|
|
6072
6216
|
cursor: not-allowed;
|
|
6073
6217
|
pointer-events: none;
|
|
@@ -6775,11 +6919,11 @@
|
|
|
6775
6919
|
/* WHY: When collapsed to icon rail, the sidebar edge meets content — drop left padding. */
|
|
6776
6920
|
|
|
6777
6921
|
:where(ui-layout-sidebar)[collapsed] :where(ui-layout-canvas) {
|
|
6778
|
-
padding-
|
|
6922
|
+
padding-inline-start: 0;
|
|
6779
6923
|
}
|
|
6780
6924
|
|
|
6781
6925
|
:where(ui-layout-sidebar)[collapsed] :where(ui-layout-breadcrumb) {
|
|
6782
|
-
padding-
|
|
6926
|
+
padding-inline-start: 0;
|
|
6783
6927
|
}
|
|
6784
6928
|
|
|
6785
6929
|
/* ── Sidebar Header ── */
|
|
@@ -6946,10 +7090,15 @@
|
|
|
6946
7090
|
Flip: bottom-aligned, grows upward (span-block-start). */
|
|
6947
7091
|
|
|
6948
7092
|
:where(ui-layout-sidebar-item) > :where(ui-listbox[popover]) {
|
|
7093
|
+
--_popover-origin: left center;
|
|
7094
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(20deg);
|
|
7095
|
+
|
|
6949
7096
|
position: fixed;
|
|
6950
7097
|
position-area: inline-end span-block-end;
|
|
6951
7098
|
position-try-fallbacks: --sidebar-item-flip-up;
|
|
6952
|
-
margin:
|
|
7099
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
7100
|
+
margin-inline: 0;
|
|
7101
|
+
margin-inline-start: var(--ui-popover-gap);
|
|
6953
7102
|
min-width: 200px;
|
|
6954
7103
|
max-height: var(--ui-popover-max-height);
|
|
6955
7104
|
overflow-y: auto;
|
|
@@ -6959,6 +7108,10 @@
|
|
|
6959
7108
|
position-area: inline-end span-block-start;
|
|
6960
7109
|
}
|
|
6961
7110
|
|
|
7111
|
+
@position-try --sidebar-item-flip-down {
|
|
7112
|
+
position-area: inline-end span-block-end;
|
|
7113
|
+
}
|
|
7114
|
+
|
|
6962
7115
|
/* ── Container Query: Collapsed Sidebar ── */
|
|
6963
7116
|
/* WHY: Each component owns its own collapsed behavior via @container.
|
|
6964
7117
|
The aside is the container (container-name: sidebar). When it shrinks
|
|
@@ -6999,6 +7152,14 @@
|
|
|
6999
7152
|
:where(ui-layout-sidebar-item) > :where(:not([slot="icon"]):not(ui-listbox[popover]):not(.nav-group-flyout)) {
|
|
7000
7153
|
display: none;
|
|
7001
7154
|
}
|
|
7155
|
+
|
|
7156
|
+
/* WHY: In collapsed mode the sidebar item is a small icon — centering
|
|
7157
|
+
the popover vertically with the anchor is more natural than top-aligning.
|
|
7158
|
+
Fallbacks handle viewport clipping (top/bottom edge). */
|
|
7159
|
+
:where(ui-layout-sidebar-item) > :where(ui-listbox[popover]) {
|
|
7160
|
+
position-area: inline-end;
|
|
7161
|
+
position-try-fallbacks: --sidebar-item-flip-up, --sidebar-item-flip-down;
|
|
7162
|
+
}
|
|
7002
7163
|
}
|
|
7003
7164
|
|
|
7004
7165
|
}
|
|
@@ -7207,57 +7368,6 @@
|
|
|
7207
7368
|
|
|
7208
7369
|
}
|
|
7209
7370
|
|
|
7210
|
-
@layer ui {
|
|
7211
|
-
|
|
7212
|
-
/* ── Icon Base ── */
|
|
7213
|
-
|
|
7214
|
-
:where(ui-icon) {
|
|
7215
|
-
--ui-icon-size: var(--_icon-size);
|
|
7216
|
-
--ui-icon-color: currentColor;
|
|
7217
|
-
|
|
7218
|
-
box-sizing: border-box;
|
|
7219
|
-
display: inline-flex;
|
|
7220
|
-
align-items: center;
|
|
7221
|
-
justify-content: center;
|
|
7222
|
-
width: var(--ui-icon-size);
|
|
7223
|
-
height: var(--ui-icon-size);
|
|
7224
|
-
color: var(--ui-icon-color);
|
|
7225
|
-
flex-shrink: 0;
|
|
7226
|
-
vertical-align: middle;
|
|
7227
|
-
line-height: 0;
|
|
7228
|
-
}
|
|
7229
|
-
|
|
7230
|
-
:where(ui-icon) > :where(svg) {
|
|
7231
|
-
width: 100%;
|
|
7232
|
-
height: 100%;
|
|
7233
|
-
}
|
|
7234
|
-
|
|
7235
|
-
/* WHY: Unregistered icons (no SVG content) should collapse to zero size
|
|
7236
|
-
so surrounding buttons/slots don't render with phantom dimensions */
|
|
7237
|
-
:where(ui-icon:empty) {
|
|
7238
|
-
width: 0;
|
|
7239
|
-
height: 0;
|
|
7240
|
-
overflow: hidden;
|
|
7241
|
-
}
|
|
7242
|
-
|
|
7243
|
-
/* ── Icon Size Variants ── */
|
|
7244
|
-
|
|
7245
|
-
:where(ui-icon[size="xs"]) { --ui-icon-size: var(--ui-icon-xs); }
|
|
7246
|
-
:where(ui-icon[size="sm"]) { --ui-icon-size: var(--ui-icon-sm); }
|
|
7247
|
-
:where(ui-icon[size="md"]) { --ui-icon-size: var(--ui-icon-md); }
|
|
7248
|
-
:where(ui-icon[size="lg"]) { --ui-icon-size: var(--ui-icon-lg); }
|
|
7249
|
-
:where(ui-icon[size="xl"]) { --ui-icon-size: var(--ui-icon-xl); }
|
|
7250
|
-
|
|
7251
|
-
/* ── Forced Colors ── */
|
|
7252
|
-
|
|
7253
|
-
@media (forced-colors: active) {
|
|
7254
|
-
:where(ui-icon) {
|
|
7255
|
-
--ui-icon-color: ButtonText;
|
|
7256
|
-
}
|
|
7257
|
-
}
|
|
7258
|
-
|
|
7259
|
-
}
|
|
7260
|
-
|
|
7261
7371
|
@layer ui {
|
|
7262
7372
|
|
|
7263
7373
|
/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|