snice 3.1.0 → 3.3.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 (464) hide show
  1. package/README.md +90 -41
  2. package/dist/components/accordion/snice-accordion-item.d.ts +2 -2
  3. package/dist/components/accordion/snice-accordion-item.js +9 -9
  4. package/dist/components/accordion/snice-accordion-item.js.map +1 -1
  5. package/dist/components/accordion/snice-accordion.d.ts +2 -2
  6. package/dist/components/accordion/snice-accordion.js +9 -9
  7. package/dist/components/accordion/snice-accordion.js.map +1 -1
  8. package/dist/components/actions/snice-actions.d.ts +28 -0
  9. package/dist/components/actions/snice-actions.js +220 -0
  10. package/dist/components/actions/snice-actions.js.map +1 -0
  11. package/dist/components/actions/snice-actions.types.d.ts +27 -0
  12. package/dist/components/alert/snice-alert.d.ts +2 -2
  13. package/dist/components/alert/snice-alert.js +9 -9
  14. package/dist/components/alert/snice-alert.js.map +1 -1
  15. package/dist/components/audio-recorder/snice-audio-recorder.d.ts +58 -0
  16. package/dist/components/audio-recorder/snice-audio-recorder.js +413 -0
  17. package/dist/components/audio-recorder/snice-audio-recorder.js.map +1 -0
  18. package/dist/components/audio-recorder/snice-audio-recorder.types.d.ts +28 -0
  19. package/dist/components/avatar/snice-avatar.d.ts +2 -2
  20. package/dist/components/avatar/snice-avatar.js +9 -9
  21. package/dist/components/avatar/snice-avatar.js.map +1 -1
  22. package/dist/components/badge/snice-badge.d.ts +2 -2
  23. package/dist/components/badge/snice-badge.js +10 -10
  24. package/dist/components/badge/snice-badge.js.map +1 -1
  25. package/dist/components/banner/snice-banner.d.ts +22 -0
  26. package/dist/components/banner/snice-banner.js +180 -0
  27. package/dist/components/banner/snice-banner.js.map +1 -0
  28. package/dist/components/banner/snice-banner.types.d.ts +14 -0
  29. package/dist/components/breadcrumbs/snice-breadcrumbs.d.ts +2 -2
  30. package/dist/components/breadcrumbs/snice-breadcrumbs.js +9 -9
  31. package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -1
  32. package/dist/components/button/snice-button.d.ts +2 -2
  33. package/dist/components/button/snice-button.js +9 -9
  34. package/dist/components/button/snice-button.js.map +1 -1
  35. package/dist/components/calendar/snice-calendar.d.ts +46 -0
  36. package/dist/components/calendar/snice-calendar.js +294 -0
  37. package/dist/components/calendar/snice-calendar.js.map +1 -0
  38. package/dist/components/calendar/snice-calendar.types.d.ts +34 -0
  39. package/dist/components/camera/snice-camera.d.ts +39 -0
  40. package/dist/components/camera/snice-camera.js +286 -0
  41. package/dist/components/camera/snice-camera.js.map +1 -0
  42. package/dist/components/camera/snice-camera.types.d.ts +28 -0
  43. package/dist/components/card/snice-card.d.ts +2 -2
  44. package/dist/components/card/snice-card.js +9 -9
  45. package/dist/components/card/snice-card.js.map +1 -1
  46. package/dist/components/carousel/snice-carousel.d.ts +32 -0
  47. package/dist/components/carousel/snice-carousel.js +279 -0
  48. package/dist/components/carousel/snice-carousel.js.map +1 -0
  49. package/dist/components/carousel/snice-carousel.types.d.ts +22 -0
  50. package/dist/components/chart/snice-chart.d.ts +73 -0
  51. package/dist/components/chart/snice-chart.js +940 -0
  52. package/dist/components/chart/snice-chart.js.map +1 -0
  53. package/dist/components/chart/snice-chart.types.d.ts +71 -0
  54. package/dist/components/chat/snice-chat.d.ts +98 -0
  55. package/dist/components/chat/snice-chat.js +589 -0
  56. package/dist/components/chat/snice-chat.js.map +1 -0
  57. package/dist/components/chat/snice-chat.types.d.ts +141 -0
  58. package/dist/components/checkbox/snice-checkbox.d.ts +2 -2
  59. package/dist/components/checkbox/snice-checkbox.js +9 -9
  60. package/dist/components/checkbox/snice-checkbox.js.map +1 -1
  61. package/dist/components/chip/snice-chip.d.ts +2 -2
  62. package/dist/components/chip/snice-chip.js +9 -9
  63. package/dist/components/chip/snice-chip.js.map +1 -1
  64. package/dist/components/code-block/snice-code-block.d.ts +15 -0
  65. package/dist/components/code-block/snice-code-block.js +141 -0
  66. package/dist/components/code-block/snice-code-block.js.map +1 -0
  67. package/dist/components/code-block/snice-code-block.types.d.ts +15 -0
  68. package/dist/components/color-display/snice-color-display.d.ts +14 -0
  69. package/dist/components/color-display/snice-color-display.js +151 -0
  70. package/dist/components/color-display/snice-color-display.js.map +1 -0
  71. package/dist/components/color-display/snice-color-display.types.d.ts +10 -0
  72. package/dist/components/color-picker/snice-color-picker.d.ts +50 -0
  73. package/dist/components/color-picker/snice-color-picker.js +489 -0
  74. package/dist/components/color-picker/snice-color-picker.js.map +1 -0
  75. package/dist/components/color-picker/snice-color-picker.types.d.ts +19 -0
  76. package/dist/components/command-palette/snice-command-palette.d.ts +47 -0
  77. package/dist/components/command-palette/snice-command-palette.js +428 -0
  78. package/dist/components/command-palette/snice-command-palette.js.map +1 -0
  79. package/dist/components/command-palette/snice-command-palette.types.d.ts +49 -0
  80. package/dist/components/date-picker/snice-date-picker.d.ts +2 -2
  81. package/dist/components/date-picker/snice-date-picker.js +10 -10
  82. package/dist/components/date-picker/snice-date-picker.js.map +1 -1
  83. package/dist/components/divider/snice-divider.d.ts +2 -2
  84. package/dist/components/divider/snice-divider.js +9 -9
  85. package/dist/components/divider/snice-divider.js.map +1 -1
  86. package/dist/components/doc/snice-doc.d.ts +93 -0
  87. package/dist/components/doc/snice-doc.js +626 -0
  88. package/dist/components/doc/snice-doc.js.map +1 -0
  89. package/dist/components/doc/snice-doc.types.d.ts +118 -0
  90. package/dist/components/draw/snice-draw.d.ts +71 -0
  91. package/dist/components/draw/snice-draw.js +709 -0
  92. package/dist/components/draw/snice-draw.js.map +1 -0
  93. package/dist/components/draw/snice-draw.types.d.ts +41 -0
  94. package/dist/components/drawer/snice-drawer.d.ts +2 -2
  95. package/dist/components/drawer/snice-drawer.js +9 -9
  96. package/dist/components/drawer/snice-drawer.js.map +1 -1
  97. package/dist/components/empty-state/snice-empty-state.d.ts +13 -0
  98. package/dist/components/empty-state/snice-empty-state.js +121 -0
  99. package/dist/components/empty-state/snice-empty-state.js.map +1 -0
  100. package/dist/components/empty-state/snice-empty-state.types.d.ts +9 -0
  101. package/dist/components/file-upload/snice-file-upload.d.ts +44 -0
  102. package/dist/components/file-upload/snice-file-upload.js +387 -0
  103. package/dist/components/file-upload/snice-file-upload.js.map +1 -0
  104. package/dist/components/file-upload/snice-file-upload.types.d.ts +22 -0
  105. package/dist/components/gantt/snice-gantt.d.ts +29 -0
  106. package/dist/components/gantt/snice-gantt.js +268 -0
  107. package/dist/components/gantt/snice-gantt.js.map +1 -0
  108. package/dist/components/gantt/snice-gantt.types.d.ts +23 -0
  109. package/dist/components/image/snice-image.d.ts +22 -0
  110. package/dist/components/image/snice-image.js +201 -0
  111. package/dist/components/image/snice-image.js.map +1 -0
  112. package/dist/components/image/snice-image.types.d.ts +17 -0
  113. package/dist/components/input/snice-input.d.ts +2 -2
  114. package/dist/components/input/snice-input.js +9 -9
  115. package/dist/components/input/snice-input.js.map +1 -1
  116. package/dist/components/kanban/snice-kanban.d.ts +31 -0
  117. package/dist/components/kanban/snice-kanban.js +243 -0
  118. package/dist/components/kanban/snice-kanban.js.map +1 -0
  119. package/dist/components/kanban/snice-kanban.types.d.ts +29 -0
  120. package/dist/components/kpi/snice-kpi.d.ts +16 -0
  121. package/dist/components/kpi/snice-kpi.js +162 -0
  122. package/dist/components/kpi/snice-kpi.js.map +1 -0
  123. package/dist/components/kpi/snice-kpi.types.d.ts +12 -0
  124. package/dist/components/layout/snice-layout-blog.d.ts +2 -2
  125. package/dist/components/layout/snice-layout-blog.js +9 -9
  126. package/dist/components/layout/snice-layout-blog.js.map +1 -1
  127. package/dist/components/layout/snice-layout-card.d.ts +2 -2
  128. package/dist/components/layout/snice-layout-card.js +9 -9
  129. package/dist/components/layout/snice-layout-card.js.map +1 -1
  130. package/dist/components/layout/snice-layout-centered.d.ts +2 -2
  131. package/dist/components/layout/snice-layout-centered.js +9 -9
  132. package/dist/components/layout/snice-layout-centered.js.map +1 -1
  133. package/dist/components/layout/snice-layout-dashboard.d.ts +2 -2
  134. package/dist/components/layout/snice-layout-dashboard.js +9 -9
  135. package/dist/components/layout/snice-layout-dashboard.js.map +1 -1
  136. package/dist/components/layout/snice-layout-fullscreen.d.ts +2 -2
  137. package/dist/components/layout/snice-layout-fullscreen.js +9 -9
  138. package/dist/components/layout/snice-layout-fullscreen.js.map +1 -1
  139. package/dist/components/layout/snice-layout-landing.d.ts +2 -2
  140. package/dist/components/layout/snice-layout-landing.js +9 -9
  141. package/dist/components/layout/snice-layout-landing.js.map +1 -1
  142. package/dist/components/layout/snice-layout-minimal.d.ts +2 -2
  143. package/dist/components/layout/snice-layout-minimal.js +9 -9
  144. package/dist/components/layout/snice-layout-minimal.js.map +1 -1
  145. package/dist/components/layout/snice-layout-sidebar.d.ts +2 -2
  146. package/dist/components/layout/snice-layout-sidebar.js +9 -9
  147. package/dist/components/layout/snice-layout-sidebar.js.map +1 -1
  148. package/dist/components/layout/snice-layout-split.d.ts +2 -2
  149. package/dist/components/layout/snice-layout-split.js +9 -9
  150. package/dist/components/layout/snice-layout-split.js.map +1 -1
  151. package/dist/components/layout/snice-layout.d.ts +2 -2
  152. package/dist/components/layout/snice-layout.js +9 -9
  153. package/dist/components/layout/snice-layout.js.map +1 -1
  154. package/dist/components/link/snice-link.d.ts +13 -0
  155. package/dist/components/link/snice-link.js +137 -0
  156. package/dist/components/link/snice-link.js.map +1 -0
  157. package/dist/components/link/snice-link.types.d.ts +11 -0
  158. package/dist/components/list/snice-list-item.d.ts +6 -0
  159. package/dist/components/list/snice-list-item.js +68 -0
  160. package/dist/components/list/snice-list-item.js.map +1 -0
  161. package/dist/components/list/snice-list.d.ts +23 -0
  162. package/dist/components/list/snice-list.js +270 -0
  163. package/dist/components/list/snice-list.js.map +1 -0
  164. package/dist/components/list/snice-list.types.d.ts +28 -0
  165. package/dist/components/location/snice-location.d.ts +35 -0
  166. package/dist/components/location/snice-location.js +238 -0
  167. package/dist/components/location/snice-location.js.map +1 -0
  168. package/dist/components/location/snice-location.types.d.ts +35 -0
  169. package/dist/components/login/snice-login.d.ts +2 -2
  170. package/dist/components/login/snice-login.js +9 -9
  171. package/dist/components/login/snice-login.js.map +1 -1
  172. package/dist/components/menu/snice-menu-divider.d.ts +4 -0
  173. package/dist/components/menu/snice-menu-divider.js +53 -0
  174. package/dist/components/menu/snice-menu-divider.js.map +1 -0
  175. package/dist/components/menu/snice-menu-item.d.ts +10 -0
  176. package/dist/components/menu/snice-menu-item.js +99 -0
  177. package/dist/components/menu/snice-menu-item.js.map +1 -0
  178. package/dist/components/menu/snice-menu-item.types.d.ts +9 -0
  179. package/dist/components/menu/snice-menu.d.ts +27 -0
  180. package/dist/components/menu/snice-menu.js +199 -0
  181. package/dist/components/menu/snice-menu.js.map +1 -0
  182. package/dist/components/menu/snice-menu.types.d.ts +18 -0
  183. package/dist/components/modal/snice-modal.d.ts +2 -2
  184. package/dist/components/modal/snice-modal.js +9 -9
  185. package/dist/components/modal/snice-modal.js.map +1 -1
  186. package/dist/components/nav/snice-nav.js +1 -1
  187. package/dist/components/nav/snice-nav.js.map +1 -1
  188. package/dist/components/pagination/snice-pagination.d.ts +2 -2
  189. package/dist/components/pagination/snice-pagination.js +8 -8
  190. package/dist/components/pagination/snice-pagination.js.map +1 -1
  191. package/dist/components/progress/snice-progress.d.ts +2 -2
  192. package/dist/components/progress/snice-progress.js +9 -9
  193. package/dist/components/progress/snice-progress.js.map +1 -1
  194. package/dist/components/qr-code/qrcode.d.ts +28 -0
  195. package/dist/components/qr-code/qrcode.js +906 -0
  196. package/dist/components/qr-code/qrcode.js.map +1 -0
  197. package/dist/components/qr-code/snice-qr-code.d.ts +35 -0
  198. package/dist/components/qr-code/snice-qr-code.js +256 -0
  199. package/dist/components/qr-code/snice-qr-code.js.map +1 -0
  200. package/dist/components/qr-code/snice-qr-code.types.d.ts +33 -0
  201. package/dist/components/radio/snice-radio.d.ts +2 -2
  202. package/dist/components/radio/snice-radio.js +9 -9
  203. package/dist/components/radio/snice-radio.js.map +1 -1
  204. package/dist/components/select/snice-option.d.ts +2 -2
  205. package/dist/components/select/snice-option.js +8 -8
  206. package/dist/components/select/snice-option.js.map +1 -1
  207. package/dist/components/select/snice-select.d.ts +2 -2
  208. package/dist/components/select/snice-select.js +9 -9
  209. package/dist/components/select/snice-select.js.map +1 -1
  210. package/dist/components/skeleton/snice-skeleton.d.ts +2 -2
  211. package/dist/components/skeleton/snice-skeleton.js +9 -9
  212. package/dist/components/skeleton/snice-skeleton.js.map +1 -1
  213. package/dist/components/slider/snice-slider.d.ts +53 -0
  214. package/dist/components/slider/snice-slider.js +479 -0
  215. package/dist/components/slider/snice-slider.js.map +1 -0
  216. package/dist/components/slider/snice-slider.types.d.ts +26 -0
  217. package/dist/components/snice-cell-C0slgOpe.js +4 -0
  218. package/dist/components/snice-cell-C0slgOpe.js.map +1 -0
  219. package/dist/components/sparkline/snice-sparkline.d.ts +21 -0
  220. package/dist/components/sparkline/snice-sparkline.js +228 -0
  221. package/dist/components/sparkline/snice-sparkline.js.map +1 -0
  222. package/dist/components/sparkline/snice-sparkline.types.d.ts +16 -0
  223. package/dist/components/spinner/snice-spinner.d.ts +10 -0
  224. package/dist/components/spinner/snice-spinner.js +109 -0
  225. package/dist/components/spinner/snice-spinner.js.map +1 -0
  226. package/dist/components/spinner/snice-spinner.types.d.ts +8 -0
  227. package/dist/components/split-pane/snice-split-pane.d.ts +32 -0
  228. package/dist/components/split-pane/snice-split-pane.js +191 -0
  229. package/dist/components/split-pane/snice-split-pane.js.map +1 -0
  230. package/dist/components/split-pane/snice-split-pane.types.d.ts +19 -0
  231. package/dist/components/stat/snice-stat.d.ts +14 -0
  232. package/dist/components/stat/snice-stat.js +140 -0
  233. package/dist/components/stat/snice-stat.js.map +1 -0
  234. package/dist/components/stat/snice-stat.types.d.ts +12 -0
  235. package/dist/components/stepper/snice-stepper-panel.d.ts +8 -0
  236. package/dist/components/stepper/snice-stepper-panel.js +70 -0
  237. package/dist/components/stepper/snice-stepper-panel.js.map +1 -0
  238. package/dist/components/stepper/snice-stepper-panel.types.d.ts +4 -0
  239. package/dist/components/stepper/snice-stepper.d.ts +15 -0
  240. package/dist/components/stepper/snice-stepper.js +163 -0
  241. package/dist/components/stepper/snice-stepper.js.map +1 -0
  242. package/dist/components/stepper/snice-stepper.types.d.ts +13 -0
  243. package/dist/components/switch/snice-switch.d.ts +2 -2
  244. package/dist/components/switch/snice-switch.js +9 -9
  245. package/dist/components/switch/snice-switch.js.map +1 -1
  246. package/dist/components/table/snice-cell-actions.d.ts +2 -2
  247. package/dist/components/table/snice-cell-actions.js +9 -9
  248. package/dist/components/table/snice-cell-actions.js.map +1 -1
  249. package/dist/components/table/snice-cell-boolean.d.ts +2 -2
  250. package/dist/components/table/snice-cell-boolean.js +9 -9
  251. package/dist/components/table/snice-cell-boolean.js.map +1 -1
  252. package/dist/components/table/snice-cell-color.d.ts +2 -2
  253. package/dist/components/table/snice-cell-color.js +9 -9
  254. package/dist/components/table/snice-cell-color.js.map +1 -1
  255. package/dist/components/table/snice-cell-currency.d.ts +2 -2
  256. package/dist/components/table/snice-cell-currency.js +9 -9
  257. package/dist/components/table/snice-cell-currency.js.map +1 -1
  258. package/dist/components/table/snice-cell-date.d.ts +2 -2
  259. package/dist/components/table/snice-cell-date.js +9 -9
  260. package/dist/components/table/snice-cell-date.js.map +1 -1
  261. package/dist/components/table/snice-cell-duration.d.ts +2 -2
  262. package/dist/components/table/snice-cell-duration.js +9 -9
  263. package/dist/components/table/snice-cell-duration.js.map +1 -1
  264. package/dist/components/table/snice-cell-email.d.ts +2 -2
  265. package/dist/components/table/snice-cell-email.js +9 -9
  266. package/dist/components/table/snice-cell-email.js.map +1 -1
  267. package/dist/components/table/snice-cell-filesize.d.ts +2 -2
  268. package/dist/components/table/snice-cell-filesize.js +9 -9
  269. package/dist/components/table/snice-cell-filesize.js.map +1 -1
  270. package/dist/components/table/snice-cell-image.d.ts +2 -2
  271. package/dist/components/table/snice-cell-image.js +9 -9
  272. package/dist/components/table/snice-cell-image.js.map +1 -1
  273. package/dist/components/table/snice-cell-json.d.ts +2 -2
  274. package/dist/components/table/snice-cell-json.js +9 -9
  275. package/dist/components/table/snice-cell-json.js.map +1 -1
  276. package/dist/components/table/snice-cell-link.d.ts +2 -2
  277. package/dist/components/table/snice-cell-link.js +9 -9
  278. package/dist/components/table/snice-cell-link.js.map +1 -1
  279. package/dist/components/table/snice-cell-location.d.ts +2 -2
  280. package/dist/components/table/snice-cell-location.js +9 -9
  281. package/dist/components/table/snice-cell-location.js.map +1 -1
  282. package/dist/components/table/snice-cell-number.d.ts +2 -2
  283. package/dist/components/table/snice-cell-number.js +9 -9
  284. package/dist/components/table/snice-cell-number.js.map +1 -1
  285. package/dist/components/table/snice-cell-percentage.d.ts +2 -2
  286. package/dist/components/table/snice-cell-percentage.js +9 -9
  287. package/dist/components/table/snice-cell-percentage.js.map +1 -1
  288. package/dist/components/table/snice-cell-phone.d.ts +2 -2
  289. package/dist/components/table/snice-cell-phone.js +9 -9
  290. package/dist/components/table/snice-cell-phone.js.map +1 -1
  291. package/dist/components/table/snice-cell-progress.d.ts +2 -2
  292. package/dist/components/table/snice-cell-progress.js +9 -9
  293. package/dist/components/table/snice-cell-progress.js.map +1 -1
  294. package/dist/components/table/snice-cell-rating.d.ts +2 -2
  295. package/dist/components/table/snice-cell-rating.js +9 -9
  296. package/dist/components/table/snice-cell-rating.js.map +1 -1
  297. package/dist/components/table/snice-cell-sparkline.d.ts +2 -2
  298. package/dist/components/table/snice-cell-sparkline.js +9 -9
  299. package/dist/components/table/snice-cell-sparkline.js.map +1 -1
  300. package/dist/components/table/snice-cell-status.d.ts +2 -2
  301. package/dist/components/table/snice-cell-status.js +9 -9
  302. package/dist/components/table/snice-cell-status.js.map +1 -1
  303. package/dist/components/table/snice-cell-tag.d.ts +2 -2
  304. package/dist/components/table/snice-cell-tag.js +9 -9
  305. package/dist/components/table/snice-cell-tag.js.map +1 -1
  306. package/dist/components/table/snice-cell-text.d.ts +2 -2
  307. package/dist/components/table/snice-cell-text.js +9 -9
  308. package/dist/components/table/snice-cell-text.js.map +1 -1
  309. package/dist/components/table/snice-cell.d.ts +2 -2
  310. package/dist/components/table/snice-cell.js +9 -9
  311. package/dist/components/table/snice-cell.js.map +1 -1
  312. package/dist/components/table/snice-column.d.ts +1 -1
  313. package/dist/components/table/snice-column.js +4 -4
  314. package/dist/components/table/snice-column.js.map +1 -1
  315. package/dist/components/table/snice-header.d.ts +2 -2
  316. package/dist/components/table/snice-header.js +9 -9
  317. package/dist/components/table/snice-header.js.map +1 -1
  318. package/dist/components/table/snice-progress.d.ts +2 -2
  319. package/dist/components/table/snice-progress.js +8 -8
  320. package/dist/components/table/snice-progress.js.map +1 -1
  321. package/dist/components/table/snice-rating.d.ts +2 -2
  322. package/dist/components/table/snice-rating.js +8 -8
  323. package/dist/components/table/snice-rating.js.map +1 -1
  324. package/dist/components/table/snice-row.d.ts +2 -2
  325. package/dist/components/table/snice-row.js +10 -10
  326. package/dist/components/table/snice-row.js.map +1 -1
  327. package/dist/components/table/snice-table.d.ts +2 -3
  328. package/dist/components/table/snice-table.js +9 -14
  329. package/dist/components/table/snice-table.js.map +1 -1
  330. package/dist/components/tabs/snice-tab-panel.d.ts +2 -2
  331. package/dist/components/tabs/snice-tab-panel.js +9 -9
  332. package/dist/components/tabs/snice-tab-panel.js.map +1 -1
  333. package/dist/components/tabs/snice-tab.d.ts +2 -2
  334. package/dist/components/tabs/snice-tab.js +9 -9
  335. package/dist/components/tabs/snice-tab.js.map +1 -1
  336. package/dist/components/tabs/snice-tabs.d.ts +2 -2
  337. package/dist/components/tabs/snice-tabs.js +9 -9
  338. package/dist/components/tabs/snice-tabs.js.map +1 -1
  339. package/dist/components/terminal/snice-terminal.types.d.ts +133 -0
  340. package/dist/components/textarea/snice-textarea.d.ts +52 -0
  341. package/dist/components/textarea/snice-textarea.js +407 -0
  342. package/dist/components/textarea/snice-textarea.js.map +1 -0
  343. package/dist/components/textarea/snice-textarea.types.d.ts +30 -0
  344. package/dist/components/timeline/snice-timeline.d.ts +11 -0
  345. package/dist/components/timeline/snice-timeline.js +112 -0
  346. package/dist/components/timeline/snice-timeline.js.map +1 -0
  347. package/dist/components/timeline/snice-timeline.types.d.ts +16 -0
  348. package/dist/components/toast/snice-toast-container.d.ts +2 -2
  349. package/dist/components/toast/snice-toast-container.js +8 -8
  350. package/dist/components/toast/snice-toast-container.js.map +1 -1
  351. package/dist/components/toast/snice-toast.d.ts +2 -2
  352. package/dist/components/toast/snice-toast.js +8 -8
  353. package/dist/components/toast/snice-toast.js.map +1 -1
  354. package/dist/components/tooltip/snice-tooltip.d.ts +2 -2
  355. package/dist/components/tooltip/snice-tooltip.js +10 -10
  356. package/dist/components/tooltip/snice-tooltip.js.map +1 -1
  357. package/dist/components/tree/snice-tree-item.d.ts +35 -0
  358. package/dist/components/tree/snice-tree-item.js +301 -0
  359. package/dist/components/tree/snice-tree-item.js.map +1 -0
  360. package/dist/components/tree/snice-tree-item.types.d.ts +30 -0
  361. package/dist/components/tree/snice-tree.d.ts +45 -0
  362. package/dist/components/tree/snice-tree.js +390 -0
  363. package/dist/components/tree/snice-tree.js.map +1 -0
  364. package/dist/components/tree/snice-tree.types.d.ts +65 -0
  365. package/dist/components/virtual-scroller/snice-virtual-scroller.d.ts +31 -0
  366. package/dist/components/virtual-scroller/snice-virtual-scroller.js +160 -0
  367. package/dist/components/virtual-scroller/snice-virtual-scroller.js.map +1 -0
  368. package/dist/components/virtual-scroller/snice-virtual-scroller.types.d.ts +19 -0
  369. package/dist/index.cjs +125 -158
  370. package/dist/index.cjs.map +1 -1
  371. package/dist/index.esm.js +125 -158
  372. package/dist/index.esm.js.map +1 -1
  373. package/dist/index.iife.js +125 -158
  374. package/dist/index.iife.js.map +1 -1
  375. package/dist/parts.d.ts +13 -16
  376. package/dist/symbols.cjs +1 -1
  377. package/dist/symbols.esm.js +1 -1
  378. package/dist/template.d.ts +0 -1
  379. package/dist/transitions.cjs +1 -1
  380. package/dist/transitions.esm.js +1 -1
  381. package/docs/ai/README.md +10 -1
  382. package/docs/ai/components/actions.md +81 -0
  383. package/docs/ai/components/audio-recorder.md +97 -0
  384. package/docs/ai/components/banner.md +84 -0
  385. package/docs/ai/components/calendar.md +95 -0
  386. package/docs/ai/components/camera.md +130 -0
  387. package/docs/ai/components/carousel.md +49 -0
  388. package/docs/ai/components/chart.md +160 -0
  389. package/docs/ai/components/chat.md +189 -0
  390. package/docs/ai/components/code-block.md +32 -0
  391. package/docs/ai/components/color-display.md +48 -0
  392. package/docs/ai/components/color-picker.md +75 -0
  393. package/docs/ai/components/command-palette.md +117 -0
  394. package/docs/ai/components/doc.md +154 -0
  395. package/docs/ai/components/draw.md +140 -0
  396. package/docs/ai/components/empty-state.md +72 -0
  397. package/docs/ai/components/file-upload.md +93 -0
  398. package/docs/ai/components/gantt.md +95 -0
  399. package/docs/ai/components/image.md +60 -0
  400. package/docs/ai/components/kanban.md +102 -0
  401. package/docs/ai/components/kpi.md +158 -0
  402. package/docs/ai/components/layout.md +261 -0
  403. package/docs/ai/components/link.md +77 -0
  404. package/docs/ai/components/list.md +50 -0
  405. package/docs/ai/components/location.md +75 -0
  406. package/docs/ai/components/menu.md +114 -0
  407. package/docs/ai/components/popover.md +70 -0
  408. package/docs/ai/components/qr-code.md +106 -0
  409. package/docs/ai/components/slider.md +87 -0
  410. package/docs/ai/components/sparkline.md +168 -0
  411. package/docs/ai/components/spinner.md +47 -0
  412. package/docs/ai/components/split-pane.md +71 -0
  413. package/docs/ai/components/stat.md +29 -0
  414. package/docs/ai/components/stepper.md +216 -0
  415. package/docs/ai/components/textarea.md +87 -0
  416. package/docs/ai/components/timeline.md +77 -0
  417. package/docs/ai/components/tree.md +191 -0
  418. package/docs/ai/components/virtual-scroller.md +71 -0
  419. package/docs/components/actions.md +317 -0
  420. package/docs/components/alert.md +540 -0
  421. package/docs/components/audio-recorder.md +152 -0
  422. package/docs/components/badge.md +593 -0
  423. package/docs/components/banner.md +106 -0
  424. package/docs/components/breadcrumbs.md +568 -0
  425. package/docs/components/button.md +648 -0
  426. package/docs/components/calendar.md +397 -0
  427. package/docs/components/camera.md +383 -0
  428. package/docs/components/card.md +778 -0
  429. package/docs/components/carousel.md +63 -0
  430. package/docs/components/chart.md +526 -0
  431. package/docs/components/chat.md +482 -0
  432. package/docs/components/checkbox.md +714 -0
  433. package/docs/components/chip.md +670 -0
  434. package/docs/components/code-block.md +49 -0
  435. package/docs/components/color-display.md +96 -0
  436. package/docs/components/color-picker.md +81 -0
  437. package/docs/components/command-palette.md +159 -0
  438. package/docs/components/doc.md +357 -0
  439. package/docs/components/draw.md +307 -0
  440. package/docs/components/empty-state.md +79 -0
  441. package/docs/components/file-upload.md +263 -0
  442. package/docs/components/gantt.md +347 -0
  443. package/docs/components/image.md +110 -0
  444. package/docs/components/kanban.md +410 -0
  445. package/docs/components/kpi.md +251 -0
  446. package/docs/components/link.md +229 -0
  447. package/docs/components/list.md +65 -0
  448. package/docs/components/location.md +369 -0
  449. package/docs/components/menu.md +633 -0
  450. package/docs/components/popover.md +333 -0
  451. package/docs/components/qr-code.md +464 -0
  452. package/docs/components/slider.md +297 -0
  453. package/docs/components/sparkline.md +293 -0
  454. package/docs/components/spinner.md +63 -0
  455. package/docs/components/split-pane.md +315 -0
  456. package/docs/components/stat.md +45 -0
  457. package/docs/components/stepper.md +410 -0
  458. package/docs/components/textarea.md +235 -0
  459. package/docs/components/timeline.md +192 -0
  460. package/docs/components/tree.md +536 -0
  461. package/docs/components/virtual-scroller.md +298 -0
  462. package/package.json +2 -1
  463. package/dist/components/snice-cell-BLFVdxPp.js +0 -4
  464. package/dist/components/snice-cell-BLFVdxPp.js.map +0 -1
