@zeyos/zx 5.0.0 → 5.2.0

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 (154) hide show
  1. package/CHANGELOG.md +164 -0
  2. package/README.md +2 -1
  3. package/dist/types/components/account-menu/account-menu.d.ts +8 -0
  4. package/dist/types/components/activity-list/activity-list.d.ts +9 -1
  5. package/dist/types/components/app-icon/app-icon.d.ts +14 -2
  6. package/dist/types/components/app-sidebar/app-sidebar.d.ts +288 -14
  7. package/dist/types/components/calendar/calendar.d.ts +67 -5
  8. package/dist/types/components/card-view/card-view.d.ts +7 -4
  9. package/dist/types/components/card-view/record-card.d.ts +11 -0
  10. package/dist/types/components/context-menu/context-menu.d.ts +6 -2
  11. package/dist/types/components/data-filter/data-filter.d.ts +4 -4
  12. package/dist/types/components/dropdown/dropdown.d.ts +22 -7
  13. package/dist/types/components/field/field.d.ts +30 -0
  14. package/dist/types/components/fieldset/external-adapter.d.ts +83 -0
  15. package/dist/types/components/fieldset/fieldset.d.ts +7 -0
  16. package/dist/types/components/file-list/file-list.d.ts +35 -3
  17. package/dist/types/components/filter/filter.d.ts +127 -3
  18. package/dist/types/components/filter-panel/filter-panel.d.ts +36 -7
  19. package/dist/types/components/launcher/launcher.d.ts +8 -0
  20. package/dist/types/components/list-toolbar/list-toolbar.d.ts +15 -6
  21. package/dist/types/components/menu-button/menu-button.d.ts +6 -0
  22. package/dist/types/components/message/message.d.ts +14 -1
  23. package/dist/types/components/modal/modal.d.ts +30 -0
  24. package/dist/types/components/module-bar/module-bar.d.ts +395 -0
  25. package/dist/types/components/pagination/pagination.d.ts +17 -3
  26. package/dist/types/components/select/select.d.ts +6 -0
  27. package/dist/types/components/sheet/sheet.d.ts +15 -0
  28. package/dist/types/components/table/table.d.ts +265 -17
  29. package/dist/types/components/view/record-view.d.ts +59 -2
  30. package/dist/types/components/view-settings/view-settings.d.ts +879 -0
  31. package/dist/types/components/workspace-switcher/workspace-switcher.d.ts +327 -0
  32. package/dist/types/core/component.d.ts +12 -2
  33. package/dist/types/core/i18n.d.ts +27 -3
  34. package/dist/types/core/keyboard.d.ts +98 -1
  35. package/dist/types/core/messages.d.ts +382 -0
  36. package/dist/types/core/overlay-host.d.ts +28 -1
  37. package/dist/types/core/overlay-stack.d.ts +260 -0
  38. package/dist/types/index.d.ts +5 -2
  39. package/dist/types/internal/app-rail.d.ts +38 -0
  40. package/dist/types/internal/menu-items.d.ts +71 -3
  41. package/dist/types/zeyos/index.d.ts +1 -0
  42. package/dist/types/zeyos/launcher.d.ts +9 -0
  43. package/dist/types/zeyos/module-bar.d.ts +176 -0
  44. package/dist/types/zeyos/query.d.ts +31 -5
  45. package/dist/types/zeyos/table.d.ts +245 -8
  46. package/dist/types/zeyos/view.d.ts +16 -2
  47. package/dist/zx-zeyos.esm.js +4422 -430
  48. package/dist/zx-zeyos.esm.min.js +5 -5
  49. package/dist/zx.css +1417 -134
  50. package/dist/zx.esm.js +6986 -830
  51. package/dist/zx.esm.min.js +8 -8
  52. package/dist/zx.global.js +6986 -830
  53. package/dist/zx.global.min.js +8 -8
  54. package/dist/zx.min.css +1 -1
  55. package/docs/api.json +794 -17
  56. package/docs/llms.md +503 -63
  57. package/docs/llms.txt +6 -2
  58. package/package.json +1 -1
  59. package/src/components/account-menu/account-menu.js +12 -0
  60. package/src/components/activity-list/activity-list.js +27 -1
  61. package/src/components/app-icon/app-icon.css +13 -2
  62. package/src/components/app-icon/app-icon.js +11 -1
  63. package/src/components/app-rail/app-rail.css +19 -0
  64. package/src/components/app-sidebar/app-sidebar.css +204 -3
  65. package/src/components/app-sidebar/app-sidebar.js +646 -40
  66. package/src/components/breadcrumb/breadcrumb.css +1 -1
  67. package/src/components/calendar/calendar.css +1 -1
  68. package/src/components/calendar/calendar.js +26 -52
  69. package/src/components/card/card.css +2 -2
  70. package/src/components/card-view/card-view.css +5 -5
  71. package/src/components/card-view/card-view.js +13 -9
  72. package/src/components/card-view/record-card.js +14 -3
  73. package/src/components/code-editor/code-editor.css +1 -1
  74. package/src/components/code-editor/field-adapter.js +9 -2
  75. package/src/components/context-menu/context-menu.js +8 -2
  76. package/src/components/copy/copy-input.css +1 -1
  77. package/src/components/data-filter/data-filter.js +2 -2
  78. package/src/components/date-picker/time-picker.css +2 -2
  79. package/src/components/dock/dock.css +5 -4
  80. package/src/components/dropdown/dropdown.js +157 -72
  81. package/src/components/field/field.js +33 -3
  82. package/src/components/fieldset/external-adapter.js +363 -0
  83. package/src/components/fieldset/fieldset.js +10 -59
  84. package/src/components/file-list/file-list.js +144 -21
  85. package/src/components/filter/filter.css +86 -2
  86. package/src/components/filter/filter.js +300 -8
  87. package/src/components/filter-panel/filter-panel.js +149 -32
  88. package/src/components/finder/finder.css +1 -1
  89. package/src/components/kanban-view/kanban-view.css +3 -3
  90. package/src/components/kanban-view/kanban-view.js +5 -2
  91. package/src/components/launcher/launcher.css +1 -1
  92. package/src/components/launcher/launcher.js +29 -3
  93. package/src/components/list-toolbar/list-toolbar.js +39 -13
  94. package/src/components/master-panel/master-panel.js +0 -1
  95. package/src/components/menu-button/menu-button.css +63 -0
  96. package/src/components/menu-button/menu-button.js +97 -11
  97. package/src/components/message/message.js +60 -20
  98. package/src/components/modal/modal.css +1 -1
  99. package/src/components/modal/modal.js +66 -13
  100. package/src/components/module-bar/module-bar.css +486 -0
  101. package/src/components/module-bar/module-bar.js +1074 -0
  102. package/src/components/multi-value-editor/multi-value-editor.css +1 -1
  103. package/src/components/number-field/field-adapter.js +2 -1
  104. package/src/components/pagination/pagination.css +5 -5
  105. package/src/components/pagination/pagination.js +20 -4
  106. package/src/components/panel/panel.css +3 -2
  107. package/src/components/questionnaire/questionnaire.css +4 -4
  108. package/src/components/rating/field-adapter.js +2 -1
  109. package/src/components/rating/rating.css +1 -1
  110. package/src/components/search/search.css +4 -1
  111. package/src/components/select/select.js +9 -0
  112. package/src/components/sheet/sheet.css +1 -1
  113. package/src/components/sheet/sheet.js +74 -32
  114. package/src/components/slider/field-adapter.js +6 -1
  115. package/src/components/slider/slider.css +2 -2
  116. package/src/components/split-view/split-view.css +1 -1
  117. package/src/components/stat-tile/stat-tile.css +1 -1
  118. package/src/components/stepper/stepper.css +1 -1
  119. package/src/components/tabbox/tabbox.css +9 -5
  120. package/src/components/table/table.css +86 -11
  121. package/src/components/table/table.js +628 -57
  122. package/src/components/tag-picker/field-adapter.js +2 -1
  123. package/src/components/tooltip/tooltip.js +35 -17
  124. package/src/components/tree/tree.css +1 -1
  125. package/src/components/view/record-view.css +1 -1
  126. package/src/components/view/record-view.js +178 -18
  127. package/src/components/view-settings/view-settings.css +285 -0
  128. package/src/components/view-settings/view-settings.js +1830 -0
  129. package/src/components/workspace-switcher/workspace-switcher.css +188 -0
  130. package/src/components/workspace-switcher/workspace-switcher.js +463 -0
  131. package/src/core/component.js +88 -17
  132. package/src/core/fontawesome.js +5 -1
  133. package/src/core/i18n.js +47 -4
  134. package/src/core/icons.js +12 -2
  135. package/src/core/keyboard.js +206 -11
  136. package/src/core/messages.js +427 -0
  137. package/src/core/overlay-host.js +64 -9
  138. package/src/core/overlay-stack.js +487 -0
  139. package/src/core/position.js +22 -3
  140. package/src/index.js +5 -2
  141. package/src/internal/app-rail.js +134 -53
  142. package/src/internal/menu-items.js +61 -3
  143. package/src/zeyos/form.js +5 -3
  144. package/src/zeyos/index.js +3 -0
  145. package/src/zeyos/launcher.js +8 -3
  146. package/src/zeyos/module-bar.js +181 -0
  147. package/src/zeyos/query.js +44 -13
  148. package/src/zeyos/table.js +220 -80
  149. package/src/zeyos/view.js +43 -93
  150. package/styles/base.css +16 -1
  151. package/styles/print.css +1 -1
  152. package/styles/tokens/dark.css +4 -0
  153. package/styles/tokens/semantic.css +56 -28
  154. package/styles/zx.css +3 -0
package/dist/zx.css CHANGED
@@ -175,6 +175,30 @@
175
175
  }
176
176
 
177
177
  /* styles/tokens/semantic.css */
178
+ :root {
179
+ --zx-control-height: 30px;
180
+ --zx-control-pad-x: 10px;
181
+ --zx-control-radius: var(--zx-radius-lg);
182
+ --zx-control-font-size: var(--zx-text-md);
183
+ --zx-control-font-weight: 500;
184
+ --zx-overlay-blur: 8px;
185
+ --zx-app-icon-core-strength: 52%;
186
+ --zx-app-icon-rim-strength: 58%;
187
+ --zx-app-icon-bloom-strength: 64%;
188
+ --zx-app-icon-specular-strength: 72%;
189
+ --zx-app-icon-halo-size: 14px;
190
+ --zx-app-icon-halo-strength: 22%;
191
+ --zx-overlay-specular-strength: 48%;
192
+ --zx-glass-blur: 8px;
193
+ --zx-glass-saturation: 130%;
194
+ --zx-glass-color-strength: 82%;
195
+ --zx-glass-filter-icon: blur(4px) saturate(118%);
196
+ --zx-glass-filter-control: blur(6px) saturate(116%);
197
+ --zx-glass-filter-raised: blur(8px) saturate(120%);
198
+ --zx-glass-filter-chrome: blur(10px) saturate(122%);
199
+ --zx-glass-filter-overlay: blur(16px) saturate(140%);
200
+ --zx-glass-filter-panel: blur(14px) saturate(132%);
201
+ }
178
202
  :root,
179
203
  [data-zx-theme=light] {
180
204
  color-scheme: light;
@@ -230,34 +254,22 @@
230
254
  --zx-color-chart-6: var(--zx-tone-green-500);
231
255
  --zx-color-chart-7: var(--zx-tone-violet-500);
232
256
  --zx-color-chart-8: var(--zx-tone-red-500);
233
- --zx-control-height: 30px;
234
- --zx-control-pad-x: 10px;
235
- --zx-control-radius: var(--zx-radius-lg);
236
- --zx-control-font-size: var(--zx-text-md);
237
- --zx-control-font-weight: 500;
257
+ --zx-color-tone-blue-solid: var(--zx-tone-blue-500);
258
+ --zx-color-tone-teal-solid: var(--zx-tone-teal-500);
259
+ --zx-color-tone-green-solid: var(--zx-tone-green-500);
260
+ --zx-color-tone-amber-solid: var(--zx-tone-amber-500);
261
+ --zx-color-tone-orange-solid: var(--zx-tone-orange-500);
262
+ --zx-color-tone-red-solid: var(--zx-tone-red-500);
263
+ --zx-color-tone-pink-solid: var(--zx-tone-pink-500);
264
+ --zx-color-tone-violet-solid: var(--zx-tone-violet-500);
265
+ --zx-color-tone-slate-solid: var(--zx-tone-slate-500);
266
+ --zx-surface-shadow: var(--zx-shadow-1);
238
267
  --zx-overlay-shadow: var(--zx-shadow-3);
239
268
  --zx-drag-shadow: 0 2px 4px -1px color-mix(in srgb, var(--zx-gray-950) 10%, transparent), 0 12px 28px -6px color-mix(in srgb, var(--zx-gray-950) 22%, transparent);
240
- --zx-overlay-blur: 8px;
241
269
  --zx-color-glass-border: color-mix(in srgb, var(--zx-gray-0) 24%, transparent);
242
270
  --zx-color-glass-highlight: color-mix(in srgb, var(--zx-gray-0) 24%, transparent);
243
271
  --zx-color-glass-highlight-strong: color-mix(in srgb, var(--zx-gray-0) 38%, transparent);
244
- --zx-app-icon-core-strength: 52%;
245
- --zx-app-icon-rim-strength: 58%;
246
- --zx-app-icon-bloom-strength: 64%;
247
- --zx-app-icon-specular-strength: 72%;
248
- --zx-app-icon-halo-size: 14px;
249
- --zx-app-icon-halo-strength: 22%;
250
272
  --zx-color-overlay-backdrop: color-mix(in srgb, var(--zx-gray-950) 28%, transparent);
251
- --zx-overlay-specular-strength: 48%;
252
- --zx-glass-blur: 8px;
253
- --zx-glass-saturation: 130%;
254
- --zx-glass-color-strength: 82%;
255
- --zx-glass-filter-icon: blur(4px) saturate(118%);
256
- --zx-glass-filter-control: blur(6px) saturate(116%);
257
- --zx-glass-filter-raised: blur(8px) saturate(120%);
258
- --zx-glass-filter-chrome: blur(10px) saturate(122%);
259
- --zx-glass-filter-overlay: blur(16px) saturate(140%);
260
- --zx-glass-filter-panel: blur(14px) saturate(132%);
261
273
  --zx-glass-control-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 18%, transparent), var(--zx-shadow-1);
