@zeyos/zx 2.2.1 → 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 (117) hide show
  1. package/CHANGELOG.md +197 -0
  2. package/DESIGN-SYSTEM.md +136 -0
  3. package/MIGRATION.md +155 -4
  4. package/README.md +51 -14
  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 +74 -9
  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/select/select.d.ts +36 -1
  27. package/dist/types/components/sheet/sheet-stack.d.ts +167 -0
  28. package/dist/types/components/sheet/sheet.d.ts +294 -0
  29. package/dist/types/components/split-view/split-view.d.ts +2 -21
  30. package/dist/types/components/tabbox/tabbox.d.ts +12 -3
  31. package/dist/types/components/table/table.d.ts +219 -12
  32. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  33. package/dist/types/components/value-list/value-list.d.ts +24 -3
  34. package/dist/types/core/dom.d.ts +114 -0
  35. package/dist/types/core/drag-axis.d.ts +111 -0
  36. package/dist/types/core/position.d.ts +4 -2
  37. package/dist/types/index.d.ts +12 -2
  38. package/dist/zx-compat.esm.js +943 -311
  39. package/dist/zx-compat.esm.min.js +1 -1
  40. package/dist/zx-compat.global.js +7893 -2252
  41. package/dist/zx-compat.global.min.js +3 -3
  42. package/dist/zx-zeyos.esm.js +826 -114
  43. package/dist/zx-zeyos.esm.min.js +1 -1
  44. package/dist/zx.css +1720 -243
  45. package/dist/zx.esm.js +8227 -2599
  46. package/dist/zx.esm.min.js +3 -3
  47. package/dist/zx.global.js +8227 -2599
  48. package/dist/zx.global.min.js +3 -3
  49. package/dist/zx.min.css +1 -1
  50. package/docs/api.json +2597 -255
  51. package/docs/llms.md +475 -37
  52. package/docs/llms.txt +21 -9
  53. package/package.json +4 -2
  54. package/src/compat/globals.js +3 -1
  55. package/src/compat/map/data.js +31 -9
  56. package/src/components/account-menu/account-menu.css +70 -0
  57. package/src/components/account-menu/account-menu.js +208 -0
  58. package/src/components/app-rail/app-rail.css +107 -0
  59. package/src/components/app-rail/app-rail.js +668 -0
  60. package/src/components/app-sidebar/app-sidebar.css +68 -0
  61. package/src/components/app-sidebar/app-sidebar.js +388 -0
  62. package/src/components/avatar/avatar.css +61 -0
  63. package/src/components/avatar/avatar.js +222 -0
  64. package/src/components/button/button.css +0 -1
  65. package/src/components/chart/chart.css +61 -0
  66. package/src/components/chart/chart.js +518 -0
  67. package/src/components/date-picker/date-range-picker.css +7 -0
  68. package/src/components/date-picker/month-picker.js +9 -0
  69. package/src/components/dialog/dialog.js +11 -4
  70. package/src/components/dock/dock.css +228 -0
  71. package/src/components/dock/dock.js +977 -0
  72. package/src/components/dropdown/dropdown.js +1 -1
  73. package/src/components/field/field.js +2 -0
  74. package/src/components/field-upload/field-upload.js +9 -4
  75. package/src/components/fieldset/fieldset.css +7 -0
  76. package/src/components/form/form.css +7 -0
  77. package/src/components/form/form.js +6 -3
  78. package/src/components/grid/grid.css +6 -0
  79. package/src/components/grid/grid.js +213 -0
  80. package/src/components/launcher/launcher.css +100 -0
  81. package/src/components/launcher/launcher.js +557 -0
  82. package/src/components/layout/layout.js +2 -2
  83. package/src/components/menu-button/menu-button.js +27 -2
  84. package/src/components/modal/modal.css +5 -1
  85. package/src/components/modal/modal.js +37 -2
  86. package/src/components/multi-value-editor/multi-value-editor.css +99 -15
  87. package/src/components/multi-value-editor/multi-value-editor.js +237 -19
  88. package/src/components/navigation-bar/navigation-bar.css +7 -0
  89. package/src/components/questionnaire/items.js +370 -0
  90. package/src/components/questionnaire/questionnaire.css +387 -0
  91. package/src/components/questionnaire/questionnaire.js +1033 -0
  92. package/src/components/search/search.css +10 -2
  93. package/src/components/select/select.css +6 -1
  94. package/src/components/select/select.js +99 -11
  95. package/src/components/sheet/sheet-stack.js +304 -0
  96. package/src/components/sheet/sheet.css +351 -0
  97. package/src/components/sheet/sheet.js +551 -0
  98. package/src/components/split-view/split-view.js +76 -161
  99. package/src/components/stepper/stepper.css +12 -2
  100. package/src/components/tabbox/tabbox.css +13 -3
  101. package/src/components/tabbox/tabbox.js +34 -10
  102. package/src/components/table/table.css +43 -0
  103. package/src/components/table/table.js +523 -45
  104. package/src/components/tooltip/tooltip.js +5 -2
  105. package/src/components/value-list/value-list.js +6 -3
  106. package/src/core/dom.js +302 -0
  107. package/src/core/drag-axis.js +203 -0
  108. package/src/core/position.js +68 -22
  109. package/src/index.js +19 -2
  110. package/styles/tokens/dark.css +15 -13
  111. package/styles/tokens/global.css +17 -5
  112. package/styles/tokens/semantic.css +14 -8
  113. package/styles/tokens/themes.css +72 -0
  114. package/styles/zx.css +11 -1
  115. package/dist/types/components/permission/permission.d.ts +0 -93
  116. package/src/components/permission/permission.css +0 -47
  117. package/src/components/permission/permission.js +0 -198