@@ -0,0 +1,633 @@
1
+ # Menu Components
2
+
3
+ The menu components provide dropdown menus with customizable triggers, placement options, and support for icons and keyboard shortcuts. A `<snice-menu>` container manages `<snice-menu-item>` elements and `<snice-menu-divider>` separators.
4
+
5
+ ## Table of Contents
6
+ - [Basic Usage](#basic-usage)
7
+ - [Components](#components)
8
+ - [Properties](#properties)
9
+ - [Methods](#methods)
10
+ - [Events](#events)
11
+ - [Slots](#slots)
12
+ - [Examples](#examples)
13
+
14
+ ## Basic Usage
15
+
16
+ ```html
17
+ <snice-menu>
18
+ <button slot="trigger">Open Menu</button>
19
+ <snice-menu-item value="new">New File</snice-menu-item>
20
+ <snice-menu-item value="open">Open...</snice-menu-item>
21
+ <snice-menu-divider></snice-menu-divider>
22
+ <snice-menu-item value="save">Save</snice-menu-item>
23
+ </snice-menu>
24
+ ```
25
+
26
+ ```typescript
27
+ import 'snice/components/menu/snice-menu';
28
+ import 'snice/components/menu/snice-menu-item';
29
+ import 'snice/components/menu/snice-menu-divider';
30
+ ```
31
+
32
+ ## Components
33
+
34
+ ### `<snice-menu>`
35
+ Container element that manages the menu panel and trigger behavior.
36
+
37
+ ### `<snice-menu-item>`
38
+ Individual menu item that can be selected.
39
+
40
+ ### `<snice-menu-divider>`
41
+ Visual separator between menu items.
42
+
43
+ ## Properties
44
+
45
+ ### Menu Container
46
+
47
+ | Property | Type | Default | Description |
48
+ |----------|------|---------|-------------|
49
+ | `open` | `boolean` | `false` | Whether the menu is open |
50
+ | `placement` | `'bottom-start' \| 'bottom-end' \| 'top-start' \| 'top-end' \| 'right-start' \| 'right-end' \| 'left-start' \| 'left-end'` | `'bottom-start'` | Menu panel placement relative to trigger |
51
+ | `trigger` | `'click' \| 'hover' \| 'manual'` | `'click'` | How the menu is triggered |
52
+ | `closeOnSelect` | `boolean` | `true` | Whether to close menu when item is selected |
53
+ | `distance` | `number` | `4` | Distance (in pixels) from trigger to panel |
54
+
55
+ ### Menu Item
56
+
57
+ | Property | Type | Default | Description |
58
+ |----------|------|---------|-------------|
59
+ | `value` | `string` | `''` | Value associated with the menu item |
60
+ | `disabled` | `boolean` | `false` | Disable interaction with the item |
61
+ | `selected` | `boolean` | `false` | Whether the item is selected |
62
+
63
+ ## Methods
64
+
65
+ ### Menu Container Methods
66
+
67
+ #### `openMenu(): void`
68
+ Open the menu panel.
69
+
70
+ ```typescript
71
+ menu.openMenu();
72
+ ```
73
+
74
+ #### `closeMenu(): void`
75
+ Close the menu panel.
76
+
77
+ ```typescript
78
+ menu.closeMenu();
79
+ ```
80
+
81
+ #### `toggleMenu(): void`
82
+ Toggle the menu open/closed state.
83
+
84
+ ```typescript
85
+ menu.toggleMenu();
86
+ ```
87
+
88
+ ## Events
89
+
90
+ ### Container Events
91
+
92
+ #### `@snice/menu-open`
93
+ Fired when the menu is opened.
94
+
95
+ **Event Detail:**
96
+ ```typescript
97
+ {
98
+ menu: SniceMenuElement;
99
+ }
100
+ ```
101
+
102
+ **Usage:**
103
+ ```typescript
104
+ menu.addEventListener('@snice/menu-open', (e) => {
105
+ console.log('Menu opened');
106
+ });
107
+ ```
108
+
109
+ #### `@snice/menu-close`
110
+ Fired when the menu is closed.
111
+
112
+ **Event Detail:**
113
+ ```typescript
114
+ {
115
+ menu: SniceMenuElement;
116
+ }
117
+ ```
118
+
119
+ ### Item Events
120
+
121
+ #### `@snice/menu-item-select`
122
+ Fired when a menu item is selected.
123
+
124
+ **Event Detail:**
125
+ ```typescript
126
+ {
127
+ item: SniceMenuItemElement;
128
+ value: string;
129
+ }
130
+ ```
131
+
132
+ **Usage:**
133
+ ```typescript
134
+ menu.addEventListener('@snice/menu-item-select', (e) => {
135
+ console.log('Selected item:', e.detail.value);
136
+ });
137
+ ```
138
+
139
+ ## Slots
140
+
141
+ ### Menu Slots
142
+
143
+ #### `trigger` (named slot)
144
+ Element that triggers the menu (required).
145
+
146
+ ```html
147
+ <snice-menu>
148
+ <button slot="trigger">Click me</button>
149
+ <!-- menu items -->
150
+ </snice-menu>
151
+ ```
152
+
153
+ #### `image-left` (named slot)
154
+ Image or icon to display before the trigger content.
155
+
156
+ ```html
157
+ <snice-menu>
158
+ <img slot="image-left" src="avatar.jpg" alt="User">
159
+ <span slot="trigger">User Menu</span>
160
+ <!-- menu items -->
161
+ </snice-menu>
162
+ ```
163
+
164
+ #### `image-right` (named slot)
165
+ Image or icon to display after the trigger content.
166
+
167
+ ```html
168
+ <snice-menu>
169
+ <span slot="trigger">Settings</span>
170
+ <img slot="image-right" src="icon.svg" alt="">
171
+ <!-- menu items -->
172
+ </snice-menu>
173
+ ```
174
+
175
+ #### Default slot
176
+ Menu items and dividers.
177
+
178
+ ### Menu Item Slots
179
+
180
+ #### `icon` (named slot)
181
+ Icon displayed before the item label.
182
+
183
+ ```html
184
+ <snice-menu-item value="save">
185
+ <span slot="icon">💾</span>
186
+ Save
187
+ </snice-menu-item>
188
+ ```
189
+
190
+ #### Default slot
191
+ The item label/content.
192
+
193
+ #### `shortcut` (named slot)
194
+ Keyboard shortcut hint displayed after the label.
195
+
196
+ ```html
197
+ <snice-menu-item value="save">
198
+ Save
199
+ <span slot="shortcut">⌘S</span>
200
+ </snice-menu-item>
201
+ ```
202
+
203
+ ## Examples
204
+
205
+ ### Basic Menu
206
+
207
+ ```html
208
+ <snice-menu>
209
+ <button slot="trigger">File</button>
210
+ <snice-menu-item value="new">New</snice-menu-item>
211
+ <snice-menu-item value="open">Open</snice-menu-item>
212
+ <snice-menu-item value="save">Save</snice-menu-item>
213
+ <snice-menu-divider></snice-menu-divider>
214
+ <snice-menu-item value="exit">Exit</snice-menu-item>
215
+ </snice-menu>
216
+ ```
217
+
218
+ ### Menu with Icons and Shortcuts
219
+
220
+ ```html
221
+ <snice-menu>
222
+ <button slot="trigger">Edit</button>
223
+
224
+ <snice-menu-item value="undo">
225
+ <span slot="icon">↩️</span>
226
+ Undo
227
+ <span slot="shortcut">⌘Z</span>
228
+ </snice-menu-item>
229
+
230
+ <snice-menu-item value="redo">
231
+ <span slot="icon">↪️</span>
232
+ Redo
233
+ <span slot="shortcut">⌘⇧Z</span>
234
+ </snice-menu-item>
235
+
236
+ <snice-menu-divider></snice-menu-divider>
237
+
238
+ <snice-menu-item value="cut">
239
+ <span slot="icon">✂️</span>
240
+ Cut
241
+ <span slot="shortcut">⌘X</span>
242
+ </snice-menu-item>
243
+
244
+ <snice-menu-item value="copy">
245
+ <span slot="icon">📋</span>
246
+ Copy
247
+ <span slot="shortcut">⌘C</span>
248
+ </snice-menu-item>
249
+
250
+ <snice-menu-item value="paste">
251
+ <span slot="icon">📄</span>
252
+ Paste
253
+ <span slot="shortcut">⌘V</span>
254
+ </snice-menu-item>
255
+ </snice-menu>
256
+ ```
257
+
258
+ ### Different Placements
259
+
260
+ ```html
261
+ <!-- Bottom start (default) -->
262
+ <snice-menu placement="bottom-start">
263
+ <button slot="trigger">Bottom Start</button>
264
+ <snice-menu-item value="1">Option 1</snice-menu-item>
265
+ <snice-menu-item value="2">Option 2</snice-menu-item>
266
+ </snice-menu>
267
+
268
+ <!-- Bottom end -->
269
+ <snice-menu placement="bottom-end">
270
+ <button slot="trigger">Bottom End</button>
271
+ <snice-menu-item value="1">Option 1</snice-menu-item>
272
+ <snice-menu-item value="2">Option 2</snice-menu-item>
273
+ </snice-menu>
274
+
275
+ <!-- Top start -->
276
+ <snice-menu placement="top-start">
277
+ <button slot="trigger">Top Start</button>
278
+ <snice-menu-item value="1">Option 1</snice-menu-item>
279
+ <snice-menu-item value="2">Option 2</snice-menu-item>
280
+ </snice-menu>
281
+
282
+ <!-- Right side -->
283
+ <snice-menu placement="right-start">
284
+ <button slot="trigger">Right</button>
285
+ <snice-menu-item value="1">Option 1</snice-menu-item>
286
+ <snice-menu-item value="2">Option 2</snice-menu-item>
287
+ </snice-menu>
288
+ ```
289
+
290
+ ### Hover Trigger
291
+
292
+ ```html
293
+ <snice-menu trigger="hover">
294
+ <button slot="trigger">Hover Me</button>
295
+ <snice-menu-item value="quick1">Quick Action 1</snice-menu-item>
296
+ <snice-menu-item value="quick2">Quick Action 2</snice-menu-item>
297
+ <snice-menu-item value="quick3">Quick Action 3</snice-menu-item>
298
+ </snice-menu>
299
+ ```
300
+
301
+ ### Manual Control
302
+
303
+ ```html
304
+ <snice-menu id="manual-menu" trigger="manual">
305
+ <button slot="trigger">Manual Menu</button>
306
+ <snice-menu-item value="1">Option 1</snice-menu-item>
307
+ <snice-menu-item value="2">Option 2</snice-menu-item>
308
+ </snice-menu>
309
+
310
+ <button onclick="document.getElementById('manual-menu').openMenu()">
311
+ Open Menu
312
+ </button>
313
+ ```
314
+
315
+ ### Disabled Items
316
+
317
+ ```html
318
+ <snice-menu>
319
+ <button slot="trigger">Actions</button>
320
+ <snice-menu-item value="edit">Edit</snice-menu-item>
321
+ <snice-menu-item value="delete" disabled>Delete (disabled)</snice-menu-item>
322
+ <snice-menu-item value="share">Share</snice-menu-item>
323
+ </snice-menu>
324
+ ```
325
+
326
+ ### Keep Open on Select
327
+
328
+ ```html
329
+ <snice-menu id="multi-menu" close-on-select="false">
330
+ <button slot="trigger">Multi-Select</button>
331
+ <snice-menu-item value="option1">Option 1</snice-menu-item>
332
+ <snice-menu-item value="option2">Option 2</snice-menu-item>
333
+ <snice-menu-item value="option3">Option 3</snice-menu-item>
334
+ <snice-menu-divider></snice-menu-divider>
335
+ <snice-menu-item value="done">Done</snice-menu-item>
336
+ </snice-menu>
337
+
338
+ <script type="module">
339
+ const menu = document.getElementById('multi-menu');
340
+ menu.addEventListener('@snice/menu-item-select', (e) => {
341
+ if (e.detail.value === 'done') {
342
+ menu.closeMenu();
343
+ }
344
+ });
345
+ </script>
346
+ ```
347
+
348
+ ### User Profile Menu
349
+
350
+ ```html
351
+ <snice-menu placement="bottom-end">
352
+ <img slot="image-left"
353
+ src="https://via.placeholder.com/32"
354
+ alt="User avatar"
355
+ style="width: 32px; height: 32px; border-radius: 50%;">
356
+ <span slot="trigger">John Doe</span>
357
+
358
+ <snice-menu-item value="profile">
359
+ <span slot="icon">👤</span>
360
+ View Profile
361
+ </snice-menu-item>
362
+
363
+ <snice-menu-item value="settings">
364
+ <span slot="icon">⚙️</span>
365
+ Settings
366
+ </snice-menu-item>
367
+
368
+ <snice-menu-item value="billing">
369
+ <span slot="icon">💳</span>
370
+ Billing
371
+ </snice-menu-item>
372
+
373
+ <snice-menu-divider></snice-menu-divider>
374
+
375
+ <snice-menu-item value="help">
376
+ <span slot="icon">❓</span>
377
+ Help & Support
378
+ </snice-menu-item>
379
+
380
+ <snice-menu-divider></snice-menu-divider>
381
+
382
+ <snice-menu-item value="logout">
383
+ <span slot="icon">🚪</span>
384
+ Log Out
385
+ </snice-menu-item>
386
+ </snice-menu>
387
+ ```
388
+
389
+ ### Context Menu
390
+
391
+ ```html
392
+ <div id="content" style="padding: 2rem; border: 1px solid #ccc;">
393
+ Right-click me for context menu
394
+ </div>
395
+
396
+ <snice-menu id="context-menu" trigger="manual">
397
+ <div slot="trigger" style="display: none;"></div>
398
+
399
+ <snice-menu-item value="copy">Copy</snice-menu-item>
400
+ <snice-menu-item value="paste">Paste</snice-menu-item>
401
+ <snice-menu-divider></snice-menu-divider>
402
+ <snice-menu-item value="delete">Delete</snice-menu-item>
403
+ </snice-menu>
404
+
405
+ <script type="module">
406
+ const content = document.getElementById('content');
407
+ const menu = document.getElementById('context-menu');
408
+
409
+ content.addEventListener('contextmenu', (e) => {
410
+ e.preventDefault();
411
+
412
+ // Position menu at cursor
413
+ menu.style.position = 'fixed';
414
+ menu.style.left = e.clientX + 'px';
415
+ menu.style.top = e.clientY + 'px';
416
+
417
+ menu.openMenu();
418
+ });
419
+
420
+ menu.addEventListener('@snice/menu-item-select', (e) => {
421
+ console.log('Context action:', e.detail.value);
422
+ });
423
+ </script>
424
+ ```
425
+
426
+ ### With Event Handling
427
+
428
+ ```typescript
429
+ import type { SniceMenuElement } from 'snice/components/menu/snice-menu.types';
430
+
431
+ const menu = document.querySelector<SniceMenuElement>('snice-menu');
432
+
433
+ menu.addEventListener('@snice/menu-open', () => {
434
+ console.log('Menu opened');
435
+ // Load dynamic content, track analytics, etc.
436
+ });
437
+
438
+ menu.addEventListener('@snice/menu-close', () => {
439
+ console.log('Menu closed');
440
+ });
441
+
442
+ menu.addEventListener('@snice/menu-item-select', (e) => {
443
+ console.log('Selected:', e.detail.value);
444
+
445
+ switch (e.detail.value) {
446
+ case 'save':
447
+ saveDocument();
448
+ break;
449
+ case 'export':
450
+ exportData();
451
+ break;
452
+ case 'delete':
453
+ confirmDelete();
454
+ break;
455
+ }
456
+ });
457
+ ```
458
+
459
+ ### Dynamic Menu Items
460
+
461
+ ```html
462
+ <snice-menu id="dynamic-menu">
463
+ <button slot="trigger">Recent Files</button>
464
+ <!-- Items populated dynamically -->
465
+ </snice-menu>
466
+
467
+ <script type="module">
468
+ import 'snice/components/menu/snice-menu';
469
+ import 'snice/components/menu/snice-menu-item';
470
+
471
+ const menu = document.getElementById('dynamic-menu');
472
+
473
+ // Load recent files
474
+ const recentFiles = await fetch('/api/recent-files').then(r => r.json());
475
+
476
+ recentFiles.forEach((file, index) => {
477
+ const item = document.createElement('snice-menu-item');
478
+ item.value = file.id;
479
+ item.textContent = file.name;
480
+
481
+ const shortcut = document.createElement('span');
482
+ shortcut.slot = 'shortcut';
483
+ shortcut.textContent = `⌘${index + 1}`;
484
+ item.appendChild(shortcut);
485
+
486
+ menu.appendChild(item);
487
+ });
488
+
489
+ menu.addEventListener('@snice/menu-item-select', (e) => {
490
+ openFile(e.detail.value);
491
+ });
492
+ </script>
493
+ ```
494
+
495
+ ### Nested Menu Actions
496
+
497
+ ```html
498
+ <snice-menu>
499
+ <button slot="trigger">Actions</button>
500
+
501
+ <snice-menu-item value="new">
502
+ <span slot="icon">📄</span>
503
+ New Document
504
+ </snice-menu-item>
505
+
506
+ <snice-menu-item value="import">
507
+ <span slot="icon">📥</span>
508
+ Import
509
+ </snice-menu-item>
510
+
511
+ <snice-menu-item value="export">
512
+ <span slot="icon">📤</span>
513
+ Export
514
+ </snice-menu-item>
515
+
516
+ <snice-menu-divider></snice-menu-divider>
517
+
518
+ <snice-menu-item value="share">
519
+ <span slot="icon">🔗</span>
520
+ Share
521
+ </snice-menu-item>
522
+
523
+ <snice-menu-item value="permissions">
524
+ <span slot="icon">🔒</span>
525
+ Permissions
526
+ </snice-menu-item>
527
+
528
+ <snice-menu-divider></snice-menu-divider>
529
+
530
+ <snice-menu-item value="archive">
531
+ <span slot="icon">📦</span>
532
+ Archive
533
+ </snice-menu-item>
534
+
535
+ <snice-menu-item value="delete">
536
+ <span slot="icon">🗑️</span>
537
+ Delete
538
+ </snice-menu-item>
539
+ </snice-menu>
540
+ ```
541
+
542
+ ### Styled Menu
543
+
544
+ ```html
545
+ <style>
546
+ #styled-menu::part(panel) {
547
+ border-radius: 12px;
548
+ box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1);
549
+ min-width: 200px;
550
+ }
551
+
552
+ #styled-menu::part(trigger) {
553
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
554
+ color: white;
555
+ border: none;
556
+ padding: 10px 20px;
557
+ border-radius: 8px;
558
+ font-weight: 600;
559
+ }
560
+ </style>
561
+
562
+ <snice-menu id="styled-menu">
563
+ <button slot="trigger">Styled Menu</button>
564
+ <snice-menu-item value="1">Option 1</snice-menu-item>
565
+ <snice-menu-item value="2">Option 2</snice-menu-item>
566
+ <snice-menu-item value="3">Option 3</snice-menu-item>
567
+ </snice-menu>
568
+ ```
569
+
570
+ ## Accessibility
571
+
572
+ - **ARIA roles**: `menu` role on panel, `menuitem` role on items
573
+ - **Keyboard support**: Click and keyboard activation of trigger
574
+ - **Screen reader friendly**: Proper aria attributes
575
+ - **Focus management**: Focus returns to trigger when closed
576
+ - **Disabled state**: Items can be disabled with proper aria-disabled
577
+
578
+ ## Browser Support
579
+
580
+ - Modern browsers (Chrome, Firefox, Safari, Edge)
581
+ - Requires Custom Elements v1 and Shadow DOM support
582
+
583
+ ## Best Practices
584
+
585
+ 1. **Use meaningful values**: Set descriptive `value` attributes on menu items
586
+ 2. **Group related items**: Use dividers to separate logical groups
587
+ 3. **Keep menus concise**: Limit to 7-10 items per menu for usability
588
+ 4. **Use icons sparingly**: Icons should enhance, not clutter
589
+ 5. **Position appropriately**: Choose placement based on trigger location
590
+ 6. **Handle outside clicks**: Menu automatically closes on outside click
591
+ 7. **Provide keyboard shortcuts**: Show shortcuts in the menu when available
592
+ 8. **Test on mobile**: Ensure touch interactions work well
593
+ 9. **Consider hover carefully**: Hover trigger may not work well on touch devices
594
+ 10. **Close after action**: Use `closeOnSelect` for single-action menus
595
+
596
+ ## Common Patterns
597
+
598
+ ### File Menu Pattern
599
+ ```html
600
+ <snice-menu>
601
+ <button slot="trigger">File</button>
602
+ <snice-menu-item value="new">New</snice-menu-item>
603
+ <snice-menu-item value="open">Open</snice-menu-item>
604
+ <snice-menu-item value="save">Save</snice-menu-item>
605
+ </snice-menu>
606
+ ```
607
+
608
+ ### User Menu Pattern
609
+ ```html
610
+ <snice-menu placement="bottom-end">
611
+ <img slot="image-left" src="avatar.jpg">
612
+ <span slot="trigger">Username</span>
613
+ <snice-menu-item value="profile">Profile</snice-menu-item>
614
+ <snice-menu-item value="logout">Logout</snice-menu-item>
615
+ </snice-menu>
616
+ ```
617
+
618
+ ### Action Menu Pattern
619
+ ```html
620
+ <snice-menu>
621
+ <button slot="trigger">⋮</button>
622
+ <snice-menu-item value="edit">Edit</snice-menu-item>
623
+ <snice-menu-item value="delete">Delete</snice-menu-item>
624
+ </snice-menu>
625
+ ```
626
+
627
+ ### Multi-Select Pattern
628
+ ```html
629
+ <snice-menu close-on-select="false">
630
+ <button slot="trigger">Filters</button>
631
+ <!-- Multiple selections allowed -->
632
+ </snice-menu>
633
+ ```