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
@@ -0,0 +1,676 @@
1
+ # Action Bar Implementation Plan
2
+
3
+ > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
4
+
5
+ **Goal:** Build `snice-action-bar`, a positioned animated container for contextual actions with slotted content.
6
+
7
+ **Architecture:** Slot-only component using `position: absolute` within a relative parent. CSS transitions for fade+slide animation. Roving tabindex for keyboard nav. Follows existing drawer/banner patterns for show/hide lifecycle.
8
+
9
+ **Tech Stack:** Snice decorators (@element, @property, @watch, @dispatch, @render, @styles, @query, @on, @ready, @dispose), CSS transitions, role="toolbar"
10
+
11
+ **Design doc:** `docs/plans/2026-03-09-action-bar-design.md`
12
+
13
+ **Component checklist:** `.ai/component-checklist.md` — verify ALL items before marking complete.
14
+
15
+ ## REQUIRED READING — Complete ALL before writing any code
16
+
17
+ ### Project instructions (read first)
18
+ 1. `CLAUDE.md` — project instructions, overrides, all links mentioned must be followed
19
+
20
+ ### Development guidelines (read second)
21
+ 2. `docs/ai/README.md` — API reference, pitfalls, decorator patterns, component import patterns
22
+ 3. `docs/ai/DEVELOPMENT.md` — build system, testing, component file structure, adding components checklist, CDN builds, React adapters, test generation, component template
23
+
24
+ ### Internal coding standards (read third — these are mandatory)
25
+ 4. `.ai/coding-standards.md` — REQUIRED decorator patterns (@query, @on, @dispatch, @ready, @dispose, @observe, @watch, @request/@respond), CSS theme integration with fallbacks, units (rem vs px), two-tier variable pattern, container component dual API, dos and don'ts
26
+ 5. `.ai/component-checklist.md` — every item must be satisfied before component is complete
27
+ 6. `.ai/component-docs-guide.md` — exact doc format for both human and AI docs, section order, writing rules
28
+ 7. `.ai/notes.md` — project organization (customer-facing vs internal), file naming, camera/timer rules, scroll spy notes
29
+ 8. `.ai/playwright-testing.md` — E2E testing rules, .debug/ only for temp files, always headless
30
+ 9. `.ai/tasks.md` — has pending tasks list AND required snice decorator patterns reference at the bottom
31
+ 10. `.ai/release-checklist.md` — release process, when to manually update llms.txt
32
+
33
+ ### Design spec (read fourth)
34
+ 11. `docs/plans/2026-03-09-action-bar-design.md` — the design spec for this component
35
+
36
+ ### Reference files (read as needed during implementation)
37
+ - `components/banner/snice-banner.ts` — closest pattern to follow (show/hide, events, @watch)
38
+ - `components/banner/snice-banner.types.ts` — types file pattern
39
+ - `components/banner/snice-banner.css` — CSS pattern with theme tokens and fallbacks
40
+ - `components/theme/theme.css` — all available CSS custom properties
41
+ - `components/drawer/snice-drawer.ts` — positioning and escape key patterns
42
+ - `components/tooltip/snice-tooltip.ts` — keyboard navigation pattern
43
+
44
+ ---
45
+
46
+ ### Task 1: Add to WIP list
47
+
48
+ **Files:**
49
+ - Modify: `components/.wip`
50
+
51
+ **Step 1: Add action-bar to WIP**
52
+
53
+ Add `action-bar` to `components/.wip` so it's excluded from builds while in development.
54
+
55
+ **Step 2: Create component directory**
56
+
57
+ ```bash
58
+ mkdir -p components/action-bar
59
+ ```
60
+
61
+ **Step 3: Commit**
62
+
63
+ ```bash
64
+ git add components/.wip
65
+ git commit -m "chore: add action-bar to WIP list"
66
+ ```
67
+
68
+ ---
69
+
70
+ ### Task 2: Types file
71
+
72
+ **Files:**
73
+ - Create: `components/action-bar/snice-action-bar.types.ts`
74
+
75
+ **Step 1: Write types**
76
+
77
+ ```typescript
78
+ export type ActionBarPosition = 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
79
+ export type ActionBarSize = 'small' | 'medium';
80
+ export type ActionBarVariant = 'default' | 'pill';
81
+
82
+ export interface SniceActionBarElement extends HTMLElement {
83
+ open: boolean;
84
+ position: ActionBarPosition;
85
+ size: ActionBarSize;
86
+ variant: ActionBarVariant;
87
+ noAnimation: boolean;
88
+ noEscapeDismiss: boolean;
89
+
90
+ show(): void;
91
+ hide(): void;
92
+ toggle(): void;
93
+ }
94
+
95
+ export interface ActionBarEventDetail {
96
+ actionBar: SniceActionBarElement;
97
+ }
98
+ ```
99
+
100
+ **Step 2: Commit**
101
+
102
+ ```bash
103
+ git add components/action-bar/snice-action-bar.types.ts
104
+ git commit -m "feat(action-bar): add type definitions"
105
+ ```
106
+
107
+ ---
108
+
109
+ ### Task 3: CSS file
110
+
111
+ **Files:**
112
+ - Create: `components/action-bar/snice-action-bar.css`
113
+ - Reference: `.ai/coding-standards.md` for theme token patterns, units, fallbacks
114
+
115
+ **Step 1: Read theme.css for available tokens**
116
+
117
+ Read `components/theme/theme.css` to understand available custom properties.
118
+
119
+ **Step 2: Write styles**
120
+
121
+ Key requirements:
122
+ - `:host` uses `contain: layout style paint`, `display: block`, `position: absolute`
123
+ - Position mapping via `:host([position="..."])` attribute selectors using CSS inset properties
124
+ - Size variants via `:host([size="small"])`
125
+ - Pill variant via `:host([variant="pill"])`
126
+ - Animation: CSS transitions on `opacity` and `transform`
127
+ - Hidden state (not open, not no-animation): `opacity: 0`, `pointer-events: none`, translated away from anchor
128
+ - Open state: `opacity: 1`, `pointer-events: auto`, `transform: none`
129
+ - `no-animation` state: no transition, always visible
130
+ - All `var()` calls MUST have fallbacks
131
+ - Spacing/typography in rem, borders/shadows in px
132
+ - Two-tier variable pattern for customizable properties
133
+
134
+ ```css
135
+ :host {
136
+ display: block;
137
+ position: absolute;
138
+ z-index: var(--action-bar-z-index, 10);
139
+ font-family: var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);
140
+ contain: layout style paint;
141
+ pointer-events: none;
142
+ opacity: 0;
143
+ transition: opacity var(--snice-transition-medium, 250ms) ease, transform var(--snice-transition-medium, 250ms) ease;
144
+ }
145
+
146
+ :host([open]),
147
+ :host([no-animation]) {
148
+ pointer-events: auto;
149
+ opacity: 1;
150
+ transform: translate(0, 0);
151
+ }
152
+
153
+ :host([no-animation]) {
154
+ transition: none;
155
+ }
156
+
157
+ /* Position: bottom (default) — centered bottom, slides up */
158
+ :host,
159
+ :host([position="bottom"]) {
160
+ bottom: var(--snice-spacing-sm, 0.75rem);
161
+ left: 50%;
162
+ transform: translate(-50%, 0.5rem);
163
+ }
164
+ :host([position="bottom"][open]),
165
+ :host([position="bottom"][no-animation]) {
166
+ transform: translate(-50%, 0);
167
+ }
168
+
169
+ /* Position: top — centered top, slides down */
170
+ :host([position="top"]) {
171
+ top: var(--snice-spacing-sm, 0.75rem);
172
+ left: 50%;
173
+ transform: translate(-50%, -0.5rem);
174
+ }
175
+ :host([position="top"][open]),
176
+ :host([position="top"][no-animation]) {
177
+ transform: translate(-50%, 0);
178
+ }
179
+
180
+ /* Position: left — centered left, slides right */
181
+ :host([position="left"]) {
182
+ left: var(--snice-spacing-sm, 0.75rem);
183
+ top: 50%;
184
+ transform: translate(-0.5rem, -50%);
185
+ }
186
+ :host([position="left"][open]),
187
+ :host([position="left"][no-animation]) {
188
+ transform: translate(0, -50%);
189
+ }
190
+
191
+ /* Position: right — centered right, slides left */
192
+ :host([position="right"]) {
193
+ right: var(--snice-spacing-sm, 0.75rem);
194
+ top: 50%;
195
+ transform: translate(0.5rem, -50%);
196
+ }
197
+ :host([position="right"][open]),
198
+ :host([position="right"][no-animation]) {
199
+ transform: translate(0, -50%);
200
+ }
201
+
202
+ /* Corners */
203
+ :host([position="top-left"]) {
204
+ top: var(--snice-spacing-sm, 0.75rem);
205
+ left: var(--snice-spacing-sm, 0.75rem);
206
+ transform: translate(-0.5rem, -0.5rem);
207
+ }
208
+ :host([position="top-left"][open]),
209
+ :host([position="top-left"][no-animation]) {
210
+ transform: translate(0, 0);
211
+ }
212
+
213
+ :host([position="top-right"]) {
214
+ top: var(--snice-spacing-sm, 0.75rem);
215
+ right: var(--snice-spacing-sm, 0.75rem);
216
+ transform: translate(0.5rem, -0.5rem);
217
+ }
218
+ :host([position="top-right"][open]),
219
+ :host([position="top-right"][no-animation]) {
220
+ transform: translate(0, 0);
221
+ }
222
+
223
+ :host([position="bottom-left"]) {
224
+ bottom: var(--snice-spacing-sm, 0.75rem);
225
+ left: var(--snice-spacing-sm, 0.75rem);
226
+ transform: translate(-0.5rem, 0.5rem);
227
+ }
228
+ :host([position="bottom-left"][open]),
229
+ :host([position="bottom-left"][no-animation]) {
230
+ transform: translate(0, 0);
231
+ }
232
+
233
+ :host([position="bottom-right"]) {
234
+ bottom: var(--snice-spacing-sm, 0.75rem);
235
+ right: var(--snice-spacing-sm, 0.75rem);
236
+ transform: translate(0.5rem, 0.5rem);
237
+ }
238
+ :host([position="bottom-right"][open]),
239
+ :host([position="bottom-right"][no-animation]) {
240
+ transform: translate(0, 0);
241
+ }
242
+
243
+ /* Inner container */
244
+ .action-bar {
245
+ display: inline-flex;
246
+ align-items: center;
247
+ gap: var(--action-bar-gap, var(--snice-spacing-2xs, 0.25rem));
248
+ padding: var(--action-bar-padding, var(--snice-spacing-xs, 0.5rem));
249
+ background: var(--action-bar-background, var(--snice-color-background-element, rgb(252 251 249)));
250
+ border: var(--action-bar-border, 1px solid var(--snice-color-border, rgb(226 226 226)));
251
+ border-radius: var(--action-bar-border-radius, var(--snice-border-radius-lg, 0.5rem));
252
+ box-shadow: var(--action-bar-shadow, var(--snice-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)));
253
+ }
254
+
255
+ /* Pill variant */
256
+ :host([variant="pill"]) .action-bar {
257
+ border-radius: 9999px;
258
+ }
259
+
260
+ /* Size: small */
261
+ :host([size="small"]) .action-bar {
262
+ gap: var(--snice-spacing-3xs, 0.125rem);
263
+ padding: var(--snice-spacing-2xs, 0.25rem) var(--snice-spacing-xs, 0.5rem);
264
+ }
265
+ ```
266
+
267
+ **Step 3: Commit**
268
+
269
+ ```bash
270
+ git add components/action-bar/snice-action-bar.css
271
+ git commit -m "feat(action-bar): add component styles"
272
+ ```
273
+
274
+ ---
275
+
276
+ ### Task 4: Component implementation
277
+
278
+ **Files:**
279
+ - Create: `components/action-bar/snice-action-bar.ts`
280
+ - Reference: `components/banner/snice-banner.ts` for pattern
281
+
282
+ **Step 1: Write component**
283
+
284
+ ```typescript
285
+ import { element, property, watch, dispatch, render, styles, on, ready, dispose } from 'snice';
286
+ import { html, css } from 'snice';
287
+ import cssContent from './snice-action-bar.css?inline';
288
+ import type { ActionBarPosition, ActionBarSize, ActionBarVariant, SniceActionBarElement, ActionBarEventDetail } from './snice-action-bar.types';
289
+
290
+ @element('snice-action-bar')
291
+ export class SniceActionBar extends HTMLElement implements SniceActionBarElement {
292
+ @property({ type: Boolean }) open = false;
293
+ @property() position: ActionBarPosition = 'bottom';
294
+ @property() size: ActionBarSize = 'medium';
295
+ @property() variant: ActionBarVariant = 'default';
296
+ @property({ type: Boolean, attribute: 'no-animation' }) noAnimation = false;
297
+ @property({ type: Boolean, attribute: 'no-escape-dismiss' }) noEscapeDismiss = false;
298
+
299
+ @watch('open')
300
+ handleOpenChange() {
301
+ if (this.open) {
302
+ this.setAttribute('open', '');
303
+ this.emitOpen();
304
+ } else {
305
+ this.removeAttribute('open');
306
+ this.emitClose();
307
+ }
308
+ }
309
+
310
+ @watch('noAnimation')
311
+ handleNoAnimationChange() {
312
+ if (this.noAnimation) {
313
+ this.setAttribute('no-animation', '');
314
+ } else {
315
+ this.removeAttribute('no-animation');
316
+ }
317
+ }
318
+
319
+ @dispatch('action-bar-open', { bubbles: true, composed: true })
320
+ private emitOpen(): ActionBarEventDetail {
321
+ return { actionBar: this };
322
+ }
323
+
324
+ @dispatch('action-bar-close', { bubbles: true, composed: true })
325
+ private emitClose(): ActionBarEventDetail {
326
+ return { actionBar: this };
327
+ }
328
+
329
+ @on('keydown')
330
+ handleKeydown(e: KeyboardEvent) {
331
+ if (e.key === 'Escape' && !this.noEscapeDismiss) {
332
+ this.hide();
333
+ return;
334
+ }
335
+
336
+ const focusable = this.getFocusableChildren();
337
+ if (focusable.length === 0) return;
338
+
339
+ const current = focusable.indexOf(document.activeElement as HTMLElement);
340
+ let next = -1;
341
+
342
+ if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {
343
+ e.preventDefault();
344
+ next = current < focusable.length - 1 ? current + 1 : 0;
345
+ } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {
346
+ e.preventDefault();
347
+ next = current > 0 ? current - 1 : focusable.length - 1;
348
+ } else if (e.key === 'Home') {
349
+ e.preventDefault();
350
+ next = 0;
351
+ } else if (e.key === 'End') {
352
+ e.preventDefault();
353
+ next = focusable.length - 1;
354
+ }
355
+
356
+ if (next >= 0) {
357
+ focusable[next].focus();
358
+ }
359
+ }
360
+
361
+ show() {
362
+ this.open = true;
363
+ }
364
+
365
+ hide() {
366
+ this.open = false;
367
+ }
368
+
369
+ toggle() {
370
+ this.open = !this.open;
371
+ }
372
+
373
+ private getFocusableChildren(): HTMLElement[] {
374
+ const slot = this.shadowRoot?.querySelector('slot');
375
+ if (!slot) return [];
376
+ const elements = slot.assignedElements({ flatten: true }) as HTMLElement[];
377
+ return elements.filter(el =>
378
+ !el.hasAttribute('disabled') &&
379
+ (el.tabIndex >= 0 || el.matches('button, [href], input, select, textarea, [tabindex]'))
380
+ );
381
+ }
382
+
383
+ @render()
384
+ template() {
385
+ return html`
386
+ <div class="action-bar" role="toolbar" part="base">
387
+ <slot></slot>
388
+ </div>
389
+ `;
390
+ }
391
+
392
+ @styles()
393
+ componentStyles() {
394
+ return css`${cssContent}`;
395
+ }
396
+ }
397
+ ```
398
+
399
+ **Step 2: Commit**
400
+
401
+ ```bash
402
+ git add components/action-bar/snice-action-bar.ts
403
+ git commit -m "feat(action-bar): add component implementation"
404
+ ```
405
+
406
+ ---
407
+
408
+ ### Task 5: Unit tests
409
+
410
+ **Files:**
411
+ - Create: `tests/components/action-bar.test.ts`
412
+ - Reference: `tests/components/banner.test.ts` for pattern
413
+
414
+ **Step 1: Write tests**
415
+
416
+ Test the following:
417
+ - Renders with default properties
418
+ - `open` property shows/hides
419
+ - `show()`, `hide()`, `toggle()` methods work
420
+ - `action-bar-open` and `action-bar-close` events fire
421
+ - `position` attribute renders correct positioning
422
+ - `variant="pill"` applies pill style
423
+ - `size="small"` applies small size
424
+ - `no-animation` mode: always visible
425
+ - `Escape` key calls hide
426
+ - `no-escape-dismiss` prevents Escape from closing
427
+ - Arrow key navigation between slotted children
428
+ - Slotted content renders in the slot
429
+
430
+ Use `createComponent`, `removeComponent`, `queryShadow`, `wait` from test utils. Import the component and types. Use `await el.ready` before assertions.
431
+
432
+ **Step 2: Run tests to verify they fail**
433
+
434
+ ```bash
435
+ npm run test:src -- --grep "action-bar"
436
+ ```
437
+
438
+ Expected: FAIL (component not built yet — but files exist)
439
+
440
+ **Step 3: Run tests to verify they pass**
441
+
442
+ ```bash
443
+ npm run test:src -- --grep "action-bar"
444
+ ```
445
+
446
+ Expected: All PASS
447
+
448
+ **Step 4: Commit**
449
+
450
+ ```bash
451
+ git add tests/components/action-bar.test.ts
452
+ git commit -m "test(action-bar): add unit tests"
453
+ ```
454
+
455
+ ---
456
+
457
+ ### Task 6: Demo page
458
+
459
+ **Files:**
460
+ - Create: `components/action-bar/demo.html`
461
+ - Reference: `components/banner/demo.html` for pattern
462
+
463
+ **Step 1: Write demo**
464
+
465
+ Create a demo page that shows:
466
+ - Basic action-bar with icon buttons (default variant)
467
+ - Pill variant
468
+ - All position values (top, bottom, left, right, corners)
469
+ - Size small vs medium
470
+ - Animated show/hide (hover a card to trigger)
471
+ - Always-visible (no-animation) mode
472
+ - Works in both light and dark mode (use theme tokens)
473
+
474
+ **Step 2: Manual test**
475
+
476
+ ```bash
477
+ npm run dev
478
+ # Open http://localhost:5566/components/action-bar/demo.html
479
+ # Verify light mode, dark mode, hover animations
480
+ ```
481
+
482
+ **Step 3: Commit**
483
+
484
+ ```bash
485
+ git add components/action-bar/demo.html
486
+ git commit -m "feat(action-bar): add demo page"
487
+ ```
488
+
489
+ ---
490
+
491
+ ### Task 7: Full showcase
492
+
493
+ **Files:**
494
+ - Create: `components/action-bar/full-showcase.html`
495
+
496
+ **Step 1: Write full showcase**
497
+
498
+ Demo ALL features: variants, sizes, positions, animation modes, keyboard nav. Follow existing full-showcase patterns from other components.
499
+
500
+ **Step 2: Commit**
501
+
502
+ ```bash
503
+ git add components/action-bar/full-showcase.html
504
+ git commit -m "feat(action-bar): add full showcase"
505
+ ```
506
+
507
+ ---
508
+
509
+ ### Task 8: Documentation
510
+
511
+ **Files:**
512
+ - Create: `docs/components/action-bar.md` (human-friendly)
513
+ - Create: `docs/ai/components/action-bar.md` (token-efficient)
514
+ - Reference: `.ai/component-docs-guide.md` for exact format
515
+
516
+ **Step 1: Write human docs**
517
+
518
+ Follow the section order from component-docs-guide.md:
519
+ 1. Title + tag name
520
+ 2. One-sentence description
521
+ 3. Basic usage
522
+ 4. Import paths (ESM + CDN)
523
+ 5. Examples (variants, sizes, positions, animation, keyboard)
524
+ 6. Slots
525
+ 7. Properties table
526
+ 8. Events table
527
+ 9. Methods table
528
+ 10. CSS Custom Properties table
529
+
530
+ **Step 2: Write AI docs**
531
+
532
+ Token-efficient format:
533
+ - TypeScript property signatures in code block
534
+ - Bullets for slots, events, methods
535
+ - One usage block
536
+ - 50-150 lines max
537
+
538
+ **Step 3: Commit**
539
+
540
+ ```bash
541
+ git add docs/components/action-bar.md docs/ai/components/action-bar.md
542
+ git commit -m "docs(action-bar): add human and AI documentation"
543
+ ```
544
+
545
+ ---
546
+
547
+ ### Task 9: React adapter + tests
548
+
549
+ **Files:**
550
+ - Modify: `scripts/generate-react-tests.js` (add test metadata)
551
+ - Reference: `scripts/generate-react-adapters.js` (auto-discovers, no changes needed)
552
+
553
+ **Step 1: Add test metadata to generate-react-tests.js**
554
+
555
+ Add entry for action-bar with properties, events, variants, sizes.
556
+
557
+ **Step 2: Generate adapters and tests**
558
+
559
+ ```bash
560
+ npm run generate:react-adapters
561
+ npm run generate:react-tests
562
+ ```
563
+
564
+ **Step 3: Run React tests**
565
+
566
+ ```bash
567
+ npm run test:react-adapters -- --grep "action-bar"
568
+ ```
569
+
570
+ Expected: PASS
571
+
572
+ **Step 4: Commit**
573
+
574
+ ```bash
575
+ git add scripts/generate-react-tests.js adapters/react/ tests/react-adapters/
576
+ git commit -m "feat(action-bar): add React adapter and tests"
577
+ ```
578
+
579
+ ---
580
+
581
+ ### Task 10: Website showcase
582
+
583
+ **Files:**
584
+ - Create: `public/showcases/action-bar.html` (fragment)
585
+ - Modify: `public/showcases/manifest.json` (add entry)
586
+ - Modify: `public/showcases/_footer.html` (add script tag + comp-list entry)
587
+
588
+ **Step 1: Write showcase fragment**
589
+
590
+ Start with `<div class="comp-section">`, use `comp-split` layout pattern. Interactive demo with hover trigger.
591
+
592
+ **Step 2: Add to manifest.json**
593
+
594
+ Add `"action-bar.html"` in the appropriate category section.
595
+
596
+ **Step 3: Add script tag and comp-list entry to _footer.html**
597
+
598
+ **Step 4: Rebuild showcases**
599
+
600
+ ```bash
601
+ node public/build-showcases.js
602
+ ```
603
+
604
+ **Step 5: Commit**
605
+
606
+ ```bash
607
+ git add public/showcases/action-bar.html public/showcases/manifest.json public/showcases/_footer.html public/components.html
608
+ git commit -m "feat(action-bar): add website showcase"
609
+ ```
610
+
611
+ ---
612
+
613
+ ### Task 11: Build and final verification
614
+
615
+ **Step 1: Remove from WIP**
616
+
617
+ Remove `action-bar` from `components/.wip`.
618
+
619
+ **Step 2: Full build**
620
+
621
+ ```bash
622
+ npm run build
623
+ ```
624
+
625
+ Expected: SUCCESS
626
+
627
+ **Step 3: CDN build**
628
+
629
+ ```bash
630
+ npx snice build-component action-bar
631
+ ```
632
+
633
+ **Step 4: Copy CDN to public**
634
+
635
+ ```bash
636
+ node scripts/build-website.js
637
+ ```
638
+
639
+ **Step 5: Run all tests**
640
+
641
+ ```bash
642
+ npm test
643
+ ```
644
+
645
+ Expected: ALL PASS
646
+
647
+ **Step 6: Verify against component checklist**
648
+
649
+ Run through every item in `.ai/component-checklist.md`:
650
+ - [ ] Pre-implementation items
651
+ - [ ] Implementation items
652
+ - [ ] Testing items
653
+ - [ ] React adapter items
654
+ - [ ] CDN build items
655
+ - [ ] Documentation items
656
+ - [ ] MCP server catalogue items
657
+ - [ ] Website integration items
658
+ - [ ] Final verification items
659
+
660
+ **Step 7: Commit**
661
+
662
+ ```bash
663
+ git add .
664
+ git commit -m "feat(action-bar): complete component, remove from WIP"
665
+ ```
666
+
667
+ ---
668
+
669
+ ### Stretch Goal: `for` attribute
670
+
671
+ Deferred to a follow-up task. When implemented:
672
+ - `for` property (string selector)
673
+ - `@ready()` resolves element via `this.closest(selector)` then `document.querySelector(selector)`
674
+ - Attaches mouseenter/mouseleave listeners
675
+ - `@dispose()` cleans up
676
+ - `@watch('for')` re-binds on change