@nonoun/native-ui 0.2.8 → 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-lean.css +119 -6
- package/dist/components.css +119 -6
- package/dist/containers/ui-layout-sidebar/ui-layout-sidebar-element.d.ts.map +1 -1
- package/dist/core/trait-runtime.d.ts.map +1 -1
- package/dist/custom-elements.json +1602 -1602
- package/dist/dialog-controller.js +38 -350
- package/dist/foundation.css +1 -15
- 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.js +185 -186
- package/dist/list-navigate-controller.js +457 -0
- package/dist/native-ui-lean.css +120 -21
- package/dist/native-ui.css +120 -21
- package/dist/native-ui.js +7 -7
- package/dist/register-all.js +4 -3
- package/dist/register-all2.js +20 -19
- package/dist/traits/adapters/draggable-adapter.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.js +5 -6
- package/dist/ui-icon-element.js +391 -4153
- 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 -133
- /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;
|
|
@@ -3218,6 +3204,23 @@
|
|
|
3218
3204
|
cursor: text;
|
|
3219
3205
|
}
|
|
3220
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
|
+
|
|
3221
3224
|
}
|
|
3222
3225
|
|
|
3223
3226
|
@layer ui {
|
|
@@ -3878,6 +3881,39 @@
|
|
|
3878
3881
|
display: none;
|
|
3879
3882
|
}
|
|
3880
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
|
+
|
|
3881
3917
|
/* ── Option / Command Item Base ── */
|
|
3882
3918
|
|
|
3883
3919
|
:where(ui-option, ui-command-item, [role="option"]) {
|
|
@@ -4258,10 +4294,14 @@
|
|
|
4258
4294
|
instead of expanding the <details>. Same pattern as sidebar-trigger menus. */
|
|
4259
4295
|
|
|
4260
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
|
+
|
|
4261
4300
|
position: fixed;
|
|
4262
4301
|
position-area: inline-end span-block-end;
|
|
4263
4302
|
position-try-fallbacks: --nav-flyout-flip-up;
|
|
4264
|
-
margin:
|
|
4303
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
4304
|
+
margin-inline: 0;
|
|
4265
4305
|
margin-inline-start: var(--ui-popover-gap);
|
|
4266
4306
|
min-width: 200px;
|
|
4267
4307
|
max-height: var(--ui-popover-max-height);
|
|
@@ -4272,6 +4312,10 @@
|
|
|
4272
4312
|
position-area: inline-end span-block-start;
|
|
4273
4313
|
}
|
|
4274
4314
|
|
|
4315
|
+
@position-try --nav-flyout-flip-down {
|
|
4316
|
+
position-area: inline-end span-block-end;
|
|
4317
|
+
}
|
|
4318
|
+
|
|
4275
4319
|
/* ── Container Query: Collapsed Sidebar ── */
|
|
4276
4320
|
/* WHY: Nav components own their own collapsed behavior via @container.
|
|
4277
4321
|
The sidebar aside declares container-name: sidebar. When it shrinks
|
|
@@ -4315,6 +4359,14 @@
|
|
|
4315
4359
|
font-size: var(--_font-size, 1rem);
|
|
4316
4360
|
}
|
|
4317
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
|
+
|
|
4318
4370
|
/* Collapse inter-group spacing in icon rail. */
|
|
4319
4371
|
:where(ui-nav-group) + :where(ui-nav-group) {
|
|
4320
4372
|
margin-block-start: 0;
|
|
@@ -4548,6 +4600,8 @@
|
|
|
4548
4600
|
min-width: 0;
|
|
4549
4601
|
align-items: center;
|
|
4550
4602
|
position: relative;
|
|
4603
|
+
/* WHY: Isolate internal z-index (thumb z-index: 1) from parent stacking context */
|
|
4604
|
+
isolation: isolate;
|
|
4551
4605
|
|
|
4552
4606
|
min-height: var(--_track-height);
|
|
4553
4607
|
|
|
@@ -4829,6 +4883,23 @@
|
|
|
4829
4883
|
display: contents;
|
|
4830
4884
|
}
|
|
4831
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
|
+
|
|
4832
4903
|
}
|
|
4833
4904
|
|
|
4834
4905
|
@layer ui {
|
|
@@ -5955,7 +6026,7 @@
|
|
|
5955
6026
|
/* Default placement: above the anchor */
|
|
5956
6027
|
position-area: block-start;
|
|
5957
6028
|
position-try-fallbacks: flip-block, flip-inline;
|
|
5958
|
-
margin:
|
|
6029
|
+
margin: var(--ui-popover-viewport-margin);
|
|
5959
6030
|
|
|
5960
6031
|
max-width: var(--ui-tooltip-max-width);
|
|
5961
6032
|
padding-block: calc(var(--_space) * 1.5);
|
|
@@ -5977,8 +6048,12 @@
|
|
|
5977
6048
|
inset: unset;
|
|
5978
6049
|
overflow: visible;
|
|
5979
6050
|
|
|
6051
|
+
--_popover-origin: bottom center;
|
|
6052
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(10deg);
|
|
6053
|
+
|
|
6054
|
+
transform-origin: var(--_popover-origin);
|
|
5980
6055
|
opacity: 0;
|
|
5981
|
-
transform:
|
|
6056
|
+
transform: var(--_popover-from);
|
|
5982
6057
|
transition:
|
|
5983
6058
|
opacity var(--_duration) var(--_easing),
|
|
5984
6059
|
transform var(--_duration) var(--_easing),
|
|
@@ -5990,35 +6065,43 @@
|
|
|
5990
6065
|
|
|
5991
6066
|
:where(ui-tooltip[popover]):popover-open {
|
|
5992
6067
|
opacity: 1;
|
|
5993
|
-
transform:
|
|
6068
|
+
transform: none;
|
|
5994
6069
|
}
|
|
5995
6070
|
|
|
5996
6071
|
/* Starting style for entry animation */
|
|
5997
6072
|
@starting-style {
|
|
5998
6073
|
:where(ui-tooltip[popover]):popover-open {
|
|
5999
6074
|
opacity: 0;
|
|
6000
|
-
transform:
|
|
6075
|
+
transform: var(--_popover-from);
|
|
6001
6076
|
}
|
|
6002
6077
|
}
|
|
6003
6078
|
|
|
6004
6079
|
/* ── Placement Variants ── */
|
|
6005
6080
|
|
|
6006
6081
|
:where(ui-tooltip[placement="top"]) {
|
|
6082
|
+
--_popover-origin: bottom center;
|
|
6083
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(10deg);
|
|
6007
6084
|
position-area: block-start;
|
|
6008
6085
|
margin-block-end: calc(var(--_space) * 2);
|
|
6009
6086
|
}
|
|
6010
6087
|
|
|
6011
6088
|
:where(ui-tooltip[placement="bottom"]) {
|
|
6089
|
+
--_popover-origin: top center;
|
|
6090
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(-10deg);
|
|
6012
6091
|
position-area: block-end;
|
|
6013
6092
|
margin-block-start: calc(var(--_space) * 2);
|
|
6014
6093
|
}
|
|
6015
6094
|
|
|
6016
6095
|
:where(ui-tooltip[placement="left"]) {
|
|
6096
|
+
--_popover-origin: right center;
|
|
6097
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(-10deg);
|
|
6017
6098
|
position-area: inline-start;
|
|
6018
6099
|
margin-inline-end: calc(var(--_space) * 2);
|
|
6019
6100
|
}
|
|
6020
6101
|
|
|
6021
6102
|
:where(ui-tooltip[placement="right"]) {
|
|
6103
|
+
--_popover-origin: left center;
|
|
6104
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(10deg);
|
|
6022
6105
|
position-area: inline-end;
|
|
6023
6106
|
margin-inline-start: calc(var(--_space) * 2);
|
|
6024
6107
|
}
|
|
@@ -7007,10 +7090,14 @@
|
|
|
7007
7090
|
Flip: bottom-aligned, grows upward (span-block-start). */
|
|
7008
7091
|
|
|
7009
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
|
+
|
|
7010
7096
|
position: fixed;
|
|
7011
7097
|
position-area: inline-end span-block-end;
|
|
7012
7098
|
position-try-fallbacks: --sidebar-item-flip-up;
|
|
7013
|
-
margin:
|
|
7099
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
7100
|
+
margin-inline: 0;
|
|
7014
7101
|
margin-inline-start: var(--ui-popover-gap);
|
|
7015
7102
|
min-width: 200px;
|
|
7016
7103
|
max-height: var(--ui-popover-max-height);
|
|
@@ -7021,6 +7108,10 @@
|
|
|
7021
7108
|
position-area: inline-end span-block-start;
|
|
7022
7109
|
}
|
|
7023
7110
|
|
|
7111
|
+
@position-try --sidebar-item-flip-down {
|
|
7112
|
+
position-area: inline-end span-block-end;
|
|
7113
|
+
}
|
|
7114
|
+
|
|
7024
7115
|
/* ── Container Query: Collapsed Sidebar ── */
|
|
7025
7116
|
/* WHY: Each component owns its own collapsed behavior via @container.
|
|
7026
7117
|
The aside is the container (container-name: sidebar). When it shrinks
|
|
@@ -7061,6 +7152,14 @@
|
|
|
7061
7152
|
:where(ui-layout-sidebar-item) > :where(:not([slot="icon"]):not(ui-listbox[popover]):not(.nav-group-flyout)) {
|
|
7062
7153
|
display: none;
|
|
7063
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
|
+
}
|
|
7064
7163
|
}
|
|
7065
7164
|
|
|
7066
7165
|
}
|
package/dist/native-ui.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;
|
|
@@ -3236,6 +3222,23 @@
|
|
|
3236
3222
|
cursor: text;
|
|
3237
3223
|
}
|
|
3238
3224
|
|
|
3225
|
+
/* ── Popover Listbox Positioning ──
|
|
3226
|
+
WHY: Must come after ui-listbox.css base rule (which sets min-width: 0
|
|
3227
|
+
for flex-child shrinking) so min-width: anchor-size(inline) wins by
|
|
3228
|
+
source order — both are zero-specificity via :where(). */
|
|
3229
|
+
|
|
3230
|
+
:where(ui-combobox) > :where(ui-listbox[popover]) {
|
|
3231
|
+
position: fixed;
|
|
3232
|
+
position-area: block-end span-inline-end;
|
|
3233
|
+
position-try-fallbacks: flip-block;
|
|
3234
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
3235
|
+
margin-inline: 0;
|
|
3236
|
+
margin-block-start: var(--ui-popover-gap);
|
|
3237
|
+
min-width: anchor-size(inline);
|
|
3238
|
+
max-height: var(--ui-popover-max-height);
|
|
3239
|
+
overflow-y: auto;
|
|
3240
|
+
}
|
|
3241
|
+
|
|
3239
3242
|
}
|
|
3240
3243
|
|
|
3241
3244
|
@layer ui {
|
|
@@ -3902,6 +3905,39 @@
|
|
|
3902
3905
|
display: none;
|
|
3903
3906
|
}
|
|
3904
3907
|
|
|
3908
|
+
/* ── Popover Animation ──
|
|
3909
|
+
WHY: Shared entry/exit transition for all popover listboxes.
|
|
3910
|
+
Context CSS overrides --_popover-origin and --_popover-from
|
|
3911
|
+
to match the popover's anchor direction (e.g. sidebar flyouts
|
|
3912
|
+
open to the right → rotateY instead of rotateX). */
|
|
3913
|
+
|
|
3914
|
+
:where(ui-listbox[popover]) {
|
|
3915
|
+
--_popover-origin: top center;
|
|
3916
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(-20deg);
|
|
3917
|
+
|
|
3918
|
+
transform-origin: var(--_popover-origin);
|
|
3919
|
+
opacity: 0;
|
|
3920
|
+
transform: var(--_popover-from);
|
|
3921
|
+
|
|
3922
|
+
transition:
|
|
3923
|
+
opacity var(--_duration) var(--_easing),
|
|
3924
|
+
transform var(--_duration) var(--_easing),
|
|
3925
|
+
display var(--_duration) var(--_easing) allow-discrete,
|
|
3926
|
+
overlay var(--_duration) var(--_easing) allow-discrete;
|
|
3927
|
+
}
|
|
3928
|
+
|
|
3929
|
+
:where(ui-listbox[popover]):popover-open {
|
|
3930
|
+
opacity: 1;
|
|
3931
|
+
transform: none;
|
|
3932
|
+
}
|
|
3933
|
+
|
|
3934
|
+
@starting-style {
|
|
3935
|
+
:where(ui-listbox[popover]):popover-open {
|
|
3936
|
+
opacity: 0;
|
|
3937
|
+
transform: var(--_popover-from);
|
|
3938
|
+
}
|
|
3939
|
+
}
|
|
3940
|
+
|
|
3905
3941
|
/* ── Option / Command Item Base ── */
|
|
3906
3942
|
|
|
3907
3943
|
:where(ui-option, ui-command-item, [role="option"]) {
|
|
@@ -4290,10 +4326,14 @@
|
|
|
4290
4326
|
instead of expanding the <details>. Same pattern as sidebar-trigger menus. */
|
|
4291
4327
|
|
|
4292
4328
|
:where(ui-nav-group) > :where(ui-listbox.nav-group-flyout[popover]) {
|
|
4329
|
+
--_popover-origin: left center;
|
|
4330
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(20deg);
|
|
4331
|
+
|
|
4293
4332
|
position: fixed;
|
|
4294
4333
|
position-area: inline-end span-block-end;
|
|
4295
4334
|
position-try-fallbacks: --nav-flyout-flip-up;
|
|
4296
|
-
margin:
|
|
4335
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
4336
|
+
margin-inline: 0;
|
|
4297
4337
|
margin-inline-start: var(--ui-popover-gap);
|
|
4298
4338
|
min-width: 200px;
|
|
4299
4339
|
max-height: var(--ui-popover-max-height);
|
|
@@ -4304,6 +4344,10 @@
|
|
|
4304
4344
|
position-area: inline-end span-block-start;
|
|
4305
4345
|
}
|
|
4306
4346
|
|
|
4347
|
+
@position-try --nav-flyout-flip-down {
|
|
4348
|
+
position-area: inline-end span-block-end;
|
|
4349
|
+
}
|
|
4350
|
+
|
|
4307
4351
|
/* ── Container Query: Collapsed Sidebar ── */
|
|
4308
4352
|
/* WHY: Nav components own their own collapsed behavior via @container.
|
|
4309
4353
|
The sidebar aside declares container-name: sidebar. When it shrinks
|
|
@@ -4347,6 +4391,14 @@
|
|
|
4347
4391
|
font-size: var(--_font-size, 1rem);
|
|
4348
4392
|
}
|
|
4349
4393
|
|
|
4394
|
+
/* WHY: In collapsed mode the group is a small icon — centering
|
|
4395
|
+
the flyout vertically with the anchor is more natural than top-aligning.
|
|
4396
|
+
Fallbacks handle viewport clipping (top/bottom edge). */
|
|
4397
|
+
:where(ui-nav-group) > :where(ui-listbox.nav-group-flyout[popover]) {
|
|
4398
|
+
position-area: inline-end;
|
|
4399
|
+
position-try-fallbacks: --nav-flyout-flip-up, --nav-flyout-flip-down;
|
|
4400
|
+
}
|
|
4401
|
+
|
|
4350
4402
|
/* Collapse inter-group spacing in icon rail. */
|
|
4351
4403
|
:where(ui-nav-group) + :where(ui-nav-group) {
|
|
4352
4404
|
margin-block-start: 0;
|
|
@@ -4586,6 +4638,8 @@
|
|
|
4586
4638
|
min-width: 0;
|
|
4587
4639
|
align-items: center;
|
|
4588
4640
|
position: relative;
|
|
4641
|
+
/* WHY: Isolate internal z-index (thumb z-index: 1) from parent stacking context */
|
|
4642
|
+
isolation: isolate;
|
|
4589
4643
|
|
|
4590
4644
|
min-height: var(--_track-height);
|
|
4591
4645
|
|
|
@@ -4876,6 +4930,23 @@
|
|
|
4876
4930
|
display: contents;
|
|
4877
4931
|
}
|
|
4878
4932
|
|
|
4933
|
+
/* ── Popover Listbox Positioning ──
|
|
4934
|
+
WHY: Must come after ui-listbox.css base rule (which sets min-width: 0
|
|
4935
|
+
for flex-child shrinking) so min-width: anchor-size(inline) wins by
|
|
4936
|
+
source order — both are zero-specificity via :where(). */
|
|
4937
|
+
|
|
4938
|
+
:where(ui-select) > :where(ui-listbox[popover]) {
|
|
4939
|
+
position: fixed;
|
|
4940
|
+
position-area: block-end span-inline-end;
|
|
4941
|
+
position-try-fallbacks: flip-block;
|
|
4942
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
4943
|
+
margin-inline: 0;
|
|
4944
|
+
margin-block-start: var(--ui-popover-gap);
|
|
4945
|
+
min-width: anchor-size(inline);
|
|
4946
|
+
max-height: var(--ui-popover-max-height);
|
|
4947
|
+
overflow-y: auto;
|
|
4948
|
+
}
|
|
4949
|
+
|
|
4879
4950
|
}
|
|
4880
4951
|
|
|
4881
4952
|
@layer ui {
|
|
@@ -6028,7 +6099,7 @@
|
|
|
6028
6099
|
/* Default placement: above the anchor */
|
|
6029
6100
|
position-area: block-start;
|
|
6030
6101
|
position-try-fallbacks: flip-block, flip-inline;
|
|
6031
|
-
margin:
|
|
6102
|
+
margin: var(--ui-popover-viewport-margin);
|
|
6032
6103
|
|
|
6033
6104
|
max-width: var(--ui-tooltip-max-width);
|
|
6034
6105
|
padding-block: calc(var(--_space) * 1.5);
|
|
@@ -6050,8 +6121,12 @@
|
|
|
6050
6121
|
inset: unset;
|
|
6051
6122
|
overflow: visible;
|
|
6052
6123
|
|
|
6124
|
+
--_popover-origin: bottom center;
|
|
6125
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(10deg);
|
|
6126
|
+
|
|
6127
|
+
transform-origin: var(--_popover-origin);
|
|
6053
6128
|
opacity: 0;
|
|
6054
|
-
transform:
|
|
6129
|
+
transform: var(--_popover-from);
|
|
6055
6130
|
transition:
|
|
6056
6131
|
opacity var(--_duration) var(--_easing),
|
|
6057
6132
|
transform var(--_duration) var(--_easing),
|
|
@@ -6063,35 +6138,43 @@
|
|
|
6063
6138
|
|
|
6064
6139
|
:where(ui-tooltip[popover]):popover-open {
|
|
6065
6140
|
opacity: 1;
|
|
6066
|
-
transform:
|
|
6141
|
+
transform: none;
|
|
6067
6142
|
}
|
|
6068
6143
|
|
|
6069
6144
|
/* Starting style for entry animation */
|
|
6070
6145
|
@starting-style {
|
|
6071
6146
|
:where(ui-tooltip[popover]):popover-open {
|
|
6072
6147
|
opacity: 0;
|
|
6073
|
-
transform:
|
|
6148
|
+
transform: var(--_popover-from);
|
|
6074
6149
|
}
|
|
6075
6150
|
}
|
|
6076
6151
|
|
|
6077
6152
|
/* ── Placement Variants ── */
|
|
6078
6153
|
|
|
6079
6154
|
:where(ui-tooltip[placement="top"]) {
|
|
6155
|
+
--_popover-origin: bottom center;
|
|
6156
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(10deg);
|
|
6080
6157
|
position-area: block-start;
|
|
6081
6158
|
margin-block-end: calc(var(--_space) * 2);
|
|
6082
6159
|
}
|
|
6083
6160
|
|
|
6084
6161
|
:where(ui-tooltip[placement="bottom"]) {
|
|
6162
|
+
--_popover-origin: top center;
|
|
6163
|
+
--_popover-from: perspective(800px) scale(0.96) rotateX(-10deg);
|
|
6085
6164
|
position-area: block-end;
|
|
6086
6165
|
margin-block-start: calc(var(--_space) * 2);
|
|
6087
6166
|
}
|
|
6088
6167
|
|
|
6089
6168
|
:where(ui-tooltip[placement="left"]) {
|
|
6169
|
+
--_popover-origin: right center;
|
|
6170
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(-10deg);
|
|
6090
6171
|
position-area: inline-start;
|
|
6091
6172
|
margin-inline-end: calc(var(--_space) * 2);
|
|
6092
6173
|
}
|
|
6093
6174
|
|
|
6094
6175
|
:where(ui-tooltip[placement="right"]) {
|
|
6176
|
+
--_popover-origin: left center;
|
|
6177
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(10deg);
|
|
6095
6178
|
position-area: inline-end;
|
|
6096
6179
|
margin-inline-start: calc(var(--_space) * 2);
|
|
6097
6180
|
}
|
|
@@ -7086,10 +7169,14 @@
|
|
|
7086
7169
|
Flip: bottom-aligned, grows upward (span-block-start). */
|
|
7087
7170
|
|
|
7088
7171
|
:where(ui-layout-sidebar-item) > :where(ui-listbox[popover]) {
|
|
7172
|
+
--_popover-origin: left center;
|
|
7173
|
+
--_popover-from: perspective(800px) scale(0.96) rotateY(20deg);
|
|
7174
|
+
|
|
7089
7175
|
position: fixed;
|
|
7090
7176
|
position-area: inline-end span-block-end;
|
|
7091
7177
|
position-try-fallbacks: --sidebar-item-flip-up;
|
|
7092
|
-
margin:
|
|
7178
|
+
margin-block: var(--ui-popover-viewport-margin);
|
|
7179
|
+
margin-inline: 0;
|
|
7093
7180
|
margin-inline-start: var(--ui-popover-gap);
|
|
7094
7181
|
min-width: 200px;
|
|
7095
7182
|
max-height: var(--ui-popover-max-height);
|
|
@@ -7100,6 +7187,10 @@
|
|
|
7100
7187
|
position-area: inline-end span-block-start;
|
|
7101
7188
|
}
|
|
7102
7189
|
|
|
7190
|
+
@position-try --sidebar-item-flip-down {
|
|
7191
|
+
position-area: inline-end span-block-end;
|
|
7192
|
+
}
|
|
7193
|
+
|
|
7103
7194
|
/* ── Container Query: Collapsed Sidebar ── */
|
|
7104
7195
|
/* WHY: Each component owns its own collapsed behavior via @container.
|
|
7105
7196
|
The aside is the container (container-name: sidebar). When it shrinks
|
|
@@ -7140,6 +7231,14 @@
|
|
|
7140
7231
|
:where(ui-layout-sidebar-item) > :where(:not([slot="icon"]):not(ui-listbox[popover]):not(.nav-group-flyout)) {
|
|
7141
7232
|
display: none;
|
|
7142
7233
|
}
|
|
7234
|
+
|
|
7235
|
+
/* WHY: In collapsed mode the sidebar item is a small icon — centering
|
|
7236
|
+
the popover vertically with the anchor is more natural than top-aligning.
|
|
7237
|
+
Fallbacks handle viewport clipping (top/bottom edge). */
|
|
7238
|
+
:where(ui-layout-sidebar-item) > :where(ui-listbox[popover]) {
|
|
7239
|
+
position-area: inline-end;
|
|
7240
|
+
position-try-fallbacks: --sidebar-item-flip-up, --sidebar-item-flip-down;
|
|
7241
|
+
}
|
|
7143
7242
|
}
|
|
7144
7243
|
|
|
7145
7244
|
}
|
package/dist/native-ui.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { a as
|
|
6
|
-
import { $ as
|
|
1
|
+
import { a as e, i as t, n, o as ee, r as te, t as ne } from "./uid.js";
|
|
2
|
+
import { i as r, n as i, r as a, t as o } from "./dialog-controller.js";
|
|
3
|
+
import { A as s, B as c, C as l, D as u, E as d, F as f, H as p, I as m, L as h, M as g, N as _, O as v, P as y, R as b, S as x, T as S, U as C, V as w, W as T, _ as E, a as D, b as O, c as k, d as A, f as j, g as M, h as N, i as P, j as F, k as I, l as L, m as R, n as z, o as B, p as V, r as H, s as U, t as W, u as G, v as K, w as q, x as J, y as Y, z as X } from "./register-all2.js";
|
|
4
|
+
import { a as Z, c as re, d as ie, f as ae, g as oe, i as se, l as ce, m as le, n as ue, o as de, p as fe, r as pe, s as me, t as he, u as ge } from "./list-navigate-controller.js";
|
|
5
|
+
import { _ as _e, a as ve, c as ye, d as be, f as xe, g as Se, h as Ce, i as we, l as Te, m as Ee, n as De, o as Oe, p as ke, r as Ae, s as je, t as Q, u as Me, v as Ne } from "./ui-icon-element.js";
|
|
6
|
+
import { $ as Pe, A as Fe, B as Ie, C as Le, D as Re, E as ze, F as Be, G as Ve, H as He, I as Ue, J as We, K as Ge, L as Ke, M as qe, N as Je, O as Ye, P as Xe, Q as Ze, R as Qe, S as $e, T as et, U as tt, V as nt, W as rt, X as it, Y as at, Z as ot, _ as st, a as ct, at as lt, b as ut, c as dt, ct as ft, d as pt, et as mt, f as ht, g as gt, h as _t, i as vt, it as yt, j as bt, k as xt, l as St, lt as Ct, m as wt, n as Tt, nt as Et, o as Dt, ot as Ot, p as kt, q as At, r as jt, rt as Mt, s as Nt, st as Pt, t as Ft, tt as It, u as Lt, v as Rt, w as zt, x as Bt, y as Vt, z as Ht } from "./ui-layout-inspector-element.js";
|
|
7
7
|
var $ = class extends Event {
|
|
8
8
|
context;
|
|
9
9
|
callback;
|
|
@@ -46,4 +46,4 @@ function Wt(e) {
|
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
-
export {
|
|
49
|
+
export { Fe as CalendarStore, f as ClipboardController, u as CollapsibleController, Qe as ColumnResizeController, Wt as ContextConsumer, Ut as ContextProvider, $ as ContextRequestEvent, _ as CopyController, ke as DataListController, o as DialogController, pe as DismissController, de as DismissStack, a as DragController, F as DropZoneController, m as EditController, v as FocusTrapController, Ce as FormAssociable, ce as GestureRouter, y as HoverController, g as IntersectController, he as ListNavigateController, ue as PopoverController, Z as PressController, w as RangeSelectController, i as ResizeController, se as RovingFocusController, b as SearchController, je as SelectController, X as SelectionController, s as SortController, h as SwipeController, Ht as TableStore, d as ToastController, me as ToastManager, At as UIAccordion, Ge as UIAccordionItem, zt as UIAvatar, Le as UIBadge, Bt as UIBreadcrumb, ut as UIBreadcrumbItem, Me as UIButton, xt as UICalendar, Nt as UICard, dt as UIChatInput, mt as UICheckbox, Ye as UICombobox, Ot as UICommand, It as UICommandEmpty, Et as UICommandGroup, lt as UICommandInput, Mt as UICommandItem, yt as UICommandList, St as UIController, Ve as UIDialog, Rt as UIDrawer, ge as UIElement, Re as UIField, Q as UIIcon, Ct as UIInput, et as UIInputOtp, $e as UIKbd, Tt as UILayoutChat, Ft as UILayoutInspector, vt as UILayoutSidebar, jt as UILayoutSidebarItem, Te as UIListbox, kt as UINav, pt as UINavGroup, Lt as UINavGroupHeader, ht as UINavItem, ye as UIOption, Pt as UIOptionGroup, ft as UIOptionGroupHeader, Vt as UIPagination, Ze as UIRadio, ot as UIRadioGroup, ve as UIRange, Dt as UISection, at as UISegment, it as UISegmentedControl, Oe as UISelect, wt as UISlide, _t as UISlideshow, Pe as UISwitch, tt as UITab, He as UITabPanel, nt as UITabPanels, Ke as UITable, Be as UITableBody, Je as UITableCell, Ue as UITableHead, qe as UITableHeader, Xe as UITableRow, rt as UITabs, ze as UITextarea, ct as UIToolbar, We as UITooltip, st as UITree, gt as UITreeItem, I as ValidateController, c as VirtualScrollController, te as batch, P as clippableAdapter, E as collapsibleAdapter, ie as collectTraitOptions, e as computed, l as copyableAdapter, bt as createCalendarStore, Ee as createDataList, Ne as createDisabledEffect, Ie as createTableStore, p as debugReactive, n as define, A as dialogableAdapter, N as dismissableAdapter, G as draggableAdapter, J as droppableAdapter, z as editableAdapter, t as effect, be as fetchDataOptions, K as focusTrappableAdapter, De as getIcon, fe as getRegisteredTraitNames, le as getTrait, re as getTraitRuntime, q as hoverableAdapter, x as intersectableAdapter, C as isComputed, T as isSignal, j as listNavigableAdapter, Ae as onIconRegistered, xe as parseDataOptions, ae as parseTraitAttribute, V as popoverableAdapter, S as pressableAdapter, Se as prop, L as rangeSelectableAdapter, W as registerAllTraits, we as registerIcon, oe as registerTrait, k as resizableAdapter, M as rovingFocusableAdapter, D as searchableAdapter, B as selectableAdapter, ee as signal, O as sortableAdapter, H as swipeableAdapter, _e as syncProp, R as toastableAdapter, ne as uid, r as untrack, Y as validatableAdapter, U as virtualizableAdapter };
|
package/dist/register-all.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { n as e } from "./uid.js";
|
|
2
|
+
import { a as t, c as n, l as r, o as i, t as a, u as o } from "./ui-icon-element.js";
|
|
3
|
+
import { $ as s, C as c, D as l, E as u, F as d, G as f, H as p, I as m, J as h, K as g, L as _, M as v, N as y, O as b, P as x, Q as S, S as C, T as w, U as T, V as E, W as D, X as O, Y as k, Z as A, _ as j, a as M, at as N, b as P, c as F, ct as I, d as L, et as R, f as z, g as B, h as V, i as H, it as U, k as W, l as G, lt as K, m as q, n as J, nt as Y, o as X, ot as Z, p as Q, q as $, r as ee, rt as te, s as ne, st as re, t as ie, tt as ae, u as oe, v as se, w as ce, x as le, y as ue } from "./ui-layout-inspector-element.js";
|
|
4
|
+
e("ui-button", o), e("ui-input", K), e("ui-listbox", r), e("ui-option", n), e("ui-option-group", re), e("ui-option-group-header", I), e("ui-select", i), e("ui-combobox", b), e("ui-command", Z), e("ui-command-input", N), e("ui-command-list", U), e("ui-command-group", Y), e("ui-command-item", te), e("ui-command-empty", ae), e("ui-checkbox", R), e("ui-switch", s), e("ui-radio", S), e("ui-radio-group", A), e("ui-segmented-control", O), e("ui-segment", k), e("ui-tooltip", h), e("ui-accordion", $), e("ui-accordion-item", g), e("ui-dialog", f), e("ui-tabs", D), e("ui-tab", T), e("ui-tab-panel", p), e("ui-tab-panels", E), e("ui-table", _), e("ui-table-head", m), e("ui-table-body", d), e("ui-table-row", x), e("ui-table-header", v), e("ui-table-cell", y), e("ui-calendar", W), e("ui-field", l), e("ui-textarea", u), e("ui-range", t), e("ui-input-otp", w), e("ui-avatar", ce), e("ui-badge", c), e("ui-kbd", C), e("ui-breadcrumb", le), e("ui-breadcrumb-item", P), e("ui-pagination", ue), e("ui-drawer", se), e("ui-tree", j), e("ui-tree-item", B), e("ui-slideshow", V), e("ui-slide", q), e("ui-nav", Q), e("ui-nav-group", L), e("ui-nav-group-header", oe), e("ui-nav-item", z), e("ui-chat-input", F), e("ui-controller", G), e("ui-card", ne), e("ui-section", X), e("ui-toolbar", M), e("ui-layout-sidebar", H), e("ui-layout-sidebar-item", ee), e("ui-layout-chat", J), e("ui-layout-inspector", ie), e("ui-icon", a);
|