@zeyos/zx 2.2.1 → 2.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 (39) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/README.md +28 -2
  3. package/dist/types/components/multi-value-editor/multi-value-editor.d.ts +67 -8
  4. package/dist/types/components/permission/permission.d.ts +3 -0
  5. package/dist/types/components/select/select.d.ts +36 -1
  6. package/dist/types/components/tabbox/tabbox.d.ts +12 -3
  7. package/dist/zx-compat.esm.js +302 -34
  8. package/dist/zx-compat.esm.min.js +1 -1
  9. package/dist/zx-compat.global.js +302 -34
  10. package/dist/zx-compat.global.min.js +3 -3
  11. package/dist/zx-zeyos.esm.js +280 -27
  12. package/dist/zx-zeyos.esm.min.js +1 -1
  13. package/dist/zx.css +159 -33
  14. package/dist/zx.esm.js +302 -34
  15. package/dist/zx.esm.min.js +3 -3
  16. package/dist/zx.global.js +302 -34
  17. package/dist/zx.global.min.js +3 -3
  18. package/dist/zx.min.css +1 -1
  19. package/docs/api.json +420 -17
  20. package/docs/llms.md +54 -12
  21. package/package.json +1 -1
  22. package/src/components/date-picker/date-range-picker.css +7 -0
  23. package/src/components/fieldset/fieldset.css +7 -0
  24. package/src/components/form/form.css +7 -0
  25. package/src/components/multi-value-editor/multi-value-editor.css +99 -15
  26. package/src/components/multi-value-editor/multi-value-editor.js +235 -18
  27. package/src/components/navigation-bar/navigation-bar.css +7 -0
  28. package/src/components/permission/permission.js +3 -0
  29. package/src/components/search/search.css +10 -2
  30. package/src/components/select/select.css +6 -0
  31. package/src/components/select/select.js +99 -11
  32. package/src/components/stepper/stepper.css +12 -2
  33. package/src/components/tabbox/tabbox.css +13 -3
  34. package/src/components/tabbox/tabbox.js +34 -10
  35. package/styles/tokens/dark.css +13 -10
  36. package/styles/tokens/global.css +12 -0
  37. package/styles/tokens/semantic.css +9 -5
  38. package/styles/tokens/themes.css +72 -0
  39. package/styles/zx.css +1 -0
package/dist/zx.css CHANGED
@@ -18,6 +18,11 @@
18
18
  --zx-green-500: #009966;
19
19
  --zx-green-600: #007a55;
20
20
  --zx-green-700: #006045;
21
+ --zx-accent-300: var(--zx-green-300);
22
+ --zx-accent-400: var(--zx-green-400);
23
+ --zx-accent-500: var(--zx-green-500);
24
+ --zx-accent-600: var(--zx-green-600);
25
+ --zx-accent-700: var(--zx-green-700);
21
26
  --zx-red-400: #ff6467;
22
27
  --zx-red-500: #e7000b;
23
28
  --zx-red-600: #c10007;
@@ -75,6 +80,50 @@
75
80
  --zx-ease: cubic-bezier(.2, .6, .3, 1);
76
81
  }
77
82
 
83
+ /* styles/tokens/themes.css */
84
+ [data-zx-preset=zx] {
85
+ --zx-accent-300: #5ee9b5;
86
+ --zx-accent-400: #21cc75;
87
+ --zx-accent-500: #009966;
88
+ --zx-accent-600: #007a55;
89
+ --zx-accent-700: #006045;
90
+ }
91
+ [data-zx-preset=zeyos] {
92
+ --zx-accent-300: #ffd9a8;
93
+ --zx-accent-400: #f7bc60;
94
+ --zx-accent-500: #d0952f;
95
+ --zx-accent-600: #96690f;
96
+ --zx-accent-700: #6f4e0b;
97
+ }
98
+ [data-zx-preset=ocean] {
99
+ --zx-accent-300: #8ec5ff;
100
+ --zx-accent-400: #51a2ff;
101
+ --zx-accent-500: #2b7fff;
102
+ --zx-accent-600: #155dfc;
103
+ --zx-accent-700: #1447e6;
104
+ }
105
+ [data-zx-preset=violet] {
106
+ --zx-accent-300: #c4b4ff;
107
+ --zx-accent-400: #a684ff;
108
+ --zx-accent-500: #8e51ff;
109
+ --zx-accent-600: #7f22fe;
110
+ --zx-accent-700: #7008e7;
111
+ }
112
+ [data-zx-preset=rose] {
113
+ --zx-accent-300: #ffa1ad;
114
+ --zx-accent-400: #ff637e;
115
+ --zx-accent-500: #ff2056;
116
+ --zx-accent-600: #dc0039;
117
+ --zx-accent-700: #a80030;
118
+ }
119
+ [data-zx-preset=slate] {
120
+ --zx-accent-300: #cad5e2;
121
+ --zx-accent-400: #90a1b9;
122
+ --zx-accent-500: #62748e;
123
+ --zx-accent-600: #45556c;
124
+ --zx-accent-700: #314158;
125
+ }
126
+
78
127
  /* styles/tokens/semantic.css */
