snice 4.28.0 → 4.30.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 (835) hide show
  1. package/README.md +3 -10
  2. package/adapters/react/SniceProvider.d.ts +71 -0
  3. package/adapters/react/SniceProvider.js +49 -0
  4. package/adapters/react/SniceProvider.js.map +1 -0
  5. package/adapters/react/SniceRouter.d.ts +44 -0
  6. package/adapters/react/SniceRouter.js +190 -0
  7. package/adapters/react/SniceRouter.js.map +1 -0
  8. package/adapters/react/action-bar.d.ts +30 -0
  9. package/adapters/react/action-bar.d.ts.map +1 -0
  10. package/adapters/react/action-bar.js +24 -0
  11. package/adapters/react/action-bar.js.map +1 -0
  12. package/adapters/react/action-bar.tsx +38 -0
  13. package/adapters/react/binpack.d.ts +35 -0
  14. package/adapters/react/binpack.d.ts.map +1 -0
  15. package/adapters/react/binpack.js +24 -0
  16. package/adapters/react/binpack.js.map +1 -0
  17. package/adapters/react/binpack.tsx +43 -0
  18. package/adapters/react/components.d.ts +6 -0
  19. package/adapters/react/components.d.ts.map +1 -1
  20. package/adapters/react/components.js +3 -0
  21. package/adapters/react/components.js.map +1 -1
  22. package/adapters/react/components.ts +6 -0
  23. package/adapters/react/grid.d.ts +36 -0
  24. package/adapters/react/grid.d.ts.map +1 -0
  25. package/adapters/react/grid.js +24 -0
  26. package/adapters/react/grid.js.map +1 -0
  27. package/adapters/react/grid.tsx +44 -0
  28. package/adapters/react/index.d.ts +5 -0
  29. package/adapters/react/index.d.ts.map +1 -1
  30. package/adapters/react/index.js +3 -2
  31. package/adapters/react/index.js.map +1 -1
  32. package/adapters/react/index.ts +6 -3
  33. package/adapters/react/matchRoute.d.ts +16 -0
  34. package/adapters/react/matchRoute.js +32 -0
  35. package/adapters/react/matchRoute.js.map +1 -0
  36. package/adapters/react/types.d.ts +1 -15
  37. package/adapters/react/types.d.ts.map +1 -1
  38. package/adapters/react/types.ts +1 -15
  39. package/adapters/react/useRequestHandler.d.ts +56 -0
  40. package/adapters/react/useRequestHandler.js +103 -0
  41. package/adapters/react/useRequestHandler.js.map +1 -0
  42. package/bin/snice.js +8 -13
  43. package/bin/templates/{pwa → default}/index.html +1 -1
  44. package/bin/templates/{pwa → default}/src/components/app-header.ts +36 -18
  45. package/bin/templates/{pwa → default}/src/components/notification-badge.ts +2 -21
  46. package/bin/templates/{pwa → default}/src/components/search-bar.ts +12 -12
  47. package/bin/templates/default/src/context.ts +17 -0
  48. package/bin/templates/{pwa → default}/src/controllers/notification-controller.ts +10 -15
  49. package/bin/templates/{pwa → default}/src/daemons/notifications.ts +0 -12
  50. package/bin/templates/{pwa → default}/src/main.ts +1 -7
  51. package/bin/templates/{pwa → default}/src/middleware/error.ts +1 -8
  52. package/bin/templates/{pwa → default}/src/pages/dashboard.ts +17 -18
  53. package/bin/templates/{pwa → default}/src/pages/data.ts +24 -24
  54. package/bin/templates/{pwa → default}/src/pages/login.ts +3 -6
  55. package/bin/templates/{pwa → default}/src/pages/notifications.ts +21 -19
  56. package/bin/templates/{pwa → default}/src/pages/profile.ts +10 -12
  57. package/bin/templates/{pwa → default}/src/pages/settings.ts +22 -22
  58. package/bin/templates/default/src/router.ts +13 -0
  59. package/bin/templates/default/src/styles/global.css +16 -0
  60. package/bin/templates/{pwa → default}/tsconfig.json +2 -1
  61. package/bin/templates/react/README.md +124 -0
  62. package/bin/templates/react/global.d.ts +10 -0
  63. package/bin/templates/react/index.html +15 -0
  64. package/bin/templates/react/package.json +31 -0
  65. package/bin/templates/react/src/App.tsx +112 -0
  66. package/bin/templates/react/src/components/AppHeader.tsx +85 -0
  67. package/bin/templates/react/src/components/AppLayout.tsx +11 -0
  68. package/bin/templates/react/src/components/NotificationBadge.tsx +13 -0
  69. package/bin/templates/react/src/components/SearchBar.tsx +63 -0
  70. package/bin/templates/react/src/daemons/notifications.ts +136 -0
  71. package/bin/templates/react/src/fetcher.ts +15 -0
  72. package/bin/templates/react/src/guards/auth.ts +6 -0
  73. package/bin/templates/react/src/main.tsx +27 -0
  74. package/bin/templates/react/src/middleware/auth.ts +16 -0
  75. package/bin/templates/react/src/middleware/error.ts +29 -0
  76. package/bin/templates/react/src/middleware/retry.ts +31 -0
  77. package/bin/templates/react/src/pages/DashboardPage.tsx +111 -0
  78. package/bin/templates/react/src/pages/DataPage.tsx +119 -0
  79. package/bin/templates/react/src/pages/LoginPage.tsx +46 -0
  80. package/bin/templates/react/src/pages/NotificationsPage.tsx +119 -0
  81. package/bin/templates/react/src/pages/ProfilePage.tsx +92 -0
  82. package/bin/templates/react/src/pages/SettingsPage.tsx +165 -0
  83. package/bin/templates/react/src/services/auth.ts +48 -0
  84. package/bin/templates/react/src/services/jwt.ts +35 -0
  85. package/bin/templates/react/src/services/storage.ts +24 -0
  86. package/bin/templates/react/src/styles/global.css +382 -0
  87. package/bin/templates/react/src/types/auth.ts +21 -0
  88. package/bin/templates/react/src/types/notifications.ts +9 -0
  89. package/bin/templates/react/tests/helpers/test-utils.ts +79 -0
  90. package/bin/templates/react/tests/middleware/auth.test.ts +67 -0
  91. package/bin/templates/react/tests/middleware/error.test.ts +105 -0
  92. package/bin/templates/react/tests/middleware/retry.test.ts +103 -0
  93. package/bin/templates/react/tests/services/auth.test.ts +89 -0
  94. package/bin/templates/react/tests/services/jwt.test.ts +76 -0
  95. package/bin/templates/react/tests/services/storage.test.ts +69 -0
  96. package/bin/templates/{base → react}/tsconfig.json +4 -6
  97. package/bin/templates/react/vite.config.ts +18 -0
  98. package/bin/templates/react/vitest.config.ts +18 -0
  99. package/dist/cdn/accordion/snice-accordion.js +1 -1
  100. package/dist/cdn/accordion/snice-accordion.min.js +1 -1
  101. package/dist/cdn/action-bar/README.md +27 -0
  102. package/dist/cdn/action-bar/snice-action-bar.js +249 -0
  103. package/dist/cdn/action-bar/snice-action-bar.js.map +1 -0
  104. package/dist/cdn/action-bar/snice-action-bar.min.js +12 -0
  105. package/dist/cdn/action-bar/snice-action-bar.min.js.map +1 -0
  106. package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
  107. package/dist/cdn/activity-feed/snice-activity-feed.min.js +1 -1
  108. package/dist/cdn/alert/snice-alert.js +1 -1
  109. package/dist/cdn/alert/snice-alert.min.js +1 -1
  110. package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
  111. package/dist/cdn/app-tiles/snice-app-tiles.min.js +1 -1
  112. package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
  113. package/dist/cdn/approval-flow/snice-approval-flow.min.js +1 -1
  114. package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
  115. package/dist/cdn/audio-recorder/snice-audio-recorder.min.js +1 -1
  116. package/dist/cdn/availability/snice-availability.js +1 -1
  117. package/dist/cdn/availability/snice-availability.min.js +1 -1
  118. package/dist/cdn/avatar/snice-avatar.js +1 -1
  119. package/dist/cdn/avatar/snice-avatar.min.js +1 -1
  120. package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
  121. package/dist/cdn/avatar-group/snice-avatar-group.min.js +1 -1
  122. package/dist/cdn/badge/snice-badge.js +1 -1
  123. package/dist/cdn/badge/snice-badge.min.js +1 -1
  124. package/dist/cdn/banner/snice-banner.js +1 -1
  125. package/dist/cdn/banner/snice-banner.min.js +1 -1
  126. package/dist/cdn/binpack/README.md +27 -0
  127. package/dist/cdn/binpack/snice-binpack.js +1037 -0
  128. package/dist/cdn/binpack/snice-binpack.js.map +1 -0
  129. package/dist/cdn/binpack/snice-binpack.min.js +13 -0
  130. package/dist/cdn/binpack/snice-binpack.min.js.map +1 -0
  131. package/dist/cdn/book/snice-book.js +1 -1
  132. package/dist/cdn/book/snice-book.min.js +1 -1
  133. package/dist/cdn/booking/snice-booking.js +1 -1
  134. package/dist/cdn/booking/snice-booking.min.js +1 -1
  135. package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
  136. package/dist/cdn/breadcrumbs/snice-breadcrumbs.min.js +1 -1
  137. package/dist/cdn/button/README.md +1 -1
  138. package/dist/cdn/button/snice-button.js +2 -2
  139. package/dist/cdn/button/snice-button.js.map +1 -1
  140. package/dist/cdn/button/snice-button.min.js +2 -2
  141. package/dist/cdn/button/snice-button.min.js.map +1 -1
  142. package/dist/cdn/calendar/snice-calendar.js +1 -1
  143. package/dist/cdn/calendar/snice-calendar.min.js +1 -1
  144. package/dist/cdn/camera/snice-camera.js +1 -1
  145. package/dist/cdn/camera/snice-camera.min.js +1 -1
  146. package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
  147. package/dist/cdn/camera-annotate/snice-camera-annotate.min.js +1 -1
  148. package/dist/cdn/candlestick/snice-candlestick.js +1 -1
  149. package/dist/cdn/candlestick/snice-candlestick.min.js +1 -1
  150. package/dist/cdn/card/snice-card.js +1 -1
  151. package/dist/cdn/card/snice-card.min.js +1 -1
  152. package/dist/cdn/carousel/snice-carousel.js +1 -1
  153. package/dist/cdn/carousel/snice-carousel.min.js +1 -1
  154. package/dist/cdn/cart/snice-cart.js +1 -1
  155. package/dist/cdn/cart/snice-cart.min.js +1 -1
  156. package/dist/cdn/chart/snice-chart.js +1 -1
  157. package/dist/cdn/chart/snice-chart.min.js +1 -1
  158. package/dist/cdn/chat/snice-chat.js +1 -1
  159. package/dist/cdn/chat/snice-chat.min.js +1 -1
  160. package/dist/cdn/checkbox/snice-checkbox.js +1 -1
  161. package/dist/cdn/checkbox/snice-checkbox.min.js +1 -1
  162. package/dist/cdn/chip/README.md +2 -2
  163. package/dist/cdn/chip/snice-chip.js +2 -2
  164. package/dist/cdn/chip/snice-chip.js.map +1 -1
  165. package/dist/cdn/chip/snice-chip.min.js +3 -3
  166. package/dist/cdn/chip/snice-chip.min.js.map +1 -1
  167. package/dist/cdn/code-block/snice-code-block.js +1 -1
  168. package/dist/cdn/code-block/snice-code-block.min.js +1 -1
  169. package/dist/cdn/color-display/snice-color-display.js +1 -1
  170. package/dist/cdn/color-display/snice-color-display.min.js +1 -1
  171. package/dist/cdn/color-picker/snice-color-picker.js +1 -1
  172. package/dist/cdn/color-picker/snice-color-picker.min.js +1 -1
  173. package/dist/cdn/command-palette/snice-command-palette.js +1 -1
  174. package/dist/cdn/command-palette/snice-command-palette.min.js +1 -1
  175. package/dist/cdn/comments/snice-comments.js +1 -1
  176. package/dist/cdn/comments/snice-comments.min.js +1 -1
  177. package/dist/cdn/countdown/snice-countdown.js +1 -1
  178. package/dist/cdn/countdown/snice-countdown.min.js +1 -1
  179. package/dist/cdn/cropper/snice-cropper.js +1 -1
  180. package/dist/cdn/cropper/snice-cropper.min.js +1 -1
  181. package/dist/cdn/data-card/snice-data-card.js +1 -1
  182. package/dist/cdn/data-card/snice-data-card.min.js +1 -1
  183. package/dist/cdn/date-picker/README.md +1 -1
  184. package/dist/cdn/date-picker/snice-date-picker.js +2 -2
  185. package/dist/cdn/date-picker/snice-date-picker.js.map +1 -1
  186. package/dist/cdn/date-picker/snice-date-picker.min.js +2 -2
  187. package/dist/cdn/date-picker/snice-date-picker.min.js.map +1 -1
  188. package/dist/cdn/date-range-picker/README.md +1 -1
  189. package/dist/cdn/date-range-picker/snice-date-range-picker.js +2 -2
  190. package/dist/cdn/date-range-picker/snice-date-range-picker.js.map +1 -1
  191. package/dist/cdn/date-range-picker/snice-date-range-picker.min.js +11 -11
  192. package/dist/cdn/date-range-picker/snice-date-range-picker.min.js.map +1 -1
  193. package/dist/cdn/date-time-picker/README.md +1 -1
  194. package/dist/cdn/date-time-picker/snice-date-time-picker.js +2 -2
  195. package/dist/cdn/date-time-picker/snice-date-time-picker.js.map +1 -1
  196. package/dist/cdn/date-time-picker/snice-date-time-picker.min.js +2 -2
  197. package/dist/cdn/date-time-picker/snice-date-time-picker.min.js.map +1 -1
  198. package/dist/cdn/diff/snice-diff.js +1 -1
  199. package/dist/cdn/diff/snice-diff.min.js +1 -1
  200. package/dist/cdn/divider/snice-divider.js +1 -1
  201. package/dist/cdn/divider/snice-divider.min.js +1 -1
  202. package/dist/cdn/doc/snice-doc.js +1 -1
  203. package/dist/cdn/doc/snice-doc.min.js +1 -1
  204. package/dist/cdn/draw/README.md +2 -2
  205. package/dist/cdn/draw/snice-draw.js +26 -4
  206. package/dist/cdn/draw/snice-draw.js.map +1 -1
  207. package/dist/cdn/draw/snice-draw.min.js +3 -3
  208. package/dist/cdn/draw/snice-draw.min.js.map +1 -1
  209. package/dist/cdn/drawer/snice-drawer.js +1 -1
  210. package/dist/cdn/drawer/snice-drawer.min.js +1 -1
  211. package/dist/cdn/empty-state/snice-empty-state.js +1 -1
  212. package/dist/cdn/empty-state/snice-empty-state.min.js +1 -1
  213. package/dist/cdn/estimate/snice-estimate.js +1 -1
  214. package/dist/cdn/estimate/snice-estimate.min.js +1 -1
  215. package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
  216. package/dist/cdn/file-gallery/snice-file-gallery.min.js +1 -1
  217. package/dist/cdn/file-upload/snice-file-upload.js +1 -1
  218. package/dist/cdn/file-upload/snice-file-upload.min.js +1 -1
  219. package/dist/cdn/flip-card/snice-flip-card.js +1 -1
  220. package/dist/cdn/flip-card/snice-flip-card.min.js +1 -1
  221. package/dist/cdn/flow/snice-flow.js +1 -1
  222. package/dist/cdn/flow/snice-flow.min.js +1 -1
  223. package/dist/cdn/form-layout/snice-form-layout.js +1 -1
  224. package/dist/cdn/form-layout/snice-form-layout.min.js +1 -1
  225. package/dist/cdn/funnel/snice-funnel.js +1 -1
  226. package/dist/cdn/funnel/snice-funnel.min.js +1 -1
  227. package/dist/cdn/gantt/snice-gantt.js +1 -1
  228. package/dist/cdn/gantt/snice-gantt.min.js +1 -1
  229. package/dist/cdn/gauge/snice-gauge.js +1 -1
  230. package/dist/cdn/gauge/snice-gauge.min.js +1 -1
  231. package/dist/cdn/grid/README.md +27 -0
  232. package/dist/cdn/grid/snice-grid.js +862 -0
  233. package/dist/cdn/grid/snice-grid.js.map +1 -0
  234. package/dist/cdn/grid/snice-grid.min.js +13 -0
  235. package/dist/cdn/grid/snice-grid.min.js.map +1 -0
  236. package/dist/cdn/heatmap/snice-heatmap.js +1 -1
  237. package/dist/cdn/heatmap/snice-heatmap.min.js +1 -1
  238. package/dist/cdn/image/snice-image.js +1 -1
  239. package/dist/cdn/image/snice-image.min.js +1 -1
  240. package/dist/cdn/input/snice-input.js +1 -1
  241. package/dist/cdn/input/snice-input.min.js +1 -1
  242. package/dist/cdn/invoice/snice-invoice.js +1 -1
  243. package/dist/cdn/invoice/snice-invoice.min.js +1 -1
  244. package/dist/cdn/kanban/snice-kanban.js +1 -1
  245. package/dist/cdn/kanban/snice-kanban.min.js +1 -1
  246. package/dist/cdn/key-value/snice-key-value.js +1 -1
  247. package/dist/cdn/key-value/snice-key-value.min.js +1 -1
  248. package/dist/cdn/kpi/snice-kpi.js +1 -1
  249. package/dist/cdn/kpi/snice-kpi.min.js +1 -1
  250. package/dist/cdn/layout/snice-layout.js +1 -1
  251. package/dist/cdn/layout/snice-layout.min.js +1 -1
  252. package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
  253. package/dist/cdn/leaderboard/snice-leaderboard.min.js +1 -1
  254. package/dist/cdn/link/snice-link.js +1 -1
  255. package/dist/cdn/link/snice-link.min.js +1 -1
  256. package/dist/cdn/link-preview/snice-link-preview.js +1 -1
  257. package/dist/cdn/link-preview/snice-link-preview.min.js +1 -1
  258. package/dist/cdn/list/snice-list.js +1 -1
  259. package/dist/cdn/list/snice-list.min.js +1 -1
  260. package/dist/cdn/location/snice-location.js +1 -1
  261. package/dist/cdn/location/snice-location.min.js +1 -1
  262. package/dist/cdn/login/README.md +2 -2
  263. package/dist/cdn/login/snice-login.js +2 -2
  264. package/dist/cdn/login/snice-login.js.map +1 -1
  265. package/dist/cdn/login/snice-login.min.js +2 -2
  266. package/dist/cdn/login/snice-login.min.js.map +1 -1
  267. package/dist/cdn/map/snice-map.js +1 -1
  268. package/dist/cdn/map/snice-map.min.js +1 -1
  269. package/dist/cdn/markdown/snice-markdown.js +1 -1
  270. package/dist/cdn/markdown/snice-markdown.min.js +1 -1
  271. package/dist/cdn/masonry/snice-masonry.js +1 -1
  272. package/dist/cdn/masonry/snice-masonry.min.js +1 -1
  273. package/dist/cdn/menu/snice-menu.js +1 -1
  274. package/dist/cdn/menu/snice-menu.min.js +1 -1
  275. package/dist/cdn/message-strip/README.md +2 -2
  276. package/dist/cdn/message-strip/snice-message-strip.js +2 -2
  277. package/dist/cdn/message-strip/snice-message-strip.js.map +1 -1
  278. package/dist/cdn/message-strip/snice-message-strip.min.js +6 -6
  279. package/dist/cdn/message-strip/snice-message-strip.min.js.map +1 -1
  280. package/dist/cdn/metric-table/snice-metric-table.js +1 -1
  281. package/dist/cdn/metric-table/snice-metric-table.min.js +1 -1
  282. package/dist/cdn/modal/snice-modal.js +1 -1
  283. package/dist/cdn/modal/snice-modal.min.js +1 -1
  284. package/dist/cdn/music-player/snice-music-player.js +1 -1
  285. package/dist/cdn/music-player/snice-music-player.min.js +1 -1
  286. package/dist/cdn/nav/snice-nav.js +1 -1
  287. package/dist/cdn/nav/snice-nav.min.js +1 -1
  288. package/dist/cdn/network-graph/snice-network-graph.js +1 -1
  289. package/dist/cdn/network-graph/snice-network-graph.min.js +1 -1
  290. package/dist/cdn/notification-center/snice-notification-center.js +1 -1
  291. package/dist/cdn/notification-center/snice-notification-center.min.js +1 -1
  292. package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
  293. package/dist/cdn/order-tracker/snice-order-tracker.min.js +1 -1
  294. package/dist/cdn/org-chart/snice-org-chart.js +1 -1
  295. package/dist/cdn/org-chart/snice-org-chart.min.js +1 -1
  296. package/dist/cdn/pagination/snice-pagination.js +1 -1
  297. package/dist/cdn/pagination/snice-pagination.min.js +1 -1
  298. package/dist/cdn/paint/README.md +2 -2
  299. package/dist/cdn/paint/snice-paint.js +26 -3
  300. package/dist/cdn/paint/snice-paint.js.map +1 -1
  301. package/dist/cdn/paint/snice-paint.min.js +3 -3
  302. package/dist/cdn/paint/snice-paint.min.js.map +1 -1
  303. package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
  304. package/dist/cdn/pdf-viewer/snice-pdf-viewer.min.js +1 -1
  305. package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
  306. package/dist/cdn/permission-matrix/snice-permission-matrix.min.js +1 -1
  307. package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
  308. package/dist/cdn/podcast-player/snice-podcast-player.min.js +1 -1
  309. package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
  310. package/dist/cdn/pricing-table/snice-pricing-table.min.js +1 -1
  311. package/dist/cdn/product-card/README.md +1 -1
  312. package/dist/cdn/product-card/snice-product-card.js +1 -1
  313. package/dist/cdn/product-card/snice-product-card.min.js +1 -1
  314. package/dist/cdn/progress/snice-progress.js +1 -1
  315. package/dist/cdn/progress/snice-progress.min.js +1 -1
  316. package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
  317. package/dist/cdn/progress-ring/snice-progress-ring.min.js +1 -1
  318. package/dist/cdn/qr-code/snice-qr-code.js +1 -1
  319. package/dist/cdn/qr-code/snice-qr-code.min.js +1 -1
  320. package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
  321. package/dist/cdn/qr-reader/snice-qr-reader.min.js +1 -1
  322. package/dist/cdn/radio/snice-radio.js +1 -1
  323. package/dist/cdn/radio/snice-radio.min.js +1 -1
  324. package/dist/cdn/range-slider/snice-range-slider.js +1 -1
  325. package/dist/cdn/range-slider/snice-range-slider.min.js +1 -1
  326. package/dist/cdn/rating/snice-rating.js +1 -1
  327. package/dist/cdn/rating/snice-rating.min.js +1 -1
  328. package/dist/cdn/receipt/snice-receipt.js +1 -1
  329. package/dist/cdn/receipt/snice-receipt.min.js +1 -1
  330. package/dist/cdn/recipe/snice-recipe.js +1 -1
  331. package/dist/cdn/recipe/snice-recipe.min.js +1 -1
  332. package/dist/cdn/runtime/README.md +2 -2
  333. package/dist/cdn/runtime/snice-runtime.esm.js +109 -16
  334. package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
  335. package/dist/cdn/runtime/snice-runtime.esm.min.js +8 -8
  336. package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
  337. package/dist/cdn/runtime/snice-runtime.js +109 -15
  338. package/dist/cdn/runtime/snice-runtime.js.map +1 -1
  339. package/dist/cdn/runtime/snice-runtime.min.js +7 -7
  340. package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
  341. package/dist/cdn/sankey/snice-sankey.js +1 -1
  342. package/dist/cdn/sankey/snice-sankey.min.js +1 -1
  343. package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
  344. package/dist/cdn/segmented-control/snice-segmented-control.min.js +1 -1
  345. package/dist/cdn/select/snice-select.js +1 -1
  346. package/dist/cdn/select/snice-select.min.js +1 -1
  347. package/dist/cdn/skeleton/snice-skeleton.js +1 -1
  348. package/dist/cdn/skeleton/snice-skeleton.min.js +1 -1
  349. package/dist/cdn/slider/snice-slider.js +1 -1
  350. package/dist/cdn/slider/snice-slider.min.js +1 -1
  351. package/dist/cdn/sortable/snice-sortable.js +1 -1
  352. package/dist/cdn/sortable/snice-sortable.min.js +1 -1
  353. package/dist/cdn/sparkline/snice-sparkline.js +1 -1
  354. package/dist/cdn/sparkline/snice-sparkline.min.js +1 -1
  355. package/dist/cdn/spinner/snice-spinner.js +1 -1
  356. package/dist/cdn/spinner/snice-spinner.min.js +1 -1
  357. package/dist/cdn/split-button/snice-split-button.js +1 -1
  358. package/dist/cdn/split-button/snice-split-button.min.js +1 -1
  359. package/dist/cdn/split-pane/snice-split-pane.js +1 -1
  360. package/dist/cdn/split-pane/snice-split-pane.min.js +1 -1
  361. package/dist/cdn/spotlight/snice-spotlight.js +1 -1
  362. package/dist/cdn/spotlight/snice-spotlight.min.js +1 -1
  363. package/dist/cdn/spreadsheet/snice-spreadsheet.js +1 -1
  364. package/dist/cdn/spreadsheet/snice-spreadsheet.min.js +1 -1
  365. package/dist/cdn/stat-group/snice-stat-group.js +1 -1
  366. package/dist/cdn/stat-group/snice-stat-group.min.js +1 -1
  367. package/dist/cdn/step-input/snice-step-input.js +1 -1
  368. package/dist/cdn/step-input/snice-step-input.min.js +1 -1
  369. package/dist/cdn/stepper/snice-stepper.js +1 -1
  370. package/dist/cdn/stepper/snice-stepper.min.js +1 -1
  371. package/dist/cdn/switch/snice-switch.js +1 -1
  372. package/dist/cdn/switch/snice-switch.min.js +1 -1
  373. package/dist/cdn/table/README.md +1 -1
  374. package/dist/cdn/table/snice-table.js +2 -2
  375. package/dist/cdn/table/snice-table.js.map +1 -1
  376. package/dist/cdn/table/snice-table.min.js +2 -2
  377. package/dist/cdn/table/snice-table.min.js.map +1 -1
  378. package/dist/cdn/tabs/snice-tabs.js +1 -1
  379. package/dist/cdn/tabs/snice-tabs.min.js +1 -1
  380. package/dist/cdn/tag/README.md +1 -1
  381. package/dist/cdn/tag/snice-tag.js +2 -2
  382. package/dist/cdn/tag/snice-tag.js.map +1 -1
  383. package/dist/cdn/tag/snice-tag.min.js +3 -3
  384. package/dist/cdn/tag/snice-tag.min.js.map +1 -1
  385. package/dist/cdn/tag-input/README.md +2 -2
  386. package/dist/cdn/tag-input/snice-tag-input.js +2 -2
  387. package/dist/cdn/tag-input/snice-tag-input.js.map +1 -1
  388. package/dist/cdn/tag-input/snice-tag-input.min.js +2 -2
  389. package/dist/cdn/tag-input/snice-tag-input.min.js.map +1 -1
  390. package/dist/cdn/terminal/snice-terminal.js +1 -1
  391. package/dist/cdn/terminal/snice-terminal.min.js +1 -1
  392. package/dist/cdn/testimonial/snice-testimonial.js +1 -1
  393. package/dist/cdn/testimonial/snice-testimonial.min.js +1 -1
  394. package/dist/cdn/textarea/snice-textarea.js +1 -1
  395. package/dist/cdn/textarea/snice-textarea.min.js +1 -1
  396. package/dist/cdn/time-picker/README.md +1 -1
  397. package/dist/cdn/time-picker/snice-time-picker.js +2 -2
  398. package/dist/cdn/time-picker/snice-time-picker.js.map +1 -1
  399. package/dist/cdn/time-picker/snice-time-picker.min.js +2 -2
  400. package/dist/cdn/time-picker/snice-time-picker.min.js.map +1 -1
  401. package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
  402. package/dist/cdn/time-range-picker/snice-time-range-picker.min.js +1 -1
  403. package/dist/cdn/timeline/snice-timeline.js +1 -1
  404. package/dist/cdn/timeline/snice-timeline.min.js +1 -1
  405. package/dist/cdn/timer/snice-timer.js +1 -1
  406. package/dist/cdn/timer/snice-timer.min.js +1 -1
  407. package/dist/cdn/toast/README.md +1 -1
  408. package/dist/cdn/toast/snice-toast.js +7 -3
  409. package/dist/cdn/toast/snice-toast.js.map +1 -1
  410. package/dist/cdn/toast/snice-toast.min.js +6 -6
  411. package/dist/cdn/toast/snice-toast.min.js.map +1 -1
  412. package/dist/cdn/tooltip/snice-tooltip.js +1 -1
  413. package/dist/cdn/tooltip/snice-tooltip.min.js +1 -1
  414. package/dist/cdn/tree/snice-tree.js +1 -1
  415. package/dist/cdn/tree/snice-tree.min.js +1 -1
  416. package/dist/cdn/treemap/snice-treemap.js +1 -1
  417. package/dist/cdn/treemap/snice-treemap.min.js +1 -1
  418. package/dist/cdn/user-card/snice-user-card.js +1 -1
  419. package/dist/cdn/user-card/snice-user-card.min.js +1 -1
  420. package/dist/cdn/video-player/snice-video-player.js +1 -1
  421. package/dist/cdn/video-player/snice-video-player.min.js +1 -1
  422. package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
  423. package/dist/cdn/virtual-scroller/snice-virtual-scroller.min.js +1 -1
  424. package/dist/cdn/waterfall/README.md +1 -1
  425. package/dist/cdn/waterfall/snice-waterfall.js +1 -1
  426. package/dist/cdn/waterfall/snice-waterfall.min.js +1 -1
  427. package/dist/cdn/weather/snice-weather.js +1 -1
  428. package/dist/cdn/weather/snice-weather.min.js +1 -1
  429. package/dist/cdn/work-order/snice-work-order.js +1 -1
  430. package/dist/cdn/work-order/snice-work-order.min.js +1 -1
  431. package/dist/components/action-bar/snice-action-bar.d.ts +22 -0
  432. package/dist/components/action-bar/snice-action-bar.js +182 -0
  433. package/dist/components/action-bar/snice-action-bar.js.map +1 -0
  434. package/dist/components/action-bar/snice-action-bar.types.d.ts +17 -0
  435. package/dist/components/binpack/snice-binpack.d.ts +82 -0
  436. package/dist/components/binpack/snice-binpack.js +970 -0
  437. package/dist/components/binpack/snice-binpack.js.map +1 -0
  438. package/dist/components/binpack/snice-binpack.types.d.ts +52 -0
  439. package/dist/components/button/snice-button.js +1 -1
  440. package/dist/components/button/snice-button.js.map +1 -1
  441. package/dist/components/chip/snice-chip.js +1 -1
  442. package/dist/components/chip/snice-chip.js.map +1 -1
  443. package/dist/components/date-picker/snice-date-picker.js +1 -1
  444. package/dist/components/date-picker/snice-date-picker.js.map +1 -1
  445. package/dist/components/date-range-picker/snice-date-range-picker.js +1 -1
  446. package/dist/components/date-range-picker/snice-date-range-picker.js.map +1 -1
  447. package/dist/components/date-time-picker/snice-date-time-picker.js +1 -1
  448. package/dist/components/date-time-picker/snice-date-time-picker.js.map +1 -1
  449. package/dist/components/draw/snice-draw.d.ts +2 -0
  450. package/dist/components/draw/snice-draw.js +25 -3
  451. package/dist/components/draw/snice-draw.js.map +1 -1
  452. package/dist/components/grid/snice-grid.d.ts +73 -0
  453. package/dist/components/grid/snice-grid.js +795 -0
  454. package/dist/components/grid/snice-grid.js.map +1 -0
  455. package/dist/components/grid/snice-grid.types.d.ts +41 -0
  456. package/dist/components/message-strip/snice-message-strip.js +1 -1
  457. package/dist/components/message-strip/snice-message-strip.js.map +1 -1
  458. package/dist/components/paint/snice-paint.d.ts +2 -0
  459. package/dist/components/paint/snice-paint.js +25 -2
  460. package/dist/components/paint/snice-paint.js.map +1 -1
  461. package/dist/components/tag/snice-tag.js +1 -1
  462. package/dist/components/tag/snice-tag.js.map +1 -1
  463. package/dist/components/tag-input/snice-tag-input.js +1 -1
  464. package/dist/components/tag-input/snice-tag-input.js.map +1 -1
  465. package/dist/components/theme/theme.css +15 -0
  466. package/dist/components/time-picker/snice-time-picker.js +1 -1
  467. package/dist/components/time-picker/snice-time-picker.js.map +1 -1
  468. package/dist/components/toast/snice-toast-container.js +4 -0
  469. package/dist/components/toast/snice-toast-container.js.map +1 -1
  470. package/dist/components/toast/snice-toast.js +2 -2
  471. package/dist/create-request-handler.d.ts +42 -0
  472. package/dist/index.cjs +106 -12
  473. package/dist/index.cjs.map +1 -1
  474. package/dist/index.d.ts +2 -0
  475. package/dist/index.esm.js +106 -13
  476. package/dist/index.esm.js.map +1 -1
  477. package/dist/index.iife.js +106 -12
  478. package/dist/index.iife.js.map +1 -1
  479. package/dist/react/SniceProvider.d.ts +71 -0
  480. package/dist/react/SniceProvider.js +49 -0
  481. package/dist/react/SniceProvider.js.map +1 -0
  482. package/dist/react/SniceRouter.d.ts +44 -0
  483. package/dist/react/SniceRouter.js +190 -0
  484. package/dist/react/SniceRouter.js.map +1 -0
  485. package/dist/react/index.d.ts +3 -0
  486. package/dist/react/index.js +14 -0
  487. package/dist/react/index.js.map +1 -0
  488. package/dist/react/matchRoute.d.ts +16 -0
  489. package/dist/react/matchRoute.js +32 -0
  490. package/dist/react/matchRoute.js.map +1 -0
  491. package/dist/react/useRequestHandler.d.ts +56 -0
  492. package/dist/react/useRequestHandler.js +103 -0
  493. package/dist/react/useRequestHandler.js.map +1 -0
  494. package/dist/symbols.cjs +1 -1
  495. package/dist/symbols.esm.js +1 -1
  496. package/dist/transitions.cjs +1 -1
  497. package/dist/transitions.esm.js +1 -1
  498. package/dist/types/guard.d.ts +4 -11
  499. package/docs/ai/DEVELOPMENT.md +1 -1
  500. package/docs/ai/README.md +7 -7
  501. package/docs/ai/components/accordion.md +46 -80
  502. package/docs/ai/components/action-bar.md +75 -0
  503. package/docs/ai/components/activity-feed.md +7 -7
  504. package/docs/ai/components/alert.md +26 -44
  505. package/docs/ai/components/app-tiles.md +34 -39
  506. package/docs/ai/components/approval-flow.md +1 -1
  507. package/docs/ai/components/audio-recorder.md +35 -67
  508. package/docs/ai/components/availability.md +13 -34
  509. package/docs/ai/components/avatar-group.md +26 -13
  510. package/docs/ai/components/avatar.md +52 -36
  511. package/docs/ai/components/badge.md +21 -32
  512. package/docs/ai/components/banner.md +21 -43
  513. package/docs/ai/components/binpack.md +89 -0
  514. package/docs/ai/components/book.md +25 -23
  515. package/docs/ai/components/booking.md +31 -36
  516. package/docs/ai/components/breadcrumbs.md +36 -11
  517. package/docs/ai/components/button.md +33 -44
  518. package/docs/ai/components/calendar.md +37 -70
  519. package/docs/ai/components/camera-annotate.md +31 -64
  520. package/docs/ai/components/camera.md +38 -120
  521. package/docs/ai/components/candlestick.md +32 -52
  522. package/docs/ai/components/card.md +20 -30
  523. package/docs/ai/components/carousel.md +32 -32
  524. package/docs/ai/components/cart.md +24 -29
  525. package/docs/ai/components/chart.md +29 -114
  526. package/docs/ai/components/chat.md +38 -75
  527. package/docs/ai/components/checkbox.md +22 -41
  528. package/docs/ai/components/chip.md +18 -54
  529. package/docs/ai/components/code-block.md +57 -178
  530. package/docs/ai/components/color-display.md +12 -32
  531. package/docs/ai/components/color-picker.md +17 -39
  532. package/docs/ai/components/command-palette.md +49 -71
  533. package/docs/ai/components/comments.md +55 -36
  534. package/docs/ai/components/countdown.md +28 -30
  535. package/docs/ai/components/cropper.md +33 -33
  536. package/docs/ai/components/data-card.md +20 -14
  537. package/docs/ai/components/date-picker.md +40 -47
  538. package/docs/ai/components/date-range-picker.md +31 -15
  539. package/docs/ai/components/date-time-picker.md +23 -46
  540. package/docs/ai/components/diff.md +30 -31
  541. package/docs/ai/components/divider.md +17 -47
  542. package/docs/ai/components/doc.md +43 -68
  543. package/docs/ai/components/draw.md +35 -87
  544. package/docs/ai/components/drawer.md +48 -77
  545. package/docs/ai/components/empty-state.md +10 -44
  546. package/docs/ai/components/estimate.md +33 -58
  547. package/docs/ai/components/file-gallery.md +48 -100
  548. package/docs/ai/components/file-upload.md +17 -53
  549. package/docs/ai/components/flip-card.md +31 -23
  550. package/docs/ai/components/flow.md +37 -65
  551. package/docs/ai/components/form-builder.md +35 -75
  552. package/docs/ai/components/form-layout.md +10 -20
  553. package/docs/ai/components/funnel.md +33 -48
  554. package/docs/ai/components/gantt.md +27 -23
  555. package/docs/ai/components/gauge.md +16 -17
  556. package/docs/ai/components/grid.md +116 -0
  557. package/docs/ai/components/heatmap.md +21 -21
  558. package/docs/ai/components/image.md +7 -13
  559. package/docs/ai/components/input.md +38 -70
  560. package/docs/ai/components/invoice.md +35 -36
  561. package/docs/ai/components/kanban.md +32 -61
  562. package/docs/ai/components/key-value.md +32 -16
  563. package/docs/ai/components/kpi.md +38 -73
  564. package/docs/ai/components/layout.md +29 -23
  565. package/docs/ai/components/leaderboard.md +28 -37
  566. package/docs/ai/components/link-preview.md +12 -18
  567. package/docs/ai/components/link.md +10 -7
  568. package/docs/ai/components/list.md +21 -5
  569. package/docs/ai/components/location.md +21 -25
  570. package/docs/ai/components/login.md +14 -9
  571. package/docs/ai/components/map.md +27 -33
  572. package/docs/ai/components/markdown.md +20 -24
  573. package/docs/ai/components/masonry.md +10 -14
  574. package/docs/ai/components/mentions.md +26 -12
  575. package/docs/ai/components/menu.md +54 -52
  576. package/docs/ai/components/message-strip.md +20 -20
  577. package/docs/ai/components/metric-table.md +14 -21
  578. package/docs/ai/components/modal.md +27 -18
  579. package/docs/ai/components/music-player.md +49 -41
  580. package/docs/ai/components/nav.md +34 -31
  581. package/docs/ai/components/network-graph.md +27 -42
  582. package/docs/ai/components/notification-center.md +31 -33
  583. package/docs/ai/components/order-tracker.md +36 -27
  584. package/docs/ai/components/org-chart.md +36 -31
  585. package/docs/ai/components/pagination.md +34 -26
  586. package/docs/ai/components/paint.md +53 -91
  587. package/docs/ai/components/pdf-viewer.md +35 -36
  588. package/docs/ai/components/permission-matrix.md +26 -31
  589. package/docs/ai/components/podcast-player.md +64 -70
  590. package/docs/ai/components/pricing-table.md +37 -48
  591. package/docs/ai/components/product-card.md +58 -41
  592. package/docs/ai/components/progress-ring.md +20 -24
  593. package/docs/ai/components/progress.md +28 -45
  594. package/docs/ai/components/qr-code.md +25 -27
  595. package/docs/ai/components/qr-reader.md +20 -23
  596. package/docs/ai/components/radio.md +17 -15
  597. package/docs/ai/components/range-slider.md +22 -11
  598. package/docs/ai/components/rating.md +29 -33
  599. package/docs/ai/components/receipt.md +50 -127
  600. package/docs/ai/components/recipe.md +44 -42
  601. package/docs/ai/components/sankey.md +21 -30
  602. package/docs/ai/components/scheduler.md +29 -41
  603. package/docs/ai/components/segmented-control.md +11 -15
  604. package/docs/ai/components/select.md +58 -102
  605. package/docs/ai/components/skeleton.md +16 -30
  606. package/docs/ai/components/slider.md +26 -20
  607. package/docs/ai/components/sortable.md +25 -27
  608. package/docs/ai/components/sparkline.md +21 -17
  609. package/docs/ai/components/spinner.md +9 -5
  610. package/docs/ai/components/split-button.md +10 -13
  611. package/docs/ai/components/split-pane.md +19 -14
  612. package/docs/ai/components/spotlight.md +31 -26
  613. package/docs/ai/components/spreadsheet.md +51 -97
  614. package/docs/ai/components/stat-group.md +9 -19
  615. package/docs/ai/components/step-input.md +17 -15
  616. package/docs/ai/components/stepper.md +14 -15
  617. package/docs/ai/components/switch.md +15 -9
  618. package/docs/ai/components/table.md +24 -84
  619. package/docs/ai/components/tabs.md +18 -10
  620. package/docs/ai/components/tag-input.md +18 -29
  621. package/docs/ai/components/tag.md +10 -22
  622. package/docs/ai/components/terminal.md +9 -9
  623. package/docs/ai/components/testimonial.md +9 -19
  624. package/docs/ai/components/textarea.md +15 -16
  625. package/docs/ai/components/theme.md +3 -3
  626. package/docs/ai/components/time-picker.md +30 -49
  627. package/docs/ai/components/time-range-picker.md +16 -15
  628. package/docs/ai/components/timeline.md +5 -4
  629. package/docs/ai/components/timer.md +8 -8
  630. package/docs/ai/components/toast.md +24 -18
  631. package/docs/ai/components/tooltip.md +11 -22
  632. package/docs/ai/components/tree.md +9 -9
  633. package/docs/ai/components/treemap.md +14 -13
  634. package/docs/ai/components/user-card.md +21 -27
  635. package/docs/ai/components/video-player.md +35 -52
  636. package/docs/ai/components/virtual-scroller.md +1 -1
  637. package/docs/ai/components/waterfall.md +17 -16
  638. package/docs/ai/components/weather.md +19 -34
  639. package/docs/ai/components/work-order.md +58 -134
  640. package/docs/ai/patterns.md +87 -0
  641. package/docs/ai/react-integration.md +97 -0
  642. package/docs/components/accordion.md +72 -151
  643. package/docs/components/action-bar.md +185 -0
  644. package/docs/components/activity-feed.md +9 -14
  645. package/docs/components/alert.md +17 -109
  646. package/docs/components/app-tiles.md +58 -43
  647. package/docs/components/approval-flow.md +8 -14
  648. package/docs/components/audio-recorder.md +45 -51
  649. package/docs/components/availability.md +30 -45
  650. package/docs/components/avatar-group.md +34 -14
  651. package/docs/components/avatar.md +20 -55
  652. package/docs/components/badge.md +53 -470
  653. package/docs/components/banner.md +44 -30
  654. package/docs/components/binpack.md +208 -0
  655. package/docs/components/book.md +78 -57
  656. package/docs/components/booking.md +35 -87
  657. package/docs/components/breadcrumbs.md +74 -448
  658. package/docs/components/button.md +72 -603
  659. package/docs/components/calendar.md +77 -261
  660. package/docs/components/camera-annotate.md +44 -96
  661. package/docs/components/camera.md +94 -333
  662. package/docs/components/candlestick.md +79 -116
  663. package/docs/components/card.md +51 -689
  664. package/docs/components/carousel.md +29 -76
  665. package/docs/components/cart.md +44 -136
  666. package/docs/components/chart.md +95 -438
  667. package/docs/components/chat.md +175 -439
  668. package/docs/components/checkbox.md +52 -609
  669. package/docs/components/chip.md +45 -574
  670. package/docs/components/code-block.md +157 -421
  671. package/docs/components/color-display.md +45 -54
  672. package/docs/components/color-picker.md +103 -36
  673. package/docs/components/command-palette.md +98 -92
  674. package/docs/components/comments.md +16 -10
  675. package/docs/components/countdown.md +15 -20
  676. package/docs/components/cropper.md +14 -16
  677. package/docs/components/data-card.md +16 -15
  678. package/docs/components/date-picker.md +45 -25
  679. package/docs/components/date-range-picker.md +140 -87
  680. package/docs/components/date-time-picker.md +25 -28
  681. package/docs/components/diff.md +22 -17
  682. package/docs/components/divider.md +18 -20
  683. package/docs/components/doc.md +105 -197
  684. package/docs/components/draw.md +117 -223
  685. package/docs/components/drawer.md +113 -478
  686. package/docs/components/empty-state.md +13 -29
  687. package/docs/components/estimate.md +58 -118
  688. package/docs/components/file-gallery.md +123 -495
  689. package/docs/components/file-upload.md +36 -123
  690. package/docs/components/flip-card.md +30 -34
  691. package/docs/components/flow.md +74 -89
  692. package/docs/components/form-builder.md +59 -86
  693. package/docs/components/form-layout.md +21 -31
  694. package/docs/components/funnel.md +21 -22
  695. package/docs/components/gantt.md +5 -5
  696. package/docs/components/gauge.md +5 -23
  697. package/docs/components/grid.md +249 -0
  698. package/docs/components/heatmap.md +13 -55
  699. package/docs/components/image.md +28 -32
  700. package/docs/components/input.md +25 -14
  701. package/docs/components/invoice.md +34 -33
  702. package/docs/components/kanban.md +99 -394
  703. package/docs/components/key-value.md +22 -12
  704. package/docs/components/kpi.md +41 -112
  705. package/docs/components/layout.md +7 -13
  706. package/docs/components/leaderboard.md +52 -76
  707. package/docs/components/link-preview.md +20 -16
  708. package/docs/components/link.md +22 -19
  709. package/docs/components/list.md +44 -26
  710. package/docs/components/location.md +9 -13
  711. package/docs/components/login.md +42 -36
  712. package/docs/components/map.md +24 -46
  713. package/docs/components/markdown.md +14 -25
  714. package/docs/components/masonry.md +15 -13
  715. package/docs/components/mentions.md +36 -25
  716. package/docs/components/menu.md +39 -46
  717. package/docs/components/message-strip.md +15 -51
  718. package/docs/components/metric-table.md +50 -72
  719. package/docs/components/modal.md +32 -43
  720. package/docs/components/music-player.md +41 -49
  721. package/docs/components/nav.md +23 -13
  722. package/docs/components/network-graph.md +14 -13
  723. package/docs/components/notification-center.md +68 -172
  724. package/docs/components/order-tracker.md +72 -117
  725. package/docs/components/org-chart.md +58 -207
  726. package/docs/components/pagination.md +67 -89
  727. package/docs/components/paint.md +86 -172
  728. package/docs/components/pdf-viewer.md +46 -151
  729. package/docs/components/permission-matrix.md +61 -112
  730. package/docs/components/podcast-player.md +41 -119
  731. package/docs/components/pricing-table.md +104 -147
  732. package/docs/components/product-card.md +94 -197
  733. package/docs/components/progress-ring.md +29 -32
  734. package/docs/components/progress.md +30 -61
  735. package/docs/components/qr-code.md +53 -61
  736. package/docs/components/qr-reader.md +53 -42
  737. package/docs/components/radio.md +42 -40
  738. package/docs/components/range-slider.md +41 -30
  739. package/docs/components/rating.md +50 -84
  740. package/docs/components/receipt.md +91 -129
  741. package/docs/components/recipe.md +107 -216
  742. package/docs/components/sankey.md +47 -83
  743. package/docs/components/scheduler.md +81 -184
  744. package/docs/components/segmented-control.md +48 -40
  745. package/docs/components/select.md +107 -129
  746. package/docs/components/skeleton.md +33 -47
  747. package/docs/components/slider.md +49 -53
  748. package/docs/components/sortable.md +43 -186
  749. package/docs/components/sparkline.md +26 -25
  750. package/docs/components/spinner.md +32 -37
  751. package/docs/components/split-button.md +43 -23
  752. package/docs/components/split-pane.md +41 -58
  753. package/docs/components/spotlight.md +53 -145
  754. package/docs/components/spreadsheet.md +84 -307
  755. package/docs/components/stat-group.md +27 -61
  756. package/docs/components/step-input.md +44 -41
  757. package/docs/components/stepper.md +55 -89
  758. package/docs/components/switch.md +39 -39
  759. package/docs/components/table.md +27 -32
  760. package/docs/components/tabs.md +36 -27
  761. package/docs/components/tag-input.md +50 -176
  762. package/docs/components/tag.md +12 -50
  763. package/docs/components/terminal.md +32 -37
  764. package/docs/components/testimonial.md +24 -81
  765. package/docs/components/textarea.md +9 -14
  766. package/docs/components/theme.md +10 -23
  767. package/docs/components/time-picker.md +48 -72
  768. package/docs/components/time-range-picker.md +22 -41
  769. package/docs/components/timeline.md +7 -14
  770. package/docs/components/timer.md +16 -32
  771. package/docs/components/toast.md +19 -45
  772. package/docs/components/tooltip.md +13 -115
  773. package/docs/components/tree.md +2 -19
  774. package/docs/components/treemap.md +19 -43
  775. package/docs/components/user-card.md +13 -22
  776. package/docs/components/video-player.md +53 -227
  777. package/docs/components/virtual-scroller.md +11 -44
  778. package/docs/components/waterfall.md +58 -137
  779. package/docs/components/weather.md +94 -153
  780. package/docs/components/work-order.md +56 -143
  781. package/docs/plans/2026-03-09-action-bar-design.md +104 -0
  782. package/docs/plans/2026-03-09-action-bar-plan.md +676 -0
  783. package/docs/plans/2026-03-10-grid-component-design.md +138 -0
  784. package/docs/plans/2026-03-10-grid-component-plan.md +716 -0
  785. package/docs/plans/2026-03-10-react-integration-design.md +166 -0
  786. package/docs/plans/2026-03-10-react-integration-plan.md +1178 -0
  787. package/docs/react-integration.md +508 -0
  788. package/docs/request-response.md +63 -0
  789. package/package.json +1 -1
  790. package/bin/templates/base/README.md +0 -33
  791. package/bin/templates/base/global.d.ts +0 -14
  792. package/bin/templates/base/index.html +0 -13
  793. package/bin/templates/base/package.json +0 -21
  794. package/bin/templates/base/src/components/counter-button.ts +0 -88
  795. package/bin/templates/base/src/components/counter-button.types.ts +0 -7
  796. package/bin/templates/base/src/components/feature-card.ts +0 -59
  797. package/bin/templates/base/src/components/feature-card.types.ts +0 -5
  798. package/bin/templates/base/src/controllers/counter-controller.ts +0 -24
  799. package/bin/templates/base/src/main.ts +0 -24
  800. package/bin/templates/base/src/pages/about-page.ts +0 -68
  801. package/bin/templates/base/src/pages/home-page.ts +0 -105
  802. package/bin/templates/base/src/pages/not-found-page.ts +0 -55
  803. package/bin/templates/base/src/router.ts +0 -9
  804. package/bin/templates/base/src/styles/global.css +0 -27
  805. package/bin/templates/base/src/types/api-response.ts +0 -5
  806. package/bin/templates/base/src/types/status.ts +0 -1
  807. package/bin/templates/base/src/types/theme.ts +0 -1
  808. package/bin/templates/base/src/types/user.ts +0 -5
  809. package/bin/templates/base/vite.config.ts +0 -38
  810. package/bin/templates/pwa/public/vite.svg +0 -1
  811. package/bin/templates/pwa/src/router.ts +0 -20
  812. package/bin/templates/pwa/src/styles/global.css +0 -64
  813. /package/bin/templates/{pwa → default}/README.md +0 -0
  814. /package/bin/templates/{pwa → default}/global.d.ts +0 -0
  815. /package/bin/templates/{pwa → default}/package.json +0 -0
  816. /package/bin/templates/{pwa → default}/public/icons/.gitkeep +0 -0
  817. /package/bin/templates/{base → default}/public/vite.svg +0 -0
  818. /package/bin/templates/{pwa → default}/src/fetcher.ts +0 -0
  819. /package/bin/templates/{pwa → default}/src/guards/auth.ts +0 -0
  820. /package/bin/templates/{pwa → default}/src/middleware/auth.ts +0 -0
  821. /package/bin/templates/{pwa → default}/src/middleware/retry.ts +0 -0
  822. /package/bin/templates/{pwa → default}/src/services/auth.ts +0 -0
  823. /package/bin/templates/{pwa → default}/src/services/jwt.ts +0 -0
  824. /package/bin/templates/{pwa → default}/src/services/storage.ts +0 -0
  825. /package/bin/templates/{pwa → default}/src/types/auth.ts +0 -0
  826. /package/bin/templates/{pwa → default}/src/types/notifications.ts +0 -0
  827. /package/bin/templates/{pwa → default}/tests/helpers/test-utils.ts +0 -0
  828. /package/bin/templates/{pwa → default}/tests/middleware/auth.test.ts +0 -0
  829. /package/bin/templates/{pwa → default}/tests/middleware/error.test.ts +0 -0
  830. /package/bin/templates/{pwa → default}/tests/middleware/retry.test.ts +0 -0
  831. /package/bin/templates/{pwa → default}/tests/services/auth.test.ts +0 -0
  832. /package/bin/templates/{pwa → default}/tests/services/jwt.test.ts +0 -0
  833. /package/bin/templates/{pwa → default}/tests/services/storage.test.ts +0 -0
  834. /package/bin/templates/{pwa → default}/vite.config.ts +0 -0
  835. /package/bin/templates/{pwa → default}/vitest.config.ts +0 -0
