snice 2.5.4 → 3.2.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 (411) hide show
  1. package/README.md +537 -869
  2. package/bin/templates/base/src/components/counter-button.ts +13 -26
  3. package/bin/templates/base/src/controllers/counter-controller.ts +3 -3
  4. package/dist/components/accordion/snice-accordion-item.d.ts +4 -5
  5. package/dist/components/accordion/snice-accordion-item.js +37 -39
  6. package/dist/components/accordion/snice-accordion-item.js.map +1 -1
  7. package/dist/components/accordion/snice-accordion.d.ts +5 -11
  8. package/dist/components/accordion/snice-accordion.js +51 -52
  9. package/dist/components/accordion/snice-accordion.js.map +1 -1
  10. package/dist/components/alert/snice-alert.d.ts +2 -6
  11. package/dist/components/alert/snice-alert.js +41 -56
  12. package/dist/components/alert/snice-alert.js.map +1 -1
  13. package/dist/components/avatar/snice-avatar.d.ts +2 -6
  14. package/dist/components/avatar/snice-avatar.js +64 -71
  15. package/dist/components/avatar/snice-avatar.js.map +1 -1
  16. package/dist/components/badge/snice-badge.d.ts +2 -3
  17. package/dist/components/badge/snice-badge.js +22 -23
  18. package/dist/components/badge/snice-badge.js.map +1 -1
  19. package/dist/components/banner/snice-banner.d.ts +22 -0
  20. package/dist/components/banner/snice-banner.js +180 -0
  21. package/dist/components/banner/snice-banner.js.map +1 -0
  22. package/dist/components/banner/snice-banner.types.d.ts +14 -0
  23. package/dist/components/breadcrumbs/snice-breadcrumbs.d.ts +5 -12
  24. package/dist/components/breadcrumbs/snice-breadcrumbs.js +88 -89
  25. package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -1
  26. package/dist/components/button/snice-button.d.ts +3 -7
  27. package/dist/components/button/snice-button.js +37 -58
  28. package/dist/components/button/snice-button.js.map +1 -1
  29. package/dist/components/card/snice-card.d.ts +5 -8
  30. package/dist/components/card/snice-card.js +71 -56
  31. package/dist/components/card/snice-card.js.map +1 -1
  32. package/dist/components/checkbox/snice-checkbox.d.ts +4 -13
  33. package/dist/components/checkbox/snice-checkbox.js +66 -137
  34. package/dist/components/checkbox/snice-checkbox.js.map +1 -1
  35. package/dist/components/chip/snice-chip.d.ts +5 -11
  36. package/dist/components/chip/snice-chip.js +44 -47
  37. package/dist/components/chip/snice-chip.js.map +1 -1
  38. package/dist/components/color-display/snice-color-display.d.ts +14 -0
  39. package/dist/components/color-display/snice-color-display.js +151 -0
  40. package/dist/components/color-display/snice-color-display.js.map +1 -0
  41. package/dist/components/color-display/snice-color-display.types.d.ts +10 -0
  42. package/dist/components/color-picker/snice-color-picker.d.ts +50 -0
  43. package/dist/components/color-picker/snice-color-picker.js +489 -0
  44. package/dist/components/color-picker/snice-color-picker.js.map +1 -0
  45. package/dist/components/color-picker/snice-color-picker.types.d.ts +19 -0
  46. package/dist/components/date-picker/snice-date-picker.d.ts +11 -11
  47. package/dist/components/date-picker/snice-date-picker.js +134 -133
  48. package/dist/components/date-picker/snice-date-picker.js.map +1 -1
  49. package/dist/components/divider/snice-divider.d.ts +2 -4
  50. package/dist/components/divider/snice-divider.js +14 -22
  51. package/dist/components/divider/snice-divider.js.map +1 -1
  52. package/dist/components/drawer/snice-drawer.d.ts +4 -4
  53. package/dist/components/drawer/snice-drawer.js +25 -19
  54. package/dist/components/drawer/snice-drawer.js.map +1 -1
  55. package/dist/components/empty-state/snice-empty-state.d.ts +13 -0
  56. package/dist/components/empty-state/snice-empty-state.js +121 -0
  57. package/dist/components/empty-state/snice-empty-state.js.map +1 -0
  58. package/dist/components/empty-state/snice-empty-state.types.d.ts +9 -0
  59. package/dist/components/file-upload/snice-file-upload.d.ts +45 -0
  60. package/dist/components/file-upload/snice-file-upload.js +394 -0
  61. package/dist/components/file-upload/snice-file-upload.js.map +1 -0
  62. package/dist/components/file-upload/snice-file-upload.types.d.ts +22 -0
  63. package/dist/components/image/snice-image.d.ts +22 -0
  64. package/dist/components/image/snice-image.js +201 -0
  65. package/dist/components/image/snice-image.js.map +1 -0
  66. package/dist/components/image/snice-image.types.d.ts +17 -0
  67. package/dist/components/input/snice-input.d.ts +8 -6
  68. package/dist/components/input/snice-input.js +122 -105
  69. package/dist/components/input/snice-input.js.map +1 -1
  70. package/dist/components/kpi/snice-kpi.d.ts +16 -0
  71. package/dist/components/kpi/snice-kpi.js +162 -0
  72. package/dist/components/kpi/snice-kpi.js.map +1 -0
  73. package/dist/components/kpi/snice-kpi.types.d.ts +12 -0
  74. package/dist/components/layout/snice-layout-blog.d.ts +4 -4
  75. package/dist/components/layout/snice-layout-blog.js +21 -19
  76. package/dist/components/layout/snice-layout-blog.js.map +1 -1
  77. package/dist/components/layout/snice-layout-card.d.ts +2 -2
  78. package/dist/components/layout/snice-layout-card.js +16 -9
  79. package/dist/components/layout/snice-layout-card.js.map +1 -1
  80. package/dist/components/layout/snice-layout-centered.d.ts +2 -2
  81. package/dist/components/layout/snice-layout-centered.js +14 -7
  82. package/dist/components/layout/snice-layout-centered.js.map +1 -1
  83. package/dist/components/layout/snice-layout-dashboard.d.ts +5 -5
  84. package/dist/components/layout/snice-layout-dashboard.js +38 -30
  85. package/dist/components/layout/snice-layout-dashboard.js.map +1 -1
  86. package/dist/components/layout/snice-layout-fullscreen.d.ts +2 -2
  87. package/dist/components/layout/snice-layout-fullscreen.js +17 -10
  88. package/dist/components/layout/snice-layout-fullscreen.js.map +1 -1
  89. package/dist/components/layout/snice-layout-landing.d.ts +4 -4
  90. package/dist/components/layout/snice-layout-landing.js +21 -19
  91. package/dist/components/layout/snice-layout-landing.js.map +1 -1
  92. package/dist/components/layout/snice-layout-minimal.d.ts +2 -2
  93. package/dist/components/layout/snice-layout-minimal.js +17 -6
  94. package/dist/components/layout/snice-layout-minimal.js.map +1 -1
  95. package/dist/components/layout/snice-layout-sidebar.d.ts +5 -4
  96. package/dist/components/layout/snice-layout-sidebar.js +42 -20
  97. package/dist/components/layout/snice-layout-sidebar.js.map +1 -1
  98. package/dist/components/layout/snice-layout-split.d.ts +2 -2
  99. package/dist/components/layout/snice-layout-split.js +14 -7
  100. package/dist/components/layout/snice-layout-split.js.map +1 -1
  101. package/dist/components/layout/snice-layout.d.ts +4 -4
  102. package/dist/components/layout/snice-layout.js +16 -10
  103. package/dist/components/layout/snice-layout.js.map +1 -1
  104. package/dist/components/link/snice-link.d.ts +13 -0
  105. package/dist/components/link/snice-link.js +137 -0
  106. package/dist/components/link/snice-link.js.map +1 -0
  107. package/dist/components/link/snice-link.types.d.ts +11 -0
  108. package/dist/components/login/snice-login.d.ts +6 -11
  109. package/dist/components/login/snice-login.js +97 -71
  110. package/dist/components/login/snice-login.js.map +1 -1
  111. package/dist/components/modal/snice-modal.d.ts +5 -9
  112. package/dist/components/modal/snice-modal.js +47 -78
  113. package/dist/components/modal/snice-modal.js.map +1 -1
  114. package/dist/components/nav/snice-nav.d.ts +13 -7
  115. package/dist/components/nav/snice-nav.js +191 -100
  116. package/dist/components/nav/snice-nav.js.map +1 -1
  117. package/dist/components/nav/snice-nav.types.d.ts +3 -3
  118. package/dist/components/pagination/snice-pagination.d.ts +6 -7
  119. package/dist/components/pagination/snice-pagination.js +94 -81
  120. package/dist/components/pagination/snice-pagination.js.map +1 -1
  121. package/dist/components/progress/snice-progress.d.ts +2 -7
  122. package/dist/components/progress/snice-progress.js +41 -98
  123. package/dist/components/progress/snice-progress.js.map +1 -1
  124. package/dist/components/radio/snice-radio.d.ts +4 -4
  125. package/dist/components/radio/snice-radio.js +52 -44
  126. package/dist/components/radio/snice-radio.js.map +1 -1
  127. package/dist/components/select/snice-option.d.ts +2 -1
  128. package/dist/components/select/snice-option.js +12 -5
  129. package/dist/components/select/snice-option.js.map +1 -1
  130. package/dist/components/select/snice-select.d.ts +9 -21
  131. package/dist/components/select/snice-select.js +98 -170
  132. package/dist/components/select/snice-select.js.map +1 -1
  133. package/dist/components/skeleton/snice-skeleton.d.ts +2 -6
  134. package/dist/components/skeleton/snice-skeleton.js +18 -49
  135. package/dist/components/skeleton/snice-skeleton.js.map +1 -1
  136. package/dist/components/slider/snice-slider.d.ts +53 -0
  137. package/dist/components/slider/snice-slider.js +479 -0
  138. package/dist/components/slider/snice-slider.js.map +1 -0
  139. package/dist/components/slider/snice-slider.types.d.ts +26 -0
  140. package/dist/components/snice-cell-C0slgOpe.js +4 -0
  141. package/dist/components/snice-cell-C0slgOpe.js.map +1 -0
  142. package/dist/components/sparkline/snice-sparkline.d.ts +21 -0
  143. package/dist/components/sparkline/snice-sparkline.js +228 -0
  144. package/dist/components/sparkline/snice-sparkline.js.map +1 -0
  145. package/dist/components/sparkline/snice-sparkline.types.d.ts +16 -0
  146. package/dist/components/spinner/snice-spinner.d.ts +10 -0
  147. package/dist/components/spinner/snice-spinner.js +109 -0
  148. package/dist/components/spinner/snice-spinner.js.map +1 -0
  149. package/dist/components/spinner/snice-spinner.types.d.ts +8 -0
  150. package/dist/components/stepper/snice-stepper-panel.d.ts +8 -0
  151. package/dist/components/stepper/snice-stepper-panel.js +70 -0
  152. package/dist/components/stepper/snice-stepper-panel.js.map +1 -0
  153. package/dist/components/stepper/snice-stepper-panel.types.d.ts +4 -0
  154. package/dist/components/stepper/snice-stepper.d.ts +15 -0
  155. package/dist/components/stepper/snice-stepper.js +163 -0
  156. package/dist/components/stepper/snice-stepper.js.map +1 -0
  157. package/dist/components/stepper/snice-stepper.types.d.ts +13 -0
  158. package/dist/components/switch/snice-switch.d.ts +2 -2
  159. package/dist/components/switch/snice-switch.js +38 -26
  160. package/dist/components/switch/snice-switch.js.map +1 -1
  161. package/dist/components/table/snice-cell-actions.d.ts +24 -0
  162. package/dist/components/table/snice-cell-actions.js +149 -0
  163. package/dist/components/table/snice-cell-actions.js.map +1 -0
  164. package/dist/components/table/snice-cell-boolean.d.ts +2 -2
  165. package/dist/components/table/snice-cell-boolean.js +13 -7
  166. package/dist/components/table/snice-cell-boolean.js.map +1 -1
  167. package/dist/components/table/snice-cell-color.d.ts +18 -0
  168. package/dist/components/table/snice-cell-color.js +149 -0
  169. package/dist/components/table/snice-cell-color.js.map +1 -0
  170. package/dist/components/table/snice-cell-currency.d.ts +24 -0
  171. package/dist/components/table/snice-cell-currency.js +235 -0
  172. package/dist/components/table/snice-cell-currency.js.map +1 -0
  173. package/dist/components/table/snice-cell-date.d.ts +2 -2
  174. package/dist/components/table/snice-cell-date.js +14 -8
  175. package/dist/components/table/snice-cell-date.js.map +1 -1
  176. package/dist/components/table/snice-cell-duration.d.ts +2 -2
  177. package/dist/components/table/snice-cell-duration.js +12 -6
  178. package/dist/components/table/snice-cell-duration.js.map +1 -1
  179. package/dist/components/table/snice-cell-email.d.ts +15 -0
  180. package/dist/components/table/snice-cell-email.js +125 -0
  181. package/dist/components/table/snice-cell-email.js.map +1 -0
  182. package/dist/components/table/snice-cell-filesize.d.ts +2 -2
  183. package/dist/components/table/snice-cell-filesize.js +12 -6
  184. package/dist/components/table/snice-cell-filesize.js.map +1 -1
  185. package/dist/components/table/snice-cell-image.d.ts +20 -0
  186. package/dist/components/table/snice-cell-image.js +162 -0
  187. package/dist/components/table/snice-cell-image.js.map +1 -0
  188. package/dist/components/table/snice-cell-json.d.ts +20 -0
  189. package/dist/components/table/snice-cell-json.js +186 -0
  190. package/dist/components/table/snice-cell-json.js.map +1 -0
  191. package/dist/components/table/snice-cell-link.d.ts +17 -0
  192. package/dist/components/table/snice-cell-link.js +142 -0
  193. package/dist/components/table/snice-cell-link.js.map +1 -0
  194. package/dist/components/table/snice-cell-location.d.ts +19 -0
  195. package/dist/components/table/snice-cell-location.js +185 -0
  196. package/dist/components/table/snice-cell-location.js.map +1 -0
  197. package/dist/components/table/snice-cell-number.d.ts +2 -2
  198. package/dist/components/table/snice-cell-number.js +12 -6
  199. package/dist/components/table/snice-cell-number.js.map +1 -1
  200. package/dist/components/table/snice-cell-percentage.d.ts +22 -0
  201. package/dist/components/table/snice-cell-percentage.js +208 -0
  202. package/dist/components/table/snice-cell-percentage.js.map +1 -0
  203. package/dist/components/table/snice-cell-phone.d.ts +18 -0
  204. package/dist/components/table/snice-cell-phone.js +153 -0
  205. package/dist/components/table/snice-cell-phone.js.map +1 -0
  206. package/dist/components/table/snice-cell-progress.d.ts +2 -2
  207. package/dist/components/table/snice-cell-progress.js +12 -6
  208. package/dist/components/table/snice-cell-progress.js.map +1 -1
  209. package/dist/components/table/snice-cell-rating.d.ts +2 -2
  210. package/dist/components/table/snice-cell-rating.js +12 -6
  211. package/dist/components/table/snice-cell-rating.js.map +1 -1
  212. package/dist/components/table/snice-cell-sparkline.d.ts +2 -2
  213. package/dist/components/table/snice-cell-sparkline.js +13 -7
  214. package/dist/components/table/snice-cell-sparkline.js.map +1 -1
  215. package/dist/components/table/snice-cell-status.d.ts +17 -0
  216. package/dist/components/table/snice-cell-status.js +144 -0
  217. package/dist/components/table/snice-cell-status.js.map +1 -0
  218. package/dist/components/table/snice-cell-tag.d.ts +16 -0
  219. package/dist/components/table/snice-cell-tag.js +131 -0
  220. package/dist/components/table/snice-cell-tag.js.map +1 -0
  221. package/dist/components/table/snice-cell-text.d.ts +2 -2
  222. package/dist/components/table/snice-cell-text.js +14 -8
  223. package/dist/components/table/snice-cell-text.js.map +1 -1
  224. package/dist/components/table/snice-cell.d.ts +2 -2
  225. package/dist/components/table/snice-cell.js +12 -6
  226. package/dist/components/table/snice-cell.js.map +1 -1
  227. package/dist/components/table/snice-column.d.ts +1 -1
  228. package/dist/components/table/snice-column.js +6 -3
  229. package/dist/components/table/snice-column.js.map +1 -1
  230. package/dist/components/table/snice-header.d.ts +5 -5
  231. package/dist/components/table/snice-header.js +60 -50
  232. package/dist/components/table/snice-header.js.map +1 -1
  233. package/dist/components/table/snice-progress.d.ts +2 -2
  234. package/dist/components/table/snice-progress.js +18 -11
  235. package/dist/components/table/snice-progress.js.map +1 -1
  236. package/dist/components/table/snice-rating.d.ts +2 -2
  237. package/dist/components/table/snice-rating.js +15 -8
  238. package/dist/components/table/snice-rating.js.map +1 -1
  239. package/dist/components/table/snice-row.d.ts +17 -6
  240. package/dist/components/table/snice-row.js +95 -44
  241. package/dist/components/table/snice-row.js.map +1 -1
  242. package/dist/components/table/snice-table.d.ts +18 -10
  243. package/dist/components/table/snice-table.js +355 -173
  244. package/dist/components/table/snice-table.js.map +1 -1
  245. package/dist/components/table/snice-table.types.d.ts +101 -2
  246. package/dist/components/tabs/snice-tab-panel.d.ts +2 -2
  247. package/dist/components/tabs/snice-tab-panel.js +12 -6
  248. package/dist/components/tabs/snice-tab-panel.js.map +1 -1
  249. package/dist/components/tabs/snice-tab.d.ts +6 -5
  250. package/dist/components/tabs/snice-tab.js +36 -19
  251. package/dist/components/tabs/snice-tab.js.map +1 -1
  252. package/dist/components/tabs/snice-tabs.d.ts +5 -5
  253. package/dist/components/tabs/snice-tabs.js +38 -28
  254. package/dist/components/tabs/snice-tabs.js.map +1 -1
  255. package/dist/components/textarea/snice-textarea.d.ts +52 -0
  256. package/dist/components/textarea/snice-textarea.js +407 -0
  257. package/dist/components/textarea/snice-textarea.js.map +1 -0
  258. package/dist/components/textarea/snice-textarea.types.d.ts +30 -0
  259. package/dist/components/timeline/snice-timeline.d.ts +11 -0
  260. package/dist/components/timeline/snice-timeline.js +112 -0
  261. package/dist/components/timeline/snice-timeline.js.map +1 -0
  262. package/dist/components/timeline/snice-timeline.types.d.ts +16 -0
  263. package/dist/components/toast/snice-toast-container.d.ts +7 -7
  264. package/dist/components/toast/snice-toast-container.js +19 -12
  265. package/dist/components/toast/snice-toast-container.js.map +1 -1
  266. package/dist/components/toast/snice-toast.d.ts +3 -15
  267. package/dist/components/toast/snice-toast.js +49 -108
  268. package/dist/components/toast/snice-toast.js.map +1 -1
  269. package/dist/components/tooltip/snice-tooltip.d.ts +2 -2
  270. package/dist/components/tooltip/snice-tooltip.js +15 -8
  271. package/dist/components/tooltip/snice-tooltip.js.map +1 -1
  272. package/dist/context.d.ts +44 -0
  273. package/dist/element-ready.d.ts +40 -0
  274. package/dist/{types/element.d.ts → element.d.ts} +2 -8
  275. package/dist/{types/events.d.ts → events.d.ts} +0 -4
  276. package/dist/index.cjs +2556 -605
  277. package/dist/index.cjs.map +1 -1
  278. package/dist/index.d.ts +21 -0
  279. package/dist/index.esm.js +2535 -604
  280. package/dist/index.esm.js.map +1 -1
  281. package/dist/index.iife.js +2556 -605
  282. package/dist/index.iife.js.map +1 -1
  283. package/dist/method-decorators.d.ts +121 -0
  284. package/dist/on.d.ts +59 -0
  285. package/dist/parts.d.ts +156 -0
  286. package/dist/render-debug.d.ts +27 -0
  287. package/dist/render-tracker.d.ts +14 -0
  288. package/dist/render.d.ts +96 -0
  289. package/dist/symbols.cjs +163 -0
  290. package/dist/symbols.cjs.map +1 -1
  291. package/dist/{types/symbols.d.ts → symbols.d.ts} +22 -0
  292. package/dist/symbols.esm.js +27 -3
  293. package/dist/symbols.esm.js.map +1 -1
  294. package/dist/template.d.ts +99 -0
  295. package/dist/transitions.cjs +219 -0
  296. package/dist/transitions.esm.js +2 -2
  297. package/dist/types/context.d.ts +48 -0
  298. package/dist/types/element-options.d.ts +26 -0
  299. package/dist/types/index.d.ts +25 -9
  300. package/dist/types/nav-context.d.ts +19 -0
  301. package/dist/types/{types/on-options.d.ts → on-options.d.ts} +2 -0
  302. package/dist/types/{types/placard.d.ts → placard.d.ts} +0 -1
  303. package/docs/ai/README.md +26 -0
  304. package/docs/ai/api.md +175 -0
  305. package/docs/ai/architecture.md +160 -0
  306. package/docs/ai/components/accordion.md +174 -0
  307. package/docs/ai/components/alert.md +77 -0
  308. package/docs/ai/components/avatar.md +61 -0
  309. package/docs/ai/components/badge.md +69 -0
  310. package/docs/ai/components/banner.md +84 -0
  311. package/docs/ai/components/breadcrumbs.md +74 -0
  312. package/docs/ai/components/button.md +75 -0
  313. package/docs/ai/components/card.md +61 -0
  314. package/docs/ai/components/checkbox.md +74 -0
  315. package/docs/ai/components/chip.md +73 -0
  316. package/docs/ai/components/color-display.md +48 -0
  317. package/docs/ai/components/color-picker.md +75 -0
  318. package/docs/ai/components/date-picker.md +75 -0
  319. package/docs/ai/components/divider.md +66 -0
  320. package/docs/ai/components/drawer.md +80 -0
  321. package/docs/ai/components/empty-state.md +72 -0
  322. package/docs/ai/components/file-upload.md +93 -0
  323. package/docs/ai/components/image.md +60 -0
  324. package/docs/ai/components/input.md +111 -0
  325. package/docs/ai/components/kpi.md +158 -0
  326. package/docs/ai/components/link.md +77 -0
  327. package/docs/ai/components/login.md +109 -0
  328. package/docs/ai/components/modal.md +67 -0
  329. package/docs/ai/components/nav.md +76 -0
  330. package/docs/ai/components/pagination.md +55 -0
  331. package/docs/ai/components/progress.md +72 -0
  332. package/docs/ai/components/radio.md +79 -0
  333. package/docs/ai/components/select.md +92 -0
  334. package/docs/ai/components/skeleton.md +57 -0
  335. package/docs/ai/components/slider.md +87 -0
  336. package/docs/ai/components/sparkline.md +168 -0
  337. package/docs/ai/components/spinner.md +47 -0
  338. package/docs/ai/components/stepper.md +216 -0
  339. package/docs/ai/components/switch.md +53 -0
  340. package/docs/ai/components/table.md +227 -0
  341. package/docs/ai/components/tabs.md +83 -0
  342. package/docs/ai/components/textarea.md +87 -0
  343. package/docs/ai/components/timeline.md +77 -0
  344. package/docs/ai/components/toast.md +140 -0
  345. package/docs/ai/components/tooltip.md +146 -0
  346. package/docs/ai/patterns.md +244 -0
  347. package/docs/components/accordion.md +558 -0
  348. package/docs/components/banner.md +106 -0
  349. package/docs/components/color-display.md +96 -0
  350. package/docs/components/color-picker.md +81 -0
  351. package/docs/components/drawer.md +602 -0
  352. package/docs/components/empty-state.md +79 -0
  353. package/docs/components/file-upload.md +263 -0
  354. package/docs/components/image.md +110 -0
  355. package/docs/components/kpi.md +251 -0
  356. package/docs/components/link.md +229 -0
  357. package/docs/components/modal.md +558 -0
  358. package/docs/components/nav.md +239 -0
  359. package/docs/components/pagination.md +289 -0
  360. package/docs/components/select.md +599 -0
  361. package/docs/components/slider.md +297 -0
  362. package/docs/components/sparkline.md +293 -0
  363. package/docs/components/spinner.md +63 -0
  364. package/docs/components/stepper.md +410 -0
  365. package/docs/components/switch.md +354 -0
  366. package/docs/components/tabs.md +546 -0
  367. package/docs/components/textarea.md +235 -0
  368. package/docs/components/timeline.md +192 -0
  369. package/docs/components/toast.md +506 -0
  370. package/docs/components/tooltip.md +523 -0
  371. package/docs/controllers.md +744 -0
  372. package/docs/elements.md +855 -0
  373. package/docs/events.md +807 -0
  374. package/docs/migration-v2-to-v3.md +569 -0
  375. package/docs/observe.md +588 -0
  376. package/docs/placards.md +401 -0
  377. package/docs/request-response.md +852 -0
  378. package/docs/routing.md +1186 -0
  379. package/package.json +11 -11
  380. package/dist/components/snice-cell-C9N6yGxQ.js +0 -4
  381. package/dist/components/snice-cell-C9N6yGxQ.js.map +0 -1
  382. package/dist/types/types/index.d.ts +0 -23
  383. /package/dist/{types/controller.d.ts → controller.d.ts} +0 -0
  384. /package/dist/{types/global.d.ts → global.d.ts} +0 -0
  385. /package/dist/{types/observe.d.ts → observe.d.ts} +0 -0
  386. /package/dist/{types/request-response.d.ts → request-response.d.ts} +0 -0
  387. /package/dist/{types/router.d.ts → router.d.ts} +0 -0
  388. /package/dist/{types/testing.d.ts → testing.d.ts} +0 -0
  389. /package/dist/{types/transitions.d.ts → transitions.d.ts} +0 -0
  390. /package/dist/types/{types/adopted-options.d.ts → adopted-options.d.ts} +0 -0
  391. /package/dist/types/{types/app-context.d.ts → app-context.d.ts} +0 -0
  392. /package/dist/types/{types/dispatch-options.d.ts → dispatch-options.d.ts} +0 -0
  393. /package/dist/types/{types/guard.d.ts → guard.d.ts} +0 -0
  394. /package/dist/types/{types/i-controller.d.ts → i-controller.d.ts} +0 -0
  395. /package/dist/types/{types/moved-options.d.ts → moved-options.d.ts} +0 -0
  396. /package/dist/types/{types/observe-options.d.ts → observe-options.d.ts} +0 -0
  397. /package/dist/types/{types/page-options.d.ts → page-options.d.ts} +0 -0
  398. /package/dist/types/{types/part-options.d.ts → part-options.d.ts} +0 -0
  399. /package/dist/types/{types/property-converter.d.ts → property-converter.d.ts} +0 -0
  400. /package/dist/types/{types/property-options.d.ts → property-options.d.ts} +0 -0
  401. /package/dist/types/{types/query-options.d.ts → query-options.d.ts} +0 -0
  402. /package/dist/types/{types/request-options.d.ts → request-options.d.ts} +0 -0
  403. /package/dist/types/{types/respond-options.d.ts → respond-options.d.ts} +0 -0
  404. /package/dist/types/{types/route-params.d.ts → route-params.d.ts} +0 -0
  405. /package/dist/types/{types/router-instance.d.ts → router-instance.d.ts} +0 -0
  406. /package/dist/types/{types/router-options.d.ts → router-options.d.ts} +0 -0
  407. /package/dist/types/{types/simple-array.d.ts → simple-array.d.ts} +0 -0
  408. /package/dist/types/{types/snice-element.d.ts → snice-element.d.ts} +0 -0
  409. /package/dist/types/{types/snice-global.d.ts → snice-global.d.ts} +0 -0
  410. /package/dist/types/{types/transition.d.ts → transition.d.ts} +0 -0
  411. /package/dist/{types/utils.d.ts → utils.d.ts} +0 -0