79
128
  :root,
80
129
  [data-zx-theme=light] {
@@ -85,7 +134,7 @@
85
134
  --zx-color-bg-control: var(--zx-gray-0);
86
135
  --zx-color-bg-muted: var(--zx-gray-100);
87
136
  --zx-color-bg-hover: var(--zx-gray-100);
88
- --zx-color-bg-selected: color-mix(in srgb, var(--zx-green-600) 10%, var(--zx-gray-0));
137
+ --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-600) 10%, var(--zx-gray-0));
89
138
  --zx-color-bg-backdrop: color-mix(in srgb, var(--zx-gray-950) 50%, transparent);
90
139
  --zx-color-border: var(--zx-gray-200);
91
140
  --zx-color-border-strong: var(--zx-gray-300);
@@ -94,10 +143,10 @@
94
143
  --zx-color-text-muted: var(--zx-gray-500);
95
144
  --zx-color-text-placeholder: var(--zx-gray-400);
96
145
  --zx-color-text-invert: var(--zx-gray-50);
97
- --zx-color-accent: var(--zx-green-600);
98
- --zx-color-accent-hover: var(--zx-green-700);
99
- --zx-color-accent-active: var(--zx-green-700);
100
- --zx-color-accent-subtle: color-mix(in srgb, var(--zx-green-600) 10%, var(--zx-gray-0));
146
+ --zx-color-accent: var(--zx-accent-600);
147
+ --zx-color-accent-hover: var(--zx-accent-700);
148
+ --zx-color-accent-active: var(--zx-accent-700);
149
+ --zx-color-accent-subtle: color-mix(in srgb, var(--zx-accent-600) 10%, var(--zx-gray-0));
101
150
  --zx-color-on-accent: var(--zx-gray-0);
102
151
  --zx-color-danger: var(--zx-red-500);
103
152
  --zx-color-danger-bg: color-mix(in srgb, var(--zx-red-500) 10%, var(--zx-gray-0));
@@ -128,7 +177,7 @@
128
177
  --zx-color-bg-control: color-mix(in srgb, var(--zx-gray-0) 5%, transparent);
129
178
  --zx-color-bg-muted: var(--zx-gray-800);
130
179
  --zx-color-bg-hover: color-mix(in srgb, var(--zx-gray-0) 8%, transparent);
131
- --zx-color-bg-selected: color-mix(in srgb, var(--zx-green-400) 18%, var(--zx-gray-900));
180
+ --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-400) 18%, var(--zx-gray-900));
132
181
  --zx-color-bg-backdrop: color-mix(in srgb, var(--zx-gray-950) 75%, transparent);
133
182
  --zx-color-border: color-mix(in srgb, var(--zx-gray-0) 10%, transparent);
134
183
  --zx-color-border-strong: color-mix(in srgb, var(--zx-gray-0) 28%, transparent);
@@ -137,10 +186,10 @@
137
186
  --zx-color-text-muted: var(--zx-gray-400);
138
187
  --zx-color-text-placeholder: var(--zx-gray-500);
139
188
  --zx-color-text-invert: var(--zx-gray-950);
