@zeyos/zx 2.3.0 → 3.0.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 (105) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/DESIGN-SYSTEM.md +136 -0
  3. package/MIGRATION.md +155 -4
  4. package/README.md +24 -13
  5. package/dist/types/compat/map/data.d.ts +3 -2
  6. package/dist/types/components/account-menu/account-menu.d.ts +144 -0
  7. package/dist/types/components/app-rail/app-rail.d.ts +250 -0
  8. package/dist/types/components/app-sidebar/app-sidebar.d.ts +169 -0
  9. package/dist/types/components/avatar/avatar.d.ts +100 -0
  10. package/dist/types/components/chart/chart.d.ts +321 -0
  11. package/dist/types/components/date-picker/month-picker.d.ts +6 -0
  12. package/dist/types/components/dialog/dialog.d.ts +9 -0
  13. package/dist/types/components/dock/dock.d.ts +495 -0
  14. package/dist/types/components/dropdown/dropdown.d.ts +2 -2
  15. package/dist/types/components/field/field.d.ts +14 -0
  16. package/dist/types/components/field-upload/field-upload.d.ts +37 -4
  17. package/dist/types/components/form/form.d.ts +25 -3
  18. package/dist/types/components/grid/grid.d.ts +172 -0
  19. package/dist/types/components/launcher/launcher.d.ts +300 -0
  20. package/dist/types/components/layout/layout.d.ts +4 -4
  21. package/dist/types/components/menu-button/menu-button.d.ts +10 -2
  22. package/dist/types/components/modal/modal.d.ts +25 -0
  23. package/dist/types/components/multi-value-editor/multi-value-editor.d.ts +7 -1
  24. package/dist/types/components/questionnaire/items.d.ts +327 -0
  25. package/dist/types/components/questionnaire/questionnaire.d.ts +449 -0
  26. package/dist/types/components/sheet/sheet-stack.d.ts +167 -0
  27. package/dist/types/components/sheet/sheet.d.ts +294 -0
  28. package/dist/types/components/split-view/split-view.d.ts +2 -21
  29. package/dist/types/components/table/table.d.ts +219 -12
  30. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  31. package/dist/types/components/value-list/value-list.d.ts +24 -3
  32. package/dist/types/core/dom.d.ts +114 -0
  33. package/dist/types/core/drag-axis.d.ts +111 -0
  34. package/dist/types/core/position.d.ts +4 -2
  35. package/dist/types/index.d.ts +12 -2
  36. package/dist/zx-compat.esm.js +641 -277
  37. package/dist/zx-compat.esm.min.js +1 -1
  38. package/dist/zx-compat.global.js +7609 -2236
  39. package/dist/zx-compat.global.min.js +3 -3
  40. package/dist/zx-zeyos.esm.js +546 -87
  41. package/dist/zx-zeyos.esm.min.js +1 -1
  42. package/dist/zx.css +1452 -101
  43. package/dist/zx.esm.js +7952 -2592
  44. package/dist/zx.esm.min.js +3 -3
  45. package/dist/zx.global.js +7952 -2592
  46. package/dist/zx.global.min.js +3 -3
  47. package/dist/zx.min.css +1 -1
  48. package/docs/api.json +2276 -337
  49. package/docs/llms.md +426 -30
  50. package/docs/llms.txt +21 -9
  51. package/package.json +4 -2
  52. package/src/compat/globals.js +3 -1
  53. package/src/compat/map/data.js +31 -9
  54. package/src/components/account-menu/account-menu.css +70 -0
  55. package/src/components/account-menu/account-menu.js +208 -0
  56. package/src/components/app-rail/app-rail.css +107 -0
  57. package/src/components/app-rail/app-rail.js +668 -0
  58. package/src/components/app-sidebar/app-sidebar.css +68 -0
  59. package/src/components/app-sidebar/app-sidebar.js +388 -0
  60. package/src/components/avatar/avatar.css +61 -0
  61. package/src/components/avatar/avatar.js +222 -0
  62. package/src/components/button/button.css +0 -1
  63. package/src/components/chart/chart.css +61 -0
  64. package/src/components/chart/chart.js +518 -0
  65. package/src/components/date-picker/month-picker.js +9 -0
  66. package/src/components/dialog/dialog.js +11 -4
  67. package/src/components/dock/dock.css +228 -0
  68. package/src/components/dock/dock.js +977 -0
  69. package/src/components/dropdown/dropdown.js +1 -1
  70. package/src/components/field/field.js +2 -0
  71. package/src/components/field-upload/field-upload.js +9 -4
  72. package/src/components/form/form.js +6 -3
  73. package/src/components/grid/grid.css +6 -0
  74. package/src/components/grid/grid.js +213 -0
  75. package/src/components/launcher/launcher.css +100 -0
  76. package/src/components/launcher/launcher.js +557 -0
  77. package/src/components/layout/layout.js +2 -2
  78. package/src/components/menu-button/menu-button.js +27 -2
  79. package/src/components/modal/modal.css +5 -1
  80. package/src/components/modal/modal.js +37 -2
  81. package/src/components/multi-value-editor/multi-value-editor.js +2 -1
  82. package/src/components/questionnaire/items.js +370 -0
  83. package/src/components/questionnaire/questionnaire.css +387 -0
  84. package/src/components/questionnaire/questionnaire.js +1033 -0
  85. package/src/components/select/select.css +0 -1
  86. package/src/components/sheet/sheet-stack.js +304 -0
  87. package/src/components/sheet/sheet.css +351 -0
  88. package/src/components/sheet/sheet.js +551 -0
  89. package/src/components/split-view/split-view.js +76 -161
  90. package/src/components/table/table.css +43 -0
  91. package/src/components/table/table.js +523 -45
  92. package/src/components/tooltip/tooltip.js +5 -2
  93. package/src/components/value-list/value-list.js +6 -3
  94. package/src/core/dom.js +302 -0
  95. package/src/core/drag-axis.js +203 -0
  96. package/src/core/position.js +68 -22
  97. package/src/index.js +19 -2
  98. package/styles/tokens/dark.css +2 -3
  99. package/styles/tokens/global.css +5 -5
  100. package/styles/tokens/semantic.css +5 -3
  101. package/styles/tokens/themes.css +1 -1
  102. package/styles/zx.css +10 -1
  103. package/dist/types/components/permission/permission.d.ts +0 -96
  104. package/src/components/permission/permission.css +0 -47
  105. package/src/components/permission/permission.js +0 -201
package/dist/zx.css CHANGED
@@ -164,6 +164,7 @@
164
164
  --zx-control-font-size: var(--zx-text-md);
165
165
  --zx-control-font-weight: 500;
166
166
  --zx-overlay-shadow: var(--zx-shadow-3);
167
+ --zx-overlay-blur: 8px;
167
168
  --zx-header-bg: var(--zx-gray-900);
168
169
  --zx-header-text: var(--zx-gray-50);
169
170
  }
@@ -555,7 +556,6 @@ svg.zx-icon {
555
556
  padding-inline: var(--zx-space-2);
556
557
  font-size: var(--zx-text-sm);
557
558
  }
558
- .zx-btn > svg,
559
559
  .zx-btn > .zx-icon {
560
560
  flex: none;
561
561
  }
@@ -1923,6 +1923,525 @@ button.zx-panel__toggle:focus-visible {
1923
1923
  display: none;
1924
1924
  }
1925
1925
 
