@nonoun/native-ui 0.2.7 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/components/ui-accordion/ui-accordion-element.d.ts.map +1 -1
  2. package/dist/components/ui-avatar/ui-avatar-element.d.ts +2 -0
  3. package/dist/components/ui-avatar/ui-avatar-element.d.ts.map +1 -1
  4. package/dist/components/ui-calendar/calendar-store.d.ts.map +1 -1
  5. package/dist/components/ui-calendar/ui-calendar-element.d.ts +1 -0
  6. package/dist/components/ui-calendar/ui-calendar-element.d.ts.map +1 -1
  7. package/dist/components/ui-chat/ui-chat-input-element.d.ts.map +1 -1
  8. package/dist/components/ui-checkbox/ui-checkbox-element.d.ts +1 -0
  9. package/dist/components/ui-checkbox/ui-checkbox-element.d.ts.map +1 -1
  10. package/dist/components/ui-combobox/ui-combobox-element.d.ts +1 -0
  11. package/dist/components/ui-combobox/ui-combobox-element.d.ts.map +1 -1
  12. package/dist/components/ui-command/ui-command-element.d.ts.map +1 -1
  13. package/dist/components/ui-command/ui-command-group-element.d.ts +1 -0
  14. package/dist/components/ui-command/ui-command-group-element.d.ts.map +1 -1
  15. package/dist/components/ui-controller/ui-controller-element.d.ts +1 -0
  16. package/dist/components/ui-controller/ui-controller-element.d.ts.map +1 -1
  17. package/dist/components/ui-dialog/ui-dialog-element.d.ts +0 -1
  18. package/dist/components/ui-dialog/ui-dialog-element.d.ts.map +1 -1
  19. package/dist/components/ui-drawer/ui-drawer-element.d.ts +0 -1
  20. package/dist/components/ui-drawer/ui-drawer-element.d.ts.map +1 -1
  21. package/dist/components/ui-field/ui-field-element.d.ts.map +1 -1
  22. package/dist/components/ui-input/ui-input-element.d.ts +1 -0
  23. package/dist/components/ui-input/ui-input-element.d.ts.map +1 -1
  24. package/dist/components/ui-input-otp/ui-input-otp-element.d.ts +1 -0
  25. package/dist/components/ui-input-otp/ui-input-otp-element.d.ts.map +1 -1
  26. package/dist/components/ui-listbox/ui-listbox-element.d.ts.map +1 -1
  27. package/dist/components/ui-nav/ui-nav-group-element.d.ts +1 -1
  28. package/dist/components/ui-pagination/ui-pagination-element.d.ts.map +1 -1
  29. package/dist/components/ui-radio/ui-radio-element.d.ts.map +1 -1
  30. package/dist/components/ui-radio/ui-radio-group-element.d.ts +1 -0
  31. package/dist/components/ui-radio/ui-radio-group-element.d.ts.map +1 -1
  32. package/dist/components/ui-range/ui-range-element.d.ts +4 -0
  33. package/dist/components/ui-range/ui-range-element.d.ts.map +1 -1
  34. package/dist/components/ui-segmented-control/ui-segment-element.d.ts.map +1 -1
  35. package/dist/components/ui-segmented-control/ui-segmented-control-element.d.ts +1 -0
  36. package/dist/components/ui-segmented-control/ui-segmented-control-element.d.ts.map +1 -1
  37. package/dist/components/ui-select/ui-select-element.d.ts +1 -0
  38. package/dist/components/ui-select/ui-select-element.d.ts.map +1 -1
  39. package/dist/components/ui-slideshow/ui-slideshow-element.d.ts.map +1 -1
  40. package/dist/components/ui-switch/ui-switch-element.d.ts +4 -0
  41. package/dist/components/ui-switch/ui-switch-element.d.ts.map +1 -1
  42. package/dist/components/ui-table/index.d.ts +1 -1
  43. package/dist/components/ui-table/index.d.ts.map +1 -1
  44. package/dist/components/ui-table/table-store.d.ts +0 -1
  45. package/dist/components/ui-table/table-store.d.ts.map +1 -1
  46. package/dist/components/ui-table/ui-table-element.d.ts +1 -0
  47. package/dist/components/ui-table/ui-table-element.d.ts.map +1 -1
  48. package/dist/components/ui-table/ui-table-header-element.d.ts +1 -0
  49. package/dist/components/ui-table/ui-table-header-element.d.ts.map +1 -1
  50. package/dist/components/ui-tabs/ui-tab-element.d.ts.map +1 -1
  51. package/dist/components/ui-tabs/ui-tabs-element.d.ts.map +1 -1
  52. package/dist/components/ui-textarea/ui-textarea-element.d.ts +1 -0
  53. package/dist/components/ui-textarea/ui-textarea-element.d.ts.map +1 -1
  54. package/dist/components/ui-tree/ui-tree-item-element.d.ts +4 -0
  55. package/dist/components/ui-tree/ui-tree-item-element.d.ts.map +1 -1
  56. package/dist/components-lean.css +91 -80
  57. package/dist/components.css +99 -80
  58. package/dist/core/form-associable.d.ts +2 -2
  59. package/dist/core/ui-element.d.ts +2 -0
  60. package/dist/core/ui-element.d.ts.map +1 -1
  61. package/dist/custom-elements.json +4429 -2287
  62. package/dist/dialog-controller.js +56 -39
  63. package/dist/icons/ui-icon-element.d.ts +1 -0
  64. package/dist/icons/ui-icon-element.d.ts.map +1 -1
  65. package/dist/index.d.ts +1 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/kernel/index.d.ts +1 -0
  68. package/dist/kernel/index.d.ts.map +1 -1
  69. package/dist/kernel/overlay-manager.d.ts +5 -1
  70. package/dist/kernel/overlay-manager.d.ts.map +1 -1
  71. package/dist/kernel.js +32 -13
  72. package/dist/native-ui-lean.css +91 -80
  73. package/dist/native-ui.css +99 -80
  74. package/dist/native-ui.js +5 -5
  75. package/dist/register-all2.js +147 -76
  76. package/dist/traits/adapters/collapsible-adapter.d.ts.map +1 -1
  77. package/dist/traits/adapters/copyable-adapter.d.ts.map +1 -1
  78. package/dist/traits/adapters/hoverable-adapter.d.ts.map +1 -1
  79. package/dist/traits/adapters/intersectable-adapter.d.ts.map +1 -1
  80. package/dist/traits/adapters/resizable-adapter.d.ts.map +1 -1
  81. package/dist/traits/adapters/searchable-adapter.d.ts.map +1 -1
  82. package/dist/traits/adapters/sortable-adapter.d.ts.map +1 -1
  83. package/dist/traits/adapters/swipeable-adapter.d.ts.map +1 -1
  84. package/dist/traits/adapters/virtualizable-adapter.d.ts.map +1 -1
  85. package/dist/traits/collapsible-controller.d.ts.map +1 -1
  86. package/dist/traits/dialog-controller.d.ts.map +1 -1
  87. package/dist/traits/drag-controller.d.ts.map +1 -1
  88. package/dist/traits/drop-zone-controller.d.ts +1 -1
  89. package/dist/traits/drop-zone-controller.d.ts.map +1 -1
  90. package/dist/traits/focus-trap-controller.d.ts.map +1 -1
  91. package/dist/traits/hover-controller.d.ts +1 -1
  92. package/dist/traits/hover-controller.d.ts.map +1 -1
  93. package/dist/traits/intersect-controller.d.ts.map +1 -1
  94. package/dist/traits/popover-controller.d.ts.map +1 -1
  95. package/dist/traits/press-controller.d.ts.map +1 -1
  96. package/dist/traits/resize-controller.d.ts.map +1 -1
  97. package/dist/traits/selection-controller.d.ts.map +1 -1
  98. package/dist/traits/sort-controller.d.ts.map +1 -1
  99. package/dist/traits/swipe-controller.d.ts.map +1 -1
  100. package/dist/traits/validate-controller.d.ts +2 -0
  101. package/dist/traits/validate-controller.d.ts.map +1 -1
  102. package/dist/traits.js +4 -4
  103. package/dist/ui-element.js +13 -8
  104. package/dist/ui-icon-element.js +687 -467
  105. package/package.json +1 -1