140
- --zx-color-accent: var(--zx-green-400);
141
- --zx-color-accent-hover: var(--zx-green-300);
142
- --zx-color-accent-active: var(--zx-green-500);
143
- --zx-color-accent-subtle: color-mix(in srgb, var(--zx-green-400) 16%, var(--zx-gray-900));
189
+ --zx-color-accent: var(--zx-accent-400);
190
+ --zx-color-accent-hover: var(--zx-accent-300);
191
+ --zx-color-accent-active: var(--zx-accent-500);
192
+ --zx-color-accent-subtle: color-mix(in srgb, var(--zx-accent-400) 16%, var(--zx-gray-900));
144
193
  --zx-color-on-accent: var(--zx-gray-950);
145
194
  --zx-color-danger: var(--zx-red-400);
146
195
  --zx-color-danger-bg: color-mix(in srgb, var(--zx-red-400) 16%, var(--zx-gray-900));
@@ -165,7 +214,7 @@
165
214
  --zx-color-bg-control: color-mix(in srgb, var(--zx-gray-0) 5%, transparent);
166
215
  --zx-color-bg-muted: var(--zx-gray-800);
167
216
  --zx-color-bg-hover: color-mix(in srgb, var(--zx-gray-0) 8%, transparent);
168
- --zx-color-bg-selected: color-mix(in srgb, var(--zx-green-400) 18%, var(--zx-gray-900));
217
+ --zx-color-bg-selected: color-mix(in srgb, var(--zx-accent-400) 18%, var(--zx-gray-900));
169
218
  --zx-color-bg-backdrop: color-mix(in srgb, var(--zx-gray-950) 75%, transparent);
170
219
  --zx-color-border: color-mix(in srgb, var(--zx-gray-0) 10%, transparent);
171
220
  --zx-color-border-strong: color-mix(in srgb, var(--zx-gray-0) 28%, transparent);
@@ -174,10 +223,10 @@
174
223
  --zx-color-text-muted: var(--zx-gray-400);
175
224
  --zx-color-text-placeholder: var(--zx-gray-500);
176
225
  --zx-color-text-invert: var(--zx-gray-950);
177
- --zx-color-accent: var(--zx-green-400);
178
- --zx-color-accent-hover: var(--zx-green-300);
179
- --zx-color-accent-active: var(--zx-green-500);
180
- --zx-color-accent-subtle: color-mix(in srgb, var(--zx-green-400) 16%, var(--zx-gray-900));
226
+ --zx-color-accent: var(--zx-accent-400);
227
+ --zx-color-accent-hover: var(--zx-accent-300);
228
+ --zx-color-accent-active: var(--zx-accent-500);
229
+ --zx-color-accent-subtle: color-mix(in srgb, var(--zx-accent-400) 16%, var(--zx-gray-900));
181
230
  --zx-color-on-accent: var(--zx-gray-950);
182
231
  --zx-color-danger: var(--zx-red-400);
183
232
  --zx-color-danger-bg: color-mix(in srgb, var(--zx-red-400) 16%, var(--zx-gray-900));
@@ -1670,9 +1719,13 @@ button.zx-panel__toggle:focus-visible {
1670
1719
  line-height: 1.25rem;
1671
1720
  text-align: center;
1672
1721
  }