262
274
  --zx-glass-chrome-shadow: inset 0 1px 0 color-mix(in srgb, var(--zx-gray-0) 16%, transparent), var(--zx-shadow-1);
263
275
  --zx-header-bg: var(--zx-gray-900);
@@ -484,6 +496,7 @@
484
496
  --zx-color-tone-slate-fg: var(--zx-tone-slate-300);
485
497
  --zx-color-ring: var(--zx-color-accent);
486
498
  --zx-focus-ring: 0 0 0 3px color-mix(in srgb, var(--zx-color-ring) 45%, transparent);
499
+ --zx-surface-shadow: var(--zx-shadow-1);
487
500
  --zx-overlay-shadow: 0 12px 36px rgb(0 0 0 / 45%);
488
501
  --zx-drag-shadow:
489
502
  0 0 0 1px color-mix(in srgb, var(--zx-gray-0) 7%, transparent),
@@ -553,6 +566,7 @@
553
566
  --zx-color-tone-slate-fg: var(--zx-tone-slate-300);
554
567
  --zx-color-ring: var(--zx-color-accent);
555
568
  --zx-focus-ring: 0 0 0 3px color-mix(in srgb, var(--zx-color-ring) 45%, transparent);
569
+ --zx-surface-shadow: var(--zx-shadow-1);
556
570
  --zx-overlay-shadow: 0 12px 36px rgb(0 0 0 / 45%);
557
571
  --zx-drag-shadow:
558
572
  0 0 0 1px color-mix(in srgb, var(--zx-gray-0) 7%, transparent),
@@ -692,6 +706,11 @@
692
706
  outline-offset: 2px;
693
707
  box-shadow: var(--zx-focus-ring);
694
708
  }
709
+ @media (forced-colors: active) {
710
+ .zx-scope :focus-visible {
711
+ outline: 2px solid Highlight !important;
712
+ }
713
+ }
695
714
  .zx-scope ::selection {
696
715
  background: var(--zx-color-accent);
697
716
  color: var(--zx-color-on-accent);
@@ -753,7 +772,8 @@
753
772
  color: var(--zx-color-text);
754
773
  }
755
774
  .zx-scope .zx-icon-btn:focus-visible {
756
- outline: 0;
775
+ outline-color: transparent;
776
+ outline-offset: -2px;
757
777
  box-shadow: inset var(--zx-focus-ring);
758
778
  }
