@kubex/zinc 1.0.25 → 1.0.99

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 (199) hide show
  1. package/.claude/project.md +556 -0
  2. package/.github/workflows/js_build_and_deploy.yaml +9 -10
  3. package/dist/custom-elements.json +13575 -8856
  4. package/dist/vscode.html-custom-data.json +583 -48
  5. package/dist/web-types.json +1441 -181
  6. package/dist/zn.d.ts +1645 -660
  7. package/dist/zn.min.css +1 -1
  8. package/dist/zn.min.js +1412 -893
  9. package/docs/_utilities/code-previews.cjs +10 -1
  10. package/docs/assets/scripts/docs.js +42 -18
  11. package/docs/data/data-table.json +229 -66
  12. package/docs/data/empty.json +6 -0
  13. package/docs/data/products-table.json +41 -193
  14. package/docs/pages/components/action-bar.md +121 -6
  15. package/docs/pages/components/alert.md +118 -15
  16. package/docs/pages/components/animated-button.md +299 -0
  17. package/docs/pages/components/audio-select.md +534 -0
  18. package/docs/pages/components/bulk-actions.md +79 -5
  19. package/docs/pages/components/button-group.md +235 -27
  20. package/docs/pages/components/button.md +139 -1
  21. package/docs/pages/components/chart.md +365 -9
  22. package/docs/pages/components/checkbox.md +387 -58
  23. package/docs/pages/components/chip.md +253 -33
  24. package/docs/pages/components/collapsible.md +393 -46
  25. package/docs/pages/components/cols.md +152 -30
  26. package/docs/pages/components/confirm.md +182 -16
  27. package/docs/pages/components/copy-button.md +169 -6
  28. package/docs/pages/components/data-select.md +194 -15
  29. package/docs/pages/components/data-table-filter.md +96 -5
  30. package/docs/pages/components/data-table-search.md +451 -0
  31. package/docs/pages/components/data-table-sort.md +66 -5
  32. package/docs/pages/components/data-table.md +727 -66
  33. package/docs/pages/components/datepicker.md +402 -7
  34. package/docs/pages/components/defined-label.md +120 -5
  35. package/docs/pages/components/dialog.md +339 -59
  36. package/docs/pages/components/dropdown.md +366 -11
  37. package/docs/pages/components/editor.md +604 -7
  38. package/docs/pages/components/empty-state.md +315 -16
  39. package/docs/pages/components/expanding-action.md +212 -28
  40. package/docs/pages/components/file.md +421 -12
  41. package/docs/pages/components/filter-container.md +158 -5
  42. package/docs/pages/components/filter-wrapper.md +167 -6
  43. package/docs/pages/components/form-group.md +383 -6
  44. package/docs/pages/components/hover-container.md +237 -6
  45. package/docs/pages/components/icon-picker.md +121 -0
  46. package/docs/pages/components/icon.md +454 -48
  47. package/docs/pages/components/inline-edit.md +787 -19
  48. package/docs/pages/components/input-group.md +207 -13
  49. package/docs/pages/components/input.md +194 -0
  50. package/docs/pages/components/item.md +18 -0
  51. package/docs/pages/components/key-container.md +115 -0
  52. package/docs/pages/components/key.md +101 -0
  53. package/docs/pages/components/menu.md +512 -6
  54. package/docs/pages/components/note.md +239 -36
  55. package/docs/pages/components/opt-group.md +107 -0
  56. package/docs/pages/components/pagination.md +332 -6
  57. package/docs/pages/components/pane.md +222 -6
  58. package/docs/pages/components/panel.md +213 -26
  59. package/docs/pages/components/popup.md +1354 -6
  60. package/docs/pages/components/priority-list.md +233 -0
  61. package/docs/pages/components/progress-bar.md +387 -6
  62. package/docs/pages/components/radio-group.md +242 -5
  63. package/docs/pages/components/radio.md +474 -6
  64. package/docs/pages/components/rating.md +331 -7
  65. package/docs/pages/components/reveal.md +524 -6
  66. package/docs/pages/components/scroll-container.md +552 -6
  67. package/docs/pages/components/select.md +762 -160
  68. package/docs/pages/components/skeleton.md +473 -30
  69. package/docs/pages/components/slideout.md +261 -5
  70. package/docs/pages/components/sp.md +99 -41
  71. package/docs/pages/components/split-button.md +347 -9
  72. package/docs/pages/components/split-pane.md +445 -6
  73. package/docs/pages/components/stat.md +549 -9
  74. package/docs/pages/components/status-indicator.md +230 -1
  75. package/docs/pages/components/stepper.md +563 -6
  76. package/docs/pages/components/tabs.md +439 -13
  77. package/docs/pages/components/textarea.md +415 -17
  78. package/docs/pages/components/tile.md +385 -26
  79. package/docs/pages/components/toggle.md +424 -6
  80. package/docs/pages/components/tooltip.md +367 -0
  81. package/docs/pages/components/translation-group.md +210 -0
  82. package/docs/pages/components/translations.md +319 -19
  83. package/docs/pages/components/vertical-stepper.md +401 -8
  84. package/docs/pages/components/well.md +300 -3
  85. package/docs/pages/getting-started/form-controls.md +162 -0
  86. package/docs/pages/index.md +116 -15
  87. package/package.json +5 -6
  88. package/scss/_global-spacing.scss +4 -0
  89. package/scss/_root.scss +2 -2
  90. package/scss/boot.scss +19 -0
  91. package/scss/shared/layout.scss +5 -0
  92. package/scss/themes/_light.scss +3 -3
  93. package/src/components/alert/alert.scss +1 -0
  94. package/src/components/animated-button/README.md +306 -0
  95. package/src/components/animated-button/animated-button.component.ts +229 -0
  96. package/src/components/animated-button/animated-button.scss +228 -0
  97. package/src/components/animated-button/animated-button.test.ts +143 -0
  98. package/src/components/animated-button/index.ts +12 -0
  99. package/src/components/button/button.component.ts +5 -0
  100. package/src/components/button-group/button-group.component.ts +25 -13
  101. package/src/components/button-group/button-group.scss +6 -0
  102. package/src/components/checkbox/checkbox.component.ts +4 -0
  103. package/src/components/checkbox/checkbox.scss +7 -4
  104. package/src/components/checkbox-group/checkbox-group.scss +7 -0
  105. package/src/components/chip/chip.component.ts +7 -2
  106. package/src/components/chip/chip.scss +16 -2
  107. package/src/components/collapsible/collapsible.component.ts +27 -20
  108. package/src/components/cols/cols.component.ts +14 -2
  109. package/src/components/cols/cols.scss +6 -12
  110. package/src/components/confirm/confirm.component.ts +7 -0
  111. package/src/components/copy-button/copy-button.component.ts +12 -11
  112. package/src/components/data-select/data-select.component.ts +215 -44
  113. package/src/components/data-select/data-select.scss +66 -6
  114. package/src/components/data-select/providers/currency-data-provider.ts +20 -6
  115. package/src/components/data-select/providers/provider.ts +1 -0
  116. package/src/components/data-select/providers/us-state-data-provider.ts +68 -0
  117. package/src/components/data-table/data-table.component.ts +81 -22
  118. package/src/components/data-table-search/data-table-search.component.ts +184 -0
  119. package/src/components/data-table-search/data-table-search.scss +17 -0
  120. package/src/components/data-table-search/data-table-search.test.ts +11 -0
  121. package/src/components/data-table-search/index.ts +12 -0
  122. package/src/components/datepicker/datepicker.component.ts +347 -13
  123. package/src/components/dialog/dialog.component.ts +1 -1
  124. package/src/components/empty-state/empty-state.scss +6 -1
  125. package/src/components/header/header.scss +3 -3
  126. package/src/components/icon/icon.component.ts +23 -1
  127. package/src/components/icon/icon.scss +23 -0
  128. package/src/components/icon-picker/brand-icons.ts +24 -0
  129. package/src/components/icon-picker/icon-picker.component.ts +407 -0
  130. package/src/components/icon-picker/icon-picker.scss +205 -0
  131. package/src/components/icon-picker/index.ts +12 -0
  132. package/src/components/icon-picker/line-icons.ts +612 -0
  133. package/src/components/icon-picker/material-icons.ts +14543 -0
  134. package/src/components/inline-edit/inline-edit.component.ts +190 -46
  135. package/src/components/inline-edit/inline-edit.scss +29 -0
  136. package/src/components/inline-edit/inline-edit.test.ts +314 -1
  137. package/src/components/input/input.component.ts +324 -5
  138. package/src/components/input/input.scss +87 -0
  139. package/src/components/input-group/input-group.component.ts +28 -7
  140. package/src/components/input-group/input-group.scss +48 -10
  141. package/src/components/item/item.component.ts +24 -3
  142. package/src/components/item/item.scss +18 -0
  143. package/src/components/key/index.ts +12 -0
  144. package/src/components/key/key.component.ts +47 -0
  145. package/src/components/key/key.scss +38 -0
  146. package/src/components/key-container/index.ts +12 -0
  147. package/src/components/key-container/key-container.component.ts +142 -0
  148. package/src/components/key-container/key-container.scss +33 -0
  149. package/src/components/menu-item/menu-item.component.ts +20 -0
  150. package/src/components/menu-item/menu-item.scss +69 -2
  151. package/src/components/navbar/navbar.component.ts +103 -11
  152. package/src/components/navbar/navbar.scss +6 -1
  153. package/src/components/opt-group/index.ts +12 -0
  154. package/src/components/opt-group/opt-group.component.ts +74 -0
  155. package/src/components/opt-group/opt-group.scss +37 -0
  156. package/src/components/opt-group/opt-group.test.ts +27 -0
  157. package/src/components/option/option.component.ts +1 -16
  158. package/src/components/option/option.scss +4 -0
  159. package/src/components/panel/panel.component.ts +10 -8
  160. package/src/components/panel/panel.scss +20 -0
  161. package/src/components/priority-list/index.ts +12 -0
  162. package/src/components/priority-list/priority-list.component.ts +611 -0
  163. package/src/components/priority-list/priority-list.scss +185 -0
  164. package/src/components/priority-list/priority-list.test.ts +139 -0
  165. package/src/components/progress-bar/progress-bar.component.ts +22 -16
  166. package/src/components/radio/radio.scss +10 -3
  167. package/src/components/select/select.component.ts +812 -72
  168. package/src/components/select/select.scss +108 -2
  169. package/src/components/select/select.test.ts +147 -2
  170. package/src/components/settings-container/settings-container.component.ts +44 -19
  171. package/src/components/settings-container/settings-container.scss +1 -1
  172. package/src/components/skeleton/skeleton.component.ts +6 -1
  173. package/src/components/slideout/slideout.scss +8 -3
  174. package/src/components/sp/sp.component.ts +3 -1
  175. package/src/components/sp/sp.scss +19 -0
  176. package/src/components/stepper/stepper.component.ts +16 -10
  177. package/src/components/textarea/textarea.scss +0 -4
  178. package/src/components/tile/tile.component.ts +12 -3
  179. package/src/components/tile/tile.scss +1 -1
  180. package/src/components/timer/timer.component.ts +15 -2
  181. package/src/components/toggle/toggle.component.ts +29 -26
  182. package/src/components/toggle/toggle.scss +13 -1
  183. package/src/components/translation-group/index.ts +12 -0
  184. package/src/components/translation-group/translation-group.component.ts +207 -0
  185. package/src/components/translation-group/translation-group.scss +8 -0
  186. package/src/components/translations/translations.component.ts +90 -44
  187. package/src/components/translations/translations.scss +4 -0
  188. package/src/components/vertical-stepper/vertical-stepper.component.ts +14 -9
  189. package/src/events/events.ts +12 -7
  190. package/src/events/zn-language-change.ts +7 -0
  191. package/src/events/zn-purchase.ts +11 -0
  192. package/src/events/zn-redirect.ts +7 -0
  193. package/src/events/zn-reorder.ts +7 -0
  194. package/src/events/zn-search-change.ts +11 -0
  195. package/src/events/zn-submit.ts +1 -1
  196. package/src/form-control.scss +4 -0
  197. package/src/internal/form-navigation.ts +510 -0
  198. package/src/internal/form.ts +6 -0
  199. package/src/zinc.ts +91 -83
