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,53 @@
1
+ # snice-switch
2
+
3
+ Toggle switch input for boolean selections.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ checked: boolean = false; // Switch state
9
+ disabled: boolean = false; // Disabled state
10
+ required: boolean = false; // Form required
11
+ invalid: boolean = false; // Invalid state styling
12
+ size: 'small'|'medium'|'large' = 'medium';
13
+ name: string = ''; // Form field name
14
+ value: string = 'on'; // Form field value when checked
15
+ label: string = ''; // Label text
16
+ labelOn: string = ''; // Label shown when on
17
+ labelOff: string = ''; // Label shown when off
18
+ ```
19
+
20
+ ## Methods
21
+
22
+ ```typescript
23
+ toggle() // Toggle switch state
24
+ focus() // Focus the switch
25
+ blur() // Remove focus
26
+ click() // Programmatic click
27
+ ```
28
+
29
+ ## Events
30
+
31
+ ```typescript
32
+ '@snice/switch-change' // { checked, switch }
33
+ ```
34
+
35
+ ## Usage
36
+
37
+ ```html
38
+ <snice-switch label="Enable notifications"></snice-switch>
39
+ ```
40
+
41
+ ```typescript
42
+ switchEl.addEventListener('@snice/switch-change', (e) => {
43
+ console.log(e.detail.checked);
44
+ });
45
+ ```
46
+
47
+ ## CSS Parts
48
+
49
+ ```css
50
+ ::part(track) // Switch track
51
+ ::part(thumb) // Switch thumb
52
+ ::part(label) // Label text
53
+ ```
@@ -0,0 +1,227 @@
1
+ # snice-table, snice-row, snice-column, snice-cell, snice-header
2
+
3
+ Data table with Excel-like formatting, sorting, pagination, and 15 column types.
4
+
5
+ ## snice-table
6
+
7
+ ```typescript
8
+ size: 'small'|'medium'|'large' = 'medium';
9
+ variant: 'default'|'striped'|'bordered' = 'default';
10
+ striped: boolean = false;
11
+ hoverable: boolean = false;
12
+ bordered: boolean = false;
13
+ stickyHeader: boolean = false;
14
+ sortable: boolean = false;
15
+ selectable: boolean = false;
16
+ clickable: boolean = false;
17
+ loading: boolean = false;
18
+ data: any[] = [];
19
+ columns: ColumnDefinition[] = [];
20
+ showSearch: boolean = false;
21
+ showPagination: boolean = false;
22
+ pageSize: number = 10;
23
+ currentPage: number = 1;
24
+ totalItems: number = 0;
25
+ ```
26
+
27
+ **Methods:**
28
+ - `setData(data)` - Set table data
29
+ - `sort(column)` - Sort by column
30
+ - `getSelectedRows()` - Get selected rows
31
+ - `search(query)` - Filter data
32
+ - `goToPage(page)` - Navigate pagination
33
+
34
+ **Events:**
35
+ - `row-click` - {row, index}
36
+ - `row-select` - {row, selected}
37
+ - `sort` - {column, direction}
38
+ - `page-change` - {page, pageSize}
39
+
40
+ ## Column Types
41
+
42
+ 15 specialized column types with formatting options:
43
+
44
+ 1. **text** - Plain text
45
+ 2. **number** - Formatted numbers (decimals, thousands separators, prefix/suffix)
46
+ 3. **date** - Date formatting (short/medium/long/full/custom)
47
+ 4. **boolean** - True/false with symbols or text
48
+ 5. **currency** - Currency formatting with locale and display options
49
+ 6. **percent** - Percentages with trends and colorization
50
+ 7. **rating** - Star ratings with custom symbols
51
+ 8. **progress** - Progress bars with percentage
52
+ 9. **sparkline** - Inline charts (line/bar/area)
53
+ 10. **accounting** - Accounting number format
54
+ 11. **scientific** - Scientific notation
55
+ 12. **fraction** - Fraction display
56
+ 13. **duration** - Time durations
57
+ 14. **filesize** - File size formatting
58
+ 15. **custom** - Custom formatter function
59
+
60
+ ## Column Definition
61
+
62
+ ```typescript
63
+ interface ColumnDefinition {
64
+ key: string;
65
+ label: string;
66
+ type?: ColumnType;
67
+ align?: 'left'|'center'|'right';
68
+ width?: string;
69
+ sortable?: boolean;
70
+ filterable?: boolean;
71
+ formatter?: (value, row) => string;
72
+
73
+ // Excel-like formatting
74
+ numberFormat?: NumberFormat;
75
+ dateFormat?: DateFormat;
76
+ booleanFormat?: BooleanFormat;
77
+ ratingFormat?: RatingFormat;
78
+ progressFormat?: ProgressFormat;
79
+ sparklineFormat?: SparklineFormat;
80
+ percentageFormat?: PercentageFormat;
81
+ currencyFormat?: CurrencyFormat;
82
+
83
+ // Additional formats
84
+ phoneFormat?: PhoneFormat;
85
+ statusFormat?: StatusFormat;
86
+ tagFormat?: TagFormat;
87
+ actionsFormat?: ActionsFormat;
88
+ linkFormat?: LinkFormat;
89
+ colorFormat?: ColorFormat;
90
+ emailFormat?: EmailFormat;
91
+ imageFormat?: ImageFormat;
92
+ jsonFormat?: JsonFormat;
93
+ locationFormat?: LocationFormat;
94
+
95
+ // Cell styling
96
+ style?: CellStyle;
97
+ conditionalFormats?: ConditionalFormat[];
98
+
99
+ // Display options
100
+ wrap?: boolean;
101
+ ellipsis?: boolean;
102
+ tooltip?: boolean | ((value, row) => string);
103
+ }
104
+ ```
105
+
106
+ ## Usage
107
+
108
+ ```html
109
+ <!-- Basic table -->
110
+ <snice-table id="table"></snice-table>
111
+
112
+ <script>
113
+ const table = document.querySelector('#table');
114
+
115
+ table.columns = [
116
+ { key: 'name', label: 'Name', sortable: true },
117
+ { key: 'age', label: 'Age', type: 'number', align: 'right' },
118
+ { key: 'email', label: 'Email' }
119
+ ];
120
+
121
+ table.data = [
122
+ { name: 'John', age: 30, email: 'john@example.com' },
123
+ { name: 'Jane', age: 25, email: 'jane@example.com' }
124
+ ];
125
+ </script>
126
+
127
+ <!-- Striped and hoverable -->
128
+ <snice-table striped hoverable></snice-table>
129
+
130
+ <!-- With sorting and selection -->
131
+ <snice-table sortable selectable></snice-table>
132
+
133
+ <!-- With pagination and search -->
134
+ <snice-table show-pagination show-search page-size="20"></snice-table>
135
+
136
+ <!-- Sticky header -->
137
+ <snice-table sticky-header></snice-table>
138
+
139
+ <!-- Advanced formatting -->
140
+ <script>
141
+ table.columns = [
142
+ {
143
+ key: 'price',
144
+ label: 'Price',
145
+ type: 'currency',
146
+ currencyFormat: { currency: 'USD', decimals: 2 }
147
+ },
148
+ {
149
+ key: 'progress',
150
+ label: 'Progress',
151
+ type: 'progress',
152
+ progressFormat: { max: 100, showPercentage: true }
153
+ },
154
+ {
155
+ key: 'rating',
156
+ label: 'Rating',
157
+ type: 'rating',
158
+ ratingFormat: { max: 5, symbol: '★' }
159
+ },
160
+ {
161
+ key: 'trend',
162
+ label: 'Trend',
163
+ type: 'sparkline',
164
+ sparklineFormat: { type: 'line', color: '#3b82f6' }
165
+ },
166
+ {
167
+ key: 'status',
168
+ label: 'Status',
169
+ type: 'boolean',
170
+ booleanFormat: { trueValue: 'Active', falseValue: 'Inactive', useSymbols: true }
171
+ }
172
+ ];
173
+ </script>
174
+
175
+ <!-- Conditional formatting -->
176
+ <script>
177
+ table.columns = [
178
+ {
179
+ key: 'score',
180
+ label: 'Score',
181
+ type: 'number',
182
+ conditionalFormats: [
183
+ {
184
+ condition: (val) => val >= 90,
185
+ style: { backgroundColor: '#dcfce7', color: '#166534' }
186
+ },
187
+ {
188
+ condition: (val) => val < 60,
189
+ style: { backgroundColor: '#fee2e2', color: '#991b1b' }
190
+ }
191
+ ]
192
+ }
193
+ ];
194
+ </script>
195
+
196
+ <!-- Event handling -->
197
+ <script>
198
+ table.addEventListener('row-click', (e) => {
199
+ console.log('Clicked row:', e.detail.row);
200
+ });
201
+
202
+ table.addEventListener('row-select', (e) => {
203
+ console.log('Selected:', e.detail.selected);
204
+ });
205
+
206
+ table.addEventListener('sort', (e) => {
207
+ console.log('Sort by:', e.detail.column, e.detail.direction);
208
+ });
209
+ </script>
210
+ ```
211
+
212
+ ## Features
213
+
214
+ - 15 specialized column types
215
+ - Excel-like formatting for numbers, dates, currencies
216
+ - Visual formatters (progress bars, ratings, sparklines)
217
+ - Conditional formatting with styles
218
+ - Sorting and filtering
219
+ - Row selection
220
+ - Pagination and search
221
+ - Sticky header
222
+ - Custom cell formatters
223
+ - Tooltips and ellipsis
224
+ - Action buttons in cells
225
+ - 3 sizes and variants
226
+ - Loading state
227
+ - Responsive and accessible
@@ -0,0 +1,83 @@
1
+ # snice-tabs
2
+
3
+ Tabbed interface with container, tab buttons, and content panels.
4
+
5
+ ## Components
6
+
7
+ ### snice-tabs (Container)
8
+
9
+ ```typescript
10
+ selected: number = 0; // Active tab index
11
+ placement: 'top'|'bottom'|'start'|'end' = 'top'; // Tab navigation position
12
+ noScrollControls: boolean = false; // Hide scroll buttons
13
+ transition: string = 'none'; // Panel transition effect
14
+ ```
15
+
16
+ **Methods:**
17
+ ```typescript
18
+ selectTab(index: number) // Select tab by index
19
+ show(index: number) // Alias for selectTab
20
+ getTab(index: number) // Get tab element
21
+ getPanel(index: number) // Get panel element
22
+ ```
23
+
24
+ **Events:**
25
+ ```typescript
26
+ '@snice/tab-change' // { index, oldIndex, tab, panel }
27
+ ```
28
+
29
+ ### snice-tab (Tab Button)
30
+
31
+ ```typescript
32
+ disabled: boolean = false; // Disabled state
33
+ closable: boolean = false; // Show close button
34
+ ```
35
+
36
+ **Methods:**
37
+ ```typescript
38
+ focus() // Focus the tab
39
+ blur() // Remove focus
40
+ ```
41
+
42
+ **Events:**
43
+ ```typescript
44
+ '@snice/tab-select' // { tab }
45
+ '@snice/close' // { tab }
46
+ ```
47
+
48
+ ### snice-tab-panel (Content Panel)
49
+
50
+ ```typescript
51
+ name: string = ''; // Panel identifier
52
+ transitionIn: string = ''; // Transition when showing
53
+ transitionOut: string = ''; // Transition when hiding
54
+ transitioning: 'in'|'out'|'' = ''; // Transition state
55
+ transitionDuration: number = 300; // Transition duration (ms)
56
+ ```
57
+
58
+ ## Usage
59
+
60
+ ```html
61
+ <snice-tabs>
62
+ <snice-tab slot="nav">Tab 1</snice-tab>
63
+ <snice-tab slot="nav">Tab 2</snice-tab>
64
+
65
+ <snice-tab-panel>Content 1</snice-tab-panel>
66
+ <snice-tab-panel>Content 2</snice-tab-panel>
67
+ </snice-tabs>
68
+ ```
69
+
70
+ ```typescript
71
+ tabs.addEventListener('@snice/tab-change', (e) => {
72
+ console.log(e.detail.index);
73
+ });
74
+
75
+ tabs.selectTab(1);
76
+ ```
77
+
78
+ ## Notes
79
+
80
+ - Tabs use `slot="nav"` attribute
81
+ - Panels in default slot
82
+ - Automatically manages ARIA attributes
83
+ - Supports keyboard navigation
@@ -0,0 +1,87 @@
1
+ # snice-textarea
2
+
3
+ Multi-line text input field with auto-grow and character count.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ value: string = '';
9
+ variant: 'outlined'|'filled'|'underlined' = 'outlined';
10
+ size: 'small'|'medium'|'large' = 'medium';
11
+ resize: 'none'|'vertical'|'horizontal'|'both' = 'vertical';
12
+ placeholder: string = '';
13
+ disabled: boolean = false;
14
+ required: boolean = false;
15
+ invalid: boolean = false;
16
+ readonly: boolean = false;
17
+ label: string = '';
18
+ helperText: string = '';
19
+ errorText: string = '';
20
+ rows: number = 3;
21
+ cols: number = -1;
22
+ minlength: number = -1;
23
+ maxlength: number = -1;
24
+ autocomplete: string = '';
25
+ name: string = '';
26
+ autoGrow: boolean = false;
27
+ ```
28
+
29
+ ## Methods
30
+
31
+ - `focus()` - Focus textarea
32
+ - `blur()` - Blur textarea
33
+ - `select()` - Select text
34
+
35
+ ## Events
36
+
37
+ - `input` - {value, textarea}
38
+ - `change` - {value, textarea}
39
+ - `focus` - {textarea}
40
+ - `blur` - {textarea}
41
+
42
+ ## Usage
43
+
44
+ ```html
45
+ <!-- Basic -->
46
+ <snice-textarea label="Comments" placeholder="Enter comments"></snice-textarea>
47
+
48
+ <!-- Variants -->
49
+ <snice-textarea variant="outlined"></snice-textarea>
50
+ <snice-textarea variant="filled"></snice-textarea>
51
+ <snice-textarea variant="underlined"></snice-textarea>
52
+
53
+ <!-- Rows -->
54
+ <snice-textarea rows="5"></snice-textarea>
55
+
56
+ <!-- Auto-grow -->
57
+ <snice-textarea auto-grow></snice-textarea>
58
+
59
+ <!-- Character count -->
60
+ <snice-textarea maxlength="500"></snice-textarea>
61
+
62
+ <!-- Resize options -->
63
+ <snice-textarea resize="none"></snice-textarea>
64
+ <snice-textarea resize="both"></snice-textarea>
65
+
66
+ <!-- Sizes -->
67
+ <snice-textarea size="small"></snice-textarea>
68
+ <snice-textarea size="medium"></snice-textarea>
69
+ <snice-textarea size="large"></snice-textarea>
70
+
71
+ <!-- Helper text -->
72
+ <snice-textarea helper-text="Max 500 characters"></snice-textarea>
73
+
74
+ <!-- Error state -->
75
+ <snice-textarea invalid error-text="Required field"></snice-textarea>
76
+ ```
77
+
78
+ ## Features
79
+
80
+ - Form-associated custom element
81
+ - 3 visual variants
82
+ - Auto-grow height option
83
+ - Character counter
84
+ - Resizable (4 modes)
85
+ - Helper and error text
86
+ - 3 sizes
87
+ - Keyboard accessible
@@ -0,0 +1,77 @@
1
+ # snice-timeline
2
+
3
+ Displays chronological events with markers.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ orientation: 'vertical'|'horizontal' = 'vertical';
9
+ position: 'left'|'right'|'alternate' = 'left';
10
+ items: TimelineItem[] = [];
11
+ reverse: boolean = false;
12
+ ```
13
+
14
+ ## TimelineItem
15
+
16
+ ```typescript
17
+ interface TimelineItem {
18
+ timestamp?: string;
19
+ title: string;
20
+ description?: string;
21
+ icon?: string;
22
+ variant?: 'default'|'success'|'warning'|'error'|'info';
23
+ }
24
+ ```
25
+
26
+ ## Usage
27
+
28
+ ```html
29
+ <!-- Basic --><snice-timeline id="timeline"></snice-timeline>
30
+ <script>
31
+ timeline.items = [{
32
+ timestamp: '2024-01-15',
33
+ title: 'Event',
34
+ description: 'Details'
35
+ }];
36
+ </script>
37
+
38
+ <!-- Vertical positions -->
39
+ <snice-timeline position="left"></snice-timeline>
40
+ <snice-timeline position="right"></snice-timeline>
41
+ <snice-timeline position="alternate"></snice-timeline>
42
+
43
+ <!-- Horizontal -->
44
+ <snice-timeline orientation="horizontal"></snice-timeline>
45
+
46
+ <!-- Variants -->
47
+ <script>
48
+ timeline.items = [
49
+ { title: 'Success', variant: 'success' },
50
+ { title: 'Warning', variant: 'warning' },
51
+ { title: 'Error', variant: 'error' },
52
+ { title: 'Info', variant: 'info' }
53
+ ];
54
+ </script>
55
+
56
+ <!-- Custom icons -->
57
+ <script>
58
+ timeline.items = [
59
+ { title: 'Planning', icon: '📋' },
60
+ { title: 'Development', icon: '💻' },
61
+ { title: 'Launch', icon: '🚀' }
62
+ ];
63
+ </script>
64
+
65
+ <!-- Reversed -->
66
+ <snice-timeline reverse></snice-timeline>
67
+ ```
68
+
69
+ ## Features
70
+
71
+ - Vertical and horizontal orientations
72
+ - Left/right/alternate positioning (vertical)
73
+ - 5 item variants with default icons
74
+ - Custom icons supported
75
+ - Timestamps and descriptions optional
76
+ - Connecting lines between items
77
+ - Reversible order
@@ -0,0 +1,140 @@
1
+ # snice-toast & snice-toast-container
2
+
3
+ Temporary notification system with static API.
4
+
5
+ ## Components
6
+
7
+ ### snice-toast
8
+
9
+ Individual toast notification element.
10
+
11
+ ```typescript
12
+ type: 'success'|'error'|'warning'|'info' = 'info';
13
+ message: string = '';
14
+ closable: boolean = true;
15
+ icon: boolean = true;
16
+ ```
17
+
18
+ **Methods:**
19
+ - `hide()` - Start hide animation
20
+
21
+ ### snice-toast-container
22
+
23
+ Manages and positions multiple toasts.
24
+
25
+ ```typescript
26
+ position: 'top-left'|'top-center'|'top-right'|'bottom-left'|'bottom-center'|'bottom-right' = 'bottom-center';
27
+ ```
28
+
29
+ **Methods:**
30
+ - `show(message, options?)` - Show toast, returns ID
31
+ - `hide(id)` - Hide specific toast
32
+ - `clear()` - Remove all toasts
33
+
34
+ ## Static API (Recommended)
35
+
36
+ ```typescript
37
+ import Toast from 'snice/components/toast/snice-toast-container';
38
+
39
+ // Convenience methods
40
+ Toast.success(message, options?): Promise<string>
41
+ Toast.error(message, options?): Promise<string>
42
+ Toast.warning(message, options?): Promise<string>
43
+ Toast.info(message, options?): Promise<string>
44
+
45
+ // Generic
46
+ Toast.show(message, options?): Promise<string>
47
+
48
+ // Control
49
+ Toast.hide(id): void
50
+ Toast.clear(): void
51
+ ```
52
+
53
+ ## Toast Options
54
+
55
+ ```typescript
56
+ interface ToastOptions {
57
+ type?: 'success'|'error'|'warning'|'info'; // Default: 'info'
58
+ duration?: number; // ms, 0 = no auto-dismiss, default: 4000
59
+ position?: ToastPosition; // Only for static API
60
+ closable?: boolean; // Default: true
61
+ icon?: boolean; // Default: true
62
+ id?: string; // Custom ID, auto-generated if omitted
63
+ }
64
+ ```
65
+
66
+ ## Usage
67
+
68
+ ```typescript
69
+ // Basic
70
+ Toast.success('Saved successfully');
71
+ Toast.error('Failed to load');
72
+ Toast.warning('Low disk space');
73
+ Toast.info('5 new messages');
74
+
75
+ // With options
76
+ Toast.show('Custom', {
77
+ type: 'success',
78
+ duration: 5000,
79
+ position: 'top-right',
80
+ closable: true,
81
+ icon: false
82
+ });
83
+
84
+ // Manual control
85
+ const id = Toast.info('Loading...', { duration: 0 });
86
+ await operation();
87
+ Toast.hide(id);
88
+ Toast.success('Complete');
89
+
90
+ // Clear all
91
+ Toast.clear();
92
+ ```
93
+
94
+ ## Container Usage
95
+
96
+ ```html
97
+ <snice-toast-container position="bottom-center"></snice-toast-container>
98
+ ```
99
+
100
+ ```typescript
101
+ const container = document.querySelector('snice-toast-container');
102
+ const id = container.show('Message', { type: 'success' });
103
+ container.hide(id);
104
+ container.clear();
105
+ ```
106
+
107
+ ## Features
108
+
109
+ - Auto-dismiss after duration (default 4s)
110
+ - 4 types with icons and colors
111
+ - 6 position options
112
+ - Slide in/out animations (300ms)
113
+ - Global container auto-creation
114
+ - Top positions prepend, bottom append
115
+ - Accessibility: role="alert", aria-live="polite"
116
+ - Close button keyboard accessible
117
+
118
+ ## Patterns
119
+
120
+ **Success/Error:**
121
+ ```typescript
122
+ try {
123
+ await action();
124
+ Toast.success('Done');
125
+ } catch (e) {
126
+ Toast.error(e.message);
127
+ }
128
+ ```
129
+
130
+ **Loading:**
131
+ ```typescript
132
+ const id = Toast.info('Loading...', { duration: 0 });
133
+ await fetch();
134
+ Toast.hide(id);
135
+ ```
136
+
137
+ **Persistent:**
138
+ ```typescript
139
+ Toast.show('Manual close only', { duration: 0 });
140
+ ```