759
779
  .zx-scope .zx-icon-btn:disabled {
@@ -1689,7 +1709,7 @@ svg.zx-icon {
1689
1709
  text-overflow: ellipsis;
1690
1710
  }
1691
1711
  .zx-copy-input__field:focus-visible {
1692
- outline: 0;
1712
+ outline-color: transparent;
1693
1713
  box-shadow: none;
1694
1714
  }
1695
1715
  .zx-copy-input[data-size=sm] .zx-copy-input__field {
@@ -1738,7 +1758,7 @@ svg.zx-icon {
1738
1758
  padding: var(--zx-space-3);
1739
1759
  border: 0;
1740
1760
  border-radius: 0;
1741
- outline: 0;
1761
+ outline-color: transparent;
1742
1762
  background: transparent;
1743
1763
  box-shadow: none;
1744
1764
  color: var(--zx-color-text);
@@ -1972,7 +1992,7 @@ svg.zx-icon {
1972
1992
  background: var(--zx-color-bg-hover);
1973
1993
  }
1974
1994
  .zx-card:has(.zx-card__primary:focus-visible) {
1975
- outline: 0;
1995
+ outline-color: transparent;
1976
1996
  box-shadow: var(--zx-focus-ring);
1977
1997
  }
1978
1998
  .zx-card__layout,
@@ -2037,7 +2057,7 @@ svg.zx-icon {
2037
2057
  z-index: 1;
2038
2058
  }
2039
2059
  .zx-card__primary:focus-visible {
2040
- outline: 0;
2060
+ outline-color: transparent;
2041
2061
  }
2042
2062
  .zx-card__actions,
2043
2063
  .zx-card__content :is(a, button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"])),
@@ -2294,7 +2314,7 @@ svg.zx-icon {
2294
2314
  border: 1px solid var(--zx-color-border);
2295
2315
  border-radius: var(--zx-radius-lg);
2296
2316
  background: var(--zx-color-bg-surface);
2297
- box-shadow: var(--zx-shadow-1);
2317
+ box-shadow: var(--zx-surface-shadow);
2298
2318
  }
2299
2319
  .zx-panel__header {
2300
2320
  display: flex;
@@ -2331,7 +2351,8 @@ button.zx-panel__toggle:hover {
2331
2351
  background: var(--zx-color-bg-hover);
2332
2352
  }
2333
2353
  button.zx-panel__toggle:focus-visible {
2334
- outline: 0;
2354
+ outline-color: transparent;
2355
+ outline-offset: -2px;
2335
2356
  box-shadow: inset var(--zx-focus-ring);
2336
2357
  }
2337
2358
  .zx-panel__title {
@@ -2524,7 +2545,8 @@ button.zx-panel__toggle:focus-visible {
2524
2545
  }
2525
2546
  .zx-tabbox[data-variant=divided] .zx-tabbox__tab:focus-visible {
2526
2547
  z-index: 1;
2527
- outline: 0;
2548
+ outline-color: transparent;
2549
+ outline-offset: -2px;
2528
2550
  box-shadow: inset var(--zx-focus-ring);
2529
2551
  }
2530
2552
  .zx-tabbox[data-variant=bracket] .zx-tabbox__tablist {
@@ -2557,7 +2579,8 @@ button.zx-panel__toggle:focus-visible {
2557
2579
  }
2558
2580
  .zx-tabbox[data-variant=bracket] .zx-tabbox__tab:focus-visible {
2559
2581
  z-index: 1;
2560
- outline: 0;
2582
+ outline-color: transparent;
2583
+ outline-offset: -2px;
2561
2584
  box-shadow: inset var(--zx-focus-ring);
2562
2585
  }
2563
2586
  .zx-tabbox[data-variant=line] .zx-tabbox__tablist {
@@ -2576,7 +2599,8 @@ button.zx-panel__toggle:focus-visible {
2576
2599
  }
2577
2600
  .zx-tabbox[data-variant=line] .zx-tabbox__tab:focus-visible {
2578
2601
  z-index: 1;
2579
- outline: 0;
2602
+ outline-color: transparent;
2603
+ outline-offset: -2px;
2580
2604
  box-shadow: inset var(--zx-focus-ring);
2581
2605
  }
2582
2606
  .zx-tabbox[data-variant=segmented] .zx-tabbox__tablist {
@@ -2603,7 +2627,7 @@ button.zx-panel__toggle:focus-visible {
2603
2627
  }
2604
2628
  .zx-tabbox[data-variant=segmented] .zx-tabbox__tab:focus-visible {
2605
2629
  z-index: 1;
2606
- outline: 0;
2630
+ outline-color: transparent;
2607
2631
  box-shadow: var(--zx-focus-ring);
2608
2632
  }
2609
2633
  @media (prefers-reduced-motion: no-preference) {
@@ -2654,7 +2678,8 @@ button.zx-panel__toggle:focus-visible {
2654
2678
  padding: var(--zx-space-4);
2655
2679
  }
2656
2680
  .zx-tabbox__panel:focus-visible {
2657
- outline: 0;
2681
+ outline-color: transparent;
2682
+ outline-offset: -2px;
2658
2683
  box-shadow: inset var(--zx-focus-ring);
2659
2684
  }
2660
2685
 
@@ -2837,6 +2862,7 @@ button.zx-panel__toggle:focus-visible {
2837
2862
  box-shadow: var(--zx-focus-ring);
2838
2863
  }
2839
2864
  .zx-search__input {
2865
+ flex: 1 1 auto;
2840
2866
  min-inline-size: 12rem;
2841
2867
  min-block-size: 0;
2842
2868
  border: 0;
@@ -2912,6 +2938,33 @@ button.zx-panel__toggle:focus-visible {
2912
2938
  .zx-app-icon[data-shape=circle] {
2913
2939
  border-radius: var(--zx-radius-full);
2914
2940
  }
2941
+ .zx-app-icon[data-tone=blue] {
2942
+ --zx-app-icon-color: var(--zx-color-tone-blue-solid);
2943
+ }
2944
+ .zx-app-icon[data-tone=teal] {
2945
+ --zx-app-icon-color: var(--zx-color-tone-teal-solid);
2946
+ }
2947
+ .zx-app-icon[data-tone=green] {
2948
+ --zx-app-icon-color: var(--zx-color-tone-green-solid);
2949
+ }
2950
+ .zx-app-icon[data-tone=amber] {
2951
+ --zx-app-icon-color: var(--zx-color-tone-amber-solid);
2952
+ }
2953
+ .zx-app-icon[data-tone=orange] {
2954
+ --zx-app-icon-color: var(--zx-color-tone-orange-solid);
2955
+ }
2956
+ .zx-app-icon[data-tone=red] {
2957
+ --zx-app-icon-color: var(--zx-color-tone-red-solid);
2958
+ }
2959
+ .zx-app-icon[data-tone=pink] {
2960
+ --zx-app-icon-color: var(--zx-color-tone-pink-solid);
2961
+ }
2962
+ .zx-app-icon[data-tone=violet] {
2963
+ --zx-app-icon-color: var(--zx-color-tone-violet-solid);
2964
+ }
2965
+ .zx-app-icon[data-tone=slate] {
2966
+ --zx-app-icon-color: var(--zx-color-tone-slate-solid);
2967
+ }
2915
2968
  .zx-app-icon__surface {
2916
2969
  position: absolute;
2917
2970
  z-index: 0;
@@ -2950,7 +3003,7 @@ button.zx-panel__toggle:focus-visible {
2950
3003
  display: none;
2951
3004
  }
2952
3005
  .zx-app-icon[data-selected] .zx-app-icon__surface {
2953
- outline: none;
3006
+ outline-color: transparent;
2954
3007
  box-shadow:
2955
3008
  0 0 0 1px var(--zx-color-bg-page),
2956
3009
  0 0 0 3px var(--zx-app-icon-selected-ring),
@@ -3051,7 +3104,7 @@ button.zx-panel__toggle:focus-visible {
3051
3104
  }
3052
3105
  .zx-app-icon:is(a, button, [role=button]):not(:disabled):not([aria-disabled=true]):focus-visible .zx-app-icon__surface,
3053
3106
  :is(a, button, [role=button]):not(:disabled):not([aria-disabled=true]):focus-visible .zx-app-icon__surface {
3054
- outline: none;
3107
+ outline-color: transparent;
3055
3108
  box-shadow:
3056
3109
  var(--zx-focus-ring),
3057
3110
  var(--zx-app-icon-shadow-hover),
@@ -3173,7 +3226,7 @@ button.zx-panel__toggle:focus-visible {
3173
3226
  flex: 1 1 0;
3174
3227
  min-inline-size: 0;
3175
3228
  border: 0;
3176
- outline: 0;
3229
+ outline-color: transparent;
3177
3230
  background: transparent;
3178
3231
  color: inherit;
3179
3232
  font-size: var(--zx-text-lg);
@@ -4055,6 +4108,153 @@ button.zx-panel__toggle:focus-visible {
4055
4108
  font-size: var(--zx-text-xs);
4056
4109
  }
4057
4110
 
4111
+ /* src/components/workspace-switcher/workspace-switcher.css */
4112
+ .zx-workspace-switcher {
4113
+ --zx-workspace-switcher-tile: calc(var(--zx-control-height) - var(--zx-space-1));
4114
+ display: block;
4115
+ box-sizing: border-box;
4116
+ inline-size: 100%;
4117
+ min-inline-size: 0;
4118
+ }
4119
+ .zx-workspace-switcher .zx-workspace-switcher__trigger {
4120
+ display: grid;
4121
+ grid-template-columns: auto minmax(0, 1fr) auto;
4122
+ align-items: center;
4123
+ justify-content: stretch;
4124
+ gap: var(--zx-space-2);
4125
+ box-sizing: border-box;
4126
+ inline-size: 100%;
4127
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
4128
+ border: 0;
4129
+ border-radius: var(--zx-radius-md);
4130
+ background: transparent;
4131
+ -webkit-backdrop-filter: none;
4132
+ backdrop-filter: none;
4133
+ box-shadow: none;
4134
+ padding-block: var(--zx-space-1);
4135
+ padding-inline: var(--zx-space-1) var(--zx-space-2);
4136
+ color: var(--zx-color-text);
4137
+ font-weight: var(--zx-weight-medium);
4138
+ line-height: 1.3;
4139
+ text-align: start;
4140
+ }
4141
+ .zx-workspace-switcher .zx-workspace-switcher__trigger:is(:hover, [aria-expanded=true]):not(:disabled) {
4142
+ background: var(--zx-color-bg-hover);
4143
+ }
4144
+ .zx-workspace-switcher .zx-workspace-switcher__trigger:active:not(:disabled) {
4145
+ background: var(--zx-color-bg-current);
4146
+ }
4147
+ .zx-workspace-switcher .zx-workspace-switcher__trigger:focus-visible {
4148
+ outline-color: transparent;
4149
+ box-shadow: var(--zx-focus-ring);
4150
+ }
4151
+ .zx-workspace-switcher__tile {
4152
+ display: inline-grid;
4153
+ place-items: center;
4154
+ inline-size: var(--zx-workspace-switcher-tile);
4155
+ block-size: var(--zx-workspace-switcher-tile);
4156
+ }
4157
+ .zx-workspace-switcher__tile[hidden] {
4158
+ display: none;
4159
+ }
4160
+ .zx-workspace-switcher__text {
4161
+ display: grid;
4162
+ min-inline-size: 0;
4163
+ gap: 1px;
4164
+ }
4165
+ .zx-workspace-switcher__name,
4166
+ .zx-workspace-switcher__secondary {
4167
+ overflow: hidden;
4168
+ text-overflow: ellipsis;
4169
+ white-space: nowrap;
4170
+ }
4171
+ .zx-workspace-switcher__name {
4172
+ font-size: var(--zx-text-md);
4173
+ font-weight: var(--zx-weight-semibold);
4174
+ }
4175
+ .zx-workspace-switcher__secondary {
4176
+ color: var(--zx-color-text-muted);
4177
+ font-size: var(--zx-text-xs);
4178
+ font-weight: 400;
4179
+ }
4180
+ .zx-workspace-switcher__secondary[hidden] {
4181
+ display: none;
4182
+ }
4183
+ .zx-workspace-switcher__chevron {
4184
+ display: inline-flex;
4185
+ color: var(--zx-color-text-subtle);
4186
+ }
4187
+ @media (prefers-reduced-motion: no-preference) {
4188
+ .zx-workspace-switcher .zx-workspace-switcher__trigger {
4189
+ transition: background-color var(--zx-dur-fast) var(--zx-ease);
4190
+ }
4191
+ .zx-workspace-switcher__chevron {
4192
+ transition: transform var(--zx-dur-fast) var(--zx-ease);
4193
+ }
4194
+ }
4195
+ .zx-workspace-switcher__trigger[aria-expanded=true] .zx-workspace-switcher__chevron {
4196
+ transform: rotate(180deg);
4197
+ }
4198
+ .zx-workspace-switcher[data-compact=true] {
4199
+ inline-size: fit-content;
4200
+ }
4201
+ .zx-workspace-switcher[data-compact=true] .zx-workspace-switcher__trigger {
4202
+ display: inline-grid;
4203
+ grid-template-columns: auto;
4204
+ place-content: center;
4205
+ inline-size: calc(var(--zx-control-height) + var(--zx-space-2));
4206
+ block-size: calc(var(--zx-control-height) + var(--zx-space-2));
4207
+ padding: 0;
4208
+ }
4209
+ .zx-workspace-switcher[data-compact=true] .zx-workspace-switcher__text,
4210
+ .zx-workspace-switcher[data-compact=true] .zx-workspace-switcher__chevron {
4211
+ display: none;
4212
+ }
4213
+ .zx-workspace-switcher__image {
4214
+ display: block;
4215
+ overflow: hidden;
4216
+ inline-size: var(--zx-workspace-switcher-tile);
4217
+ block-size: var(--zx-workspace-switcher-tile);
4218
+ border-radius: var(--zx-radius-sm);
4219
+ background: var(--zx-color-bg-muted);
4220
+ }
4221
+ .zx-workspace-switcher__image > img {
4222
+ display: block;
4223
+ inline-size: 100%;
4224
+ block-size: 100%;
4225
+ object-fit: cover;
4226
+ }
4227
+ .zx-workspace-switcher__initials {
4228
+ font-weight: var(--zx-weight-semibold);
4229
+ line-height: 1;
4230
+ letter-spacing: 0;
4231
+ }
4232
+ .zx-workspace-switcher__menu {
4233
+ --zx-workspace-switcher-tile: calc(var(--zx-control-height) - var(--zx-space-2));
4234
+ min-inline-size: 240px;
4235
+ }
4236
+ .zx-workspace-switcher__menu .zx-menu-button__leading {
4237
+ inline-size: var(--zx-workspace-switcher-tile);
4238
+ }
4239
+ .zx-workspace-switcher__menu .zx-workspace-switcher__option[aria-checked=true] {
4240
+ background: var(--zx-color-bg-current);
4241
+ }
4242
+ .zx-workspace-switcher__menu .zx-workspace-switcher__option[aria-checked=true]:is(:hover, :focus-visible) {
4243
+ background: var(--zx-color-overlay-hover);
4244
+ }
4245
+ .zx-workspace-switcher__check {
4246
+ display: inline-flex;
4247
+ color: var(--zx-color-accent);
4248
+ }
4249
+ .zx-workspace-switcher__option[aria-checked=false] .zx-workspace-switcher__check {
4250
+ visibility: hidden;
4251
+ }
4252
+ @media (forced-colors: active) {
4253
+ .zx-workspace-switcher .zx-workspace-switcher__trigger:focus-visible {
4254
+ outline: 2px solid Highlight;
4255
+ }
4256
+ }
4257
+
4058
4258
  /* src/components/app-rail/app-rail.css */
4059
4259
  .zx-app-rail {
4060
4260
  display: flex;
@@ -4106,6 +4306,21 @@ button.zx-panel__toggle:focus-visible {
4106
4306
  .zx-app-rail__row {
4107
4307
  display: flex;
4108
4308
  }
4309
+ .zx-app-rail__separator {
4310
+ flex: none;
4311
+ align-self: center;
4312
+ background: var(--zx-color-border-subtle);
4313
+ }
4314
+ .zx-app-rail[data-orientation=vertical] .zx-app-rail__separator {
4315
+ inline-size: var(--zx-space-4);
4316
+ block-size: 1px;
4317
+ margin-block: var(--zx-space-1);
4318
+ }
4319
+ .zx-app-rail[data-orientation=horizontal] .zx-app-rail__separator {
4320
+ inline-size: 1px;
4321
+ block-size: var(--zx-space-4);
4322
+ margin-inline: var(--zx-space-1);
4323
+ }
4109
4324
  .zx-app-rail__item {
4110
4325
  position: relative;
4111
4326
  display: inline-grid;
@@ -4188,6 +4403,13 @@ button.zx-panel__toggle:focus-visible {
4188
4403
  font-weight: var(--zx-weight-semibold);
4189
4404
  line-height: 1.3;
4190
4405
  }
4406
+ .zx-app-rail__flyout-section {
4407
+ padding: var(--zx-space-2) var(--zx-app-rail-pad-x) var(--zx-space-1);
4408
+ color: var(--zx-color-text-muted);
4409
+ font-size: var(--zx-text-xs);
4410
+ font-weight: var(--zx-weight-semibold);
4411
+ line-height: 1.3;
4412
+ }
4191
4413
  .zx-app-rail__flyout-list {
4192
4414
  display: grid;
4193
4415
  gap: var(--zx-app-rail-row-gap);
@@ -4323,75 +4545,548 @@ button.zx-panel__toggle:focus-visible {
4323
4545
  }
4324
4546
  }
4325
4547
 
4326
- /* src/components/app-sidebar/app-sidebar.css */
4327
- .zx-app-sidebar {
4328
- --zx-app-sidebar-gutter: var(--zx-space-2);
4329
- --zx-app-sidebar-icon: var(--zx-space-6);
4330
- --zx-app-sidebar-item-gap: var(--zx-space-2);
4331
- --zx-app-sidebar-item-height: var(--zx-control-height);
4332
- --zx-app-sidebar-pad-x: var(--zx-space-2);
4333
- --zx-app-sidebar-row-gap: 2px;
4334
- --zx-app-sidebar-group-gap: var(--zx-space-3);
4335
- --zx-app-sidebar-indent: var(--zx-space-3);
4336
- --zx-app-sidebar-icon-indent: var(--zx-space-4);
4337
- --zx-app-sidebar-radius: var(--zx-radius-md);
4338
- --zx-app-sidebar-hover: var(--zx-color-bg-hover);
4339
- --zx-app-sidebar-current: var(--zx-color-bg-current);
4340
- --zx-app-sidebar-press: color-mix(in srgb, var(--zx-color-text) 12%, transparent);
4548
+ /* src/components/module-bar/module-bar.css */
4549
+ .zx-module-bar {
4550
+ --zx-module-bar-target: calc(var(--zx-control-height) + var(--zx-space-2));
4551
+ --zx-module-bar-tile: calc(var(--zx-control-height) - var(--zx-space-1));
4552
+ --zx-module-bar-gap: var(--zx-space-1);
4553
+ --zx-module-bar-pad: var(--zx-space-2);
4554
+ --zx-module-bar-radius: var(--zx-radius-lg);
4555
+ --zx-module-bar-column: 12rem;
4341
4556
  display: flex;
4557
+ box-sizing: border-box;
4558
+ min-inline-size: 0;
4342
4559
  min-block-size: 0;
4343
- border: 1px solid var(--zx-color-glass-border);
4344
- background: var(--zx-color-glass-chrome);
4345
- box-shadow: var(--zx-glass-chrome-shadow);
4560
+ background: var(--zx-color-bg-chrome);
4346
4561
  color: var(--zx-color-text);
4347
4562
  }
4348
- .zx-app-sidebar[data-orientation=horizontal] {
4349
- inline-size: 100%;
4563
+ .zx-module-bar[data-orientation=vertical] {
4564
+ flex-direction: column;
4565
+ inline-size: calc(var(--zx-module-bar-target) + 2 * var(--zx-module-bar-pad));
4566
+ block-size: 100%;
4350
4567
  }
4351
- .zx-app-sidebar[data-orientation=horizontal] > .zx-app-sidebar__rail {
4352
- inline-size: 100%;
4568
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] {
4569
+ inline-size: var(--zx-module-bar-column);
4353
4570
  }
4354
- .zx-app-sidebar__rail.zx-app-rail {
4355
- border: 0;
4571
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] > .zx-module-bar__list {
4572
+ align-items: stretch;
4356
4573
  }
4357
- .zx-app-sidebar__expanded {
4358
- display: grid;
4359
- grid-template-rows: auto minmax(0, 1fr) auto;
4360
- inline-size: min(280px, 100vw);
4361
- min-block-size: 0;
4574
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] > .zx-module-bar__header {
4575
+ align-items: stretch;
4362
4576
  }
4363
- .zx-app-sidebar__expanded[hidden],
4364
- .zx-app-sidebar__rail[hidden] {
4365
- display: none;
4577
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] > .zx-module-bar__footer {
4578
+ align-items: stretch;
4366
4579
  }
4367
- .zx-app-sidebar__header {
4368
- display: grid;
4369
- grid-template-columns: minmax(0, 1fr) auto;
4580
+ .zx-module-bar[data-labels=beside] .zx-module-bar__item {
4581
+ grid-template-columns: var(--zx-module-bar-tile) minmax(0, 1fr) auto;
4582
+ place-content: normal;
4370
4583
  align-items: center;
4371
- gap: var(--zx-space-2);
4372
- min-block-size: calc(var(--zx-control-height) + var(--zx-space-4));
4373
- padding: var(--zx-space-2) var(--zx-space-3);
4584
+ justify-items: start;
4585
+ column-gap: var(--zx-space-2);
4586
+ inline-size: 100%;
4587
+ block-size: auto;
4588
+ min-block-size: var(--zx-module-bar-target);
4589
+ padding: var(--zx-space-1) var(--zx-space-2);
4590
+ color: var(--zx-color-text);
4591
+ font-size: var(--zx-text-md);
4592
+ font-weight: 500;
4593
+ line-height: 1.3;
4594
+ text-align: start;
4374
4595
  }
4375
- .zx-app-sidebar__header-content {
4376
- min-inline-size: 0;
4596
+ .zx-module-bar[data-labels=beside] .zx-module-bar__label {
4597
+ text-align: start;
4377
4598
  }
4378
- .zx-app-sidebar .zx-app-sidebar__collapse[hidden] {
4379
- display: none;
4599
+ .zx-module-bar[data-labels=beside] .zx-module-bar__badge {
4600
+ position: static;
4601
+ justify-self: end;
4602
+ box-shadow: none;
4380
4603
  }
4381
- .zx-app-sidebar__nav {
4382
- min-block-size: 0;
4383
- overflow: auto;
4384
- padding: var(--zx-space-2) var(--zx-app-sidebar-gutter) var(--zx-space-3);
4604
+ .zx-module-bar[data-orientation=vertical][data-labels=below] {
4605
+ --zx-module-bar-target: calc(var(--zx-control-height) + var(--zx-space-8));
4385
4606
  }
4386
- .zx-app-sidebar__list,
4387
- .zx-app-sidebar__sublist {
4388
- display: grid;
4389
- gap: var(--zx-app-sidebar-row-gap);
4390
- margin: 0;
4607
+ .zx-module-bar[data-orientation=horizontal] {
4608
+ flex-direction: row;
4609
+ align-items: center;
4610
+ inline-size: 100%;
4611
+ block-size: calc(var(--zx-module-bar-target) + 2 * var(--zx-space-1));
4612
+ }
4613
+ @media (pointer: coarse) {
4614
+ .zx-module-bar {
4615
+ --zx-module-bar-target: max(40px, calc(var(--zx-control-height) + var(--zx-space-2)));
4616
+ }
4617
+ }
4618
+ .zx-module-bar__header,
4619
+ .zx-module-bar__footer {
4620
+ display: flex;
4621
+ flex: none;
4622
+ align-items: center;
4623
+ justify-content: center;
4624
+ gap: var(--zx-module-bar-gap);
4625
+ padding: var(--zx-module-bar-pad);
4626
+ }
4627
+ .zx-module-bar[data-orientation=vertical] > .zx-module-bar__header,
4628
+ .zx-module-bar[data-orientation=vertical] > .zx-module-bar__footer {
4629
+ flex-direction: column;
4630
+ }
4631
+ .zx-module-bar[data-orientation=horizontal] > .zx-module-bar__header,
4632
+ .zx-module-bar[data-orientation=horizontal] > .zx-module-bar__footer {
4633
+ padding-block: 0;
4634
+ }
4635
+ .zx-module-bar__header[hidden],
4636
+ .zx-module-bar__footer[hidden] {
4637
+ display: none;
4638
+ }
4639
+ .zx-module-bar__list {
4640
+ display: flex;
4641
+ flex: 1;
4642
+ gap: var(--zx-module-bar-gap);
4643
+ min-inline-size: 0;
4644
+ min-block-size: 0;
4645
+ margin: 0;
4646
+ padding: var(--zx-space-1);
4647
+ overflow: hidden;
4648
+ list-style: none;
4649
+ }
4650
+ .zx-module-bar[data-orientation=vertical] > .zx-module-bar__list {
4651
+ flex-direction: column;
4652
+ align-items: center;
4653
+ }
4654
+ .zx-module-bar[data-orientation=horizontal] > .zx-module-bar__list {
4655
+ flex-direction: row;
4656
+ align-items: center;
4657
+ }
4658
+ .zx-module-bar[data-all-modules=never] > .zx-module-bar__list {
4659
+ overflow: auto;
4660
+ scrollbar-width: none;
4661
+ }
4662
+ .zx-module-bar__row {
4663
+ display: flex;
4664
+ flex: none;
4665
+ }
4666
+ .zx-module-bar__row[hidden],
4667
+ .zx-module-bar__heading[hidden] {
4668
+ display: none;
4669
+ }
4670
+ .zx-module-bar__heading {
4671
+ position: relative;
4672
+ flex: none;
4673
+ align-self: center;
4674
+ background: var(--zx-color-border-subtle);
4675
+ }
4676
+ .zx-module-bar[data-orientation=vertical] .zx-module-bar__heading {
4677
+ inline-size: var(--zx-space-4);
4678
+ block-size: 1px;
4679
+ margin-block: var(--zx-space-1);
4680
+ }
4681
+ .zx-module-bar[data-orientation=horizontal] .zx-module-bar__heading {
4682
+ inline-size: 1px;
4683
+ block-size: var(--zx-space-4);
4684
+ margin-inline: var(--zx-space-1);
4685
+ }
4686
+ .zx-module-bar:not([data-labels=beside]) .zx-module-bar__heading[data-leading] {
4687
+ display: none;
4688
+ }
4689
+ .zx-module-bar__heading-label {
4690
+ position: absolute;
4691
+ inline-size: 1px;
4692
+ block-size: 1px;
4693
+ overflow: hidden;
4694
+ clip-path: inset(50%);
4695
+ white-space: nowrap;
4696
+ }
4697
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] .zx-module-bar__heading {
4698
+ align-self: stretch;
4699
+ inline-size: auto;
4700
+ block-size: auto;
4701
+ margin-block: var(--zx-space-2) 0;
4702
+ padding: var(--zx-space-1) var(--zx-space-2);
4703
+ background: none;
4704
+ }
4705
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] .zx-module-bar__heading[data-leading] {
4706
+ margin-block-start: 0;
4707
+ }
4708
+ .zx-module-bar[data-labels=beside] .zx-module-bar__heading-label {
4709
+ position: static;
4710
+ inline-size: auto;
4711
+ block-size: auto;
4712
+ overflow: visible;
4713
+ clip-path: none;
4714
+ color: var(--zx-color-text-muted);
4715
+ font-size: var(--zx-text-xs);
4716
+ font-weight: var(--zx-weight-semibold);
4717
+ line-height: 1.3;
4718
+ white-space: normal;
4719
+ }
4720
+ .zx-module-bar__item {
4721
+ position: relative;
4722
+ display: grid;
4723
+ place-content: center;
4724
+ justify-items: center;
4725
+ box-sizing: border-box;
4726
+ inline-size: var(--zx-module-bar-target);
4727
+ block-size: var(--zx-module-bar-target);
4728
+ border: 0;
4729
+ border-radius: var(--zx-module-bar-radius);
4730
+ background: transparent;
4731
+ padding: 0;
4732
+ color: var(--zx-color-text-muted);
4733
+ font: inherit;
4734
+ text-decoration: none;
4735
+ cursor: pointer;
4736
+ }
4737
+ .zx-module-bar[data-labels=below] .zx-module-bar__item {
4738
+ align-content: start;
4739
+ gap: var(--zx-space-1);
4740
+ block-size: auto;
4741
+ min-block-size: calc(var(--zx-module-bar-tile) + 2lh + var(--zx-space-3));
4742
+ padding: var(--zx-space-1) 2px;
4743
+ font-size: var(--zx-text-xs);
4744
+ line-height: 1.2;
4745
+ }
4746
+ .zx-module-bar__item:hover {
4747
+ background: var(--zx-color-bg-hover);
4748
+ color: var(--zx-color-text);
4749
+ }
4750
+ .zx-module-bar__item:focus-visible {
4751
+ outline-color: transparent;
4752
+ box-shadow: var(--zx-focus-ring);
4753
+ }
4754
+ .zx-module-bar[data-menus=flyout] .zx-module-bar__item[aria-current],
4755
+ .zx-module-bar[data-menus=none] .zx-module-bar__item[aria-expanded=true],
4756
+ .zx-module-bar[data-menus=none]:not(:has(.zx-module-bar__item[aria-expanded=true])) .zx-module-bar__item[aria-current] {
4757
+ background: var(--zx-color-bg-current);
4758
+ color: var(--zx-color-text);
4759
+ }
4760
+ .zx-module-bar__item[aria-current],
4761
+ .zx-module-bar__item[data-module-bar-more][aria-expanded=true],
4762
+ .zx-module-bar[data-menus=flyout] .zx-module-bar__item[aria-expanded=true] {
4763
+ color: var(--zx-color-text);
4764
+ }
4765
+ .zx-module-bar[data-menus=flyout] .zx-module-bar__item[aria-expanded=true]:not([aria-current]),
4766
+ .zx-module-bar__item[data-module-bar-more][aria-expanded=true] {
4767
+ background: var(--zx-color-bg-hover);
4768
+ }
4769
+ .zx-module-bar__item[aria-current] .zx-module-bar__label,
4770
+ .zx-module-bar[data-menus=none] .zx-module-bar__item[aria-expanded=true] .zx-module-bar__label {
4771
+ font-weight: var(--zx-weight-semibold);
4772
+ }
4773
+ .zx-module-bar__item[aria-disabled=true],
4774
+ .zx-module-bar__entry[aria-disabled=true] {
4775
+ color: var(--zx-color-text-muted);
4776
+ cursor: not-allowed;
4777
+ }
4778
+ .zx-module-bar__item[aria-disabled=true] .zx-module-bar__tile,
4779
+ .zx-module-bar__entry[aria-disabled=true] .zx-module-bar__tile {
4780
+ opacity: .55;
4781
+ }
4782
+ .zx-module-bar__item[aria-disabled=true]:hover,
4783
+ .zx-module-bar__entry[aria-disabled=true]:hover {
4784
+ background: transparent;
4785
+ }
4786
+ .zx-module-bar__label {
4787
+ max-inline-size: 100%;
4788
+ hyphens: auto;
4789
+ overflow-wrap: break-word;
4790
+ text-align: center;
4791
+ }
4792
+ .zx-module-bar__tile {
4793
+ --zx-module-bar-fill: transparent;
4794
+ --zx-module-bar-ink: currentColor;
4795
+ display: grid;
4796
+ flex: none;
4797
+ place-items: center;
4798
+ inline-size: var(--zx-module-bar-tile);
4799
+ block-size: var(--zx-module-bar-tile);
4800
+ border-radius: var(--zx-radius-lg);
4801
+ background: var(--zx-module-bar-fill);
4802
+ color: var(--zx-module-bar-ink);
4803
+ font-size: calc(var(--zx-module-bar-tile) * .58);
4804
+ line-height: 1;
4805
+ }
4806
+ .zx-module-bar__initial {
4807
+ font-size: .9em;
4808
+ font-weight: var(--zx-weight-semibold);
4809
+ }
4810
+ .zx-module-bar__tile[data-appearance=tint][data-color] {
4811
+ --zx-module-bar-fill: color-mix(in srgb, var(--zx-module-bar-color) 16%, var(--zx-color-bg-surface));
4812
+ --zx-module-bar-ink: color-mix(in srgb, var(--zx-module-bar-color) 70%, var(--zx-color-text));
4813
+ }
4814
+ .zx-module-bar__tile[data-appearance=tint][data-tone=blue] {
4815
+ --zx-module-bar-fill: var(--zx-color-tone-blue-bg);
4816
+ --zx-module-bar-ink: var(--zx-color-tone-blue-fg);
4817
+ }
4818
+ .zx-module-bar__tile[data-appearance=tint][data-tone=teal] {
4819
+ --zx-module-bar-fill: var(--zx-color-tone-teal-bg);
4820
+ --zx-module-bar-ink: var(--zx-color-tone-teal-fg);
4821
+ }
4822
+ .zx-module-bar__tile[data-appearance=tint][data-tone=green] {
4823
+ --zx-module-bar-fill: var(--zx-color-tone-green-bg);
4824
+ --zx-module-bar-ink: var(--zx-color-tone-green-fg);
4825
+ }
4826
+ .zx-module-bar__tile[data-appearance=tint][data-tone=amber] {
4827
+ --zx-module-bar-fill: var(--zx-color-tone-amber-bg);
4828
+ --zx-module-bar-ink: var(--zx-color-tone-amber-fg);
4829
+ }
4830
+ .zx-module-bar__tile[data-appearance=tint][data-tone=orange] {
4831
+ --zx-module-bar-fill: var(--zx-color-tone-orange-bg);
4832
+ --zx-module-bar-ink: var(--zx-color-tone-orange-fg);
4833
+ }
4834
+ .zx-module-bar__tile[data-appearance=tint][data-tone=red] {
4835
+ --zx-module-bar-fill: var(--zx-color-tone-red-bg);
4836
+ --zx-module-bar-ink: var(--zx-color-tone-red-fg);
4837
+ }
4838
+ .zx-module-bar__tile[data-appearance=tint][data-tone=pink] {
4839
+ --zx-module-bar-fill: var(--zx-color-tone-pink-bg);
4840
+ --zx-module-bar-ink: var(--zx-color-tone-pink-fg);
4841
+ }
4842
+ .zx-module-bar__tile[data-appearance=tint][data-tone=violet] {
4843
+ --zx-module-bar-fill: var(--zx-color-tone-violet-bg);
4844
+ --zx-module-bar-ink: var(--zx-color-tone-violet-fg);
4845
+ }
4846
+ .zx-module-bar__tile[data-appearance=tint][data-tone=slate] {
4847
+ --zx-module-bar-fill: var(--zx-color-tone-slate-bg);
4848
+ --zx-module-bar-ink: var(--zx-color-tone-slate-fg);
4849
+ }
4850
+ .zx-module-bar__tile[data-appearance=solid] {
4851
+ font-size: inherit;
4852
+ }
4853
+ .zx-module-bar__tile[data-appearance=plain] {
4854
+ --zx-module-bar-ink: currentColor;
4855
+ }
4856
+ .zx-module-bar__badge {
4857
+ position: absolute;
4858
+ inset-block-start: 0;
4859
+ inset-inline-end: 0;
4860
+ min-inline-size: var(--zx-space-4);
4861
+ block-size: var(--zx-space-4);
4862
+ border-radius: var(--zx-radius-full);
4863
+ background: var(--zx-color-accent);
4864
+ box-shadow: 0 0 0 2px var(--zx-color-bg-chrome);
4865
+ box-sizing: border-box;
4866
+ padding-inline: var(--zx-space-1);
4867
+ color: var(--zx-color-on-accent);
4868
+ font-size: var(--zx-text-xs);
4869
+ font-variant-numeric: tabular-nums;
4870
+ font-weight: var(--zx-weight-semibold);
4871
+ line-height: var(--zx-space-4);
4872
+ text-align: center;
4873
+ }
4874
+ .zx-module-bar__badge[data-zx-badge=dot] {
4875
+ min-inline-size: 0;
4876
+ inline-size: var(--zx-space-2);
4877
+ block-size: var(--zx-space-2);
4878
+ padding: 0;
4879
+ font-size: 0;
4880
+ line-height: 0;
4881
+ }
4882
+ .zx-module-bar__popover {
4883
+ --zx-module-bar-tile: calc(var(--zx-control-height) + var(--zx-space-1));
4884
+ }
4885
+ .zx-dropdown.zx-module-bar__popover {
4886
+ inline-size: min(26rem, calc(100vw - 2 * var(--zx-space-3)));
4887
+ max-block-size: min(34rem, calc(100vh - 2 * var(--zx-space-6)));
4888
+ overflow: auto;
4889
+ padding: var(--zx-space-2);
4890
+ }
4891
+ .zx-module-bar__catalogue {
4892
+ display: grid;
4893
+ gap: var(--zx-space-1);
4894
+ }
4895
+ .zx-module-bar__filter {
4896
+ box-sizing: border-box;
4897
+ inline-size: 100%;
4898
+ block-size: var(--zx-control-height);
4899
+ margin-block-end: var(--zx-space-1);
4900
+ border: 1px solid var(--zx-color-border-control);
4901
+ border-radius: var(--zx-control-radius);
4902
+ background: var(--zx-color-bg-control);
4903
+ padding-inline: var(--zx-control-pad-x);
4904
+ color: var(--zx-color-text);
4905
+ font: inherit;
4906
+ font-size: var(--zx-control-font-size);
4907
+ }
4908
+ .zx-module-bar__filter::placeholder {
4909
+ color: var(--zx-color-text-placeholder);
4910
+ }
4911
+ .zx-module-bar__filter:focus-visible {
4912
+ outline-color: transparent;
4913
+ border-color: var(--zx-color-accent);
4914
+ box-shadow: var(--zx-focus-ring);
4915
+ }
4916
+ .zx-module-bar__group[hidden] {
4917
+ display: none;
4918
+ }
4919
+ .zx-module-bar__group-label {
4920
+ padding: var(--zx-space-2) var(--zx-space-2) var(--zx-space-1);
4921
+ color: var(--zx-color-text-muted);
4922
+ font-size: var(--zx-text-xs);
4923
+ font-weight: var(--zx-weight-semibold);
4924
+ }
4925
+ .zx-module-bar__grid {
4926
+ display: grid;
4927
+ grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr));
4928
+ gap: var(--zx-space-1);
4929
+ margin: 0;
4391
4930
  padding: 0;
4392
4931
  list-style: none;
4393
4932
  }
4394
- .zx-app-sidebar__list:not(:has(> .zx-app-sidebar__row > .zx-app-sidebar__item .zx-app-sidebar__item-icon)),
4933
+ .zx-module-bar__grid > li {
4934
+ display: flex;
4935
+ }
4936
+ .zx-module-bar__grid > li[hidden] {
4937
+ display: none;
4938
+ }
4939
+ .zx-module-bar__entry {
4940
+ position: relative;
4941
+ display: grid;
4942
+ align-content: start;
4943
+ justify-items: center;
4944
+ gap: var(--zx-space-1);
4945
+ box-sizing: border-box;
4946
+ inline-size: 100%;
4947
+ border: 0;
4948
+ border-radius: var(--zx-radius-md);
4949
+ background: transparent;
4950
+ padding: var(--zx-space-2) var(--zx-space-1);
4951
+ color: var(--zx-color-text);
4952
+ font: inherit;
4953
+ font-size: var(--zx-text-sm);
4954
+ line-height: 1.25;
4955
+ text-align: center;
4956
+ text-decoration: none;
4957
+ cursor: pointer;
4958
+ }
4959
+ .zx-module-bar__entry:hover {
4960
+ background: var(--zx-color-bg-hover);
4961
+ }
4962
+ .zx-module-bar__entry:focus-visible {
4963
+ outline-color: transparent;
4964
+ box-shadow: var(--zx-focus-ring);
4965
+ }
4966
+ .zx-module-bar__entry[aria-current] {
4967
+ background: var(--zx-color-bg-current);
4968
+ font-weight: var(--zx-weight-semibold);
4969
+ }
4970
+ .zx-module-bar__entry-label {
4971
+ max-inline-size: 100%;
4972
+ hyphens: auto;
4973
+ overflow-wrap: break-word;
4974
+ }
4975
+ .zx-module-bar__entry-badge {
4976
+ color: var(--zx-color-text-muted);
4977
+ font-size: var(--zx-text-xs);
4978
+ font-variant-numeric: tabular-nums;
4979
+ font-weight: 500;
4980
+ }
4981
+ .zx-module-bar__empty {
4982
+ margin: 0;
4983
+ padding: var(--zx-space-4) var(--zx-space-2);
4984
+ color: var(--zx-color-text-muted);
4985
+ font-size: var(--zx-text-sm);
4986
+ text-align: center;
4987
+ }
4988
+ .zx-module-bar__empty[hidden] {
4989
+ display: none;
4990
+ }
4991
+ @media (prefers-reduced-motion: no-preference) {
4992
+ .zx-module-bar__item,
4993
+ .zx-module-bar__entry {
4994
+ transition:
4995
+ background-color var(--zx-dur-fast) var(--zx-ease),
4996
+ color var(--zx-dur-fast) var(--zx-ease),
4997
+ box-shadow var(--zx-dur-fast) var(--zx-ease);
4998
+ }
4999
+ .zx-module-bar__item:active,
5000
+ .zx-module-bar__entry:active {
5001
+ transform: scale(.96);
5002
+ }
5003
+ }
5004
+ @media (forced-colors: active) {
5005
+ .zx-module-bar__item[aria-current],
5006
+ .zx-module-bar[data-menus=none] .zx-module-bar__item[aria-expanded=true],
5007
+ .zx-module-bar__entry[aria-current] {
5008
+ background: Highlight;
5009
+ color: HighlightText;
5010
+ forced-color-adjust: none;
5011
+ }
5012
+ .zx-module-bar__tile {
5013
+ outline: 1px solid CanvasText;
5014
+ }
5015
+ .zx-module-bar__badge {
5016
+ border: 1px solid CanvasText;
5017
+ }
5018
+ }
5019
+
5020
+ /* src/components/app-sidebar/app-sidebar.css */
5021
+ .zx-app-sidebar {
5022
+ --zx-app-sidebar-gutter: var(--zx-space-2);
5023
+ --zx-app-sidebar-icon: var(--zx-space-6);
5024
+ --zx-app-sidebar-item-gap: var(--zx-space-2);
5025
+ --zx-app-sidebar-item-height: var(--zx-control-height);
5026
+ --zx-app-sidebar-pad-x: var(--zx-space-2);
5027
+ --zx-app-sidebar-row-gap: 2px;
5028
+ --zx-app-sidebar-group-gap: var(--zx-space-3);
5029
+ --zx-app-sidebar-indent: var(--zx-space-3);
5030
+ --zx-app-sidebar-icon-indent: var(--zx-space-4);
5031
+ --zx-app-sidebar-radius: var(--zx-radius-md);
5032
+ --zx-app-sidebar-hover: var(--zx-color-bg-hover);
5033
+ --zx-app-sidebar-current: var(--zx-color-bg-current);
5034
+ --zx-app-sidebar-press: color-mix(in srgb, var(--zx-color-text) 12%, transparent);
5035
+ display: flex;
5036
+ min-block-size: 0;
5037
+ border: 1px solid var(--zx-color-glass-border);
5038
+ background: var(--zx-color-glass-chrome);
5039
+ box-shadow: var(--zx-glass-chrome-shadow);
5040
+ color: var(--zx-color-text);
5041
+ }
5042
+ .zx-app-sidebar[data-orientation=horizontal] {
5043
+ inline-size: 100%;
5044
+ }
5045
+ .zx-app-sidebar[data-orientation=horizontal] > .zx-app-sidebar__rail {
5046
+ inline-size: 100%;
5047
+ }
5048
+ .zx-app-sidebar__rail.zx-app-rail {
5049
+ border: 0;
5050
+ }
5051
+ .zx-app-sidebar__expanded {
5052
+ display: grid;
5053
+ grid-template-rows: auto minmax(0, 1fr) auto;
5054
+ inline-size: min(280px, 100vw);
5055
+ min-block-size: 0;
5056
+ }
5057
+ .zx-app-sidebar__expanded[hidden],
5058
+ .zx-app-sidebar__rail[hidden] {
5059
+ display: none;
5060
+ }
5061
+ .zx-app-sidebar__header {
5062
+ display: grid;
5063
+ grid-template-columns: minmax(0, 1fr) auto;
5064
+ align-items: center;
5065
+ gap: var(--zx-space-2);
5066
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-4));
5067
+ padding: var(--zx-space-2) var(--zx-space-3);
5068
+ }
5069
+ .zx-app-sidebar__header-content {
5070
+ min-inline-size: 0;
5071
+ }
5072
+ .zx-app-sidebar .zx-app-sidebar__collapse[hidden] {
5073
+ display: none;
5074
+ }
5075
+ .zx-app-sidebar__nav {
5076
+ min-block-size: 0;
5077
+ overflow: auto;
5078
+ padding: var(--zx-space-2) var(--zx-app-sidebar-gutter) var(--zx-space-3);
5079
+ }
5080
+ .zx-app-sidebar__list,
5081
+ .zx-app-sidebar__sublist {
5082
+ display: grid;
5083
+ gap: var(--zx-app-sidebar-row-gap);
5084
+ margin: 0;
5085
+ padding: 0;
5086
+ list-style: none;
5087
+ }
5088
+ .zx-app-sidebar__list:not(:has(> .zx-app-sidebar__row > .zx-app-sidebar__item .zx-app-sidebar__item-icon, > .zx-app-sidebar__section > .zx-app-sidebar__section-list > .zx-app-sidebar__row > .zx-app-sidebar__item .zx-app-sidebar__item-icon)),
5089
+ .zx-app-sidebar__section-list:not(:has(> .zx-app-sidebar__row > .zx-app-sidebar__item .zx-app-sidebar__item-icon)),
4395
5090
  .zx-app-sidebar__sublist:not(:has(> .zx-app-sidebar__row > .zx-app-sidebar__item .zx-app-sidebar__item-icon)) {
4396
5091
  --zx-app-sidebar-icon: 0px;
4397
5092
  --zx-app-sidebar-item-gap: 0px;
@@ -4433,6 +5128,43 @@ button.zx-panel__toggle:focus-visible {
4433
5128
  .zx-app-sidebar__list > .zx-app-sidebar__row:first-child {
4434
5129
  margin-block-start: 0;
4435
5130
  }
5131
+ .zx-app-sidebar__section {
5132
+ list-style: none;
5133
+ }
5134
+ .zx-app-sidebar__section + .zx-app-sidebar__section,
5135
+ .zx-app-sidebar__section + .zx-app-sidebar__row,
5136
+ .zx-app-sidebar__row + .zx-app-sidebar__section {
5137
+ margin-block-start: var(--zx-app-sidebar-group-gap);
5138
+ }
5139
+ .zx-app-sidebar__section-header {
5140
+ display: flex;
5141
+ align-items: center;
5142
+ justify-content: space-between;
5143
+ gap: var(--zx-space-2);
5144
+ min-block-size: calc(var(--zx-control-height) - var(--zx-space-1));
5145
+ padding-inline: var(--zx-app-sidebar-pad-x) var(--zx-space-1);
5146
+ color: var(--zx-color-text-muted);
5147
+ font-size: var(--zx-text-xs);
5148
+ font-weight: var(--zx-weight-semibold);
5149
+ line-height: 1.3;
5150
+ }
5151
+ .zx-app-sidebar__section-label {
5152
+ min-inline-size: 0;
5153
+ overflow-wrap: break-word;
5154
+ }
5155
+ .zx-app-sidebar__section-actions {
5156
+ display: inline-flex;
5157
+ flex: none;
5158
+ align-items: center;
5159
+ gap: var(--zx-space-1);
5160
+ }
5161
+ .zx-app-sidebar__section-list {
5162
+ display: grid;
5163
+ gap: var(--zx-app-sidebar-row-gap);
5164
+ margin: 0;
5165
+ padding: 0;
5166
+ list-style: none;
5167
+ }
4436
5168
  .zx-app-sidebar__item {
4437
5169
  position: relative;
4438
5170
  display: grid;
@@ -4541,6 +5273,147 @@ button.zx-panel__toggle:focus-visible {
4541
5273
  .zx-app-sidebar__rail-header {
4542
5274
  display: grid;
4543
5275
  gap: var(--zx-space-1);
5276
+ justify-items: center;
5277
+ }
5278
+ .zx-app-sidebar__modules {
5279
+ display: flex;
5280
+ min-inline-size: 0;
5281
+ min-block-size: 0;
5282
+ }
5283
+ .zx-app-sidebar[data-side=right] .zx-app-sidebar__modules {
5284
+ flex-direction: row-reverse;
5285
+ }
5286
+ .zx-app-sidebar__strip.zx-module-bar {
5287
+ background: transparent;
5288
+ }
5289
+ .zx-app-sidebar__modules > .zx-app-sidebar__strip {
5290
+ border-inline-end: 1px solid var(--zx-color-border-subtle);
5291
+ }
5292
+ .zx-app-sidebar[data-side=right] .zx-app-sidebar__modules > .zx-app-sidebar__strip {
5293
+ border-inline-end: 0;
5294
+ border-inline-start: 1px solid var(--zx-color-border-subtle);
5295
+ }
5296
+ .zx-app-sidebar[data-layout=modules][data-orientation=horizontal] > .zx-app-sidebar__strip {
5297
+ inline-size: 100%;
5298
+ }
5299
+ .zx-app-sidebar__strip-foot {
5300
+ display: grid;
5301
+ justify-items: center;
5302
+ gap: var(--zx-space-2);
5303
+ }
5304
+ .zx-app-sidebar__strip[data-labels=beside] .zx-app-sidebar__strip-foot {
5305
+ justify-items: stretch;
5306
+ padding-inline-start: calc(var(--zx-space-1) + var(--zx-space-2) - var(--zx-module-bar-pad) + (var(--zx-module-bar-tile) - var(--zx-control-height)) / 2);
5307
+ }
5308
+ .zx-app-sidebar__strip[data-labels=beside] .zx-app-sidebar__rail-header {
5309
+ justify-items: stretch;
5310
+ }
5311
+ .zx-app-sidebar__presentation {
5312
+ display: inline-grid;
5313
+ justify-self: center;
5314
+ gap: 2px;
5315
+ border-radius: var(--zx-radius-md);
5316
+ background: var(--zx-color-bg-hover);
5317
+ padding: 2px;
5318
+ }
5319
+ .zx-app-sidebar__strip[data-labels=beside] .zx-app-sidebar__presentation {
5320
+ grid-auto-flow: column;
5321
+ justify-self: start;
5322
+ }
5323
+ .zx-app-sidebar__presentation-option {
5324
+ display: grid;
5325
+ place-items: center;
5326
+ inline-size: var(--zx-space-6);
5327
+ block-size: var(--zx-space-6);
5328
+ border: 0;
5329
+ border-radius: var(--zx-radius-sm);
5330
+ background: transparent;
5331
+ padding: 0;
5332
+ color: var(--zx-color-text-muted);
5333
+ cursor: pointer;
5334
+ }
5335
+ .zx-app-sidebar__presentation-option:hover {
5336
+ color: var(--zx-color-text);
5337
+ }
5338
+ .zx-app-sidebar__presentation-option[aria-checked=true] {
5339
+ background: var(--zx-color-bg-surface);
5340
+ box-shadow: 0 0 0 1px var(--zx-color-border-subtle);
5341
+ color: var(--zx-color-text);
5342
+ }
5343
+ .zx-app-sidebar__presentation-option:focus-visible {
5344
+ outline-color: transparent;
5345
+ box-shadow: var(--zx-focus-ring);
5346
+ }
5347
+ .zx-app-sidebar__presentation-glyph {
5348
+ display: flex;
5349
+ gap: 1px;
5350
+ box-sizing: border-box;
5351
+ inline-size: 16px;
5352
+ block-size: 12px;
5353
+ border: 1.5px solid currentColor;
5354
+ border-radius: 2px;
5355
+ padding: 1px;
5356
+ }
5357
+ .zx-app-sidebar__presentation-strip,
5358
+ .zx-app-sidebar__presentation-panel {
5359
+ border-radius: 1px;
5360
+ background: currentColor;
5361
+ }
5362
+ .zx-app-sidebar__presentation-strip {
5363
+ flex: 0 0 2px;
5364
+ }
5365
+ .zx-app-sidebar__presentation-panel {
5366
+ flex: 0 0 4px;
5367
+ opacity: .5;
5368
+ }
5369
+ .zx-app-sidebar__presentation-glyph[data-presentation=expanded] > .zx-app-sidebar__presentation-strip {
5370
+ flex-basis: 4px;
5371
+ }
5372
+ .zx-app-sidebar__presentation-glyph[data-presentation=collapsed] > .zx-app-sidebar__presentation-panel {
5373
+ display: none;
5374
+ }
5375
+ @media (forced-colors: active) {
5376
+ .zx-app-sidebar__presentation-option[aria-checked=true] {
5377
+ background: Highlight;
5378
+ color: HighlightText;
5379
+ forced-color-adjust: none;
5380
+ }
5381
+ }
5382
+ .zx-app-sidebar__panel {
5383
+ display: grid;
5384
+ grid-template-rows: auto minmax(0, 1fr) auto;
5385
+ inline-size: min(14rem, 100vw - var(--zx-control-height) * 3);
5386
+ min-block-size: 0;
5387
+ }
5388
+ .zx-app-sidebar__panel-title {
5389
+ color: var(--zx-color-text);
5390
+ font-size: var(--zx-text-md);
5391
+ font-weight: var(--zx-weight-semibold);
5392
+ line-height: 1.3;
5393
+ overflow-wrap: break-word;
5394
+ }
5395
+ .zx-app-sidebar__panel-body {
5396
+ display: grid;
5397
+ grid-auto-rows: max-content;
5398
+ align-content: start;
5399
+ min-block-size: 0;
5400
+ overflow: auto;
5401
+ }
5402
+ .zx-app-sidebar__panel-body > .zx-app-sidebar__nav {
5403
+ overflow: visible;
5404
+ min-block-size: auto;
5405
+ }
5406
+ .zx-app-sidebar__panel-body > [hidden] {
5407
+ display: none;
5408
+ }
5409
+ .zx-app-sidebar__panel-lead {
5410
+ display: grid;
5411
+ gap: var(--zx-space-2);
5412
+ padding: var(--zx-space-1) var(--zx-space-3) 0;
5413
+ }
5414
+ .zx-app-sidebar__panel-content {
5415
+ min-inline-size: 0;
5416
+ padding: 0 var(--zx-app-sidebar-gutter) var(--zx-space-3);
4544
5417
  }
4545
5418
  .zx-app-sidebar__rail .zx-app-rail__item {
4546
5419
  color: var(--zx-color-text-muted);
@@ -4597,12 +5470,16 @@ button.zx-panel__toggle:focus-visible {
4597
5470
  transform: scale(.985);
4598
5471
  }
4599
5472
  .zx-app-sidebar__expanded,
4600
- .zx-app-sidebar__rail {
5473
+ .zx-app-sidebar__rail,
5474
+ .zx-app-sidebar__panel {
4601
5475
  animation: zx-app-sidebar-mode var(--zx-dur-base) var(--zx-ease);
4602
5476
  }
4603
5477
  .zx-app-sidebar__sublist[data-branch-motion=expand] {
4604
5478
  animation: zx-app-sidebar-branch var(--zx-dur-base) var(--zx-ease);
4605
5479
  }
5480
+ .zx-app-sidebar__panel-body[data-module-motion=enter] {
5481
+ animation: zx-app-sidebar-mode var(--zx-dur-base) var(--zx-ease);
5482
+ }
4606
5483
  }
4607
5484
  @keyframes zx-app-sidebar-mode {
4608
5485
  from {
@@ -4820,7 +5697,7 @@ button.zx-panel__toggle:focus-visible {
4820
5697
  padding: var(--zx-space-5);
4821
5698
  }
4822
5699
  .zx-modal:focus {
4823
- outline: none;
5700
+ outline-color: transparent;
4824
5701
  }
4825
5702
  .zx-modal:focus-visible {
4826
5703
  outline: 2px solid var(--zx-color-ring);
@@ -5119,7 +5996,7 @@ body:has(.zx-modal:modal) {
5119
5996
  opacity: 1;
5120
5997
  }
5121
5998
  .zx-sheet__handle:focus-visible {
5122
- outline: none;
5999
+ outline-color: transparent;
5123
6000
  box-shadow: var(--zx-focus-ring);
5124
6001
  }
5125
6002
  .zx-sheet[data-side=start] > .zx-sheet__handle,
@@ -5373,7 +6250,7 @@ body:has(.zx-modal:modal) {
5373
6250
  background: var(--zx-color-accent);
5374
6251
  }
5375
6252
  .zx-split-view__divider:focus-visible {
5376
- outline: 0;
6253
+ outline-color: transparent;
5377
6254
  box-shadow: var(--zx-focus-ring);
5378
6255
  z-index: 1;
5379
6256
  }
@@ -5484,7 +6361,7 @@ body:has(.zx-modal:modal) {
5484
6361
  visibility: hidden;
5485
6362
  }
5486
6363
  .zx-dock__toggle:focus-visible {
5487
- outline: none;
6364
+ outline-color: transparent;
5488
6365
  box-shadow: var(--zx-focus-ring);
5489
6366
  }
5490
6367
  .zx-dock__chevron {
@@ -5538,7 +6415,7 @@ body:has(.zx-modal:modal) {
5538
6415
  font-weight: var(--zx-control-font-weight);
5539
6416
  }
5540
6417
  .zx-dock__tab:focus-visible {
5541
- outline: none;
6418
+ outline-color: transparent;
5542
6419
  box-shadow: var(--zx-focus-ring);
5543
6420
  }
5544
6421
  .zx-dock__body {
@@ -5560,7 +6437,8 @@ body:has(.zx-modal:modal) {
5560
6437
  block-size: 100%;
5561
6438
  }
5562
6439
  .zx-dock__panel:focus-visible {
5563
- outline: none;
6440
+ outline-color: transparent;
6441
+ outline-offset: -2px;
5564
6442
  box-shadow: inset var(--zx-focus-ring);
5565
6443
  }
5566
6444
  .zx-dock__divider {
@@ -5599,7 +6477,7 @@ body:has(.zx-modal:modal) {
5599
6477
  background: var(--zx-color-accent);
5600
6478
  }
5601
6479
  .zx-dock__divider:focus-visible {
5602
- outline: none;
6480
+ outline-color: transparent;
5603
6481
  z-index: 1;
5604
6482
  box-shadow: var(--zx-focus-ring);
5605
6483
  }
@@ -5715,6 +6593,61 @@ body:has(.zx-modal:modal) {
5715
6593
  margin: var(--zx-space-1) var(--zx-space-2);
5716
6594
  background: var(--zx-color-overlay-divider);
5717
6595
  }
6596
+ .zx-menu-button__choice {
6597
+ display: flex;
6598
+ align-items: center;
6599
+ justify-content: space-between;
6600
+ gap: var(--zx-space-3);
6601
+ min-block-size: var(--zx-control-height);
6602
+ padding: var(--zx-space-1) var(--zx-space-2);
6603
+ }
6604
+ .zx-menu-button__choice-label {
6605
+ color: var(--zx-color-text);
6606
+ font-size: var(--zx-text-md);
6607
+ }
6608
+ .zx-menu-button__choice-options {
6609
+ display: inline-flex;
6610
+ flex: none;
6611
+ gap: 2px;
6612
+ border-radius: var(--zx-radius-md);
6613
+ background: var(--zx-color-bg-hover);
6614
+ padding: 2px;
6615
+ }
6616
+ .zx-menu-button__choice-option {
6617
+ display: grid;
6618
+ place-items: center;
6619
+ inline-size: var(--zx-space-6);
6620
+ block-size: var(--zx-space-6);
6621
+ border: 0;
6622
+ border-radius: var(--zx-radius-sm);
6623
+ background: transparent;
6624
+ padding: 0;
6625
+ color: var(--zx-color-text-muted);
6626
+ cursor: pointer;
6627
+ }
6628
+ .zx-menu-button__choice-option:hover {
6629
+ color: var(--zx-color-text);
6630
+ }
6631
+ .zx-menu-button__choice-option[aria-checked=true] {
6632
+ background: var(--zx-color-bg-surface);
6633
+ box-shadow: 0 0 0 1px var(--zx-color-border-subtle);
6634
+ color: var(--zx-color-text);
6635
+ }
6636
+ .zx-menu-button__choice-option[aria-disabled=true] {
6637
+ cursor: not-allowed;
6638
+ opacity: .55;
6639
+ }
6640
+ .zx-menu-button__choice-option:focus-visible {
6641
+ outline-color: transparent;
6642
+ box-shadow: var(--zx-focus-ring);
6643
+ }
6644
+ @media (forced-colors: active) {
6645
+ .zx-menu-button__choice-option[aria-checked=true] {
6646
+ background: Highlight;
6647
+ color: HighlightText;
6648
+ forced-color-adjust: none;
6649
+ }
6650
+ }
5718
6651
 
5719
6652
  /* src/components/context-menu/context-menu.css */
5720
6653
  .zx-context-menu__anchor {
@@ -6784,7 +7717,7 @@ body:has(.zx-modal:modal) {
6784
7717
  border: 2px solid var(--zx-color-bg-surface);
6785
7718
  border-radius: var(--zx-radius-full);
6786
7719
  background: var(--zx-color-accent);
6787
- box-shadow: var(--zx-shadow-1);
7720
+ box-shadow: var(--zx-surface-shadow);
6788
7721
  }
6789
7722
  .zx-slider__input::-moz-range-thumb {
6790
7723
  inline-size: var(--zx-slider-thumb);
@@ -6792,7 +7725,7 @@ body:has(.zx-modal:modal) {
6792
7725
  border: 2px solid var(--zx-color-bg-surface);
6793
7726
  border-radius: var(--zx-radius-full);
6794
7727
  background: var(--zx-color-accent);
6795
- box-shadow: var(--zx-shadow-1);
7728
+ box-shadow: var(--zx-surface-shadow);
6796
7729
  }
6797
7730
  .zx-slider__input:focus-visible {
6798
7731
  outline: 2px solid transparent;
@@ -6900,7 +7833,7 @@ body:has(.zx-modal:modal) {
6900
7833
  background: none;
6901
7834
  }
6902
7835
  .zx-rating__radio:focus-visible {
6903
- outline: 0;
7836
+ outline-color: transparent;
6904
7837
  box-shadow: var(--zx-focus-ring);
6905
7838
  }
6906
7839
  .zx-rating[data-inert] .zx-rating__radio {
@@ -7167,7 +8100,7 @@ body:has(.zx-modal:modal) {
7167
8100
  color: var(--zx-color-accent);
7168
8101
  }
7169
8102
  .zx-time-picker__clock-unit:focus-visible {
7170
- outline: 0;
8103
+ outline-color: transparent;
7171
8104
  box-shadow: var(--zx-focus-ring);
7172
8105
  }
7173
8106
  .zx-time-picker__clock-colon {
@@ -7216,7 +8149,7 @@ body:has(.zx-modal:modal) {
7216
8149
  font-weight: 600;
7217
8150
  }
7218
8151
  .zx-time-picker__mark:focus-visible {
7219
- outline: 0;
8152
+ outline-color: transparent;
7220
8153
  box-shadow: var(--zx-focus-ring);
7221
8154
  }
7222
8155
  .zx-time-picker__hand {
@@ -7959,7 +8892,7 @@ body:has(.zx-modal:modal) {
7959
8892
  .zx-calendar__more:focus-visible,
7960
8893
  .zx-calendar__month-week-number:focus-visible {
7961
8894
  z-index: 4;
7962
- outline: none;
8895
+ outline-color: transparent;
7963
8896
  box-shadow: var(--zx-focus-ring);
7964
8897
  }
7965
8898
  .zx-calendar__heading {
@@ -8705,7 +9638,7 @@ body:has(.zx-modal:modal) {
8705
9638
  color: var(--zx-color-text);
8706
9639
  }
8707
9640
  .zx-record-view__field-move:focus-visible {
8708
- outline: none;
9641
+ outline-color: transparent;
8709
9642
  box-shadow: var(--zx-focus-ring);
8710
9643
  }
8711
9644
  .zx-record-view__field-move:disabled {
@@ -8827,7 +9760,7 @@ body:has(.zx-modal:modal) {
8827
9760
  color: var(--zx-color-text);
8828
9761
  }
8829
9762
  .zx-table__column-move:focus-visible {
8830
- outline: none;
9763
+ outline-color: transparent;
8831
9764
  box-shadow: var(--zx-focus-ring);
8832
9765
  }
8833
9766
  .zx-table__column-move:disabled {
@@ -8984,17 +9917,19 @@ body:has(.zx-modal:modal) {
8984
9917
  text-align: start;
8985
9918
  }
8986
9919
  .zx-table__sort-button {
9920
+ --zx-table-sort-slack: max(0px, (24px - 1lh) / 2);
8987
9921
  display: flex;
8988
9922
  align-items: center;
8989
9923
  justify-content: space-between;
8990
9924
  gap: var(--zx-space-2);
8991
9925
  inline-size: 100%;
8992
- min-block-size: auto;
9926
+ min-block-size: 24px;
8993
9927
  border: 0;
8994
9928
  border-radius: var(--zx-radius-sm);
8995
9929
  background: inherit;
8996
9930
  color: inherit;
8997
- padding: 0;
9931
+ margin-block: calc(-1 * var(--zx-table-sort-slack));
9932
+ padding: var(--zx-table-sort-slack) 0;
8998
9933
  font: inherit;
8999
9934
  letter-spacing: inherit;
9000
9935
  text-align: inherit;
@@ -9058,12 +9993,60 @@ body:has(.zx-modal:modal) {
9058
9993
  border-block-end: 0;
9059
9994
  }
9060
9995
  .zx-table__checkbox {
9061
- display: block;
9996
+ --zx-table-checkbox-slack: max(0px, (24px - var(--zx-space-4)) / 2);
9997
+ appearance: none;
9998
+ display: grid;
9999
+ place-content: center;
10000
+ box-sizing: content-box;
9062
10001
  inline-size: var(--zx-space-4);
9063
- min-block-size: auto;
9064
10002
  block-size: var(--zx-space-4);
10003
+ min-block-size: auto;
9065
10004
  margin: 0 auto;
9066
- accent-color: var(--zx-color-accent);
10005
+ border: var(--zx-table-checkbox-slack) solid transparent;
10006
+ border-radius: calc(var(--zx-radius-sm) + var(--zx-table-checkbox-slack));
10007
+ padding: 0;
10008
+ background: var(--zx-color-bg-control) padding-box;
10009
+ box-shadow: inset 0 0 0 1px var(--zx-color-text-subtle);
10010
+ color: var(--zx-color-on-accent);
10011
+ cursor: pointer;
10012
+ }
10013
+ .zx-table__checkbox::before {
10014
+ content: "";
10015
+ inline-size: calc(var(--zx-space-4) * .625);
10016
+ block-size: calc(var(--zx-space-4) * .625);
10017
+ background: currentColor;
10018
+ clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0, 43% 62%);
10019
+ visibility: hidden;
10020
+ }
10021
+ .zx-table__checkbox:hover:not(:disabled) {
10022
+ box-shadow: inset 0 0 0 1px var(--zx-color-text-muted);
10023
+ }
10024
+ .zx-table__checkbox:is(:checked, :indeterminate) {
10025
+ background-color: var(--zx-color-accent);
10026
+ box-shadow: inset 0 0 0 1px var(--zx-color-accent);
10027
+ }
10028
+ .zx-table__checkbox:is(:checked, :indeterminate)::before {
10029
+ visibility: visible;
10030
+ }
10031
+ .zx-table__checkbox:indeterminate::before {
10032
+ clip-path: inset(40% 5%);
10033
+ }
10034
+ .zx-table__checkbox:focus-visible {
10035
+ outline-color: transparent;
10036
+ outline-offset: calc(-1 * var(--zx-table-checkbox-slack));
10037
+ box-shadow: inset 0 0 0 1px var(--zx-color-accent), var(--zx-focus-ring);
10038
+ }
10039
+ .zx-table__checkbox:disabled {
10040
+ opacity: .5;
10041
+ cursor: not-allowed;
10042
+ }
10043
+ @media (forced-colors: active) {
10044
+ .zx-table__checkbox {
10045
+ appearance: auto;
10046
+ }
10047
+ .zx-table__checkbox::before {
10048
+ content: none;
10049
+ }
9067
10050
  }
9068
10051
  .zx-table__empty {
9069
10052
  padding-block: var(--zx-space-6);
@@ -9099,7 +10082,7 @@ body:has(.zx-modal:modal) {
9099
10082
  color: var(--zx-color-text);
9100
10083
  }
9101
10084
  .zx-table__tree-toggle:focus-visible {
9102
- outline: 0;
10085
+ outline-color: transparent;
9103
10086
  box-shadow: var(--zx-focus-ring);
9104
10087
  }
9105
10088
  .zx-table__cell-content {
@@ -9132,10 +10115,14 @@ body:has(.zx-modal:modal) {
9132
10115
  .zx-table__body td[data-editable=true] {
9133
10116
  cursor: cell;
9134
10117
  }
9135
- .zx-table__body td[data-editable=true]:focus-visible {
9136
- outline: 0;
10118
+ .zx-table__body :is(tr[data-row], td, th)[tabindex]:focus-visible {
10119
+ outline-color: transparent;
10120
+ outline-offset: -2px;
9137
10121
  box-shadow: inset var(--zx-focus-ring);
9138
10122
  }
10123
+ .zx-table__body > tr[data-row] {
10124
+ scroll-margin-block: calc(var(--zx-control-height) + var(--zx-space-2)) var(--zx-space-2);
10125
+ }
9139
10126
  .zx-table__body td[data-editing=true] {
9140
10127
  position: relative;
9141
10128
  }
@@ -9301,7 +10288,7 @@ button.zx-stat-tile:hover {
9301
10288
  }
9302
10289
  a.zx-stat-tile:focus-visible,
9303
10290
  button.zx-stat-tile:focus-visible {
9304
- outline: 0;
10291
+ outline-color: transparent;
9305
10292
  box-shadow: var(--zx-focus-ring);
9306
10293
  }
9307
10294
  @media (prefers-reduced-motion: no-preference) {
@@ -9468,7 +10455,7 @@ button.zx-stat-tile:focus-visible {
9468
10455
  font: inherit;
9469
10456
  }
9470
10457
  .zx-card-view__sort select:focus-visible {
9471
- outline: none;
10458
+ outline-color: transparent;
9472
10459
  box-shadow: var(--zx-focus-ring);
9473
10460
  }
9474
10461
  .zx-card-view__content,
@@ -9521,7 +10508,7 @@ button.zx-stat-tile:focus-visible {
9521
10508
  border-color: var(--zx-color-border-strong);
9522
10509
  }
9523
10510
  .zx-record-card:focus-visible {
9524
- outline: none;
10511
+ outline-color: transparent;
9525
10512
  box-shadow: var(--zx-focus-ring);
9526
10513
  }
9527
10514
  .zx-record-card[data-selected=true] {
@@ -9584,7 +10571,7 @@ button.zx-stat-tile:focus-visible {
9584
10571
  accent-color: var(--zx-color-accent);
9585
10572
  }
9586
10573
  .zx-record-card__selection input:focus-visible {
9587
- outline: none;
10574
+ outline-color: transparent;
9588
10575
  box-shadow: var(--zx-focus-ring);
9589
10576
  }
9590
10577
  .zx-record-card__titles {
@@ -9640,7 +10627,7 @@ button.zx-stat-tile:focus-visible {
9640
10627
  }
9641
10628
  .zx-record-card__primary:focus-visible {
9642
10629
  border-radius: var(--zx-radius-sm);
9643
- outline: none;
10630
+ outline-color: transparent;
9644
10631
  box-shadow: var(--zx-focus-ring);
9645
10632
  }
9646
10633
  .zx-record-card__subtitle {
@@ -9680,7 +10667,7 @@ button.zx-stat-tile:focus-visible {
9680
10667
  background: var(--zx-color-bg-hover);
9681
10668
  }
9682
10669
  .zx-record-card__action:focus-visible {
9683
- outline: none;
10670
+ outline-color: transparent;
9684
10671
  box-shadow: var(--zx-focus-ring);
9685
10672
  }
9686
10673
  .zx-record-card__action:disabled {
@@ -10050,7 +11037,7 @@ button.zx-stat-tile:focus-visible {
10050
11037
  .zx-kanban-view__collapse:focus-visible,
10051
11038
  .zx-kanban-view__move-handle:focus-visible,
10052
11039
  .zx-kanban-view .zx-record-card:focus-visible {
10053
- outline: none;
11040
+ outline-color: transparent;
10054
11041
  box-shadow: var(--zx-focus-ring);
10055
11042
  }
10056
11043
  .zx-kanban-view__count {
@@ -10095,7 +11082,7 @@ button.zx-stat-tile:focus-visible {
10095
11082
  border-radius: var(--zx-radius-md);
10096
11083
  }
10097
11084
  .zx-kanban-view :where(.zx-record-card[data-variant=outlined]) {
10098
- box-shadow: var(--zx-shadow-1);
11085
+ box-shadow: var(--zx-surface-shadow);
10099
11086
  }
10100
11087
  .zx-kanban-view .zx-record-card:has(> .zx-record-card__preview) {
10101
11088
  grid-template-columns: var(--zx-kanban-thumbnail-size) minmax(0, 1fr);
@@ -10406,7 +11393,7 @@ button.zx-stat-tile:focus-visible {
10406
11393
  color: var(--zx-color-text);
10407
11394
  }
10408
11395
  .zx-kanban-view__add:focus-visible {
10409
- outline: none;
11396
+ outline-color: transparent;
10410
11397
  box-shadow: var(--zx-focus-ring);
10411
11398
  }
10412
11399
  .zx-kanban-view__add[hidden] {
@@ -10676,6 +11663,237 @@ button.zx-stat-tile:focus-visible {
10676
11663
  cursor: pointer;
10677
11664
  }
10678
11665
 
11666
+ /* src/components/view-settings/view-settings.css */
11667
+ .zx-view-settings {
11668
+ container-type: inline-size;
11669
+ inline-size: 100%;
11670
+ min-inline-size: 15rem;
11671
+ display: grid;
11672
+ gap: var(--zx-space-5);
11673
+ color: var(--zx-color-text);
11674
+ font-size: var(--zx-control-font-size);
11675
+ }
11676
+ .zx-view-settings__section {
11677
+ display: grid;
11678
+ gap: var(--zx-space-2);
11679
+ min-inline-size: 0;
11680
+ }
11681
+ .zx-view-settings__heading {
11682
+ margin: 0;
11683
+ color: var(--zx-color-text);
11684
+ font-size: var(--zx-text-md);
11685
+ font-weight: var(--zx-weight-semibold);
11686
+ line-height: 1.3;
11687
+ }
11688
+ .zx-view-settings__subheading {
11689
+ margin: var(--zx-space-1) 0 0;
11690
+ color: var(--zx-color-text-muted);
11691
+ font-size: var(--zx-text-sm);
11692
+ font-weight: var(--zx-weight-medium);
11693
+ line-height: 1.3;
11694
+ }
11695
+ .zx-view-settings__search-slot:empty {
11696
+ display: none;
11697
+ }
11698
+ .zx-view-settings__search {
11699
+ inline-size: 100%;
11700
+ }
11701
+ .zx-view-settings__frame {
11702
+ position: relative;
11703
+ }
11704
+ .zx-view-settings__list,
11705
+ .zx-view-settings__hidden {
11706
+ display: grid;
11707
+ gap: calc(var(--zx-space-1) / 2);
11708
+ margin: 0;
11709
+ padding: 0;
11710
+ list-style: none;
11711
+ }
11712
+ .zx-view-settings__hidden {
11713
+ max-block-size: calc(var(--zx-control-height) * 8);
11714
+ overflow-y: auto;
11715
+ overscroll-behavior: contain;
11716
+ }
11717
+ .zx-view-settings__hidden[hidden] {
11718
+ display: none;
11719
+ }
11720
+ .zx-view-settings__row {
11721
+ position: relative;
11722
+ display: flex;
11723
+ align-items: center;
11724
+ gap: var(--zx-space-2);
11725
+ min-block-size: var(--zx-control-height);
11726
+ padding-inline: var(--zx-space-1);
11727
+ border-radius: var(--zx-control-radius);
11728
+ background: var(--zx-color-bg-surface);
11729
+ }
11730
+ .zx-view-settings__row:hover {
11731
+ background: var(--zx-color-bg-hover);
11732
+ }
11733
+ .zx-view-settings__handle {
11734
+ order: -2;
11735
+ flex: none;
11736
+ }
11737
+ .zx-view-settings__type {
11738
+ order: -1;
11739
+ display: inline-flex;
11740
+ flex: none;
11741
+ align-items: center;
11742
+ justify-content: center;
11743
+ inline-size: 1.25rem;
11744
+ color: var(--zx-color-text-subtle);
11745
+ }
11746
+ .zx-view-settings__label {
11747
+ flex: 1 1 auto;
11748
+ min-inline-size: 0;
11749
+ overflow: hidden;
11750
+ text-overflow: ellipsis;
11751
+ white-space: nowrap;
11752
+ }
11753
+ .zx-view-settings__handle,
11754
+ .zx-view-settings__hide {
11755
+ display: inline-grid;
11756
+ place-items: center;
11757
+ inline-size: var(--zx-control-height);
11758
+ block-size: var(--zx-control-height);
11759
+ min-block-size: 0;
11760
+ padding: 0;
11761
+ border: 1px solid transparent;
11762
+ border-radius: var(--zx-control-radius);
11763
+ background: none;
11764
+ color: var(--zx-color-text-subtle);
11765
+ }
11766
+ .zx-view-settings__handle[data-placeholder] {
11767
+ visibility: hidden;
11768
+ }
11769
+ button.zx-view-settings__handle {
11770
+ cursor: grab;
11771
+ touch-action: none;
11772
+ -webkit-user-select: none;
11773
+ user-select: none;
11774
+ }
11775
+ .zx-view-settings__handle:hover,
11776
+ .zx-view-settings__hide:hover:not(:disabled) {
11777
+ background: var(--zx-color-bg-hover);
11778
+ color: var(--zx-color-text);
11779
+ }
11780
+ .zx-view-settings__handle:focus-visible,
11781
+ .zx-view-settings__hide:focus-visible {
11782
+ box-shadow: var(--zx-focus-ring);
11783
+ }
11784
+ .zx-view-settings__hide:disabled {
11785
+ color: var(--zx-color-text-placeholder);
11786
+ cursor: default;
11787
+ }
11788
+ .zx-view-settings__lock {
11789
+ display: inline-grid;
11790
+ flex: none;
11791
+ place-items: center;
11792
+ inline-size: var(--zx-control-height);
11793
+ color: var(--zx-color-text-placeholder);
11794
+ }
11795
+ .zx-view-settings__add {
11796
+ flex: none;
11797
+ }
11798
+ .zx-view-settings__row[data-state=grabbed] {
11799
+ outline: 2px solid var(--zx-color-ring);
11800
+ outline-offset: -2px;
11801
+ background: var(--zx-color-bg-selected);
11802
+ }
11803
+ .zx-view-settings[data-dragging=true],
11804
+ .zx-view-settings[data-dragging=true] .zx-view-settings__handle {
11805
+ cursor: grabbing;
11806
+ }
11807
+ .zx-view-settings__row[data-dragging=true] {
11808
+ z-index: 1;
11809
+ background: var(--zx-color-bg-raised);
11810
+ box-shadow: var(--zx-overlay-shadow);
11811
+ }
11812
+ .zx-view-settings__drop-indicator {
11813
+ position: absolute;
11814
+ inset-inline: 0;
11815
+ inset-block-start: 0;
11816
+ z-index: 2;
11817
+ block-size: 2px;
11818
+ margin-block-start: -1px;
11819
+ border-radius: var(--zx-radius-full);
11820
+ background: var(--zx-color-accent);
11821
+ pointer-events: none;
11822
+ }
11823
+ .zx-view-settings__drop-indicator[hidden] {
11824
+ display: none;
11825
+ }
11826
+ .zx-view-settings__empty {
11827
+ margin: 0;
11828
+ padding-block: var(--zx-space-1);
11829
+ color: var(--zx-color-text-muted);
11830
+ font-size: var(--zx-text-sm);
11831
+ }
11832
+ .zx-view-settings__empty[hidden] {
11833
+ display: none;
11834
+ }
11835
+ .zx-view-settings__option {
11836
+ display: inline-flex;
11837
+ align-items: center;
11838
+ gap: var(--zx-space-2);
11839
+ min-inline-size: 0;
11840
+ }
11841
+ .zx-view-settings__option > .zx-icon,
11842
+ .zx-view-settings .zx-select__value-adornment > .zx-icon {
11843
+ flex: none;
11844
+ color: var(--zx-color-text-subtle);
11845
+ }
11846
+ .zx-view-settings__group {
11847
+ inline-size: 100%;
11848
+ }
11849
+ .zx-view-settings__setting {
11850
+ display: grid;
11851
+ grid-template-columns: minmax(6rem, auto) minmax(0, 1fr);
11852
+ align-items: center;
11853
+ gap: var(--zx-space-2);
11854
+ }
11855
+ .zx-view-settings__setting-label {
11856
+ color: var(--zx-color-text-muted);
11857
+ font-size: var(--zx-text-sm);
11858
+ }
11859
+ @container (max-width: 18rem) {
11860
+ .zx-view-settings__setting {
11861
+ grid-template-columns: minmax(0, 1fr);
11862
+ gap: var(--zx-space-1);
11863
+ }
11864
+ }
11865
+ .zx-view-settings__toggle {
11866
+ justify-self: start;
11867
+ }
11868
+ .zx-view-settings__instructions[hidden] {
11869
+ display: none;
11870
+ }
11871
+ .zx-view-settings__sr,
11872
+ .zx-view-settings__status {
11873
+ position: absolute;
11874
+ inline-size: 1px;
11875
+ block-size: 1px;
11876
+ margin: -1px;
11877
+ padding: 0;
11878
+ overflow: hidden;
11879
+ clip-path: inset(50%);
11880
+ white-space: nowrap;
11881
+ border: 0;
11882
+ }
11883
+ @media (prefers-reduced-motion: no-preference) {
11884
+ .zx-view-settings__row,
11885
+ .zx-view-settings__handle,
11886
+ .zx-view-settings__hide {
11887
+ transition:
11888
+ background var(--zx-dur-fast) var(--zx-ease),
11889
+ color var(--zx-dur-fast) var(--zx-ease),
11890
+ box-shadow var(--zx-dur-fast) var(--zx-ease);
11891
+ }
11892
+ .zx-view-settings__drop-indicator {
11893
+ transition: inset-block-start var(--zx-dur-fast) var(--zx-ease);
11894
+ }
11895
+ }
11896
+
10679
11897
  /* src/components/grid/grid.css */
10680
11898
  .zx-table[data-preset=billing-items] tr.zx-grid-billing__summary > td {
10681
11899
  background: var(--zx-color-bg-muted);
@@ -10783,7 +12001,7 @@ button.zx-stat-tile:focus-visible {
10783
12001
  font-weight: inherit;
10784
12002
  }
10785
12003
  .zx-tree__row:focus-visible {
10786
- outline: 0;
12004
+ outline-color: transparent;
10787
12005
  box-shadow: var(--zx-focus-ring);
10788
12006
  }
10789
12007
  .zx-tree__twisty {
@@ -10885,7 +12103,7 @@ button.zx-stat-tile:focus-visible {
10885
12103
  font-weight: var(--zx-weight-semibold);
10886
12104
  }
10887
12105
  .zx-finder__row:focus-visible {
10888
- outline: 0;
12106
+ outline-color: transparent;
10889
12107
  box-shadow: var(--zx-focus-ring);
10890
12108
  }
10891
12109
  .zx-finder__icon {
@@ -11235,8 +12453,8 @@ button.zx-stat-tile:focus-visible {
11235
12453
  .zx-filter__logic,
11236
12454
  .zx-filter__field,
11237
12455
  .zx-filter__operator,
11238
- .zx-filter__value input,
11239
- .zx-filter__value select {
12456
+ .zx-filter__value-control > input,
12457
+ .zx-filter__value > select {
11240
12458
  min-block-size: var(--zx-control-height);
11241
12459
  border: 1px solid var(--zx-color-border-control);
11242
12460
  border-radius: var(--zx-control-radius);
@@ -11362,6 +12580,71 @@ button.zx-stat-tile:focus-visible {
11362
12580
  grid-row: 1 / 3;
11363
12581
  }
11364
12582
  }
12583
+ .zx-filter__choice {
12584
+ display: flex;
12585
+ align-items: center;
12586
+ gap: var(--zx-space-2);
12587
+ min-inline-size: 0;
12588
+ }
12589
+ .zx-filter__choice-icon {
12590
+ display: inline-flex;
12591
+ flex: none;
12592
+ justify-content: center;
12593
+ min-inline-size: var(--zx-space-4);
12594
+ color: var(--zx-color-text-muted);
12595
+ }
12596
+ .zx-filter__choice-label {
12597
+ overflow: hidden;
12598
+ text-overflow: ellipsis;
12599
+ white-space: nowrap;
12600
+ }
12601
+ .zx-filter[data-layout=compact] .zx-filter__children {
12602
+ gap: var(--zx-space-4);
12603
+ }
12604
+ .zx-filter[data-layout=compact] .zx-filter__children > li {
12605
+ position: relative;
12606
+ }
12607
+ .zx-filter__connector {
12608
+ position: absolute;
12609
+ inset-block-start: calc(var(--zx-space-4) / -2);
12610
+ inset-inline-start: var(--zx-space-3);
12611
+ z-index: 1;
12612
+ display: inline-flex;
12613
+ align-items: center;
12614
+ block-size: calc(var(--zx-space-4) + var(--zx-space-1));
12615
+ translate: 0 -50%;
12616
+ margin: 0;
12617
+ border: 1px solid var(--zx-color-border);
12618
+ border-radius: var(--zx-radius-full);
12619
+ background: var(--zx-color-bg-chrome);
12620
+ padding: 0 var(--zx-space-2);
12621
+ color: var(--zx-color-text-muted);
12622
+ font: inherit;
12623
+ font-size: var(--zx-text-xs);
12624
+ font-weight: var(--zx-weight-medium);
12625
+ line-height: 1;
12626
+ }
12627
+ button.zx-filter__connector {
12628
+ cursor: pointer;
12629
+ }
12630
+ button.zx-filter__connector:hover {
12631
+ border-color: var(--zx-color-border-strong);
12632
+ color: var(--zx-color-text);
12633
+ }
12634
+ button.zx-filter__connector:focus-visible {
12635
+ outline-color: transparent;
12636
+ box-shadow: var(--zx-focus-ring);
12637
+ }
12638
+ @media (prefers-reduced-motion: no-preference) {
12639
+ button.zx-filter__connector {
12640
+ transition: border-color var(--zx-dur-fast) var(--zx-ease), color var(--zx-dur-fast) var(--zx-ease);
12641
+ }
12642
+ }
12643
+ @media (forced-colors: active) {
12644
+ .zx-filter__connector {
12645
+ border-color: CanvasText;
12646
+ }
12647
+ }
11365
12648
 
11366
12649
  /* src/components/sort-control/sort-control.css */
11367
12650
  .zx-sort-control {
@@ -11417,7 +12700,7 @@ button.zx-stat-tile:focus-visible {
11417
12700
  font-size: var(--zx-text-sm);
11418
12701
  }
11419
12702
  .zx-pagination__select:focus-visible {
11420
- outline: 0;
12703
+ outline-color: transparent;
11421
12704
  box-shadow: var(--zx-focus-ring);
11422
12705
  }
11423
12706
  .zx-pagination__controls {
@@ -11510,7 +12793,7 @@ button.zx-stepper__control:disabled {
11510
12793
  cursor: default;
11511
12794
  }
11512
12795
  .zx-stepper__control:focus-visible {
11513
- outline: 0;
12796
+ outline-color: transparent;
11514
12797
  box-shadow: var(--zx-focus-ring);
11515
12798
  }
11516
12799
  .zx-stepper__marker {
@@ -11691,7 +12974,7 @@ button.zx-stepper__control:disabled {
11691
12974
  color: var(--zx-color-text);
11692
12975
  }
11693
12976
  .zx-breadcrumb__link:focus-visible {
11694
- outline: 0;
12977
+ outline-color: transparent;
11695
12978
  box-shadow: var(--zx-focus-ring);
11696
12979
  }
11697
12980
  .zx-breadcrumb__current {
@@ -12075,7 +13358,7 @@ button.zx-stepper__control:disabled {
12075
13358
  color: var(--zx-color-text);
12076
13359
  }
12077
13360
  .zx-multi-value-editor__handle:focus-visible {
12078
- outline: none;
13361
+ outline-color: transparent;
12079
13362
  box-shadow: var(--zx-focus-ring);
12080
13363
  }
12081
13364
  .zx-multi-value-editor__handle:disabled {
@@ -12230,10 +13513,10 @@ button.zx-stepper__control:disabled {
12230
13513
  min-inline-size: 0;
12231
13514
  }
12232
13515
  .zx-questionnaire__item:focus {
12233
- outline: none;
13516
+ outline-color: transparent;
12234
13517
  }
12235
13518
  .zx-questionnaire__item:focus-visible {
12236
- outline: none;
13519
+ outline-color: transparent;
12237
13520
  box-shadow: var(--zx-focus-ring);
12238
13521
  border-radius: var(--zx-questionnaire-radius);
12239
13522
  }
@@ -12408,7 +13691,7 @@ button.zx-stepper__control:disabled {
12408
13691
  color: var(--zx-color-text-placeholder);
12409
13692
  }
12410
13693
  .zx-questionnaire__freeform-input:focus-visible {
12411
- outline: none;
13694
+ outline-color: transparent;
12412
13695
  border-color: var(--zx-color-accent);
12413
13696
  box-shadow: var(--zx-focus-ring);
12414
13697
  }
@@ -12425,7 +13708,7 @@ button.zx-stepper__control:disabled {
12425
13708
  gap: var(--zx-space-3);
12426
13709
  }
12427
13710
  .zx-questionnaire__review:focus {
12428
- outline: none;
13711
+ outline-color: transparent;
12429
13712
  }
12430
13713
  .zx-questionnaire__review-title {
12431
13714
  margin: 0;