snice 4.27.0 → 4.29.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 (624) hide show
  1. package/adapters/react/action-bar.d.ts +30 -0
  2. package/adapters/react/action-bar.d.ts.map +1 -0
  3. package/adapters/react/action-bar.js +24 -0
  4. package/adapters/react/action-bar.js.map +1 -0
  5. package/adapters/react/action-bar.tsx +38 -0
  6. package/adapters/react/binpack.d.ts +35 -0
  7. package/adapters/react/binpack.d.ts.map +1 -0
  8. package/adapters/react/binpack.js +24 -0
  9. package/adapters/react/binpack.js.map +1 -0
  10. package/adapters/react/binpack.tsx +43 -0
  11. package/adapters/react/components.d.ts +4 -0
  12. package/adapters/react/components.d.ts.map +1 -1
  13. package/adapters/react/components.js +2 -0
  14. package/adapters/react/components.js.map +1 -1
  15. package/adapters/react/components.ts +4 -0
  16. package/adapters/react/useRequestHandler.d.ts +56 -0
  17. package/adapters/react/useRequestHandler.js +103 -0
  18. package/adapters/react/useRequestHandler.js.map +1 -0
  19. package/dist/cdn/accordion/snice-accordion.js +1 -1
  20. package/dist/cdn/accordion/snice-accordion.min.js +1 -1
  21. package/dist/cdn/action-bar/README.md +27 -0
  22. package/dist/cdn/action-bar/snice-action-bar.js +249 -0
  23. package/dist/cdn/action-bar/snice-action-bar.js.map +1 -0
  24. package/dist/cdn/action-bar/snice-action-bar.min.js +12 -0
  25. package/dist/cdn/action-bar/snice-action-bar.min.js.map +1 -0
  26. package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
  27. package/dist/cdn/activity-feed/snice-activity-feed.min.js +1 -1
  28. package/dist/cdn/alert/snice-alert.js +1 -1
  29. package/dist/cdn/alert/snice-alert.min.js +1 -1
  30. package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
  31. package/dist/cdn/app-tiles/snice-app-tiles.min.js +1 -1
  32. package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
  33. package/dist/cdn/approval-flow/snice-approval-flow.min.js +1 -1
  34. package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
  35. package/dist/cdn/audio-recorder/snice-audio-recorder.min.js +1 -1
  36. package/dist/cdn/availability/snice-availability.js +1 -1
  37. package/dist/cdn/availability/snice-availability.min.js +1 -1
  38. package/dist/cdn/avatar/snice-avatar.js +1 -1
  39. package/dist/cdn/avatar/snice-avatar.min.js +1 -1
  40. package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
  41. package/dist/cdn/avatar-group/snice-avatar-group.min.js +1 -1
  42. package/dist/cdn/badge/snice-badge.js +2 -2
  43. package/dist/cdn/badge/snice-badge.js.map +1 -1
  44. package/dist/cdn/badge/snice-badge.min.js +2 -2
  45. package/dist/cdn/badge/snice-badge.min.js.map +1 -1
  46. package/dist/cdn/banner/snice-banner.js +1 -1
  47. package/dist/cdn/banner/snice-banner.min.js +1 -1
  48. package/dist/cdn/binpack/README.md +27 -0
  49. package/dist/cdn/binpack/snice-binpack.js +1037 -0
  50. package/dist/cdn/binpack/snice-binpack.js.map +1 -0
  51. package/dist/cdn/binpack/snice-binpack.min.js +13 -0
  52. package/dist/cdn/binpack/snice-binpack.min.js.map +1 -0
  53. package/dist/cdn/book/snice-book.js +1 -1
  54. package/dist/cdn/book/snice-book.min.js +1 -1
  55. package/dist/cdn/booking/snice-booking.js +1 -1
  56. package/dist/cdn/booking/snice-booking.min.js +1 -1
  57. package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
  58. package/dist/cdn/breadcrumbs/snice-breadcrumbs.min.js +1 -1
  59. package/dist/cdn/button/README.md +1 -1
  60. package/dist/cdn/button/snice-button.js +11 -10
  61. package/dist/cdn/button/snice-button.js.map +1 -1
  62. package/dist/cdn/button/snice-button.min.js +3 -3
  63. package/dist/cdn/button/snice-button.min.js.map +1 -1
  64. package/dist/cdn/calendar/snice-calendar.js +1 -1
  65. package/dist/cdn/calendar/snice-calendar.min.js +1 -1
  66. package/dist/cdn/camera/snice-camera.js +1 -1
  67. package/dist/cdn/camera/snice-camera.min.js +1 -1
  68. package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
  69. package/dist/cdn/camera-annotate/snice-camera-annotate.min.js +1 -1
  70. package/dist/cdn/candlestick/snice-candlestick.js +1 -1
  71. package/dist/cdn/candlestick/snice-candlestick.min.js +1 -1
  72. package/dist/cdn/card/snice-card.js +1 -1
  73. package/dist/cdn/card/snice-card.min.js +1 -1
  74. package/dist/cdn/carousel/snice-carousel.js +1 -1
  75. package/dist/cdn/carousel/snice-carousel.min.js +1 -1
  76. package/dist/cdn/cart/snice-cart.js +1 -1
  77. package/dist/cdn/cart/snice-cart.min.js +1 -1
  78. package/dist/cdn/chart/snice-chart.js +1 -1
  79. package/dist/cdn/chart/snice-chart.min.js +1 -1
  80. package/dist/cdn/chat/snice-chat.js +1 -1
  81. package/dist/cdn/chat/snice-chat.min.js +1 -1
  82. package/dist/cdn/checkbox/snice-checkbox.js +1 -1
  83. package/dist/cdn/checkbox/snice-checkbox.min.js +1 -1
  84. package/dist/cdn/chip/snice-chip.js +1 -1
  85. package/dist/cdn/chip/snice-chip.min.js +1 -1
  86. package/dist/cdn/code-block/snice-code-block.js +1 -1
  87. package/dist/cdn/code-block/snice-code-block.min.js +1 -1
  88. package/dist/cdn/color-display/snice-color-display.js +1 -1
  89. package/dist/cdn/color-display/snice-color-display.min.js +1 -1
  90. package/dist/cdn/color-picker/snice-color-picker.js +1 -1
  91. package/dist/cdn/color-picker/snice-color-picker.min.js +1 -1
  92. package/dist/cdn/command-palette/snice-command-palette.js +1 -1
  93. package/dist/cdn/command-palette/snice-command-palette.min.js +1 -1
  94. package/dist/cdn/comments/snice-comments.js +1 -1
  95. package/dist/cdn/comments/snice-comments.min.js +1 -1
  96. package/dist/cdn/countdown/snice-countdown.js +1 -1
  97. package/dist/cdn/countdown/snice-countdown.min.js +1 -1
  98. package/dist/cdn/cropper/snice-cropper.js +1 -1
  99. package/dist/cdn/cropper/snice-cropper.min.js +1 -1
  100. package/dist/cdn/data-card/snice-data-card.js +1 -1
  101. package/dist/cdn/data-card/snice-data-card.min.js +1 -1
  102. package/dist/cdn/date-picker/snice-date-picker.js +1 -1
  103. package/dist/cdn/date-picker/snice-date-picker.min.js +1 -1
  104. package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
  105. package/dist/cdn/date-range-picker/snice-date-range-picker.min.js +1 -1
  106. package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
  107. package/dist/cdn/date-time-picker/snice-date-time-picker.min.js +1 -1
  108. package/dist/cdn/diff/snice-diff.js +1 -1
  109. package/dist/cdn/diff/snice-diff.min.js +1 -1
  110. package/dist/cdn/divider/snice-divider.js +1 -1
  111. package/dist/cdn/divider/snice-divider.min.js +1 -1
  112. package/dist/cdn/doc/snice-doc.js +1 -1
  113. package/dist/cdn/doc/snice-doc.min.js +1 -1
  114. package/dist/cdn/draw/snice-draw.js +1 -1
  115. package/dist/cdn/draw/snice-draw.min.js +1 -1
  116. package/dist/cdn/drawer/snice-drawer.js +1 -1
  117. package/dist/cdn/drawer/snice-drawer.min.js +1 -1
  118. package/dist/cdn/empty-state/snice-empty-state.js +1 -1
  119. package/dist/cdn/empty-state/snice-empty-state.min.js +1 -1
  120. package/dist/cdn/estimate/snice-estimate.js +1 -1
  121. package/dist/cdn/estimate/snice-estimate.min.js +1 -1
  122. package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
  123. package/dist/cdn/file-gallery/snice-file-gallery.min.js +1 -1
  124. package/dist/cdn/file-upload/snice-file-upload.js +1 -1
  125. package/dist/cdn/file-upload/snice-file-upload.min.js +1 -1
  126. package/dist/cdn/flip-card/snice-flip-card.js +1 -1
  127. package/dist/cdn/flip-card/snice-flip-card.min.js +1 -1
  128. package/dist/cdn/flow/snice-flow.js +1 -1
  129. package/dist/cdn/flow/snice-flow.min.js +1 -1
  130. package/dist/cdn/form-layout/snice-form-layout.js +1 -1
  131. package/dist/cdn/form-layout/snice-form-layout.min.js +1 -1
  132. package/dist/cdn/funnel/snice-funnel.js +1 -1
  133. package/dist/cdn/funnel/snice-funnel.min.js +1 -1
  134. package/dist/cdn/gantt/snice-gantt.js +1 -1
  135. package/dist/cdn/gantt/snice-gantt.min.js +1 -1
  136. package/dist/cdn/gauge/snice-gauge.js +1 -1
  137. package/dist/cdn/gauge/snice-gauge.min.js +1 -1
  138. package/dist/cdn/heatmap/snice-heatmap.js +1 -1
  139. package/dist/cdn/heatmap/snice-heatmap.min.js +1 -1
  140. package/dist/cdn/image/snice-image.js +1 -1
  141. package/dist/cdn/image/snice-image.min.js +1 -1
  142. package/dist/cdn/input/snice-input.js +1 -1
  143. package/dist/cdn/input/snice-input.min.js +1 -1
  144. package/dist/cdn/invoice/snice-invoice.js +1 -1
  145. package/dist/cdn/invoice/snice-invoice.min.js +1 -1
  146. package/dist/cdn/kanban/snice-kanban.js +1 -1
  147. package/dist/cdn/kanban/snice-kanban.min.js +1 -1
  148. package/dist/cdn/key-value/snice-key-value.js +1 -1
  149. package/dist/cdn/key-value/snice-key-value.min.js +1 -1
  150. package/dist/cdn/kpi/snice-kpi.js +1 -1
  151. package/dist/cdn/kpi/snice-kpi.min.js +1 -1
  152. package/dist/cdn/layout/snice-layout.js +1 -1
  153. package/dist/cdn/layout/snice-layout.min.js +1 -1
  154. package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
  155. package/dist/cdn/leaderboard/snice-leaderboard.min.js +1 -1
  156. package/dist/cdn/link/snice-link.js +1 -1
  157. package/dist/cdn/link/snice-link.min.js +1 -1
  158. package/dist/cdn/link-preview/snice-link-preview.js +1 -1
  159. package/dist/cdn/link-preview/snice-link-preview.min.js +1 -1
  160. package/dist/cdn/list/snice-list.js +1 -1
  161. package/dist/cdn/list/snice-list.min.js +1 -1
  162. package/dist/cdn/location/snice-location.js +1 -1
  163. package/dist/cdn/location/snice-location.min.js +1 -1
  164. package/dist/cdn/login/README.md +2 -2
  165. package/dist/cdn/login/snice-login.js +11 -10
  166. package/dist/cdn/login/snice-login.js.map +1 -1
  167. package/dist/cdn/login/snice-login.min.js +5 -5
  168. package/dist/cdn/login/snice-login.min.js.map +1 -1
  169. package/dist/cdn/map/snice-map.js +1 -1
  170. package/dist/cdn/map/snice-map.min.js +1 -1
  171. package/dist/cdn/markdown/snice-markdown.js +1 -1
  172. package/dist/cdn/markdown/snice-markdown.min.js +1 -1
  173. package/dist/cdn/masonry/snice-masonry.js +1 -1
  174. package/dist/cdn/masonry/snice-masonry.min.js +1 -1
  175. package/dist/cdn/menu/snice-menu.js +1 -1
  176. package/dist/cdn/menu/snice-menu.min.js +1 -1
  177. package/dist/cdn/message-strip/snice-message-strip.js +1 -1
  178. package/dist/cdn/message-strip/snice-message-strip.min.js +1 -1
  179. package/dist/cdn/metric-table/snice-metric-table.js +1 -1
  180. package/dist/cdn/metric-table/snice-metric-table.min.js +1 -1
  181. package/dist/cdn/modal/snice-modal.js +1 -1
  182. package/dist/cdn/modal/snice-modal.min.js +1 -1
  183. package/dist/cdn/music-player/snice-music-player.js +1 -1
  184. package/dist/cdn/music-player/snice-music-player.min.js +1 -1
  185. package/dist/cdn/nav/snice-nav.js +1 -1
  186. package/dist/cdn/nav/snice-nav.min.js +1 -1
  187. package/dist/cdn/network-graph/snice-network-graph.js +1 -1
  188. package/dist/cdn/network-graph/snice-network-graph.min.js +1 -1
  189. package/dist/cdn/notification-center/snice-notification-center.js +1 -1
  190. package/dist/cdn/notification-center/snice-notification-center.min.js +1 -1
  191. package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
  192. package/dist/cdn/order-tracker/snice-order-tracker.min.js +1 -1
  193. package/dist/cdn/org-chart/snice-org-chart.js +1 -1
  194. package/dist/cdn/org-chart/snice-org-chart.min.js +1 -1
  195. package/dist/cdn/pagination/snice-pagination.js +1 -1
  196. package/dist/cdn/pagination/snice-pagination.min.js +1 -1
  197. package/dist/cdn/paint/snice-paint.js +1 -1
  198. package/dist/cdn/paint/snice-paint.min.js +1 -1
  199. package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
  200. package/dist/cdn/pdf-viewer/snice-pdf-viewer.min.js +1 -1
  201. package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
  202. package/dist/cdn/permission-matrix/snice-permission-matrix.min.js +1 -1
  203. package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
  204. package/dist/cdn/podcast-player/snice-podcast-player.min.js +1 -1
  205. package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
  206. package/dist/cdn/pricing-table/snice-pricing-table.min.js +1 -1
  207. package/dist/cdn/product-card/snice-product-card.js +1 -1
  208. package/dist/cdn/product-card/snice-product-card.min.js +1 -1
  209. package/dist/cdn/progress/snice-progress.js +1 -1
  210. package/dist/cdn/progress/snice-progress.min.js +1 -1
  211. package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
  212. package/dist/cdn/progress-ring/snice-progress-ring.min.js +1 -1
  213. package/dist/cdn/qr-code/snice-qr-code.js +1 -1
  214. package/dist/cdn/qr-code/snice-qr-code.min.js +1 -1
  215. package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
  216. package/dist/cdn/qr-reader/snice-qr-reader.min.js +1 -1
  217. package/dist/cdn/radio/snice-radio.js +1 -1
  218. package/dist/cdn/radio/snice-radio.min.js +1 -1
  219. package/dist/cdn/range-slider/snice-range-slider.js +1 -1
  220. package/dist/cdn/range-slider/snice-range-slider.min.js +1 -1
  221. package/dist/cdn/rating/snice-rating.js +1 -1
  222. package/dist/cdn/rating/snice-rating.min.js +1 -1
  223. package/dist/cdn/receipt/snice-receipt.js +1 -1
  224. package/dist/cdn/receipt/snice-receipt.min.js +1 -1
  225. package/dist/cdn/recipe/snice-recipe.js +1 -1
  226. package/dist/cdn/recipe/snice-recipe.min.js +1 -1
  227. package/dist/cdn/runtime/README.md +2 -2
  228. package/dist/cdn/runtime/snice-runtime.esm.js +152 -62
  229. package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
  230. package/dist/cdn/runtime/snice-runtime.esm.min.js +8 -8
  231. package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
  232. package/dist/cdn/runtime/snice-runtime.js +152 -61
  233. package/dist/cdn/runtime/snice-runtime.js.map +1 -1
  234. package/dist/cdn/runtime/snice-runtime.min.js +8 -8
  235. package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
  236. package/dist/cdn/sankey/snice-sankey.js +1 -1
  237. package/dist/cdn/sankey/snice-sankey.min.js +1 -1
  238. package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
  239. package/dist/cdn/segmented-control/snice-segmented-control.min.js +1 -1
  240. package/dist/cdn/select/snice-select.js +1 -1
  241. package/dist/cdn/select/snice-select.min.js +1 -1
  242. package/dist/cdn/skeleton/snice-skeleton.js +1 -1
  243. package/dist/cdn/skeleton/snice-skeleton.min.js +1 -1
  244. package/dist/cdn/slider/snice-slider.js +1 -1
  245. package/dist/cdn/slider/snice-slider.min.js +1 -1
  246. package/dist/cdn/sortable/snice-sortable.js +1 -1
  247. package/dist/cdn/sortable/snice-sortable.min.js +1 -1
  248. package/dist/cdn/sparkline/snice-sparkline.js +1 -1
  249. package/dist/cdn/sparkline/snice-sparkline.min.js +1 -1
  250. package/dist/cdn/spinner/snice-spinner.js +1 -1
  251. package/dist/cdn/spinner/snice-spinner.min.js +1 -1
  252. package/dist/cdn/split-button/snice-split-button.js +1 -1
  253. package/dist/cdn/split-button/snice-split-button.min.js +1 -1
  254. package/dist/cdn/split-pane/snice-split-pane.js +1 -1
  255. package/dist/cdn/split-pane/snice-split-pane.min.js +1 -1
  256. package/dist/cdn/spotlight/snice-spotlight.js +1 -1
  257. package/dist/cdn/spotlight/snice-spotlight.min.js +1 -1
  258. package/dist/cdn/spreadsheet/snice-spreadsheet.js +1 -1
  259. package/dist/cdn/spreadsheet/snice-spreadsheet.min.js +1 -1
  260. package/dist/cdn/stat-group/snice-stat-group.js +1 -1
  261. package/dist/cdn/stat-group/snice-stat-group.min.js +1 -1
  262. package/dist/cdn/step-input/snice-step-input.js +1 -1
  263. package/dist/cdn/step-input/snice-step-input.min.js +1 -1
  264. package/dist/cdn/stepper/snice-stepper.js +1 -1
  265. package/dist/cdn/stepper/snice-stepper.min.js +1 -1
  266. package/dist/cdn/switch/snice-switch.js +1 -1
  267. package/dist/cdn/switch/snice-switch.min.js +1 -1
  268. package/dist/cdn/table/README.md +1 -1
  269. package/dist/cdn/table/snice-table.js +11 -10
  270. package/dist/cdn/table/snice-table.js.map +1 -1
  271. package/dist/cdn/table/snice-table.min.js +73 -73
  272. package/dist/cdn/table/snice-table.min.js.map +1 -1
  273. package/dist/cdn/tabs/snice-tabs.js +1 -1
  274. package/dist/cdn/tabs/snice-tabs.min.js +1 -1
  275. package/dist/cdn/tag/snice-tag.js +1 -1
  276. package/dist/cdn/tag/snice-tag.min.js +1 -1
  277. package/dist/cdn/tag-input/snice-tag-input.js +1 -1
  278. package/dist/cdn/tag-input/snice-tag-input.min.js +1 -1
  279. package/dist/cdn/terminal/snice-terminal.js +1 -1
  280. package/dist/cdn/terminal/snice-terminal.min.js +1 -1
  281. package/dist/cdn/testimonial/snice-testimonial.js +1 -1
  282. package/dist/cdn/testimonial/snice-testimonial.min.js +1 -1
  283. package/dist/cdn/textarea/snice-textarea.js +1 -1
  284. package/dist/cdn/textarea/snice-textarea.min.js +1 -1
  285. package/dist/cdn/time-picker/snice-time-picker.js +1 -1
  286. package/dist/cdn/time-picker/snice-time-picker.min.js +1 -1
  287. package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
  288. package/dist/cdn/time-range-picker/snice-time-range-picker.min.js +1 -1
  289. package/dist/cdn/timeline/snice-timeline.js +1 -1
  290. package/dist/cdn/timeline/snice-timeline.min.js +1 -1
  291. package/dist/cdn/timer/snice-timer.js +1 -1
  292. package/dist/cdn/timer/snice-timer.min.js +1 -1
  293. package/dist/cdn/toast/snice-toast.js +1 -1
  294. package/dist/cdn/toast/snice-toast.min.js +1 -1
  295. package/dist/cdn/tooltip/snice-tooltip.js +1 -1
  296. package/dist/cdn/tooltip/snice-tooltip.min.js +1 -1
  297. package/dist/cdn/tree/snice-tree.js +1 -1
  298. package/dist/cdn/tree/snice-tree.min.js +1 -1
  299. package/dist/cdn/treemap/snice-treemap.js +1 -1
  300. package/dist/cdn/treemap/snice-treemap.min.js +1 -1
  301. package/dist/cdn/user-card/snice-user-card.js +1 -1
  302. package/dist/cdn/user-card/snice-user-card.min.js +1 -1
  303. package/dist/cdn/video-player/snice-video-player.js +1 -1
  304. package/dist/cdn/video-player/snice-video-player.min.js +1 -1
  305. package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
  306. package/dist/cdn/virtual-scroller/snice-virtual-scroller.min.js +1 -1
  307. package/dist/cdn/waterfall/snice-waterfall.js +1 -1
  308. package/dist/cdn/waterfall/snice-waterfall.min.js +1 -1
  309. package/dist/cdn/weather/snice-weather.js +1 -1
  310. package/dist/cdn/weather/snice-weather.min.js +1 -1
  311. package/dist/cdn/work-order/snice-work-order.js +1 -1
  312. package/dist/cdn/work-order/snice-work-order.min.js +1 -1
  313. package/dist/components/action-bar/snice-action-bar.d.ts +22 -0
  314. package/dist/components/action-bar/snice-action-bar.js +182 -0
  315. package/dist/components/action-bar/snice-action-bar.js.map +1 -0
  316. package/dist/components/action-bar/snice-action-bar.types.d.ts +17 -0
  317. package/dist/components/badge/snice-badge.js +1 -1
  318. package/dist/components/badge/snice-badge.js.map +1 -1
  319. package/dist/components/binpack/snice-binpack.d.ts +82 -0
  320. package/dist/components/binpack/snice-binpack.js +970 -0
  321. package/dist/components/binpack/snice-binpack.js.map +1 -0
  322. package/dist/components/binpack/snice-binpack.types.d.ts +52 -0
  323. package/dist/components/button/snice-button.d.ts +2 -2
  324. package/dist/components/button/snice-button.js +11 -10
  325. package/dist/components/button/snice-button.js.map +1 -1
  326. package/dist/create-request-handler.d.ts +42 -0
  327. package/dist/index.cjs +149 -58
  328. package/dist/index.cjs.map +1 -1
  329. package/dist/index.d.ts +2 -0
  330. package/dist/index.esm.js +149 -59
  331. package/dist/index.esm.js.map +1 -1
  332. package/dist/index.iife.js +149 -58
  333. package/dist/index.iife.js.map +1 -1
  334. package/dist/parts.d.ts +9 -7
  335. package/dist/react/useRequestHandler.d.ts +56 -0
  336. package/dist/react/useRequestHandler.js +103 -0
  337. package/dist/react/useRequestHandler.js.map +1 -0
  338. package/dist/symbols.cjs +1 -1
  339. package/dist/symbols.esm.js +1 -1
  340. package/dist/transitions.cjs +1 -1
  341. package/dist/transitions.esm.js +1 -1
  342. package/docs/ai/DEVELOPMENT.md +1 -1
  343. package/docs/ai/components/accordion.md +46 -80
  344. package/docs/ai/components/action-bar.md +75 -0
  345. package/docs/ai/components/activity-feed.md +7 -7
  346. package/docs/ai/components/alert.md +26 -44
  347. package/docs/ai/components/app-tiles.md +34 -39
  348. package/docs/ai/components/approval-flow.md +1 -1
  349. package/docs/ai/components/audio-recorder.md +35 -67
  350. package/docs/ai/components/availability.md +13 -34
  351. package/docs/ai/components/avatar-group.md +26 -13
  352. package/docs/ai/components/avatar.md +52 -36
  353. package/docs/ai/components/badge.md +21 -32
  354. package/docs/ai/components/banner.md +21 -43
  355. package/docs/ai/components/binpack.md +89 -0
  356. package/docs/ai/components/book.md +25 -23
  357. package/docs/ai/components/booking.md +31 -36
  358. package/docs/ai/components/breadcrumbs.md +36 -11
  359. package/docs/ai/components/button.md +33 -44
  360. package/docs/ai/components/calendar.md +37 -70
  361. package/docs/ai/components/camera-annotate.md +31 -64
  362. package/docs/ai/components/camera.md +38 -120
  363. package/docs/ai/components/candlestick.md +32 -52
  364. package/docs/ai/components/card.md +20 -30
  365. package/docs/ai/components/carousel.md +32 -32
  366. package/docs/ai/components/cart.md +24 -29
  367. package/docs/ai/components/chart.md +29 -114
  368. package/docs/ai/components/chat.md +38 -75
  369. package/docs/ai/components/checkbox.md +22 -41
  370. package/docs/ai/components/chip.md +18 -54
  371. package/docs/ai/components/code-block.md +57 -178
  372. package/docs/ai/components/color-display.md +12 -32
  373. package/docs/ai/components/color-picker.md +17 -39
  374. package/docs/ai/components/command-palette.md +49 -71
  375. package/docs/ai/components/comments.md +55 -36
  376. package/docs/ai/components/countdown.md +28 -30
  377. package/docs/ai/components/cropper.md +33 -33
  378. package/docs/ai/components/data-card.md +20 -14
  379. package/docs/ai/components/date-picker.md +40 -47
  380. package/docs/ai/components/date-range-picker.md +31 -15
  381. package/docs/ai/components/date-time-picker.md +23 -46
  382. package/docs/ai/components/diff.md +30 -31
  383. package/docs/ai/components/divider.md +17 -47
  384. package/docs/ai/components/doc.md +43 -68
  385. package/docs/ai/components/draw.md +35 -87
  386. package/docs/ai/components/drawer.md +48 -77
  387. package/docs/ai/components/empty-state.md +10 -44
  388. package/docs/ai/components/estimate.md +33 -58
  389. package/docs/ai/components/file-gallery.md +48 -100
  390. package/docs/ai/components/file-upload.md +17 -53
  391. package/docs/ai/components/flip-card.md +31 -23
  392. package/docs/ai/components/flow.md +37 -65
  393. package/docs/ai/components/form-builder.md +35 -75
  394. package/docs/ai/components/form-layout.md +10 -20
  395. package/docs/ai/components/funnel.md +33 -48
  396. package/docs/ai/components/gantt.md +27 -23
  397. package/docs/ai/components/gauge.md +16 -17
  398. package/docs/ai/components/heatmap.md +21 -21
  399. package/docs/ai/components/image.md +7 -13
  400. package/docs/ai/components/input.md +38 -70
  401. package/docs/ai/components/invoice.md +35 -36
  402. package/docs/ai/components/kanban.md +32 -61
  403. package/docs/ai/components/key-value.md +32 -16
  404. package/docs/ai/components/kpi.md +38 -73
  405. package/docs/ai/components/layout.md +29 -23
  406. package/docs/ai/components/leaderboard.md +28 -37
  407. package/docs/ai/components/link-preview.md +12 -18
  408. package/docs/ai/components/link.md +10 -7
  409. package/docs/ai/components/list.md +21 -5
  410. package/docs/ai/components/location.md +21 -25
  411. package/docs/ai/components/login.md +14 -9
  412. package/docs/ai/components/map.md +27 -33
  413. package/docs/ai/components/markdown.md +20 -24
  414. package/docs/ai/components/masonry.md +10 -14
  415. package/docs/ai/components/mentions.md +26 -12
  416. package/docs/ai/components/menu.md +54 -52
  417. package/docs/ai/components/message-strip.md +20 -20
  418. package/docs/ai/components/metric-table.md +14 -21
  419. package/docs/ai/components/modal.md +27 -18
  420. package/docs/ai/components/music-player.md +49 -41
  421. package/docs/ai/components/nav.md +34 -31
  422. package/docs/ai/components/network-graph.md +27 -42
  423. package/docs/ai/components/notification-center.md +31 -33
  424. package/docs/ai/components/order-tracker.md +36 -27
  425. package/docs/ai/components/org-chart.md +36 -31
  426. package/docs/ai/components/pagination.md +34 -26
  427. package/docs/ai/components/paint.md +53 -91
  428. package/docs/ai/components/pdf-viewer.md +35 -36
  429. package/docs/ai/components/permission-matrix.md +26 -31
  430. package/docs/ai/components/podcast-player.md +64 -70
  431. package/docs/ai/components/pricing-table.md +37 -48
  432. package/docs/ai/components/product-card.md +58 -41
  433. package/docs/ai/components/progress-ring.md +20 -24
  434. package/docs/ai/components/progress.md +28 -45
  435. package/docs/ai/components/qr-code.md +25 -27
  436. package/docs/ai/components/qr-reader.md +20 -23
  437. package/docs/ai/components/radio.md +17 -15
  438. package/docs/ai/components/range-slider.md +22 -11
  439. package/docs/ai/components/rating.md +29 -33
  440. package/docs/ai/components/receipt.md +50 -127
  441. package/docs/ai/components/recipe.md +44 -42
  442. package/docs/ai/components/sankey.md +21 -30
  443. package/docs/ai/components/scheduler.md +29 -41
  444. package/docs/ai/components/segmented-control.md +11 -15
  445. package/docs/ai/components/select.md +58 -102
  446. package/docs/ai/components/skeleton.md +16 -30
  447. package/docs/ai/components/slider.md +26 -20
  448. package/docs/ai/components/sortable.md +25 -27
  449. package/docs/ai/components/sparkline.md +21 -17
  450. package/docs/ai/components/spinner.md +9 -5
  451. package/docs/ai/components/split-button.md +10 -13
  452. package/docs/ai/components/split-pane.md +19 -14
  453. package/docs/ai/components/spotlight.md +31 -26
  454. package/docs/ai/components/spreadsheet.md +51 -97
  455. package/docs/ai/components/stat-group.md +9 -19
  456. package/docs/ai/components/step-input.md +17 -15
  457. package/docs/ai/components/stepper.md +14 -15
  458. package/docs/ai/components/switch.md +15 -9
  459. package/docs/ai/components/table.md +24 -84
  460. package/docs/ai/components/tabs.md +18 -10
  461. package/docs/ai/components/tag-input.md +18 -29
  462. package/docs/ai/components/tag.md +10 -22
  463. package/docs/ai/components/terminal.md +9 -9
  464. package/docs/ai/components/testimonial.md +9 -19
  465. package/docs/ai/components/textarea.md +15 -16
  466. package/docs/ai/components/theme.md +3 -3
  467. package/docs/ai/components/time-picker.md +30 -49
  468. package/docs/ai/components/time-range-picker.md +16 -15
  469. package/docs/ai/components/timeline.md +5 -4
  470. package/docs/ai/components/timer.md +8 -8
  471. package/docs/ai/components/toast.md +24 -18
  472. package/docs/ai/components/tooltip.md +11 -22
  473. package/docs/ai/components/tree.md +9 -9
  474. package/docs/ai/components/treemap.md +14 -13
  475. package/docs/ai/components/user-card.md +21 -27
  476. package/docs/ai/components/video-player.md +35 -52
  477. package/docs/ai/components/virtual-scroller.md +1 -1
  478. package/docs/ai/components/waterfall.md +17 -16
  479. package/docs/ai/components/weather.md +19 -34
  480. package/docs/ai/components/work-order.md +58 -134
  481. package/docs/ai/patterns.md +63 -0
  482. package/docs/components/accordion.md +72 -151
  483. package/docs/components/action-bar.md +185 -0
  484. package/docs/components/activity-feed.md +9 -14
  485. package/docs/components/alert.md +17 -109
  486. package/docs/components/app-tiles.md +58 -43
  487. package/docs/components/approval-flow.md +8 -14
  488. package/docs/components/audio-recorder.md +45 -51
  489. package/docs/components/availability.md +30 -45
  490. package/docs/components/avatar-group.md +34 -14
  491. package/docs/components/avatar.md +20 -55
  492. package/docs/components/badge.md +53 -470
  493. package/docs/components/banner.md +44 -30
  494. package/docs/components/binpack.md +208 -0
  495. package/docs/components/book.md +78 -57
  496. package/docs/components/booking.md +35 -87
  497. package/docs/components/breadcrumbs.md +74 -448
  498. package/docs/components/button.md +72 -603
  499. package/docs/components/calendar.md +77 -261
  500. package/docs/components/camera-annotate.md +44 -96
  501. package/docs/components/camera.md +94 -333
  502. package/docs/components/candlestick.md +79 -116
  503. package/docs/components/card.md +51 -689
  504. package/docs/components/carousel.md +29 -76
  505. package/docs/components/cart.md +44 -136
  506. package/docs/components/chart.md +95 -438
  507. package/docs/components/chat.md +175 -439
  508. package/docs/components/checkbox.md +52 -609
  509. package/docs/components/chip.md +45 -574
  510. package/docs/components/code-block.md +157 -421
  511. package/docs/components/color-display.md +45 -54
  512. package/docs/components/color-picker.md +103 -36
  513. package/docs/components/command-palette.md +98 -92
  514. package/docs/components/comments.md +16 -10
  515. package/docs/components/countdown.md +15 -20
  516. package/docs/components/cropper.md +14 -16
  517. package/docs/components/data-card.md +16 -15
  518. package/docs/components/date-picker.md +45 -25
  519. package/docs/components/date-range-picker.md +140 -87
  520. package/docs/components/date-time-picker.md +25 -28
  521. package/docs/components/diff.md +22 -17
  522. package/docs/components/divider.md +18 -20
  523. package/docs/components/doc.md +105 -197
  524. package/docs/components/draw.md +117 -223
  525. package/docs/components/drawer.md +113 -478
  526. package/docs/components/empty-state.md +13 -29
  527. package/docs/components/estimate.md +58 -118
  528. package/docs/components/file-gallery.md +123 -495
  529. package/docs/components/file-upload.md +36 -123
  530. package/docs/components/flip-card.md +30 -34
  531. package/docs/components/flow.md +74 -89
  532. package/docs/components/form-builder.md +59 -86
  533. package/docs/components/form-layout.md +21 -31
  534. package/docs/components/funnel.md +21 -22
  535. package/docs/components/gantt.md +5 -5
  536. package/docs/components/gauge.md +5 -23
  537. package/docs/components/heatmap.md +13 -55
  538. package/docs/components/image.md +28 -32
  539. package/docs/components/input.md +25 -14
  540. package/docs/components/invoice.md +34 -33
  541. package/docs/components/kanban.md +99 -394
  542. package/docs/components/key-value.md +22 -12
  543. package/docs/components/kpi.md +41 -112
  544. package/docs/components/layout.md +7 -13
  545. package/docs/components/leaderboard.md +52 -76
  546. package/docs/components/link-preview.md +20 -16
  547. package/docs/components/link.md +22 -19
  548. package/docs/components/list.md +44 -26
  549. package/docs/components/location.md +9 -13
  550. package/docs/components/login.md +42 -36
  551. package/docs/components/map.md +24 -46
  552. package/docs/components/markdown.md +14 -25
  553. package/docs/components/masonry.md +15 -13
  554. package/docs/components/mentions.md +36 -25
  555. package/docs/components/menu.md +39 -46
  556. package/docs/components/message-strip.md +15 -51
  557. package/docs/components/metric-table.md +50 -72
  558. package/docs/components/modal.md +32 -43
  559. package/docs/components/music-player.md +41 -49
  560. package/docs/components/nav.md +23 -13
  561. package/docs/components/network-graph.md +14 -13
  562. package/docs/components/notification-center.md +68 -172
  563. package/docs/components/order-tracker.md +72 -117
  564. package/docs/components/org-chart.md +58 -207
  565. package/docs/components/pagination.md +67 -89
  566. package/docs/components/paint.md +86 -172
  567. package/docs/components/pdf-viewer.md +46 -151
  568. package/docs/components/permission-matrix.md +61 -112
  569. package/docs/components/podcast-player.md +41 -119
  570. package/docs/components/pricing-table.md +104 -147
  571. package/docs/components/product-card.md +94 -197
  572. package/docs/components/progress-ring.md +29 -32
  573. package/docs/components/progress.md +30 -61
  574. package/docs/components/qr-code.md +53 -61
  575. package/docs/components/qr-reader.md +53 -42
  576. package/docs/components/radio.md +42 -40
  577. package/docs/components/range-slider.md +41 -30
  578. package/docs/components/rating.md +50 -84
  579. package/docs/components/receipt.md +91 -129
  580. package/docs/components/recipe.md +107 -216
  581. package/docs/components/sankey.md +47 -83
  582. package/docs/components/scheduler.md +81 -184
  583. package/docs/components/segmented-control.md +48 -40
  584. package/docs/components/select.md +107 -129
  585. package/docs/components/skeleton.md +33 -47
  586. package/docs/components/slider.md +49 -53
  587. package/docs/components/sortable.md +43 -186
  588. package/docs/components/sparkline.md +26 -25
  589. package/docs/components/spinner.md +32 -37
  590. package/docs/components/split-button.md +43 -23
  591. package/docs/components/split-pane.md +41 -58
  592. package/docs/components/spotlight.md +53 -145
  593. package/docs/components/spreadsheet.md +84 -307
  594. package/docs/components/stat-group.md +27 -61
  595. package/docs/components/step-input.md +44 -41
  596. package/docs/components/stepper.md +55 -89
  597. package/docs/components/switch.md +39 -39
  598. package/docs/components/table.md +27 -32
  599. package/docs/components/tabs.md +36 -27
  600. package/docs/components/tag-input.md +50 -176
  601. package/docs/components/tag.md +12 -50
  602. package/docs/components/terminal.md +32 -37
  603. package/docs/components/testimonial.md +24 -81
  604. package/docs/components/textarea.md +9 -14
  605. package/docs/components/theme.md +10 -23
  606. package/docs/components/time-picker.md +48 -72
  607. package/docs/components/time-range-picker.md +22 -41
  608. package/docs/components/timeline.md +7 -14
  609. package/docs/components/timer.md +16 -32
  610. package/docs/components/toast.md +19 -45
  611. package/docs/components/tooltip.md +13 -115
  612. package/docs/components/tree.md +2 -19
  613. package/docs/components/treemap.md +19 -43
  614. package/docs/components/user-card.md +13 -22
  615. package/docs/components/video-player.md +53 -227
  616. package/docs/components/virtual-scroller.md +11 -44
  617. package/docs/components/waterfall.md +58 -137
  618. package/docs/components/weather.md +94 -153
  619. package/docs/components/work-order.md +56 -143
  620. package/docs/plans/2026-03-09-action-bar-design.md +104 -0
  621. package/docs/plans/2026-03-09-action-bar-plan.md +676 -0
  622. package/docs/plans/2026-03-10-react-integration-design.md +166 -0
  623. package/docs/request-response.md +77 -0
  624. package/package.json +20 -10