@@ -0,0 +1,228 @@
1
+ /*
2
+ * One flex line, one custom property per pane. A sized pane is `flex: 0 0 var(--zx-pane-size)`, a
3
+ * collapsed one falls back to `auto` and hides its body so it measures exactly its header, and one
4
+ * element carries `data-grow` to absorb the slack. That is what keeps a drag local: it rewrites at
5
+ * most two properties and nothing else in the stack moves.
6
+ *
7
+ * The root has no size of its own — give it one (a grid area, `block-size: 100%`, a flex child)
8
+ * when the panes should fill a shell rather than grow with their content.
9
+ */
10
+ .zx-dock {
11
+ --zx-dock-divider-size: var(--zx-space-2);
12
+ --zx-dock-divider-line: 1px;
13
+ display: flex;
14
+ min-inline-size: 0;
15
+ min-block-size: 0;
16
+ background: var(--zx-color-bg-surface);
17
+ color: var(--zx-color-text);
18
+ }
19
+
20
+ .zx-dock[data-orientation="vertical"] { flex-direction: column; }
21
+ .zx-dock[data-orientation="horizontal"] { flex-direction: row; }
22
+
23
+ .zx-dock[data-dragging="true"] {
24
+ user-select: none;
25
+ cursor: inherit;
26
+ }
27
+
28
+ .zx-dock__pane {
29
+ display: flex;
30
+ flex-direction: column;
31
+ flex: 0 0 var(--zx-pane-size, auto);
32
+ min-inline-size: 0;
33
+ min-block-size: 0;
34
+ overflow: hidden;
35
+ }
36
+
37
+ .zx-dock__pane[data-grow="true"],
38
+ .zx-dock__content {
39
+ flex: 1 1 0;
40
+ min-inline-size: 0;
41
+ min-block-size: 0;
42
+ }
43
+
44
+ .zx-dock__content { overflow: auto; }
45
+
46
+ /* A collapsed pane keeps its header and nothing else, so the stack measures it exactly. */
47
+ .zx-dock__pane[data-state="collapsed"] { flex: 0 0 auto; }
48
+ .zx-dock__pane[data-state="collapsed"] > .zx-dock__body { display: none; }
49
+
50
+ .zx-dock__header {
51
+ flex: none;
52
+ display: flex;
53
+ align-items: center;
54
+ gap: var(--zx-space-1);
55
+ padding-inline: var(--zx-space-2);
56
+ min-block-size: var(--zx-control-height);
57
+ border-block-end: 1px solid var(--zx-color-border);
58
+ background: var(--zx-color-bg-muted);
59
+ }
60
+
61
+ .zx-dock__pane[data-state="collapsed"] > .zx-dock__header { border-block-end-color: transparent; }
62
+
63
+ .zx-dock__toggle {
64
+ flex: none;
65
+ display: inline-flex;
66
+ align-items: center;
67
+ gap: var(--zx-space-2);
68
+ /* Clears the control chrome `styles/base.css` puts on every bare button. */
69
+ min-block-size: 0;
70
+ border: 0;
71
+ border-radius: var(--zx-radius-sm);
72
+ padding: var(--zx-space-1);
73
+ background: none;
74
+ color: inherit;
75
+ font: inherit;
76
+ font-size: var(--zx-text-sm);
77
+ font-weight: var(--zx-control-font-weight);
78
+ cursor: pointer;
79
+ }
80
+
81
+ .zx-dock__toggle:hover:not(:disabled) { background: var(--zx-color-bg-hover); }
82
+ .zx-dock__toggle:disabled { cursor: default; }
83
+ .zx-dock__toggle:disabled .zx-dock__chevron { visibility: hidden; }
84
+
85
+ .zx-dock__toggle:focus-visible {
86
+ outline: none;
87
+ box-shadow: var(--zx-focus-ring);
88
+ }
89
+
90
+ .zx-dock__chevron {
91
+ display: inline-flex;
92
+ color: var(--zx-color-text-muted);
93
+ transition: rotate var(--zx-dur-fast) var(--zx-ease);
94
+ }
95
+
96
+ .zx-dock__pane[data-state="open"] > .zx-dock__header .zx-dock__chevron { rotate: 90deg; }
97
+
98
+ @media (prefers-reduced-motion: reduce) {
99
+ .zx-dock__chevron { transition: none; }
100
+ }
101
+
102
+ .zx-dock__title {
103
+ white-space: nowrap;
104
+ overflow: hidden;
105
+ text-overflow: ellipsis;
106
+ }
107
+
108
+ /* A tab group puts its strip where the title would be, which is what makes it read as one pane. */
109
+ .zx-dock__tabs {
110
+ display: flex;
111
+ align-items: stretch;
112
+ gap: var(--zx-space-1);
113
+ min-inline-size: 0;
114
+ overflow-x: auto;
115
+ scrollbar-width: none;
116
+ }
117
+
118
+ .zx-dock__tabs::-webkit-scrollbar { display: none; }
119
+
120
+ .zx-dock__tab {
121
+ flex: none;
122
+ /* Same reason as the toggle: the base control box does not apply to a tab. */
123
+ min-block-size: 0;
124
+ border: 0;
125
+ border-radius: var(--zx-radius-sm);
126
+ padding: var(--zx-space-1) var(--zx-space-2);
127
+ background: none;
128
+ color: var(--zx-color-text-muted);
129
+ font: inherit;
130
+ font-size: var(--zx-text-sm);
131
+ white-space: nowrap;
132
+ cursor: pointer;
133
+ }
134
+
135
+ .zx-dock__tab:hover { color: var(--zx-color-text); }
136
+
137
+ .zx-dock__tab[aria-selected="true"] {
138
+ background: var(--zx-color-bg-surface);
139
+ color: var(--zx-color-text);
140
+ font-weight: var(--zx-control-font-weight);
141
+ }
142
+
143
+ .zx-dock__tab:focus-visible {
144
+ outline: none;
145
+ box-shadow: var(--zx-focus-ring);
146
+ }
147
+
148
+ .zx-dock__body {
149
+ display: flex;
150
+ flex-direction: column;
151
+ flex: 1 1 auto;
152
+ min-block-size: 0;
153
+ min-inline-size: 0;
154
+ overflow: auto;
155
+ }
156
+
157
+ .zx-dock__pane-content,
158
+ .zx-dock__panel {
159
+ flex: 1 1 auto;
160
+ min-block-size: 0;
161
+ padding: var(--zx-space-3);
162
+ }
163
+
164
+ /*
165
+ * A dock nested as a pane's whole content fills it. Without this the inner dock would size to its
166
+ * own content and its growing pane would collapse to nothing — and dock-in-dock is exactly how a
167
+ * workbench is built, so it should not need a rule in the application.
168
+ */
169
+ .zx-dock__pane-content > .zx-dock:only-child,
170
+ .zx-dock__panel > .zx-dock:only-child {
171
+ block-size: 100%;
172
+ }
173
+
174
+ .zx-dock__panel:focus-visible {
175
+ outline: none;
176
+ box-shadow: inset var(--zx-focus-ring);
177
+ }
178
+
179
+ /*
180
+ * The hit area is thicker than the line it draws, so the divider is grabbable without a visible
181
+ * gutter — the same trade SplitView makes.
182
+ */
183
+ .zx-dock__divider {
184
+ position: relative;
185
+ flex: none;
186
+ background: none;
187
+ }
188
+
189
+ .zx-dock[data-orientation="vertical"] > .zx-dock__divider {
190
+ block-size: var(--zx-dock-divider-size);
191
+ margin-block: calc(var(--zx-dock-divider-size) / -2);
192
+ cursor: row-resize;
193
+ }
194
+
195
+ .zx-dock[data-orientation="horizontal"] > .zx-dock__divider {
196
+ inline-size: var(--zx-dock-divider-size);
197
+ margin-inline: calc(var(--zx-dock-divider-size) / -2);
198
+ cursor: col-resize;
199
+ }
200
+
201
+ .zx-dock__divider[data-disabled] { cursor: default; }
202
+
203
+ .zx-dock__divider::after {
204
+ content: "";
205
+ position: absolute;
206
+ inset: 0;
207
+ margin: auto;
208
+ background: var(--zx-color-border);
209
+ }
210
+
211
+ .zx-dock[data-orientation="vertical"] > .zx-dock__divider::after {
212
+ block-size: var(--zx-dock-divider-line);
213
+ }
214
+
215
+ .zx-dock[data-orientation="horizontal"] > .zx-dock__divider::after {
216
+ inline-size: var(--zx-dock-divider-line);
217
+ }
218
+
219
+ .zx-dock__divider:not([data-disabled]):hover::after,
220
+ .zx-dock[data-dragging="true"] .zx-dock__divider:focus::after {
221
+ background: var(--zx-color-accent);
222
+ }
223
+
224
+ .zx-dock__divider:focus-visible {
225
+ outline: none;
226
+ z-index: 1;
227
+ box-shadow: var(--zx-focus-ring);
228
+ }