@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/components-lean.css
CHANGED
|
@@ -1,3 +1,54 @@
|
|
|
1
|
+
@layer ui {
|
|
2
|
+
|
|
3
|
+
/* ── Icon Base ── */
|
|
4
|
+
|
|
5
|
+
:where(ui-icon) {
|
|
6
|
+
--ui-icon-size: var(--_icon-size);
|
|
7
|
+
--ui-icon-color: currentColor;
|
|
8
|
+
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
display: inline-flex;
|
|
11
|
+
align-items: center;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
width: var(--ui-icon-size);
|
|
14
|
+
height: var(--ui-icon-size);
|
|
15
|
+
color: var(--ui-icon-color);
|
|
16
|
+
flex-shrink: 0;
|
|
17
|
+
vertical-align: middle;
|
|
18
|
+
line-height: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
:where(ui-icon) > :where(svg) {
|
|
22
|
+
width: 100%;
|
|
23
|
+
height: 100%;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* WHY: Unregistered icons (no SVG content) should collapse to zero size
|
|
27
|
+
so surrounding buttons/slots don't render with phantom dimensions */
|
|
28
|
+
:where(ui-icon:empty) {
|
|
29
|
+
width: 0;
|
|
30
|
+
height: 0;
|
|
31
|
+
overflow: hidden;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* ── Icon Size Variants ── */
|
|
35
|
+
|
|
36
|
+
:where(ui-icon[size="xs"]) { --ui-icon-size: var(--ui-icon-xs); }
|
|
37
|
+
:where(ui-icon[size="sm"]) { --ui-icon-size: var(--ui-icon-sm); }
|
|
38
|
+
:where(ui-icon[size="md"]) { --ui-icon-size: var(--ui-icon-md); }
|
|
39
|
+
:where(ui-icon[size="lg"]) { --ui-icon-size: var(--ui-icon-lg); }
|
|
40
|
+
:where(ui-icon[size="xl"]) { --ui-icon-size: var(--ui-icon-xl); }
|
|
41
|
+
|
|
42
|
+
/* ── Forced Colors ── */
|
|
43
|
+
|
|
44
|
+
@media (forced-colors: active) {
|
|
45
|
+
:where(ui-icon) {
|
|
46
|
+
--ui-icon-color: ButtonText;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
1
52
|
@layer ui {
|
|
2
53
|
|
|
3
54
|
/* ── Accordion Container ── */
|
|
@@ -467,7 +518,8 @@
|
|
|
467
518
|
display: inline-flex;
|
|
468
519
|
flex-direction: column;
|
|
469
520
|
gap: calc(var(--_space));
|
|
470
|
-
padding: calc(var(--_space) * 2);
|
|
521
|
+
padding-block: calc(var(--_space) * 2);
|
|
522
|
+
padding-inline: calc(var(--_space) * 2);
|
|
471
523
|
border: 1px solid var(--_border-color);
|
|
472
524
|
border-radius: var(--_radius);
|
|
473
525
|
background: var(--_background);
|
|
@@ -674,11 +726,17 @@
|
|
|
674
726
|
}
|
|
675
727
|
|
|
676
728
|
:where(ui-calendar) :where([data-range-start]) {
|
|
677
|
-
border-radius: calc(var(--_radius) - var(--_space))
|
|
729
|
+
border-start-start-radius: calc(var(--_radius) - var(--_space));
|
|
730
|
+
border-end-start-radius: calc(var(--_radius) - var(--_space));
|
|
731
|
+
border-start-end-radius: 0;
|
|
732
|
+
border-end-end-radius: 0;
|
|
678
733
|
}
|
|
679
734
|
|
|
680
735
|
:where(ui-calendar) :where([data-range-end]) {
|
|
681
|
-
border-radius: 0
|
|
736
|
+
border-start-start-radius: 0;
|
|
737
|
+
border-end-start-radius: 0;
|
|
738
|
+
border-start-end-radius: calc(var(--_radius) - var(--_space));
|
|
739
|
+
border-end-end-radius: calc(var(--_radius) - var(--_space));
|
|
682
740
|
}
|
|
683
741
|
|
|
684
742
|
:where(ui-calendar) :where([data-range-start][data-range-end]) {
|
|
@@ -1015,13 +1073,14 @@
|
|
|
1015
1073
|
|
|
1016
1074
|
/* ── Active (pressed) ── */
|
|
1017
1075
|
|
|
1018
|
-
:where(ui-checkbox)[pressed]::before
|
|
1076
|
+
:where(ui-checkbox)[pressed]::before{
|
|
1019
1077
|
background: var(--_background-active, var(--_widget-active));
|
|
1020
1078
|
border-color: var(--_border-color-active, var(--_border-active));
|
|
1021
1079
|
}
|
|
1022
1080
|
|
|
1023
1081
|
:where(ui-checkbox)[aria-checked="true"][pressed]::before,
|
|
1024
|
-
:where(ui-checkbox)[aria-checked="mixed"][pressed]::before
|
|
1082
|
+
:where(ui-checkbox)[aria-checked="mixed"][pressed]::before
|
|
1083
|
+
:where(ui-checkbox)[aria-checked="mixed"][force-active]::before {
|
|
1025
1084
|
background: var(--_surface-active);
|
|
1026
1085
|
border-color: var(--_surface-active);
|
|
1027
1086
|
}
|
|
@@ -1077,6 +1136,23 @@
|
|
|
1077
1136
|
cursor: text;
|
|
1078
1137
|
}
|
|
1079
1138
|
|
|
1139
|
+
/* ── Popover Listbox Positioning ──
|
|
1140
|
+
WHY: Must come after ui-listbox.css base rule (which sets min-width: 0
|
|
1141
|
+
for flex-child shrinking) so min-width: anchor-size(inline) wins by
|
|
1142
|
+
source order — both are zero-specificity via :where(). */
|
|
1143
|
+
|
|
1144
|
+
:where(ui-combobox) > :where(ui-listbox[popover]) {
|
|
1145
|
+
position: fixed;
|
|
1146
|
+
position-area: block-end span-inline-end;
|
|
1147
|
+
position-try-fallbacks: flip-block;
|
|
1148
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
1149
|
+
margin-inline: 0;
|
|
1150
|
+
margin-block-start: var(--ui-popover-gap);
|
|
1151
|
+
min-width: anchor-size(inline);
|
|
1152
|
+
max-height: var(--ui-popover-max-height);
|
|
1153
|
+
overflow-y: auto;
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1080
1156
|
}
|
|
1081
1157
|
|
|
1082
1158
|
@layer ui {
|
|
@@ -1129,7 +1205,8 @@
|
|
|
1129
1205
|
:where(ui-command-list) {
|
|
1130
1206
|
overflow-y: auto;
|
|
1131
1207
|
max-height: var(--ui-popover-max-height);
|
|
1132
|
-
padding: var(--_space);
|
|
1208
|
+
padding-block: var(--_space);
|
|
1209
|
+
padding-inline: var(--_space);
|
|
1133
1210
|
}
|
|
1134
1211
|
|
|
1135
1212
|
/* ── Command Group ── */
|
|
@@ -1221,7 +1298,8 @@
|
|
|
1221
1298
|
}
|
|
1222
1299
|
|
|
1223
1300
|
:where(ui-dialog) > :where(dialog)::backdrop {
|
|
1224
|
-
background: var(--ui-backdrop-color)
|
|
1301
|
+
background: var(--ui-backdrop-color);
|
|
1302
|
+
opacity: var(--ui-backdrop-opacity);
|
|
1225
1303
|
}
|
|
1226
1304
|
|
|
1227
1305
|
}
|
|
@@ -1261,7 +1339,8 @@
|
|
|
1261
1339
|
/* WHY: Animate backdrop opacity on open for a smooth reveal. */
|
|
1262
1340
|
|
|
1263
1341
|
:where(ui-drawer) > :where(dialog)::backdrop {
|
|
1264
|
-
background: var(--ui-backdrop-color)
|
|
1342
|
+
background: var(--ui-backdrop-color);
|
|
1343
|
+
opacity: var(--ui-backdrop-opacity);
|
|
1265
1344
|
animation: drawer-backdrop-in var(--_duration) ease-out;
|
|
1266
1345
|
}
|
|
1267
1346
|
|
|
@@ -1717,7 +1796,8 @@
|
|
|
1717
1796
|
min-width: 0;
|
|
1718
1797
|
flex-direction: column;
|
|
1719
1798
|
gap: 0;
|
|
1720
|
-
padding: var(--_space);
|
|
1799
|
+
padding-block: var(--_space);
|
|
1800
|
+
padding-inline: var(--_space);
|
|
1721
1801
|
border-radius: var(--_radius);
|
|
1722
1802
|
border: 1px solid var(--_border-color, var(--_border-rest));
|
|
1723
1803
|
background: var(--_background, var(--_control));
|
|
@@ -1733,6 +1813,39 @@
|
|
|
1733
1813
|
display: none;
|
|
1734
1814
|
}
|
|
1735
1815
|
|
|
1816
|
+
/* ── Popover Animation ──
|
|
1817
|
+
WHY: Shared entry/exit transition for all popover listboxes.
|
|
1818
|
+
Context CSS overrides --_popover-origin and --_popover-from
|
|
1819
|
+
to match the popover's anchor direction (e.g. sidebar flyouts
|
|
1820
|
+
open to the right → rotateY instead of rotateX). */
|
|
1821
|
+
|
|
1822
|
+
:where(ui-listbox[popover]) {
|
|
1823
|
+
--_popover-origin: top center;
|
|
1824
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(-20deg);
|
|
1825
|
+
|
|
1826
|
+
transform-origin: var(--_popover-origin);
|
|
1827
|
+
opacity: 0;
|
|
1828
|
+
transform: var(--_popover-from);
|
|
1829
|
+
|
|
1830
|
+
transition:
|
|
1831
|
+
opacity var(--_duration) var(--_easing),
|
|
1832
|
+
transform var(--_duration) var(--_easing),
|
|
1833
|
+
display var(--_duration) var(--_easing) allow-discrete,
|
|
1834
|
+
overlay var(--_duration) var(--_easing) allow-discrete;
|
|
1835
|
+
}
|
|
1836
|
+
|
|
1837
|
+
:where(ui-listbox[popover]):popover-open {
|
|
1838
|
+
opacity: 1;
|
|
1839
|
+
transform: none;
|
|
1840
|
+
}
|
|
1841
|
+
|
|
1842
|
+
@starting-style {
|
|
1843
|
+
:where(ui-listbox[popover]):popover-open {
|
|
1844
|
+
opacity: 0;
|
|
1845
|
+
transform: var(--_popover-from);
|
|
1846
|
+
}
|
|
1847
|
+
}
|
|
1848
|
+
|
|
1736
1849
|
/* ── Option / Command Item Base ── */
|
|
1737
1850
|
|
|
1738
1851
|
:where(ui-option, ui-command-item, [role="option"]) {
|
|
@@ -1893,10 +2006,6 @@
|
|
|
1893
2006
|
color: var(--_ink-hover);
|
|
1894
2007
|
}
|
|
1895
2008
|
|
|
1896
|
-
:where(ui-nav-item)[active] {
|
|
1897
|
-
color: var(--_ink-hover);
|
|
1898
|
-
}
|
|
1899
|
-
|
|
1900
2009
|
:where(ui-nav-item):active{
|
|
1901
2010
|
color: var(--_ink-active);
|
|
1902
2011
|
}
|
|
@@ -2117,10 +2226,15 @@
|
|
|
2117
2226
|
instead of expanding the <details>. Same pattern as sidebar-trigger menus. */
|
|
2118
2227
|
|
|
2119
2228
|
:where(ui-nav-group) > :where(ui-listbox.nav-group-flyout[popover]) {
|
|
2229
|
+
--_popover-origin: left center;
|
|
2230
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(20deg);
|
|
2231
|
+
|
|
2120
2232
|
position: fixed;
|
|
2121
2233
|
position-area: inline-end span-block-end;
|
|
2122
2234
|
position-try-fallbacks: --nav-flyout-flip-up;
|
|
2123
|
-
margin:
|
|
2235
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
2236
|
+
margin-inline: 0;
|
|
2237
|
+
margin-inline-start: var(--ui-popover-gap);
|
|
2124
2238
|
min-width: 200px;
|
|
2125
2239
|
max-height: var(--ui-popover-max-height);
|
|
2126
2240
|
overflow-y: auto;
|
|
@@ -2130,6 +2244,10 @@
|
|
|
2130
2244
|
position-area: inline-end span-block-start;
|
|
2131
2245
|
}
|
|
2132
2246
|
|
|
2247
|
+
@position-try --nav-flyout-flip-down {
|
|
2248
|
+
position-area: inline-end span-block-end;
|
|
2249
|
+
}
|
|
2250
|
+
|
|
2133
2251
|
/* ── Container Query: Collapsed Sidebar ── */
|
|
2134
2252
|
/* WHY: Nav components own their own collapsed behavior via @container.
|
|
2135
2253
|
The sidebar aside declares container-name: sidebar. When it shrinks
|
|
@@ -2173,6 +2291,14 @@
|
|
|
2173
2291
|
font-size: var(--_font-size, 1rem);
|
|
2174
2292
|
}
|
|
2175
2293
|
|
|
2294
|
+
/* WHY: In collapsed mode the group is a small icon — centering
|
|
2295
|
+
the flyout vertically with the anchor is more natural than top-aligning.
|
|
2296
|
+
Fallbacks handle viewport clipping (top/bottom edge). */
|
|
2297
|
+
:where(ui-nav-group) > :where(ui-listbox.nav-group-flyout[popover]) {
|
|
2298
|
+
position-area: inline-end;
|
|
2299
|
+
position-try-fallbacks: --nav-flyout-flip-up, --nav-flyout-flip-down;
|
|
2300
|
+
}
|
|
2301
|
+
|
|
2176
2302
|
/* Collapse inter-group spacing in icon rail. */
|
|
2177
2303
|
:where(ui-nav-group) + :where(ui-nav-group) {
|
|
2178
2304
|
margin-block-start: 0;
|
|
@@ -2348,12 +2474,12 @@
|
|
|
2348
2474
|
|
|
2349
2475
|
/* ── Active (pressed) ── */
|
|
2350
2476
|
|
|
2351
|
-
:where(ui-radio)[pressed]::before
|
|
2477
|
+
:where(ui-radio)[pressed]::before{
|
|
2352
2478
|
background: var(--_background-active, var(--_widget-active));
|
|
2353
2479
|
border-color: var(--_border-color-active, var(--_border-active));
|
|
2354
2480
|
}
|
|
2355
2481
|
|
|
2356
|
-
:where(ui-radio)[aria-checked="true"][pressed]::before
|
|
2482
|
+
:where(ui-radio)[aria-checked="true"][pressed]::before{
|
|
2357
2483
|
background: var(--_surface-active);
|
|
2358
2484
|
border-color: var(--_surface-active);
|
|
2359
2485
|
}
|
|
@@ -2406,6 +2532,8 @@
|
|
|
2406
2532
|
min-width: 0;
|
|
2407
2533
|
align-items: center;
|
|
2408
2534
|
position: relative;
|
|
2535
|
+
/* WHY: Isolate internal z-index (thumb z-index: 1) from parent stacking context */
|
|
2536
|
+
isolation: isolate;
|
|
2409
2537
|
|
|
2410
2538
|
min-height: var(--_track-height);
|
|
2411
2539
|
|
|
@@ -2499,11 +2627,11 @@
|
|
|
2499
2627
|
|
|
2500
2628
|
/* ── Active (dragging) ── */
|
|
2501
2629
|
|
|
2502
|
-
:where(ui-range)[pressed]::after
|
|
2630
|
+
:where(ui-range)[pressed]::after{
|
|
2503
2631
|
background: var(--_surface-active);
|
|
2504
2632
|
}
|
|
2505
2633
|
|
|
2506
|
-
:where(ui-range)[pressed] > :where(.ui-range-thumb)
|
|
2634
|
+
:where(ui-range)[pressed] > :where(.ui-range-thumb){
|
|
2507
2635
|
border-color: var(--_surface-active);
|
|
2508
2636
|
box-shadow: var(--ui-shadow-sm), 0 0 0 6px var(--_surface);
|
|
2509
2637
|
}
|
|
@@ -2687,6 +2815,23 @@
|
|
|
2687
2815
|
display: contents;
|
|
2688
2816
|
}
|
|
2689
2817
|
|
|
2818
|
+
/* ── Popover Listbox Positioning ──
|
|
2819
|
+
WHY: Must come after ui-listbox.css base rule (which sets min-width: 0
|
|
2820
|
+
for flex-child shrinking) so min-width: anchor-size(inline) wins by
|
|
2821
|
+
source order — both are zero-specificity via :where(). */
|
|
2822
|
+
|
|
2823
|
+
:where(ui-select) > :where(ui-listbox[popover]) {
|
|
2824
|
+
position: fixed;
|
|
2825
|
+
position-area: block-end span-inline-end;
|
|
2826
|
+
position-try-fallbacks: flip-block;
|
|
2827
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
2828
|
+
margin-inline: 0;
|
|
2829
|
+
margin-block-start: var(--ui-popover-gap);
|
|
2830
|
+
min-width: anchor-size(inline);
|
|
2831
|
+
max-height: var(--ui-popover-max-height);
|
|
2832
|
+
overflow-y: auto;
|
|
2833
|
+
}
|
|
2834
|
+
|
|
2690
2835
|
}
|
|
2691
2836
|
|
|
2692
2837
|
@layer ui {
|
|
@@ -3078,12 +3223,12 @@
|
|
|
3078
3223
|
|
|
3079
3224
|
/* ── Active (pressed) ── */
|
|
3080
3225
|
|
|
3081
|
-
:where(ui-switch)[pressed]::before
|
|
3226
|
+
:where(ui-switch)[pressed]::before{
|
|
3082
3227
|
background: var(--_track-bg-active);
|
|
3083
3228
|
border-color: var(--_track-border-active);
|
|
3084
3229
|
}
|
|
3085
3230
|
|
|
3086
|
-
:where(ui-switch)[aria-checked="true"][pressed]::before
|
|
3231
|
+
:where(ui-switch)[aria-checked="true"][pressed]::before{
|
|
3087
3232
|
background: var(--_surface-active);
|
|
3088
3233
|
border-color: var(--_surface-active);
|
|
3089
3234
|
}
|
|
@@ -3813,7 +3958,7 @@
|
|
|
3813
3958
|
/* Default placement: above the anchor */
|
|
3814
3959
|
position-area: block-start;
|
|
3815
3960
|
position-try-fallbacks: flip-block, flip-inline;
|
|
3816
|
-
margin:
|
|
3961
|
+
margin: var(--ui-popover-viewport-margin);
|
|
3817
3962
|
|
|
3818
3963
|
max-width: var(--ui-tooltip-max-width);
|
|
3819
3964
|
padding-block: calc(var(--_space) * 1.5);
|
|
@@ -3835,8 +3980,12 @@
|
|
|
3835
3980
|
inset: unset;
|
|
3836
3981
|
overflow: visible;
|
|
3837
3982
|
|
|
3983
|
+
--_popover-origin: bottom center;
|
|
3984
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(10deg);
|
|
3985
|
+
|
|
3986
|
+
transform-origin: var(--_popover-origin);
|
|
3838
3987
|
opacity: 0;
|
|
3839
|
-
transform:
|
|
3988
|
+
transform: var(--_popover-from);
|
|
3840
3989
|
transition:
|
|
3841
3990
|
opacity var(--_duration) var(--_easing),
|
|
3842
3991
|
transform var(--_duration) var(--_easing),
|
|
@@ -3848,37 +3997,45 @@
|
|
|
3848
3997
|
|
|
3849
3998
|
:where(ui-tooltip[popover]):popover-open {
|
|
3850
3999
|
opacity: 1;
|
|
3851
|
-
transform:
|
|
4000
|
+
transform: none;
|
|
3852
4001
|
}
|
|
3853
4002
|
|
|
3854
4003
|
/* Starting style for entry animation */
|
|
3855
4004
|
@starting-style {
|
|
3856
4005
|
:where(ui-tooltip[popover]):popover-open {
|
|
3857
4006
|
opacity: 0;
|
|
3858
|
-
transform:
|
|
4007
|
+
transform: var(--_popover-from);
|
|
3859
4008
|
}
|
|
3860
4009
|
}
|
|
3861
4010
|
|
|
3862
4011
|
/* ── Placement Variants ── */
|
|
3863
4012
|
|
|
3864
4013
|
:where(ui-tooltip[placement="top"]) {
|
|
4014
|
+
--_popover-origin: bottom center;
|
|
4015
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(10deg);
|
|
3865
4016
|
position-area: block-start;
|
|
3866
|
-
margin-
|
|
4017
|
+
margin-block-end: calc(var(--_space) * 2);
|
|
3867
4018
|
}
|
|
3868
4019
|
|
|
3869
4020
|
:where(ui-tooltip[placement="bottom"]) {
|
|
4021
|
+
--_popover-origin: top center;
|
|
4022
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(-10deg);
|
|
3870
4023
|
position-area: block-end;
|
|
3871
|
-
margin-
|
|
4024
|
+
margin-block-start: calc(var(--_space) * 2);
|
|
3872
4025
|
}
|
|
3873
4026
|
|
|
3874
4027
|
:where(ui-tooltip[placement="left"]) {
|
|
4028
|
+
--_popover-origin: right center;
|
|
4029
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(-10deg);
|
|
3875
4030
|
position-area: inline-start;
|
|
3876
|
-
margin-
|
|
4031
|
+
margin-inline-end: calc(var(--_space) * 2);
|
|
3877
4032
|
}
|
|
3878
4033
|
|
|
3879
4034
|
:where(ui-tooltip[placement="right"]) {
|
|
4035
|
+
--_popover-origin: left center;
|
|
4036
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(10deg);
|
|
3880
4037
|
position-area: inline-end;
|
|
3881
|
-
margin-
|
|
4038
|
+
margin-inline-start: calc(var(--_space) * 2);
|
|
3882
4039
|
}
|
|
3883
4040
|
|
|
3884
4041
|
/* ── Hidden (not :popover-open) ── */
|
|
@@ -3902,7 +4059,8 @@
|
|
|
3902
4059
|
flex: 1 1 0%;
|
|
3903
4060
|
min-width: 0;
|
|
3904
4061
|
flex-direction: column;
|
|
3905
|
-
padding: var(--_space);
|
|
4062
|
+
padding-block: var(--_space);
|
|
4063
|
+
padding-inline: var(--_space);
|
|
3906
4064
|
font-size: var(--_font-size);
|
|
3907
4065
|
line-height: var(--_line-height);
|
|
3908
4066
|
}
|
|
@@ -3985,7 +4143,7 @@
|
|
|
3985
4143
|
|
|
3986
4144
|
/* ── Disabled ── */
|
|
3987
4145
|
|
|
3988
|
-
:where(ui-tree-item[disabled]) > :where([slot="label"]) {
|
|
4146
|
+
:where(ui-tree-item[aria-disabled="true"]) > :where([slot="label"]) {
|
|
3989
4147
|
color: var(--_ink-disabled);
|
|
3990
4148
|
cursor: not-allowed;
|
|
3991
4149
|
pointer-events: none;
|
|
@@ -4693,11 +4851,11 @@
|
|
|
4693
4851
|
/* WHY: When collapsed to icon rail, the sidebar edge meets content — drop left padding. */
|
|
4694
4852
|
|
|
4695
4853
|
:where(ui-layout-sidebar)[collapsed] :where(ui-layout-canvas) {
|
|
4696
|
-
padding-
|
|
4854
|
+
padding-inline-start: 0;
|
|
4697
4855
|
}
|
|
4698
4856
|
|
|
4699
4857
|
:where(ui-layout-sidebar)[collapsed] :where(ui-layout-breadcrumb) {
|
|
4700
|
-
padding-
|
|
4858
|
+
padding-inline-start: 0;
|
|
4701
4859
|
}
|
|
4702
4860
|
|
|
4703
4861
|
/* ── Sidebar Header ── */
|
|
@@ -4864,10 +5022,15 @@
|
|
|
4864
5022
|
Flip: bottom-aligned, grows upward (span-block-start). */
|
|
4865
5023
|
|
|
4866
5024
|
:where(ui-layout-sidebar-item) > :where(ui-listbox[popover]) {
|
|
5025
|
+
--_popover-origin: left center;
|
|
5026
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(20deg);
|
|
5027
|
+
|
|
4867
5028
|
position: fixed;
|
|
4868
5029
|
position-area: inline-end span-block-end;
|
|
4869
5030
|
position-try-fallbacks: --sidebar-item-flip-up;
|
|
4870
|
-
margin:
|
|
5031
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
5032
|
+
margin-inline: 0;
|
|
5033
|
+
margin-inline-start: var(--ui-popover-gap);
|
|
4871
5034
|
min-width: 200px;
|
|
4872
5035
|
max-height: var(--ui-popover-max-height);
|
|
4873
5036
|
overflow-y: auto;
|
|
@@ -4877,6 +5040,10 @@
|
|
|
4877
5040
|
position-area: inline-end span-block-start;
|
|
4878
5041
|
}
|
|
4879
5042
|
|
|
5043
|
+
@position-try --sidebar-item-flip-down {
|
|
5044
|
+
position-area: inline-end span-block-end;
|
|
5045
|
+
}
|
|
5046
|
+
|
|
4880
5047
|
/* ── Container Query: Collapsed Sidebar ── */
|
|
4881
5048
|
/* WHY: Each component owns its own collapsed behavior via @container.
|
|
4882
5049
|
The aside is the container (container-name: sidebar). When it shrinks
|
|
@@ -4917,6 +5084,14 @@
|
|
|
4917
5084
|
:where(ui-layout-sidebar-item) > :where(:not([slot="icon"]):not(ui-listbox[popover]):not(.nav-group-flyout)) {
|
|
4918
5085
|
display: none;
|
|
4919
5086
|
}
|
|
5087
|
+
|
|
5088
|
+
/* WHY: In collapsed mode the sidebar item is a small icon — centering
|
|
5089
|
+
the popover vertically with the anchor is more natural than top-aligning.
|
|
5090
|
+
Fallbacks handle viewport clipping (top/bottom edge). */
|
|
5091
|
+
:where(ui-layout-sidebar-item) > :where(ui-listbox[popover]) {
|
|
5092
|
+
position-area: inline-end;
|
|
5093
|
+
position-try-fallbacks: --sidebar-item-flip-up, --sidebar-item-flip-down;
|
|
5094
|
+
}
|
|
4920
5095
|
}
|
|
4921
5096
|
|
|
4922
5097
|
}
|
|
@@ -5125,57 +5300,6 @@
|
|
|
5125
5300
|
|
|
5126
5301
|
}
|
|
5127
5302
|
|
|
5128
|
-
@layer ui {
|
|
5129
|
-
|
|
5130
|
-
/* ── Icon Base ── */
|
|
5131
|
-
|
|
5132
|
-
:where(ui-icon) {
|
|
5133
|
-
--ui-icon-size: var(--_icon-size);
|
|
5134
|
-
--ui-icon-color: currentColor;
|
|
5135
|
-
|
|
5136
|
-
box-sizing: border-box;
|
|
5137
|
-
display: inline-flex;
|
|
5138
|
-
align-items: center;
|
|
5139
|
-
justify-content: center;
|
|
5140
|
-
width: var(--ui-icon-size);
|
|
5141
|
-
height: var(--ui-icon-size);
|
|
5142
|
-
color: var(--ui-icon-color);
|
|
5143
|
-
flex-shrink: 0;
|
|
5144
|
-
vertical-align: middle;
|
|
5145
|
-
line-height: 0;
|
|
5146
|
-
}
|
|
5147
|
-
|
|
5148
|
-
:where(ui-icon) > :where(svg) {
|
|
5149
|
-
width: 100%;
|
|
5150
|
-
height: 100%;
|
|
5151
|
-
}
|
|
5152
|
-
|
|
5153
|
-
/* WHY: Unregistered icons (no SVG content) should collapse to zero size
|
|
5154
|
-
so surrounding buttons/slots don't render with phantom dimensions */
|
|
5155
|
-
:where(ui-icon:empty) {
|
|
5156
|
-
width: 0;
|
|
5157
|
-
height: 0;
|
|
5158
|
-
overflow: hidden;
|
|
5159
|
-
}
|
|
5160
|
-
|
|
5161
|
-
/* ── Icon Size Variants ── */
|
|
5162
|
-
|
|
5163
|
-
:where(ui-icon[size="xs"]) { --ui-icon-size: var(--ui-icon-xs); }
|
|
5164
|
-
:where(ui-icon[size="sm"]) { --ui-icon-size: var(--ui-icon-sm); }
|
|
5165
|
-
:where(ui-icon[size="md"]) { --ui-icon-size: var(--ui-icon-md); }
|
|
5166
|
-
:where(ui-icon[size="lg"]) { --ui-icon-size: var(--ui-icon-lg); }
|
|
5167
|
-
:where(ui-icon[size="xl"]) { --ui-icon-size: var(--ui-icon-xl); }
|
|
5168
|
-
|
|
5169
|
-
/* ── Forced Colors ── */
|
|
5170
|
-
|
|
5171
|
-
@media (forced-colors: active) {
|
|
5172
|
-
:where(ui-icon) {
|
|
5173
|
-
--ui-icon-color: ButtonText;
|
|
5174
|
-
}
|
|
5175
|
-
}
|
|
5176
|
-
|
|
5177
|
-
}
|
|
5178
|
-
|
|
5179
5303
|
@layer ui {
|
|
5180
5304
|
|
|
5181
5305
|
/* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|