@@ -1,462 +1,205 @@
1
- <!-- AI: For a low-token version of this doc, use docs/ai/components/code-block.md instead -->
1
+ <!-- AI: For the AI-optimized version of this doc, see docs/ai/components/code-block.md -->
2
2
 
3
3
  # Code Block Component
4
4
 
5
5
  Display code with syntax highlighting, line numbers, and copy functionality. Uses a JSON-driven tokenizer engine with Monarch-inspired state machine for syntax highlighting.
6
6
 
7
+ ## Table of Contents
8
+ - [Properties](#properties)
9
+ - [Methods](#methods)
10
+ - [Events](#events)
11
+ - [Slots](#slots)
12
+ - [CSS Parts](#css-parts)
13
+ - [Basic Usage](#basic-usage)
14
+ - [Examples](#examples)
15
+ - [Accessibility](#accessibility)
16
+
7
17
  ## Properties
8
18
 
9
19
  | Property | Type | Default | Description |
10
20
  |----------|------|---------|-------------|
11
- | `code` | `string` | `''` | Code content |
21
+ | `code` | `string` | `''` | Code content (set via slot or property) |
12
22
  | `language` | `CodeLanguage` | `'plaintext'` | Programming language |
13
23
  | `grammar` | `Grammar \| string \| null` | `null` | Grammar object or URL to grammar JSON |
14
- | `showLineNumbers` | `boolean` | `false` | Show line numbers |
15
- | `startLine` | `number` | `1` | Starting line number |
16
- | `highlightLines` | `number[]` | `[]` | Lines to highlight |
24
+ | `showLineNumbers` (attr: `show-line-numbers`) | `boolean` | `false` | Show line numbers |
25
+ | `startLine` (attr: `start-line`) | `number` | `1` | Starting line number |
26
+ | `highlightLines` (attr: `highlight-lines`) | `number[]` | `[]` | Lines to highlight |
17
27
  | `copyable` | `boolean` | `true` | Show copy button |
18
- | `filename` | `string` | `''` | File name to display |
28
+ | `filename` | `string` | `''` | File name to display in header |
19
29
  | `format` | `string` | `''` | Formatter name from grammar (e.g. `"pretty"`), or any truthy string with `setFormatter()` |
20
- | `theme` | `'' \| 'dark' \| 'light'` | `''` | Force a specific color theme; empty string auto-detects from page or OS |
21
- | `fetchMode` | `'native' \| 'virtual' \| 'event'` | `'native'` | How grammar URLs are fetched: `native` uses fetch(), `virtual` uses import(), `event` dispatches `grammar-request` |
30
+ | `theme` | `'' \| 'dark' \| 'light'` | `''` | Force a specific color theme; empty = auto-detect from page/OS |
31
+ | `fetchMode` (attr: `fetch-mode`) | `'native' \| 'virtual' \| 'event'` | `'native'` | How grammar URLs are fetched |
22
32
 
23
- ## Slots
33
+ ### Fetch Mode
24
34
 
25
- | Slot | Description |
26
- |------|-------------|
27
- | (default) | Code content as slotted text (auto-dedented) |
35
+ - **`native`** (default) -- `fetch(url).then(r => r.json())`. No external wiring needed.
36
+ - **`virtual`** -- Uses `@request/@respond` pattern (`snice/code-block/load-grammar`). Requires a `@respond` handler.
37
+ - **`event`** -- Dispatches `grammar-request` CustomEvent. Listener calls `codeBlock.setGrammar()` to provide grammar.
28
38
 
29
39
  ## Methods
30
40
 
31
- - `copy()` - Copy code to clipboard
32
- - `highlight()` - Manually trigger syntax highlighting
33
- - `setHighlighter(fn)` - Set an external highlighter function for this instance
34
- - `setFormatter(fn)` - Set a code formatter function for this instance
35
- - `setGrammar(grammar)` - Set a grammar object programmatically
41
+ | Method | Arguments | Description |
42
+ |--------|-----------|-------------|
43
+ | `copy()` | -- | Copy code to clipboard |
44
+ | `highlight()` | -- | Manually trigger syntax highlighting |
45
+ | `setHighlighter()` | `fn: HighlighterFunction` | Set an external highlighter function |
46
+ | `setFormatter()` | `fn: FormatterFunction` | Set a code formatter function |
47
+ | `setGrammar()` | `grammar: Grammar` | Set a grammar object programmatically |
36
48
 
37
49
  ## Events
38
50
 
39
- - `code-copy` - Code copied (detail: `{ code, codeBlock }`)
40
- - `code-before-format` - Before formatting (detail: `{ code, language, codeBlock }`)
41
- - `code-after-format` - After formatting (detail: `{ code, language, codeBlock }`)
42
- - `code-before-highlight` - Before highlighting (detail: `{ code, language, codeBlock }`)
43
- - `code-after-highlight` - After highlighting (detail: `{ code, language, codeBlock }`)
44
- - `grammar-request` - Grammar fetch requested (detail: `{ url, language, codeBlock }`). Only dispatched when `fetch-mode="event"`.
45
- - `grammar-loaded` - Grammar successfully loaded (detail: `{ grammar, url, language, codeBlock }`). Fired after grammar is fetched (native/virtual), received via event mode, or set programmatically with `setGrammar()`.
51
+ | Event | Detail | Description |
52
+ |-------|--------|-------------|
53
+ | `code-copy` | `{ code, codeBlock }` | Code copied to clipboard |
54
+ | `code-before-format` | `{ code, language, codeBlock }` | Before formatting |
55
+ | `code-after-format` | `{ code, language, codeBlock }` | After formatting |
56
+ | `code-before-highlight` | `{ code, language, codeBlock }` | Before highlighting |
57
+ | `code-after-highlight` | `{ code, language, codeBlock }` | After highlighting |
58
+ | `grammar-request` | `{ url, language, codeBlock }` | Grammar fetch requested (only when `fetch-mode="event"`) |
59
+ | `grammar-loaded` | `{ grammar, url, language, codeBlock }` | Grammar loaded (any mode) or set via `setGrammar()` |
46
60
 
47
- ## Basic Usage
48
-
49
- ```html
50
- <snice-code-block id="code" language="javascript" grammar="grammars/typescript.json"></snice-code-block>
51
- <script>
52
- document.getElementById('code').code = `
53
- function hello() {
54
- console.log("Hello World");
55
- }
56
- `;
57
- </script>
58
- ```
61
+ ## Slots
59
62
 
60
- ## Code Formatters
63
+ | Name | Description |
64
+ |------|-------------|
65
+ | (default) | Code content as slotted text (auto-dedented) |
61
66
 
62
- Formatters transform code before syntax highlighting — useful for pretty-printing minified or poorly-indented code.
67
+ ## CSS Parts
63
68
 
64
- ### Grammar-Based Formatters (Declarative)
69
+ | Part | Description |
70
+ |------|-------------|
71
+ | `container` | The outer code block wrapper |
72
+ | `header` | The header bar with filename and copy button |
73
+ | `filename` | The filename display |
74
+ | `copy-button` | The copy-to-clipboard button |
75
+ | `content` | The scrollable code content area |
76
+ | `pre` | The pre-formatted code container |
77
+ | `code` | The code element containing highlighted tokens |
65
78
 
66
- Grammars can include a `formatters` section with named declarative rule sets. Set `format` to the formatter name to use it:
79
+ ## Basic Usage
67
80
 
68
81
  ```html
69
- <snice-code-block grammar="grammars/json.json" format="pretty" code='{"a":1,"b":[2,3]}'></snice-code-block>
70
- ```
71
-
72
- The grammar's `"pretty"` formatter will automatically format the code before highlighting. No JavaScript needed.
73
-
74
- **Grammars with built-in `"pretty"` formatters:** `json.json`, `typescript.json`, `css.json`, `snice.json`.
75
-
76
- #### Grammar Formatter Rules
77
-
78
- Each named formatter is a set of declarative rules defined in the grammar JSON:
79
-
80
- ```json
81
- {
82
- "formatters": {
83
- "pretty": {
84
- "tabSize": 2,
85
- "useTabs": false,
86
- "newlineAfter": "[{\\[,]",
87
- "newlineBefore": "[}\\]]",
88
- "spaceAfter": "[:]",
89
- "indent": "[{\\[]",
90
- "dedent": "[}\\]]",
91
- "skipStrings": true,
92
- "skipComments": true
93
- }
94
- }
95
- }
96
- ```
97
-
98
- | Field | Type | Default | Description |
99
- |-------|------|---------|-------------|
100
- | `tabSize` | `number` | `2` | Indent width |
101
- | `useTabs` | `boolean` | `false` | Use tabs instead of spaces |
102
- | `newlineAfter` | `string` (regex) | — | Insert newline after these chars |
103
- | `newlineBefore` | `string` (regex) | — | Insert newline before these chars |
104
- | `spaceAfter` | `string` (regex) | — | Insert space after these chars |
105
- | `spaceBefore` | `string` (regex) | — | Insert space before these chars |
106
- | `spaceAround` | `string` (regex) | — | Insert space on both sides |
107
- | `indent` | `string` (regex) | — | Chars that increase indent level |
108
- | `dedent` | `string` (regex) | — | Chars that decrease indent level |
109
- | `trimTrailing` | `boolean` | `true` | Remove trailing whitespace per line |
110
- | `collapseBlankLines` | `number` | — | Max consecutive blank lines |
111
- | `skipStrings` | `boolean` | `true` | Don't apply rules inside string literals |
112
- | `skipComments` | `boolean` | `true` | Don't apply rules inside comments |
113
-
114
- ### Imperative Formatters
115
-
116
- For cases requiring JavaScript logic, `setFormatter(fn)` still works. When both are present, `setFormatter()` takes priority over grammar-based formatters.
117
-
118
- ```typescript
119
- type FormatterFunction = (code: string, language: string) => string | Promise<string>;
120
- ```
121
-
122
- ### JSON Formatter
123
-
124
- Zero-dependency formatter that pretty-prints JSON using `JSON.parse()` + `JSON.stringify()`:
125
-
126
- ```typescript
127
- import { createJsonFormatter } from 'snice/components/code-block/formatters/json';
128
-
129
- const formatter = createJsonFormatter({ indent: 2 });
130
- codeBlock.setFormatter(formatter);
131
- codeBlock.format = 'pretty';
132
- codeBlock.code = '{"name":"snice","version":"4.0.0"}';
82
+ <snice-code-block language="javascript" grammar="grammars/typescript.json">
83
+ const x = 1;
84
+ console.log(x);
85
+ </snice-code-block>
133
86
  ```
134
87
 
135
- ### Indent Formatter
136
-
137
- Zero-dependency indent normalizer that re-indents code by tracking brace/bracket/paren nesting depth:
138
-
139
88
  ```typescript
140
- import { createIndentFormatter } from 'snice/components/code-block/formatters/indent';
141
-
142
- const formatter = createIndentFormatter({ tabSize: 2, useTabs: false });
143
- codeBlock.setFormatter(formatter);
144
- codeBlock.format = 'pretty';
89
+ import 'snice/components/code-block/snice-code-block';
145
90
  ```
146
91
 
147
- ### Prettier Formatter
148
-
149
- Adapter for Prettier (requires `prettier` as a dependency):
150
-
151
- ```typescript
152
- import * as prettier from 'prettier/standalone';
153
- import parserBabel from 'prettier/plugins/babel';
154
- import parserEstree from 'prettier/plugins/estree';
155
- import { setupPrettierFormatter } from 'snice/components/code-block/formatters/prettier';
156
-
157
- const formatter = setupPrettierFormatter(prettier, [parserBabel, parserEstree], {
158
- tabWidth: 2,
159
- singleQuote: true,
160
- });
161
- codeBlock.setFormatter(formatter);
162
- codeBlock.format = 'pretty';
163
- ```
92
+ ## Examples
164
93
 
165
- ### Whitespace Handling
94
+ ### With Line Numbers and Filename
166
95
 
167
- Slotted content is automatically **dedented** common leading indentation from HTML nesting is stripped while preserving relative indentation. This means code inside deeply nested HTML stays clean:
96
+ Set `show-line-numbers` and `filename` for a file-like display.
168
97
 
169
98
  ```html
170
- <div class="container">
171
- <snice-code-block language="javascript">
172
- function hello() {
173
- console.log("world");
174
- }
175
- </snice-code-block>
176
- </div>
177
- ```
178
-
179
- The 4-space indent from HTML nesting is stripped, but the 2-space relative indent inside the function is preserved.
180
-
181
- ## Grammar Format
182
-
183
- Grammars are JSON-serializable objects with states, transitions, and lookup tables:
184
-
185
- ```typescript
186
- interface Grammar {
187
- name: string; // Language name
188
- fileTypes?: string[]; // File extensions
189
- defaultToken?: string; // Token type for unmatched text
190
- ignoreCase?: boolean; // Case-insensitive regex matching
191
- tokenizer: Record<string, GrammarEntry[]>; // Named states
192
- formatters?: Record<string, FormatRules>; // Named declarative formatters
193
- [key: string]: any; // Lookup tables (keywords, builtins, etc.)
194
- }
195
- ```
196
-
197
- ### Rules
198
-
199
- Each state contains an array of rules. Rules can be:
200
-
201
- - **Simple**: `[regex, token]` — Match regex, assign token type
202
- - **With transition**: `[regex, token, nextState]` — Match and change state
203
- - **Conditional**: `[regex, { cases: { '@table': 'token', '@default': 'fallback' } }]` — Lookup matched text in tables
204
- - **Include**: `{ include: '@stateName' }` — Include rules from another state
205
-
206
- ### State Transitions
207
-
208
- - `@stateName` — Push state onto stack (enter nested context)
209
- - `@pop` — Pop state from stack (return to previous context)
210
-
211
- ### Example: Handling Multi-line Comments
212
-
213
- ```json
214
- {
215
- "tokenizer": {
216
- "root": [
217
- ["/\\*", "comment", "@comment"],
218
- ["//.*$", "comment"]
219
- ],
220
- "comment": [
221
- ["[^*]+", "comment"],
222
- ["\\*/", "comment", "@pop"],
223
- ["[*]", "comment"]
224
- ]
225
- }
226
- }
227
- ```
228
-
229
- ### Example: Template Literals with Interpolation
230
-
231
- ```json
232
- {
233
- "tokenizer": {
234
- "root": [
235
- ["`", "string", "@template"]
236
- ],
237
- "template": [
238
- ["\\$\\{", "punctuation", "@interpolation"],
239
- ["[^`$\\\\]+", "string"],
240
- ["\\\\.", "string"],
241
- ["`", "string", "@pop"]
242
- ],
243
- "interpolation": [
244
- ["\\}", "punctuation", "@pop"],
245
- { "include": "@root" }
246
- ]
247
- }
248
- }
99
+ <snice-code-block grammar="grammars/typescript.json" language="typescript" show-line-numbers filename="index.ts">
100
+ const greeting = 'Hello World';
101
+ console.log(greeting);
102
+ </snice-code-block>
249
103
  ```
250
104
 
251
- ## Programmatic API
252
-
253
- The highlighter engine can be used directly:
254
-
255
- ```typescript
256
- import {
257
- highlightCode,
258
- tokenize,
259
- registerGrammar,
260
- unregisterGrammar,
261
- getGrammar
262
- } from 'snice/components/code-block/highlighter';
263
-
264
- // Highlight with a grammar object → HTML string
265
- const html = highlightCode('const x = 1;', grammarObject);
266
-
267
- // Highlight with a registered grammar name (plaintext fallback if not found)
268
- registerGrammar('typescript', tsGrammar);
269
- const html2 = highlightCode('const x = 1;', 'typescript');
270
-
271
- // Get raw tokens
272
- const tokens = tokenize('const x = 1;', grammarObject);
273
- // [{ text: 'const', type: 'keyword' }, { text: ' ', type: null }, ...]
274
-
275
- // Register a grammar globally
276
- registerGrammar('myLang', myGrammar);
105
+ ### Highlight Specific Lines
277
106
 
278
- // Remove a registered grammar
279
- unregisterGrammar('myLang');
280
-
281
- // Look up a registered grammar (returns undefined if not found)
282
- const grammar = getGrammar('typescript');
283
- ```
284
-
285
- ## Examples
107
+ Use `highlight-lines` to draw attention to specific lines.
286
108
 
287
109
  ```html
288
- <!-- With grammar and line numbers -->
289
- <snice-code-block grammar="grammars/typescript.json" language="typescript" show-line-numbers></snice-code-block>
290
-
291
- <!-- With filename -->
292
- <snice-code-block grammar="grammars/typescript.json" filename="index.js"></snice-code-block>
293
-
294
- <!-- Highlight specific lines -->
295
- <snice-code-block grammar="grammars/python.json" language="python" highlight-lines="[2,3,4]"></snice-code-block>
296
-
297
- <!-- Plaintext (no grammar needed) -->
298
- <snice-code-block language="plaintext"></snice-code-block>
110
+ <snice-code-block grammar="grammars/python.json" language="python" highlight-lines="[2,3,4]">
111
+ def hello():
112
+ name = "World"
113
+ greeting = f"Hello {name}"
114
+ print(greeting)
115
+ </snice-code-block>
299
116
  ```
300
117
 
301
- ## Grammar Files
302
-
303
- Grammars are **external JSON files** loaded on demand — the component ships with no built-in grammars to keep the bundle small.
304
-
305
- ### Available Grammars
306
-
307
- | File | Languages | Aliases |
308
- |------|-----------|---------|
309
- | `typescript.json` | TypeScript, JavaScript | ts, tsx, js, jsx |
310
- | `html.json` | HTML, XML | htm, svg |
311
- | `css.json` | CSS, SCSS, Less | |
312
- | `json.json` | JSON | jsonc |
313
- | `python.json` | Python | py, pyw |
314
- | `bash.json` | Bash, Shell | sh, zsh |
315
- | `snice.json` | Snice (TS + templates) | |
316
-
317
- Grammar files are located at:
318
- - **Source:** `components/code-block/grammars/`
319
- - **Built:** `dist/components/code-block/grammars/`
320
- - **Standalone:** serve alongside the component JS file
321
-
322
- ### Snice Grammar
323
-
324
- The `snice.json` grammar extends TypeScript with full awareness of snice's template DSL. Use it to highlight snice component source code.
325
-
326
- **What it highlights:**
118
+ ### Programmatic Code
327
119
 
328
- | Syntax | Token Type | Description |
329
- |--------|-----------|-------------|
330
- | `html\`` / `css\`` | `tag` | Tagged template entry (enters HTML/CSS mode) |
331
- | `<if>`, `<case>`, `<when>`, `<default>` | `keyword` | Snice conditional rendering elements |
332
- | `.prop=${val}` | `property` | Property bindings |
333
- | `?attr=${bool}` | `attr-name` | Boolean attribute bindings |
334
- | `@event=${fn}` | `function` | Event bindings (includes `@event:modifier`, `@event.modifier`) |
335
- | `${...}` | (TypeScript) | Interpolations return to TS mode |
336
- | `html/*html*/\`` | `tag` | Editor hint pattern supported |
337
-
338
- **Example:**
120
+ Set code via the `code` property for dynamic content.
339
121
 
340
122
  ```html
341
- <snice-code-block grammar="grammars/snice.json" language="snice" id="code"></snice-code-block>
123
+ <snice-code-block id="code" language="javascript" grammar="grammars/typescript.json"></snice-code-block>
124
+
342
125
  <script>
343
126
  document.getElementById('code').code = `
344
- @element('my-counter')
345
- class MyCounter extends HTMLElement {
346
- @property({ type: Number }) count = 0;
347
-
348
- @render()
349
- template() {
350
- return html\\\`
351
- <if \\\${this.count > 0}>
352
- <span>\\\${this.count}</span>
353
- </if>
354
- <button @click=\\\${() => this.count++}>+</button>
355
- \\\`;
356
- }
357
-
358
- @styles()
359
- componentStyles() {
360
- return css\\\`:host { display: block; padding: 1rem; }\\\`;
361
- }
362
- }`;
127
+ function hello() {
128
+ console.log("Hello World");
129
+ }
130
+ `;
363
131
  </script>
364
132
  ```
365
133
 
366
- ### Loading a Grammar via URL
134
+ ### Force Theme
367
135
 
368
- The simplest way — set the `grammar` property to a URL string:
136
+ Use `theme` to override auto-detection.
369
137
 
370
138
  ```html
371
- <snice-code-block
372
- grammar="grammars/typescript.json"
373
- language="typescript"
374
- id="code">
375
- </snice-code-block>
376
- <script>
377
- document.getElementById('code').code = 'const x: number = 42;';
378
- </script>
139
+ <snice-code-block theme="dark" language="javascript">const x = 1;</snice-code-block>
140
+ <snice-code-block theme="light" language="javascript">const x = 1;</snice-code-block>
379
141
  ```
380
142
 
381
- The grammar JSON file will be fetched and cached automatically.
382
-
383
- ### Inline Grammar Object
143
+ ### Grammar-Based Formatter
384
144
 
385
- You can also pass a grammar object directly via JavaScript:
145
+ Use `format="pretty"` with a grammar that includes formatters.
386
146
 
387
147
  ```html
388
- <snice-code-block id="cb" language="custom"></snice-code-block>
389
- <script>
390
- const codeBlock = document.getElementById('cb');
391
- codeBlock.grammar = {
392
- name: 'my-language',
393
- keywords: ['func', 'var', 'return'],
394
- tokenizer: {
395
- root: [
396
- ['//.*$', 'comment'],
397
- ['"[^"]*"', 'string'],
398
- ['\\b\\d+\\b', 'number'],
399
- ['[a-zA-Z_]\\w*', { cases: { '@keywords': 'keyword', '@default': '' } }]
400
- ]
401
- }
402
- };
403
- codeBlock.code = 'func main() { return 42; }';
404
- </script>
148
+ <snice-code-block grammar="grammars/json.json" format="pretty" code='{"a":1,"b":[2,3]}'></snice-code-block>
405
149
  ```
406
150
 
407
- ### Registering Grammars Globally
151
+ Grammars with built-in `"pretty"` formatters: `json.json`, `typescript.json`, `css.json`, `snice.json`.
408
152
 
409
- For programmatic use, you can register grammars so they're available by language name:
153
+ ### Imperative Formatter
154
+
155
+ Use `setFormatter()` for custom formatting logic.
410
156
 
411
157
  ```typescript
412
- import { registerGrammar } from 'snice/components/code-block/highlighter';
158
+ import { createJsonFormatter } from 'snice/components/code-block/formatters/json';
413
159
 
414
- // Fetch and register
415
- const tsGrammar = await fetch('grammars/typescript.json').then(r => r.json());
416
- registerGrammar('typescript', tsGrammar);
417
- registerGrammar('ts', tsGrammar); // register aliases too
418
- registerGrammar('javascript', tsGrammar);
419
- registerGrammar('js', tsGrammar);
160
+ codeBlock.setFormatter(createJsonFormatter({ indent: 2 }));
161
+ codeBlock.format = 'pretty';
162
+ codeBlock.code = '{"name":"snice","version":"4.0.0"}';
420
163
  ```
421
164
 
422
- Without a registered grammar or explicit `grammar` property, code is displayed as escaped plaintext.
423
-
424
- ## Theming (Light / Dark Mode)
425
-
426
- The code block automatically follows the page's theme. It detects:
427
-
428
- 1. **`data-theme` attribute** on the page (snice theme system): `[data-theme="dark"]` or `[data-theme="light"]`
429
- 2. **OS preference** via `prefers-color-scheme` media query (fallback when no `data-theme` is set)
165
+ ### Event-Based Grammar Loading
430
166
 
431
- ### Forcing a Theme
432
-
433
- Use the `theme` attribute to override auto-detection:
167
+ Use `fetch-mode="event"` to control grammar loading externally.
434
168
 
435
169
  ```html
436
- <!-- Always dark, even on a light-themed page -->
437
- <snice-code-block theme="dark" language="javascript">
438
- const x = 1;
439
- </snice-code-block>
170
+ <snice-code-block grammar="grammars/typescript.json" fetch-mode="event" id="cb"></snice-code-block>
440
171
 
441
- <!-- Always light, even on a dark-themed page -->
442
- <snice-code-block theme="light" language="javascript">
443
- const x = 1;
444
- </snice-code-block>
172
+ <script>
173
+ cb.addEventListener('grammar-request', async (e) => {
174
+ const grammar = await fetch(e.detail.url).then(r => r.json());
175
+ e.detail.codeBlock.setGrammar(grammar);
176
+ });
177
+ </script>
445
178
  ```
446
179
 
447
- ### Customizing Colors
448
-
449
- Override structural colors with CSS custom properties:
180
+ ### Inline Grammar Object
450
181
 
451
- ```css
452
- snice-code-block {
453
- --code-block-bg: #1e1e2e;
454
- --code-block-text: #cdd6f4;
455
- --code-block-header-bg: #181825;
456
- }
182
+ Pass a grammar object directly via JavaScript.
183
+
184
+ ```javascript
185
+ codeBlock.grammar = {
186
+ name: 'my-language',
187
+ keywords: ['func', 'var', 'return'],
188
+ tokenizer: {
189
+ root: [
190
+ ['//.*$', 'comment'],
191
+ ['"[^"]*"', 'string'],
192
+ ['\\b\\d+\\b', 'number'],
193
+ ['[a-zA-Z_]\\w*', { cases: { '@keywords': 'keyword', '@default': '' } }]
194
+ ]
195
+ }
196
+ };
197
+ codeBlock.code = 'func main() { return 42; }';
457
198
  ```
458
199
 
459
- Override individual token colors:
200
+ ### Customize Token Colors
201
+
202
+ Override individual token colors with CSS custom properties.
460
203
 
461
204
  ```css
462
205
  snice-code-block {
@@ -468,51 +211,44 @@ snice-code-block {
468
211
  }
469
212
  ```
470
213
 
471
- All available token color variables: `--code-keyword-color`, `--code-function-color`, `--code-string-color`, `--code-number-color`, `--code-comment-color`, `--code-operator-color`, `--code-punctuation-color`, `--code-tag-color`, `--code-attr-name-color`, `--code-attr-value-color`, `--code-constant-color`, `--code-class-color`, `--code-builtin-color`, `--code-regex-color`.
214
+ ### Customize Structural Colors
472
215
 
473
- ## Token CSS Classes
216
+ Override the block background, text, and header colors.
474
217
 
475
- The following token types are styled by default:
218
+ ```css
219
+ snice-code-block {
220
+ --code-block-bg: #1e1e2e;
221
+ --code-block-text: #cdd6f4;
222
+ --code-block-header-bg: #181825;
223
+ }
224
+ ```
476
225
 
477
- | Token | Color (default) | Description |
478
- |-------|----------------|-------------|
479
- | `keyword` | Purple (#c678dd) | Language keywords |
480
- | `string` | Green (#98c379) | String literals |
481
- | `comment` | Gray (#5c6370) | Comments (italic) |
482
- | `number` | Orange (#d19a66) | Numeric literals |
483
- | `function` | Blue (#61afef) | Function names |
484
- | `class-name` | Yellow (#e5c07b) | Class/type names |
485
- | `tag` | Red (#e06c75) | HTML tags, decorators |
486
- | `attr-name` | Orange (#d19a66) | Attribute names |
487
- | `attr-value` | Green (#98c379) | Attribute values |
488
- | `property` | Orange (#d19a66) | Object properties |
489
- | `operator` | Cyan (#56b6c2) | Operators |
490
- | `punctuation` | Gray (#abb2bf) | Brackets, semicolons |
491
- | `constant` | Orange (#d19a66) | true/false/null |
492
- | `builtin` | Red (#e06c75) | Built-in functions |
226
+ ### Programmatic Highlighter API
493
227
 
494
- Colors are customizable via CSS variables (e.g., `--code-keyword-color`).
228
+ Use the highlighter engine directly for custom rendering.
495
229
 
496
- ## CSS Parts
230
+ ```typescript
231
+ import { highlightCode, tokenize, registerGrammar } from 'snice/components/code-block/highlighter';
232
+
233
+ const html = highlightCode('const x = 1;', grammarObject);
234
+ registerGrammar('typescript', tsGrammar);
235
+ const html2 = highlightCode('const x = 1;', 'typescript');
236
+ ```
497
237
 
498
- Style internal elements from outside the shadow DOM using `::part()`.
238
+ ### Available Grammar Files
499
239
 
500
- | Part | Element | Description |
501
- |------|---------|-------------|
502
- | `container` | `<div>` | The outer code block wrapper |
503
- | `header` | `<div>` | The header bar with filename and copy button |
504
- | `filename` | `<span>` | The filename display |
505
- | `copy-button` | `<button>` | The copy-to-clipboard button |
506
- | `content` | `<div>` | The scrollable code content area |
507
- | `pre` | `<pre>` | The pre-formatted code container |
508
- | `code` | `<code>` | The code element containing highlighted tokens |
240
+ | File | Languages |
241
+ |------|-----------|
242
+ | `typescript.json` | TypeScript, JavaScript |
243
+ | `html.json` | HTML, XML |
244
+ | `css.json` | CSS, SCSS, Less |
245
+ | `json.json` | JSON |
246
+ | `python.json` | Python |
247
+ | `bash.json` | Bash, Shell |
248
+ | `snice.json` | Snice (TypeScript + html/css template highlighting) |
509
249
 
510
- ```css
511
- snice-code-block::part(container) {
512
- border-radius: 8px;
513
- }
250
+ ## Accessibility
514
251
 
515
- snice-code-block::part(header) {
516
- padding: 0.5rem 1rem;
517
- }
518
- ```
252
+ - Auto-follows `data-theme` attribute or OS `prefers-color-scheme`
253
+ - Copy button for easy code copying
254
+ - Semantic `<pre>` and `<code>` elements