1926
+ /* src/components/launcher/launcher.css */
1927
+ .zx-launcher {
1928
+ inline-size: min(680px, calc(100vw - (2 * var(--zx-space-4))));
1929
+ max-block-size: min(720px, calc(100vh - (2 * var(--zx-space-6))));
1930
+ border: 1px solid var(--zx-color-border);
1931
+ border-radius: var(--zx-radius-xl);
1932
+ background: var(--zx-color-bg-raised);
1933
+ box-shadow: var(--zx-overlay-shadow);
1934
+ color: var(--zx-color-text);
1935
+ padding: 0;
1936
+ }
1937
+ .zx-launcher::backdrop {
1938
+ background: var(--zx-color-bg-backdrop);
1939
+ }
1940
+ .zx-launcher__surface {
1941
+ display: grid;
1942
+ grid-template-rows: auto auto minmax(0, 1fr);
1943
+ max-block-size: inherit;
1944
+ }
1945
+ .zx-launcher__search {
1946
+ display: grid;
1947
+ grid-template-columns: auto 1fr auto;
1948
+ align-items: center;
1949
+ gap: var(--zx-space-3);
1950
+ border-block-end: 1px solid var(--zx-color-border);
1951
+ padding: var(--zx-space-3) var(--zx-space-4);
1952
+ }
1953
+ .zx-launcher__input {
1954
+ min-inline-size: 0;
1955
+ border: 0;
1956
+ outline: 0;
1957
+ background: transparent;
1958
+ color: inherit;
1959
+ font-size: var(--zx-text-lg);
1960
+ }
1961
+ .zx-launcher__input:focus-visible {
1962
+ box-shadow: inset var(--zx-focus-ring);
1963
+ }
1964
+ .zx-launcher__input::-webkit-search-cancel-button {
1965
+ display: none;
1966
+ }
1967
+ .zx-launcher__status {
1968
+ margin: 0;
1969
+ padding: var(--zx-space-5);
1970
+ color: var(--zx-color-text-muted);
1971
+ text-align: center;
1972
+ }
1973
+ .zx-launcher__status[hidden] {
1974
+ display: none;
1975
+ }
1976
+ .zx-launcher__results {
1977
+ min-block-size: 0;
1978
+ overflow: auto;
1979
+ padding: var(--zx-space-2);
1980
+ }
1981
+ .zx-launcher__group-label {
1982
+ padding: var(--zx-space-3) var(--zx-space-3) var(--zx-space-1);
1983
+ color: var(--zx-color-text-muted);
1984
+ font-size: var(--zx-text-xs);
1985
+ font-weight: 700;
1986
+ letter-spacing: .04em;
1987
+ text-transform: uppercase;
1988
+ }
1989
+ .zx-launcher__option {
1990
+ display: flex;
1991
+ align-items: center;
1992
+ gap: var(--zx-space-3);
1993
+ inline-size: 100%;
1994
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
1995
+ border: 0;
1996
+ border-radius: var(--zx-radius-md);
1997
+ background: transparent;
1998
+ padding: var(--zx-space-2) var(--zx-space-3);
1999
+ color: inherit;
2000
+ text-align: start;
2001
+ text-decoration: none;
2002
+ }
2003
+ .zx-launcher__option[aria-selected=true],
2004
+ .zx-launcher__option:hover {
2005
+ background: var(--zx-color-bg-hover);
2006
+ }
2007
+ .zx-launcher__option[aria-disabled=true] {
2008
+ color: var(--zx-color-text-muted);
2009
+ cursor: not-allowed;
2010
+ opacity: .65;
2011
+ }
2012
+ .zx-launcher__icon {
2013
+ display: inline-flex;
2014
+ flex: none;
2015
+ }
2016
+ .zx-launcher__copy {
2017
+ display: grid;
2018
+ min-inline-size: 0;
2019
+ gap: 2px;
2020
+ }
2021
+ .zx-launcher__label {
2022
+ overflow: hidden;
2023
+ font-weight: 600;
2024
+ text-overflow: ellipsis;
2025
+ white-space: nowrap;
2026
+ }
2027
+ .zx-launcher__description {
2028
+ overflow: hidden;
2029
+ color: var(--zx-color-text-muted);
2030
+ font-size: var(--zx-text-sm);
2031
+ text-overflow: ellipsis;
2032
+ white-space: nowrap;
2033
+ }
2034
+ .zx-launcher__badge {
2035
+ margin-inline-start: auto;
2036
+ color: var(--zx-color-text-muted);
2037
+ font-size: var(--zx-text-xs);
2038
+ }
2039
+
2040
+ /* src/components/avatar/avatar.css */
2041
+ .zx-avatar {
2042
+ --zx-avatar-size: var(--zx-control-height);
2043
+ position: relative;
2044
+ display: inline-grid;
2045
+ flex: none;
2046
+ place-items: center;
2047
+ inline-size: var(--zx-avatar-size);
2048
+ block-size: var(--zx-avatar-size);
2049
+ overflow: visible;
2050
+ color: var(--zx-color-text);
2051
+ vertical-align: middle;
2052
+ }
2053
+ .zx-avatar[data-size=sm] {
2054
+ --zx-avatar-size: calc(var(--zx-control-height) * .75);
2055
+ }
2056
+ .zx-avatar[data-size=lg] {
2057
+ --zx-avatar-size: calc(var(--zx-control-height) * 1.25);
2058
+ }
2059
+ .zx-avatar[data-shape=circle] {
2060
+ border-radius: 50%;
2061
+ }
2062
+ .zx-avatar[data-shape=rounded] {
2063
+ border-radius: var(--zx-radius-md);
2064
+ }
2065
+ .zx-avatar[data-shape=square] {
2066
+ border-radius: 0;
2067
+ }
2068
+ .zx-avatar__image,
2069
+ .zx-avatar__fallback {
2070
+ inline-size: 100%;
2071
+ block-size: 100%;
2072
+ border-radius: inherit;
2073
+ }
2074
+ .zx-avatar__image {
2075
+ display: block;
2076
+ object-fit: cover;
2077
+ }
2078
+ .zx-avatar__image[hidden],
2079
+ .zx-avatar__fallback[hidden],
2080
+ .zx-avatar__status[hidden] {
2081
+ display: none;
2082
+ }
2083
+ .zx-avatar__fallback {
2084
+ display: grid;
2085
+ place-items: center;
2086
+ border: 1px solid var(--zx-color-border);
2087
+ background: var(--zx-color-bg-subtle);
2088
+ font-size: calc(var(--zx-avatar-size) * .34);
2089
+ font-weight: 700;
2090
+ line-height: 1;
2091
+ }
2092
+ .zx-avatar__status {
2093
+ position: absolute;
2094
+ inset-inline-end: -1px;
2095
+ inset-block-end: -1px;
2096
+ inline-size: max(8px, calc(var(--zx-avatar-size) * .28));
2097
+ block-size: max(8px, calc(var(--zx-avatar-size) * .28));
2098
+ border: 2px solid var(--zx-color-bg-raised);
2099
+ border-radius: 50%;
2100
+ background: var(--zx-color-text-muted);
2101
+ }
2102
+ .zx-avatar__status[data-status=online] {
2103
+ background: var(--zx-color-success);
2104
+ }
2105
+ .zx-avatar__status[data-status=away] {
2106
+ background: var(--zx-color-warning);
2107
+ }
2108
+ .zx-avatar__status[data-status=busy] {
2109
+ background: var(--zx-color-danger);
2110
+ }
2111
+
2112
+ /* src/components/account-menu/account-menu.css */
2113
+ .zx-account-menu {
2114
+ display: block;
2115
+ min-inline-size: 0;
2116
+ }
2117
+ .zx-account-menu__trigger {
2118
+ display: grid;
2119
+ grid-template-columns: auto minmax(0, 1fr) auto;
2120
+ align-items: center;
2121
+ gap: var(--zx-space-3);
2122
+ inline-size: 100%;
2123
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
2124
+ border-color: transparent;
2125
+ background: transparent;
2126
+ padding: var(--zx-space-2);
2127
+ color: inherit;
2128
+ text-align: start;
2129
+ }
2130
+ .zx-account-menu__trigger:hover,
2131
+ .zx-account-menu__trigger:focus-visible,
2132
+ .zx-account-menu__trigger[aria-expanded=true] {
2133
+ background: var(--zx-color-bg-hover);
2134
+ }
2135
+ .zx-account-menu__identity {
2136
+ display: grid;
2137
+ min-inline-size: 0;
2138
+ gap: 1px;
2139
+ }
2140
+ .zx-account-menu__name,
2141
+ .zx-account-menu__secondary {
2142
+ overflow: hidden;
2143
+ text-overflow: ellipsis;
2144
+ white-space: nowrap;
2145
+ }
2146
+ .zx-account-menu__name {
2147
+ font-weight: 650;
2148
+ }
2149
+ .zx-account-menu__secondary {
2150
+ color: var(--zx-color-text-muted);
2151
+ font-size: var(--zx-text-xs);
2152
+ }
2153
+ .zx-account-menu__chevron {
2154
+ display: inline-flex;
2155
+ }
2156
+ .zx-account-menu[data-compact=true] {
2157
+ inline-size: fit-content;
2158
+ }
2159
+ .zx-account-menu[data-compact=true] .zx-account-menu__trigger {
2160
+ display: inline-grid;
2161
+ grid-template-columns: auto;
2162
+ inline-size: auto;
2163
+ }
2164
+ .zx-account-menu[data-compact=true] .zx-account-menu__identity,
2165
+ .zx-account-menu[data-compact=true] .zx-account-menu__chevron {
2166
+ display: none;
2167
+ }
2168
+ .zx-account-menu__panel-identity {
2169
+ display: grid;
2170
+ min-inline-size: 220px;
2171
+ gap: 2px;
2172
+ margin: calc(-1 * var(--zx-space-1)) calc(-1 * var(--zx-space-1)) var(--zx-space-1);
2173
+ border-block-end: 1px solid var(--zx-color-border);
2174
+ padding: var(--zx-space-3);
2175
+ }
2176
+ .zx-account-menu__panel-identity span {
2177
+ color: var(--zx-color-text-muted);
2178
+ font-size: var(--zx-text-xs);
2179
+ }
2180
+
2181
+ /* src/components/app-rail/app-rail.css */
2182
+ .zx-app-rail {
2183
+ display: flex;
2184
+ min-inline-size: 0;
2185
+ border: 1px solid var(--zx-color-border);
2186
+ background: var(--zx-color-bg-raised);
2187
+ color: var(--zx-color-text);
2188
+ }
2189
+ .zx-app-rail[data-orientation=vertical] {
2190
+ flex-direction: column;
2191
+ inline-size: calc(var(--zx-control-height) + var(--zx-space-3));
2192
+ }
2193
+ .zx-app-rail[data-orientation=horizontal] {
2194
+ flex-direction: row;
2195
+ block-size: calc(var(--zx-control-height) + var(--zx-space-3));
2196
+ }
2197
+ .zx-app-rail__header,
2198
+ .zx-app-rail__footer {
2199
+ display: flex;
2200
+ align-items: center;
2201
+ justify-content: center;
2202
+ padding: var(--zx-space-1);
2203
+ }
2204
+ .zx-app-rail__header[hidden],
2205
+ .zx-app-rail__footer[hidden] {
2206
+ display: none;
2207
+ }
2208
+ .zx-app-rail[data-orientation=vertical] .zx-app-rail__footer {
2209
+ margin-block-start: auto;
2210
+ }
2211
+ .zx-app-rail[data-orientation=horizontal] .zx-app-rail__footer {
2212
+ margin-inline-start: auto;
2213
+ }
2214
+ .zx-app-rail__list {
2215
+ display: flex;
2216
+ flex: 1;
2217
+ gap: var(--zx-space-1);
2218
+ margin: 0;
2219
+ padding: var(--zx-space-1);
2220
+ list-style: none;
2221
+ }
2222
+ .zx-app-rail[data-orientation=vertical] .zx-app-rail__list {
2223
+ flex-direction: column;
2224
+ }
2225
+ .zx-app-rail[data-orientation=horizontal] .zx-app-rail__list {
2226
+ flex-direction: row;
2227
+ }
2228
+ .zx-app-rail__row {
2229
+ display: flex;
2230
+ }
2231
+ .zx-app-rail__item {
2232
+ position: relative;
2233
+ display: inline-grid;
2234
+ place-items: center;
2235
+ inline-size: var(--zx-control-height);
2236
+ block-size: var(--zx-control-height);
2237
+ border-color: transparent;
2238
+ border-radius: var(--zx-radius-md);
2239
+ background: transparent;
2240
+ color: inherit;
2241
+ padding: 0;
2242
+ text-decoration: none;
2243
+ }
2244
+ .zx-app-rail__item:hover,
2245
+ .zx-app-rail__item:focus-visible,
2246
+ .zx-app-rail__item[aria-expanded=true],
2247
+ .zx-app-rail__item[data-active-descendant=true],
2248
+ .zx-app-rail__item[aria-current=page] {
2249
+ background: var(--zx-color-bg-hover);
2250
+ color: var(--zx-color-accent);
2251
+ }
2252
+ .zx-app-rail__item[aria-disabled=true],
2253
+ .zx-app-rail__flyout-item[aria-disabled=true] {
2254
+ color: var(--zx-color-text-muted);
2255
+ cursor: not-allowed;
2256
+ opacity: .65;
2257
+ }
2258
+ .zx-app-rail__item-label {
2259
+ position: absolute;
2260
+ inline-size: 1px;
2261
+ block-size: 1px;
2262
+ overflow: hidden;
2263
+ clip-path: inset(50%);
2264
+ }
2265
+ .zx-app-rail__item-icon {
2266
+ display: inline-flex;
2267
+ }
2268
+ .zx-app-rail__item-badge {
2269
+ position: absolute;
2270
+ inset-inline-end: 1px;
2271
+ inset-block-start: 1px;
2272
+ min-inline-size: 15px;
2273
+ border-radius: var(--zx-radius-full);
2274
+ background: var(--zx-color-accent);
2275
+ padding-inline: 3px;
2276
+ color: var(--zx-color-on-accent);
2277
+ font-size: 10px;
2278
+ line-height: 15px;
2279
+ text-align: center;
2280
+ }
2281
+ .zx-app-rail__item-disclosure {
2282
+ position: absolute;
2283
+ inset-inline-end: 1px;
2284
+ inset-block-end: 1px;
2285
+ display: inline-flex;
2286
+ }
2287
+ .zx-app-rail__popover {
2288
+ min-inline-size: 220px;
2289
+ padding: var(--zx-space-2);
2290
+ }
2291
+ .zx-app-rail__flyout-title {
2292
+ padding: var(--zx-space-2) var(--zx-space-3);
2293
+ color: var(--zx-color-text-muted);
2294
+ font-size: var(--zx-text-xs);
2295
+ font-weight: 700;
2296
+ }
2297
+ .zx-app-rail__flyout-list {
2298
+ display: grid;
2299
+ gap: var(--zx-space-1);
2300
+ margin: 0;
2301
+ padding: 0;
2302
+ list-style: none;
2303
+ }
2304
+ .zx-app-rail__flyout-item {
2305
+ display: grid;
2306
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
2307
+ align-items: center;
2308
+ gap: var(--zx-space-2);
2309
+ inline-size: 100%;
2310
+ min-block-size: var(--zx-control-height);
2311
+ border-color: transparent;
2312
+ border-radius: var(--zx-radius-md);
2313
+ background: transparent;
2314
+ padding-inline: var(--zx-control-pad-x);
2315
+ color: inherit;
2316
+ text-align: start;
2317
+ text-decoration: none;
2318
+ }
2319
+ .zx-app-rail__flyout-item:hover,
2320
+ .zx-app-rail__flyout-item:focus-visible,
2321
+ .zx-app-rail__flyout-item[aria-current=page] {
2322
+ background: var(--zx-color-bg-hover);
2323
+ color: var(--zx-color-accent);
2324
+ }
2325
+ .zx-app-rail__flyout-item-icon {
2326
+ display: inline-flex;
2327
+ grid-column: 1;
2328
+ }
2329
+ .zx-app-rail__flyout-item-label {
2330
+ grid-column: 2;
2331
+ }
2332
+ .zx-app-rail__flyout-item-badge {
2333
+ grid-column: 3;
2334
+ color: var(--zx-color-text-muted);
2335
+ font-size: var(--zx-text-xs);
2336
+ }
2337
+ .zx-app-rail__flyout-item-disclosure {
2338
+ display: inline-flex;
2339
+ grid-column: 4;
2340
+ color: var(--zx-color-text-muted);
2341
+ }
2342
+
2343
+ /* src/components/app-sidebar/app-sidebar.css */
2344
+ .zx-app-sidebar {
2345
+ display: flex;
2346
+ min-block-size: 0;
2347
+ border: 1px solid var(--zx-color-border);
2348
+ background: var(--zx-color-bg-raised);
2349
+ color: var(--zx-color-text);
2350
+ }
2351
+ .zx-app-sidebar__expanded {
2352
+ display: grid;
2353
+ grid-template-rows: auto minmax(0, 1fr) auto;
2354
+ inline-size: min(280px, 100vw);
2355
+ min-block-size: 0;
2356
+ }
2357
+ .zx-app-sidebar__expanded[hidden],
2358
+ .zx-app-sidebar__rail[hidden] {
2359
+ display: none;
2360
+ }
2361
+ .zx-app-sidebar__header {
2362
+ display: grid;
2363
+ grid-template-columns: minmax(0, 1fr) auto;
2364
+ align-items: center;
2365
+ gap: var(--zx-space-2);
2366
+ min-block-size: calc(var(--zx-control-height) + var(--zx-space-3));
2367
+ border-block-end: 1px solid var(--zx-color-border);
2368
+ padding: var(--zx-space-2);
2369
+ }
2370
+ .zx-app-sidebar__header-content {
2371
+ min-inline-size: 0;
2372
+ }
2373
+ .zx-app-sidebar__nav {
2374
+ min-block-size: 0;
2375
+ overflow: auto;
2376
+ padding: var(--zx-space-2);
2377
+ }
2378
+ .zx-app-sidebar__list,
2379
+ .zx-app-sidebar__sublist {
2380
+ display: grid;
2381
+ gap: var(--zx-space-1);
2382
+ margin: 0;
2383
+ padding: 0;
2384
+ list-style: none;
2385
+ }
2386
+ .zx-app-sidebar__sublist {
2387
+ margin-block-start: var(--zx-space-1);
2388
+ }
2389
+ .zx-app-sidebar__sublist[hidden] {
2390
+ display: none;
2391
+ }
2392
+ .zx-app-sidebar__item {
2393
+ display: grid;
2394
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
2395
+ align-items: center;
2396
+ gap: var(--zx-space-2);
2397
+ inline-size: 100%;
2398
+ min-block-size: var(--zx-control-height);
2399
+ border-color: transparent;
2400
+ border-radius: var(--zx-radius-md);
2401
+ background: transparent;
2402
+ padding-inline: var(--zx-space-3);
2403
+ color: inherit;
2404
+ text-align: start;
2405
+ text-decoration: none;
2406
+ }
2407
+ .zx-app-sidebar__row[data-level="2"] > .zx-app-sidebar__item {
2408
+ padding-inline-start: calc(var(--zx-space-3) + var(--zx-space-5));
2409
+ }
2410
+ .zx-app-sidebar__row[data-level="3"] > .zx-app-sidebar__item {
2411
+ padding-inline-start: calc(var(--zx-space-3) + var(--zx-space-7));
2412
+ }
2413
+ .zx-app-sidebar__item:hover,
2414
+ .zx-app-sidebar__item:focus-visible,
2415
+ .zx-app-sidebar__item[data-active-descendant=true],
2416
+ .zx-app-sidebar__item[aria-current=page] {
2417
+ background: var(--zx-color-bg-hover);
2418
+ color: var(--zx-color-accent);
2419
+ }
2420
+ .zx-app-sidebar__item[aria-disabled=true] {
2421
+ color: var(--zx-color-text-muted);
2422
+ cursor: not-allowed;
2423
+ opacity: .65;
2424
+ }
2425
+ .zx-app-sidebar__item-icon,
2426
+ .zx-app-sidebar__item-disclosure {
2427
+ display: inline-flex;
2428
+ }
2429
+ .zx-app-sidebar__item-badge {
2430
+ color: var(--zx-color-text-muted);
2431
+ font-size: var(--zx-text-xs);
2432
+ }
2433
+ .zx-app-sidebar__footer {
2434
+ border-block-start: 1px solid var(--zx-color-border);
2435
+ padding: var(--zx-space-2);
2436
+ }
2437
+ .zx-app-sidebar__footer[hidden] {
2438
+ display: none;
2439
+ }
2440
+ .zx-app-sidebar__rail-header {
2441
+ display: grid;
2442
+ gap: var(--zx-space-1);
2443
+ }
2444
+
1926
2445
  /* src/components/message/message.css */