@@ -0,0 +1,299 @@
1
+ ---
2
+ meta:
3
+ title: Animated Button
4
+ description: A stateful button component for purchase flows with built-in loading, success, and error states with smooth animations.
5
+ layout: component
6
+ ---
7
+
8
+ ```html:preview
9
+ <zn-animated-button></zn-animated-button>
10
+
11
+ <script>
12
+ document.querySelector('zn-animated-button').addEventListener('zn-purchase', async (event) => {
13
+ const { setSuccess } = event.detail;
14
+ await new Promise(resolve => setTimeout(resolve, 2000));
15
+ setSuccess();
16
+ });
17
+ </script>
18
+ ```
19
+
20
+ The Animated Button component manages the complete purchase flow through four distinct states: Idle (blue), Processing (blue with shimmer animation), Success (green with animated color fill and drawing checkmark), and Failure (red with error message). It automatically handles state transitions, disables during processing to prevent double-submission, and includes smooth, professional animations throughout including a satisfying "swoosh" checkmark that draws itself on success.
21
+
22
+ ## Examples
23
+
24
+ ### Basic Usage
25
+
26
+ The button emits a `zn-purchase` event when clicked. Use the provided `setSuccess()` and `setFailure()` functions to control the button state based on your purchase logic.
27
+
28
+ ```html:preview
29
+ <zn-animated-button id="basic-example"></zn-animated-button>
30
+
31
+ <script>
32
+ document.getElementById('basic-example').addEventListener('zn-purchase', async (event) => {
33
+ const { setSuccess, setFailure } = event.detail;
34
+
35
+ // Simulate API call
36
+ await new Promise(resolve => setTimeout(resolve, 2000));
37
+
38
+ // Random success or failure for demo
39
+ if (Math.random() > 0.3) {
40
+ setSuccess();
41
+ } else {
42
+ setFailure('Payment declined');
43
+ }
44
+ });
45
+ </script>
46
+ ```
47
+
48
+ ### Custom Text Labels
49
+
50
+ Customize the text displayed in each state using the text attributes.
51
+
52
+ ```html:preview
53
+ <zn-animated-button
54
+ id="custom-text-example"
55
+ idle-text="Buy Now"
56
+ processing-text="Processing Payment"
57
+ success-text="Payment Complete"
58
+ failure-text="Transaction Failed"
59
+ ></zn-animated-button>
60
+
61
+ <script>
62
+ document.getElementById('custom-text-example').addEventListener('zn-purchase', async (event) => {
63
+ const { setSuccess } = event.detail;
64
+ await new Promise(resolve => setTimeout(resolve, 2000));
65
+ setSuccess();
66
+ });
67
+ </script>
68
+ ```
69
+
70
+ ### Error Handling
71
+
72
+ Display custom error messages when the purchase fails. The button automatically resets to idle state after 2 seconds.
73
+
74
+ ```html:preview
75
+ <zn-animated-button id="error-example"></zn-animated-button>
76
+
77
+ <script>
78
+ document.getElementById('error-example').addEventListener('zn-purchase', async (event) => {
79
+ const { setFailure } = event.detail;
80
+ await new Promise(resolve => setTimeout(resolve, 1500));
81
+ setFailure('Insufficient funds');
82
+ });
83
+ </script>
84
+ ```
85
+
86
+ ### Manual State Control
87
+
88
+ Control the button state programmatically using the component's methods.
89
+
90
+ ```html:preview
91
+ <zn-animated-button id="manual-example"></zn-animated-button>
92
+
93
+ <br><br>
94
+
95
+ <zn-button-group>
96
+ <zn-button color="success" onclick="document.getElementById('manual-example').setSuccess()">
97
+ Trigger Success
98
+ </zn-button>
99
+ <zn-button color="error" onclick="document.getElementById('manual-example').setFailure('Network error')">
100
+ Trigger Failure
101
+ </zn-button>
102
+ <zn-button color="secondary" onclick="document.getElementById('manual-example').reset()">
103
+ Reset
104
+ </zn-button>
105
+ </zn-button-group>
106
+ ```
107
+
108
+ ### Redirect After Success
109
+
110
+ Specify a redirect URL to automatically navigate after successful purchase. The redirect happens after a configurable delay (default 1.5 seconds).
111
+
112
+ ```html:preview
113
+ <zn-animated-button
114
+ id="redirect-example"
115
+ redirect-url="/thank-you"
116
+ redirect-delay="2000"
117
+ ></zn-animated-button>
118
+
119
+ <script>
120
+ const redirectButton = document.getElementById('redirect-example');
121
+
122
+ redirectButton.addEventListener('zn-purchase', async (event) => {
123
+ const { setSuccess } = event.detail;
124
+ await new Promise(resolve => setTimeout(resolve, 1500));
125
+ setSuccess();
126
+ });
127
+
128
+ redirectButton.addEventListener('zn-redirect', (event) => {
129
+ alert('Would redirect to: ' + event.detail.url);
130
+ // Prevent actual redirect for demo
131
+ redirectButton.reset();
132
+ });
133
+ </script>
134
+ ```
135
+
136
+ ### Custom Timing
137
+
138
+ Control how long the button stays in success state before redirecting and how long it stays in failure state before resetting.
139
+
140
+ ```html:preview
141
+ <zn-animated-button
142
+ id="timing-example"
143
+ redirect-delay="3000"
144
+ failure-reset-delay="4000"
145
+ ></zn-animated-button>
146
+
147
+ <br><br>
148
+
149
+ <zn-button-group>
150
+ <zn-button color="success" onclick="document.getElementById('timing-example').setSuccess()">
151
+ Success (3s delay)
152
+ </zn-button>
153
+ <zn-button color="error" onclick="document.getElementById('timing-example').setFailure('Error')">
154
+ Failure (4s reset)
155
+ </zn-button>
156
+ </zn-button-group>
157
+ ```
158
+
159
+ ### Disabled State
160
+
161
+ The button can be disabled to prevent interaction.
162
+
163
+ ```html:preview
164
+ <zn-animated-button disabled></zn-animated-button>
165
+ ```
166
+
167
+ ### Integration with Form
168
+
169
+ The Purchase Button implements the `ZincFormControl` interface and can be used in forms.
170
+
171
+ ```html:preview
172
+ <form id="purchase-form">
173
+ <zn-form-group>
174
+ <label>Amount</label>
175
+ <zn-input name="amount" type="number" value="100" required></zn-input>
176
+ </zn-form-group>
177
+
178
+ <zn-form-group>
179
+ <zn-animated-button
180
+ id="form-example"
181
+ name="purchase"
182
+ value="submit"
183
+ ></zn-animated-button>
184
+ </zn-form-group>
185
+ </form>
186
+
187
+ <script>
188
+ document.getElementById('form-example').addEventListener('zn-purchase', async (event) => {
189
+ const { setSuccess, setFailure } = event.detail;
190
+ const form = document.getElementById('purchase-form');
191
+
192
+ if (!form.checkValidity()) {
193
+ setFailure('Please fill in all fields');
194
+ return;
195
+ }
196
+
197
+ const formData = new FormData(form);
198
+ await new Promise(resolve => setTimeout(resolve, 2000));
199
+
200
+ // Simulate success
201
+ setSuccess();
202
+ });
203
+ </script>
204
+ ```
205
+
206
+ ## State Flow
207
+
208
+ The button transitions through four states:
209
+
210
+ 1. **Idle** (Default): Blue background, shows idle text, ready for interaction
211
+ 2. **Processing**: Triggered on click, button becomes disabled, shows spinner icon and shimmer animation
212
+ 3. **Success**: Green background with animated check icon, auto-redirects after delay
213
+ 4. **Failure**: Red background with error icon and message, auto-resets to Idle after delay
214
+
215
+ ## Events
216
+
217
+ ### `zn-purchase`
218
+
219
+ Emitted when the button is clicked in idle state. The event detail contains:
220
+
221
+ - `value`: The form control value
222
+ - `setSuccess()`: Function to transition to success state
223
+ - `setFailure(message?: string)`: Function to transition to failure state
224
+
225
+ ```javascript
226
+ button.addEventListener('zn-purchase', async (event) => {
227
+ const { value, setSuccess, setFailure } = event.detail;
228
+
229
+ try {
230
+ const response = await fetch('/api/purchase', {
231
+ method: 'POST',
232
+ body: JSON.stringify({ value })
233
+ });
234
+
235
+ if (response.ok) {
236
+ setSuccess();
237
+ } else {
238
+ setFailure('Payment failed');
239
+ }
240
+ } catch (error) {
241
+ setFailure(error.message);
242
+ }
243
+ });
244
+ ```
245
+
246
+ ### `zn-redirect`
247
+
248
+ Emitted when the redirect timer completes after success state. The event detail contains:
249
+
250
+ - `url`: The redirect URL
251
+
252
+ ```javascript
253
+ button.addEventListener('zn-redirect', (event) => {
254
+ console.log('Redirecting to:', event.detail.url);
255
+ // Custom redirect logic can be implemented here
256
+ });
257
+ ```
258
+
259
+ ## Methods
260
+
261
+ ### `purchase(): Promise<void>`
262
+
263
+ Programmatically trigger the purchase flow.
264
+
265
+ ```javascript
266
+ await button.purchase();
267
+ ```
268
+
269
+ ### `setSuccess(): void`
270
+
271
+ Manually transition to success state. Starts the redirect timer.
272
+
273
+ ```javascript
274
+ button.setSuccess();
275
+ ```
276
+
277
+ ### `setFailure(message?: string): void`
278
+
279
+ Manually transition to failure state with optional error message. Starts the auto-reset timer.
280
+
281
+ ```javascript
282
+ button.setFailure('Payment declined');
283
+ ```
284
+
285
+ ### `reset(): void`
286
+
287
+ Reset the button to idle state, clearing any active timers.
288
+
289
+ ```javascript
290
+ button.reset();
291
+ ```
292
+
293
+ ## Accessibility
294
+
295
+ - The button includes `aria-live="polite"` for screen reader announcements of state changes
296
+ - The button includes `aria-busy` attribute during processing state
297
+ - All animations respect the `prefers-reduced-motion` media query
298
+ - Focus states are clearly visible with proper outline styling
299
+ - Disabled state prevents all interaction and is properly announced to assistive technologies