@zeyos/zx 5.0.0 → 5.3.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 +198 -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 +243 -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 +1472 -133
  50. package/dist/zx.esm.js +7433 -854
  51. package/dist/zx.esm.min.js +8 -8
  52. package/dist/zx.global.js +7433 -854
  53. package/dist/zx.global.min.js +8 -8
  54. package/dist/zx.min.css +1 -1
  55. package/docs/api.json +937 -119
  56. package/docs/llms.md +531 -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 +76 -5
  71. package/src/components/card-view/card-view.js +514 -20
  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 +6 -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;
@@ -2855,6 +2881,7 @@ button.zx-panel__toggle:focus-visible {
2855
2881
  }
2856
2882
  .zx-search__clear,
2857
2883
  .zx-search__submit {
2884
+ flex: none;
2858
2885
  display: inline-grid;
2859
2886
  place-items: center;
2860
2887
  min-block-size: 0;
@@ -2912,6 +2939,33 @@ button.zx-panel__toggle:focus-visible {
2912
2939
  .zx-app-icon[data-shape=circle] {
2913
2940
  border-radius: var(--zx-radius-full);
2914
2941
  }
2942
+ .zx-app-icon[data-tone=blue] {
2943
+ --zx-app-icon-color: var(--zx-color-tone-blue-solid);
2944
+ }
2945
+ .zx-app-icon[data-tone=teal] {
2946
+ --zx-app-icon-color: var(--zx-color-tone-teal-solid);
2947
+ }
2948
+ .zx-app-icon[data-tone=green] {
2949
+ --zx-app-icon-color: var(--zx-color-tone-green-solid);
2950
+ }
2951
+ .zx-app-icon[data-tone=amber] {
2952
+ --zx-app-icon-color: var(--zx-color-tone-amber-solid);
2953
+ }
2954
+ .zx-app-icon[data-tone=orange] {
2955
+ --zx-app-icon-color: var(--zx-color-tone-orange-solid);
2956
+ }
2957
+ .zx-app-icon[data-tone=red] {
2958
+ --zx-app-icon-color: var(--zx-color-tone-red-solid);
2959
+ }
2960
+ .zx-app-icon[data-tone=pink] {
2961
+ --zx-app-icon-color: var(--zx-color-tone-pink-solid);
2962
+ }
2963
+ .zx-app-icon[data-tone=violet] {
2964
+ --zx-app-icon-color: var(--zx-color-tone-violet-solid);
2965
+ }
2966
+ .zx-app-icon[data-tone=slate] {
2967
+ --zx-app-icon-color: var(--zx-color-tone-slate-solid);
2968
+ }
2915
2969
  .zx-app-icon__surface {
2916
2970
  position: absolute;
2917
2971
  z-index: 0;
@@ -2950,7 +3004,7 @@ button.zx-panel__toggle:focus-visible {
2950
3004
  display: none;
2951
3005
  }
2952
3006
  .zx-app-icon[data-selected] .zx-app-icon__surface {
2953
- outline: none;
3007
+ outline-color: transparent;
2954
3008
  box-shadow:
2955
3009
  0 0 0 1px var(--zx-color-bg-page),
2956
3010
  0 0 0 3px var(--zx-app-icon-selected-ring),
@@ -3051,7 +3105,7 @@ button.zx-panel__toggle:focus-visible {
3051
3105
  }
3052
3106
  .zx-app-icon:is(a, button, [role=button]):not(:disabled):not([aria-disabled=true]):focus-visible .zx-app-icon__surface,
3053
3107
  :is(a, button, [role=button]):not(:disabled):not([aria-disabled=true]):focus-visible .zx-app-icon__surface {
3054
- outline: none;
3108
+ outline-color: transparent;
3055
3109
  box-shadow:
3056
3110
  var(--zx-focus-ring),
3057
3111
  var(--zx-app-icon-shadow-hover),
@@ -3173,7 +3227,7 @@ button.zx-panel__toggle:focus-visible {
3173
3227
  flex: 1 1 0;
3174
3228
  min-inline-size: 0;
3175
3229
  border: 0;
3176
- outline: 0;
3230
+ outline-color: transparent;
3177
3231
  background: transparent;
3178
3232
  color: inherit;
3179
3233
  font-size: var(--zx-text-lg);
@@ -4055,6 +4109,153 @@ button.zx-panel__toggle:focus-visible {
4055
4109
  font-size: var(--zx-text-xs);
4056
4110
  }
4057
4111
 
4112
+ /* src/components/workspace-switcher/workspace-switcher.css */
4113
+ .zx-workspace-switcher {
4114
+ --zx-workspace-switcher-tile: calc(var(--zx-control-height) - var(--zx-space-1));
4115
+ display: block;
4116
+ box-sizing: border-box;
4117
+ inline-size: 100%;
4118
+ min-inline-size: 0;
4119
+ }
4120
+ .zx-workspace-switcher .zx-workspace-switcher__trigger {
4121
+ display: grid;
4122
+ grid-template-columns: auto minmax(0, 1fr) auto;
4123
+ align-items: center;
4124
+ justify-content: stretch;
4125
+ gap: var(--zx-space-2);
4126
+ box-sizing: border-box;
4127
+ inline-size: 100%;
4128
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
4129
+ border: 0;
4130
+ border-radius: var(--zx-radius-md);
4131
+ background: transparent;
4132
+ -webkit-backdrop-filter: none;
4133
+ backdrop-filter: none;
4134
+ box-shadow: none;
4135
+ padding-block: var(--zx-space-1);
4136
+ padding-inline: var(--zx-space-1) var(--zx-space-2);
4137
+ color: var(--zx-color-text);
4138
+ font-weight: var(--zx-weight-medium);
4139
+ line-height: 1.3;
4140
+ text-align: start;
4141
+ }
4142
+ .zx-workspace-switcher .zx-workspace-switcher__trigger:is(:hover, [aria-expanded=true]):not(:disabled) {
4143
+ background: var(--zx-color-bg-hover);
4144
+ }
4145
+ .zx-workspace-switcher .zx-workspace-switcher__trigger:active:not(:disabled) {
4146
+ background: var(--zx-color-bg-current);
4147
+ }
4148
+ .zx-workspace-switcher .zx-workspace-switcher__trigger:focus-visible {
4149
+ outline-color: transparent;
4150
+ box-shadow: var(--zx-focus-ring);
4151
+ }
4152
+ .zx-workspace-switcher__tile {
4153
+ display: inline-grid;
4154
+ place-items: center;
4155
+ inline-size: var(--zx-workspace-switcher-tile);
4156
+ block-size: var(--zx-workspace-switcher-tile);
4157
+ }
4158
+ .zx-workspace-switcher__tile[hidden] {
4159
+ display: none;
4160
+ }
4161
+ .zx-workspace-switcher__text {
4162
+ display: grid;
4163
+ min-inline-size: 0;
4164
+ gap: 1px;
4165
+ }
4166
+ .zx-workspace-switcher__name,
4167
+ .zx-workspace-switcher__secondary {
4168
+ overflow: hidden;
4169
+ text-overflow: ellipsis;
4170
+ white-space: nowrap;
4171
+ }
4172
+ .zx-workspace-switcher__name {
4173
+ font-size: var(--zx-text-md);
4174
+ font-weight: var(--zx-weight-semibold);
4175
+ }
4176
+ .zx-workspace-switcher__secondary {
4177
+ color: var(--zx-color-text-muted);
4178
+ font-size: var(--zx-text-xs);
4179
+ font-weight: 400;
4180
+ }
4181
+ .zx-workspace-switcher__secondary[hidden] {
4182
+ display: none;
4183
+ }
4184
+ .zx-workspace-switcher__chevron {
4185
+ display: inline-flex;
4186
+ color: var(--zx-color-text-subtle);
4187
+ }
4188
+ @media (prefers-reduced-motion: no-preference) {
4189
+ .zx-workspace-switcher .zx-workspace-switcher__trigger {
4190
+ transition: background-color var(--zx-dur-fast) var(--zx-ease);
4191
+ }
4192
+ .zx-workspace-switcher__chevron {
4193
+ transition: transform var(--zx-dur-fast) var(--zx-ease);
4194
+ }
4195
+ }
4196
+ .zx-workspace-switcher__trigger[aria-expanded=true] .zx-workspace-switcher__chevron {
4197
+ transform: rotate(180deg);
4198
+ }
4199
+ .zx-workspace-switcher[data-compact=true] {
4200
+ inline-size: fit-content;
4201
+ }
4202
+ .zx-workspace-switcher[data-compact=true] .zx-workspace-switcher__trigger {
4203
+ display: inline-grid;
4204
+ grid-template-columns: auto;
4205
+ place-content: center;
4206
+ inline-size: calc(var(--zx-control-height) + var(--zx-space-2));
4207
+ block-size: calc(var(--zx-control-height) + var(--zx-space-2));
4208
+ padding: 0;
4209
+ }
4210
+ .zx-workspace-switcher[data-compact=true] .zx-workspace-switcher__text,
4211
+ .zx-workspace-switcher[data-compact=true] .zx-workspace-switcher__chevron {
4212
+ display: none;
4213
+ }
4214
+ .zx-workspace-switcher__image {
4215
+ display: block;
4216
+ overflow: hidden;
4217
+ inline-size: var(--zx-workspace-switcher-tile);
4218
+ block-size: var(--zx-workspace-switcher-tile);
4219
+ border-radius: var(--zx-radius-sm);
4220
+ background: var(--zx-color-bg-muted);
4221
+ }
4222
+ .zx-workspace-switcher__image > img {
4223
+ display: block;
4224
+ inline-size: 100%;
4225
+ block-size: 100%;
4226
+ object-fit: cover;
4227
+ }
4228
+ .zx-workspace-switcher__initials {
4229
+ font-weight: var(--zx-weight-semibold);
4230
+ line-height: 1;
4231
+ letter-spacing: 0;
4232
+ }
4233
+ .zx-workspace-switcher__menu {
4234
+ --zx-workspace-switcher-tile: calc(var(--zx-control-height) - var(--zx-space-2));
4235
+ min-inline-size: 240px;
4236
+ }
4237
+ .zx-workspace-switcher__menu .zx-menu-button__leading {
4238
+ inline-size: var(--zx-workspace-switcher-tile);
4239
+ }
4240
+ .zx-workspace-switcher__menu .zx-workspace-switcher__option[aria-checked=true] {
4241
+ background: var(--zx-color-bg-current);
4242
+ }
4243
+ .zx-workspace-switcher__menu .zx-workspace-switcher__option[aria-checked=true]:is(:hover, :focus-visible) {
4244
+ background: var(--zx-color-overlay-hover);
4245
+ }
4246
+ .zx-workspace-switcher__check {
4247
+ display: inline-flex;
4248
+ color: var(--zx-color-accent);
4249
+ }
4250
+ .zx-workspace-switcher__option[aria-checked=false] .zx-workspace-switcher__check {
4251
+ visibility: hidden;
4252
+ }
4253
+ @media (forced-colors: active) {
4254
+ .zx-workspace-switcher .zx-workspace-switcher__trigger:focus-visible {
4255
+ outline: 2px solid Highlight;
4256
+ }
4257
+ }
4258
+
4058
4259
  /* src/components/app-rail/app-rail.css */
4059
4260
  .zx-app-rail {
4060
4261
  display: flex;
@@ -4106,6 +4307,21 @@ button.zx-panel__toggle:focus-visible {
4106
4307
  .zx-app-rail__row {
4107
4308
  display: flex;
4108
4309
  }
4310
+ .zx-app-rail__separator {
4311
+ flex: none;
4312
+ align-self: center;
4313
+ background: var(--zx-color-border-subtle);
4314
+ }
4315
+ .zx-app-rail[data-orientation=vertical] .zx-app-rail__separator {
4316
+ inline-size: var(--zx-space-4);
4317
+ block-size: 1px;
4318
+ margin-block: var(--zx-space-1);
4319
+ }
4320
+ .zx-app-rail[data-orientation=horizontal] .zx-app-rail__separator {
4321
+ inline-size: 1px;
4322
+ block-size: var(--zx-space-4);
4323
+ margin-inline: var(--zx-space-1);
4324
+ }
4109
4325
  .zx-app-rail__item {
4110
4326
  position: relative;
4111
4327
  display: inline-grid;
@@ -4188,6 +4404,13 @@ button.zx-panel__toggle:focus-visible {
4188
4404
  font-weight: var(--zx-weight-semibold);
4189
4405
  line-height: 1.3;
4190
4406
  }
4407
+ .zx-app-rail__flyout-section {
4408
+ padding: var(--zx-space-2) var(--zx-app-rail-pad-x) var(--zx-space-1);
4409
+ color: var(--zx-color-text-muted);
4410
+ font-size: var(--zx-text-xs);
4411
+ font-weight: var(--zx-weight-semibold);
4412
+ line-height: 1.3;
4413
+ }
4191
4414
  .zx-app-rail__flyout-list {
4192
4415
  display: grid;
4193
4416
  gap: var(--zx-app-rail-row-gap);
@@ -4323,75 +4546,548 @@ button.zx-panel__toggle:focus-visible {
4323
4546
  }
4324
4547
  }
4325
4548
 
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);
4549
+ /* src/components/module-bar/module-bar.css */
4550
+ .zx-module-bar {
4551
+ --zx-module-bar-target: calc(var(--zx-control-height) + var(--zx-space-2));
4552
+ --zx-module-bar-tile: calc(var(--zx-control-height) - var(--zx-space-1));
4553
+ --zx-module-bar-gap: var(--zx-space-1);
4554
+ --zx-module-bar-pad: var(--zx-space-2);
4555
+ --zx-module-bar-radius: var(--zx-radius-lg);
4556
+ --zx-module-bar-column: 12rem;
4341
4557
  display: flex;
4558
+ box-sizing: border-box;
4559
+ min-inline-size: 0;
4342
4560
  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);
4561
+ background: var(--zx-color-bg-chrome);
4346
4562
  color: var(--zx-color-text);
4347
4563
  }
4348
- .zx-app-sidebar[data-orientation=horizontal] {
4349
- inline-size: 100%;
4564
+ .zx-module-bar[data-orientation=vertical] {
4565
+ flex-direction: column;
4566
+ inline-size: calc(var(--zx-module-bar-target) + 2 * var(--zx-module-bar-pad));
4567
+ block-size: 100%;
4350
4568
  }
4351
- .zx-app-sidebar[data-orientation=horizontal] > .zx-app-sidebar__rail {
4352
- inline-size: 100%;
4569
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] {
4570
+ inline-size: var(--zx-module-bar-column);
4353
4571
  }
4354
- .zx-app-sidebar__rail.zx-app-rail {
4355
- border: 0;
4572
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] > .zx-module-bar__list {
4573
+ align-items: stretch;
4356
4574
  }
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;
4575
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] > .zx-module-bar__header {
4576
+ align-items: stretch;
4362
4577
  }
4363
- .zx-app-sidebar__expanded[hidden],
4364
- .zx-app-sidebar__rail[hidden] {
4365
- display: none;
4578
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] > .zx-module-bar__footer {
4579
+ align-items: stretch;
4366
4580
  }
4367
- .zx-app-sidebar__header {
4368
- display: grid;
4369
- grid-template-columns: minmax(0, 1fr) auto;
4581
+ .zx-module-bar[data-labels=beside] .zx-module-bar__item {
4582
+ grid-template-columns: var(--zx-module-bar-tile) minmax(0, 1fr) auto;
4583
+ place-content: normal;
4370
4584
  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);
4585
+ justify-items: start;
4586
+ column-gap: var(--zx-space-2);
4587
+ inline-size: 100%;
4588
+ block-size: auto;
4589
+ min-block-size: var(--zx-module-bar-target);
4590
+ padding: var(--zx-space-1) var(--zx-space-2);
4591
+ color: var(--zx-color-text);
4592
+ font-size: var(--zx-text-md);
4593
+ font-weight: 500;
4594
+ line-height: 1.3;
4595
+ text-align: start;
4374
4596
  }
4375
- .zx-app-sidebar__header-content {
4376
- min-inline-size: 0;
4597
+ .zx-module-bar[data-labels=beside] .zx-module-bar__label {
4598
+ text-align: start;
4377
4599
  }
4378
- .zx-app-sidebar .zx-app-sidebar__collapse[hidden] {
4379
- display: none;
4600
+ .zx-module-bar[data-labels=beside] .zx-module-bar__badge {
4601
+ position: static;
4602
+ justify-self: end;
4603
+ box-shadow: none;
4380
4604
  }
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);
4605
+ .zx-module-bar[data-orientation=vertical][data-labels=below] {
4606
+ --zx-module-bar-target: calc(var(--zx-control-height) + var(--zx-space-8));
4385
4607
  }
4386
- .zx-app-sidebar__list,
4387
- .zx-app-sidebar__sublist {
4388
- display: grid;
4389
- gap: var(--zx-app-sidebar-row-gap);
4608
+ .zx-module-bar[data-orientation=horizontal] {
4609
+ flex-direction: row;
4610
+ align-items: center;
4611
+ inline-size: 100%;
4612
+ block-size: calc(var(--zx-module-bar-target) + 2 * var(--zx-space-1));
4613
+ }
4614
+ @media (pointer: coarse) {
4615
+ .zx-module-bar {
4616
+ --zx-module-bar-target: max(40px, calc(var(--zx-control-height) + var(--zx-space-2)));
4617
+ }
4618
+ }
4619
+ .zx-module-bar__header,
4620
+ .zx-module-bar__footer {
4621
+ display: flex;
4622
+ flex: none;
4623
+ align-items: center;
4624
+ justify-content: center;
4625
+ gap: var(--zx-module-bar-gap);
4626
+ padding: var(--zx-module-bar-pad);
4627
+ }
4628
+ .zx-module-bar[data-orientation=vertical] > .zx-module-bar__header,
4629
+ .zx-module-bar[data-orientation=vertical] > .zx-module-bar__footer {
4630
+ flex-direction: column;
4631
+ }
4632
+ .zx-module-bar[data-orientation=horizontal] > .zx-module-bar__header,
4633
+ .zx-module-bar[data-orientation=horizontal] > .zx-module-bar__footer {
4634
+ padding-block: 0;
4635
+ }
4636
+ .zx-module-bar__header[hidden],
4637
+ .zx-module-bar__footer[hidden] {
4638
+ display: none;
4639
+ }
4640
+ .zx-module-bar__list {
4641
+ display: flex;
4642
+ flex: 1;
4643
+ gap: var(--zx-module-bar-gap);
4644
+ min-inline-size: 0;
4645
+ min-block-size: 0;
4646
+ margin: 0;
4647
+ padding: var(--zx-space-1);
4648
+ overflow: hidden;
4649
+ list-style: none;
4650
+ }
4651
+ .zx-module-bar[data-orientation=vertical] > .zx-module-bar__list {
4652
+ flex-direction: column;
4653
+ align-items: center;
4654
+ }
4655
+ .zx-module-bar[data-orientation=horizontal] > .zx-module-bar__list {
4656
+ flex-direction: row;
4657
+ align-items: center;
4658
+ }
4659
+ .zx-module-bar[data-all-modules=never] > .zx-module-bar__list {
4660
+ overflow: auto;
4661
+ scrollbar-width: none;
4662
+ }
4663
+ .zx-module-bar__row {
4664
+ display: flex;
4665
+ flex: none;
4666
+ }
4667
+ .zx-module-bar__row[hidden],
4668
+ .zx-module-bar__heading[hidden] {
4669
+ display: none;
4670
+ }
4671
+ .zx-module-bar__heading {
4672
+ position: relative;
4673
+ flex: none;
4674
+ align-self: center;
4675
+ background: var(--zx-color-border-subtle);
4676
+ }
4677
+ .zx-module-bar[data-orientation=vertical] .zx-module-bar__heading {
4678
+ inline-size: var(--zx-space-4);
4679
+ block-size: 1px;
4680
+ margin-block: var(--zx-space-1);
4681
+ }
4682
+ .zx-module-bar[data-orientation=horizontal] .zx-module-bar__heading {
4683
+ inline-size: 1px;
4684
+ block-size: var(--zx-space-4);
4685
+ margin-inline: var(--zx-space-1);
4686
+ }
4687
+ .zx-module-bar:not([data-labels=beside]) .zx-module-bar__heading[data-leading] {
4688
+ display: none;
4689
+ }
4690
+ .zx-module-bar__heading-label {
4691
+ position: absolute;
4692
+ inline-size: 1px;
4693
+ block-size: 1px;
4694
+ overflow: hidden;
4695
+ clip-path: inset(50%);
4696
+ white-space: nowrap;
4697
+ }
4698
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] .zx-module-bar__heading {
4699
+ align-self: stretch;
4700
+ inline-size: auto;
4701
+ block-size: auto;
4702
+ margin-block: var(--zx-space-2) 0;
4703
+ padding: var(--zx-space-1) var(--zx-space-2);
4704
+ background: none;
4705
+ }
4706
+ .zx-module-bar[data-orientation=vertical][data-labels=beside] .zx-module-bar__heading[data-leading] {
4707
+ margin-block-start: 0;
4708
+ }
4709
+ .zx-module-bar[data-labels=beside] .zx-module-bar__heading-label {
4710
+ position: static;
4711
+ inline-size: auto;
4712
+ block-size: auto;
4713
+ overflow: visible;
4714
+ clip-path: none;
4715
+ color: var(--zx-color-text-muted);
4716
+ font-size: var(--zx-text-xs);
4717
+ font-weight: var(--zx-weight-semibold);
4718
+ line-height: 1.3;
4719
+ white-space: normal;
4720
+ }
4721
+ .zx-module-bar__item {
4722
+ position: relative;
4723
+ display: grid;
4724
+ place-content: center;
4725
+ justify-items: center;
4726
+ box-sizing: border-box;
4727
+ inline-size: var(--zx-module-bar-target);
4728
+ block-size: var(--zx-module-bar-target);
4729
+ border: 0;
4730
+ border-radius: var(--zx-module-bar-radius);
4731
+ background: transparent;
4732
+ padding: 0;
4733
+ color: var(--zx-color-text-muted);
4734
+ font: inherit;
4735
+ text-decoration: none;
4736
+ cursor: pointer;
4737
+ }
4738
+ .zx-module-bar[data-labels=below] .zx-module-bar__item {
4739
+ align-content: start;
4740
+ gap: var(--zx-space-1);
4741
+ block-size: auto;
4742
+ min-block-size: calc(var(--zx-module-bar-tile) + 2lh + var(--zx-space-3));
4743
+ padding: var(--zx-space-1) 2px;
4744
+ font-size: var(--zx-text-xs);
4745
+ line-height: 1.2;
4746
+ }
4747
+ .zx-module-bar__item:hover {
4748
+ background: var(--zx-color-bg-hover);
4749
+ color: var(--zx-color-text);
4750
+ }
4751
+ .zx-module-bar__item:focus-visible {
4752
+ outline-color: transparent;
4753
+ box-shadow: var(--zx-focus-ring);
4754
+ }
4755
+ .zx-module-bar[data-menus=flyout] .zx-module-bar__item[aria-current],
4756
+ .zx-module-bar[data-menus=none] .zx-module-bar__item[aria-expanded=true],
4757
+ .zx-module-bar[data-menus=none]:not(:has(.zx-module-bar__item[aria-expanded=true])) .zx-module-bar__item[aria-current] {
4758
+ background: var(--zx-color-bg-current);
4759
+ color: var(--zx-color-text);
4760
+ }
4761
+ .zx-module-bar__item[aria-current],
4762
+ .zx-module-bar__item[data-module-bar-more][aria-expanded=true],
4763
+ .zx-module-bar[data-menus=flyout] .zx-module-bar__item[aria-expanded=true] {
4764
+ color: var(--zx-color-text);
4765
+ }
4766
+ .zx-module-bar[data-menus=flyout] .zx-module-bar__item[aria-expanded=true]:not([aria-current]),
4767
+ .zx-module-bar__item[data-module-bar-more][aria-expanded=true] {
4768
+ background: var(--zx-color-bg-hover);
4769
+ }
4770
+ .zx-module-bar__item[aria-current] .zx-module-bar__label,
4771
+ .zx-module-bar[data-menus=none] .zx-module-bar__item[aria-expanded=true] .zx-module-bar__label {
4772
+ font-weight: var(--zx-weight-semibold);
4773
+ }
4774
+ .zx-module-bar__item[aria-disabled=true],
4775
+ .zx-module-bar__entry[aria-disabled=true] {
4776
+ color: var(--zx-color-text-muted);
4777
+ cursor: not-allowed;
4778
+ }
4779
+ .zx-module-bar__item[aria-disabled=true] .zx-module-bar__tile,
4780
+ .zx-module-bar__entry[aria-disabled=true] .zx-module-bar__tile {
4781
+ opacity: .55;
4782
+ }
4783
+ .zx-module-bar__item[aria-disabled=true]:hover,
4784
+ .zx-module-bar__entry[aria-disabled=true]:hover {
4785
+ background: transparent;
4786
+ }
4787
+ .zx-module-bar__label {
4788
+ max-inline-size: 100%;
4789
+ hyphens: auto;
4790
+ overflow-wrap: break-word;
4791
+ text-align: center;
4792
+ }
4793
+ .zx-module-bar__tile {
4794
+ --zx-module-bar-fill: transparent;
4795
+ --zx-module-bar-ink: currentColor;
4796
+ display: grid;
4797
+ flex: none;
4798
+ place-items: center;
4799
+ inline-size: var(--zx-module-bar-tile);
4800
+ block-size: var(--zx-module-bar-tile);
4801
+ border-radius: var(--zx-radius-lg);
4802
+ background: var(--zx-module-bar-fill);
4803
+ color: var(--zx-module-bar-ink);
4804
+ font-size: calc(var(--zx-module-bar-tile) * .58);
4805
+ line-height: 1;
4806
+ }
4807
+ .zx-module-bar__initial {
4808
+ font-size: .9em;
4809
+ font-weight: var(--zx-weight-semibold);
4810
+ }
4811
+ .zx-module-bar__tile[data-appearance=tint][data-color] {
4812
+ --zx-module-bar-fill: color-mix(in srgb, var(--zx-module-bar-color) 16%, var(--zx-color-bg-surface));
4813
+ --zx-module-bar-ink: color-mix(in srgb, var(--zx-module-bar-color) 70%, var(--zx-color-text));
4814
+ }
4815
+ .zx-module-bar__tile[data-appearance=tint][data-tone=blue] {
4816
+ --zx-module-bar-fill: var(--zx-color-tone-blue-bg);
4817
+ --zx-module-bar-ink: var(--zx-color-tone-blue-fg);
4818
+ }
4819
+ .zx-module-bar__tile[data-appearance=tint][data-tone=teal] {
4820
+ --zx-module-bar-fill: var(--zx-color-tone-teal-bg);
4821
+ --zx-module-bar-ink: var(--zx-color-tone-teal-fg);
4822
+ }
4823
+ .zx-module-bar__tile[data-appearance=tint][data-tone=green] {
4824
+ --zx-module-bar-fill: var(--zx-color-tone-green-bg);
4825
+ --zx-module-bar-ink: var(--zx-color-tone-green-fg);
4826
+ }
4827
+ .zx-module-bar__tile[data-appearance=tint][data-tone=amber] {
4828
+ --zx-module-bar-fill: var(--zx-color-tone-amber-bg);
4829
+ --zx-module-bar-ink: var(--zx-color-tone-amber-fg);
4830
+ }
4831
+ .zx-module-bar__tile[data-appearance=tint][data-tone=orange] {
4832
+ --zx-module-bar-fill: var(--zx-color-tone-orange-bg);
4833
+ --zx-module-bar-ink: var(--zx-color-tone-orange-fg);
4834
+ }
4835
+ .zx-module-bar__tile[data-appearance=tint][data-tone=red] {
4836
+ --zx-module-bar-fill: var(--zx-color-tone-red-bg);
4837
+ --zx-module-bar-ink: var(--zx-color-tone-red-fg);
4838
+ }
4839
+ .zx-module-bar__tile[data-appearance=tint][data-tone=pink] {
4840
+ --zx-module-bar-fill: var(--zx-color-tone-pink-bg);
4841
+ --zx-module-bar-ink: var(--zx-color-tone-pink-fg);
4842
+ }
4843
+ .zx-module-bar__tile[data-appearance=tint][data-tone=violet] {
4844
+ --zx-module-bar-fill: var(--zx-color-tone-violet-bg);
4845
+ --zx-module-bar-ink: var(--zx-color-tone-violet-fg);
4846
+ }
4847
+ .zx-module-bar__tile[data-appearance=tint][data-tone=slate] {
4848
+ --zx-module-bar-fill: var(--zx-color-tone-slate-bg);
4849
+ --zx-module-bar-ink: var(--zx-color-tone-slate-fg);
4850
+ }
4851
+ .zx-module-bar__tile[data-appearance=solid] {
4852
+ font-size: inherit;
4853
+ }
4854
+ .zx-module-bar__tile[data-appearance=plain] {
4855
+ --zx-module-bar-ink: currentColor;
4856
+ }
4857
+ .zx-module-bar__badge {
4858
+ position: absolute;
4859
+ inset-block-start: 0;
4860
+ inset-inline-end: 0;
4861
+ min-inline-size: var(--zx-space-4);
4862
+ block-size: var(--zx-space-4);
4863
+ border-radius: var(--zx-radius-full);
4864
+ background: var(--zx-color-accent);
4865
+ box-shadow: 0 0 0 2px var(--zx-color-bg-chrome);
4866
+ box-sizing: border-box;
4867
+ padding-inline: var(--zx-space-1);
4868
+ color: var(--zx-color-on-accent);
4869
+ font-size: var(--zx-text-xs);
4870
+ font-variant-numeric: tabular-nums;
4871
+ font-weight: var(--zx-weight-semibold);
4872
+ line-height: var(--zx-space-4);
4873
+ text-align: center;
4874
+ }
4875
+ .zx-module-bar__badge[data-zx-badge=dot] {
4876
+ min-inline-size: 0;
4877
+ inline-size: var(--zx-space-2);
4878
+ block-size: var(--zx-space-2);
4879
+ padding: 0;
4880
+ font-size: 0;
4881
+ line-height: 0;
4882
+ }
4883
+ .zx-module-bar__popover {
4884
+ --zx-module-bar-tile: calc(var(--zx-control-height) + var(--zx-space-1));
4885
+ }
4886
+ .zx-dropdown.zx-module-bar__popover {
4887
+ inline-size: min(26rem, calc(100vw - 2 * var(--zx-space-3)));
4888
+ max-block-size: min(34rem, calc(100vh - 2 * var(--zx-space-6)));
4889
+ overflow: auto;
4890
+ padding: var(--zx-space-2);
4891
+ }
4892
+ .zx-module-bar__catalogue {
4893
+ display: grid;
4894
+ gap: var(--zx-space-1);
4895
+ }
4896
+ .zx-module-bar__filter {
4897
+ box-sizing: border-box;
4898
+ inline-size: 100%;
4899
+ block-size: var(--zx-control-height);
4900
+ margin-block-end: var(--zx-space-1);
4901
+ border: 1px solid var(--zx-color-border-control);
4902
+ border-radius: var(--zx-control-radius);
4903
+ background: var(--zx-color-bg-control);
4904
+ padding-inline: var(--zx-control-pad-x);
4905
+ color: var(--zx-color-text);
4906
+ font: inherit;
4907
+ font-size: var(--zx-control-font-size);
4908
+ }
4909
+ .zx-module-bar__filter::placeholder {
4910
+ color: var(--zx-color-text-placeholder);
4911
+ }
4912
+ .zx-module-bar__filter:focus-visible {
4913
+ outline-color: transparent;
4914
+ border-color: var(--zx-color-accent);
4915
+ box-shadow: var(--zx-focus-ring);
4916
+ }
4917
+ .zx-module-bar__group[hidden] {
4918
+ display: none;
4919
+ }
4920
+ .zx-module-bar__group-label {
4921
+ padding: var(--zx-space-2) var(--zx-space-2) var(--zx-space-1);
4922
+ color: var(--zx-color-text-muted);
4923
+ font-size: var(--zx-text-xs);
4924
+ font-weight: var(--zx-weight-semibold);
4925
+ }
4926
+ .zx-module-bar__grid {
4927
+ display: grid;
4928
+ grid-template-columns: repeat(auto-fill, minmax(5.5rem, 1fr));
4929
+ gap: var(--zx-space-1);
4930
+ margin: 0;
4931
+ padding: 0;
4932
+ list-style: none;
4933
+ }
4934
+ .zx-module-bar__grid > li {
4935
+ display: flex;
4936
+ }
4937
+ .zx-module-bar__grid > li[hidden] {
4938
+ display: none;
4939
+ }
4940
+ .zx-module-bar__entry {
4941
+ position: relative;
4942
+ display: grid;
4943
+ align-content: start;
4944
+ justify-items: center;
4945
+ gap: var(--zx-space-1);
4946
+ box-sizing: border-box;
4947
+ inline-size: 100%;
4948
+ border: 0;
4949
+ border-radius: var(--zx-radius-md);
4950
+ background: transparent;
4951
+ padding: var(--zx-space-2) var(--zx-space-1);
4952
+ color: var(--zx-color-text);
4953
+ font: inherit;
4954
+ font-size: var(--zx-text-sm);
4955
+ line-height: 1.25;
4956
+ text-align: center;
4957
+ text-decoration: none;
4958
+ cursor: pointer;
4959
+ }
4960
+ .zx-module-bar__entry:hover {
4961
+ background: var(--zx-color-bg-hover);
4962
+ }
4963
+ .zx-module-bar__entry:focus-visible {
4964
+ outline-color: transparent;
4965
+ box-shadow: var(--zx-focus-ring);
4966
+ }
4967
+ .zx-module-bar__entry[aria-current] {
4968
+ background: var(--zx-color-bg-current);
4969
+ font-weight: var(--zx-weight-semibold);
4970
+ }
4971
+ .zx-module-bar__entry-label {
4972
+ max-inline-size: 100%;
4973
+ hyphens: auto;
4974
+ overflow-wrap: break-word;
4975
+ }
4976
+ .zx-module-bar__entry-badge {
4977
+ color: var(--zx-color-text-muted);
4978
+ font-size: var(--zx-text-xs);
4979
+ font-variant-numeric: tabular-nums;
4980
+ font-weight: 500;
4981
+ }
4982
+ .zx-module-bar__empty {
4983
+ margin: 0;
4984
+ padding: var(--zx-space-4) var(--zx-space-2);
4985
+ color: var(--zx-color-text-muted);
4986
+ font-size: var(--zx-text-sm);
4987
+ text-align: center;
4988
+ }
4989
+ .zx-module-bar__empty[hidden] {
4990
+ display: none;
4991
+ }
4992
+ @media (prefers-reduced-motion: no-preference) {
4993
+ .zx-module-bar__item,
4994
+ .zx-module-bar__entry {
4995
+ transition:
4996
+ background-color var(--zx-dur-fast) var(--zx-ease),
4997
+ color var(--zx-dur-fast) var(--zx-ease),
4998
+ box-shadow var(--zx-dur-fast) var(--zx-ease);
4999
+ }
5000
+ .zx-module-bar__item:active,
5001
+ .zx-module-bar__entry:active {
5002
+ transform: scale(.96);
5003
+ }
5004
+ }
5005
+ @media (forced-colors: active) {
5006
+ .zx-module-bar__item[aria-current],
5007
+ .zx-module-bar[data-menus=none] .zx-module-bar__item[aria-expanded=true],
5008
+ .zx-module-bar__entry[aria-current] {
5009
+ background: Highlight;
5010
+ color: HighlightText;
5011
+ forced-color-adjust: none;
5012
+ }
5013
+ .zx-module-bar__tile {
5014
+ outline: 1px solid CanvasText;
5015
+ }
5016
+ .zx-module-bar__badge {
5017
+ border: 1px solid CanvasText;
5018
+ }
5019
+ }
5020
+
5021
+ /* src/components/app-sidebar/app-sidebar.css */
5022
+ .zx-app-sidebar {
5023
+ --zx-app-sidebar-gutter: var(--zx-space-2);
5024
+ --zx-app-sidebar-icon: var(--zx-space-6);
5025
+ --zx-app-sidebar-item-gap: var(--zx-space-2);
5026
+ --zx-app-sidebar-item-height: var(--zx-control-height);
5027
+ --zx-app-sidebar-pad-x: var(--zx-space-2);
5028
+ --zx-app-sidebar-row-gap: 2px;
5029
+ --zx-app-sidebar-group-gap: var(--zx-space-3);
5030
+ --zx-app-sidebar-indent: var(--zx-space-3);
5031
+ --zx-app-sidebar-icon-indent: var(--zx-space-4);
5032
+ --zx-app-sidebar-radius: var(--zx-radius-md);
5033
+ --zx-app-sidebar-hover: var(--zx-color-bg-hover);
5034
+ --zx-app-sidebar-current: var(--zx-color-bg-current);
5035
+ --zx-app-sidebar-press: color-mix(in srgb, var(--zx-color-text) 12%, transparent);
5036
+ display: flex;
5037
+ min-block-size: 0;
5038
+ border: 1px solid var(--zx-color-glass-border);
5039
+ background: var(--zx-color-glass-chrome);
5040
+ box-shadow: var(--zx-glass-chrome-shadow);
5041
+ color: var(--zx-color-text);
5042
+ }
5043
+ .zx-app-sidebar[data-orientation=horizontal] {
5044
+ inline-size: 100%;
5045
+ }
5046
+ .zx-app-sidebar[data-orientation=horizontal] > .zx-app-sidebar__rail {
5047
+ inline-size: 100%;
5048
+ }
5049
+ .zx-app-sidebar__rail.zx-app-rail {
5050
+ border: 0;
5051
+ }
5052
+ .zx-app-sidebar__expanded {
5053
+ display: grid;
5054
+ grid-template-rows: auto minmax(0, 1fr) auto;
5055
+ inline-size: min(280px, 100vw);
5056
+ min-block-size: 0;
5057
+ }
5058
+ .zx-app-sidebar__expanded[hidden],
5059
+ .zx-app-sidebar__rail[hidden] {
5060
+ display: none;
5061
+ }
5062
+ .zx-app-sidebar__header {
5063
+ display: grid;
5064
+ grid-template-columns: minmax(0, 1fr) auto;
5065
+ align-items: center;
5066
+ gap: var(--zx-space-2);
5067
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-4));
5068
+ padding: var(--zx-space-2) var(--zx-space-3);
5069
+ }
5070
+ .zx-app-sidebar__header-content {
5071
+ min-inline-size: 0;
5072
+ }
5073
+ .zx-app-sidebar .zx-app-sidebar__collapse[hidden] {
5074
+ display: none;
5075
+ }
5076
+ .zx-app-sidebar__nav {
5077
+ min-block-size: 0;
5078
+ overflow: auto;
5079
+ padding: var(--zx-space-2) var(--zx-app-sidebar-gutter) var(--zx-space-3);
5080
+ }
5081
+ .zx-app-sidebar__list,
5082
+ .zx-app-sidebar__sublist {
5083
+ display: grid;
5084
+ gap: var(--zx-app-sidebar-row-gap);
4390
5085
  margin: 0;
4391
5086
  padding: 0;
4392
5087
  list-style: none;
4393
5088
  }
4394
- .zx-app-sidebar__list:not(:has(> .zx-app-sidebar__row > .zx-app-sidebar__item .zx-app-sidebar__item-icon)),
5089
+ .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)),
5090
+ .zx-app-sidebar__section-list:not(:has(> .zx-app-sidebar__row > .zx-app-sidebar__item .zx-app-sidebar__item-icon)),
4395
5091
  .zx-app-sidebar__sublist:not(:has(> .zx-app-sidebar__row > .zx-app-sidebar__item .zx-app-sidebar__item-icon)) {
4396
5092
  --zx-app-sidebar-icon: 0px;
4397
5093
  --zx-app-sidebar-item-gap: 0px;
@@ -4433,6 +5129,43 @@ button.zx-panel__toggle:focus-visible {
4433
5129
  .zx-app-sidebar__list > .zx-app-sidebar__row:first-child {
4434
5130
  margin-block-start: 0;
4435
5131
  }
5132
+ .zx-app-sidebar__section {
5133
+ list-style: none;
5134
+ }
5135
+ .zx-app-sidebar__section + .zx-app-sidebar__section,
5136
+ .zx-app-sidebar__section + .zx-app-sidebar__row,
5137
+ .zx-app-sidebar__row + .zx-app-sidebar__section {
5138
+ margin-block-start: var(--zx-app-sidebar-group-gap);
5139
+ }
5140
+ .zx-app-sidebar__section-header {
5141
+ display: flex;
5142
+ align-items: center;
5143
+ justify-content: space-between;
5144
+ gap: var(--zx-space-2);
5145
+ min-block-size: calc(var(--zx-control-height) - var(--zx-space-1));
5146
+ padding-inline: var(--zx-app-sidebar-pad-x) var(--zx-space-1);
5147
+ color: var(--zx-color-text-muted);
5148
+ font-size: var(--zx-text-xs);
5149
+ font-weight: var(--zx-weight-semibold);
5150
+ line-height: 1.3;
5151
+ }
5152
+ .zx-app-sidebar__section-label {
5153
+ min-inline-size: 0;
5154
+ overflow-wrap: break-word;
5155
+ }
5156
+ .zx-app-sidebar__section-actions {
5157
+ display: inline-flex;
5158
+ flex: none;
5159
+ align-items: center;
5160
+ gap: var(--zx-space-1);
5161
+ }
5162
+ .zx-app-sidebar__section-list {
5163
+ display: grid;
5164
+ gap: var(--zx-app-sidebar-row-gap);
5165
+ margin: 0;
5166
+ padding: 0;
5167
+ list-style: none;
5168
+ }
4436
5169
  .zx-app-sidebar__item {
4437
5170
  position: relative;
4438
5171
  display: grid;
@@ -4541,6 +5274,147 @@ button.zx-panel__toggle:focus-visible {
4541
5274
  .zx-app-sidebar__rail-header {
4542
5275
  display: grid;
4543
5276
  gap: var(--zx-space-1);
5277
+ justify-items: center;
5278
+ }
5279
+ .zx-app-sidebar__modules {
5280
+ display: flex;
5281
+ min-inline-size: 0;
5282
+ min-block-size: 0;
5283
+ }
5284
+ .zx-app-sidebar[data-side=right] .zx-app-sidebar__modules {
5285
+ flex-direction: row-reverse;
5286
+ }
5287
+ .zx-app-sidebar__strip.zx-module-bar {
5288
+ background: transparent;
5289
+ }
5290
+ .zx-app-sidebar__modules > .zx-app-sidebar__strip {
5291
+ border-inline-end: 1px solid var(--zx-color-border-subtle);
5292
+ }
5293
+ .zx-app-sidebar[data-side=right] .zx-app-sidebar__modules > .zx-app-sidebar__strip {
5294
+ border-inline-end: 0;
5295
+ border-inline-start: 1px solid var(--zx-color-border-subtle);
5296
+ }
5297
+ .zx-app-sidebar[data-layout=modules][data-orientation=horizontal] > .zx-app-sidebar__strip {
5298
+ inline-size: 100%;
5299
+ }
5300
+ .zx-app-sidebar__strip-foot {
5301
+ display: grid;
5302
+ justify-items: center;
5303
+ gap: var(--zx-space-2);
5304
+ }
5305
+ .zx-app-sidebar__strip[data-labels=beside] .zx-app-sidebar__strip-foot {
5306
+ justify-items: stretch;
5307
+ 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);
5308
+ }
5309
+ .zx-app-sidebar__strip[data-labels=beside] .zx-app-sidebar__rail-header {
5310
+ justify-items: stretch;
5311
+ }
5312
+ .zx-app-sidebar__presentation {
5313
+ display: inline-grid;
5314
+ justify-self: center;
5315
+ gap: 2px;
5316
+ border-radius: var(--zx-radius-md);
5317
+ background: var(--zx-color-bg-hover);
5318
+ padding: 2px;
5319
+ }
5320
+ .zx-app-sidebar__strip[data-labels=beside] .zx-app-sidebar__presentation {
5321
+ grid-auto-flow: column;
5322
+ justify-self: start;
5323
+ }
5324
+ .zx-app-sidebar__presentation-option {
5325
+ display: grid;
5326
+ place-items: center;
5327
+ inline-size: var(--zx-space-6);
5328
+ block-size: var(--zx-space-6);
5329
+ border: 0;
5330
+ border-radius: var(--zx-radius-sm);
5331
+ background: transparent;
5332
+ padding: 0;
5333
+ color: var(--zx-color-text-muted);
5334
+ cursor: pointer;
5335
+ }
5336
+ .zx-app-sidebar__presentation-option:hover {
5337
+ color: var(--zx-color-text);
5338
+ }
5339
+ .zx-app-sidebar__presentation-option[aria-checked=true] {
5340
+ background: var(--zx-color-bg-surface);
5341
+ box-shadow: 0 0 0 1px var(--zx-color-border-subtle);
5342
+ color: var(--zx-color-text);
5343
+ }
5344
+ .zx-app-sidebar__presentation-option:focus-visible {
5345
+ outline-color: transparent;
5346
+ box-shadow: var(--zx-focus-ring);
5347
+ }
5348
+ .zx-app-sidebar__presentation-glyph {
5349
+ display: flex;
5350
+ gap: 1px;
5351
+ box-sizing: border-box;
5352
+ inline-size: 16px;
5353
+ block-size: 12px;
5354
+ border: 1.5px solid currentColor;
5355
+ border-radius: 2px;
5356
+ padding: 1px;
5357
+ }
5358
+ .zx-app-sidebar__presentation-strip,
5359
+ .zx-app-sidebar__presentation-panel {
5360
+ border-radius: 1px;
5361
+ background: currentColor;
5362
+ }
5363
+ .zx-app-sidebar__presentation-strip {
5364
+ flex: 0 0 2px;
5365
+ }
5366
+ .zx-app-sidebar__presentation-panel {
5367
+ flex: 0 0 4px;
5368
+ opacity: .5;
5369
+ }
5370
+ .zx-app-sidebar__presentation-glyph[data-presentation=expanded] > .zx-app-sidebar__presentation-strip {
5371
+ flex-basis: 4px;
5372
+ }
5373
+ .zx-app-sidebar__presentation-glyph[data-presentation=collapsed] > .zx-app-sidebar__presentation-panel {
5374
+ display: none;
5375
+ }
5376
+ @media (forced-colors: active) {
5377
+ .zx-app-sidebar__presentation-option[aria-checked=true] {
5378
+ background: Highlight;
5379
+ color: HighlightText;
5380
+ forced-color-adjust: none;
5381
+ }
5382
+ }
5383
+ .zx-app-sidebar__panel {
5384
+ display: grid;
5385
+ grid-template-rows: auto minmax(0, 1fr) auto;
5386
+ inline-size: min(14rem, 100vw - var(--zx-control-height) * 3);
5387
+ min-block-size: 0;
5388
+ }
5389
+ .zx-app-sidebar__panel-title {
5390
+ color: var(--zx-color-text);
5391
+ font-size: var(--zx-text-md);
5392
+ font-weight: var(--zx-weight-semibold);
5393
+ line-height: 1.3;
5394
+ overflow-wrap: break-word;
5395
+ }
5396
+ .zx-app-sidebar__panel-body {
5397
+ display: grid;
5398
+ grid-auto-rows: max-content;
5399
+ align-content: start;
5400
+ min-block-size: 0;
5401
+ overflow: auto;
5402
+ }
5403
+ .zx-app-sidebar__panel-body > .zx-app-sidebar__nav {
5404
+ overflow: visible;
5405
+ min-block-size: auto;
5406
+ }
5407
+ .zx-app-sidebar__panel-body > [hidden] {
5408
+ display: none;
5409
+ }
5410
+ .zx-app-sidebar__panel-lead {
5411
+ display: grid;
5412
+ gap: var(--zx-space-2);
5413
+ padding: var(--zx-space-1) var(--zx-space-3) 0;
5414
+ }
5415
+ .zx-app-sidebar__panel-content {
5416
+ min-inline-size: 0;
5417
+ padding: 0 var(--zx-app-sidebar-gutter) var(--zx-space-3);
4544
5418
  }
4545
5419
  .zx-app-sidebar__rail .zx-app-rail__item {
4546
5420
  color: var(--zx-color-text-muted);
@@ -4597,12 +5471,16 @@ button.zx-panel__toggle:focus-visible {
4597
5471
  transform: scale(.985);
4598
5472
  }
4599
5473
  .zx-app-sidebar__expanded,
4600
- .zx-app-sidebar__rail {
5474
+ .zx-app-sidebar__rail,
5475
+ .zx-app-sidebar__panel {
4601
5476
  animation: zx-app-sidebar-mode var(--zx-dur-base) var(--zx-ease);
4602
5477
  }
4603
5478
  .zx-app-sidebar__sublist[data-branch-motion=expand] {
4604
5479
  animation: zx-app-sidebar-branch var(--zx-dur-base) var(--zx-ease);
4605
5480
  }
5481
+ .zx-app-sidebar__panel-body[data-module-motion=enter] {
5482
+ animation: zx-app-sidebar-mode var(--zx-dur-base) var(--zx-ease);
5483
+ }
4606
5484
  }
4607
5485
  @keyframes zx-app-sidebar-mode {
4608
5486
  from {
@@ -4820,7 +5698,7 @@ button.zx-panel__toggle:focus-visible {
4820
5698
  padding: var(--zx-space-5);
4821
5699
  }
4822
5700
  .zx-modal:focus {
4823
- outline: none;
5701
+ outline-color: transparent;
4824
5702
  }
4825
5703
  .zx-modal:focus-visible {
4826
5704
  outline: 2px solid var(--zx-color-ring);
@@ -5119,7 +5997,7 @@ body:has(.zx-modal:modal) {
5119
5997
  opacity: 1;
5120
5998
  }
5121
5999
  .zx-sheet__handle:focus-visible {
5122
- outline: none;
6000
+ outline-color: transparent;
5123
6001
  box-shadow: var(--zx-focus-ring);
5124
6002
  }
5125
6003
  .zx-sheet[data-side=start] > .zx-sheet__handle,
@@ -5373,7 +6251,7 @@ body:has(.zx-modal:modal) {
5373
6251
  background: var(--zx-color-accent);
5374
6252
  }
5375
6253
  .zx-split-view__divider:focus-visible {
5376
- outline: 0;
6254
+ outline-color: transparent;
5377
6255
  box-shadow: var(--zx-focus-ring);
5378
6256
  z-index: 1;
5379
6257
  }
@@ -5484,7 +6362,7 @@ body:has(.zx-modal:modal) {
5484
6362
  visibility: hidden;
5485
6363
  }
5486
6364
  .zx-dock__toggle:focus-visible {
5487
- outline: none;
6365
+ outline-color: transparent;
5488
6366
  box-shadow: var(--zx-focus-ring);
5489
6367
  }
5490
6368
  .zx-dock__chevron {
@@ -5538,7 +6416,7 @@ body:has(.zx-modal:modal) {
5538
6416
  font-weight: var(--zx-control-font-weight);
5539
6417
  }
5540
6418
  .zx-dock__tab:focus-visible {
5541
- outline: none;
6419
+ outline-color: transparent;
5542
6420
  box-shadow: var(--zx-focus-ring);
5543
6421
  }
5544
6422
  .zx-dock__body {
@@ -5560,7 +6438,8 @@ body:has(.zx-modal:modal) {
5560
6438
  block-size: 100%;
5561
6439
  }
5562
6440
  .zx-dock__panel:focus-visible {
5563
- outline: none;
6441
+ outline-color: transparent;
6442
+ outline-offset: -2px;
5564
6443
  box-shadow: inset var(--zx-focus-ring);
5565
6444
  }
5566
6445
  .zx-dock__divider {
@@ -5599,7 +6478,7 @@ body:has(.zx-modal:modal) {
5599
6478
  background: var(--zx-color-accent);
5600
6479
  }
5601
6480
  .zx-dock__divider:focus-visible {
5602
- outline: none;
6481
+ outline-color: transparent;
5603
6482
  z-index: 1;
5604
6483
  box-shadow: var(--zx-focus-ring);
5605
6484
  }
@@ -5715,6 +6594,61 @@ body:has(.zx-modal:modal) {
5715
6594
  margin: var(--zx-space-1) var(--zx-space-2);
5716
6595
  background: var(--zx-color-overlay-divider);
5717
6596
  }
6597
+ .zx-menu-button__choice {
6598
+ display: flex;
6599
+ align-items: center;
6600
+ justify-content: space-between;
6601
+ gap: var(--zx-space-3);
6602
+ min-block-size: var(--zx-control-height);
6603
+ padding: var(--zx-space-1) var(--zx-space-2);
6604
+ }
6605
+ .zx-menu-button__choice-label {
6606
+ color: var(--zx-color-text);
6607
+ font-size: var(--zx-text-md);
6608
+ }
6609
+ .zx-menu-button__choice-options {
6610
+ display: inline-flex;
6611
+ flex: none;
6612
+ gap: 2px;
6613
+ border-radius: var(--zx-radius-md);
6614
+ background: var(--zx-color-bg-hover);
6615
+ padding: 2px;
6616
+ }
6617
+ .zx-menu-button__choice-option {
6618
+ display: grid;
6619
+ place-items: center;
6620
+ inline-size: var(--zx-space-6);
6621
+ block-size: var(--zx-space-6);
6622
+ border: 0;
6623
+ border-radius: var(--zx-radius-sm);
6624
+ background: transparent;
6625
+ padding: 0;
6626
+ color: var(--zx-color-text-muted);
6627
+ cursor: pointer;
6628
+ }
6629
+ .zx-menu-button__choice-option:hover {
6630
+ color: var(--zx-color-text);
6631
+ }
6632
+ .zx-menu-button__choice-option[aria-checked=true] {
6633
+ background: var(--zx-color-bg-surface);
6634
+ box-shadow: 0 0 0 1px var(--zx-color-border-subtle);
6635
+ color: var(--zx-color-text);
6636
+ }
6637
+ .zx-menu-button__choice-option[aria-disabled=true] {
6638
+ cursor: not-allowed;
6639
+ opacity: .55;
6640
+ }
6641
+ .zx-menu-button__choice-option:focus-visible {
6642
+ outline-color: transparent;
6643
+ box-shadow: var(--zx-focus-ring);
6644
+ }
6645
+ @media (forced-colors: active) {
6646
+ .zx-menu-button__choice-option[aria-checked=true] {
6647
+ background: Highlight;
6648
+ color: HighlightText;
6649
+ forced-color-adjust: none;
6650
+ }
6651
+ }
5718
6652
 
5719
6653
  /* src/components/context-menu/context-menu.css */
5720
6654
  .zx-context-menu__anchor {
@@ -6784,7 +7718,7 @@ body:has(.zx-modal:modal) {
6784
7718
  border: 2px solid var(--zx-color-bg-surface);
6785
7719
  border-radius: var(--zx-radius-full);
6786
7720
  background: var(--zx-color-accent);
6787
- box-shadow: var(--zx-shadow-1);
7721
+ box-shadow: var(--zx-surface-shadow);
6788
7722
  }
6789
7723
  .zx-slider__input::-moz-range-thumb {
6790
7724
  inline-size: var(--zx-slider-thumb);
@@ -6792,7 +7726,7 @@ body:has(.zx-modal:modal) {
6792
7726
  border: 2px solid var(--zx-color-bg-surface);
6793
7727
  border-radius: var(--zx-radius-full);
6794
7728
  background: var(--zx-color-accent);
6795
- box-shadow: var(--zx-shadow-1);
7729
+ box-shadow: var(--zx-surface-shadow);
6796
7730
  }
6797
7731
  .zx-slider__input:focus-visible {
6798
7732
  outline: 2px solid transparent;
@@ -6900,7 +7834,7 @@ body:has(.zx-modal:modal) {
6900
7834
  background: none;
6901
7835
  }
6902
7836
  .zx-rating__radio:focus-visible {
6903
- outline: 0;
7837
+ outline-color: transparent;
6904
7838
  box-shadow: var(--zx-focus-ring);
6905
7839
  }
6906
7840
  .zx-rating[data-inert] .zx-rating__radio {
@@ -7167,7 +8101,7 @@ body:has(.zx-modal:modal) {
7167
8101
  color: var(--zx-color-accent);
7168
8102
  }
7169
8103
  .zx-time-picker__clock-unit:focus-visible {
7170
- outline: 0;
8104
+ outline-color: transparent;
7171
8105
  box-shadow: var(--zx-focus-ring);
7172
8106
  }
7173
8107
  .zx-time-picker__clock-colon {
@@ -7216,7 +8150,7 @@ body:has(.zx-modal:modal) {
7216
8150
  font-weight: 600;
7217
8151
  }
7218
8152
  .zx-time-picker__mark:focus-visible {
7219
- outline: 0;
8153
+ outline-color: transparent;
7220
8154
  box-shadow: var(--zx-focus-ring);
7221
8155
  }
7222
8156
  .zx-time-picker__hand {
@@ -7959,7 +8893,7 @@ body:has(.zx-modal:modal) {
7959
8893
  .zx-calendar__more:focus-visible,
7960
8894
  .zx-calendar__month-week-number:focus-visible {
7961
8895
  z-index: 4;
7962
- outline: none;
8896
+ outline-color: transparent;
7963
8897
  box-shadow: var(--zx-focus-ring);
7964
8898
  }
7965
8899
  .zx-calendar__heading {
@@ -8705,7 +9639,7 @@ body:has(.zx-modal:modal) {
8705
9639
  color: var(--zx-color-text);
8706
9640
  }
8707
9641
  .zx-record-view__field-move:focus-visible {
8708
- outline: none;
9642
+ outline-color: transparent;
8709
9643
  box-shadow: var(--zx-focus-ring);
8710
9644
  }
8711
9645
  .zx-record-view__field-move:disabled {
@@ -8827,7 +9761,7 @@ body:has(.zx-modal:modal) {
8827
9761
  color: var(--zx-color-text);
8828
9762
  }
8829
9763
  .zx-table__column-move:focus-visible {
8830
- outline: none;
9764
+ outline-color: transparent;
8831
9765
  box-shadow: var(--zx-focus-ring);
8832
9766
  }
8833
9767
  .zx-table__column-move:disabled {
@@ -8984,17 +9918,19 @@ body:has(.zx-modal:modal) {
8984
9918
  text-align: start;
8985
9919
  }
8986
9920
  .zx-table__sort-button {
9921
+ --zx-table-sort-slack: max(0px, (24px - 1lh) / 2);
8987
9922
  display: flex;
8988
9923
  align-items: center;
8989
9924
  justify-content: space-between;
8990
9925
  gap: var(--zx-space-2);
8991
9926
  inline-size: 100%;
8992
- min-block-size: auto;
9927
+ min-block-size: 24px;
8993
9928
  border: 0;
8994
9929
  border-radius: var(--zx-radius-sm);
8995
9930
  background: inherit;
8996
9931
  color: inherit;
8997
- padding: 0;
9932
+ margin-block: calc(-1 * var(--zx-table-sort-slack));
9933
+ padding: var(--zx-table-sort-slack) 0;
8998
9934
  font: inherit;
8999
9935
  letter-spacing: inherit;
9000
9936
  text-align: inherit;
@@ -9058,12 +9994,60 @@ body:has(.zx-modal:modal) {
9058
9994
  border-block-end: 0;
9059
9995
  }
9060
9996
  .zx-table__checkbox {
9061
- display: block;
9997
+ --zx-table-checkbox-slack: max(0px, (24px - var(--zx-space-4)) / 2);
9998
+ appearance: none;
9999
+ display: grid;
10000
+ place-content: center;
10001
+ box-sizing: content-box;
9062
10002
  inline-size: var(--zx-space-4);
9063
- min-block-size: auto;
9064
10003
  block-size: var(--zx-space-4);
10004
+ min-block-size: auto;
9065
10005
  margin: 0 auto;
9066
- accent-color: var(--zx-color-accent);
10006
+ border: var(--zx-table-checkbox-slack) solid transparent;
10007
+ border-radius: calc(var(--zx-radius-sm) + var(--zx-table-checkbox-slack));
10008
+ padding: 0;
10009
+ background: var(--zx-color-bg-control) padding-box;
10010
+ box-shadow: inset 0 0 0 1px var(--zx-color-text-subtle);
10011
+ color: var(--zx-color-on-accent);
10012
+ cursor: pointer;
10013
+ }
10014
+ .zx-table__checkbox::before {
10015
+ content: "";
10016
+ inline-size: calc(var(--zx-space-4) * .625);
10017
+ block-size: calc(var(--zx-space-4) * .625);
10018
+ background: currentColor;
10019
+ clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0, 43% 62%);
10020
+ visibility: hidden;
10021
+ }
10022
+ .zx-table__checkbox:hover:not(:disabled) {
10023
+ box-shadow: inset 0 0 0 1px var(--zx-color-text-muted);
10024
+ }
10025
+ .zx-table__checkbox:is(:checked, :indeterminate) {
10026
+ background-color: var(--zx-color-accent);
10027
+ box-shadow: inset 0 0 0 1px var(--zx-color-accent);
10028
+ }
10029
+ .zx-table__checkbox:is(:checked, :indeterminate)::before {
10030
+ visibility: visible;
10031
+ }
10032
+ .zx-table__checkbox:indeterminate::before {
10033
+ clip-path: inset(40% 5%);
10034
+ }
10035
+ .zx-table__checkbox:focus-visible {
10036
+ outline-color: transparent;
10037
+ outline-offset: calc(-1 * var(--zx-table-checkbox-slack));
10038
+ box-shadow: inset 0 0 0 1px var(--zx-color-accent), var(--zx-focus-ring);
10039
+ }
10040
+ .zx-table__checkbox:disabled {
10041
+ opacity: .5;
10042
+ cursor: not-allowed;
10043
+ }
10044
+ @media (forced-colors: active) {
10045
+ .zx-table__checkbox {
10046
+ appearance: auto;
10047
+ }
10048
+ .zx-table__checkbox::before {
10049
+ content: none;
10050
+ }
9067
10051
  }
9068
10052
  .zx-table__empty {
9069
10053
  padding-block: var(--zx-space-6);
@@ -9099,7 +10083,7 @@ body:has(.zx-modal:modal) {
9099
10083
  color: var(--zx-color-text);
9100
10084
  }
9101
10085
  .zx-table__tree-toggle:focus-visible {
9102
- outline: 0;
10086
+ outline-color: transparent;
9103
10087
  box-shadow: var(--zx-focus-ring);
9104
10088
  }
9105
10089
  .zx-table__cell-content {
@@ -9132,10 +10116,14 @@ body:has(.zx-modal:modal) {
9132
10116
  .zx-table__body td[data-editable=true] {
9133
10117
  cursor: cell;
9134
10118
  }
9135
- .zx-table__body td[data-editable=true]:focus-visible {
9136
- outline: 0;
10119
+ .zx-table__body :is(tr[data-row], td, th)[tabindex]:focus-visible {
10120
+ outline-color: transparent;
10121
+ outline-offset: -2px;
9137
10122
  box-shadow: inset var(--zx-focus-ring);
9138
10123
  }
10124
+ .zx-table__body > tr[data-row] {
10125
+ scroll-margin-block: calc(var(--zx-control-height) + var(--zx-space-2)) var(--zx-space-2);
10126
+ }
9139
10127
  .zx-table__body td[data-editing=true] {
9140
10128
  position: relative;
9141
10129
  }
@@ -9301,7 +10289,7 @@ button.zx-stat-tile:hover {
9301
10289
  }
9302
10290
  a.zx-stat-tile:focus-visible,
9303
10291
  button.zx-stat-tile:focus-visible {
9304
- outline: 0;
10292
+ outline-color: transparent;
9305
10293
  box-shadow: var(--zx-focus-ring);
9306
10294
  }
9307
10295
  @media (prefers-reduced-motion: no-preference) {
@@ -9468,7 +10456,7 @@ button.zx-stat-tile:focus-visible {
9468
10456
  font: inherit;
9469
10457
  }
9470
10458
  .zx-card-view__sort select:focus-visible {
9471
- outline: none;
10459
+ outline-color: transparent;
9472
10460
  box-shadow: var(--zx-focus-ring);
9473
10461
  }
9474
10462
  .zx-card-view__content,
@@ -9485,6 +10473,61 @@ button.zx-stat-tile:focus-visible {
9485
10473
  font-weight: 600;
9486
10474
  line-height: 1.3;
9487
10475
  }
10476
+ .zx-card-view__group-header {
10477
+ border-radius: var(--zx-radius-sm);
10478
+ }
10479
+ .zx-card-view__group-header:focus-visible {
10480
+ outline: 2px solid transparent;
10481
+ box-shadow: inset var(--zx-focus-ring);
10482
+ }
10483
+ .zx-card-view__group-toggle {
10484
+ display: inline-flex;
10485
+ align-items: center;
10486
+ gap: var(--zx-space-1);
10487
+ min-block-size: 0;
10488
+ margin-inline-start: calc(-1 * var(--zx-space-1));
10489
+ padding: var(--zx-space-1);
10490
+ border: 0;
10491
+ border-radius: var(--zx-radius-sm);
10492
+ background: none;
10493
+ color: inherit;
10494
+ font: inherit;
10495
+ cursor: pointer;
10496
+ }
10497
+ .zx-card-view__group-toggle:hover {
10498
+ background: var(--zx-color-bg-hover);
10499
+ }
10500
+ .zx-card-view__group-toggle:focus-visible {
10501
+ outline: 2px solid transparent;
10502
+ box-shadow: var(--zx-focus-ring);
10503
+ }
10504
+ .zx-card-view__group-toggle > .zx-icon {
10505
+ flex: none;
10506
+ color: var(--zx-color-text-subtle);
10507
+ }
10508
+ .zx-card-view__group-toggle[aria-expanded=false] > .zx-icon {
10509
+ transform: rotate(-90deg);
10510
+ }
10511
+ .zx-card-view__group[data-collapsed=true] .zx-card-view__group-heading {
10512
+ margin-block-end: 0;
10513
+ }
10514
+ .zx-card-view__list[hidden] {
10515
+ display: none;
10516
+ }
10517
+ .zx-card-view[data-keyboard=roving] .zx-record-card:focus-visible {
10518
+ outline: 2px solid transparent;
10519
+ outline-offset: -2px;
10520
+ box-shadow: inset var(--zx-focus-ring);
10521
+ }
10522
+ .zx-card-view__content[data-empty-focus]:focus-visible {
10523
+ outline: 2px solid transparent;
10524
+ box-shadow: inset var(--zx-focus-ring);
10525
+ }
10526
+ @media (prefers-reduced-motion: no-preference) {
10527
+ .zx-card-view__group-toggle > .zx-icon {
10528
+ transition: transform var(--zx-dur-fast) var(--zx-ease);
10529
+ }
10530
+ }
9488
10531
  .zx-card-view__list {
9489
10532
  display: grid;
9490
10533
  grid-template-columns: repeat(auto-fill, minmax(min(100%, max(var(--zx-card-view-min-card-width), calc(var(--zx-card-view-column-basis) - var(--zx-card-view-grid-gap)))), 1fr));
@@ -9521,7 +10564,7 @@ button.zx-stat-tile:focus-visible {
9521
10564
  border-color: var(--zx-color-border-strong);
9522
10565
  }
9523
10566
  .zx-record-card:focus-visible {
9524
- outline: none;
10567
+ outline-color: transparent;
9525
10568
  box-shadow: var(--zx-focus-ring);
9526
10569
  }
9527
10570
  .zx-record-card[data-selected=true] {
@@ -9584,7 +10627,7 @@ button.zx-stat-tile:focus-visible {
9584
10627
  accent-color: var(--zx-color-accent);
9585
10628
  }
9586
10629
  .zx-record-card__selection input:focus-visible {
9587
- outline: none;
10630
+ outline-color: transparent;
9588
10631
  box-shadow: var(--zx-focus-ring);
9589
10632
  }
9590
10633
  .zx-record-card__titles {
@@ -9640,7 +10683,7 @@ button.zx-stat-tile:focus-visible {
9640
10683
  }
9641
10684
  .zx-record-card__primary:focus-visible {
9642
10685
  border-radius: var(--zx-radius-sm);
9643
- outline: none;
10686
+ outline-color: transparent;
9644
10687
  box-shadow: var(--zx-focus-ring);
9645
10688
  }
9646
10689
  .zx-record-card__subtitle {
@@ -9680,7 +10723,7 @@ button.zx-stat-tile:focus-visible {
9680
10723
  background: var(--zx-color-bg-hover);
9681
10724
  }
9682
10725
  .zx-record-card__action:focus-visible {
9683
- outline: none;
10726
+ outline-color: transparent;
9684
10727
  box-shadow: var(--zx-focus-ring);
9685
10728
  }
9686
10729
  .zx-record-card__action:disabled {
@@ -10050,7 +11093,7 @@ button.zx-stat-tile:focus-visible {
10050
11093
  .zx-kanban-view__collapse:focus-visible,
10051
11094
  .zx-kanban-view__move-handle:focus-visible,
10052
11095
  .zx-kanban-view .zx-record-card:focus-visible {
10053
- outline: none;
11096
+ outline-color: transparent;
10054
11097
  box-shadow: var(--zx-focus-ring);
10055
11098
  }
10056
11099
  .zx-kanban-view__count {
@@ -10095,7 +11138,7 @@ button.zx-stat-tile:focus-visible {
10095
11138
  border-radius: var(--zx-radius-md);
10096
11139
  }
10097
11140
  .zx-kanban-view :where(.zx-record-card[data-variant=outlined]) {
10098
- box-shadow: var(--zx-shadow-1);
11141
+ box-shadow: var(--zx-surface-shadow);
10099
11142
  }
10100
11143
  .zx-kanban-view .zx-record-card:has(> .zx-record-card__preview) {
10101
11144
  grid-template-columns: var(--zx-kanban-thumbnail-size) minmax(0, 1fr);
@@ -10406,7 +11449,7 @@ button.zx-stat-tile:focus-visible {
10406
11449
  color: var(--zx-color-text);
10407
11450
  }
10408
11451
  .zx-kanban-view__add:focus-visible {
10409
- outline: none;
11452
+ outline-color: transparent;
10410
11453
  box-shadow: var(--zx-focus-ring);
10411
11454
  }
10412
11455
  .zx-kanban-view__add[hidden] {
@@ -10676,6 +11719,237 @@ button.zx-stat-tile:focus-visible {
10676
11719
  cursor: pointer;
10677
11720
  }
10678
11721
 
11722
+ /* src/components/view-settings/view-settings.css */
11723
+ .zx-view-settings {
11724
+ container-type: inline-size;
11725
+ inline-size: 100%;
11726
+ min-inline-size: 15rem;
11727
+ display: grid;
11728
+ gap: var(--zx-space-5);
11729
+ color: var(--zx-color-text);
11730
+ font-size: var(--zx-control-font-size);
11731
+ }
11732
+ .zx-view-settings__section {
11733
+ display: grid;
11734
+ gap: var(--zx-space-2);
11735
+ min-inline-size: 0;
11736
+ }
11737
+ .zx-view-settings__heading {
11738
+ margin: 0;
11739
+ color: var(--zx-color-text);
11740
+ font-size: var(--zx-text-md);
11741
+ font-weight: var(--zx-weight-semibold);
11742
+ line-height: 1.3;
11743
+ }
11744
+ .zx-view-settings__subheading {
11745
+ margin: var(--zx-space-1) 0 0;
11746
+ color: var(--zx-color-text-muted);
11747
+ font-size: var(--zx-text-sm);
11748
+ font-weight: var(--zx-weight-medium);
11749
+ line-height: 1.3;
11750
+ }
11751
+ .zx-view-settings__search-slot:empty {
11752
+ display: none;
11753
+ }
11754
+ .zx-view-settings__search {
11755
+ inline-size: 100%;
11756
+ }
11757
+ .zx-view-settings__frame {
11758
+ position: relative;
11759
+ }
11760
+ .zx-view-settings__list,
11761
+ .zx-view-settings__hidden {
11762
+ display: grid;
11763
+ gap: calc(var(--zx-space-1) / 2);
11764
+ margin: 0;
11765
+ padding: 0;
11766
+ list-style: none;
11767
+ }
11768
+ .zx-view-settings__hidden {
11769
+ max-block-size: calc(var(--zx-control-height) * 8);
11770
+ overflow-y: auto;
11771
+ overscroll-behavior: contain;
11772
+ }
11773
+ .zx-view-settings__hidden[hidden] {
11774
+ display: none;
11775
+ }
11776
+ .zx-view-settings__row {
11777
+ position: relative;
11778
+ display: flex;
11779
+ align-items: center;
11780
+ gap: var(--zx-space-2);
11781
+ min-block-size: var(--zx-control-height);
11782
+ padding-inline: var(--zx-space-1);
11783
+ border-radius: var(--zx-control-radius);
11784
+ background: var(--zx-color-bg-surface);
11785
+ }
11786
+ .zx-view-settings__row:hover {
11787
+ background: var(--zx-color-bg-hover);
11788
+ }
11789
+ .zx-view-settings__handle {
11790
+ order: -2;
11791
+ flex: none;
11792
+ }
11793
+ .zx-view-settings__type {
11794
+ order: -1;
11795
+ display: inline-flex;
11796
+ flex: none;
11797
+ align-items: center;
11798
+ justify-content: center;
11799
+ inline-size: 1.25rem;
11800
+ color: var(--zx-color-text-subtle);
11801
+ }
11802
+ .zx-view-settings__label {
11803
+ flex: 1 1 auto;
11804
+ min-inline-size: 0;
11805
+ overflow: hidden;
11806
+ text-overflow: ellipsis;
11807
+ white-space: nowrap;
11808
+ }
11809
+ .zx-view-settings__handle,
11810
+ .zx-view-settings__hide {
11811
+ display: inline-grid;
11812
+ place-items: center;
11813
+ inline-size: var(--zx-control-height);
11814
+ block-size: var(--zx-control-height);
11815
+ min-block-size: 0;
11816
+ padding: 0;
11817
+ border: 1px solid transparent;
11818
+ border-radius: var(--zx-control-radius);
11819
+ background: none;
11820
+ color: var(--zx-color-text-subtle);
11821
+ }
11822
+ .zx-view-settings__handle[data-placeholder] {
11823
+ visibility: hidden;
11824
+ }
11825
+ button.zx-view-settings__handle {
11826
+ cursor: grab;
11827
+ touch-action: none;
11828
+ -webkit-user-select: none;
11829
+ user-select: none;
11830
+ }
11831
+ .zx-view-settings__handle:hover,
11832
+ .zx-view-settings__hide:hover:not(:disabled) {
11833
+ background: var(--zx-color-bg-hover);
11834
+ color: var(--zx-color-text);
11835
+ }
11836
+ .zx-view-settings__handle:focus-visible,
11837
+ .zx-view-settings__hide:focus-visible {
11838
+ box-shadow: var(--zx-focus-ring);
11839
+ }
11840
+ .zx-view-settings__hide:disabled {
11841
+ color: var(--zx-color-text-placeholder);
11842
+ cursor: default;
11843
+ }
11844
+ .zx-view-settings__lock {
11845
+ display: inline-grid;
11846
+ flex: none;
11847
+ place-items: center;
11848
+ inline-size: var(--zx-control-height);
11849
+ color: var(--zx-color-text-placeholder);
11850
+ }
11851
+ .zx-view-settings__add {
11852
+ flex: none;
11853
+ }
11854
+ .zx-view-settings__row[data-state=grabbed] {
11855
+ outline: 2px solid var(--zx-color-ring);
11856
+ outline-offset: -2px;
11857
+ background: var(--zx-color-bg-selected);
11858
+ }
11859
+ .zx-view-settings[data-dragging=true],
11860
+ .zx-view-settings[data-dragging=true] .zx-view-settings__handle {
11861
+ cursor: grabbing;
11862
+ }
11863
+ .zx-view-settings__row[data-dragging=true] {
11864
+ z-index: 1;
11865
+ background: var(--zx-color-bg-raised);
11866
+ box-shadow: var(--zx-overlay-shadow);
11867
+ }
11868
+ .zx-view-settings__drop-indicator {
11869
+ position: absolute;
11870
+ inset-inline: 0;
11871
+ inset-block-start: 0;
11872
+ z-index: 2;
11873
+ block-size: 2px;
11874
+ margin-block-start: -1px;
11875
+ border-radius: var(--zx-radius-full);
11876
+ background: var(--zx-color-accent);
11877
+ pointer-events: none;
11878
+ }
11879
+ .zx-view-settings__drop-indicator[hidden] {
11880
+ display: none;
11881
+ }
11882
+ .zx-view-settings__empty {
11883
+ margin: 0;
11884
+ padding-block: var(--zx-space-1);
11885
+ color: var(--zx-color-text-muted);
11886
+ font-size: var(--zx-text-sm);
11887
+ }
11888
+ .zx-view-settings__empty[hidden] {
11889
+ display: none;
11890
+ }
11891
+ .zx-view-settings__option {
11892
+ display: inline-flex;
11893
+ align-items: center;
11894
+ gap: var(--zx-space-2);
11895
+ min-inline-size: 0;
11896
+ }
11897
+ .zx-view-settings__option > .zx-icon,
11898
+ .zx-view-settings .zx-select__value-adornment > .zx-icon {
11899
+ flex: none;
11900
+ color: var(--zx-color-text-subtle);
11901
+ }
11902
+ .zx-view-settings__group {
11903
+ inline-size: 100%;
11904
+ }
11905
+ .zx-view-settings__setting {
11906
+ display: grid;
11907
+ grid-template-columns: minmax(6rem, auto) minmax(0, 1fr);
11908
+ align-items: center;
11909
+ gap: var(--zx-space-2);
11910
+ }
11911
+ .zx-view-settings__setting-label {
11912
+ color: var(--zx-color-text-muted);
11913
+ font-size: var(--zx-text-sm);
11914
+ }
11915
+ @container (max-width: 18rem) {
11916
+ .zx-view-settings__setting {
11917
+ grid-template-columns: minmax(0, 1fr);
11918
+ gap: var(--zx-space-1);
11919
+ }
11920
+ }
11921
+ .zx-view-settings__toggle {
11922
+ justify-self: start;
11923
+ }
11924
+ .zx-view-settings__instructions[hidden] {
11925
+ display: none;
11926
+ }
11927
+ .zx-view-settings__sr,
11928
+ .zx-view-settings__status {
11929
+ position: absolute;
11930
+ inline-size: 1px;
11931
+ block-size: 1px;
11932
+ margin: -1px;
11933
+ padding: 0;
11934
+ overflow: hidden;
11935
+ clip-path: inset(50%);
11936
+ white-space: nowrap;
11937
+ border: 0;
11938
+ }
11939
+ @media (prefers-reduced-motion: no-preference) {
11940
+ .zx-view-settings__row,
11941
+ .zx-view-settings__handle,
11942
+ .zx-view-settings__hide {
11943
+ transition:
11944
+ background var(--zx-dur-fast) var(--zx-ease),
11945
+ color var(--zx-dur-fast) var(--zx-ease),
11946
+ box-shadow var(--zx-dur-fast) var(--zx-ease);
11947
+ }
11948
+ .zx-view-settings__drop-indicator {
11949
+ transition: inset-block-start var(--zx-dur-fast) var(--zx-ease);
11950
+ }
11951
+ }
11952
+
10679
11953
  /* src/components/grid/grid.css */
10680
11954
  .zx-table[data-preset=billing-items] tr.zx-grid-billing__summary > td {
10681
11955
  background: var(--zx-color-bg-muted);
@@ -10783,7 +12057,7 @@ button.zx-stat-tile:focus-visible {
10783
12057
  font-weight: inherit;
10784
12058
  }
10785
12059
  .zx-tree__row:focus-visible {
10786
- outline: 0;
12060
+ outline-color: transparent;
10787
12061
  box-shadow: var(--zx-focus-ring);
10788
12062
  }
10789
12063
  .zx-tree__twisty {
@@ -10885,7 +12159,7 @@ button.zx-stat-tile:focus-visible {
10885
12159
  font-weight: var(--zx-weight-semibold);
10886
12160
  }
10887
12161
  .zx-finder__row:focus-visible {
10888
- outline: 0;
12162
+ outline-color: transparent;
10889
12163
  box-shadow: var(--zx-focus-ring);
10890
12164
  }
10891
12165
  .zx-finder__icon {
@@ -11235,8 +12509,8 @@ button.zx-stat-tile:focus-visible {
11235
12509
  .zx-filter__logic,
11236
12510
  .zx-filter__field,
11237
12511
  .zx-filter__operator,
11238
- .zx-filter__value input,
11239
- .zx-filter__value select {
12512
+ .zx-filter__value-control > input,
12513
+ .zx-filter__value > select {
11240
12514
  min-block-size: var(--zx-control-height);
11241
12515
  border: 1px solid var(--zx-color-border-control);
11242
12516
  border-radius: var(--zx-control-radius);
@@ -11362,6 +12636,71 @@ button.zx-stat-tile:focus-visible {
11362
12636
  grid-row: 1 / 3;
11363
12637
  }
11364
12638
  }
12639
+ .zx-filter__choice {
12640
+ display: flex;
12641
+ align-items: center;
12642
+ gap: var(--zx-space-2);
12643
+ min-inline-size: 0;
12644
+ }
12645
+ .zx-filter__choice-icon {
12646
+ display: inline-flex;
12647
+ flex: none;
12648
+ justify-content: center;
12649
+ min-inline-size: var(--zx-space-4);
12650
+ color: var(--zx-color-text-muted);
12651
+ }
12652
+ .zx-filter__choice-label {
12653
+ overflow: hidden;
12654
+ text-overflow: ellipsis;
12655
+ white-space: nowrap;
12656
+ }
12657
+ .zx-filter[data-layout=compact] .zx-filter__children {
12658
+ gap: var(--zx-space-4);
12659
+ }
12660
+ .zx-filter[data-layout=compact] .zx-filter__children > li {
12661
+ position: relative;
12662
+ }
12663
+ .zx-filter__connector {
12664
+ position: absolute;
12665
+ inset-block-start: calc(var(--zx-space-4) / -2);
12666
+ inset-inline-start: var(--zx-space-3);
12667
+ z-index: 1;
12668
+ display: inline-flex;
12669
+ align-items: center;
12670
+ block-size: calc(var(--zx-space-4) + var(--zx-space-1));
12671
+ translate: 0 -50%;
12672
+ margin: 0;
12673
+ border: 1px solid var(--zx-color-border);
12674
+ border-radius: var(--zx-radius-full);
12675
+ background: var(--zx-color-bg-chrome);
12676
+ padding: 0 var(--zx-space-2);
12677
+ color: var(--zx-color-text-muted);
12678
+ font: inherit;
12679
+ font-size: var(--zx-text-xs);
12680
+ font-weight: var(--zx-weight-medium);
12681
+ line-height: 1;
12682
+ }
12683
+ button.zx-filter__connector {
12684
+ cursor: pointer;
12685
+ }
12686
+ button.zx-filter__connector:hover {
12687
+ border-color: var(--zx-color-border-strong);
12688
+ color: var(--zx-color-text);
12689
+ }
12690
+ button.zx-filter__connector:focus-visible {
12691
+ outline-color: transparent;
12692
+ box-shadow: var(--zx-focus-ring);
12693
+ }
12694
+ @media (prefers-reduced-motion: no-preference) {
12695
+ button.zx-filter__connector {
12696
+ transition: border-color var(--zx-dur-fast) var(--zx-ease), color var(--zx-dur-fast) var(--zx-ease);
12697
+ }
12698
+ }
12699
+ @media (forced-colors: active) {
12700
+ .zx-filter__connector {
12701
+ border-color: CanvasText;
12702
+ }
12703
+ }
11365
12704
 
11366
12705
  /* src/components/sort-control/sort-control.css */
11367
12706
  .zx-sort-control {
@@ -11417,7 +12756,7 @@ button.zx-stat-tile:focus-visible {
11417
12756
  font-size: var(--zx-text-sm);
11418
12757
  }
11419
12758
  .zx-pagination__select:focus-visible {
11420
- outline: 0;
12759
+ outline-color: transparent;
11421
12760
  box-shadow: var(--zx-focus-ring);
11422
12761
  }
11423
12762
  .zx-pagination__controls {
@@ -11510,7 +12849,7 @@ button.zx-stepper__control:disabled {
11510
12849
  cursor: default;
11511
12850
  }
11512
12851
  .zx-stepper__control:focus-visible {
11513
- outline: 0;
12852
+ outline-color: transparent;
11514
12853
  box-shadow: var(--zx-focus-ring);
11515
12854
  }
11516
12855
  .zx-stepper__marker {
@@ -11691,7 +13030,7 @@ button.zx-stepper__control:disabled {
11691
13030
  color: var(--zx-color-text);
11692
13031
  }
11693
13032
  .zx-breadcrumb__link:focus-visible {
11694
- outline: 0;
13033
+ outline-color: transparent;
11695
13034
  box-shadow: var(--zx-focus-ring);
11696
13035
  }
11697
13036
  .zx-breadcrumb__current {
@@ -12075,7 +13414,7 @@ button.zx-stepper__control:disabled {
12075
13414
  color: var(--zx-color-text);
12076
13415
  }
12077
13416
  .zx-multi-value-editor__handle:focus-visible {
12078
- outline: none;
13417
+ outline-color: transparent;
12079
13418
  box-shadow: var(--zx-focus-ring);
12080
13419
  }
12081
13420
  .zx-multi-value-editor__handle:disabled {
@@ -12230,10 +13569,10 @@ button.zx-stepper__control:disabled {
12230
13569
  min-inline-size: 0;
12231
13570
  }
12232
13571
  .zx-questionnaire__item:focus {
12233
- outline: none;
13572
+ outline-color: transparent;
12234
13573
  }
12235
13574
  .zx-questionnaire__item:focus-visible {
12236
- outline: none;
13575
+ outline-color: transparent;
12237
13576
  box-shadow: var(--zx-focus-ring);
12238
13577
  border-radius: var(--zx-questionnaire-radius);
12239
13578
  }
@@ -12408,7 +13747,7 @@ button.zx-stepper__control:disabled {
12408
13747
  color: var(--zx-color-text-placeholder);
12409
13748
  }
12410
13749
  .zx-questionnaire__freeform-input:focus-visible {
12411
- outline: none;
13750
+ outline-color: transparent;
12412
13751
  border-color: var(--zx-color-accent);
12413
13752
  box-shadow: var(--zx-focus-ring);
12414
13753
  }
@@ -12425,7 +13764,7 @@ button.zx-stepper__control:disabled {
12425
13764
  gap: var(--zx-space-3);
12426
13765
  }
12427
13766
  .zx-questionnaire__review:focus {
12428
- outline: none;
13767
+ outline-color: transparent;
12429
13768
  }
12430
13769
  .zx-questionnaire__review-title {
12431
13770
  margin: 0;