1927
2446
  .zx-message {
1928
2447
  display: grid;
@@ -2045,7 +2564,7 @@ button.zx-panel__toggle:focus-visible {
2045
2564
  .zx-modal__content {
2046
2565
  padding: var(--zx-space-5);
2047
2566
  }
2048
- body:has(> .zx-modal[open]) {
2567
+ body:has(> .zx-modal:modal) {
2049
2568
  overflow: hidden;
2050
2569
  overscroll-behavior: none;
2051
2570
  }
@@ -2057,78 +2576,350 @@ body:has(> .zx-modal[open]) {
2057
2576
  animation: zx-modal-backdrop-enter var(--zx-dur-base) var(--zx-ease);
2058
2577
  }
2059
2578
  }
2060
- @keyframes zx-modal-enter {
2061
- from {
2062
- opacity: 0;
2063
- transform: translateY(var(--zx-space-2)) scale(.98);
2064
- }
2579
+ @keyframes zx-modal-enter {
2580
+ from {
2581
+ opacity: 0;
2582
+ transform: translateY(var(--zx-space-2)) scale(.98);
2583
+ }
2584
+ }
2585
+ @keyframes zx-modal-backdrop-enter {
2586
+ from {
2587
+ opacity: 0;
2588
+ }
2589
+ }
2590
+
2591
+ /* src/components/dialog/dialog.css */
2592
+ .zx-dialog {
2593
+ grid-template-rows: auto minmax(0, 1fr) auto;
2594
+ padding: 0;
2595
+ }
2596
+ .zx-dialog[open] {
2597
+ display: grid;
2598
+ }
2599
+ .zx-dialog__header,
2600
+ .zx-dialog__footer {
2601
+ display: flex;
2602
+ align-items: center;
2603
+ gap: var(--zx-space-3);
2604
+ padding: var(--zx-space-4) var(--zx-space-5);
2605
+ }
2606
+ .zx-dialog__header {
2607
+ justify-content: space-between;
2608
+ border-block-end: 1px solid var(--zx-color-border);
2609
+ }
2610
+ .zx-dialog__title {
2611
+ margin: 0;
2612
+ font-size: var(--zx-text-xl);
2613
+ line-height: 1.3;
2614
+ }
2615
+ .zx-dialog__close {
2616
+ flex: none;
2617
+ inline-size: var(--zx-control-height);
2618
+ padding-inline: 0;
2619
+ font-size: var(--zx-text-xl);
2620
+ }
2621
+ .zx-dialog__body {
2622
+ min-block-size: 0;
2623
+ overflow: auto;
2624
+ }
2625
+ .zx-dialog__footer {
2626
+ justify-content: flex-end;
2627
+ border-block-start: 1px solid var(--zx-color-border);
2628
+ }
2629
+ .zx-dialog__footer[hidden] {
2630
+ display: none;
2631
+ }
2632
+ .zx-dialog__view[aria-hidden=true] {
2633
+ display: none;
2634
+ }
2635
+ .zx-dialog__prompt {
2636
+ display: grid;
2637
+ gap: var(--zx-space-3);
2638
+ }
2639
+ .zx-dialog__prompt-input {
2640
+ inline-size: 100%;
2641
+ }
2642
+ @media (prefers-reduced-motion: no-preference) {
2643
+ .zx-dialog__view[aria-hidden=false] {
2644
+ animation: zx-dialog-view-enter var(--zx-dur-fast) var(--zx-ease);
2645
+ }
2646
+ }
2647
+ @keyframes zx-dialog-view-enter {
2648
+ from {
2649
+ opacity: 0;
2650
+ transform: translateX(var(--zx-space-2));
2651
+ }
2652
+ }
2653
+
2654
+ /* src/components/sheet/sheet.css */
2655
+ .zx-sheet {
2656
+ position: fixed;
2657
+ margin: 0;
2658
+ padding: 0;
2659
+ max-inline-size: 100vw;
2660
+ max-block-size: 100dvh;
2661
+ border: 0;
2662
+ border-radius: 0;
2663
+ overflow: hidden;
2664
+ box-shadow: var(--zx-overlay-shadow);
2665
+ }
2666
+ .zx-sheet[data-side=start],
2667
+ .zx-sheet[data-side=end] {
2668
+ inset-block: 0;
2669
+ block-size: 100dvh;
2670
+ inline-size: var(--zx-sheet-size, min(24rem, 100vw));
2671
+ }
2672
+ .zx-sheet[data-side=start] {
2673
+ inset-inline-start: 0;
2674
+ inset-inline-end: auto;
2675
+ border-inline-end: 1px solid var(--zx-color-border);
2676
+ --zx-sheet-enter: -100% 0;
2677
+ }
2678
+ .zx-sheet[data-side=end] {
2679
+ inset-inline-start: auto;
2680
+ inset-inline-end: 0;
2681
+ border-inline-start: 1px solid var(--zx-color-border);
2682
+ --zx-sheet-enter: 100% 0;
2683
+ }
2684
+ [dir=rtl] .zx-sheet[data-side=start] {
2685
+ --zx-sheet-enter: 100% 0;
2686
+ }
2687
+ [dir=rtl] .zx-sheet[data-side=end] {
2688
+ --zx-sheet-enter: -100% 0;
2689
+ }
2690
+ .zx-sheet[data-side=top],
2691
+ .zx-sheet[data-side=bottom] {
2692
+ inset-inline: 0;
2693
+ inline-size: 100vw;
2694
+ block-size: var(--zx-sheet-size, min(60dvh, 100dvh));
2695
+ }
2696
+ .zx-sheet[data-side=top] {
2697
+ inset-block-start: 0;
2698
+ inset-block-end: auto;
2699
+ border-block-end: 1px solid var(--zx-color-border);
2700
+ border-end-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2701
+ border-end-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2702
+ --zx-sheet-enter: 0 -100%;
2703
+ }
2704
+ .zx-sheet[data-side=bottom] {
2705
+ inset-block-start: auto;
2706
+ inset-block-end: 0;
2707
+ border-block-start: 1px solid var(--zx-color-border);
2708
+ border-start-start-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2709
+ border-start-end-radius: var(--zx-sheet-radius, var(--zx-radius-xl));
2710
+ --zx-sheet-enter: 0 100%;
2711
+ }
2712
+ .zx-sheet[data-backdrop=none]::backdrop {
2713
+ background: transparent;
2714
+ }
2715
+ .zx-sheet[data-backdrop=blur]::backdrop {
2716
+ backdrop-filter: blur(var(--zx-overlay-blur));
2717
+ }
2718
+ @media (prefers-reduced-motion: no-preference) {
2719
+ .zx-sheet {
2720
+ transition:
2721
+ translate var(--zx-dur-base) var(--zx-ease),
2722
+ opacity var(--zx-dur-base) var(--zx-ease),
2723
+ display var(--zx-dur-base) allow-discrete,
2724
+ overlay var(--zx-dur-base) allow-discrete;
2725
+ }
2726
+ .zx-sheet[data-state=open] {
2727
+ animation: none;
2728
+ }
2729
+ .zx-sheet:not([open]) {
2730
+ translate: var(--zx-sheet-enter, 0 0);
2731
+ opacity: 0;
2732
+ }
2733
+ @starting-style {
2734
+ .zx-sheet[open] {
2735
+ translate: var(--zx-sheet-enter, 0 0);
2736
+ opacity: 0;
2737
+ }
2738
+ }
2739
+ .zx-sheet::backdrop {
2740
+ transition:
2741
+ opacity var(--zx-dur-base) var(--zx-ease),
2742
+ display var(--zx-dur-base) allow-discrete,
2743
+ overlay var(--zx-dur-base) allow-discrete;
2744
+ }
2745
+ .zx-sheet[data-state=open]::backdrop {
2746
+ animation: none;
2747
+ }
2748
+ .zx-sheet:not([open])::backdrop {
2749
+ opacity: 0;
2750
+ }
2751
+ @starting-style {
2752
+ .zx-sheet[open]::backdrop {
2753
+ opacity: 0;
2754
+ }
2755
+ }
2756
+ }
2757
+ .zx-sheet[data-docked] {
2758
+ position: relative;
2759
+ inset: auto;
2760
+ flex: 0 0 var(--zx-pane-size, var(--zx-sheet-size, min(24rem, 100%)));
2761
+ inline-size: auto;
2762
+ block-size: auto;
2763
+ max-inline-size: none;
2764
+ max-block-size: none;
2765
+ min-inline-size: 0;
2766
+ min-block-size: 0;
2767
+ border-radius: 0;
2768
+ box-shadow: none;
2769
+ }
2770
+ .zx-dock[data-orientation=vertical] > .zx-sheet[data-docked] {
2771
+ border-inline: 0;
2772
+ border-block: 1px solid var(--zx-color-border);
2773
+ }
2774
+ .zx-dock[data-orientation=horizontal] > .zx-sheet[data-docked] {
2775
+ border-block: 0;
2776
+ border-inline: 1px solid var(--zx-color-border);
2777
+ }
2778
+ @media (prefers-reduced-motion: no-preference) {
2779
+ .zx-sheet[data-docked] {
2780
+ transition:
2781
+ flex-basis var(--zx-dur-base) var(--zx-ease),
2782
+ opacity var(--zx-dur-base) var(--zx-ease),
2783
+ display var(--zx-dur-base) allow-discrete,
2784
+ overlay var(--zx-dur-base) allow-discrete;
2785
+ translate: none;
2786
+ }
2787
+ .zx-sheet[data-docked]:not([open]) {
2788
+ flex-basis: 0;
2789
+ translate: none;
2790
+ opacity: 0;
2791
+ }
2792
+ @starting-style {
2793
+ .zx-sheet[data-docked][open] {
2794
+ flex-basis: 0;
2795
+ translate: none;
2796
+ opacity: 0;
2797
+ }
2798
+ }
2799
+ }
2800
+ .zx-sheet__handle {
2801
+ position: absolute;
2802
+ z-index: 1;
2803
+ display: flex;
2804
+ align-items: center;
2805
+ justify-content: center;
2806
+ touch-action: none;
2807
+ user-select: none;
2808
+ }
2809
+ .zx-sheet__handle::after {
2810
+ content: "";
2811
+ border-radius: var(--zx-radius-full);
2812
+ background: var(--zx-color-border-strong);
2813
+ opacity: 0;
2814
+ transition: opacity var(--zx-dur-fast) var(--zx-ease);
2815
+ }
2816
+ .zx-sheet__handle:hover::after,
2817
+ .zx-sheet__handle:focus-visible::after,
2818
+ .zx-sheet[data-dragging] .zx-sheet__handle::after {
2819
+ opacity: 1;
2820
+ }
2821
+ .zx-sheet__handle:focus-visible {
2822
+ outline: none;
2823
+ box-shadow: var(--zx-focus-ring);
2824
+ }
2825
+ .zx-sheet[data-side=start] > .zx-sheet__handle,
2826
+ .zx-sheet[data-side=end] > .zx-sheet__handle {
2827
+ inset-block: 0;
2828
+ inline-size: var(--zx-space-3);
2829
+ cursor: col-resize;
2830
+ }
2831
+ .zx-sheet[data-side=start] > .zx-sheet__handle {
2832
+ inset-inline-end: 0;
2833
+ }
2834
+ .zx-sheet[data-side=end] > .zx-sheet__handle {
2835
+ inset-inline-start: 0;
2836
+ }
2837
+ .zx-sheet[data-side=start] > .zx-sheet__handle::after,
2838
+ .zx-sheet[data-side=end] > .zx-sheet__handle::after {
2839
+ inline-size: 3px;
2840
+ block-size: var(--zx-space-8);
2841
+ }
2842
+ .zx-sheet[data-side=top] > .zx-sheet__handle,
2843
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle {
2844
+ inset-inline: 0;
2845
+ block-size: var(--zx-space-4);
2846
+ cursor: row-resize;
2847
+ }
2848
+ .zx-sheet[data-side=top] > .zx-sheet__handle {
2849
+ inset-block-end: 0;
2850
+ }
2851
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle {
2852
+ inset-block-start: 0;
2853
+ }
2854
+ .zx-sheet[data-side=top] > .zx-sheet__handle::after,
2855
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle::after {
2856
+ inline-size: var(--zx-space-8);
2857
+ block-size: 4px;
2858
+ }
2859
+ .zx-sheet[data-side=top] > .zx-sheet__handle::after,
2860
+ .zx-sheet[data-side=bottom] > .zx-sheet__handle::after {
2861
+ opacity: 1;
2065
2862
  }
2066
- @keyframes zx-modal-backdrop-enter {
2067
- from {
2068
- opacity: 0;
2069
- }
2863
+ .zx-sheet[data-docked] > .zx-sheet__handle {
2864
+ display: none;
2070
2865
  }
2071
-
2072
- /* src/components/dialog/dialog.css */
2073
- .zx-dialog {
2074
- grid-template-rows: auto minmax(0, 1fr) auto;
2075
- padding: 0;
2866
+ .zx-sheet[data-dragging] {
2867
+ transition: none;
2076
2868
  }
2077
- .zx-dialog[open] {
2078
- display: grid;
2869
+ .zx-sheet[data-side=start] {
2870
+ --zx-sheet-dx: -1;
2871
+ --zx-sheet-dy: 0;
2079
2872
  }
2080
- .zx-dialog__header,
2081
- .zx-dialog__footer {
2082
- display: flex;
2083
- align-items: center;
2084
- gap: var(--zx-space-3);
2085
- padding: var(--zx-space-4) var(--zx-space-5);
2873
+ .zx-sheet[data-side=end] {
2874
+ --zx-sheet-dx: 1;
2875
+ --zx-sheet-dy: 0;
2086
2876
  }
2087
- .zx-dialog__header {
2088
- justify-content: space-between;
2089
- border-block-end: 1px solid var(--zx-color-border);
2877
+ .zx-sheet[data-side=top] {
2878
+ --zx-sheet-dx: 0;
2879
+ --zx-sheet-dy: -1;
2090
2880
  }
2091
- .zx-dialog__title {
2092
- margin: 0;
2093
- font-size: var(--zx-text-xl);
2094
- line-height: 1.3;
2881
+ .zx-sheet[data-side=bottom] {
2882
+ --zx-sheet-dx: 0;
2883
+ --zx-sheet-dy: 1;
2095
2884
  }
2096
- .zx-dialog__close {
2097
- flex: none;
2098
- inline-size: var(--zx-control-height);
2099
- padding-inline: 0;
2100
- font-size: var(--zx-text-xl);
2885
+ .zx-sheet[data-side=start] {
2886
+ transform-origin: left center;
2101
2887
  }
2102
- .zx-dialog__body {
2103
- min-block-size: 0;
2104
- overflow: auto;
2888
+ .zx-sheet[data-side=end] {
2889
+ transform-origin: right center;
2105
2890
  }
2106
- .zx-dialog__footer {
2107
- justify-content: flex-end;
2108
- border-block-start: 1px solid var(--zx-color-border);
2891
+ .zx-sheet[data-side=top] {
2892
+ transform-origin: center top;
2109
2893
  }
2110
- .zx-dialog__footer[hidden] {
2111
- display: none;
2894
+ .zx-sheet[data-side=bottom] {
2895
+ transform-origin: center bottom;
2112
2896
  }
2113
- .zx-dialog__view[aria-hidden=true] {
2114
- display: none;
2897
+ .zx-sheet[data-stack=stack] {
2898
+ transform: translate(calc(var(--zx-sheet-dx, 0) * var(--zx-sheet-depth, 0) * var(--zx-sheet-stack-offset, 24px)), calc(var(--zx-sheet-dy, 0) * var(--zx-sheet-depth, 0) * var(--zx-sheet-stack-offset, 24px))) scale(calc(1 - var(--zx-sheet-depth, 0) * var(--zx-sheet-stack-scale, 0.04)));
2115
2899
  }
2116
- .zx-dialog__prompt {
2117
- display: grid;
2118
- gap: var(--zx-space-3);
2900
+ .zx-sheet[data-stack=cascade] {
2901
+ transform: translate(calc(var(--zx-sheet-dx, 0) * var(--zx-sheet-depth-offset, 0px) * -1), calc(var(--zx-sheet-dy, 0) * var(--zx-sheet-depth-offset, 0px) * -1));
2119
2902
  }
2120
- .zx-dialog__prompt-input {
2121
- inline-size: 100%;
2903
+ .zx-sheet[data-stack-hidden] {
2904
+ opacity: 0;
2905
+ pointer-events: none;
2122
2906
  }
2123
- @media (prefers-reduced-motion: no-preference) {
2124
- .zx-dialog__view[aria-hidden=false] {
2125
- animation: zx-dialog-view-enter var(--zx-dur-fast) var(--zx-ease);
2126
- }
2907
+ .zx-sheet[data-depth]:not([data-depth="0"])::backdrop {
2908
+ background: transparent;
2909
+ backdrop-filter: none;
2127
2910
  }
2128
- @keyframes zx-dialog-view-enter {
2129
- from {
2130
- opacity: 0;
2131
- transform: translateX(var(--zx-space-2));
2911
+ .zx-sheet[data-stack=cascade]::backdrop {
2912
+ background: transparent;
2913
+ backdrop-filter: none;
2914
+ }
2915
+ @media (prefers-reduced-motion: no-preference) {
2916
+ .zx-sheet[data-stack] {
2917
+ transition:
2918
+ transform var(--zx-dur-base) var(--zx-ease),
2919
+ translate var(--zx-dur-base) var(--zx-ease),
2920
+ opacity var(--zx-dur-base) var(--zx-ease),
2921
+ display var(--zx-dur-base) allow-discrete,
2922
+ overlay var(--zx-dur-base) allow-discrete;
2132
2923
  }
2133
2924
  }
2134
2925
 
@@ -2284,6 +3075,208 @@ body:has(> .zx-modal[open]) {
2284
3075
  }
2285
3076
  }
2286
3077
 
3078
+ /* src/components/dock/dock.css */
3079
+ .zx-dock {
3080
+ --zx-dock-divider-size: var(--zx-space-2);
3081
+ --zx-dock-divider-line: 1px;
3082
+ display: flex;
3083
+ min-inline-size: 0;
3084
+ min-block-size: 0;
3085
+ background: var(--zx-color-bg-surface);
3086
+ color: var(--zx-color-text);
3087
+ }
3088
+ .zx-dock[data-orientation=vertical] {
3089
+ flex-direction: column;
3090
+ }
3091
+ .zx-dock[data-orientation=horizontal] {
3092
+ flex-direction: row;
3093
+ }
3094
+ .zx-dock[data-dragging=true] {
3095
+ user-select: none;
3096
+ cursor: inherit;
3097
+ }
3098
+ .zx-dock__pane {
3099
+ display: flex;
3100
+ flex-direction: column;
3101
+ flex: 0 0 var(--zx-pane-size, auto);
3102
+ min-inline-size: 0;
3103
+ min-block-size: 0;
3104
+ overflow: hidden;
3105
+ }
3106
+ .zx-dock__pane[data-grow=true],
3107
+ .zx-dock__content {
3108
+ flex: 1 1 0;
3109
+ min-inline-size: 0;
3110
+ min-block-size: 0;
3111
+ }
3112
+ .zx-dock__content {
3113
+ overflow: auto;
3114
+ }
3115
+ .zx-dock__pane[data-state=collapsed] {
3116
+ flex: 0 0 auto;
3117
+ }
3118
+ .zx-dock__pane[data-state=collapsed] > .zx-dock__body {
3119
+ display: none;
3120
+ }
3121
+ .zx-dock__header {
3122
+ flex: none;
3123
+ display: flex;
3124
+ align-items: center;
3125
+ gap: var(--zx-space-1);
3126
+ padding-inline: var(--zx-space-2);
3127
+ min-block-size: var(--zx-control-height);
3128
+ border-block-end: 1px solid var(--zx-color-border);
3129
+ background: var(--zx-color-bg-muted);
3130
+ }
3131
+ .zx-dock__pane[data-state=collapsed] > .zx-dock__header {
3132
+ border-block-end-color: transparent;
3133
+ }
3134
+ .zx-dock__toggle {
3135
+ flex: none;
3136
+ display: inline-flex;
3137
+ align-items: center;
3138
+ gap: var(--zx-space-2);
3139
+ min-block-size: 0;
3140
+ border: 0;
3141
+ border-radius: var(--zx-radius-sm);
3142
+ padding: var(--zx-space-1);
3143
+ background: none;
3144
+ color: inherit;
3145
+ font: inherit;
3146
+ font-size: var(--zx-text-sm);
3147
+ font-weight: var(--zx-control-font-weight);
3148
+ cursor: pointer;
3149
+ }
3150
+ .zx-dock__toggle:hover:not(:disabled) {
3151
+ background: var(--zx-color-bg-hover);
3152
+ }
3153
+ .zx-dock__toggle:disabled {
3154
+ cursor: default;
3155
+ }
3156
+ .zx-dock__toggle:disabled .zx-dock__chevron {
3157
+ visibility: hidden;
3158
+ }
3159
+ .zx-dock__toggle:focus-visible {
3160
+ outline: none;
3161
+ box-shadow: var(--zx-focus-ring);
3162
+ }
3163
+ .zx-dock__chevron {
3164
+ display: inline-flex;
3165
+ color: var(--zx-color-text-muted);
3166
+ transition: rotate var(--zx-dur-fast) var(--zx-ease);
3167
+ }
3168
+ .zx-dock__pane[data-state=open] > .zx-dock__header .zx-dock__chevron {
3169
+ rotate: 90deg;
3170
+ }
3171
+ @media (prefers-reduced-motion: reduce) {
3172
+ .zx-dock__chevron {
3173
+ transition: none;
3174
+ }
3175
+ }
3176
+ .zx-dock__title {
3177
+ white-space: nowrap;
3178
+ overflow: hidden;
3179
+ text-overflow: ellipsis;
3180
+ }
3181
+ .zx-dock__tabs {
3182
+ display: flex;
3183
+ align-items: stretch;
3184
+ gap: var(--zx-space-1);
3185
+ min-inline-size: 0;
3186
+ overflow-x: auto;
3187
+ scrollbar-width: none;
3188
+ }
3189
+ .zx-dock__tabs::-webkit-scrollbar {
3190
+ display: none;
3191
+ }
3192
+ .zx-dock__tab {
3193
+ flex: none;
3194
+ min-block-size: 0;
3195
+ border: 0;
3196
+ border-radius: var(--zx-radius-sm);
3197
+ padding: var(--zx-space-1) var(--zx-space-2);
3198
+ background: none;
3199
+ color: var(--zx-color-text-muted);
3200
+ font: inherit;
3201
+ font-size: var(--zx-text-sm);
3202
+ white-space: nowrap;
3203
+ cursor: pointer;
3204
+ }
3205
+ .zx-dock__tab:hover {
3206
+ color: var(--zx-color-text);
3207
+ }
3208
+ .zx-dock__tab[aria-selected=true] {
3209
+ background: var(--zx-color-bg-surface);
3210
+ color: var(--zx-color-text);
3211
+ font-weight: var(--zx-control-font-weight);
3212
+ }
3213
+ .zx-dock__tab:focus-visible {
3214
+ outline: none;
3215
+ box-shadow: var(--zx-focus-ring);
3216
+ }
3217
+ .zx-dock__body {
3218
+ display: flex;
3219
+ flex-direction: column;
3220
+ flex: 1 1 auto;
3221
+ min-block-size: 0;
3222
+ min-inline-size: 0;
3223
+ overflow: auto;
3224
+ }
3225
+ .zx-dock__pane-content,
3226
+ .zx-dock__panel {
3227
+ flex: 1 1 auto;
3228
+ min-block-size: 0;
3229
+ padding: var(--zx-space-3);
3230
+ }
3231
+ .zx-dock__pane-content > .zx-dock:only-child,
3232
+ .zx-dock__panel > .zx-dock:only-child {
3233
+ block-size: 100%;
3234
+ }
3235
+ .zx-dock__panel:focus-visible {
3236
+ outline: none;
3237
+ box-shadow: inset var(--zx-focus-ring);
3238
+ }
3239
+ .zx-dock__divider {
3240
+ position: relative;
3241
+ flex: none;
3242
+ background: none;
3243
+ }
3244
+ .zx-dock[data-orientation=vertical] > .zx-dock__divider {
3245
+ block-size: var(--zx-dock-divider-size);
3246
+ margin-block: calc(var(--zx-dock-divider-size) / -2);
3247
+ cursor: row-resize;
3248
+ }
3249
+ .zx-dock[data-orientation=horizontal] > .zx-dock__divider {
3250
+ inline-size: var(--zx-dock-divider-size);
3251
+ margin-inline: calc(var(--zx-dock-divider-size) / -2);
3252
+ cursor: col-resize;
3253
+ }
3254
+ .zx-dock__divider[data-disabled] {
3255
+ cursor: default;
3256
+ }
3257
+ .zx-dock__divider::after {
3258
+ content: "";
3259
+ position: absolute;
3260
+ inset: 0;
3261
+ margin: auto;
3262
+ background: var(--zx-color-border);
3263
+ }
3264
+ .zx-dock[data-orientation=vertical] > .zx-dock__divider::after {
3265
+ block-size: var(--zx-dock-divider-line);
3266
+ }
3267
+ .zx-dock[data-orientation=horizontal] > .zx-dock__divider::after {
3268
+ inline-size: var(--zx-dock-divider-line);
3269
+ }
3270
+ .zx-dock__divider:not([data-disabled]):hover::after,
3271
+ .zx-dock[data-dragging=true] .zx-dock__divider:focus::after {
3272
+ background: var(--zx-color-accent);
3273
+ }
3274
+ .zx-dock__divider:focus-visible {
3275
+ outline: none;
3276
+ z-index: 1;
3277
+ box-shadow: var(--zx-focus-ring);
3278
+ }
3279
+
2287
3280
  /* src/components/menu-button/menu-button.css */
2288
3281
  .zx-menu-button {
2289
3282
  display: inline-flex;
@@ -2476,7 +3469,6 @@ body:has(> .zx-modal[open]) {
2476
3469
  .zx-select__option[aria-selected=true] {
2477
3470
  background: var(--zx-color-bg-selected);
2478
3471
  }
2479
- .zx-select__option > svg,
2480
3472
  .zx-select__option > .zx-icon {
2481
3473
  flex: none;
2482
3474
  color: var(--zx-color-accent);
@@ -3034,47 +4026,6 @@ body:has(> .zx-modal[open]) {
3034
4026
  gap: 4px;
3035
4027
  }
3036
4028
 
3037
- /* src/components/permission/permission.css */
3038
- .zx-permission {
3039
- min-inline-size: 0;
3040
- color: var(--zx-color-text);
3041
- font-size: var(--zx-control-font-size);
3042
- }
3043
- .zx-permission__choices {
3044
- display: grid;
3045
- grid-template-columns: repeat(3, max-content) minmax(160px, 1fr);
3046
- align-items: center;
3047
- gap: var(--zx-space-2) var(--zx-space-4);
3048
- }
3049
- .zx-permission__choice {
3050
- display: inline-flex;
3051
- align-items: center;
3052
- gap: var(--zx-space-2);
3053
- min-block-size: var(--zx-control-height);
3054
- cursor: pointer;
3055
- }
3056
- .zx-permission__choice input {
3057
- accent-color: var(--zx-color-accent);
3058
- }
3059
- .zx-permission__choice:has(input:focus-visible) {
3060
- border-radius: var(--zx-radius-sm);
3061
- box-shadow: var(--zx-focus-ring);
3062
- }
3063
- .zx-permission__groups {
3064
- min-inline-size: 160px;
3065
- }
3066
- .zx-permission:not([data-state=group]) .zx-permission__groups {
3067
- color: var(--zx-color-text-muted);
3068
- }
3069
- @media (max-width: 640px) {
3070
- .zx-permission__choices {
3071
- grid-template-columns: 1fr;
3072
- }
3073
- .zx-permission__groups {
3074
- inline-size: 100%;
3075
- }
3076
- }
3077
-
3078
4029
  /* src/components/date-picker/date-picker.css */
3079
4030
  .zx-date-picker,
3080
4031
  .zx-month-picker {
@@ -3984,6 +4935,41 @@ body:has(> .zx-modal[open]) {
3984
4935
  color: var(--zx-color-text-muted);
3985
4936
  text-align: center;
3986
4937
  }
4938
+ .zx-table__tree-cell {
4939
+ display: flex;
4940
+ min-inline-size: 0;
4941
+ align-items: center;
4942
+ gap: var(--zx-space-1);
4943
+ padding-inline-start: calc(var(--zx-table-depth, 0) * var(--zx-space-4));
4944
+ }
4945
+ .zx-table__tree-toggle,
4946
+ .zx-table__tree-spacer {
4947
+ inline-size: 24px;
4948
+ block-size: 24px;
4949
+ flex: 0 0 24px;
4950
+ }
4951
+ .zx-table__tree-toggle {
4952
+ display: inline-grid;
4953
+ min-block-size: 0;
4954
+ place-items: center;
4955
+ padding: 0;
4956
+ border: 0;
4957
+ border-radius: var(--zx-radius-sm);
4958
+ background: transparent;
4959
+ color: var(--zx-color-text-muted);
4960
+ cursor: pointer;
4961
+ }
4962
+ .zx-table__tree-toggle:hover {
4963
+ background: var(--zx-color-bg-hover);
4964
+ color: var(--zx-color-text);
4965
+ }
4966
+ .zx-table__tree-toggle:focus-visible {
4967
+ outline: 0;
4968
+ box-shadow: var(--zx-focus-ring);
4969
+ }
4970
+ .zx-table__cell-content {
4971
+ min-inline-size: 0;
4972
+ }
3987
4973
  .zx-table[data-edit-mode] .zx-table__body td {
3988
4974
  block-size: var(--zx-control-height);
3989
4975
  }
@@ -4106,6 +5092,80 @@ body:has(> .zx-modal[open]) {
4106
5092
  color: var(--zx-color-text);
4107
5093
  }
4108
5094
 
5095
+ /* src/components/grid/grid.css */
5096
+ .zx-table[data-preset=billing-items] tr.zx-grid-billing__summary > td {
5097
+ background: var(--zx-color-bg-subtle);
5098
+ font-weight: 700;
5099
+ }
5100
+
5101
+ /* src/components/chart/chart.css */
5102
+ .zx-chart {
5103
+ display: grid;
5104
+ gap: var(--zx-space-4);
5105
+ min-inline-size: 0;
5106
+ color: var(--zx-color-text);
5107
+ }
5108
+ .zx-chart__viewport {
5109
+ position: relative;
5110
+ inline-size: 100%;
5111
+ min-block-size: 220px;
5112
+ aspect-ratio: var(--zx-chart-aspect-ratio, 16 / 9);
5113
+ }
5114
+ .zx-chart__viewport[hidden],
5115
+ .zx-chart__status[hidden] {
5116
+ display: none;
5117
+ }
5118
+ .zx-chart__canvas {
5119
+ position: absolute;
5120
+ inset: 0;
5121
+ inline-size: 100% !important;
5122
+ block-size: 100% !important;
5123
+ }
5124
+ .zx-chart__description {
5125
+ margin: 0;
5126
+ color: var(--zx-color-text-muted);
5127
+ font-size: var(--zx-text-sm);
5128
+ }
5129
+ .zx-chart__description:empty {
5130
+ display: none;
5131
+ }
5132
+ .zx-chart__status {
5133
+ display: grid;
5134
+ min-block-size: 180px;
5135
+ place-items: center;
5136
+ border: 1px dashed var(--zx-color-border);
5137
+ border-radius: var(--zx-radius-lg);
5138
+ color: var(--zx-color-text-muted);
5139
+ text-align: center;
5140
+ }
5141
+ .zx-chart__summary[data-summary=hidden] {
5142
+ position: absolute;
5143
+ inline-size: 1px;
5144
+ block-size: 1px;
5145
+ overflow: hidden;
5146
+ clip-path: inset(50%);
5147
+ white-space: nowrap;
5148
+ }
5149
+ .zx-chart__table {
5150
+ inline-size: 100%;
5151
+ border-collapse: collapse;
5152
+ }
5153
+ .zx-chart__table caption {
5154
+ margin-block-end: var(--zx-space-2);
5155
+ font-weight: 700;
5156
+ text-align: start;
5157
+ }
5158
+ .zx-chart__table th,
5159
+ .zx-chart__table td {
5160
+ border-block-end: 1px solid var(--zx-color-border);
5161
+ padding: var(--zx-space-2);
5162
+ text-align: end;
5163
+ }
5164
+ .zx-chart__table th:first-child,
5165
+ .zx-chart__table td:first-child {
5166
+ text-align: start;
5167
+ }
5168
+
4109
5169
  /* src/components/tree/tree.css */
4110
5170
  .zx-tree {
4111
5171
  --zx-tree-indent: 18px;
@@ -5131,4 +6191,295 @@ button.zx-stepper__control:disabled {
5131
6191
  }
5132
6192
  }
5133
6193
 
6194
+ /* src/components/questionnaire/questionnaire.css */
6195
+ .zx-questionnaire {
6196
+ --zx-questionnaire-radius: var(--zx-radius-lg);
6197
+ --zx-questionnaire-gap: var(--zx-space-3);
6198
+ display: block;
6199
+ color: var(--zx-color-text);
6200
+ }
6201
+ .zx-questionnaire__form,
6202
+ .zx-questionnaire:is(form) {
6203
+ display: grid;
6204
+ gap: var(--zx-space-5);
6205
+ }
6206
+ .zx-questionnaire__progress {
6207
+ display: block;
6208
+ }
6209
+ .zx-questionnaire__progress[hidden],
6210
+ .zx-questionnaire__item[hidden],
6211
+ .zx-questionnaire__review[hidden],
6212
+ .zx-questionnaire__error[hidden],
6213
+ .zx-questionnaire__actions > .zx-btn[hidden] {
6214
+ display: none;
6215
+ }
6216
+ .zx-questionnaire__item {
6217
+ display: grid;
6218
+ gap: var(--zx-questionnaire-gap);
6219
+ margin: 0;
6220
+ border: 0;
6221
+ padding: 0;
6222
+ min-inline-size: 0;
6223
+ }
6224
+ .zx-questionnaire__item:focus {
6225
+ outline: none;
6226
+ }
6227
+ .zx-questionnaire__item:focus-visible {
6228
+ outline: none;
6229
+ box-shadow: var(--zx-focus-ring);
6230
+ border-radius: var(--zx-questionnaire-radius);
6231
+ }
6232
+ .zx-questionnaire__prompt {
6233
+ display: block;
6234
+ float: none;
6235
+ margin: 0;
6236
+ padding: 0;
6237
+ inline-size: 100%;
6238
+ color: var(--zx-color-text);
6239
+ font-size: var(--zx-text-lg);
6240
+ font-weight: 600;
6241
+ line-height: 1.35;
6242
+ }
6243
+ .zx-questionnaire__description {
6244
+ margin: 0;
6245
+ color: var(--zx-color-text-muted);
6246
+ font-size: var(--zx-text-sm);
6247
+ line-height: 1.5;
6248
+ }
6249
+ .zx-questionnaire__error {
6250
+ display: flex;
6251
+ gap: var(--zx-space-2);
6252
+ margin: 0;
6253
+ color: var(--zx-color-danger);
6254
+ font-size: var(--zx-text-sm);
6255
+ }
6256
+ .zx-questionnaire__choices {
6257
+ display: grid;
6258
+ gap: var(--zx-space-2);
6259
+ }
6260
+ .zx-questionnaire__choice {
6261
+ display: flex;
6262
+ align-items: flex-start;
6263
+ gap: var(--zx-space-3);
6264
+ border: 1px solid var(--zx-color-border-control);
6265
+ border-radius: var(--zx-questionnaire-radius);
6266
+ background: var(--zx-color-bg-control);
6267
+ padding: var(--zx-space-3);
6268
+ min-inline-size: 0;
6269
+ cursor: pointer;
6270
+ }
6271
+ @media (prefers-reduced-motion: no-preference) {
6272
+ .zx-questionnaire__choice {
6273
+ transition: border-color var(--zx-dur-fast) var(--zx-ease), background-color var(--zx-dur-fast) var(--zx-ease);
6274
+ }
6275
+ }
6276
+ .zx-questionnaire__choice:hover:not([data-disabled]) {
6277
+ border-color: var(--zx-color-border-strong);
6278
+ background: var(--zx-color-bg-hover);
6279
+ }
6280
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) {
6281
+ border-color: var(--zx-color-accent);
6282
+ background: var(--zx-color-bg-selected);
6283
+ }
6284
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:focus-visible) {
6285
+ box-shadow: var(--zx-focus-ring);
6286
+ }
6287
+ .zx-questionnaire__choice[data-disabled] {
6288
+ opacity: 0.55;
6289
+ cursor: not-allowed;
6290
+ }
6291
+ .zx-questionnaire__control {
6292
+ position: absolute;
6293
+ margin: 0;
6294
+ border: 0;
6295
+ padding: 0;
6296
+ inline-size: 1px;
6297
+ block-size: 1px;
6298
+ overflow: hidden;
6299
+ clip-path: inset(50%);
6300
+ white-space: nowrap;
6301
+ }
6302
+ .zx-questionnaire__marker {
6303
+ flex: none;
6304
+ display: grid;
6305
+ place-items: center;
6306
+ margin-block-start: 1px;
6307
+ border: 1px solid var(--zx-color-border-strong);
6308
+ inline-size: 18px;
6309
+ block-size: 18px;
6310
+ background: var(--zx-color-bg-surface);
6311
+ }
6312
+ .zx-questionnaire__choice:has(.zx-questionnaire__control[type=radio]) .zx-questionnaire__marker {
6313
+ border-radius: 50%;
6314
+ }
6315
+ .zx-questionnaire__choice:has(.zx-questionnaire__control[type=checkbox]) .zx-questionnaire__marker {
6316
+ border-radius: var(--zx-radius-sm);
6317
+ }
6318
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) .zx-questionnaire__marker {
6319
+ border-color: var(--zx-color-accent);
6320
+ background: var(--zx-color-accent);
6321
+ }
6322
+ .zx-questionnaire__marker::after {
6323
+ content: "";
6324
+ inline-size: 8px;
6325
+ block-size: 8px;
6326
+ border-radius: inherit;
6327
+ background: var(--zx-color-on-accent);
6328
+ transform: scale(0);
6329
+ }
6330
+ @media (prefers-reduced-motion: no-preference) {
6331
+ .zx-questionnaire__marker::after {
6332
+ transition: transform var(--zx-dur-fast) var(--zx-ease);
6333
+ }
6334
+ }
6335
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) .zx-questionnaire__marker::after {
6336
+ transform: scale(1);
6337
+ }
6338
+ .zx-questionnaire__choice > .zx-icon {
6339
+ flex: none;
6340
+ margin-block-start: 1px;
6341
+ color: var(--zx-color-text-muted);
6342
+ }
6343
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) > .zx-icon {
6344
+ color: var(--zx-color-accent);
6345
+ }
6346
+ .zx-questionnaire__text {
6347
+ display: grid;
6348
+ gap: 2px;
6349
+ flex: 1 1 auto;
6350
+ min-inline-size: 0;
6351
+ }
6352
+ .zx-questionnaire__label {
6353
+ font-size: var(--zx-control-font-size);
6354
+ line-height: 1.4;
6355
+ }
6356
+ .zx-questionnaire__hint {
6357
+ color: var(--zx-color-text-muted);
6358
+ font-size: var(--zx-text-sm);
6359
+ line-height: 1.45;
6360
+ }
6361
+ .zx-questionnaire__key {
6362
+ flex: none;
6363
+ display: grid;
6364
+ place-items: center;
6365
+ border: 1px solid var(--zx-color-border);
6366
+ border-radius: var(--zx-radius-sm);
6367
+ background: var(--zx-color-bg-muted);
6368
+ padding-inline: var(--zx-space-2);
6369
+ min-inline-size: 22px;
6370
+ block-size: 22px;
6371
+ color: var(--zx-color-text-muted);
6372
+ font-family: inherit;
6373
+ font-size: var(--zx-text-xs);
6374
+ text-transform: uppercase;
6375
+ }
6376
+ .zx-questionnaire__choice:has(.zx-questionnaire__control:checked) .zx-questionnaire__key {
6377
+ border-color: var(--zx-color-accent);
6378
+ color: var(--zx-color-accent);
6379
+ }
6380
+ .zx-questionnaire__freeform {
6381
+ display: grid;
6382
+ gap: var(--zx-space-2);
6383
+ padding-block-start: var(--zx-space-1);
6384
+ }
6385
+ .zx-questionnaire__freeform-label {
6386
+ color: var(--zx-color-text-muted);
6387
+ font-size: var(--zx-text-sm);
6388
+ }
6389
+ .zx-questionnaire__freeform-input {
6390
+ border: 1px solid var(--zx-color-border-control);
6391
+ border-radius: var(--zx-control-radius);
6392
+ background: var(--zx-color-bg-control);
6393
+ padding: var(--zx-space-2) var(--zx-control-pad-x);
6394
+ min-block-size: var(--zx-control-height);
6395
+ color: var(--zx-color-text);
6396
+ font: inherit;
6397
+ font-size: var(--zx-control-font-size);
6398
+ }
6399
+ .zx-questionnaire__freeform-input::placeholder {
6400
+ color: var(--zx-color-text-placeholder);
6401
+ }
6402
+ .zx-questionnaire__freeform-input:focus-visible {
6403
+ outline: none;
6404
+ border-color: var(--zx-color-accent);
6405
+ box-shadow: var(--zx-focus-ring);
6406
+ }
6407
+ .zx-questionnaire__field[data-hide-label] > .zx-field__label {
6408
+ position: absolute;
6409
+ inline-size: 1px;
6410
+ block-size: 1px;
6411
+ overflow: hidden;
6412
+ clip-path: inset(50%);
6413
+ white-space: nowrap;
6414
+ }
6415
+ .zx-questionnaire__review {
6416
+ display: grid;
6417
+ gap: var(--zx-space-3);
6418
+ }
6419
+ .zx-questionnaire__review:focus {
6420
+ outline: none;
6421
+ }
6422
+ .zx-questionnaire__review-title {
6423
+ margin: 0;
6424
+ font-size: var(--zx-text-lg);
6425
+ font-weight: 600;
6426
+ }
6427
+ .zx-questionnaire__answers {
6428
+ display: grid;
6429
+ gap: var(--zx-space-2);
6430
+ margin: 0;
6431
+ }
6432
+ .zx-questionnaire__answer {
6433
+ display: grid;
6434
+ grid-template-columns: minmax(0, 1fr) auto;
6435
+ align-items: center;
6436
+ gap: 0 var(--zx-space-3);
6437
+ border: 1px solid var(--zx-color-border);
6438
+ border-radius: var(--zx-questionnaire-radius);
6439
+ background: var(--zx-color-bg-surface);
6440
+ padding: var(--zx-space-3);
6441
+ }
6442
+ .zx-questionnaire__answer-prompt {
6443
+ grid-column: 1;
6444
+ color: var(--zx-color-text-muted);
6445
+ font-size: var(--zx-text-sm);
6446
+ }
6447
+ .zx-questionnaire__answer-value {
6448
+ grid-column: 1;
6449
+ margin: 0;
6450
+ min-inline-size: 0;
6451
+ overflow-wrap: anywhere;
6452
+ }
6453
+ .zx-questionnaire__answer-value[data-empty] {
6454
+ color: var(--zx-color-text-muted);
6455
+ font-style: italic;
6456
+ }
6457
+ .zx-questionnaire__answer > .zx-btn {
6458
+ grid-area: 1 / 2 / 3 / 3;
6459
+ }
6460
+ .zx-questionnaire__actions {
6461
+ display: flex;
6462
+ align-items: center;
6463
+ gap: var(--zx-space-2);
6464
+ flex-wrap: wrap;
6465
+ }
6466
+ .zx-questionnaire__spacer {
6467
+ flex: 1 1 auto;
6468
+ }
6469
+ .zx-questionnaire[data-state=checking] .zx-questionnaire__item,
6470
+ .zx-questionnaire[data-state=checking] .zx-questionnaire__choice {
6471
+ cursor: progress;
6472
+ }
6473
+ .zx-questionnaire[data-state=complete] .zx-questionnaire__item {
6474
+ opacity: 0.7;
6475
+ }
6476
+ @media (max-width: 480px) {
6477
+ .zx-questionnaire__key {
6478
+ display: none;
6479
+ }
6480
+ .zx-questionnaire__actions > .zx-btn {
6481
+ flex: 1 1 auto;
6482
+ }
6483
+ }
6484
+
5134
6485
  /* styles/zx.css */