@@ -0,0 +1,602 @@
1
+ # Drawer Component
2
+
3
+ The `<snice-drawer>` component provides a slide-out panel that appears from any side of the viewport. It's commonly used for navigation menus, filters, settings panels, or additional content that shouldn't occupy permanent screen space.
4
+
5
+ ## Table of Contents
6
+ - [Basic Usage](#basic-usage)
7
+ - [Properties](#properties)
8
+ - [Methods](#methods)
9
+ - [Events](#events)
10
+ - [Slots](#slots)
11
+ - [Examples](#examples)
12
+
13
+ ## Basic Usage
14
+
15
+ ```html
16
+ <button id="openDrawer">Open Drawer</button>
17
+
18
+ <snice-drawer id="myDrawer">
19
+ <h2 slot="title">Menu</h2>
20
+
21
+ <nav>
22
+ <a href="/">Home</a>
23
+ <a href="/about">About</a>
24
+ <a href="/contact">Contact</a>
25
+ </nav>
26
+
27
+ <div slot="footer">
28
+ <button onclick="this.closest('snice-drawer').hide()">Close</button>
29
+ </div>
30
+ </snice-drawer>
31
+ ```
32
+
33
+ ```typescript
34
+ import 'snice/components/drawer/snice-drawer';
35
+
36
+ const drawer = document.querySelector('snice-drawer');
37
+ const openBtn = document.querySelector('#openDrawer');
38
+
39
+ openBtn.addEventListener('click', () => drawer.show());
40
+ ```
41
+
42
+ ## Properties
43
+
44
+ | Property | Type | Default | Description |
45
+ |----------|------|---------|-------------|
46
+ | `open` | `boolean` | `false` | Whether the drawer is visible |
47
+ | `position` | `'left' \| 'right' \| 'top' \| 'bottom'` | `'left'` | Side from which the drawer slides in |
48
+ | `size` | `'small' \| 'medium' \| 'large' \| 'xl' \| 'xxl' \| 'xxxl' \| 'full'` | `'medium'` | Width/height of the drawer |
49
+ | `noBackdrop` | `boolean` | `false` | Hide the backdrop overlay |
50
+ | `noBackdropDismiss` | `boolean` | `false` | Prevent closing when clicking backdrop |
51
+ | `noEscapeDismiss` | `boolean` | `false` | Prevent closing with Escape key |
52
+ | `noFocusTrap` | `boolean` | `false` | Disable focus trapping |
53
+ | `persistent` | `boolean` | `false` | Hide close button and prevent all dismissal |
54
+ | `pushContent` | `boolean` | `false` | Push main content instead of overlaying |
55
+ | `contained` | `boolean` | `false` | Position relative to parent instead of viewport |
56
+
57
+ ## Methods
58
+
59
+ ### `show(): void`
60
+ Open the drawer.
61
+
62
+ ```typescript
63
+ drawer.show();
64
+ ```
65
+
66
+ ### `hide(): void`
67
+ Close the drawer.
68
+
69
+ ```typescript
70
+ drawer.hide();
71
+ ```
72
+
73
+ ### `toggle(): void`
74
+ Toggle the drawer open/closed state.
75
+
76
+ ```typescript
77
+ drawer.toggle();
78
+ ```
79
+
80
+ ## Events
81
+
82
+ ### `@snice/drawer-open`
83
+ Fired when the drawer opens.
84
+
85
+ **Event Detail:**
86
+ ```typescript
87
+ {
88
+ drawer: SniceDrawerElement; // Reference to the drawer element
89
+ }
90
+ ```
91
+
92
+ **Usage:**
93
+ ```typescript
94
+ drawer.addEventListener('@snice/drawer-open', (e) => {
95
+ console.log('Drawer opened:', e.detail.drawer);
96
+ });
97
+ ```
98
+
99
+ ### `@snice/drawer-close`
100
+ Fired when the drawer closes.
101
+
102
+ **Event Detail:**
103
+ ```typescript
104
+ {
105
+ drawer: SniceDrawerElement; // Reference to the drawer element
106
+ }
107
+ ```
108
+
109
+ **Usage:**
110
+ ```typescript
111
+ drawer.addEventListener('@snice/drawer-close', (e) => {
112
+ console.log('Drawer closed:', e.detail.drawer);
113
+ });
114
+ ```
115
+
116
+ ## Slots
117
+
118
+ ### `title` (named slot)
119
+ Content for the drawer header/title area.
120
+
121
+ ```html
122
+ <snice-drawer>
123
+ <h2 slot="title">Drawer Title</h2>
124
+ </snice-drawer>
125
+ ```
126
+
127
+ ### Default slot
128
+ Main content of the drawer body.
129
+
130
+ ```html
131
+ <snice-drawer>
132
+ <p>This goes in the body</p>
133
+ </snice-drawer>
134
+ ```
135
+
136
+ ### `footer` (named slot)
137
+ Content for the drawer footer. Typically used for action buttons.
138
+
139
+ ```html
140
+ <snice-drawer>
141
+ <div slot="footer">
142
+ <button>Action</button>
143
+ </div>
144
+ </snice-drawer>
145
+ ```
146
+
147
+ ## Examples
148
+
149
+ ### Basic Drawer
150
+
151
+ ```html
152
+ <button id="toggle">Toggle Drawer</button>
153
+
154
+ <snice-drawer id="drawer">
155
+ <h2 slot="title">Navigation</h2>
156
+
157
+ <nav>
158
+ <a href="/">Home</a>
159
+ <a href="/products">Products</a>
160
+ <a href="/about">About</a>
161
+ </nav>
162
+ </snice-drawer>
163
+
164
+ <script type="module">
165
+ import 'snice/components/drawer/snice-drawer';
166
+
167
+ const drawer = document.querySelector('#drawer');
168
+ const toggleBtn = document.querySelector('#toggle');
169
+
170
+ toggleBtn.addEventListener('click', () => drawer.toggle());
171
+ </script>
172
+ ```
173
+
174
+ ### Position Variants
175
+
176
+ ```html
177
+ <!-- Left (default) -->
178
+ <snice-drawer position="left">
179
+ <h2 slot="title">Left Drawer</h2>
180
+ <p>Slides in from the left</p>
181
+ </snice-drawer>
182
+
183
+ <!-- Right -->
184
+ <snice-drawer position="right">
185
+ <h2 slot="title">Right Drawer</h2>
186
+ <p>Slides in from the right</p>
187
+ </snice-drawer>
188
+
189
+ <!-- Top -->
190
+ <snice-drawer position="top">
191
+ <h2 slot="title">Top Drawer</h2>
192
+ <p>Slides in from the top</p>
193
+ </snice-drawer>
194
+
195
+ <!-- Bottom -->
196
+ <snice-drawer position="bottom">
197
+ <h2 slot="title">Bottom Drawer</h2>
198
+ <p>Slides in from the bottom</p>
199
+ </snice-drawer>
200
+ ```
201
+
202
+ ### Size Variants
203
+
204
+ ```html
205
+ <!-- Small -->
206
+ <snice-drawer size="small">
207
+ <h2 slot="title">Small Drawer</h2>
208
+ </snice-drawer>
209
+
210
+ <!-- Medium (default) -->
211
+ <snice-drawer size="medium">
212
+ <h2 slot="title">Medium Drawer</h2>
213
+ </snice-drawer>
214
+
215
+ <!-- Large -->
216
+ <snice-drawer size="large">
217
+ <h2 slot="title">Large Drawer</h2>
218
+ </snice-drawer>
219
+
220
+ <!-- Extra Large -->
221
+ <snice-drawer size="xl">
222
+ <h2 slot="title">XL Drawer</h2>
223
+ </snice-drawer>
224
+
225
+ <!-- Full Width/Height -->
226
+ <snice-drawer size="full">
227
+ <h2 slot="title">Full Drawer</h2>
228
+ </snice-drawer>
229
+ ```
230
+
231
+ ### Without Backdrop
232
+
233
+ ```html
234
+ <snice-drawer no-backdrop>
235
+ <h2 slot="title">No Backdrop</h2>
236
+ <p>This drawer has no background overlay.</p>
237
+ </snice-drawer>
238
+ ```
239
+
240
+ ### Persistent Drawer
241
+
242
+ ```html
243
+ <snice-drawer persistent>
244
+ <h2 slot="title">Persistent Drawer</h2>
245
+ <p>No close button, must be closed programmatically.</p>
246
+ </snice-drawer>
247
+ ```
248
+
249
+ ### Push Content
250
+
251
+ ```html
252
+ <snice-drawer push-content>
253
+ <h2 slot="title">Push Content</h2>
254
+ <p>Main content slides over when this opens.</p>
255
+ </snice-drawer>
256
+ ```
257
+
258
+ ### Filters Panel
259
+
260
+ ```html
261
+ <button id="showFilters">Show Filters</button>
262
+
263
+ <snice-drawer id="filtersDrawer" position="right" size="small">
264
+ <h2 slot="title">Filters</h2>
265
+
266
+ <div style="display: flex; flex-direction: column; gap: 1rem;">
267
+ <div>
268
+ <label>
269
+ <input type="checkbox"> In Stock
270
+ </label>
271
+ </div>
272
+ <div>
273
+ <label>
274
+ <input type="checkbox"> On Sale
275
+ </label>
276
+ </div>
277
+ <div>
278
+ <label>Price Range</label>
279
+ <input type="range" min="0" max="1000">
280
+ </div>
281
+ </div>
282
+
283
+ <div slot="footer">
284
+ <button onclick="this.closest('snice-drawer').hide()">Apply</button>
285
+ </div>
286
+ </snice-drawer>
287
+
288
+ <script type="module">
289
+ import 'snice/components/drawer/snice-drawer';
290
+
291
+ document.querySelector('#showFilters').addEventListener('click', () => {
292
+ document.querySelector('#filtersDrawer').show();
293
+ });
294
+ </script>
295
+ ```
296
+
297
+ ### Settings Panel
298
+
299
+ ```html
300
+ <button id="showSettings">Settings</button>
301
+
302
+ <snice-drawer id="settingsDrawer" position="right">
303
+ <h2 slot="title">Settings</h2>
304
+
305
+ <form id="settingsForm">
306
+ <div style="display: flex; flex-direction: column; gap: 1rem;">
307
+ <div>
308
+ <label for="theme">Theme</label>
309
+ <select id="theme" name="theme">
310
+ <option>Light</option>
311
+ <option>Dark</option>
312
+ <option>Auto</option>
313
+ </select>
314
+ </div>
315
+
316
+ <div>
317
+ <label>
318
+ <input type="checkbox" name="notifications">
319
+ Enable notifications
320
+ </label>
321
+ </div>
322
+
323
+ <div>
324
+ <label>
325
+ <input type="checkbox" name="autoSave">
326
+ Auto-save
327
+ </label>
328
+ </div>
329
+ </div>
330
+ </form>
331
+
332
+ <div slot="footer">
333
+ <button type="button" onclick="this.closest('snice-drawer').hide()">
334
+ Cancel
335
+ </button>
336
+ <button type="submit" form="settingsForm">
337
+ Save
338
+ </button>
339
+ </div>
340
+ </snice-drawer>
341
+
342
+ <script type="module">
343
+ import 'snice/components/drawer/snice-drawer';
344
+
345
+ const drawer = document.querySelector('#settingsDrawer');
346
+ const form = document.querySelector('#settingsForm');
347
+
348
+ document.querySelector('#showSettings').addEventListener('click', () => {
349
+ drawer.show();
350
+ });
351
+
352
+ form.addEventListener('submit', (e) => {
353
+ e.preventDefault();
354
+ const data = new FormData(form);
355
+ console.log('Settings:', Object.fromEntries(data));
356
+ drawer.hide();
357
+ });
358
+ </script>
359
+ ```
360
+
361
+ ### Mobile Navigation
362
+
363
+ ```html
364
+ <button id="menuBtn">Menu</button>
365
+
366
+ <snice-drawer id="navDrawer" position="left" size="medium">
367
+ <h2 slot="title">Menu</h2>
368
+
369
+ <nav style="display: flex; flex-direction: column; gap: 0.5rem;">
370
+ <a href="/" style="padding: 0.5rem;">Home</a>
371
+ <a href="/products" style="padding: 0.5rem;">Products</a>
372
+ <a href="/services" style="padding: 0.5rem;">Services</a>
373
+ <a href="/about" style="padding: 0.5rem;">About</a>
374
+ <a href="/contact" style="padding: 0.5rem;">Contact</a>
375
+ </nav>
376
+ </snice-drawer>
377
+
378
+ <script type="module">
379
+ import 'snice/components/drawer/snice-drawer';
380
+
381
+ const drawer = document.querySelector('#navDrawer');
382
+ const menuBtn = document.querySelector('#menuBtn');
383
+
384
+ menuBtn.addEventListener('click', () => drawer.show());
385
+
386
+ // Close drawer when clicking a link
387
+ drawer.querySelectorAll('a').forEach(link => {
388
+ link.addEventListener('click', () => drawer.hide());
389
+ });
390
+ </script>
391
+ ```
392
+
393
+ ### With Event Handling
394
+
395
+ ```typescript
396
+ import type { SniceDrawerElement } from 'snice/components/drawer/snice-drawer.types';
397
+
398
+ const drawer = document.querySelector<SniceDrawerElement>('snice-drawer');
399
+
400
+ drawer.addEventListener('@snice/drawer-open', () => {
401
+ console.log('Drawer opened');
402
+ // Pause video, load content, etc.
403
+ });
404
+
405
+ drawer.addEventListener('@snice/drawer-close', () => {
406
+ console.log('Drawer closed');
407
+ // Resume video, save state, etc.
408
+ });
409
+
410
+ // Programmatic control
411
+ drawer.show();
412
+ drawer.hide();
413
+ drawer.toggle();
414
+ ```
415
+
416
+ ### Dynamic Content Loading
417
+
418
+ ```html
419
+ <button id="showDetails">Show Details</button>
420
+
421
+ <snice-drawer id="detailsDrawer" position="right">
422
+ <h2 slot="title" id="itemTitle">Loading...</h2>
423
+
424
+ <div id="itemContent">
425
+ <p>Loading...</p>
426
+ </div>
427
+ </snice-drawer>
428
+
429
+ <script type="module">
430
+ import 'snice/components/drawer/snice-drawer';
431
+
432
+ const drawer = document.querySelector('#detailsDrawer');
433
+ const title = document.querySelector('#itemTitle');
434
+ const content = document.querySelector('#itemContent');
435
+
436
+ document.querySelector('#showDetails').addEventListener('click', async () => {
437
+ drawer.show();
438
+
439
+ // Fetch data
440
+ const response = await fetch('/api/item/123');
441
+ const item = await response.json();
442
+
443
+ // Update content
444
+ title.textContent = item.name;
445
+ content.innerHTML = `
446
+ <dl>
447
+ <dt>Price:</dt>
448
+ <dd>$${item.price}</dd>
449
+ <dt>Description:</dt>
450
+ <dd>${item.description}</dd>
451
+ </dl>
452
+ `;
453
+ });
454
+ </script>
455
+ ```
456
+
457
+ ### Complete Example
458
+
459
+ ```html
460
+ <!DOCTYPE html>
461
+ <html>
462
+ <head>
463
+ <style>
464
+ body {
465
+ margin: 0;
466
+ font-family: system-ui;
467
+ }
468
+
469
+ .app-header {
470
+ padding: 1rem;
471
+ background: #1f2937;
472
+ color: white;
473
+ display: flex;
474
+ align-items: center;
475
+ gap: 1rem;
476
+ }
477
+
478
+ .content {
479
+ padding: 2rem;
480
+ }
481
+
482
+ snice-drawer nav {
483
+ display: flex;
484
+ flex-direction: column;
485
+ }
486
+
487
+ snice-drawer nav a {
488
+ padding: 0.75rem 1rem;
489
+ text-decoration: none;
490
+ color: inherit;
491
+ border-radius: 4px;
492
+ }
493
+
494
+ snice-drawer nav a:hover {
495
+ background: #f3f4f6;
496
+ }
497
+ </style>
498
+
499
+ <script type="module">
500
+ import 'snice/components/drawer/snice-drawer';
501
+
502
+ const drawer = document.querySelector('snice-drawer');
503
+ const menuBtn = document.querySelector('#menuBtn');
504
+
505
+ menuBtn.addEventListener('click', () => drawer.show());
506
+
507
+ // Close drawer on link click
508
+ drawer.querySelectorAll('a').forEach(link => {
509
+ link.addEventListener('click', (e) => {
510
+ e.preventDefault();
511
+ drawer.hide();
512
+ console.log('Navigate to:', link.getAttribute('href'));
513
+ });
514
+ });
515
+ </script>
516
+ </head>
517
+ <body>
518
+ <header class="app-header">
519
+ <button id="menuBtn">☰ Menu</button>
520
+ <h1>My App</h1>
521
+ </header>
522
+
523
+ <main class="content">
524
+ <h2>Welcome</h2>
525
+ <p>Click the menu button to open the navigation drawer.</p>
526
+ </main>
527
+
528
+ <snice-drawer id="navDrawer" position="left" size="medium">
529
+ <h2 slot="title">Navigation</h2>
530
+
531
+ <nav>
532
+ <a href="/">🏠 Home</a>
533
+ <a href="/dashboard">📊 Dashboard</a>
534
+ <a href="/products">📦 Products</a>
535
+ <a href="/orders">📋 Orders</a>
536
+ <a href="/customers">👥 Customers</a>
537
+ <a href="/analytics">📈 Analytics</a>
538
+ <a href="/settings">⚙️ Settings</a>
539
+ </nav>
540
+
541
+ <div slot="footer">
542
+ <button onclick="this.closest('snice-drawer').hide()">
543
+ Close
544
+ </button>
545
+ </div>
546
+ </snice-drawer>
547
+ </body>
548
+ </html>
549
+ ```
550
+
551
+ ## Accessibility
552
+
553
+ The drawer component includes comprehensive accessibility features:
554
+
555
+ - `role="dialog"` on the drawer container
556
+ - `aria-modal="true"` to indicate modal behavior
557
+ - `aria-hidden` reflects visibility state
558
+ - Focus trap keeps keyboard navigation within drawer
559
+ - Focus restoration returns focus to trigger element on close
560
+ - Escape key support for closing
561
+ - Close button is keyboard accessible
562
+
563
+ ### Keyboard Support
564
+
565
+ - **Escape**: Close drawer (unless `noEscapeDismiss` or `persistent` is true)
566
+ - **Tab**: Cycle through focusable elements within drawer (trapped)
567
+ - **Shift + Tab**: Reverse cycle through focusable elements
568
+
569
+ ## Behavior
570
+
571
+ ### Focus Management
572
+
573
+ When a drawer opens:
574
+ 1. Current focus is stored
575
+ 2. Focus moves to the drawer container
576
+ 3. Tab navigation is trapped within the drawer (unless `noFocusTrap` is true)
577
+
578
+ When a drawer closes:
579
+ 1. Focus returns to the previously focused element
580
+
581
+ ### Dismissal
582
+
583
+ By default, drawers can be dismissed by:
584
+ - Clicking the close button
585
+ - Clicking the backdrop
586
+ - Pressing Escape
587
+
588
+ This behavior can be customized:
589
+ - `noBackdropDismiss`: Prevents backdrop click dismissal
590
+ - `noEscapeDismiss`: Prevents Escape key dismissal
591
+ - `persistent`: Hides close button and prevents all dismissal
592
+
593
+ ### Push Content Mode
594
+
595
+ When `pushContent` is enabled, the drawer pushes the main content aside instead of overlaying it. This is useful for persistent navigation panels. The pushed element is determined by:
596
+ 1. First `<main>` element in the document
597
+ 2. Falls back to `<body>` if no `<main>` exists
598
+
599
+ ## Browser Support
600
+
601
+ - Modern browsers (Chrome, Firefox, Safari, Edge)
602
+ - Requires Custom Elements v1 and Shadow DOM support
@@ -0,0 +1,79 @@
1
+ # Empty State Component
2
+
3
+ The `<snice-empty-state>` component provides a consistent way to display empty or no-data states.
4
+
5
+ ## Basic Usage
6
+
7
+ ```html
8
+ <snice-empty-state
9
+ icon="📭"
10
+ title="No data"
11
+ description="There's nothing here yet"
12
+ ></snice-empty-state>
13
+ ```
14
+
15
+ ## Properties
16
+
17
+ | Property | Type | Default | Description |
18
+ |----------|------|---------|-------------|
19
+ | `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Size variant |
20
+ | `icon` | `string` | `'📭'` | Icon (emoji or text) |
21
+ | `title` | `string` | `'No data'` | Title text |
22
+ | `description` | `string` | `''` | Description text |
23
+ | `actionText` | `string` | `''` | Action button text |
24
+ | `actionHref` | `string` | `''` | Action link URL |
25
+
26
+ ## Events
27
+
28
+ ### `@snice/empty-state-action`
29
+ Fired when action button/link is clicked.
30
+
31
+ ## Examples
32
+
33
+ ### No Search Results
34
+
35
+ ```html
36
+ <snice-empty-state
37
+ icon="🔍"
38
+ title="No results found"
39
+ description="Try adjusting your search criteria"
40
+ action-text="Clear Search"
41
+ ></snice-empty-state>
42
+ ```
43
+
44
+ ### Empty List
45
+
46
+ ```html
47
+ <snice-empty-state
48
+ icon="📦"
49
+ title="No items yet"
50
+ description="Get started by creating your first item"
51
+ action-text="Create Item"
52
+ ></snice-empty-state>
53
+ ```
54
+
55
+ ### 404 Page
56
+
57
+ ```html
58
+ <snice-empty-state
59
+ icon="🤷"
60
+ title="Page not found"
61
+ description="The page you're looking for doesn't exist"
62
+ action-text="Go Home"
63
+ action-href="/"
64
+ ></snice-empty-state>
65
+ ```
66
+
67
+ ### With Custom Content
68
+
69
+ ```html
70
+ <snice-empty-state
71
+ icon="🎨"
72
+ title="No projects"
73
+ >
74
+ <div slot="">
75
+ <button>Create Project</button>
76
+ <button>Import Project</button>
77
+ </div>
78
+ </snice-empty-state>
79
+ ```