@@ -1,146 +1,104 @@
1
- <!-- AI: For a low-token version of this doc, use docs/ai/components/drawer.md instead -->
1
+ <!-- AI: For the AI-optimized version of this doc, see docs/ai/components/drawer.md -->
2
2
 
3
3
  # Drawer Component
4
+ `<snice-drawer>`
4
5
 
5
- The `<snice-drawer>` component provides a slide-out panel that appears from any side of the viewport. It's commonly used for navigation menus, filters, settings panels, or additional content that shouldn't occupy permanent screen space.
6
+ Slide-out panel from any viewport side with focus trap and dismissal options. Supports inline mode for persistent sidebars and responsive breakpoint switching.
6
7
 
7
8
  ## Table of Contents
8
9
  - [Properties](#properties)
9
10
  - [Methods](#methods)
10
11
  - [Events](#events)
11
12
  - [Slots](#slots)
13
+ - [CSS Custom Properties](#css-custom-properties)
12
14
  - [CSS Parts](#css-parts)
13
15
  - [Basic Usage](#basic-usage)
14
16
  - [Examples](#examples)
17
+ - [Keyboard Navigation](#keyboard-navigation)
15
18
  - [Accessibility](#accessibility)
16
- - [Behavior](#behavior)
17
- - [Browser Support](#browser-support)
18
19
 
19
20
  ## Properties
20
21
 
21
- | Property | Type | Default | Description |
22
- |----------|------|---------|-------------|
23
- | `open` | `boolean` | `false` | Whether the drawer is visible |
24
- | `position` | `'left' \| 'right' \| 'top' \| 'bottom'` | `'left'` | Side from which the drawer slides in |
25
- | `size` | `'small' \| 'medium' \| 'large' \| 'xl' \| 'xxl' \| 'xxxl' \| 'full'` | `'medium'` | Width/height of the drawer |
26
- | `noHeader` | `boolean` | `false` | Hide the header (title + close button) entirely |
27
- | `noFooter` | `boolean` | `false` | Hide the footer slot entirely |
28
- | `noBackdrop` | `boolean` | `false` | Hide the backdrop overlay |
29
- | `noBackdropDismiss` | `boolean` | `false` | Prevent closing when clicking backdrop |
30
- | `noEscapeDismiss` | `boolean` | `false` | Prevent closing with Escape key |
31
- | `noFocusTrap` | `boolean` | `false` | Disable focus trapping |
32
- | `persistent` | `boolean` | `false` | Hide close button and prevent all dismissal |
33
- | `pushContent` | `boolean` | `false` | Push main content instead of overlaying |
34
- | `contained` | `boolean` | `false` | Position relative to parent instead of viewport |
35
- | `inline` | `boolean` | `false` | Render in document flow as a persistent sidebar |
36
- | `breakpoint` | `number` | `0` | Viewport width (px) above which drawer switches to inline mode |
22
+ | Property | Attribute | Type | Default | Description |
23
+ |----------|-----------|------|---------|-------------|
24
+ | `open` | `open` | `boolean` | `false` | Whether the drawer is visible |
25
+ | `position` | `position` | `'left' \| 'right' \| 'top' \| 'bottom'` | `'left'` | Side from which the drawer slides in |
26
+ | `size` | `size` | `'small' \| 'medium' \| 'large' \| 'xl' \| 'xxl' \| 'xxxl' \| 'full'` | `'medium'` | Width/height of the drawer |
27
+ | `inline` | `inline` | `boolean` | `false` | Render in document flow as a persistent sidebar |
28
+ | `breakpoint` | `breakpoint` | `number` | `0` | Viewport width (px) above which drawer switches to inline mode |
29
+ | `noHeader` | `no-header` | `boolean` | `false` | Hide the header (title + close button) entirely |
30
+ | `noFooter` | `no-footer` | `boolean` | `false` | Hide the footer slot entirely |
31
+ | `noBackdrop` | `no-backdrop` | `boolean` | `false` | Hide the backdrop overlay |
32
+ | `noBackdropDismiss` | `no-backdrop-dismiss` | `boolean` | `false` | Prevent closing when clicking backdrop |
33
+ | `noEscapeDismiss` | `no-escape-dismiss` | `boolean` | `false` | Prevent closing with Escape key |
34
+ | `noFocusTrap` | `no-focus-trap` | `boolean` | `false` | Disable focus trapping |
35
+ | `persistent` | `persistent` | `boolean` | `false` | Hide close button and prevent all dismissal |
36
+ | `pushContent` | `push-content` | `boolean` | `false` | Push main content instead of overlaying |
37
+ | `contained` | `contained` | `boolean` | `false` | Position relative to parent instead of viewport |
37
38
 
38
39
  ## Methods
39
40
 
40
- ### `show(): void`
41
- Open the drawer.
42
-
43
- ```typescript
44
- drawer.show();
45
- ```
46
-
47
- ### `hide(): void`
48
- Close the drawer.
49
-
50
- ```typescript
51
- drawer.hide();
52
- ```
53
-
54
- ### `toggle(): void`
55
- Toggle the drawer open/closed state.
56
-
57
- ```typescript
58
- drawer.toggle();
59
- ```
41
+ | Method | Arguments | Description |
42
+ |--------|-----------|-------------|
43
+ | `show()` | -- | Open the drawer |
44
+ | `hide()` | -- | Close the drawer |
45
+ | `toggle()` | -- | Toggle the drawer open/closed state |
60
46
 
61
47
  ## Events
62
48
 
63
- ### `drawer-open`
64
- Fired when the drawer opens.
65
-
66
- **Event Detail:**
67
- ```typescript
68
- {
69
- drawer: SniceDrawerElement; // Reference to the drawer element
70
- }
71
- ```
72
-
73
- **Usage:**
74
- ```typescript
75
- drawer.addEventListener('drawer-open', (e) => {
76
- console.log('Drawer opened:', e.detail.drawer);
77
- });
78
- ```
79
-
80
- ### `drawer-close`
81
- Fired when the drawer closes.
82
-
83
- **Event Detail:**
84
- ```typescript
85
- {
86
- drawer: SniceDrawerElement; // Reference to the drawer element
87
- }
88
- ```
89
-
90
- **Usage:**
91
- ```typescript
92
- drawer.addEventListener('drawer-close', (e) => {
93
- console.log('Drawer closed:', e.detail.drawer);
94
- });
95
- ```
49
+ | Event | Detail | Description |
50
+ |-------|--------|-------------|
51
+ | `drawer-open` | `{ drawer }` | Fired when the drawer opens |
52
+ | `drawer-close` | `{ drawer }` | Fired when the drawer closes |
96
53
 
97
54
  ## Slots
98
55
 
99
- ### `title` (named slot)
100
- Content for the drawer header/title area.
101
-
102
- ```html
103
- <snice-drawer>
104
- <h2 slot="title">Drawer Title</h2>
105
- </snice-drawer>
106
- ```
107
-
108
- ### Default slot
109
- Main content of the drawer body.
110
-
111
- ```html
112
- <snice-drawer>
113
- <p>This goes in the body</p>
114
- </snice-drawer>
115
- ```
116
-
117
- ### `footer` (named slot)
118
- Content for the drawer footer. Typically used for action buttons.
119
-
120
- ```html
121
- <snice-drawer>
122
- <div slot="footer">
123
- <button>Action</button>
124
- </div>
125
- </snice-drawer>
126
- ```
56
+ | Name | Description |
57
+ |------|-------------|
58
+ | (default) | Main content of the drawer body |
59
+ | `title` | Content for the drawer header/title area |
60
+ | `footer` | Content for the drawer footer, typically action buttons |
61
+
62
+ ## CSS Custom Properties
63
+
64
+ | Property | Description | Default |
65
+ |----------|-------------|---------|
66
+ | `--drawer-width-small` | Small drawer width | `var(--snice-size-drawer-small, 15rem)` |
67
+ | `--drawer-width-medium` | Medium drawer width | `var(--snice-size-drawer-medium, 20rem)` |
68
+ | `--drawer-width-large` | Large drawer width | `var(--snice-size-drawer-large, 30rem)` |
69
+ | `--drawer-width-xl` | XL drawer width | `var(--snice-size-drawer-xl, 40rem)` |
70
+ | `--drawer-width-xxl` | XXL drawer width | `var(--snice-size-drawer-xxl, 50rem)` |
71
+ | `--drawer-width-xxxl` | XXXL drawer width | `var(--snice-size-drawer-xxxl, 60rem)` |
72
+ | `--drawer-height-small` | Small drawer height (top/bottom) | `12.5rem` |
73
+ | `--drawer-height-medium` | Medium drawer height (top/bottom) | `25rem` |
74
+ | `--drawer-height-large` | Large drawer height (top/bottom) | `37.5rem` |
75
+ | `--drawer-height-xl` | XL drawer height (top/bottom) | `70vh` |
76
+ | `--drawer-height-xxl` | XXL drawer height (top/bottom) | `80vh` |
77
+ | `--drawer-height-xxxl` | XXXL drawer height (top/bottom) | `90vh` |
78
+ | `--drawer-bg` | Drawer background color | `var(--snice-color-background, white)` |
79
+ | `--drawer-shadow` | Drawer shadow | `var(--snice-shadow-lg)` |
80
+ | `--drawer-backdrop` | Backdrop color | `rgba(0, 0, 0, 0.5)` |
81
+ | `--drawer-transition` | Transition timing | `transform 250ms cubic-bezier(0.4, 0, 0.2, 1)` |
82
+ | `--drawer-z-index` | Z-index | `var(--snice-z-index-modal, 1050)` |
127
83
 
128
84
  ## CSS Parts
129
85
 
130
- Style internal elements from outside the shadow DOM using `::part()`.
131
-
132
- | Part | Element | Description |
133
- |------|---------|-------------|
134
- | `backdrop` | `<div>` | Backdrop overlay |
135
- | `base` | `<div>` | The drawer panel container |
136
- | `header` | `<div>` | Header section |
137
- | `title` | `<h2>` | Title wrapper |
138
- | `close` | `<button>` | Close button |
139
- | `body` | `<div>` | Body content section |
140
- | `footer` | `<div>` | Footer section |
86
+ | Part | Description |
87
+ |------|-------------|
88
+ | `backdrop` | Backdrop overlay |
89
+ | `base` | The drawer panel container |
90
+ | `header` | Header section |
91
+ | `title` | Title wrapper (h2) |
92
+ | `close` | Close button |
93
+ | `body` | Body content section |
94
+ | `footer` | Footer section |
141
95
 
142
96
  ## Basic Usage
143
97
 
98
+ ```typescript
99
+ import 'snice/components/drawer/snice-drawer';
100
+ ```
101
+
144
102
  ```html
145
103
  <button id="openDrawer">Open Drawer</button>
146
104
 
@@ -160,55 +118,37 @@ Style internal elements from outside the shadow DOM using `::part()`.
160
118
  ```
161
119
 
162
120
  ```typescript
163
- import 'snice/components/drawer/snice-drawer';
164
-
165
121
  openDrawer.addEventListener('click', () => myDrawer.show());
166
122
  ```
167
123
 
168
- ## Examples
169
-
170
- ### Basic Drawer
171
-
124
+ **CDN**
172
125
  ```html
173
- <button id="toggle">Toggle Drawer</button>
174
-
175
- <snice-drawer id="drawer">
176
- <h2 slot="title">Navigation</h2>
177
-
178
- <nav>
179
- <a href="/">Home</a>
180
- <a href="/products">Products</a>
181
- <a href="/about">About</a>
182
- </nav>
183
- </snice-drawer>
126
+ <script src="snice-runtime.min.js"></script>
127
+ <script src="snice-drawer.min.js"></script>
184
128
  ```
185
129
 
186
- ```typescript
187
- toggle.addEventListener('click', () => drawer.toggle());
188
- ```
130
+ ## Examples
189
131
 
190
132
  ### Position Variants
191
133
 
134
+ Use the `position` attribute to control which side the drawer slides in from.
135
+
192
136
  ```html
193
- <!-- Left (default) -->
194
137
  <snice-drawer position="left">
195
138
  <h2 slot="title">Left Drawer</h2>
196
139
  <p>Slides in from the left</p>
197
140
  </snice-drawer>
198
141
 
199
- <!-- Right -->
200
142
  <snice-drawer position="right">
201
143
  <h2 slot="title">Right Drawer</h2>
202
144
  <p>Slides in from the right</p>
203
145
  </snice-drawer>
204
146
 
205
- <!-- Top -->
206
147
  <snice-drawer position="top">
207
148
  <h2 slot="title">Top Drawer</h2>
208
149
  <p>Slides in from the top</p>
209
150
  </snice-drawer>
210
151
 
211
- <!-- Bottom -->
212
152
  <snice-drawer position="bottom">
213
153
  <h2 slot="title">Bottom Drawer</h2>
214
154
  <p>Slides in from the bottom</p>
@@ -217,35 +157,20 @@ toggle.addEventListener('click', () => drawer.toggle());
217
157
 
218
158
  ### Size Variants
219
159
 
220
- ```html
221
- <!-- Small -->
222
- <snice-drawer size="small">
223
- <h2 slot="title">Small Drawer</h2>
224
- </snice-drawer>
160
+ Use the `size` attribute to control the drawer's width (or height for top/bottom).
225
161
 
226
- <!-- Medium (default) -->
227
- <snice-drawer size="medium">
228
- <h2 slot="title">Medium Drawer</h2>
229
- </snice-drawer>
230
-
231
- <!-- Large -->
232
- <snice-drawer size="large">
233
- <h2 slot="title">Large Drawer</h2>
234
- </snice-drawer>
235
-
236
- <!-- Extra Large -->
237
- <snice-drawer size="xl">
238
- <h2 slot="title">XL Drawer</h2>
239
- </snice-drawer>
240
-
241
- <!-- Full Width/Height -->
242
- <snice-drawer size="full">
243
- <h2 slot="title">Full Drawer</h2>
244
- </snice-drawer>
162
+ ```html
163
+ <snice-drawer size="small"><h2 slot="title">Small</h2></snice-drawer>
164
+ <snice-drawer size="medium"><h2 slot="title">Medium</h2></snice-drawer>
165
+ <snice-drawer size="large"><h2 slot="title">Large</h2></snice-drawer>
166
+ <snice-drawer size="xl"><h2 slot="title">XL</h2></snice-drawer>
167
+ <snice-drawer size="full"><h2 slot="title">Full</h2></snice-drawer>
245
168
  ```
246
169
 
247
170
  ### Without Backdrop
248
171
 
172
+ Set `no-backdrop` to remove the background overlay.
173
+
249
174
  ```html
250
175
  <snice-drawer no-backdrop>
251
176
  <h2 slot="title">No Backdrop</h2>
@@ -255,6 +180,8 @@ toggle.addEventListener('click', () => drawer.toggle());
255
180
 
256
181
  ### Persistent Drawer
257
182
 
183
+ Set `persistent` to hide the close button and prevent all user-initiated dismissal.
184
+
258
185
  ```html
259
186
  <snice-drawer persistent>
260
187
  <h2 slot="title">Persistent Drawer</h2>
@@ -264,7 +191,7 @@ toggle.addEventListener('click', () => drawer.toggle());
264
191
 
265
192
  ### Push Content
266
193
 
267
- Use `<snice-drawer-target>` to wrap content that should be pushed aside when a drawer opens. Link it to a drawer using the `for` attribute.
194
+ Use `<snice-drawer-target>` to wrap content that should be pushed aside when a drawer opens.
268
195
 
269
196
  ```html
270
197
  <div style="position: relative; height: 400px; overflow: hidden;">
@@ -285,23 +212,18 @@ Use `<snice-drawer-target>` to wrap content that should be pushed aside when a d
285
212
  </div>
286
213
  ```
287
214
 
288
- The `<snice-drawer-target>` component:
289
- - Watches the linked drawer's `open` attribute via MutationObserver
290
- - Measures the drawer panel's actual width/height
291
- - Applies a smooth `translateX()` or `translateY()` transform
292
- - Automatically resets when the drawer closes
293
- - Handles `overflow:hidden` parent scroll reset
294
-
295
215
  #### Drawer Target Properties
296
216
 
297
217
  | Property | Type | Default | Description |
298
218
  |----------|------|---------|-------------|
299
219
  | `for` | `string` | `''` | ID of the linked `<snice-drawer>` element |
300
- | `push` | `string` | `''` | Current push amount (e.g. `'240px'`). Set automatically when linked to a drawer, or set manually for custom control. |
220
+ | `push` | `string` | `''` | Current push amount (e.g. `'240px'`), set automatically |
221
+
222
+ The target watches the drawer's `open` attribute via MutationObserver, measures the drawer panel's width/height, and applies a smooth CSS transform.
301
223
 
302
224
  ### Inline Mode
303
225
 
304
- The `inline` attribute renders the drawer directly in the document flow as a persistent sidebar. No overlay, backdrop, focus trap, or escape handler is used. The drawer is always visible and participates in the parent's layout.
226
+ Set `inline` to render the drawer as a persistent sidebar in document flow.
305
227
 
306
228
  ```html
307
229
  <div style="display: flex; height: 100vh;">
@@ -316,73 +238,40 @@ The `inline` attribute renders the drawer directly in the document flow as a per
316
238
 
317
239
  <main style="flex: 1; padding: 1rem;">
318
240
  <h1>Main Content</h1>
319
- <p>The sidebar sits alongside this content.</p>
320
241
  </main>
321
242
  </div>
322
243
  ```
323
244
 
324
- A border separator is automatically applied based on the `position`:
325
- - `left` → right border
326
- - `right` → left border
327
- - `top` → bottom border
328
- - `bottom` → top border
245
+ In inline mode: no overlay, backdrop, focus trap, or escape handler. A border separator is applied based on position (left = right border, etc.).
329
246
 
330
247
  ### Responsive Breakpoint
331
248
 
332
- The `breakpoint` attribute enables responsive behavior: the drawer renders inline when the viewport is at or above the specified width (in pixels), and switches to a standard overlay drawer below it.
249
+ Use `breakpoint` to switch between inline (above breakpoint) and overlay (below breakpoint) modes.
333
250
 
334
251
  ```html
335
- <!-- Inline sidebar on desktop (≥768px), overlay drawer on mobile (<768px) -->
336
252
  <snice-drawer breakpoint="768" position="left" size="small">
337
253
  <span slot="title">Navigation</span>
338
254
  <nav>
339
255
  <a href="/">Home</a>
340
256
  <a href="/products">Products</a>
341
- <a href="/settings">Settings</a>
342
257
  </nav>
343
258
  </snice-drawer>
344
259
  ```
345
260
 
346
- The breakpoint uses `window.matchMedia` internally. When the viewport crosses the breakpoint:
347
- - **Above breakpoint**: The `inline` attribute is set automatically. Overlay behaviors (backdrop, focus trap, escape handler) are torn down.
348
- - **Below breakpoint**: The `inline` attribute is removed. The drawer reverts to standard overlay mode.
349
-
350
- You can combine `breakpoint` with `open` to control the overlay state on mobile:
351
-
352
- ```html
353
- <snice-drawer id="nav" breakpoint="1024" position="left" size="small">
354
- <span slot="title">Menu</span>
355
- <nav>...</nav>
356
- </snice-drawer>
357
-
358
- <button onclick="document.getElementById('nav').toggle()">
359
- Toggle Menu
360
- </button>
361
- ```
261
+ Uses `window.matchMedia` internally. Above the breakpoint, the `inline` attribute is set automatically. Below, it reverts to overlay mode.
362
262
 
363
263
  ### Filters Panel
364
264
 
365
- ```html
366
- <button id="showFilters">Show Filters</button>
265
+ Use a right-side drawer for filter controls.
367
266
 
267
+ ```html
368
268
  <snice-drawer id="filtersDrawer" position="right" size="small">
369
269
  <h2 slot="title">Filters</h2>
370
270
 
371
271
  <div style="display: flex; flex-direction: column; gap: 1rem;">
372
- <div>
373
- <label>
374
- <input type="checkbox"> In Stock
375
- </label>
376
- </div>
377
- <div>
378
- <label>
379
- <input type="checkbox"> On Sale
380
- </label>
381
- </div>
382
- <div>
383
- <label>Price Range</label>
384
- <input type="range" min="0" max="1000">
385
- </div>
272
+ <label><input type="checkbox"> In Stock</label>
273
+ <label><input type="checkbox"> On Sale</label>
274
+ <label>Price Range <input type="range" min="0" max="1000"></label>
386
275
  </div>
387
276
 
388
277
  <div slot="footer">
@@ -391,286 +280,32 @@ You can combine `breakpoint` with `open` to control the overlay state on mobile:
391
280
  </snice-drawer>
392
281
  ```
393
282
 
394
- ```typescript
395
- showFilters.addEventListener('click', () => filtersDrawer.show());
396
- ```
397
-
398
- ### Settings Panel
399
-
400
- ```html
401
- <button id="showSettings">Settings</button>
402
-
403
- <snice-drawer id="settingsDrawer" position="right">
404
- <h2 slot="title">Settings</h2>
405
-
406
- <form id="settingsForm">
407
- <div style="display: flex; flex-direction: column; gap: 1rem;">
408
- <div>
409
- <label for="theme">Theme</label>
410
- <select id="theme" name="theme">
411
- <option>Light</option>
412
- <option>Dark</option>
413
- <option>Auto</option>
414
- </select>
415
- </div>
416
-
417
- <div>
418
- <label>
419
- <input type="checkbox" name="notifications">
420
- Enable notifications
421
- </label>
422
- </div>
423
-
424
- <div>
425
- <label>
426
- <input type="checkbox" name="autoSave">
427
- Auto-save
428
- </label>
429
- </div>
430
- </div>
431
- </form>
432
-
433
- <div slot="footer">
434
- <button type="button" onclick="this.closest('snice-drawer').hide()">
435
- Cancel
436
- </button>
437
- <button type="submit" form="settingsForm">
438
- Save
439
- </button>
440
- </div>
441
- </snice-drawer>
442
- ```
443
-
444
- ```typescript
445
- showSettings.addEventListener('click', () => settingsDrawer.show());
446
-
447
- settingsForm.addEventListener('submit', (e) => {
448
- e.preventDefault();
449
- const data = new FormData(settingsForm);
450
- console.log('Settings:', Object.fromEntries(data));
451
- settingsDrawer.hide();
452
- });
453
- ```
454
-
455
- ### Mobile Navigation
456
-
457
- ```html
458
- <button id="menuBtn">Menu</button>
459
-
460
- <snice-drawer id="navDrawer" position="left" size="medium">
461
- <h2 slot="title">Menu</h2>
462
-
463
- <nav style="display: flex; flex-direction: column; gap: 0.5rem;">
464
- <a href="/" style="padding: 0.5rem;">Home</a>
465
- <a href="/products" style="padding: 0.5rem;">Products</a>
466
- <a href="/services" style="padding: 0.5rem;">Services</a>
467
- <a href="/about" style="padding: 0.5rem;">About</a>
468
- <a href="/contact" style="padding: 0.5rem;">Contact</a>
469
- </nav>
470
- </snice-drawer>
471
- ```
472
-
473
- ```typescript
474
- menuBtn.addEventListener('click', () => navDrawer.show());
475
-
476
- // Close drawer when clicking a link
477
- navDrawer.querySelectorAll('a').forEach(link => {
478
- link.addEventListener('click', () => navDrawer.hide());
479
- });
480
- ```
283
+ ### Event Handling
481
284
 
482
- ### With Event Handling
285
+ Listen for open/close events.
483
286
 
484
287
  ```typescript
485
288
  drawer.addEventListener('drawer-open', () => {
486
289
  console.log('Drawer opened');
487
- // Pause video, load content, etc.
488
290
  });
489
291
 
490
292
  drawer.addEventListener('drawer-close', () => {
491
293
  console.log('Drawer closed');
492
- // Resume video, save state, etc.
493
294
  });
494
-
495
- // Programmatic control
496
- drawer.show();
497
- drawer.hide();
498
- drawer.toggle();
499
295
  ```
500
296
 
501
- ### Dynamic Content Loading
502
-
503
- ```html
504
- <button id="showDetails">Show Details</button>
505
-
506
- <snice-drawer id="detailsDrawer" position="right">
507
- <h2 slot="title" id="itemTitle">Loading...</h2>
508
-
509
- <div id="itemContent">
510
- <p>Loading...</p>
511
- </div>
512
- </snice-drawer>
513
- ```
514
-
515
- ```typescript
516
- showDetails.addEventListener('click', async () => {
517
- detailsDrawer.show();
518
-
519
- // Fetch data
520
- const response = await fetch('/api/item/123');
521
- const item = await response.json();
522
-
523
- // Update content
524
- itemTitle.textContent = item.name;
525
- itemContent.innerHTML = `
526
- <dl>
527
- <dt>Price:</dt>
528
- <dd>$${item.price}</dd>
529
- <dt>Description:</dt>
530
- <dd>${item.description}</dd>
531
- </dl>
532
- `;
533
- });
534
- ```
535
-
536
- ### Complete Example
537
-
538
- ```html
539
- <!DOCTYPE html>
540
- <html>
541
- <head>
542
- <style>
543
- body {
544
- margin: 0;
545
- font-family: system-ui;
546
- }
547
-
548
- .app-header {
549
- padding: 1rem;
550
- background: #1f2937;
551
- color: white;
552
- display: flex;
553
- align-items: center;
554
- gap: 1rem;
555
- }
556
-
557
- .content {
558
- padding: 2rem;
559
- }
560
-
561
- snice-drawer nav {
562
- display: flex;
563
- flex-direction: column;
564
- }
565
-
566
- snice-drawer nav a {
567
- padding: 0.75rem 1rem;
568
- text-decoration: none;
569
- color: inherit;
570
- border-radius: 4px;
571
- }
572
-
573
- snice-drawer nav a:hover {
574
- background: #f3f4f6;
575
- }
576
- </style>
577
-
578
- <script type="module">
579
- import 'snice/components/drawer/snice-drawer';
580
-
581
- menuBtn.addEventListener('click', () => navDrawer.show());
582
-
583
- // Close drawer on link click
584
- navDrawer.querySelectorAll('a').forEach(link => {
585
- link.addEventListener('click', (e) => {
586
- e.preventDefault();
587
- navDrawer.hide();
588
- console.log('Navigate to:', link.getAttribute('href'));
589
- });
590
- });
591
- </script>
592
- </head>
593
- <body>
594
- <header class="app-header">
595
- <button id="menuBtn">☰ Menu</button>
596
- <h1>My App</h1>
597
- </header>
598
-
599
- <main class="content">
600
- <h2>Welcome</h2>
601
- <p>Click the menu button to open the navigation drawer.</p>
602
- </main>
603
-
604
- <snice-drawer id="navDrawer" position="left" size="medium">
605
- <h2 slot="title">Navigation</h2>
297
+ ## Keyboard Navigation
606
298
 
607
- <nav>
608
- <a href="/">🏠 Home</a>
609
- <a href="/dashboard">📊 Dashboard</a>
610
- <a href="/products">📦 Products</a>
611
- <a href="/orders">📋 Orders</a>
612
- <a href="/customers">👥 Customers</a>
613
- <a href="/analytics">📈 Analytics</a>
614
- <a href="/settings">⚙️ Settings</a>
615
- </nav>
616
-
617
- <div slot="footer">
618
- <button onclick="this.closest('snice-drawer').hide()">
619
- Close
620
- </button>
621
- </div>
622
- </snice-drawer>
623
- </body>
624
- </html>
625
- ```
299
+ - **Escape** - Close drawer (unless `no-escape-dismiss` or `persistent`)
300
+ - **Tab** - Cycle through focusable elements within drawer (trapped)
301
+ - **Shift + Tab** - Reverse cycle through focusable elements
626
302
 
627
303
  ## Accessibility
628
304
 
629
- The drawer component includes comprehensive accessibility features:
630
-
631
- - `role="dialog"` on the drawer container
632
- - `aria-modal="true"` to indicate modal behavior
633
- - `aria-hidden` reflects visibility state
634
- - Focus trap keeps keyboard navigation within drawer
635
- - Focus restoration returns focus to trigger element on close
636
- - Escape key support for closing
637
- - Close button is keyboard accessible
638
-
639
- ### Keyboard Support
640
-
641
- - **Escape**: Close drawer (unless `noEscapeDismiss` or `persistent` is true)
642
- - **Tab**: Cycle through focusable elements within drawer (trapped)
643
- - **Shift + Tab**: Reverse cycle through focusable elements
644
-
645
- ## Behavior
646
-
647
- ### Focus Management
648
-
649
- When a drawer opens:
650
- 1. Current focus is stored
651
- 2. Focus moves to the drawer container
652
- 3. Tab navigation is trapped within the drawer (unless `noFocusTrap` is true)
653
-
654
- When a drawer closes:
655
- 1. Focus returns to the previously focused element
656
-
657
- ### Dismissal
658
-
659
- By default, drawers can be dismissed by:
660
- - Clicking the close button
661
- - Clicking the backdrop
662
- - Pressing Escape
663
-
664
- This behavior can be customized:
665
- - `noBackdropDismiss`: Prevents backdrop click dismissal
666
- - `noEscapeDismiss`: Prevents Escape key dismissal
667
- - `persistent`: Hides close button and prevents all dismissal
668
-
669
- ### Push Content Mode
670
-
671
- When `push-content` is set on a drawer, use `<snice-drawer-target for="drawer-id">` to wrap the content that should be pushed aside. The target element watches the drawer's open state and applies a CSS transform to slide its contents. This approach uses transforms (not margins) for smooth 60fps animations and avoids layout thrash.
672
-
673
- ## Browser Support
674
-
675
- - Modern browsers (Chrome, Firefox, Safari, Edge)
676
- - Requires Custom Elements v1 and Shadow DOM support
305
+ - `role="dialog"` and `aria-modal="true"` on the drawer container
306
+ - `aria-hidden` reflects visibility state on the host element
307
+ - Focus trap keeps keyboard navigation within the drawer
308
+ - Focus restoration returns focus to the trigger element on close
309
+ - Escape key support for closing (configurable)
310
+ - Close button is keyboard accessible with `aria-label="Close"`
311
+ - Contained mode skips focus trap and body scroll lock (in-page, not modal)