@@ -2080,6 +2080,57 @@
2080
2080
  }
2081
2081
  }
2082
2082
 
2083
+ @layer ui {
2084
+
2085
+ /* ── Icon Base ── */
2086
+
2087
+ :where(ui-icon) {
2088
+ --ui-icon-size: var(--_icon-size);
2089
+ --ui-icon-color: currentColor;
2090
+
2091
+ box-sizing: border-box;
2092
+ display: inline-flex;
2093
+ align-items: center;
2094
+ justify-content: center;
2095
+ width: var(--ui-icon-size);
2096
+ height: var(--ui-icon-size);
2097
+ color: var(--ui-icon-color);
2098
+ flex-shrink: 0;
2099
+ vertical-align: middle;
2100
+ line-height: 0;
2101
+ }
2102
+
2103
+ :where(ui-icon) > :where(svg) {
2104
+ width: 100%;
2105
+ height: 100%;
2106
+ }
2107
+
2108
+ /* WHY: Unregistered icons (no SVG content) should collapse to zero size
2109
+ so surrounding buttons/slots don't render with phantom dimensions */
2110
+ :where(ui-icon:empty) {
2111
+ width: 0;
2112
+ height: 0;
2113
+ overflow: hidden;
2114
+ }
2115
+
2116
+ /* ── Icon Size Variants ── */
2117
+
2118
+ :where(ui-icon[size="xs"]) { --ui-icon-size: var(--ui-icon-xs); }
2119
+ :where(ui-icon[size="sm"]) { --ui-icon-size: var(--ui-icon-sm); }
2120
+ :where(ui-icon[size="md"]) { --ui-icon-size: var(--ui-icon-md); }
2121
+ :where(ui-icon[size="lg"]) { --ui-icon-size: var(--ui-icon-lg); }
2122
+ :where(ui-icon[size="xl"]) { --ui-icon-size: var(--ui-icon-xl); }
2123
+
2124
+ /* ── Forced Colors ── */
2125
+
2126
+ @media (forced-colors: active) {
2127
+ :where(ui-icon) {
2128
+ --ui-icon-color: ButtonText;
2129
+ }
2130
+ }
2131
+
2132
+ }
2133
+
2083
2134
  @layer ui {
2084
2135
 
2085
2136
  /* ── Accordion Container ── */
@@ -2549,7 +2600,8 @@
2549
2600
  display: inline-flex;
2550
2601
  flex-direction: column;
2551
2602
  gap: calc(var(--_space));
2552
- padding: calc(var(--_space) * 2);
2603
+ padding-block: calc(var(--_space) * 2);
2604
+ padding-inline: calc(var(--_space) * 2);
2553
2605
  border: 1px solid var(--_border-color);
2554
2606
  border-radius: var(--_radius);
2555
2607
  background: var(--_background);
@@ -2756,11 +2808,17 @@
2756
2808
  }
