@kubex/zinc 1.0.25 → 1.0.98

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 (198) 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 +13431 -8728
  4. package/dist/vscode.html-custom-data.json +571 -37
  5. package/dist/web-types.json +1439 -181
  6. package/dist/zn.d.ts +1642 -661
  7. package/dist/zn.min.css +1 -1
  8. package/dist/zn.min.js +1406 -891
  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/key-container.md +115 -0
  51. package/docs/pages/components/key.md +101 -0
  52. package/docs/pages/components/menu.md +512 -6
  53. package/docs/pages/components/note.md +239 -36
  54. package/docs/pages/components/opt-group.md +107 -0
  55. package/docs/pages/components/pagination.md +332 -6
  56. package/docs/pages/components/pane.md +222 -6
  57. package/docs/pages/components/panel.md +213 -26
  58. package/docs/pages/components/popup.md +1354 -6
  59. package/docs/pages/components/priority-list.md +233 -0
  60. package/docs/pages/components/progress-bar.md +387 -6
  61. package/docs/pages/components/radio-group.md +242 -5
  62. package/docs/pages/components/radio.md +474 -6
  63. package/docs/pages/components/rating.md +331 -7
  64. package/docs/pages/components/reveal.md +524 -6
  65. package/docs/pages/components/scroll-container.md +552 -6
  66. package/docs/pages/components/select.md +762 -160
  67. package/docs/pages/components/skeleton.md +473 -30
  68. package/docs/pages/components/slideout.md +261 -5
  69. package/docs/pages/components/sp.md +99 -41
  70. package/docs/pages/components/split-button.md +347 -9
  71. package/docs/pages/components/split-pane.md +445 -6
  72. package/docs/pages/components/stat.md +549 -9
  73. package/docs/pages/components/status-indicator.md +230 -1
  74. package/docs/pages/components/stepper.md +563 -6
  75. package/docs/pages/components/tabs.md +439 -13
  76. package/docs/pages/components/textarea.md +415 -17
  77. package/docs/pages/components/tile.md +385 -26
  78. package/docs/pages/components/toggle.md +424 -6
  79. package/docs/pages/components/tooltip.md +367 -0
  80. package/docs/pages/components/translation-group.md +210 -0
  81. package/docs/pages/components/translations.md +319 -19
  82. package/docs/pages/components/vertical-stepper.md +401 -8
  83. package/docs/pages/components/well.md +300 -3
  84. package/docs/pages/getting-started/form-controls.md +162 -0
  85. package/docs/pages/index.md +116 -15
  86. package/package.json +5 -6
  87. package/scss/_global-spacing.scss +4 -0
  88. package/scss/_root.scss +2 -2
  89. package/scss/boot.scss +19 -0
  90. package/scss/shared/layout.scss +5 -0
  91. package/scss/themes/_light.scss +3 -3
  92. package/src/components/alert/alert.scss +1 -0
  93. package/src/components/animated-button/README.md +306 -0
  94. package/src/components/animated-button/animated-button.component.ts +229 -0
  95. package/src/components/animated-button/animated-button.scss +228 -0
  96. package/src/components/animated-button/animated-button.test.ts +143 -0
  97. package/src/components/animated-button/index.ts +12 -0
  98. package/src/components/button/button.component.ts +5 -0
  99. package/src/components/button-group/button-group.component.ts +25 -13
  100. package/src/components/button-group/button-group.scss +6 -0
  101. package/src/components/checkbox/checkbox.component.ts +4 -0
  102. package/src/components/checkbox/checkbox.scss +7 -4
  103. package/src/components/checkbox-group/checkbox-group.scss +7 -0
  104. package/src/components/chip/chip.component.ts +7 -2
  105. package/src/components/chip/chip.scss +16 -2
  106. package/src/components/collapsible/collapsible.component.ts +27 -20
  107. package/src/components/cols/cols.component.ts +14 -2
  108. package/src/components/cols/cols.scss +6 -12
  109. package/src/components/confirm/confirm.component.ts +7 -0
  110. package/src/components/copy-button/copy-button.component.ts +12 -11
  111. package/src/components/data-select/data-select.component.ts +215 -44
  112. package/src/components/data-select/data-select.scss +66 -6
  113. package/src/components/data-select/providers/currency-data-provider.ts +20 -6
  114. package/src/components/data-select/providers/provider.ts +1 -0
  115. package/src/components/data-select/providers/us-state-data-provider.ts +68 -0
  116. package/src/components/data-table/data-table.component.ts +81 -22
  117. package/src/components/data-table-search/data-table-search.component.ts +184 -0
  118. package/src/components/data-table-search/data-table-search.scss +17 -0
  119. package/src/components/data-table-search/data-table-search.test.ts +11 -0
  120. package/src/components/data-table-search/index.ts +12 -0
  121. package/src/components/datepicker/datepicker.component.ts +347 -13
  122. package/src/components/dialog/dialog.component.ts +1 -1
  123. package/src/components/empty-state/empty-state.scss +6 -1
  124. package/src/components/header/header.scss +3 -3
  125. package/src/components/icon/icon.component.ts +23 -1
  126. package/src/components/icon/icon.scss +23 -0
  127. package/src/components/icon-picker/brand-icons.ts +24 -0
  128. package/src/components/icon-picker/icon-picker.component.ts +407 -0
  129. package/src/components/icon-picker/icon-picker.scss +205 -0
  130. package/src/components/icon-picker/index.ts +12 -0
  131. package/src/components/icon-picker/line-icons.ts +612 -0
  132. package/src/components/icon-picker/material-icons.ts +14543 -0
  133. package/src/components/inline-edit/inline-edit.component.ts +190 -46
  134. package/src/components/inline-edit/inline-edit.scss +29 -0
  135. package/src/components/inline-edit/inline-edit.test.ts +314 -1
  136. package/src/components/input/input.component.ts +324 -5
  137. package/src/components/input/input.scss +87 -0
  138. package/src/components/input-group/input-group.component.ts +28 -7
  139. package/src/components/input-group/input-group.scss +48 -10
  140. package/src/components/item/item.component.ts +11 -2
  141. package/src/components/item/item.scss +7 -0
  142. package/src/components/key/index.ts +12 -0
  143. package/src/components/key/key.component.ts +47 -0
  144. package/src/components/key/key.scss +38 -0
  145. package/src/components/key-container/index.ts +12 -0
  146. package/src/components/key-container/key-container.component.ts +142 -0
  147. package/src/components/key-container/key-container.scss +33 -0
  148. package/src/components/menu-item/menu-item.component.ts +20 -0
  149. package/src/components/menu-item/menu-item.scss +69 -2
  150. package/src/components/navbar/navbar.component.ts +103 -11
  151. package/src/components/navbar/navbar.scss +6 -1
  152. package/src/components/opt-group/index.ts +12 -0
  153. package/src/components/opt-group/opt-group.component.ts +74 -0
  154. package/src/components/opt-group/opt-group.scss +37 -0
  155. package/src/components/opt-group/opt-group.test.ts +27 -0
  156. package/src/components/option/option.component.ts +1 -16
  157. package/src/components/option/option.scss +4 -0
  158. package/src/components/panel/panel.component.ts +10 -8
  159. package/src/components/panel/panel.scss +20 -0
  160. package/src/components/priority-list/index.ts +12 -0
  161. package/src/components/priority-list/priority-list.component.ts +611 -0
  162. package/src/components/priority-list/priority-list.scss +185 -0
  163. package/src/components/priority-list/priority-list.test.ts +139 -0
  164. package/src/components/progress-bar/progress-bar.component.ts +22 -16
  165. package/src/components/radio/radio.scss +10 -3
  166. package/src/components/select/select.component.ts +812 -72
  167. package/src/components/select/select.scss +108 -2
  168. package/src/components/select/select.test.ts +147 -2
  169. package/src/components/settings-container/settings-container.component.ts +44 -19
  170. package/src/components/settings-container/settings-container.scss +1 -1
  171. package/src/components/skeleton/skeleton.component.ts +6 -1
  172. package/src/components/slideout/slideout.scss +8 -3
  173. package/src/components/sp/sp.component.ts +3 -1
  174. package/src/components/sp/sp.scss +19 -0
  175. package/src/components/stepper/stepper.component.ts +16 -10
  176. package/src/components/textarea/textarea.scss +0 -4
  177. package/src/components/tile/tile.component.ts +12 -3
  178. package/src/components/tile/tile.scss +1 -1
  179. package/src/components/timer/timer.component.ts +15 -2
  180. package/src/components/toggle/toggle.component.ts +29 -26
  181. package/src/components/toggle/toggle.scss +13 -1
  182. package/src/components/translation-group/index.ts +12 -0
  183. package/src/components/translation-group/translation-group.component.ts +207 -0
  184. package/src/components/translation-group/translation-group.scss +8 -0
  185. package/src/components/translations/translations.component.ts +90 -44
  186. package/src/components/translations/translations.scss +4 -0
  187. package/src/components/vertical-stepper/vertical-stepper.component.ts +14 -9
  188. package/src/events/events.ts +12 -7
  189. package/src/events/zn-language-change.ts +7 -0
  190. package/src/events/zn-purchase.ts +11 -0
  191. package/src/events/zn-redirect.ts +7 -0
  192. package/src/events/zn-reorder.ts +7 -0
  193. package/src/events/zn-search-change.ts +11 -0
  194. package/src/events/zn-submit.ts +1 -1
  195. package/src/form-control.scss +4 -0
  196. package/src/internal/form-navigation.ts +510 -0
  197. package/src/internal/form.ts +6 -0
  198. package/src/zinc.ts +91 -83
