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,158 @@
1
+ # snice-kpi
2
+
3
+ Key performance indicator display with value, label, trend, sparkline, and sentiment.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ label: string = '' // Metric label/name
9
+ value: string | number = '' // Main metric value
10
+ trendValue?: string | number // Trend value (e.g., "+12.5%")
11
+ trendData?: number[] // Sparkline data array
12
+ sentiment?: KpiSentiment // 'up' | 'down' | 'neutral'
13
+ size: KpiSize = 'medium' // 'small' | 'medium' | 'large'
14
+ showSparkline: boolean = true // Show sparkline when data provided
15
+ ```
16
+
17
+ ## Usage
18
+
19
+ ```html
20
+ <!-- Basic -->
21
+ <snice-kpi label="Revenue" value="$45,231"></snice-kpi>
22
+
23
+ <!-- With trend -->
24
+ <snice-kpi
25
+ label="Monthly Revenue"
26
+ value="$54,239"
27
+ trend-value="+12.5%"
28
+ sentiment="up">
29
+ </snice-kpi>
30
+
31
+ <!-- With sparkline -->
32
+ <snice-kpi
33
+ id="sales"
34
+ label="Weekly Sales"
35
+ value="$28,450"
36
+ trend-value="+15.3%"
37
+ sentiment="up">
38
+ </snice-kpi>
39
+ <script>
40
+ document.getElementById('sales').trendData = [20, 25, 22, 30, 28, 35, 32];
41
+ </script>
42
+
43
+ <!-- Sentiments -->
44
+ <snice-kpi sentiment="up"></snice-kpi> <!-- Green, ↑ -->
45
+ <snice-kpi sentiment="down"></snice-kpi> <!-- Red, ↓ -->
46
+ <snice-kpi sentiment="neutral"></snice-kpi> <!-- Gray, → -->
47
+
48
+ <!-- Sizes -->
49
+ <snice-kpi size="small"></snice-kpi>
50
+ <snice-kpi size="medium"></snice-kpi>
51
+ <snice-kpi size="large"></snice-kpi>
52
+
53
+ <!-- Without sparkline -->
54
+ <snice-kpi show-sparkline="false"></snice-kpi>
55
+
56
+ <!-- Dashboard grid -->
57
+ <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;">
58
+ <snice-kpi
59
+ id="mrr"
60
+ label="MRR"
61
+ value="$127K"
62
+ trend-value="+22%"
63
+ sentiment="up">
64
+ </snice-kpi>
65
+
66
+ <snice-kpi
67
+ id="users"
68
+ label="Active Users"
69
+ value="2,345"
70
+ trend-value="+8.7%"
71
+ sentiment="up">
72
+ </snice-kpi>
73
+
74
+ <snice-kpi
75
+ id="churn"
76
+ label="Churn"
77
+ value="2.3%"
78
+ trend-value="+0.8%"
79
+ sentiment="down">
80
+ </snice-kpi>
81
+ </div>
82
+ <script>
83
+ document.getElementById('mrr').trendData = [100, 110, 105, 120, 115, 130, 127];
84
+ document.getElementById('users').trendData = [2000, 2100, 2200, 2250, 2300, 2345];
85
+ document.getElementById('churn').trendData = [1.5, 1.8, 2.0, 2.2, 2.1, 2.3];
86
+ </script>
87
+ ```
88
+
89
+ ## CSS Parts
90
+
91
+ ```css
92
+ ::part(container) /* Main container */
93
+ ::part(header) /* Header section */
94
+ ::part(main) /* Main content (label + value) */
95
+ ::part(label) /* Label text */
96
+ ::part(value) /* Value text */
97
+ ::part(trend) /* Trend container */
98
+ ::part(trend-icon) /* Trend icon (↑↓→) */
99
+ ::part(trend-value) /* Trend value text */
100
+ ::part(sparkline) /* Sparkline container */
101
+ ```
102
+
103
+ ## Styling
104
+
105
+ ```css
106
+ --snice-color-background
107
+ --snice-color-border
108
+ --snice-color-text
109
+ --snice-color-text-secondary
110
+ --snice-color-success /* Up sentiment */
111
+ --snice-color-danger /* Down sentiment */
112
+ --snice-spacing-xs
113
+ --snice-spacing-sm
114
+ --snice-spacing-md
115
+ --snice-spacing-lg
116
+ --snice-font-size-xs
117
+ --snice-font-size-sm
118
+ --snice-font-size-md
119
+ --snice-font-size-2xl
120
+ --snice-font-size-3xl
121
+ --snice-font-size-4xl
122
+ --snice-font-weight-medium
123
+ --snice-font-weight-semibold
124
+ --snice-font-weight-bold
125
+ --snice-border-radius-md
126
+ ```
127
+
128
+ ## Common Patterns
129
+
130
+ ```html
131
+ <!-- Financial metrics -->
132
+ <snice-kpi label="Revenue" value="$127K" trend-value="+22%" sentiment="up"></snice-kpi>
133
+ <snice-kpi label="Costs" value="$45K" trend-value="-5%" sentiment="down"></snice-kpi>
134
+ <snice-kpi label="Profit" value="$82K" trend-value="+35%" sentiment="up"></snice-kpi>
135
+
136
+ <!-- User metrics -->
137
+ <snice-kpi label="Total Users" value="12,345" trend-value="+234" sentiment="up"></snice-kpi>
138
+ <snice-kpi label="Active Users" value="8,901" trend-value="+156" sentiment="up"></snice-kpi>
139
+ <snice-kpi label="Churn Rate" value="2.3%" trend-value="+0.2%" sentiment="down"></snice-kpi>
140
+
141
+ <!-- Performance metrics -->
142
+ <snice-kpi label="Response Time" value="245ms" trend-value="-23ms" sentiment="down"></snice-kpi>
143
+ <snice-kpi label="Uptime" value="99.9%" trend-value="±0%" sentiment="neutral"></snice-kpi>
144
+ <snice-kpi label="Error Rate" value="0.12%" trend-value="-0.03%" sentiment="down"></snice-kpi>
145
+
146
+ <!-- Marketing metrics -->
147
+ <snice-kpi label="Conversion Rate" value="3.24%" trend-value="+0.5%" sentiment="up"></snice-kpi>
148
+ <snice-kpi label="CAC" value="$156" trend-value="-$12" sentiment="down"></snice-kpi>
149
+ <snice-kpi label="LTV" value="$1,245" trend-value="+$87" sentiment="up"></snice-kpi>
150
+ ```
151
+
152
+ ## Notes
153
+
154
+ - Sparkline automatically uses sentiment color (success/danger/muted)
155
+ - Sentiment icons: up=↑, down=↓, neutral=→
156
+ - trendData array automatically renders sparkline
157
+ - Value can be string or number for formatting flexibility
158
+ - showSparkline=false hides sparkline even if data provided
@@ -0,0 +1,77 @@
1
+ # snice-link
2
+
3
+ Link component with variants and external link handling.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ href: string = '' // Link URL
9
+ target: LinkTarget = '_self' // '_self' | '_blank' | '_parent' | '_top'
10
+ variant: LinkVariant = 'default' // 'default' | 'primary' | 'secondary' | 'muted'
11
+ disabled: boolean = false // Disable link
12
+ external: boolean = false // Auto _blank + noopener
13
+ underline: boolean = false // Show underline
14
+ hash: boolean = false // Auto prepend # to href (for hash routing)
15
+ ```
16
+
17
+ ## Events
18
+
19
+ ```typescript
20
+ @dispatch('click') // Emitted on click (prevented if disabled)
21
+ @dispatch('navigate') // Emitted on hash link click (for router integration)
22
+ // detail: { href: string }
23
+ // cancelable: true
24
+ ```
25
+
26
+ ## Usage
27
+
28
+ ```html
29
+ <!-- Basic -->
30
+ <snice-link href="/page">Link text</snice-link>
31
+
32
+ <!-- External -->
33
+ <snice-link href="https://example.com" external>External</snice-link>
34
+
35
+ <!-- Variants -->
36
+ <snice-link href="/page" variant="primary">Primary</snice-link>
37
+ <snice-link href="/page" variant="secondary">Secondary</snice-link>
38
+ <snice-link href="/page" variant="muted">Muted</snice-link>
39
+
40
+ <!-- Underlined -->
41
+ <snice-link href="/page" underline>Underlined link</snice-link>
42
+
43
+ <!-- Disabled -->
44
+ <snice-link href="/page" disabled>Disabled</snice-link>
45
+
46
+ <!-- Hash links (for routing) -->
47
+ <snice-link href="home" hash>Home</snice-link>
48
+ <snice-link href="about" hash>About</snice-link>
49
+ <!-- Renders as: <a href="#home">Home</a> -->
50
+
51
+ <!-- Router integration -->
52
+ <snice-link href="profile" hash @navigate="${handleNavigate}">Profile</snice-link>
53
+ <script>
54
+ function handleNavigate(e) {
55
+ console.log('Navigate to:', e.detail.href);
56
+ // e.preventDefault() in the handler will cancel navigation
57
+ }
58
+ </script>
59
+ ```
60
+
61
+ ## CSS Parts
62
+
63
+ ```css
64
+ ::part(link) /* Anchor element */
65
+ ::part(external-icon) /* External icon */
66
+ ```
67
+
68
+ ## Styling
69
+
70
+ ```css
71
+ --snice-color-primary
72
+ --snice-color-primary-dark
73
+ --snice-color-text-secondary
74
+ --snice-color-text
75
+ --snice-color-text-muted
76
+ --snice-color-text-disabled
77
+ ```
@@ -0,0 +1,109 @@
1
+ # snice-login
2
+
3
+ Login form component with username, password, and optional features.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ variant: 'default'|'card'|'minimal' = 'default';
9
+ size: 'small'|'medium'|'large' = 'medium';
10
+ title: string = '';
11
+ disabled: boolean = false;
12
+ loading: boolean = false;
13
+ showRememberMe: boolean = false;
14
+ showForgotPassword: boolean = false;
15
+ actionText: string = 'Login';
16
+ ```
17
+
18
+ ## Methods
19
+
20
+ - `login(credentials)` - Programmatic login, returns {success, error?, data?}
21
+ - `reset()` - Clear form
22
+ - `setError(message)` - Display error message
23
+ - `clearError()` - Clear error message
24
+
25
+ ## Events
26
+
27
+ - `submit` - {username, password, remember}
28
+ - `forgot-password` - User clicked forgot password link
29
+
30
+ ## Usage
31
+
32
+ ```html
33
+ <!-- Basic -->
34
+ <snice-login title="Sign In"></snice-login>
35
+
36
+ <!-- Variants -->
37
+ <snice-login variant="card"></snice-login>
38
+ <snice-login variant="minimal"></snice-login>
39
+
40
+ <!-- With remember me and forgot password -->
41
+ <snice-login show-remember-me show-forgot-password></snice-login>
42
+
43
+ <!-- Custom action text -->
44
+ <snice-login action-text="Sign In"></snice-login>
45
+
46
+ <!-- Loading state -->
47
+ <snice-login loading></snice-login>
48
+
49
+ <!-- Disabled -->
50
+ <snice-login disabled></snice-login>
51
+
52
+ <!-- Sizes -->
53
+ <snice-login size="small"></snice-login>
54
+ <snice-login size="medium"></snice-login>
55
+ <snice-login size="large"></snice-login>
56
+
57
+ <!-- Event handling -->
58
+ <snice-login id="login"></snice-login>
59
+ <script>
60
+ const login = document.querySelector('#login');
61
+
62
+ login.addEventListener('submit', async (e) => {
63
+ const {username, password, remember} = e.detail;
64
+
65
+ login.loading = true;
66
+ const result = await fetch('/api/login', {
67
+ method: 'POST',
68
+ body: JSON.stringify({username, password})
69
+ });
70
+
71
+ if (!result.ok) {
72
+ login.setError('Invalid credentials');
73
+ login.loading = false;
74
+ } else {
75
+ window.location = '/dashboard';
76
+ }
77
+ });
78
+
79
+ login.addEventListener('forgot-password', () => {
80
+ window.location = '/forgot-password';
81
+ });
82
+ </script>
83
+
84
+ <!-- Programmatic login -->
85
+ <script>
86
+ const result = await login.login({
87
+ username: 'user@example.com',
88
+ password: 'password123',
89
+ remember: true
90
+ });
91
+
92
+ if (result.success) {
93
+ console.log('Logged in:', result.data);
94
+ } else {
95
+ console.error('Login failed:', result.error);
96
+ }
97
+ </script>
98
+ ```
99
+
100
+ ## Features
101
+
102
+ - 3 visual variants (default/card/minimal)
103
+ - 3 sizes
104
+ - Optional remember me checkbox
105
+ - Optional forgot password link
106
+ - Loading and disabled states
107
+ - Error message display
108
+ - Programmatic and event-based submission
109
+ - Keyboard accessible (Enter to submit)
@@ -0,0 +1,67 @@
1
+ # snice-modal
2
+
3
+ Dialog overlay with focus trap, backdrop dismiss, and accessibility.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ open: boolean = false; // Visibility state
9
+ size: 'small'|'medium'|'large'|'fullscreen' = 'medium';
10
+ noBackdropDismiss: boolean = false; // Prevent backdrop click close
11
+ noEscapeDismiss: boolean = false; // Prevent Escape key close
12
+ noFocusTrap: boolean = false; // Disable focus trapping
13
+ noCloseButton: boolean = false; // Hide close button
14
+ label: string = ''; // Accessible label
15
+ ```
16
+
17
+ ## Methods
18
+
19
+ ```typescript
20
+ show() // Open modal
21
+ close() // Close modal
22
+ ```
23
+
24
+ ## Events
25
+
26
+ ```typescript
27
+ '@snice/modal-open' // { modal }
28
+ '@snice/modal-close' // { modal }
29
+ ```
30
+
31
+ ## Slots
32
+
33
+ ```html
34
+ <snice-modal>
35
+ <div slot="header">Title</div>
36
+ <div>Body content</div>
37
+ <div slot="footer">Actions</div>
38
+ </snice-modal>
39
+ ```
40
+
41
+ ## Usage
42
+
43
+ ```html
44
+ <snice-modal id="myModal" label="Confirm">
45
+ <div slot="header"><h2>Confirm</h2></div>
46
+ <p>Are you sure?</p>
47
+ <div slot="footer">
48
+ <button onclick="this.closest('snice-modal').close()">Cancel</button>
49
+ <button onclick="this.closest('snice-modal').close()">OK</button>
50
+ </div>
51
+ </snice-modal>
52
+ ```
53
+
54
+ ```typescript
55
+ const modal = document.querySelector('snice-modal');
56
+ modal.show();
57
+ modal.close();
58
+ ```
59
+
60
+ ## Features
61
+
62
+ - Body scroll lock when open
63
+ - Focus trap with Tab navigation
64
+ - Focus restoration on close
65
+ - Backdrop click to close
66
+ - Escape key to close
67
+ - ARIA attributes (role, aria-modal, aria-label, aria-hidden)
@@ -0,0 +1,76 @@
1
+ # snice-nav
2
+
3
+ Navigation menu from placard configurations, integrates with Snice routing.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ variant: 'flat'|'hierarchical'|'grouped' = 'flat';
9
+ orientation: 'horizontal'|'vertical' = 'horizontal';
10
+ isTopLevel: boolean = false; // Receive context updates
11
+ ```
12
+
13
+ ## Methods
14
+
15
+ ```typescript
16
+ update(placards, appContext?, currentRoute?, routeParams?) // Update nav with placard data
17
+ ```
18
+
19
+ ## Placard Structure
20
+
21
+ ```typescript
22
+ interface Placard {
23
+ name: string; // Route identifier
24
+ title: string; // Display text
25
+ icon?: string; // Icon character
26
+ order?: number; // Sort order
27
+ parent?: string; // Parent name (hierarchical)
28
+ group?: string; // Group name (grouped)
29
+ show?: boolean; // Visibility
30
+ description?: string; // Accessible label/tooltip
31
+ tooltip?: string; // Hover tooltip
32
+ hotkeys?: string[]; // Keyboard shortcuts
33
+ helpUrl?: string; // Help URL
34
+ searchTerms?: string[]; // Search keywords
35
+ attributes?: Record<string, any>; // Custom data attributes
36
+ visibleOn?: Function | Function[]; // Visibility guards
37
+ }
38
+ ```
39
+
40
+ ## Usage
41
+
42
+ ```html
43
+ <snice-nav id="nav" variant="flat" orientation="horizontal"></snice-nav>
44
+ ```
45
+
46
+ ```typescript
47
+ const nav = document.querySelector('snice-nav');
48
+ const placards = [
49
+ { name: 'home', title: 'Home', icon: '🏠', order: 0 },
50
+ { name: 'products', title: 'Products', icon: '📦', order: 1 },
51
+ ];
52
+ nav.update(placards, undefined, 'home');
53
+ ```
54
+
55
+ ## Variants
56
+
57
+ - **flat**: Simple list (default)
58
+ - **hierarchical**: Nested with parent-child relationships
59
+ - **grouped**: Organized into labeled groups
60
+
61
+ ## Context Integration
62
+
63
+ ```html
64
+ <snice-nav is-top-level></snice-nav>
65
+ ```
66
+
67
+ Auto-receives placards, routes, and app context from Snice context system.
68
+
69
+ ## Features
70
+
71
+ - Active route tracking with `.nav__link--active` class
72
+ - `aria-current="page"` on active links
73
+ - `role="navigation"` on container
74
+ - Hotkeys via `data-hotkeys` attribute
75
+ - Custom attributes via placard `attributes` property
76
+ - Conditional visibility via `visibleOn` guards
@@ -0,0 +1,55 @@
1
+ # snice-pagination
2
+
3
+ Pagination navigation component.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ current: number = 1; // Active page
9
+ total: number = 1; // Total pages
10
+ siblings: number = 1; // Pages shown each side of current
11
+ showFirst: boolean = true; // Show first button
12
+ showLast: boolean = true; // Show last button
13
+ showPrev: boolean = true; // Show previous button
14
+ showNext: boolean = true; // Show next button
15
+ size: 'small'|'medium'|'large' = 'medium';
16
+ variant: 'default'|'rounded'|'text' = 'default';
17
+ ```
18
+
19
+ ## Methods
20
+
21
+ ```typescript
22
+ goToPage(page: number) // Navigate to page
23
+ nextPage() // Next page
24
+ previousPage() // Previous page
25
+ firstPage() // First page
26
+ lastPage() // Last page
27
+ ```
28
+
29
+ ## Events
30
+
31
+ ```typescript
32
+ '@snice/pagination-change' // { page, previousPage }
33
+ ```
34
+
35
+ ## Usage
36
+
37
+ ```html
38
+ <snice-pagination current="1" total="10"></snice-pagination>
39
+ ```
40
+
41
+ ```typescript
42
+ pagination.addEventListener('@snice/pagination-change', (e) => {
43
+ console.log(e.detail.page);
44
+ });
45
+ ```
46
+
47
+ ## CSS Variables
48
+
49
+ ```css
50
+ --pagination-gap: 4px;
51
+ --pagination-button-size: 32px;
52
+ --pagination-button-padding: 8px;
53
+ --pagination-font-size: 14px;
54
+ --pagination-border-radius: 4px;
55
+ ```
@@ -0,0 +1,72 @@
1
+ # snice-progress
2
+
3
+ Progress indicator with linear or circular display.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ value: number = 0;
9
+ max: number = 100;
10
+ variant: 'linear'|'circular' = 'linear';
11
+ indeterminate: boolean = false;
12
+ size: 'small'|'medium'|'large' = 'medium';
13
+ color: string = '';
14
+ showLabel: boolean = false;
15
+ label: string = '';
16
+ striped: boolean = false;
17
+ animated: boolean = false;
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ```html
23
+ <!-- Basic linear -->
24
+ <snice-progress value="50"></snice-progress>
25
+
26
+ <!-- Circular -->
27
+ <snice-progress variant="circular" value="75"></snice-progress>
28
+
29
+ <!-- Indeterminate (loading) -->
30
+ <snice-progress indeterminate></snice-progress>
31
+ <snice-progress variant="circular" indeterminate></snice-progress>
32
+
33
+ <!-- With label -->
34
+ <snice-progress value="60" show-label></snice-progress>
35
+ <snice-progress value="60" label="Uploading..."></snice-progress>
36
+
37
+ <!-- Custom max -->
38
+ <snice-progress value="3" max="10"></snice-progress>
39
+
40
+ <!-- Striped and animated -->
41
+ <snice-progress value="70" striped></snice-progress>
42
+ <snice-progress value="70" striped animated></snice-progress>
43
+
44
+ <!-- Custom color -->
45
+ <snice-progress value="80" color="#3b82f6"></snice-progress>
46
+
47
+ <!-- Sizes -->
48
+ <snice-progress value="50" size="small"></snice-progress>
49
+ <snice-progress value="50" size="medium"></snice-progress>
50
+ <snice-progress value="50" size="large"></snice-progress>
51
+
52
+ <!-- Dynamic updates -->
53
+ <snice-progress id="prog" value="0"></snice-progress>
54
+ <script>
55
+ const prog = document.querySelector('#prog');
56
+ let val = 0;
57
+ setInterval(() => {
58
+ val = (val + 10) % 100;
59
+ prog.value = val;
60
+ }, 500);
61
+ </script>
62
+ ```
63
+
64
+ ## Features
65
+
66
+ - Linear or circular variant
67
+ - Indeterminate mode for unknown progress
68
+ - Optional percentage label or custom text
69
+ - Striped and animated styles
70
+ - Custom color
71
+ - 3 sizes
72
+ - Reactive value updates
@@ -0,0 +1,79 @@
1
+ # snice-radio
2
+
3
+ Form radio button input with grouping.
4
+
5
+ ## Properties
6
+
7
+ ```typescript
8
+ checked: boolean = false;
9
+ disabled: boolean = false;
10
+ required: boolean = false;
11
+ invalid: boolean = false;
12
+ size: 'small'|'medium'|'large' = 'medium';
13
+ name: string = '';
14
+ value: string = '';
15
+ label: string = '';
16
+ ```
17
+
18
+ ## Methods
19
+
20
+ - `focus()` - Focus radio
21
+ - `blur()` - Blur radio
22
+ - `click()` - Programmatic click
23
+
24
+ ## Events
25
+
26
+ - `change` - {checked, value, radio}
27
+
28
+ ## Usage
29
+
30
+ ```html
31
+ <!-- Basic radio group -->
32
+ <snice-radio name="color" value="red" label="Red"></snice-radio>
33
+ <snice-radio name="color" value="green" label="Green"></snice-radio>
34
+ <snice-radio name="color" value="blue" label="Blue"></snice-radio>
35
+
36
+ <!-- Pre-selected -->
37
+ <snice-radio name="size" value="s" label="Small"></snice-radio>
38
+ <snice-radio name="size" value="m" label="Medium" checked></snice-radio>
39
+ <snice-radio name="size" value="l" label="Large"></snice-radio>
40
+
41
+ <!-- Disabled -->
42
+ <snice-radio label="Unavailable" disabled></snice-radio>
43
+ <snice-radio label="Selected but disabled" checked disabled></snice-radio>
44
+
45
+ <!-- Required -->
46
+ <snice-radio name="accept" value="yes" label="Accept" required></snice-radio>
47
+
48
+ <!-- Invalid -->
49
+ <snice-radio label="Invalid option" invalid></snice-radio>
50
+
51
+ <!-- Sizes -->
52
+ <snice-radio label="Small" size="small"></snice-radio>
53
+ <snice-radio label="Medium" size="medium"></snice-radio>
54
+ <snice-radio label="Large" size="large"></snice-radio>
55
+
56
+ <!-- Form integration -->
57
+ <form>
58
+ <snice-radio name="plan" value="free" label="Free"></snice-radio>
59
+ <snice-radio name="plan" value="pro" label="Pro"></snice-radio>
60
+ <snice-radio name="plan" value="enterprise" label="Enterprise"></snice-radio>
61
+ </form>
62
+
63
+ <!-- Event handling -->
64
+ <snice-radio id="rb" name="opt" value="a"></snice-radio>
65
+ <script>
66
+ document.querySelector('#rb').addEventListener('change', (e) => {
67
+ console.log('Selected:', e.detail.value);
68
+ });
69
+ </script>
70
+ ```
71
+
72
+ ## Features
73
+
74
+ - Form-associated custom element
75
+ - Automatic radio group management by name
76
+ - 3 sizes
77
+ - Keyboard accessible (arrow keys navigate group)
78
+ - Change events
79
+ - Invalid state styling