2757
2809
 
2758
2810
  :where(ui-calendar) :where([data-range-start]) {
2759
- border-radius: calc(var(--_radius) - var(--_space)) 0 0 calc(var(--_radius) - var(--_space));
2811
+ border-start-start-radius: calc(var(--_radius) - var(--_space));
2812
+ border-end-start-radius: calc(var(--_radius) - var(--_space));
2813
+ border-start-end-radius: 0;
2814
+ border-end-end-radius: 0;
2760
2815
  }
2761
2816
 
2762
2817
  :where(ui-calendar) :where([data-range-end]) {
2763
- border-radius: 0 calc(var(--_radius) - var(--_space)) calc(var(--_radius) - var(--_space)) 0;
2818
+ border-start-start-radius: 0;
2819
+ border-end-start-radius: 0;
2820
+ border-start-end-radius: calc(var(--_radius) - var(--_space));
2821
+ border-end-end-radius: calc(var(--_radius) - var(--_space));
2764
2822
  }
2765
2823
 
2766
2824
  :where(ui-calendar) :where([data-range-start][data-range-end]) {
@@ -3097,13 +3155,14 @@
3097
3155
 
3098
3156
  /* ── Active (pressed) ── */
3099
3157
 
3100
- :where(ui-checkbox)[pressed]::before {
3158
+ :where(ui-checkbox)[pressed]::before{
3101
3159
  background: var(--_background-active, var(--_widget-active));
3102
3160
  border-color: var(--_border-color-active, var(--_border-active));
3103
3161
  }
3104
3162
 
3105
3163
  :where(ui-checkbox)[aria-checked="true"][pressed]::before,
3106
- :where(ui-checkbox)[aria-checked="mixed"][pressed]::before {
3164
+ :where(ui-checkbox)[aria-checked="mixed"][pressed]::before
3165
+ :where(ui-checkbox)[aria-checked="mixed"][force-active]::before {
3107
3166
  background: var(--_surface-active);
3108
3167
  border-color: var(--_surface-active);
3109
3168
  }
@@ -3211,7 +3270,8 @@
3211
3270
  :where(ui-command-list) {
3212
3271
  overflow-y: auto;
3213
3272
  max-height: var(--ui-popover-max-height);
3214
- padding: var(--_space);
3273
+ padding-block: var(--_space);
3274
+ padding-inline: var(--_space);
3215
3275
  }
3216
3276
 
3217
3277
  /* ── Command Group ── */
@@ -3303,7 +3363,8 @@
3303
3363
  }
3304
3364
 
3305
3365
  :where(ui-dialog) > :where(dialog)::backdrop {
3306
- background: var(--ui-backdrop-color) / var(--ui-backdrop-opacity);
3366
+ background: var(--ui-backdrop-color);
3367
+ opacity: var(--ui-backdrop-opacity);
3307
3368
  }
3308
3369
 
3309
3370
  }
@@ -3343,7 +3404,8 @@
3343
3404
  /* WHY: Animate backdrop opacity on open for a smooth reveal. */
3344
3405
 
3345
3406
  :where(ui-drawer) > :where(dialog)::backdrop {
3346
- background: var(--ui-backdrop-color) / var(--ui-backdrop-opacity);
3407
+ background: var(--ui-backdrop-color);
3408
+ opacity: var(--ui-backdrop-opacity);
3347
3409
  animation: drawer-backdrop-in var(--_duration) ease-out;
3348
3410
  }
3349
3411
 
@@ -3799,7 +3861,8 @@
3799
3861
  min-width: 0;
3800
3862
  flex-direction: column;
3801
3863
  gap: 0;
3802
- padding: var(--_space);
3864
+ padding-block: var(--_space);
3865
+ padding-inline: var(--_space);
3803
3866
  border-radius: var(--_radius);
3804
3867
  border: 1px solid var(--_border-color, var(--_border-rest));
3805
3868
  background: var(--_background, var(--_control));
@@ -3975,10 +4038,6 @@
3975
4038
  color: var(--_ink-hover);
3976
4039
  }