@@ -1,22 +1,461 @@
1
1
  ---
2
2
  meta:
3
3
  title: Split Pane
4
- description:
4
+ description: Split panes divide a container into two resizable sections, allowing users to adjust the space allocated to each side.
5
5
  layout: component
6
6
  ---
7
7
 
8
8
  ```html:preview
9
- <zn-split-pane></zn-split-pane>
9
+ <zn-split-pane style="height: 400px;">
10
+ <div slot="primary" style="padding: 20px;">
11
+ <h3>Primary Pane</h3>
12
+ <p>This is the primary (left) pane. Drag the divider to resize.</p>
13
+ </div>
14
+ <div slot="secondary" style="padding: 20px;">
15
+ <h3>Secondary Pane</h3>
16
+ <p>This is the secondary (right) pane. It adjusts automatically as you resize the primary pane.</p>
17
+ </div>
18
+ </zn-split-pane>
10
19
  ```
11
20
 
12
21
  ## Examples
13
22
 
14
- ### First Example
23
+ ### Basic Split Pane
15
24
 
16
- TODO
25
+ Create a basic split pane with two sections. By default, the split is horizontal (left/right) with the primary pane starting at 50% width.
17
26
 
18
- ### Second Example
27
+ ```html:preview
28
+ <zn-split-pane style="height: 300px;">
29
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
30
+ <p>Primary pane content</p>
31
+ </div>
32
+ <div slot="secondary" style="padding: 20px;">
33
+ <p>Secondary pane content</p>
34
+ </div>
35
+ </zn-split-pane>
36
+ ```
37
+
38
+ ### Initial Size
39
+
40
+ Use the `initial-size` attribute to set the starting size of the primary pane. By default, this is a percentage value (0-100).
41
+
42
+ ```html:preview
43
+ <zn-split-pane initial-size="30" style="height: 300px;">
44
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
45
+ <p>Primary pane at 30%</p>
46
+ </div>
47
+ <div slot="secondary" style="padding: 20px;">
48
+ <p>Secondary pane at 70%</p>
49
+ </div>
50
+ </zn-split-pane>
51
+ ```
52
+
53
+ ### Pixel-Based Sizing
54
+
55
+ Use the `pixels` attribute to switch from percentage-based sizing to pixel-based sizing. When enabled, `initial-size`, `min-size`, and `max-size` are all interpreted as pixel values.
56
+
57
+ ```html:preview
58
+ <zn-split-pane pixels initial-size="250" style="height: 300px;">
59
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
60
+ <p>Primary pane is 250px wide</p>
61
+ </div>
62
+ <div slot="secondary" style="padding: 20px;">
63
+ <p>Secondary pane fills remaining space</p>
64
+ </div>
65
+ </zn-split-pane>
66
+ ```
67
+
68
+ ### Min and Max Size
69
+
70
+ Use `min-size` and `max-size` to constrain how much users can resize the primary pane. These values match the unit type (percentage or pixels).
71
+
72
+ ```html:preview
73
+ <zn-split-pane min-size="20" max-size="80" style="height: 300px;">
74
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
75
+ <p>Primary pane can be resized between 20% and 80%</p>
76
+ </div>
77
+ <div slot="secondary" style="padding: 20px;">
78
+ <p>Secondary pane adjusts accordingly</p>
79
+ </div>
80
+ </zn-split-pane>
81
+ ```
82
+
83
+ With pixel sizing:
84
+
85
+ ```html:preview
86
+ <zn-split-pane pixels min-size="150" max-size="400" initial-size="250" style="height: 300px;">
87
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
88
+ <p>Primary pane can be resized between 150px and 400px</p>
89
+ </div>
90
+ <div slot="secondary" style="padding: 20px;">
91
+ <p>Secondary pane fills remaining space</p>
92
+ </div>
93
+ </zn-split-pane>
94
+ ```
95
+
96
+ ### Secondary Size Preference
97
+
98
+ Use the `secondary` attribute to make the `initial-size` value apply to the secondary pane instead of the primary pane.
99
+
100
+ ```html:preview
101
+ <zn-split-pane secondary initial-size="30" style="height: 300px;">
102
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
103
+ <p>Primary pane takes remaining space (70%)</p>
104
+ </div>
105
+ <div slot="secondary" style="padding: 20px;">
106
+ <p>Secondary pane is 30%</p>
107
+ </div>
108
+ </zn-split-pane>
109
+ ```
110
+
111
+ ### Vertical Split
112
+
113
+ Use the `vertical` attribute to create a vertical split (top/bottom) instead of horizontal (left/right).
114
+
115
+ ```html:preview
116
+ <zn-split-pane vertical style="height: 400px;">
117
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
118
+ <h3>Top Pane</h3>
119
+ <p>This is the primary (top) pane.</p>
120
+ </div>
121
+ <div slot="secondary" style="padding: 20px;">
122
+ <h3>Bottom Pane</h3>
123
+ <p>This is the secondary (bottom) pane.</p>
124
+ </div>
125
+ </zn-split-pane>
126
+ ```
127
+
128
+ ### Bordered Divider
129
+
130
+ Use the `bordered` attribute to add a visible border to the divider, making it more prominent.
131
+
132
+ ```html:preview
133
+ <zn-split-pane bordered style="height: 300px;">
134
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
135
+ <p>Primary pane</p>
136
+ </div>
137
+ <div slot="secondary" style="padding: 20px;">
138
+ <p>Secondary pane with bordered divider</p>
139
+ </div>
140
+ </zn-split-pane>
141
+ ```
142
+
143
+ ### Persistent State with Storage
144
+
145
+ Use the `store-key` attribute to persist the split position across page reloads. By default, the position is stored in session storage.
146
+
147
+ ```html:preview
148
+ <zn-split-pane store-key="my-split-pane" style="height: 300px;">
149
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
150
+ <p>Resize this pane and reload the page.</p>
151
+ <p>Your position will be remembered during this session.</p>
152
+ </div>
153
+ <div slot="secondary" style="padding: 20px;">
154
+ <p>Secondary pane content</p>
155
+ </div>
156
+ </zn-split-pane>
157
+ ```
158
+
159
+ ### Local Storage Persistence
160
+
161
+ Use `local-storage` with `store-key` to persist the split position across browser sessions. Use `store-ttl` to set an expiration time in seconds.
162
+
163
+ ```html:preview
164
+ <zn-split-pane store-key="persistent-split" local-storage store-ttl="86400" style="height: 300px;">
165
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
166
+ <p>This position persists for 24 hours (86400 seconds).</p>
167
+ </div>
168
+ <div slot="secondary" style="padding: 20px;">
169
+ <p>Secondary pane content</p>
170
+ </div>
171
+ </zn-split-pane>
172
+ ```
173
+
174
+ ### Padded Layout
175
+
176
+ Use the `padded` attribute to add padding and styling to the split pane, giving it a more distinct visual appearance with borders and rounded corners.
177
+
178
+ ```html:preview
179
+ <zn-split-pane padded style="height: 400px;">
180
+ <div slot="primary">
181
+ <zn-sp padded>
182
+ <h3>Padded Primary</h3>
183
+ <p>The padded attribute adds visual styling.</p>
184
+ </zn-sp>
185
+ </div>
186
+ <div slot="secondary">
187
+ <zn-sp padded>
188
+ <h3>Padded Secondary</h3>
189
+ <p>Both panes have styled borders.</p>
190
+ </zn-sp>
191
+ </div>
192
+ </zn-split-pane>
193
+ ```
19
194
 