1673
- .zx-tabbox__close {
1674
- margin-inline-start: calc(-1 * var(--zx-space-1));
1675
- color: var(--zx-color-text-muted);
1722
+ .zx-tabbox .zx-tabbox__close {
1723
+ inline-size: 1.5rem;
1724
+ block-size: 1.5rem;
1725
+ margin-inline: calc(-1 * var(--zx-space-1));
1726
+ }
1727
+ .zx-tabbox .zx-tabbox__close:hover {
1728
+ background: color-mix(in srgb, var(--zx-color-text) 12%, transparent);
1676
1729
  }
1677
1730
  .zx-tabbox__panel {
1678
1731
  padding-block-start: var(--zx-space-4);
@@ -1698,6 +1751,7 @@ button.zx-panel__toggle:focus-visible {
1698
1751
  .zx-navigation-bar {
1699
1752
  min-inline-size: 0;
1700
1753
  container-type: inline-size;
1754
+ inline-size: 100%;
1701
1755
  }
1702
1756
  .zx-navigation-bar__bar {
1703
1757
  display: flex;
@@ -1827,10 +1881,12 @@ button.zx-panel__toggle:focus-visible {
1827
1881
  background: none;
1828
1882
  padding-inline: var(--zx-control-pad-x) var(--zx-control-height);
1829
1883
  }
1830
- .zx-search__input:focus-visible,
1884
+ .zx-search__input:focus-visible {
1885
+ box-shadow: none;
1886
+ }
1831
1887
  .zx-search__clear:focus-visible,
1832
1888
  .zx-search__submit:focus-visible {
1833
- box-shadow: var(--zx-focus-ring);
1889
+ box-shadow: inset var(--zx-focus-ring);
1834
1890
  }
1835
1891
  .zx-search__input::-webkit-search-cancel-button {
1836
1892
  appearance: none;
@@ -2437,6 +2493,11 @@ body:has(> .zx-modal[open]) {
2437
2493
  padding: var(--zx-space-2) var(--zx-control-pad-x) var(--zx-space-1);
2438
2494
  text-transform: uppercase;
2439
2495
  }
2496
+ .zx-select__separator {
2497
+ block-size: 1px;
2498
+ margin: var(--zx-space-1) var(--zx-control-pad-x);
2499
+ background: var(--zx-color-border);
2500
+ }
2440
2501
  .zx-select__empty {
2441
2502
  color: var(--zx-color-text-muted);
2442
2503
  padding: var(--zx-space-3) var(--zx-control-pad-x);
@@ -3419,6 +3480,7 @@ body:has(> .zx-modal[open]) {
3419
3480
  .zx-date-range-picker {
3420
3481
  display: block;
3421
3482
  container-type: inline-size;
3483
+ inline-size: 100%;
3422
3484
  color: var(--zx-color-text);
3423
3485
  font-size: var(--zx-control-font-size);
3424
3486
  }
@@ -4474,6 +4536,12 @@ button.zx-stepper__control:disabled {
4474
4536
  flex: 0 1 auto;
4475
4537
  gap: var(--zx-space-2);
4476
4538
  }
4539
+ .zx-stepper[data-orientation=horizontal] .zx-stepper__step:not(:last-child) {
4540
+ flex: 1 1 auto;
4541
+ }
4542
+ .zx-stepper[data-orientation=horizontal] .zx-stepper__control {
4543
+ flex: 0 1 auto;
4544
+ }
4477
4545
  .zx-stepper[data-orientation=horizontal] .zx-stepper__step:not(:last-child)::after {
4478
4546
  content: "";
4479
4547
  flex: 1 1 var(--zx-space-6);
@@ -4717,6 +4785,7 @@ button.zx-stepper__control:disabled {
4717
4785
  border-radius: var(--zx-radius-lg);
4718
4786
  background: var(--zx-color-bg-surface);
4719
4787
  container-type: inline-size;
4788
+ inline-size: 100%;
4720
4789
  }
4721
4790
  .zx-fieldset__legend {
4722
4791
  padding-inline: var(--zx-space-2);
@@ -4749,6 +4818,9 @@ button.zx-stepper__control:disabled {
4749
4818
  gap: var(--zx-space-5);
4750
4819
  min-inline-size: 0;
4751
4820
  }
4821
+ .zx-form {
4822
+ inline-size: 100%;
4823
+ }
4752
4824
  .zx-form__actions {
4753
4825
  display: flex;
4754
4826
  flex-wrap: wrap;
@@ -4870,49 +4942,103 @@ button.zx-stepper__control:disabled {
4870
4942
  display: grid;
4871
4943
  gap: var(--zx-space-3);
4872
4944
  min-inline-size: 0;
4945
+ inline-size: 100%;
4873
4946
  padding: var(--zx-space-3);
4874
4947
  border: 1px solid var(--zx-color-border);
4875
4948
  border-radius: var(--zx-radius-lg);
4876
4949
  background: var(--zx-color-bg-surface);
4877
- container-type: inline-size;
4878
4950
  }
4879
4951
  .zx-multi-value-editor__rows {
4880
4952
  display: grid;
4881
4953
  gap: var(--zx-space-2);
4882
4954
  }
4883
4955
  .zx-multi-value-editor__row {
4884
- display: grid;
4885
- grid-template-columns: minmax(0, 1fr) auto;
4956
+ position: relative;
4957
+ display: flex;
4958
+ flex-wrap: wrap;
4959
+ min-inline-size: 0;
4886
4960
  gap: var(--zx-space-2);
4887
4961
  align-items: center;
4888
4962
  }
4889
4963
  .zx-multi-value-editor__value {
4890
- inline-size: 100%;
4964
+ flex: 1 1 11rem;
4965
+ min-inline-size: 0;
4891
4966
  }
4892
4967
  .zx-multi-value-editor__controls {
4893
4968
  display: inline-flex;
4969
+ flex: 0 1 auto;
4970
+ flex-wrap: wrap;
4971
+ min-inline-size: 0;
4894
4972
  gap: var(--zx-space-1);
4973
+ margin-inline-start: auto;
4895
4974
  }
4896
4975
  .zx-multi-value-editor__controls .zx-btn {
4897
4976
  min-inline-size: var(--zx-control-height);
4898
4977
  padding-inline: var(--zx-space-2);
4899
4978
  }
4900
- .zx-multi-value-editor__controls .zx-btn:last-child {
4979
+ .zx-multi-value-editor__controls .zx-btn[data-action=remove] {
4901
4980
  color: var(--zx-color-danger);
4902
4981
  }
4982
+ .zx-multi-value-editor__controls .zx-btn[aria-disabled=true] {
4983
+ opacity: 0.55;
4984
+ cursor: not-allowed;
4985
+ }
4986
+ .zx-multi-value-editor__controls .zx-btn[aria-disabled=true]:hover {
4987
+ background: var(--zx-color-bg-control);
4988
+ }
4989
+ .zx-multi-value-editor__handle {
4990
+ display: inline-flex;
4991
+ flex: none;
4992
+ align-items: center;
4993
+ justify-content: center;
4994
+ min-block-size: var(--zx-control-height);
4995
+ min-inline-size: var(--zx-space-6);
4996
+ padding: 0;
4997
+ border: 0;
4998
+ border-radius: var(--zx-control-radius);
4999
+ background: none;
5000
+ color: var(--zx-color-text-muted);
5001
+ cursor: grab;
5002
+ touch-action: none;
5003
+ transition: color var(--zx-dur-fast) var(--zx-ease), background-color var(--zx-dur-fast) var(--zx-ease);
5004
+ }
5005
+ .zx-multi-value-editor__handle:hover:not(:disabled) {
5006
+ background: var(--zx-color-bg-hover);
5007
+ color: var(--zx-color-text);
5008
+ }
5009
+ .zx-multi-value-editor__handle:focus-visible {
5010
+ outline: none;
5011
+ box-shadow: var(--zx-focus-ring);
5012
+ }
5013
+ .zx-multi-value-editor__handle:disabled {
5014
+ opacity: 0.55;
5015
+ cursor: default;
5016
+ }
5017
+ .zx-multi-value-editor[data-state=dragging] .zx-multi-value-editor__handle {
5018
+ cursor: grabbing;
5019
+ }
5020
+ .zx-multi-value-editor__row[data-dragging=true] {
5021
+ opacity: 0.45;
5022
+ }
5023
+ .zx-multi-value-editor__row[data-drop]::after {
5024
+ content: "";
5025
+ position: absolute;
5026
+ inset-inline: 0;
5027
+ block-size: 2px;
5028
+ border-radius: var(--zx-radius-full);
5029
+ background: var(--zx-color-accent);
5030
+ }
5031
+ .zx-multi-value-editor__row[data-drop=before]::after {
5032
+ inset-block-start: calc(var(--zx-space-2) / -2 - 1px);
5033
+ }
5034
+ .zx-multi-value-editor__row[data-drop=after]::after {
5035
+ inset-block-end: calc(var(--zx-space-2) / -2 - 1px);
5036
+ }
4903
5037
  .zx-multi-value-editor__add {
4904
5038
  justify-self: start;
4905
5039
  border-color: var(--zx-color-accent);
4906
5040
  color: var(--zx-color-accent);
4907
5041
  }
4908
- @container (max-width: 24rem) {
4909
- .zx-multi-value-editor__row {
4910
- grid-template-columns: minmax(0, 1fr);
4911
- }
4912
- .zx-multi-value-editor__controls {
4913
- justify-self: end;
4914
- }
4915
- }
4916
5042
 
4917
5043
  /* src/components/field-upload/field-upload.css */
4918
5044
  .zx-field-upload {