3977
4040
 
3978
- :where(ui-nav-item)[active] {
3979
- color: var(--_ink-hover);
3980
- }
3981
-
3982
4041
  :where(ui-nav-item):active{
3983
4042
  color: var(--_ink-active);
3984
4043
  }
@@ -4202,7 +4261,8 @@
4202
4261
  position: fixed;
4203
4262
  position-area: inline-end span-block-end;
4204
4263
  position-try-fallbacks: --nav-flyout-flip-up;
4205
- margin: 0 0 0 var(--ui-popover-gap);
4264
+ margin: 0;
4265
+ margin-inline-start: var(--ui-popover-gap);
4206
4266
  min-width: 200px;
4207
4267
  max-height: var(--ui-popover-max-height);
4208
4268
  overflow-y: auto;
@@ -4430,12 +4490,12 @@
4430
4490
 
4431
4491
  /* ── Active (pressed) ── */
4432
4492
 
4433
- :where(ui-radio)[pressed]::before {
4493
+ :where(ui-radio)[pressed]::before{
4434
4494
  background: var(--_background-active, var(--_widget-active));
4435
4495
  border-color: var(--_border-color-active, var(--_border-active));
4436
4496
  }
4437
4497
 
4438
- :where(ui-radio)[aria-checked="true"][pressed]::before {
4498
+ :where(ui-radio)[aria-checked="true"][pressed]::before{
4439
4499
  background: var(--_surface-active);
4440
4500
  border-color: var(--_surface-active);
4441
4501
  }
@@ -4581,11 +4641,11 @@
4581
4641
 
4582
4642
  /* ── Active (dragging) ── */
4583
4643
 
4584
- :where(ui-range)[pressed]::after {
4644
+ :where(ui-range)[pressed]::after{
4585
4645
  background: var(--_surface-active);
4586
4646
  }
4587
4647
 
4588
- :where(ui-range)[pressed] > :where(.ui-range-thumb) {
4648
+ :where(ui-range)[pressed] > :where(.ui-range-thumb){
4589
4649
  border-color: var(--_surface-active);
4590
4650
  box-shadow: var(--ui-shadow-sm), 0 0 0 6px var(--_surface);
4591
4651
  }
@@ -5160,12 +5220,12 @@
5160
5220
 
5161
5221
  /* ── Active (pressed) ── */
5162
5222
 
5163
- :where(ui-switch)[pressed]::before {
5223
+ :where(ui-switch)[pressed]::before{
5164
5224
  background: var(--_track-bg-active);
5165
5225
  border-color: var(--_track-border-active);
5166
5226
  }
5167
5227
 
5168
- :where(ui-switch)[aria-checked="true"][pressed]::before {
5228
+ :where(ui-switch)[aria-checked="true"][pressed]::before{
5169
5229
  background: var(--_surface-active);
5170
5230
  border-color: var(--_surface-active);
5171
5231
  }
@@ -5945,22 +6005,22 @@
5945
6005
 
5946
6006
  :where(ui-tooltip[placement="top"]) {
5947
6007
  position-area: block-start;
5948
- margin-bottom: calc(var(--_space) * 2);
6008
+ margin-block-end: calc(var(--_space) * 2);
5949
6009
  }
5950
6010
 
5951
6011
  :where(ui-tooltip[placement="bottom"]) {
5952
6012
  position-area: block-end;
5953
- margin-top: calc(var(--_space) * 2);
6013
+ margin-block-start: calc(var(--_space) * 2);
5954
6014
  }
5955
6015
 
5956
6016
  :where(ui-tooltip[placement="left"]) {
5957
6017
  position-area: inline-start;
5958
- margin-right: calc(var(--_space) * 2);
6018
+ margin-inline-end: calc(var(--_space) * 2);
5959
6019
  }
5960
6020
 
5961
6021
  :where(ui-tooltip[placement="right"]) {
5962
6022
  position-area: inline-end;
5963
- margin-left: calc(var(--_space) * 2);
6023
+ margin-inline-start: calc(var(--_space) * 2);
5964
6024
  }
5965
6025
 
5966
6026
  /* ── Hidden (not :popover-open) ── */
@@ -5984,7 +6044,8 @@
5984
6044
  flex: 1 1 0%;
5985
6045
  min-width: 0;
5986
6046
  flex-direction: column;
5987
- padding: var(--_space);
6047
+ padding-block: var(--_space);
6048
+ padding-inline: var(--_space);
5988
6049
  font-size: var(--_font-size);
5989
6050
  line-height: var(--_line-height);
5990
6051
  }
@@ -6067,7 +6128,7 @@
6067
6128
 
6068
6129
  /* ── Disabled ── */
6069
6130
 
6070
- :where(ui-tree-item[disabled]) > :where([slot="label"]) {
6131
+ :where(ui-tree-item[aria-disabled="true"]) > :where([slot="label"]) {
6071
6132
  color: var(--_ink-disabled);
6072
6133
  cursor: not-allowed;
6073
6134
  pointer-events: none;
@@ -6775,11 +6836,11 @@
6775
6836
  /* WHY: When collapsed to icon rail, the sidebar edge meets content — drop left padding. */
6776
6837
 
6777
6838
  :where(ui-layout-sidebar)[collapsed] :where(ui-layout-canvas) {
6778
- padding-left: 0;
6839
+ padding-inline-start: 0;
6779
6840
  }
6780
6841
 
6781
6842
  :where(ui-layout-sidebar)[collapsed] :where(ui-layout-breadcrumb) {
6782
- padding-left: 0;
6843
+ padding-inline-start: 0;
6783
6844
  }
6784
6845
 
6785
6846
  /* ── Sidebar Header ── */
@@ -6949,7 +7010,8 @@
6949
7010
  position: fixed;
6950
7011
  position-area: inline-end span-block-end;
6951
7012
  position-try-fallbacks: --sidebar-item-flip-up;
6952
- margin: 0 0 0 var(--ui-popover-gap);
7013
+ margin: 0;
7014
+ margin-inline-start: var(--ui-popover-gap);
6953
7015
  min-width: 200px;
6954
7016
  max-height: var(--ui-popover-max-height);
6955
7017
  overflow-y: auto;
@@ -7207,57 +7269,6 @@
7207
7269
 
7208
7270
  }
7209
7271
 
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
7272
  @layer ui {
7262
7273
 
7263
7274
  /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@@ -2080,6 +2080,57 @@
2080
2080
  }
2081
2081
  }
2082
2082
 
2083
+ @layer ui {
2084
+
2085
+ /* ── Icon Base ── */
2086
+
2087
+ :where(ui-icon) {
2088
+ --ui-icon-size: var(--_icon-size);
2089
+ --ui-icon-color: currentColor;
2090
+
2091
+ box-sizing: border-box;
2092
+ display: inline-flex;
2093
+ align-items: center;
2094
+ justify-content: center;
2095
+ width: var(--ui-icon-size);
2096
+ height: var(--ui-icon-size);
2097
+ color: var(--ui-icon-color);
2098
+ flex-shrink: 0;
2099
+ vertical-align: middle;
2100
+ line-height: 0;
2101
+ }
2102
+
2103
+ :where(ui-icon) > :where(svg) {
2104
+ width: 100%;
2105
+ height: 100%;
2106
+ }
2107
+
2108
+ /* WHY: Unregistered icons (no SVG content) should collapse to zero size
2109
+ so surrounding buttons/slots don't render with phantom dimensions */
2110
+ :where(ui-icon:empty) {
2111
+ width: 0;
2112
+ height: 0;
2113
+ overflow: hidden;
2114
+ }
2115
+
2116
+ /* ── Icon Size Variants ── */
2117
+
2118
+ :where(ui-icon[size="xs"]) { --ui-icon-size: var(--ui-icon-xs); }
2119
+ :where(ui-icon[size="sm"]) { --ui-icon-size: var(--ui-icon-sm); }
2120
+ :where(ui-icon[size="md"]) { --ui-icon-size: var(--ui-icon-md); }
2121
+ :where(ui-icon[size="lg"]) { --ui-icon-size: var(--ui-icon-lg); }
2122
+ :where(ui-icon[size="xl"]) { --ui-icon-size: var(--ui-icon-xl); }
2123
+
2124
+ /* ── Forced Colors ── */
2125
+
2126
+ @media (forced-colors: active) {
2127
+ :where(ui-icon) {
2128
+ --ui-icon-color: ButtonText;
2129
+ }
2130
+ }
2131
+
2132
+ }
2133
+
2083
2134
  @layer ui {
2084
2135
 
2085
2136
  /* ── Accordion Container ── */
@@ -2556,7 +2607,8 @@
2556
2607
  display: inline-flex;
2557
2608
  flex-direction: column;
2558
2609
  gap: calc(var(--_space));
2559
- padding: calc(var(--_space) * 2);
2610
+ padding-block: calc(var(--_space) * 2);
2611
+ padding-inline: calc(var(--_space) * 2);
2560
2612
  border: 1px solid var(--_border-color);
2561
2613
  border-radius: var(--_radius);
2562
2614
  background: var(--_background);
@@ -2768,11 +2820,17 @@
2768
2820
  }
2769
2821
 
2770
2822
  :where(ui-calendar) :where([data-range-start]) {
2771
- border-radius: calc(var(--_radius) - var(--_space)) 0 0 calc(var(--_radius) - var(--_space));
2823
+ border-start-start-radius: calc(var(--_radius) - var(--_space));
2824
+ border-end-start-radius: calc(var(--_radius) - var(--_space));
2825
+ border-start-end-radius: 0;
2826
+ border-end-end-radius: 0;
2772
2827
  }
2773
2828
 
2774
2829
  :where(ui-calendar) :where([data-range-end]) {
2775
- border-radius: 0 calc(var(--_radius) - var(--_space)) calc(var(--_radius) - var(--_space)) 0;
2830
+ border-start-start-radius: 0;
2831
+ border-end-start-radius: 0;
2832
+ border-start-end-radius: calc(var(--_radius) - var(--_space));
2833
+ border-end-end-radius: calc(var(--_radius) - var(--_space));
2776
2834
  }
2777
2835
 
2778
2836
  :where(ui-calendar) :where([data-range-start][data-range-end]) {
@@ -3112,13 +3170,16 @@
3112
3170
 
3113
3171
  /* ── Active (pressed) ── */
3114
3172
 
3115
- :where(ui-checkbox)[pressed]::before {
3173
+ :where(ui-checkbox)[pressed]::before,
3174
+ :where(ui-checkbox)[force-active]::before {
3116
3175
  background: var(--_background-active, var(--_widget-active));
3117
3176
  border-color: var(--_border-color-active, var(--_border-active));
3118
3177
  }
3119
3178
 
3120
3179
  :where(ui-checkbox)[aria-checked="true"][pressed]::before,
3121
- :where(ui-checkbox)[aria-checked="mixed"][pressed]::before {
3180
+ :where(ui-checkbox)[aria-checked="mixed"][pressed]::before,
3181
+ :where(ui-checkbox)[aria-checked="true"][force-active]::before,
3182
+ :where(ui-checkbox)[aria-checked="mixed"][force-active]::before {
3122
3183
  background: var(--_surface-active);
3123
3184
  border-color: var(--_surface-active);
3124
3185
  }
@@ -3227,7 +3288,8 @@
3227
3288
  :where(ui-command-list) {
3228
3289
  overflow-y: auto;
3229
3290
  max-height: var(--ui-popover-max-height);
3230
- padding: var(--_space);
3291
+ padding-block: var(--_space);
3292
+ padding-inline: var(--_space);
3231
3293
  }
3232
3294
 
3233
3295
  /* ── Command Group ── */
@@ -3319,7 +3381,8 @@
3319
3381
  }
3320
3382
 
3321
3383
  :where(ui-dialog) > :where(dialog)::backdrop {
3322
- background: var(--ui-backdrop-color) / var(--ui-backdrop-opacity);
3384
+ background: var(--ui-backdrop-color);
3385
+ opacity: var(--ui-backdrop-opacity);
3323
3386
  }
3324
3387
 
3325
3388
  }
@@ -3359,7 +3422,8 @@
3359
3422
  /* WHY: Animate backdrop opacity on open for a smooth reveal. */
3360
3423
 
3361
3424
  :where(ui-drawer) > :where(dialog)::backdrop {
3362
- background: var(--ui-backdrop-color) / var(--ui-backdrop-opacity);
3425
+ background: var(--ui-backdrop-color);
3426
+ opacity: var(--ui-backdrop-opacity);
3363
3427
  animation: drawer-backdrop-in var(--_duration) ease-out;
3364
3428
  }
3365
3429
 
@@ -3821,7 +3885,8 @@
3821
3885
  min-width: 0;
3822
3886
  flex-direction: column;
3823
3887
  gap: 0;
3824
- padding: var(--_space);
3888
+ padding-block: var(--_space);
3889
+ padding-inline: var(--_space);
3825
3890
  border-radius: var(--_radius);
3826
3891
  border: 1px solid var(--_border-color, var(--_border-rest));
3827
3892
  background: var(--_background, var(--_control));
@@ -4001,10 +4066,6 @@
4001
4066
  color: var(--_ink-hover);
4002
4067
  }
4003
4068
 
4004
- :where(ui-nav-item)[active] {
4005
- color: var(--_ink-hover);
4006
- }
4007
-
4008
4069
  :where(ui-nav-item):active,
4009
4070
  :where(ui-nav-item)[force-active] {
4010
4071
  color: var(--_ink-active);
@@ -4232,7 +4293,8 @@
4232
4293
  position: fixed;
4233
4294
  position-area: inline-end span-block-end;
4234
4295
  position-try-fallbacks: --nav-flyout-flip-up;
4235
- margin: 0 0 0 var(--ui-popover-gap);
4296
+ margin: 0;
4297
+ margin-inline-start: var(--ui-popover-gap);
4236
4298
  min-width: 200px;
4237
4299
  max-height: var(--ui-popover-max-height);
4238
4300
  overflow-y: auto;
@@ -4463,12 +4525,14 @@
4463
4525
 
4464
4526
  /* ── Active (pressed) ── */
4465
4527
 
4466
- :where(ui-radio)[pressed]::before {
4528
+ :where(ui-radio)[pressed]::before,
4529
+ :where(ui-radio)[force-active]::before {
4467
4530
  background: var(--_background-active, var(--_widget-active));
4468
4531
  border-color: var(--_border-color-active, var(--_border-active));
4469
4532
  }
4470
4533
 
4471
- :where(ui-radio)[aria-checked="true"][pressed]::before {
4534
+ :where(ui-radio)[aria-checked="true"][pressed]::before,
4535
+ :where(ui-radio)[aria-checked="true"][force-active]::before {
4472
4536
  background: var(--_surface-active);
4473
4537
  border-color: var(--_surface-active);
4474
4538
  }
@@ -4618,11 +4682,13 @@
4618
4682
 
4619
4683
  /* ── Active (dragging) ── */
4620
4684
 
4621
- :where(ui-range)[pressed]::after {
4685
+ :where(ui-range)[pressed]::after,
4686
+ :where(ui-range)[force-active]::after {
4622
4687
  background: var(--_surface-active);
4623
4688
  }
4624
4689
 
4625
- :where(ui-range)[pressed] > :where(.ui-range-thumb) {
4690
+ :where(ui-range)[pressed] > :where(.ui-range-thumb),
4691
+ :where(ui-range)[force-active] > :where(.ui-range-thumb) {
4626
4692
  border-color: var(--_surface-active);
4627
4693
  box-shadow: var(--ui-shadow-sm), 0 0 0 6px var(--_surface);
4628
4694
  }
@@ -5208,12 +5274,14 @@
5208
5274
 
5209
5275
  /* ── Active (pressed) ── */
5210
5276
 
5211
- :where(ui-switch)[pressed]::before {
5277
+ :where(ui-switch)[pressed]::before,
5278
+ :where(ui-switch)[force-active]::before {
5212
5279
  background: var(--_track-bg-active);
5213
5280
  border-color: var(--_track-border-active);
5214
5281
  }
5215
5282
 
5216
- :where(ui-switch)[aria-checked="true"][pressed]::before {
5283
+ :where(ui-switch)[aria-checked="true"][pressed]::before,
5284
+ :where(ui-switch)[aria-checked="true"][force-active]::before {
5217
5285
  background: var(--_surface-active);
5218
5286
  border-color: var(--_surface-active);
5219
5287
  }
@@ -6010,22 +6078,22 @@
6010
6078
 
6011
6079
  :where(ui-tooltip[placement="top"]) {
6012
6080
  position-area: block-start;
6013
- margin-bottom: calc(var(--_space) * 2);
6081
+ margin-block-end: calc(var(--_space) * 2);
6014
6082
  }
6015
6083
 
6016
6084
  :where(ui-tooltip[placement="bottom"]) {
6017
6085
  position-area: block-end;
6018
- margin-top: calc(var(--_space) * 2);
6086
+ margin-block-start: calc(var(--_space) * 2);
6019
6087
  }
6020
6088
 
6021
6089
  :where(ui-tooltip[placement="left"]) {
6022
6090
  position-area: inline-start;
6023
- margin-right: calc(var(--_space) * 2);
6091
+ margin-inline-end: calc(var(--_space) * 2);
6024
6092
  }
6025
6093
 
6026
6094
  :where(ui-tooltip[placement="right"]) {
6027
6095
  position-area: inline-end;
6028
- margin-left: calc(var(--_space) * 2);
6096
+ margin-inline-start: calc(var(--_space) * 2);
6029
6097
  }
6030
6098
 
6031
6099
  /* ── Hidden (not :popover-open) ── */
@@ -6049,7 +6117,8 @@
6049
6117
  flex: 1 1 0%;
6050
6118
  min-width: 0;
6051
6119
  flex-direction: column;
6052
- padding: var(--_space);
6120
+ padding-block: var(--_space);
6121
+ padding-inline: var(--_space);
6053
6122
  font-size: var(--_font-size);
6054
6123
  line-height: var(--_line-height);
6055
6124
  }
@@ -6134,7 +6203,7 @@
6134
6203
 
6135
6204
  /* ── Disabled ── */
6136
6205
 
6137
- :where(ui-tree-item[disabled]) > :where([slot="label"]) {
6206
+ :where(ui-tree-item[aria-disabled="true"]) > :where([slot="label"]) {
6138
6207
  color: var(--_ink-disabled);
6139
6208
  cursor: not-allowed;
6140
6209
  pointer-events: none;
@@ -6844,11 +6913,11 @@
6844
6913
  /* WHY: When collapsed to icon rail, the sidebar edge meets content — drop left padding. */
6845
6914
 
6846
6915
  :where(ui-layout-sidebar)[collapsed] :where(ui-layout-canvas) {
6847
- padding-left: 0;
6916
+ padding-inline-start: 0;
6848
6917
  }
6849
6918
 
6850
6919
  :where(ui-layout-sidebar)[collapsed] :where(ui-layout-breadcrumb) {
6851
- padding-left: 0;
6920
+ padding-inline-start: 0;
6852
6921
  }
6853
6922
 
6854
6923
  /* ── Sidebar Header ── */
@@ -7020,7 +7089,8 @@
7020
7089
  position: fixed;
7021
7090
  position-area: inline-end span-block-end;
7022
7091
  position-try-fallbacks: --sidebar-item-flip-up;
7023
- margin: 0 0 0 var(--ui-popover-gap);
7092
+ margin: 0;
7093
+ margin-inline-start: var(--ui-popover-gap);
7024
7094
  min-width: 200px;
7025
7095
  max-height: var(--ui-popover-max-height);
7026
7096
  overflow-y: auto;
@@ -7278,57 +7348,6 @@
7278
7348
 
7279
7349
  }
7280
7350
 
7281
- @layer ui {
7282
-
7283
- /* ── Icon Base ── */
7284
-
7285
- :where(ui-icon) {
7286
- --ui-icon-size: var(--_icon-size);
7287
- --ui-icon-color: currentColor;
7288
-
7289
- box-sizing: border-box;
7290
- display: inline-flex;
7291
- align-items: center;
7292
- justify-content: center;
7293
- width: var(--ui-icon-size);
7294
- height: var(--ui-icon-size);
7295
- color: var(--ui-icon-color);
7296
- flex-shrink: 0;
7297
- vertical-align: middle;
7298
- line-height: 0;
7299
- }
7300
-
7301
- :where(ui-icon) > :where(svg) {
7302
- width: 100%;
7303
- height: 100%;
7304
- }
7305
-
7306
- /* WHY: Unregistered icons (no SVG content) should collapse to zero size
7307
- so surrounding buttons/slots don't render with phantom dimensions */
7308
- :where(ui-icon:empty) {
7309
- width: 0;
7310
- height: 0;
7311
- overflow: hidden;
7312
- }
7313
-
7314
- /* ── Icon Size Variants ── */
7315
-
7316
- :where(ui-icon[size="xs"]) { --ui-icon-size: var(--ui-icon-xs); }
7317
- :where(ui-icon[size="sm"]) { --ui-icon-size: var(--ui-icon-sm); }
7318
- :where(ui-icon[size="md"]) { --ui-icon-size: var(--ui-icon-md); }
7319
- :where(ui-icon[size="lg"]) { --ui-icon-size: var(--ui-icon-lg); }
7320
- :where(ui-icon[size="xl"]) { --ui-icon-size: var(--ui-icon-xl); }
7321
-
7322
- /* ── Forced Colors ── */
7323
-
7324
- @media (forced-colors: active) {
7325
- :where(ui-icon) {
7326
- --ui-icon-color: ButtonText;
7327
- }
7328
- }
7329
-
7330
- }
7331
-
7332
7351
  @layer ui {
7333
7352
 
7334
7353
  /* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━