20
- TODO
195
+ ### Padded Right
21
196
 
197
+ Use the `padded-right` attribute for padding on the right pane specifically.
198
+
199
+ ```html:preview
200
+ <zn-split-pane padded-right style="height: 300px;">
201
+ <div slot="primary">
202
+ <zn-sp padded>
203
+ <p>Primary pane</p>
204
+ </zn-sp>
205
+ </div>
206
+ <div slot="secondary">
207
+ <zn-sp padded>
208
+ <p>Secondary pane with right padding</p>
209
+ </zn-sp>
210
+ </div>
211
+ </zn-split-pane>
212
+ ```
213
+
214
+ ### Responsive Behavior
215
+
216
+ On smaller screens (below medium breakpoint), the split pane automatically converts to a tabbed navigation interface, allowing users to toggle between the primary and secondary panes.
217
+
218
+ ```html:preview
219
+ <zn-split-pane
220
+ primary-caption="Details"
221
+ secondary-caption="Settings"
222
+ style="height: 300px;">
223
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
224
+ <h3>Details</h3>
225
+ <p>On small screens, this becomes a tab.</p>
226
+ </div>
227
+ <div slot="secondary" style="padding: 20px;">
228
+ <h3>Settings</h3>
229
+ <p>Toggle between panes using the navigation.</p>
230
+ </div>
231
+ </zn-split-pane>
232
+ ```
233
+
234
+ :::tip
235
+ **Note:** Resize your browser window to see the responsive behavior in action. Below the medium breakpoint (~750px), tabs will appear at the top.
236
+ :::
237
+
238
+ ### Custom Captions
239
+
240
+ Use `primary-caption` and `secondary-caption` to customize the labels shown in the responsive tab navigation.
241
+
242
+ ```html:preview
243
+ <zn-split-pane
244
+ primary-caption="File Browser"
245
+ secondary-caption="Editor"
246
+ style="height: 350px;">
247
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
248
+ <h3>File Browser</h3>
249
+ <ul>
250
+ <li>index.html</li>
251
+ <li>styles.css</li>
252
+ <li>script.js</li>
253
+ </ul>
254
+ </div>
255
+ <div slot="secondary" style="padding: 20px;">
256
+ <h3>Editor</h3>
257
+ <p>File contents would appear here.</p>
258
+ </div>
259
+ </zn-split-pane>
260
+ ```
261
+
262
+ ### Programmatic Focus Control
263
+
264
+ Use the `split-pane-focus` attribute on clickable elements to programmatically switch between panes on small screens.
265
+
266
+ ```html:preview
267
+ <zn-split-pane style="height: 300px;">
268
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
269
+ <p>Primary pane content</p>
270
+ <zn-button split-pane-focus="1">Show Secondary</zn-button>
271
+ </div>
272
+ <div slot="secondary" style="padding: 20px;">
273
+ <p>Secondary pane content</p>
274
+ <zn-button split-pane-focus="0">Show Primary</zn-button>
275
+ </div>
276
+ </zn-split-pane>
277
+ ```
278
+
279
+ ### Code Editor Layout
280
+
281
+ A practical example showing a split pane used for a code editor with file browser.
282
+
283
+ ```html:preview
284
+ <zn-split-pane
285
+ pixels
286
+ initial-size="200"
287
+ min-size="150"
288
+ max-size="400"
289
+ store-key="code-editor"
290
+ primary-caption="Files"
291
+ secondary-caption="Editor"
292
+ style="height: 400px;">
293
+ <div slot="primary" style="padding: 15px; background: #f8f8f8;">
294
+ <h4 style="margin-top: 0;">Files</h4>
295
+ <div style="font-family: monospace; font-size: 0.9em;">
296
+ <div style="padding: 4px 0;">📁 src/</div>
297
+ <div style="padding: 4px 0; padding-left: 20px;">📄 index.ts</div>
298
+ <div style="padding: 4px 0; padding-left: 20px;">📄 app.ts</div>
299
+ <div style="padding: 4px 0;">📁 styles/</div>
300
+ <div style="padding: 4px 0; padding-left: 20px;">📄 main.css</div>
301
+ <div style="padding: 4px 0;">📄 package.json</div>
302
+ </div>
303
+ </div>
304
+ <div slot="secondary" style="padding: 15px;">
305
+ <h4 style="margin-top: 0;">Editor - index.ts</h4>
306
+ <pre style="background: #f5f5f5; padding: 15px; border-radius: 4px; overflow: auto;"><code>import { Component } from './app';
307
+
308
+ const app = new Component({
309
+ name: 'MyApp',
310
+ version: '1.0.0'
311
+ });
312
+
313
+ app.init();</code></pre>
314
+ </div>
315
+ </zn-split-pane>
316
+ ```
317
+
318
+ ### Dashboard Layout
319
+
320
+ A dashboard layout example with a sidebar and main content area.
321
+
322
+ ```html:preview
323
+ <zn-split-pane
324
+ initial-size="25"
325
+ min-size="20"
326
+ max-size="40"
327
+ bordered
328
+ store-key="dashboard-layout"
329
+ primary-caption="Menu"
330
+ secondary-caption="Dashboard"
331
+ style="height: 400px;">
332
+ <div slot="primary" style="padding: 20px; background: #f8f9fa;">
333
+ <h4 style="margin-top: 0;">Navigation</h4>
334
+ <nav>
335
+ <zn-menu>
336
+ <zn-menu-item>Dashboard</zn-menu-item>
337
+ <zn-menu-item>Analytics</zn-menu-item>
338
+ <zn-menu-item>Reports</zn-menu-item>
339
+ <zn-menu-item>Settings</zn-menu-item>
340
+ </zn-menu>
341
+ </nav>
342
+ </div>
343
+ <div slot="secondary" style="padding: 20px;">
344
+ <h3 style="margin-top: 0;">Dashboard Overview</h3>
345
+ <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px;">
346
+ <div style="background: #e3f2fd; padding: 20px; border-radius: 8px;">
347
+ <h4 style="margin: 0 0 10px 0;">Total Users</h4>
348
+ <p style="font-size: 2em; margin: 0;">1,234</p>
349
+ </div>
350
+ <div style="background: #f3e5f5; padding: 20px; border-radius: 8px;">
351
+ <h4 style="margin: 0 0 10px 0;">Revenue</h4>
352
+ <p style="font-size: 2em; margin: 0;">$45.6K</p>
353
+ </div>
354
+ <div style="background: #e8f5e9; padding: 20px; border-radius: 8px;">
355
+ <h4 style="margin: 0 0 10px 0;">Active Sessions</h4>
356
+ <p style="font-size: 2em; margin: 0;">89</p>
357
+ </div>
358
+ </div>
359
+ </div>
360
+ </zn-split-pane>
361
+ ```
362
+
363
+ ### Vertical Dashboard
364
+
365
+ A vertical split pane showing a header area and main content.
366
+
367
+ ```html:preview
368
+ <zn-split-pane
369
+ vertical
370
+ initial-size="30"
371
+ min-size="20"
372
+ max-size="50"
373
+ bordered
374
+ style="height: 400px;">
375
+ <div slot="primary" style="padding: 20px; background: #f8f9fa;">
376
+ <h3 style="margin-top: 0;">Activity Feed</h3>
377
+ <div style="overflow-y: auto;">
378
+ <div style="padding: 10px; border-bottom: 1px solid #ddd;">New user registration</div>
379
+ <div style="padding: 10px; border-bottom: 1px solid #ddd;">System update completed</div>
380
+ <div style="padding: 10px; border-bottom: 1px solid #ddd;">New comment posted</div>
381
+ </div>
382
+ </div>
383
+ <div slot="secondary" style="padding: 20px;">
384
+ <h3 style="margin-top: 0;">Content Area</h3>
385
+ <p>Main content goes here. The vertical split is useful for layouts with header/footer sections.</p>
386
+ </div>
387
+ </zn-split-pane>
388
+ ```
389
+
390
+ ### Nested Split Panes
391
+
392
+ Split panes can be nested to create complex layouts with multiple resizable sections.
393
+
394
+ ```html:preview
395
+ <zn-split-pane
396
+ pixels
397
+ initial-size="250"
398
+ min-size="150"
399
+ max-size="400"
400
+ style="height: 400px;">
401
+ <div slot="primary" style="padding: 20px; background: #f8f9fa;">
402
+ <h4 style="margin-top: 0;">Sidebar</h4>
403
+ <p>Fixed left sidebar</p>
404
+ </div>
405
+ <zn-split-pane
406
+ slot="secondary"
407
+ vertical
408
+ initial-size="40"
409
+ min-size="30"
410
+ max-size="60">
411
+ <div slot="primary" style="padding: 20px;">
412
+ <h4 style="margin-top: 0;">Top Section</h4>
413
+ <p>This is a nested vertical split</p>
414
+ </div>
415
+ <div slot="secondary" style="padding: 20px; background: #f5f5f5;">
416
+ <h4 style="margin-top: 0;">Bottom Section</h4>
417
+ <p>Resize both horizontal and vertical dividers</p>
418
+ </div>
419
+ </zn-split-pane>
420
+ </zn-split-pane>
421
+ ```
422
+
423
+ ### Touch Support
424
+
425
+ The split pane fully supports touch events for mobile devices. Users can drag the divider with their finger to resize.
426
+
427
+ ```html:preview
428
+ <zn-split-pane style="height: 300px;">
429
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
430
+ <p>Touch and drag the divider on mobile devices</p>
431
+ </div>
432
+ <div slot="secondary" style="padding: 20px;">
433
+ <p>Touch events are fully supported</p>
434
+ </div>
435
+ </zn-split-pane>
436
+ ```
437
+
438
+ ### Customizing with CSS Variables
439
+
440
+ The split pane exposes CSS variables for advanced customization.
441
+
442
+ ```html:preview
443
+ <zn-split-pane
444
+ style="
445
+ height: 300px;
446
+ --min-panel-size: 150px;
447
+ --max-panel-size: 500px;
448
+ --initial-size: 300px;
449
+ --resize-size: 4px;
450
+ --resize-margin: 10px;
451
+ "
452
+ pixels>
453
+ <div slot="primary" style="padding: 20px; background: #f5f5f5;">
454
+ <p>Custom CSS variables applied</p>
455
+ </div>
456
+ <div slot="secondary" style="padding: 20px;">
457
+ <p>Thicker divider with custom sizing</p>
458
+ </div>
459
+ </zn-split-pane>
460
+ ```
22
461