@dowel-ui/react 0.5.0 → 0.8.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 (1787) hide show
  1. package/README.md +3 -3
  2. package/dist/blocks/admin-dashboard/meta.js +31 -0
  3. package/dist/blocks/admin-dashboard/meta.js.map +1 -0
  4. package/dist/blocks/agent-console/meta.js +27 -0
  5. package/dist/blocks/agent-console/meta.js.map +1 -0
  6. package/dist/blocks/ai-dashboard/meta.js +25 -0
  7. package/dist/blocks/ai-dashboard/meta.js.map +1 -0
  8. package/dist/blocks/ai-workspace/meta.js +33 -0
  9. package/dist/blocks/ai-workspace/meta.js.map +1 -0
  10. package/dist/blocks/analytics/meta.js +24 -0
  11. package/dist/blocks/analytics/meta.js.map +1 -0
  12. package/dist/blocks/billing/meta.js +25 -0
  13. package/dist/blocks/billing/meta.js.map +1 -0
  14. package/dist/blocks/command-center/meta.js +28 -0
  15. package/dist/blocks/command-center/meta.js.map +1 -0
  16. package/dist/blocks/crm/meta.js +32 -0
  17. package/dist/blocks/crm/meta.js.map +1 -0
  18. package/dist/blocks/cta-banner/meta.js +18 -0
  19. package/dist/blocks/cta-banner/meta.js.map +1 -0
  20. package/dist/blocks/cta-centered/meta.js +18 -0
  21. package/dist/blocks/cta-centered/meta.js.map +1 -0
  22. package/dist/blocks/cta-split-image/meta.js +18 -0
  23. package/dist/blocks/cta-split-image/meta.js.map +1 -0
  24. package/dist/blocks/faq-accordion/meta.js +18 -0
  25. package/dist/blocks/faq-accordion/meta.js.map +1 -0
  26. package/dist/blocks/faq-categorized/meta.js +18 -0
  27. package/dist/blocks/faq-categorized/meta.js.map +1 -0
  28. package/dist/blocks/faq-searchable/meta.js +22 -0
  29. package/dist/blocks/faq-searchable/meta.js.map +1 -0
  30. package/dist/blocks/faq-tabbed-grid/meta.js +18 -0
  31. package/dist/blocks/faq-tabbed-grid/meta.js.map +1 -0
  32. package/dist/blocks/features-alternating/meta.js +18 -0
  33. package/dist/blocks/features-alternating/meta.js.map +1 -0
  34. package/dist/blocks/features-bento/meta.js +18 -0
  35. package/dist/blocks/features-bento/meta.js.map +1 -0
  36. package/dist/blocks/features-icon-grid/meta.js +18 -0
  37. package/dist/blocks/features-icon-grid/meta.js.map +1 -0
  38. package/dist/blocks/footer-mega/meta.js +22 -0
  39. package/dist/blocks/footer-mega/meta.js.map +1 -0
  40. package/dist/blocks/footer-minimal/meta.js +18 -0
  41. package/dist/blocks/footer-minimal/meta.js.map +1 -0
  42. package/dist/blocks/footer-newsletter/meta.js +22 -0
  43. package/dist/blocks/footer-newsletter/meta.js.map +1 -0
  44. package/dist/blocks/footer-simple/meta.js +18 -0
  45. package/dist/blocks/footer-simple/meta.js.map +1 -0
  46. package/dist/blocks/hero-grid/meta.js +18 -0
  47. package/dist/blocks/hero-grid/meta.js.map +1 -0
  48. package/dist/blocks/hero-minimal/meta.js +18 -0
  49. package/dist/blocks/hero-minimal/meta.js.map +1 -0
  50. package/dist/blocks/hero-perspective-grid/meta.js +18 -0
  51. package/dist/blocks/hero-perspective-grid/meta.js.map +1 -0
  52. package/dist/blocks/hero-product/meta.js +22 -0
  53. package/dist/blocks/hero-product/meta.js.map +1 -0
  54. package/dist/blocks/hero-split-image/meta.js +22 -0
  55. package/dist/blocks/hero-split-image/meta.js.map +1 -0
  56. package/dist/blocks/hero-spotlight/meta.js +18 -0
  57. package/dist/blocks/hero-spotlight/meta.js.map +1 -0
  58. package/dist/blocks/logo-cloud-simple/meta.js +18 -0
  59. package/dist/blocks/logo-cloud-simple/meta.js.map +1 -0
  60. package/dist/blocks/logo-grid-tooltips/meta.js +18 -0
  61. package/dist/blocks/logo-grid-tooltips/meta.js.map +1 -0
  62. package/dist/blocks/logo-links-marquee/meta.js +18 -0
  63. package/dist/blocks/logo-links-marquee/meta.js.map +1 -0
  64. package/dist/blocks/logo-marquee/meta.js +18 -0
  65. package/dist/blocks/logo-marquee/meta.js.map +1 -0
  66. package/dist/blocks/onboarding/meta.js +23 -0
  67. package/dist/blocks/onboarding/meta.js.map +1 -0
  68. package/dist/blocks/pricing-single-plan/meta.js +25 -0
  69. package/dist/blocks/pricing-single-plan/meta.js.map +1 -0
  70. package/dist/blocks/pricing-three-tier/meta.js +25 -0
  71. package/dist/blocks/pricing-three-tier/meta.js.map +1 -0
  72. package/dist/blocks/pricing-two-tier/meta.js +25 -0
  73. package/dist/blocks/pricing-two-tier/meta.js.map +1 -0
  74. package/dist/blocks/stats-grid/meta.js +18 -0
  75. package/dist/blocks/stats-grid/meta.js.map +1 -0
  76. package/dist/blocks/stats-trend-cards/meta.js +22 -0
  77. package/dist/blocks/stats-trend-cards/meta.js.map +1 -0
  78. package/dist/blocks/team-carousel/meta.js +22 -0
  79. package/dist/blocks/team-carousel/meta.js.map +1 -0
  80. package/dist/blocks/team-grid/meta.js +18 -0
  81. package/dist/blocks/team-grid/meta.js.map +1 -0
  82. package/dist/blocks/testimonial-rotator/meta.js +18 -0
  83. package/dist/blocks/testimonial-rotator/meta.js.map +1 -0
  84. package/dist/blocks/testimonial-spotlight/meta.js +22 -0
  85. package/dist/blocks/testimonial-spotlight/meta.js.map +1 -0
  86. package/dist/blocks/testimonial-star-grid/meta.js +18 -0
  87. package/dist/blocks/testimonial-star-grid/meta.js.map +1 -0
  88. package/dist/components/accordion/accordion.js +1 -1
  89. package/dist/components/accordion/accordion.js.map +1 -1
  90. package/dist/components/account-menu/account-menu.d.ts +56 -0
  91. package/dist/components/account-menu/account-menu.d.ts.map +1 -0
  92. package/dist/components/account-menu/account-menu.js +247 -0
  93. package/dist/components/account-menu/account-menu.js.map +1 -0
  94. package/dist/components/account-menu/index.d.ts +2 -0
  95. package/dist/components/account-menu/index.js +2 -0
  96. package/dist/components/account-menu/meta.js +24 -0
  97. package/dist/components/account-menu/meta.js.map +1 -0
  98. package/dist/components/action-node/action-node-spring.js +21 -0
  99. package/dist/components/action-node/action-node-spring.js.map +1 -0
  100. package/dist/components/action-node/action-node.d.ts +67 -0
  101. package/dist/components/action-node/action-node.d.ts.map +1 -0
  102. package/dist/components/action-node/action-node.js +374 -0
  103. package/dist/components/action-node/action-node.js.map +1 -0
  104. package/dist/components/action-node/index.d.ts +2 -0
  105. package/dist/components/action-node/index.js +2 -0
  106. package/dist/components/action-node/meta.js +17 -0
  107. package/dist/components/action-node/meta.js.map +1 -0
  108. package/dist/components/activity-feed/activity-feed.js +1 -1
  109. package/dist/components/activity-feed/activity-feed.js.map +1 -1
  110. package/dist/components/ai-agent-plan/ai-agent-plan.d.ts +13 -2
  111. package/dist/components/ai-agent-plan/ai-agent-plan.d.ts.map +1 -1
  112. package/dist/components/ai-agent-plan/ai-agent-plan.js +110 -43
  113. package/dist/components/ai-agent-plan/ai-agent-plan.js.map +1 -1
  114. package/dist/components/ai-agent-plan/index.d.ts +2 -2
  115. package/dist/components/ai-agent-plan/meta.js +1 -1
  116. package/dist/components/ai-agent-plan/meta.js.map +1 -1
  117. package/dist/components/ai-agent-status/ai-agent-status.d.ts +1 -1
  118. package/dist/components/ai-approval-request/ai-approval-request.d.ts +8 -1
  119. package/dist/components/ai-approval-request/ai-approval-request.d.ts.map +1 -1
  120. package/dist/components/ai-approval-request/ai-approval-request.js +67 -12
  121. package/dist/components/ai-approval-request/ai-approval-request.js.map +1 -1
  122. package/dist/components/ai-approval-request/meta.js +1 -1
  123. package/dist/components/ai-approval-request/meta.js.map +1 -1
  124. package/dist/components/ai-artifact/ai-artifact.d.ts +27 -0
  125. package/dist/components/ai-artifact/ai-artifact.d.ts.map +1 -0
  126. package/dist/components/ai-artifact/ai-artifact.js +142 -0
  127. package/dist/components/ai-artifact/ai-artifact.js.map +1 -0
  128. package/dist/components/ai-artifact/index.d.ts +2 -0
  129. package/dist/components/ai-artifact/index.js +2 -0
  130. package/dist/components/ai-artifact/meta.js +17 -0
  131. package/dist/components/ai-artifact/meta.js.map +1 -0
  132. package/dist/components/ai-branch/ai-branch.d.ts +32 -0
  133. package/dist/components/ai-branch/ai-branch.d.ts.map +1 -0
  134. package/dist/components/ai-branch/ai-branch.js +160 -0
  135. package/dist/components/ai-branch/ai-branch.js.map +1 -0
  136. package/dist/components/ai-branch/index.d.ts +2 -0
  137. package/dist/components/ai-branch/index.js +2 -0
  138. package/dist/components/ai-branch/meta.js +17 -0
  139. package/dist/components/ai-branch/meta.js.map +1 -0
  140. package/dist/components/ai-conversation/ai-conversation.d.ts +16 -4
  141. package/dist/components/ai-conversation/ai-conversation.d.ts.map +1 -1
  142. package/dist/components/ai-conversation/ai-conversation.js +78 -10
  143. package/dist/components/ai-conversation/ai-conversation.js.map +1 -1
  144. package/dist/components/ai-conversation/index.d.ts +2 -2
  145. package/dist/components/ai-extraction-review/ai-extraction-review.js +1 -1
  146. package/dist/components/ai-extraction-review/ai-extraction-review.js.map +1 -1
  147. package/dist/components/ai-loader/ai-loader.d.ts +22 -0
  148. package/dist/components/ai-loader/ai-loader.d.ts.map +1 -0
  149. package/dist/components/ai-loader/ai-loader.js +78 -0
  150. package/dist/components/ai-loader/ai-loader.js.map +1 -0
  151. package/dist/components/ai-loader/index.d.ts +2 -0
  152. package/dist/components/ai-loader/index.js +2 -0
  153. package/dist/components/ai-loader/meta.js +21 -0
  154. package/dist/components/ai-loader/meta.js.map +1 -0
  155. package/dist/components/ai-message/ai-message.d.ts +13 -2
  156. package/dist/components/ai-message/ai-message.d.ts.map +1 -1
  157. package/dist/components/ai-message/ai-message.js +29 -5
  158. package/dist/components/ai-message/ai-message.js.map +1 -1
  159. package/dist/components/ai-message/index.d.ts +2 -2
  160. package/dist/components/ai-message/index.js +2 -2
  161. package/dist/components/ai-message/meta.js +1 -1
  162. package/dist/components/ai-message/meta.js.map +1 -1
  163. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  164. package/dist/components/ai-prompt-input/ai-prompt-input.js +45 -26
  165. package/dist/components/ai-prompt-input/ai-prompt-input.js.map +1 -1
  166. package/dist/components/ai-reasoning/ai-reasoning.d.ts +39 -11
  167. package/dist/components/ai-reasoning/ai-reasoning.d.ts.map +1 -1
  168. package/dist/components/ai-reasoning/ai-reasoning.js +114 -10
  169. package/dist/components/ai-reasoning/ai-reasoning.js.map +1 -1
  170. package/dist/components/ai-reasoning/index.d.ts +2 -2
  171. package/dist/components/ai-reasoning/index.js +2 -2
  172. package/dist/components/ai-reasoning/meta.js +2 -2
  173. package/dist/components/ai-reasoning/meta.js.map +1 -1
  174. package/dist/components/ai-response/ai-response.d.ts +4 -0
  175. package/dist/components/ai-response/ai-response.d.ts.map +1 -1
  176. package/dist/components/ai-response/ai-response.js +7 -3
  177. package/dist/components/ai-response/ai-response.js.map +1 -1
  178. package/dist/components/ai-response/index.d.ts +2 -1
  179. package/dist/components/ai-response/index.js +2 -1
  180. package/dist/components/ai-response/meta.js +3 -3
  181. package/dist/components/ai-response/meta.js.map +1 -1
  182. package/dist/components/ai-response/response-text.d.ts +42 -0
  183. package/dist/components/ai-response/response-text.d.ts.map +1 -0
  184. package/dist/components/ai-response/response-text.js +63 -0
  185. package/dist/components/ai-response/response-text.js.map +1 -0
  186. package/dist/components/ai-sources/ai-sources.d.ts +31 -5
  187. package/dist/components/ai-sources/ai-sources.d.ts.map +1 -1
  188. package/dist/components/ai-sources/ai-sources.js +188 -47
  189. package/dist/components/ai-sources/ai-sources.js.map +1 -1
  190. package/dist/components/ai-sources/index.d.ts +2 -2
  191. package/dist/components/ai-sources/index.js +2 -2
  192. package/dist/components/ai-sources/meta.js +2 -2
  193. package/dist/components/ai-sources/meta.js.map +1 -1
  194. package/dist/components/ai-suggestions/ai-suggestions.d.ts +24 -0
  195. package/dist/components/ai-suggestions/ai-suggestions.d.ts.map +1 -0
  196. package/dist/components/ai-suggestions/ai-suggestions.js +68 -0
  197. package/dist/components/ai-suggestions/ai-suggestions.js.map +1 -0
  198. package/dist/components/ai-suggestions/index.d.ts +2 -0
  199. package/dist/components/ai-suggestions/index.js +2 -0
  200. package/dist/components/ai-suggestions/meta.js +17 -0
  201. package/dist/components/ai-suggestions/meta.js.map +1 -0
  202. package/dist/components/ai-token-usage/ai-token-usage.d.ts +40 -3
  203. package/dist/components/ai-token-usage/ai-token-usage.d.ts.map +1 -1
  204. package/dist/components/ai-token-usage/ai-token-usage.js +201 -24
  205. package/dist/components/ai-token-usage/ai-token-usage.js.map +1 -1
  206. package/dist/components/ai-token-usage/index.d.ts +2 -2
  207. package/dist/components/ai-token-usage/index.js +2 -2
  208. package/dist/components/ai-token-usage/meta.js +2 -2
  209. package/dist/components/ai-token-usage/meta.js.map +1 -1
  210. package/dist/components/ai-tool/ai-tool.d.ts +12 -1
  211. package/dist/components/ai-tool/ai-tool.d.ts.map +1 -1
  212. package/dist/components/ai-tool/ai-tool.js +83 -6
  213. package/dist/components/ai-tool/ai-tool.js.map +1 -1
  214. package/dist/components/ai-tool/meta.js +1 -1
  215. package/dist/components/ai-tool/meta.js.map +1 -1
  216. package/dist/components/alert/alert.d.ts +1 -1
  217. package/dist/components/animated-checklist/animated-checklist.d.ts +40 -0
  218. package/dist/components/animated-checklist/animated-checklist.d.ts.map +1 -0
  219. package/dist/components/animated-checklist/animated-checklist.js +198 -0
  220. package/dist/components/animated-checklist/animated-checklist.js.map +1 -0
  221. package/dist/components/animated-checklist/index.d.ts +2 -0
  222. package/dist/components/animated-checklist/index.js +2 -0
  223. package/dist/components/animated-checklist/meta.js +17 -0
  224. package/dist/components/animated-checklist/meta.js.map +1 -0
  225. package/dist/components/app-stack/app-stack.d.ts +40 -0
  226. package/dist/components/app-stack/app-stack.d.ts.map +1 -0
  227. package/dist/components/app-stack/app-stack.js +260 -0
  228. package/dist/components/app-stack/app-stack.js.map +1 -0
  229. package/dist/components/app-stack/index.d.ts +2 -0
  230. package/dist/components/app-stack/index.js +2 -0
  231. package/dist/components/app-stack/meta.js +17 -0
  232. package/dist/components/app-stack/meta.js.map +1 -0
  233. package/dist/components/aspect-morph/aspect-morph.d.ts +50 -0
  234. package/dist/components/aspect-morph/aspect-morph.d.ts.map +1 -0
  235. package/dist/components/aspect-morph/aspect-morph.js +171 -0
  236. package/dist/components/aspect-morph/aspect-morph.js.map +1 -0
  237. package/dist/components/aspect-morph/index.d.ts +2 -0
  238. package/dist/components/aspect-morph/index.js +2 -0
  239. package/dist/components/aspect-morph/meta.js +17 -0
  240. package/dist/components/aspect-morph/meta.js.map +1 -0
  241. package/dist/components/assignee-picker/assignee-picker-spring.js +21 -0
  242. package/dist/components/assignee-picker/assignee-picker-spring.js.map +1 -0
  243. package/dist/components/assignee-picker/assignee-picker.d.ts +47 -0
  244. package/dist/components/assignee-picker/assignee-picker.d.ts.map +1 -0
  245. package/dist/components/assignee-picker/assignee-picker.js +370 -0
  246. package/dist/components/assignee-picker/assignee-picker.js.map +1 -0
  247. package/dist/components/assignee-picker/index.d.ts +2 -0
  248. package/dist/components/assignee-picker/index.js +2 -0
  249. package/dist/components/assignee-picker/meta.js +17 -0
  250. package/dist/components/assignee-picker/meta.js.map +1 -0
  251. package/dist/components/avatar/avatar.d.ts +1 -1
  252. package/dist/components/avatar-group/avatar-group.d.ts +41 -0
  253. package/dist/components/avatar-group/avatar-group.d.ts.map +1 -0
  254. package/dist/components/avatar-group/avatar-group.js +103 -0
  255. package/dist/components/avatar-group/avatar-group.js.map +1 -0
  256. package/dist/components/avatar-group/index.d.ts +2 -0
  257. package/dist/components/avatar-group/index.js +2 -0
  258. package/dist/components/avatar-group/meta.js +17 -0
  259. package/dist/components/avatar-group/meta.js.map +1 -0
  260. package/dist/components/badge/badge.d.ts +1 -1
  261. package/dist/components/bar-loader/bar-loader.d.ts +170 -0
  262. package/dist/components/bar-loader/bar-loader.d.ts.map +1 -0
  263. package/dist/components/bar-loader/bar-loader.js +469 -0
  264. package/dist/components/bar-loader/bar-loader.js.map +1 -0
  265. package/dist/components/bar-loader/index.d.ts +2 -0
  266. package/dist/components/bar-loader/index.js +2 -0
  267. package/dist/components/bar-loader/meta.js +17 -0
  268. package/dist/components/bar-loader/meta.js.map +1 -0
  269. package/dist/components/book/book.d.ts +35 -0
  270. package/dist/components/book/book.d.ts.map +1 -0
  271. package/dist/components/book/book.js +183 -0
  272. package/dist/components/book/book.js.map +1 -0
  273. package/dist/components/book/index.d.ts +2 -0
  274. package/dist/components/book/index.js +2 -0
  275. package/dist/components/book/meta.js +17 -0
  276. package/dist/components/book/meta.js.map +1 -0
  277. package/dist/components/breadcrumb/breadcrumb.d.ts +60 -0
  278. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
  279. package/dist/components/breadcrumb/breadcrumb.js +158 -0
  280. package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
  281. package/dist/components/breadcrumb/index.d.ts +2 -0
  282. package/dist/components/breadcrumb/index.js +2 -0
  283. package/dist/components/breadcrumb/meta.js +17 -0
  284. package/dist/components/breadcrumb/meta.js.map +1 -0
  285. package/dist/components/browser-tabs/browser-tabs-spring.js +21 -0
  286. package/dist/components/browser-tabs/browser-tabs-spring.js.map +1 -0
  287. package/dist/components/browser-tabs/browser-tabs.d.ts +62 -0
  288. package/dist/components/browser-tabs/browser-tabs.d.ts.map +1 -0
  289. package/dist/components/browser-tabs/browser-tabs.js +418 -0
  290. package/dist/components/browser-tabs/browser-tabs.js.map +1 -0
  291. package/dist/components/browser-tabs/index.d.ts +2 -0
  292. package/dist/components/browser-tabs/index.js +2 -0
  293. package/dist/components/browser-tabs/meta.js +17 -0
  294. package/dist/components/browser-tabs/meta.js.map +1 -0
  295. package/dist/components/button/button.d.ts +4 -2
  296. package/dist/components/button/button.d.ts.map +1 -1
  297. package/dist/components/button/button.js +48 -5
  298. package/dist/components/button/button.js.map +1 -1
  299. package/dist/components/calendar/calendar.js +2 -2
  300. package/dist/components/calendar/calendar.js.map +1 -1
  301. package/dist/components/canvas-toolbar/canvas-toolbar.d.ts +62 -0
  302. package/dist/components/canvas-toolbar/canvas-toolbar.d.ts.map +1 -0
  303. package/dist/components/canvas-toolbar/canvas-toolbar.js +256 -0
  304. package/dist/components/canvas-toolbar/canvas-toolbar.js.map +1 -0
  305. package/dist/components/canvas-toolbar/index.d.ts +2 -0
  306. package/dist/components/canvas-toolbar/index.js +2 -0
  307. package/dist/components/canvas-toolbar/meta.js +17 -0
  308. package/dist/components/canvas-toolbar/meta.js.map +1 -0
  309. package/dist/components/card-spread/card-spread-layouts.d.ts +46 -0
  310. package/dist/components/card-spread/card-spread-layouts.d.ts.map +1 -0
  311. package/dist/components/card-spread/card-spread-layouts.js +235 -0
  312. package/dist/components/card-spread/card-spread-layouts.js.map +1 -0
  313. package/dist/components/card-spread/card-spread.d.ts +52 -0
  314. package/dist/components/card-spread/card-spread.d.ts.map +1 -0
  315. package/dist/components/card-spread/card-spread.js +224 -0
  316. package/dist/components/card-spread/card-spread.js.map +1 -0
  317. package/dist/components/card-spread/index.d.ts +3 -0
  318. package/dist/components/card-spread/index.js +3 -0
  319. package/dist/components/card-spread/meta.js +17 -0
  320. package/dist/components/card-spread/meta.js.map +1 -0
  321. package/dist/components/card-stack/card-stack-layout.js +98 -0
  322. package/dist/components/card-stack/card-stack-layout.js.map +1 -0
  323. package/dist/components/card-stack/card-stack.d.ts +29 -0
  324. package/dist/components/card-stack/card-stack.d.ts.map +1 -0
  325. package/dist/components/card-stack/card-stack.js +229 -0
  326. package/dist/components/card-stack/card-stack.js.map +1 -0
  327. package/dist/components/card-stack/index.d.ts +2 -0
  328. package/dist/components/card-stack/index.js +2 -0
  329. package/dist/components/card-stack/meta.js +17 -0
  330. package/dist/components/card-stack/meta.js.map +1 -0
  331. package/dist/components/carousel-3d/carousel-3d.d.ts +43 -0
  332. package/dist/components/carousel-3d/carousel-3d.d.ts.map +1 -0
  333. package/dist/components/carousel-3d/carousel-3d.js +336 -0
  334. package/dist/components/carousel-3d/carousel-3d.js.map +1 -0
  335. package/dist/components/carousel-3d/index.d.ts +2 -0
  336. package/dist/components/carousel-3d/index.js +2 -0
  337. package/dist/components/carousel-3d/meta.js +17 -0
  338. package/dist/components/carousel-3d/meta.js.map +1 -0
  339. package/dist/components/checkbox/checkbox.d.ts.map +1 -1
  340. package/dist/components/checkbox/checkbox.js +18 -0
  341. package/dist/components/checkbox/checkbox.js.map +1 -1
  342. package/dist/components/code-block/code-block.d.ts +1 -17
  343. package/dist/components/code-block/code-block.d.ts.map +1 -1
  344. package/dist/components/code-block/code-block.js +9 -79
  345. package/dist/components/code-block/code-block.js.map +1 -1
  346. package/dist/components/code-block/index.d.ts +3 -1
  347. package/dist/components/code-block/index.js +2 -1
  348. package/dist/components/code-block/meta.js +1 -1
  349. package/dist/components/code-block/meta.js.map +1 -1
  350. package/dist/components/collapsible/collapsible.d.ts +30 -0
  351. package/dist/components/collapsible/collapsible.d.ts.map +1 -0
  352. package/dist/components/collapsible/collapsible.js +38 -0
  353. package/dist/components/collapsible/collapsible.js.map +1 -0
  354. package/dist/components/collapsible/index.d.ts +2 -0
  355. package/dist/components/collapsible/index.js +2 -0
  356. package/dist/components/collapsible/meta.js +17 -0
  357. package/dist/components/collapsible/meta.js.map +1 -0
  358. package/dist/components/combobox/combobox.d.ts +28 -4
  359. package/dist/components/combobox/combobox.d.ts.map +1 -1
  360. package/dist/components/combobox/combobox.js +161 -66
  361. package/dist/components/combobox/combobox.js.map +1 -1
  362. package/dist/components/combobox/index.d.ts +2 -2
  363. package/dist/components/combobox/index.js +2 -2
  364. package/dist/components/combobox/meta.js +1 -1
  365. package/dist/components/combobox/meta.js.map +1 -1
  366. package/dist/components/command/command.js +1 -1
  367. package/dist/components/command/command.js.map +1 -1
  368. package/dist/components/command-bar/command-bar.d.ts +37 -0
  369. package/dist/components/command-bar/command-bar.d.ts.map +1 -0
  370. package/dist/components/command-bar/command-bar.js +91 -0
  371. package/dist/components/command-bar/command-bar.js.map +1 -0
  372. package/dist/components/command-bar/index.d.ts +2 -0
  373. package/dist/components/command-bar/index.js +2 -0
  374. package/dist/components/command-bar/meta.js +17 -0
  375. package/dist/components/command-bar/meta.js.map +1 -0
  376. package/dist/components/comment-bubble/comment-bubble.d.ts +32 -0
  377. package/dist/components/comment-bubble/comment-bubble.d.ts.map +1 -0
  378. package/dist/components/comment-bubble/comment-bubble.js +174 -0
  379. package/dist/components/comment-bubble/comment-bubble.js.map +1 -0
  380. package/dist/components/comment-bubble/index.d.ts +2 -0
  381. package/dist/components/comment-bubble/index.js +2 -0
  382. package/dist/components/comment-bubble/meta.js +17 -0
  383. package/dist/components/comment-bubble/meta.js.map +1 -0
  384. package/dist/components/context-menu/context-menu.d.ts +49 -0
  385. package/dist/components/context-menu/context-menu.d.ts.map +1 -0
  386. package/dist/components/context-menu/context-menu.js +151 -0
  387. package/dist/components/context-menu/context-menu.js.map +1 -0
  388. package/dist/components/context-menu/index.d.ts +2 -0
  389. package/dist/components/context-menu/index.js +2 -0
  390. package/dist/components/context-menu/meta.js +17 -0
  391. package/dist/components/context-menu/meta.js.map +1 -0
  392. package/dist/components/contribution-graph/contribution-graph.d.ts +37 -0
  393. package/dist/components/contribution-graph/contribution-graph.d.ts.map +1 -0
  394. package/dist/components/contribution-graph/contribution-graph.js +298 -0
  395. package/dist/components/contribution-graph/contribution-graph.js.map +1 -0
  396. package/dist/components/contribution-graph/index.d.ts +2 -0
  397. package/dist/components/contribution-graph/index.js +2 -0
  398. package/dist/components/contribution-graph/meta.js +17 -0
  399. package/dist/components/contribution-graph/meta.js.map +1 -0
  400. package/dist/components/copy-button/copy-button.d.ts +81 -0
  401. package/dist/components/copy-button/copy-button.d.ts.map +1 -0
  402. package/dist/components/copy-button/copy-button.js +146 -0
  403. package/dist/components/copy-button/copy-button.js.map +1 -0
  404. package/dist/components/copy-button/index.d.ts +2 -0
  405. package/dist/components/copy-button/index.js +2 -0
  406. package/dist/components/copy-button/meta.js +17 -0
  407. package/dist/components/copy-button/meta.js.map +1 -0
  408. package/dist/components/create-menu/create-menu.d.ts +42 -0
  409. package/dist/components/create-menu/create-menu.d.ts.map +1 -0
  410. package/dist/components/create-menu/create-menu.js +197 -0
  411. package/dist/components/create-menu/create-menu.js.map +1 -0
  412. package/dist/components/create-menu/index.d.ts +2 -0
  413. package/dist/components/create-menu/index.js +2 -0
  414. package/dist/components/create-menu/meta.js +17 -0
  415. package/dist/components/create-menu/meta.js.map +1 -0
  416. package/dist/components/cursor-follow/cursor-follow.d.ts +17 -0
  417. package/dist/components/cursor-follow/cursor-follow.d.ts.map +1 -0
  418. package/dist/components/cursor-follow/cursor-follow.js +116 -0
  419. package/dist/components/cursor-follow/cursor-follow.js.map +1 -0
  420. package/dist/components/cursor-follow/index.d.ts +2 -0
  421. package/dist/components/cursor-follow/index.js +2 -0
  422. package/dist/components/cursor-follow/meta.js +17 -0
  423. package/dist/components/cursor-follow/meta.js.map +1 -0
  424. package/dist/components/data-table/data-table.d.ts.map +1 -1
  425. package/dist/components/data-table/data-table.js +4 -1
  426. package/dist/components/data-table/data-table.js.map +1 -1
  427. package/dist/components/dial/dial.d.ts +32 -0
  428. package/dist/components/dial/dial.d.ts.map +1 -0
  429. package/dist/components/dial/dial.js +195 -0
  430. package/dist/components/dial/dial.js.map +1 -0
  431. package/dist/components/dial/index.d.ts +2 -0
  432. package/dist/components/dial/index.js +2 -0
  433. package/dist/components/dial/meta.js +17 -0
  434. package/dist/components/dial/meta.js.map +1 -0
  435. package/dist/components/dialog/dialog.d.ts +8 -1
  436. package/dist/components/dialog/dialog.d.ts.map +1 -1
  437. package/dist/components/dialog/dialog.js +24 -7
  438. package/dist/components/dialog/dialog.js.map +1 -1
  439. package/dist/components/dialog/meta.js +1 -1
  440. package/dist/components/dialog/meta.js.map +1 -1
  441. package/dist/components/diff-viewer/diff-viewer.d.ts +12 -1
  442. package/dist/components/diff-viewer/diff-viewer.d.ts.map +1 -1
  443. package/dist/components/diff-viewer/diff-viewer.js +100 -28
  444. package/dist/components/diff-viewer/diff-viewer.js.map +1 -1
  445. package/dist/components/diff-viewer/meta.js +1 -1
  446. package/dist/components/diff-viewer/meta.js.map +1 -1
  447. package/dist/components/direction/direction.d.ts +35 -0
  448. package/dist/components/direction/direction.d.ts.map +1 -0
  449. package/dist/components/direction/direction.js +14 -0
  450. package/dist/components/direction/direction.js.map +1 -0
  451. package/dist/components/direction/index.d.ts +2 -0
  452. package/dist/components/direction/index.js +2 -0
  453. package/dist/components/direction/meta.js +17 -0
  454. package/dist/components/direction/meta.js.map +1 -0
  455. package/dist/components/dither-area/dither-area.d.ts +46 -0
  456. package/dist/components/dither-area/dither-area.d.ts.map +1 -0
  457. package/dist/components/dither-area/dither-area.js +186 -0
  458. package/dist/components/dither-area/dither-area.js.map +1 -0
  459. package/dist/components/dither-area/index.d.ts +2 -0
  460. package/dist/components/dither-area/index.js +2 -0
  461. package/dist/components/dither-area/meta.js +17 -0
  462. package/dist/components/dither-area/meta.js.map +1 -0
  463. package/dist/components/dither-bar/dither-bar.d.ts +47 -0
  464. package/dist/components/dither-bar/dither-bar.d.ts.map +1 -0
  465. package/dist/components/dither-bar/dither-bar.js +261 -0
  466. package/dist/components/dither-bar/dither-bar.js.map +1 -0
  467. package/dist/components/dither-bar/index.d.ts +2 -0
  468. package/dist/components/dither-bar/index.js +2 -0
  469. package/dist/components/dither-bar/meta.js +17 -0
  470. package/dist/components/dither-bar/meta.js.map +1 -0
  471. package/dist/components/dither-canvas/dither-canvas.d.ts +76 -0
  472. package/dist/components/dither-canvas/dither-canvas.d.ts.map +1 -0
  473. package/dist/components/dither-canvas/dither-canvas.js +236 -0
  474. package/dist/components/dither-canvas/dither-canvas.js.map +1 -0
  475. package/dist/components/dither-canvas/dither-engine.d.ts +132 -0
  476. package/dist/components/dither-canvas/dither-engine.d.ts.map +1 -0
  477. package/dist/components/dither-canvas/dither-engine.js +243 -0
  478. package/dist/components/dither-canvas/dither-engine.js.map +1 -0
  479. package/dist/components/dither-canvas/dither-geometry.d.ts +73 -0
  480. package/dist/components/dither-canvas/dither-geometry.d.ts.map +1 -0
  481. package/dist/components/dither-canvas/dither-geometry.js +205 -0
  482. package/dist/components/dither-canvas/dither-geometry.js.map +1 -0
  483. package/dist/components/dither-canvas/dither-scrubber.d.ts +64 -0
  484. package/dist/components/dither-canvas/dither-scrubber.d.ts.map +1 -0
  485. package/dist/components/dither-canvas/dither-scrubber.js +130 -0
  486. package/dist/components/dither-canvas/dither-scrubber.js.map +1 -0
  487. package/dist/components/dither-canvas/index.d.ts +5 -0
  488. package/dist/components/dither-canvas/index.js +5 -0
  489. package/dist/components/dither-canvas/meta.js +22 -0
  490. package/dist/components/dither-canvas/meta.js.map +1 -0
  491. package/dist/components/dither-donut/dither-donut.d.ts +46 -0
  492. package/dist/components/dither-donut/dither-donut.d.ts.map +1 -0
  493. package/dist/components/dither-donut/dither-donut.js +241 -0
  494. package/dist/components/dither-donut/dither-donut.js.map +1 -0
  495. package/dist/components/dither-donut/index.d.ts +2 -0
  496. package/dist/components/dither-donut/index.js +2 -0
  497. package/dist/components/dither-donut/meta.js +17 -0
  498. package/dist/components/dither-donut/meta.js.map +1 -0
  499. package/dist/components/dither-funnel/dither-funnel.d.ts +53 -0
  500. package/dist/components/dither-funnel/dither-funnel.d.ts.map +1 -0
  501. package/dist/components/dither-funnel/dither-funnel.js +176 -0
  502. package/dist/components/dither-funnel/dither-funnel.js.map +1 -0
  503. package/dist/components/dither-funnel/index.d.ts +2 -0
  504. package/dist/components/dither-funnel/index.js +2 -0
  505. package/dist/components/dither-funnel/meta.js +17 -0
  506. package/dist/components/dither-funnel/meta.js.map +1 -0
  507. package/dist/components/dither-gauge/dither-gauge.d.ts +48 -0
  508. package/dist/components/dither-gauge/dither-gauge.d.ts.map +1 -0
  509. package/dist/components/dither-gauge/dither-gauge.js +189 -0
  510. package/dist/components/dither-gauge/dither-gauge.js.map +1 -0
  511. package/dist/components/dither-gauge/index.d.ts +2 -0
  512. package/dist/components/dither-gauge/index.js +2 -0
  513. package/dist/components/dither-gauge/meta.js +17 -0
  514. package/dist/components/dither-gauge/meta.js.map +1 -0
  515. package/dist/components/dither-heatmap/dither-heatmap.d.ts +63 -0
  516. package/dist/components/dither-heatmap/dither-heatmap.d.ts.map +1 -0
  517. package/dist/components/dither-heatmap/dither-heatmap.js +298 -0
  518. package/dist/components/dither-heatmap/dither-heatmap.js.map +1 -0
  519. package/dist/components/dither-heatmap/index.d.ts +2 -0
  520. package/dist/components/dither-heatmap/index.js +2 -0
  521. package/dist/components/dither-heatmap/meta.js +17 -0
  522. package/dist/components/dither-heatmap/meta.js.map +1 -0
  523. package/dist/components/dither-line/dither-line.d.ts +41 -0
  524. package/dist/components/dither-line/dither-line.d.ts.map +1 -0
  525. package/dist/components/dither-line/dither-line.js +164 -0
  526. package/dist/components/dither-line/dither-line.js.map +1 -0
  527. package/dist/components/dither-line/index.d.ts +2 -0
  528. package/dist/components/dither-line/index.js +2 -0
  529. package/dist/components/dither-line/meta.js +17 -0
  530. package/dist/components/dither-line/meta.js.map +1 -0
  531. package/dist/components/dither-meter/dither-meter.d.ts +51 -0
  532. package/dist/components/dither-meter/dither-meter.d.ts.map +1 -0
  533. package/dist/components/dither-meter/dither-meter.js +211 -0
  534. package/dist/components/dither-meter/dither-meter.js.map +1 -0
  535. package/dist/components/dither-meter/index.d.ts +2 -0
  536. package/dist/components/dither-meter/index.js +2 -0
  537. package/dist/components/dither-meter/meta.js +17 -0
  538. package/dist/components/dither-meter/meta.js.map +1 -0
  539. package/dist/components/dither-scatter/dither-scatter.d.ts +53 -0
  540. package/dist/components/dither-scatter/dither-scatter.d.ts.map +1 -0
  541. package/dist/components/dither-scatter/dither-scatter.js +211 -0
  542. package/dist/components/dither-scatter/dither-scatter.js.map +1 -0
  543. package/dist/components/dither-scatter/index.d.ts +2 -0
  544. package/dist/components/dither-scatter/index.js +2 -0
  545. package/dist/components/dither-scatter/meta.js +17 -0
  546. package/dist/components/dither-scatter/meta.js.map +1 -0
  547. package/dist/components/dot-morph-button/dot-morph-button.d.ts +18 -0
  548. package/dist/components/dot-morph-button/dot-morph-button.d.ts.map +1 -0
  549. package/dist/components/dot-morph-button/dot-morph-button.js +43 -0
  550. package/dist/components/dot-morph-button/dot-morph-button.js.map +1 -0
  551. package/dist/components/dot-morph-button/index.d.ts +2 -0
  552. package/dist/components/dot-morph-button/index.js +2 -0
  553. package/dist/components/dot-morph-button/meta.js +17 -0
  554. package/dist/components/dot-morph-button/meta.js.map +1 -0
  555. package/dist/components/dots-loader/dots-loader.d.ts +186 -0
  556. package/dist/components/dots-loader/dots-loader.d.ts.map +1 -0
  557. package/dist/components/dots-loader/dots-loader.js +412 -0
  558. package/dist/components/dots-loader/dots-loader.js.map +1 -0
  559. package/dist/components/dots-loader/index.d.ts +2 -0
  560. package/dist/components/dots-loader/index.js +2 -0
  561. package/dist/components/dots-loader/meta.js +17 -0
  562. package/dist/components/dots-loader/meta.js.map +1 -0
  563. package/dist/components/drag-stepper/drag-stepper.d.ts +39 -0
  564. package/dist/components/drag-stepper/drag-stepper.d.ts.map +1 -0
  565. package/dist/components/drag-stepper/drag-stepper.js +232 -0
  566. package/dist/components/drag-stepper/drag-stepper.js.map +1 -0
  567. package/dist/components/drag-stepper/index.d.ts +2 -0
  568. package/dist/components/drag-stepper/index.js +2 -0
  569. package/dist/components/drag-stepper/meta.js +17 -0
  570. package/dist/components/drag-stepper/meta.js.map +1 -0
  571. package/dist/components/drawer/drawer.d.ts +9 -1
  572. package/dist/components/drawer/drawer.d.ts.map +1 -1
  573. package/dist/components/drawer/drawer.js +24 -5
  574. package/dist/components/drawer/drawer.js.map +1 -1
  575. package/dist/components/drawer/meta.js +1 -1
  576. package/dist/components/drawer/meta.js.map +1 -1
  577. package/dist/components/dropdown-menu/dropdown-menu.d.ts +5 -0
  578. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  579. package/dist/components/dropdown-menu/dropdown-menu.js +34 -13
  580. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  581. package/dist/components/dropdown-menu/meta.js +1 -1
  582. package/dist/components/dropdown-menu/meta.js.map +1 -1
  583. package/dist/components/effect-button/effect-button.d.ts +28 -0
  584. package/dist/components/effect-button/effect-button.d.ts.map +1 -0
  585. package/dist/components/effect-button/effect-button.js +176 -0
  586. package/dist/components/effect-button/effect-button.js.map +1 -0
  587. package/dist/components/effect-button/index.d.ts +2 -0
  588. package/dist/components/effect-button/index.js +2 -0
  589. package/dist/components/effect-button/meta.js +17 -0
  590. package/dist/components/effect-button/meta.js.map +1 -0
  591. package/dist/components/escape-button/escape-button.d.ts +25 -0
  592. package/dist/components/escape-button/escape-button.d.ts.map +1 -0
  593. package/dist/components/escape-button/escape-button.js +154 -0
  594. package/dist/components/escape-button/escape-button.js.map +1 -0
  595. package/dist/components/escape-button/index.d.ts +2 -0
  596. package/dist/components/escape-button/index.js +2 -0
  597. package/dist/components/escape-button/meta.js +17 -0
  598. package/dist/components/escape-button/meta.js.map +1 -0
  599. package/dist/components/expandable-cards/expandable-cards.d.ts +42 -0
  600. package/dist/components/expandable-cards/expandable-cards.d.ts.map +1 -0
  601. package/dist/components/expandable-cards/expandable-cards.js +312 -0
  602. package/dist/components/expandable-cards/expandable-cards.js.map +1 -0
  603. package/dist/components/expandable-cards/index.d.ts +2 -0
  604. package/dist/components/expandable-cards/index.js +2 -0
  605. package/dist/components/expandable-cards/meta.js +17 -0
  606. package/dist/components/expandable-cards/meta.js.map +1 -0
  607. package/dist/components/expandable-list/expandable-list.d.ts +35 -0
  608. package/dist/components/expandable-list/expandable-list.d.ts.map +1 -0
  609. package/dist/components/expandable-list/expandable-list.js +180 -0
  610. package/dist/components/expandable-list/expandable-list.js.map +1 -0
  611. package/dist/components/expandable-list/index.d.ts +2 -0
  612. package/dist/components/expandable-list/index.js +2 -0
  613. package/dist/components/expandable-list/meta.js +21 -0
  614. package/dist/components/expandable-list/meta.js.map +1 -0
  615. package/dist/components/expanding-search/expanding-search.d.ts +30 -0
  616. package/dist/components/expanding-search/expanding-search.d.ts.map +1 -0
  617. package/dist/components/expanding-search/expanding-search.js +141 -0
  618. package/dist/components/expanding-search/expanding-search.js.map +1 -0
  619. package/dist/components/expanding-search/index.d.ts +2 -0
  620. package/dist/components/expanding-search/index.js +2 -0
  621. package/dist/components/expanding-search/meta.js +17 -0
  622. package/dist/components/expanding-search/meta.js.map +1 -0
  623. package/dist/components/exposure-slider/exposure-slider.d.ts +33 -0
  624. package/dist/components/exposure-slider/exposure-slider.d.ts.map +1 -0
  625. package/dist/components/exposure-slider/exposure-slider.js +227 -0
  626. package/dist/components/exposure-slider/exposure-slider.js.map +1 -0
  627. package/dist/components/exposure-slider/index.d.ts +2 -0
  628. package/dist/components/exposure-slider/index.js +2 -0
  629. package/dist/components/exposure-slider/meta.js +17 -0
  630. package/dist/components/exposure-slider/meta.js.map +1 -0
  631. package/dist/components/file-upload/file-upload.d.ts +13 -2
  632. package/dist/components/file-upload/file-upload.d.ts.map +1 -1
  633. package/dist/components/file-upload/file-upload.js +166 -95
  634. package/dist/components/file-upload/file-upload.js.map +1 -1
  635. package/dist/components/file-upload/meta.js +1 -1
  636. package/dist/components/file-upload/meta.js.map +1 -1
  637. package/dist/components/focus-blur-links/focus-blur-links.d.ts +25 -0
  638. package/dist/components/focus-blur-links/focus-blur-links.d.ts.map +1 -0
  639. package/dist/components/focus-blur-links/focus-blur-links.js +92 -0
  640. package/dist/components/focus-blur-links/focus-blur-links.js.map +1 -0
  641. package/dist/components/focus-blur-links/index.d.ts +2 -0
  642. package/dist/components/focus-blur-links/index.js +2 -0
  643. package/dist/components/focus-blur-links/meta.js +17 -0
  644. package/dist/components/focus-blur-links/meta.js.map +1 -0
  645. package/dist/components/folding-frame/folding-frame.d.ts +38 -0
  646. package/dist/components/folding-frame/folding-frame.d.ts.map +1 -0
  647. package/dist/components/folding-frame/folding-frame.js +298 -0
  648. package/dist/components/folding-frame/folding-frame.js.map +1 -0
  649. package/dist/components/folding-frame/index.d.ts +2 -0
  650. package/dist/components/folding-frame/index.js +2 -0
  651. package/dist/components/folding-frame/meta.js +17 -0
  652. package/dist/components/folding-frame/meta.js.map +1 -0
  653. package/dist/components/form/form.d.ts +11 -2
  654. package/dist/components/form/form.d.ts.map +1 -1
  655. package/dist/components/form/form.js +55 -5
  656. package/dist/components/form/form.js.map +1 -1
  657. package/dist/components/form/meta.js +1 -1
  658. package/dist/components/form/meta.js.map +1 -1
  659. package/dist/components/glass-bubble/glass-bubble.d.ts +59 -0
  660. package/dist/components/glass-bubble/glass-bubble.d.ts.map +1 -0
  661. package/dist/components/glass-bubble/glass-bubble.js +308 -0
  662. package/dist/components/glass-bubble/glass-bubble.js.map +1 -0
  663. package/dist/components/glass-bubble/index.d.ts +2 -0
  664. package/dist/components/glass-bubble/index.js +2 -0
  665. package/dist/components/glass-bubble/meta.js +17 -0
  666. package/dist/components/glass-bubble/meta.js.map +1 -0
  667. package/dist/components/glow-card/glow-card.d.ts +34 -0
  668. package/dist/components/glow-card/glow-card.d.ts.map +1 -0
  669. package/dist/components/glow-card/glow-card.js +104 -0
  670. package/dist/components/glow-card/glow-card.js.map +1 -0
  671. package/dist/components/glow-card/index.d.ts +2 -0
  672. package/dist/components/glow-card/index.js +2 -0
  673. package/dist/components/glow-card/meta.js +17 -0
  674. package/dist/components/glow-card/meta.js.map +1 -0
  675. package/dist/components/goo-ball/goo-ball.d.ts +48 -0
  676. package/dist/components/goo-ball/goo-ball.d.ts.map +1 -0
  677. package/dist/components/goo-ball/goo-ball.js +295 -0
  678. package/dist/components/goo-ball/goo-ball.js.map +1 -0
  679. package/dist/components/goo-ball/index.d.ts +2 -0
  680. package/dist/components/goo-ball/index.js +2 -0
  681. package/dist/components/goo-ball/meta.js +21 -0
  682. package/dist/components/goo-ball/meta.js.map +1 -0
  683. package/dist/components/goo-tabs/goo-tabs.d.ts +37 -0
  684. package/dist/components/goo-tabs/goo-tabs.d.ts.map +1 -0
  685. package/dist/components/goo-tabs/goo-tabs.js +286 -0
  686. package/dist/components/goo-tabs/goo-tabs.js.map +1 -0
  687. package/dist/components/goo-tabs/index.d.ts +2 -0
  688. package/dist/components/goo-tabs/index.js +2 -0
  689. package/dist/components/goo-tabs/meta.js +17 -0
  690. package/dist/components/goo-tabs/meta.js.map +1 -0
  691. package/dist/components/gooey-popover/gooey-popover.d.ts +32 -0
  692. package/dist/components/gooey-popover/gooey-popover.d.ts.map +1 -0
  693. package/dist/components/gooey-popover/gooey-popover.js +257 -0
  694. package/dist/components/gooey-popover/gooey-popover.js.map +1 -0
  695. package/dist/components/gooey-popover/index.d.ts +2 -0
  696. package/dist/components/gooey-popover/index.js +2 -0
  697. package/dist/components/gooey-popover/meta.js +17 -0
  698. package/dist/components/gooey-popover/meta.js.map +1 -0
  699. package/dist/components/gradient-orb/gradient-orb.d.ts +39 -0
  700. package/dist/components/gradient-orb/gradient-orb.d.ts.map +1 -0
  701. package/dist/components/gradient-orb/gradient-orb.js +185 -0
  702. package/dist/components/gradient-orb/gradient-orb.js.map +1 -0
  703. package/dist/components/gradient-orb/index.d.ts +2 -0
  704. package/dist/components/gradient-orb/index.js +2 -0
  705. package/dist/components/gradient-orb/meta.js +17 -0
  706. package/dist/components/gradient-orb/meta.js.map +1 -0
  707. package/dist/components/grid-loader/grid-loader.d.ts +224 -0
  708. package/dist/components/grid-loader/grid-loader.d.ts.map +1 -0
  709. package/dist/components/grid-loader/grid-loader.js +271 -0
  710. package/dist/components/grid-loader/grid-loader.js.map +1 -0
  711. package/dist/components/grid-loader/index.d.ts +2 -0
  712. package/dist/components/grid-loader/index.js +2 -0
  713. package/dist/components/grid-loader/meta.js +17 -0
  714. package/dist/components/grid-loader/meta.js.map +1 -0
  715. package/dist/components/image-accordion/image-accordion.d.ts +40 -0
  716. package/dist/components/image-accordion/image-accordion.d.ts.map +1 -0
  717. package/dist/components/image-accordion/image-accordion.js +118 -0
  718. package/dist/components/image-accordion/image-accordion.js.map +1 -0
  719. package/dist/components/image-accordion/index.d.ts +2 -0
  720. package/dist/components/image-accordion/index.js +2 -0
  721. package/dist/components/image-accordion/meta.js +17 -0
  722. package/dist/components/image-accordion/meta.js.map +1 -0
  723. package/dist/components/image-metadata/image-metadata.d.ts +34 -0
  724. package/dist/components/image-metadata/image-metadata.d.ts.map +1 -0
  725. package/dist/components/image-metadata/image-metadata.js +178 -0
  726. package/dist/components/image-metadata/image-metadata.js.map +1 -0
  727. package/dist/components/image-metadata/index.d.ts +2 -0
  728. package/dist/components/image-metadata/index.js +2 -0
  729. package/dist/components/image-metadata/meta.js +17 -0
  730. package/dist/components/image-metadata/meta.js.map +1 -0
  731. package/dist/components/image-selector/image-selector.d.ts +37 -0
  732. package/dist/components/image-selector/image-selector.d.ts.map +1 -0
  733. package/dist/components/image-selector/image-selector.js +253 -0
  734. package/dist/components/image-selector/image-selector.js.map +1 -0
  735. package/dist/components/image-selector/index.d.ts +2 -0
  736. package/dist/components/image-selector/index.js +2 -0
  737. package/dist/components/image-selector/meta.js +17 -0
  738. package/dist/components/image-selector/meta.js.map +1 -0
  739. package/dist/components/inline-confirm/index.d.ts +2 -0
  740. package/dist/components/inline-confirm/index.js +2 -0
  741. package/dist/components/inline-confirm/inline-confirm.d.ts +38 -0
  742. package/dist/components/inline-confirm/inline-confirm.d.ts.map +1 -0
  743. package/dist/components/inline-confirm/inline-confirm.js +246 -0
  744. package/dist/components/inline-confirm/inline-confirm.js.map +1 -0
  745. package/dist/components/inline-confirm/meta.js +17 -0
  746. package/dist/components/inline-confirm/meta.js.map +1 -0
  747. package/dist/components/input/floating-label-input.d.ts +26 -0
  748. package/dist/components/input/floating-label-input.d.ts.map +1 -0
  749. package/dist/components/input/floating-label-input.js +47 -0
  750. package/dist/components/input/floating-label-input.js.map +1 -0
  751. package/dist/components/input/index.d.ts +2 -1
  752. package/dist/components/input/index.js +2 -1
  753. package/dist/components/input/input.js +1 -1
  754. package/dist/components/input/input.js.map +1 -1
  755. package/dist/components/input/meta.js +2 -2
  756. package/dist/components/input/meta.js.map +1 -1
  757. package/dist/components/invite-carousel/carousel-controls.js +189 -0
  758. package/dist/components/invite-carousel/carousel-controls.js.map +1 -0
  759. package/dist/components/invite-carousel/index.d.ts +2 -0
  760. package/dist/components/invite-carousel/index.js +2 -0
  761. package/dist/components/invite-carousel/invite-carousel.d.ts +56 -0
  762. package/dist/components/invite-carousel/invite-carousel.d.ts.map +1 -0
  763. package/dist/components/invite-carousel/invite-carousel.js +207 -0
  764. package/dist/components/invite-carousel/invite-carousel.js.map +1 -0
  765. package/dist/components/invite-carousel/meta.js +17 -0
  766. package/dist/components/invite-carousel/meta.js.map +1 -0
  767. package/dist/components/island/index.d.ts +2 -0
  768. package/dist/components/island/index.js +2 -0
  769. package/dist/components/island/island.d.ts +30 -0
  770. package/dist/components/island/island.d.ts.map +1 -0
  771. package/dist/components/island/island.js +94 -0
  772. package/dist/components/island/island.js.map +1 -0
  773. package/dist/components/island/meta.js +17 -0
  774. package/dist/components/island/meta.js.map +1 -0
  775. package/dist/components/liquid-toggle/index.d.ts +2 -0
  776. package/dist/components/liquid-toggle/index.js +2 -0
  777. package/dist/components/liquid-toggle/liquid-toggle.d.ts +19 -0
  778. package/dist/components/liquid-toggle/liquid-toggle.d.ts.map +1 -0
  779. package/dist/components/liquid-toggle/liquid-toggle.js +175 -0
  780. package/dist/components/liquid-toggle/liquid-toggle.js.map +1 -0
  781. package/dist/components/liquid-toggle/meta.js +21 -0
  782. package/dist/components/liquid-toggle/meta.js.map +1 -0
  783. package/dist/components/log-viewer/log-viewer.js +2 -2
  784. package/dist/components/log-viewer/log-viewer.js.map +1 -1
  785. package/dist/components/magnetic-button/index.d.ts +2 -0
  786. package/dist/components/magnetic-button/index.js +2 -0
  787. package/dist/components/magnetic-button/magnetic-button.d.ts +32 -0
  788. package/dist/components/magnetic-button/magnetic-button.d.ts.map +1 -0
  789. package/dist/components/magnetic-button/magnetic-button.js +138 -0
  790. package/dist/components/magnetic-button/magnetic-button.js.map +1 -0
  791. package/dist/components/magnetic-button/meta.js +17 -0
  792. package/dist/components/magnetic-button/meta.js.map +1 -0
  793. package/dist/components/magnetic-select/index.d.ts +2 -0
  794. package/dist/components/magnetic-select/index.js +2 -0
  795. package/dist/components/magnetic-select/magnetic-select-spring.js +21 -0
  796. package/dist/components/magnetic-select/magnetic-select-spring.js.map +1 -0
  797. package/dist/components/magnetic-select/magnetic-select.d.ts +44 -0
  798. package/dist/components/magnetic-select/magnetic-select.d.ts.map +1 -0
  799. package/dist/components/magnetic-select/magnetic-select.js +330 -0
  800. package/dist/components/magnetic-select/magnetic-select.js.map +1 -0
  801. package/dist/components/magnetic-select/meta.js +17 -0
  802. package/dist/components/magnetic-select/meta.js.map +1 -0
  803. package/dist/components/magnify-dock/index.d.ts +2 -0
  804. package/dist/components/magnify-dock/index.js +2 -0
  805. package/dist/components/magnify-dock/magnify-dock.d.ts +40 -0
  806. package/dist/components/magnify-dock/magnify-dock.d.ts.map +1 -0
  807. package/dist/components/magnify-dock/magnify-dock.js +183 -0
  808. package/dist/components/magnify-dock/magnify-dock.js.map +1 -0
  809. package/dist/components/magnify-dock/meta.js +17 -0
  810. package/dist/components/magnify-dock/meta.js.map +1 -0
  811. package/dist/components/marquee/index.d.ts +2 -0
  812. package/dist/components/marquee/index.js +2 -0
  813. package/dist/components/marquee/marquee.d.ts +30 -0
  814. package/dist/components/marquee/marquee.d.ts.map +1 -0
  815. package/dist/components/marquee/marquee.js +117 -0
  816. package/dist/components/marquee/marquee.js.map +1 -0
  817. package/dist/components/marquee/meta.js +17 -0
  818. package/dist/components/marquee/meta.js.map +1 -0
  819. package/dist/components/meter/meter.js +1 -1
  820. package/dist/components/meter/meter.js.map +1 -1
  821. package/dist/components/morph-button/index.d.ts +2 -0
  822. package/dist/components/morph-button/index.js +2 -0
  823. package/dist/components/morph-button/meta.js +17 -0
  824. package/dist/components/morph-button/meta.js.map +1 -0
  825. package/dist/components/morph-button/morph-button.d.ts +57 -0
  826. package/dist/components/morph-button/morph-button.d.ts.map +1 -0
  827. package/dist/components/morph-button/morph-button.js +220 -0
  828. package/dist/components/morph-button/morph-button.js.map +1 -0
  829. package/dist/components/morph-surface/index.d.ts +2 -0
  830. package/dist/components/morph-surface/index.js +2 -0
  831. package/dist/components/morph-surface/meta.js +17 -0
  832. package/dist/components/morph-surface/meta.js.map +1 -0
  833. package/dist/components/morph-surface/morph-surface.d.ts +51 -0
  834. package/dist/components/morph-surface/morph-surface.d.ts.map +1 -0
  835. package/dist/components/morph-surface/morph-surface.js +228 -0
  836. package/dist/components/morph-surface/morph-surface.js.map +1 -0
  837. package/dist/components/notification-badge/index.d.ts +2 -0
  838. package/dist/components/notification-badge/index.js +2 -0
  839. package/dist/components/notification-badge/meta.js +17 -0
  840. package/dist/components/notification-badge/meta.js.map +1 -0
  841. package/dist/components/notification-badge/notification-badge.d.ts +40 -0
  842. package/dist/components/notification-badge/notification-badge.d.ts.map +1 -0
  843. package/dist/components/notification-badge/notification-badge.js +107 -0
  844. package/dist/components/notification-badge/notification-badge.js.map +1 -0
  845. package/dist/components/notify-button/index.d.ts +2 -0
  846. package/dist/components/notify-button/index.js +2 -0
  847. package/dist/components/notify-button/meta.js +17 -0
  848. package/dist/components/notify-button/meta.js.map +1 -0
  849. package/dist/components/notify-button/notify-button.d.ts +28 -0
  850. package/dist/components/notify-button/notify-button.d.ts.map +1 -0
  851. package/dist/components/notify-button/notify-button.js +114 -0
  852. package/dist/components/notify-button/notify-button.js.map +1 -0
  853. package/dist/components/now-playing/index.d.ts +2 -0
  854. package/dist/components/now-playing/index.js +2 -0
  855. package/dist/components/now-playing/meta.js +17 -0
  856. package/dist/components/now-playing/meta.js.map +1 -0
  857. package/dist/components/now-playing/now-playing.d.ts +39 -0
  858. package/dist/components/now-playing/now-playing.d.ts.map +1 -0
  859. package/dist/components/now-playing/now-playing.js +354 -0
  860. package/dist/components/now-playing/now-playing.js.map +1 -0
  861. package/dist/components/number-flow/index.d.ts +2 -0
  862. package/dist/components/number-flow/index.js +2 -0
  863. package/dist/components/number-flow/meta.js +17 -0
  864. package/dist/components/number-flow/meta.js.map +1 -0
  865. package/dist/components/number-flow/number-flow.d.ts +45 -0
  866. package/dist/components/number-flow/number-flow.d.ts.map +1 -0
  867. package/dist/components/number-flow/number-flow.js +226 -0
  868. package/dist/components/number-flow/number-flow.js.map +1 -0
  869. package/dist/components/orb-face/index.d.ts +2 -0
  870. package/dist/components/orb-face/index.js +2 -0
  871. package/dist/components/orb-face/meta.js +17 -0
  872. package/dist/components/orb-face/meta.js.map +1 -0
  873. package/dist/components/orb-face/orb-face.d.ts +29 -0
  874. package/dist/components/orb-face/orb-face.d.ts.map +1 -0
  875. package/dist/components/orb-face/orb-face.js +353 -0
  876. package/dist/components/orb-face/orb-face.js.map +1 -0
  877. package/dist/components/otp-input/index.d.ts +2 -0
  878. package/dist/components/otp-input/index.js +2 -0
  879. package/dist/components/otp-input/meta.js +17 -0
  880. package/dist/components/otp-input/meta.js.map +1 -0
  881. package/dist/components/otp-input/otp-input.d.ts +36 -0
  882. package/dist/components/otp-input/otp-input.d.ts.map +1 -0
  883. package/dist/components/otp-input/otp-input.js +249 -0
  884. package/dist/components/otp-input/otp-input.js.map +1 -0
  885. package/dist/components/pagination/index.d.ts +2 -2
  886. package/dist/components/pagination/meta.js +2 -2
  887. package/dist/components/pagination/meta.js.map +1 -1
  888. package/dist/components/pagination/pagination-indicator.js +76 -0
  889. package/dist/components/pagination/pagination-indicator.js.map +1 -0
  890. package/dist/components/pagination/pagination.d.ts +10 -2
  891. package/dist/components/pagination/pagination.d.ts.map +1 -1
  892. package/dist/components/pagination/pagination.js +16 -6
  893. package/dist/components/pagination/pagination.js.map +1 -1
  894. package/dist/components/palette-generator/index.d.ts +2 -0
  895. package/dist/components/palette-generator/index.js +2 -0
  896. package/dist/components/palette-generator/meta.js +17 -0
  897. package/dist/components/palette-generator/meta.js.map +1 -0
  898. package/dist/components/palette-generator/palette-generator.d.ts +43 -0
  899. package/dist/components/palette-generator/palette-generator.d.ts.map +1 -0
  900. package/dist/components/palette-generator/palette-generator.js +199 -0
  901. package/dist/components/palette-generator/palette-generator.js.map +1 -0
  902. package/dist/components/permission-matrix/permission-matrix.js +3 -3
  903. package/dist/components/permission-matrix/permission-matrix.js.map +1 -1
  904. package/dist/components/photo-stack/index.d.ts +2 -0
  905. package/dist/components/photo-stack/index.js +2 -0
  906. package/dist/components/photo-stack/meta.js +17 -0
  907. package/dist/components/photo-stack/meta.js.map +1 -0
  908. package/dist/components/photo-stack/photo-stack.d.ts +30 -0
  909. package/dist/components/photo-stack/photo-stack.d.ts.map +1 -0
  910. package/dist/components/photo-stack/photo-stack.js +236 -0
  911. package/dist/components/photo-stack/photo-stack.js.map +1 -0
  912. package/dist/components/photo-tabs/index.d.ts +2 -0
  913. package/dist/components/photo-tabs/index.js +2 -0
  914. package/dist/components/photo-tabs/meta.js +17 -0
  915. package/dist/components/photo-tabs/meta.js.map +1 -0
  916. package/dist/components/photo-tabs/photo-tabs.d.ts +35 -0
  917. package/dist/components/photo-tabs/photo-tabs.d.ts.map +1 -0
  918. package/dist/components/photo-tabs/photo-tabs.js +82 -0
  919. package/dist/components/photo-tabs/photo-tabs.js.map +1 -0
  920. package/dist/components/pixel-avatar/index.d.ts +2 -0
  921. package/dist/components/pixel-avatar/index.js +2 -0
  922. package/dist/components/pixel-avatar/meta.js +17 -0
  923. package/dist/components/pixel-avatar/meta.js.map +1 -0
  924. package/dist/components/pixel-avatar/pixel-avatar.d.ts +23 -0
  925. package/dist/components/pixel-avatar/pixel-avatar.d.ts.map +1 -0
  926. package/dist/components/pixel-avatar/pixel-avatar.js +181 -0
  927. package/dist/components/pixel-avatar/pixel-avatar.js.map +1 -0
  928. package/dist/components/product-card/index.d.ts +2 -0
  929. package/dist/components/product-card/index.js +2 -0
  930. package/dist/components/product-card/meta.js +17 -0
  931. package/dist/components/product-card/meta.js.map +1 -0
  932. package/dist/components/product-card/product-card.d.ts +43 -0
  933. package/dist/components/product-card/product-card.d.ts.map +1 -0
  934. package/dist/components/product-card/product-card.js +249 -0
  935. package/dist/components/product-card/product-card.js.map +1 -0
  936. package/dist/components/progress/meta.js +1 -1
  937. package/dist/components/progress/meta.js.map +1 -1
  938. package/dist/components/progress/progress.d.ts +21 -2
  939. package/dist/components/progress/progress.d.ts.map +1 -1
  940. package/dist/components/progress/progress.js +56 -6
  941. package/dist/components/progress/progress.js.map +1 -1
  942. package/dist/components/pull-to-refresh/index.d.ts +2 -0
  943. package/dist/components/pull-to-refresh/index.js +2 -0
  944. package/dist/components/pull-to-refresh/meta.js +17 -0
  945. package/dist/components/pull-to-refresh/meta.js.map +1 -0
  946. package/dist/components/pull-to-refresh/pull-to-refresh.d.ts +47 -0
  947. package/dist/components/pull-to-refresh/pull-to-refresh.d.ts.map +1 -0
  948. package/dist/components/pull-to-refresh/pull-to-refresh.js +302 -0
  949. package/dist/components/pull-to-refresh/pull-to-refresh.js.map +1 -0
  950. package/dist/components/radial-menu/index.d.ts +2 -0
  951. package/dist/components/radial-menu/index.js +2 -0
  952. package/dist/components/radial-menu/meta.js +17 -0
  953. package/dist/components/radial-menu/meta.js.map +1 -0
  954. package/dist/components/radial-menu/radial-menu.d.ts +44 -0
  955. package/dist/components/radial-menu/radial-menu.d.ts.map +1 -0
  956. package/dist/components/radial-menu/radial-menu.js +313 -0
  957. package/dist/components/radial-menu/radial-menu.js.map +1 -0
  958. package/dist/components/radio-group/radio-group.d.ts.map +1 -1
  959. package/dist/components/radio-group/radio-group.js +4 -1
  960. package/dist/components/radio-group/radio-group.js.map +1 -1
  961. package/dist/components/range-dial/index.d.ts +2 -0
  962. package/dist/components/range-dial/index.js +2 -0
  963. package/dist/components/range-dial/meta.js +17 -0
  964. package/dist/components/range-dial/meta.js.map +1 -0
  965. package/dist/components/range-dial/range-dial.d.ts +33 -0
  966. package/dist/components/range-dial/range-dial.d.ts.map +1 -0
  967. package/dist/components/range-dial/range-dial.js +308 -0
  968. package/dist/components/range-dial/range-dial.js.map +1 -0
  969. package/dist/components/record-diff/record-diff.js +4 -4
  970. package/dist/components/record-diff/record-diff.js.map +1 -1
  971. package/dist/components/reorder-list/index.d.ts +2 -0
  972. package/dist/components/reorder-list/index.js +2 -0
  973. package/dist/components/reorder-list/meta.js +17 -0
  974. package/dist/components/reorder-list/meta.js.map +1 -0
  975. package/dist/components/reorder-list/reorder-list.d.ts +79 -0
  976. package/dist/components/reorder-list/reorder-list.d.ts.map +1 -0
  977. package/dist/components/reorder-list/reorder-list.js +471 -0
  978. package/dist/components/reorder-list/reorder-list.js.map +1 -0
  979. package/dist/components/reviews-carousel/carousel-controls.js +189 -0
  980. package/dist/components/reviews-carousel/carousel-controls.js.map +1 -0
  981. package/dist/components/reviews-carousel/index.d.ts +2 -0
  982. package/dist/components/reviews-carousel/index.js +2 -0
  983. package/dist/components/reviews-carousel/meta.js +17 -0
  984. package/dist/components/reviews-carousel/meta.js.map +1 -0
  985. package/dist/components/reviews-carousel/reviews-carousel.d.ts +46 -0
  986. package/dist/components/reviews-carousel/reviews-carousel.d.ts.map +1 -0
  987. package/dist/components/reviews-carousel/reviews-carousel.js +177 -0
  988. package/dist/components/reviews-carousel/reviews-carousel.js.map +1 -0
  989. package/dist/components/rich-popover/index.d.ts +2 -0
  990. package/dist/components/rich-popover/index.js +2 -0
  991. package/dist/components/rich-popover/meta.js +17 -0
  992. package/dist/components/rich-popover/meta.js.map +1 -0
  993. package/dist/components/rich-popover/rich-popover.d.ts +36 -0
  994. package/dist/components/rich-popover/rich-popover.d.ts.map +1 -0
  995. package/dist/components/rich-popover/rich-popover.js +157 -0
  996. package/dist/components/rich-popover/rich-popover.js.map +1 -0
  997. package/dist/components/ring-loader/index.d.ts +2 -0
  998. package/dist/components/ring-loader/index.js +2 -0
  999. package/dist/components/ring-loader/meta.js +17 -0
  1000. package/dist/components/ring-loader/meta.js.map +1 -0
  1001. package/dist/components/ring-loader/ring-loader.d.ts +31 -0
  1002. package/dist/components/ring-loader/ring-loader.d.ts.map +1 -0
  1003. package/dist/components/ring-loader/ring-loader.js +597 -0
  1004. package/dist/components/ring-loader/ring-loader.js.map +1 -0
  1005. package/dist/components/scramble-text/index.d.ts +2 -0
  1006. package/dist/components/scramble-text/index.js +2 -0
  1007. package/dist/components/scramble-text/meta.js +17 -0
  1008. package/dist/components/scramble-text/meta.js.map +1 -0
  1009. package/dist/components/scramble-text/scramble-text.d.ts +35 -0
  1010. package/dist/components/scramble-text/scramble-text.d.ts.map +1 -0
  1011. package/dist/components/scramble-text/scramble-text.js +151 -0
  1012. package/dist/components/scramble-text/scramble-text.js.map +1 -0
  1013. package/dist/components/scroll-reveal-text/index.d.ts +2 -0
  1014. package/dist/components/scroll-reveal-text/index.js +2 -0
  1015. package/dist/components/scroll-reveal-text/meta.js +17 -0
  1016. package/dist/components/scroll-reveal-text/meta.js.map +1 -0
  1017. package/dist/components/scroll-reveal-text/scroll-reveal-text.d.ts +22 -0
  1018. package/dist/components/scroll-reveal-text/scroll-reveal-text.d.ts.map +1 -0
  1019. package/dist/components/scroll-reveal-text/scroll-reveal-text.js +113 -0
  1020. package/dist/components/scroll-reveal-text/scroll-reveal-text.js.map +1 -0
  1021. package/dist/components/scrubber/index.d.ts +2 -0
  1022. package/dist/components/scrubber/index.js +2 -0
  1023. package/dist/components/scrubber/meta.js +17 -0
  1024. package/dist/components/scrubber/meta.js.map +1 -0
  1025. package/dist/components/scrubber/scrubber.d.ts +37 -0
  1026. package/dist/components/scrubber/scrubber.d.ts.map +1 -0
  1027. package/dist/components/scrubber/scrubber.js +217 -0
  1028. package/dist/components/scrubber/scrubber.js.map +1 -0
  1029. package/dist/components/select/meta.js +1 -1
  1030. package/dist/components/select/meta.js.map +1 -1
  1031. package/dist/components/select/select.d.ts +5 -0
  1032. package/dist/components/select/select.d.ts.map +1 -1
  1033. package/dist/components/select/select.js +29 -7
  1034. package/dist/components/select/select.js.map +1 -1
  1035. package/dist/components/selection-list/index.d.ts +2 -0
  1036. package/dist/components/selection-list/index.js +2 -0
  1037. package/dist/components/selection-list/meta.js +17 -0
  1038. package/dist/components/selection-list/meta.js.map +1 -0
  1039. package/dist/components/selection-list/selection-list-spring.js +21 -0
  1040. package/dist/components/selection-list/selection-list-spring.js.map +1 -0
  1041. package/dist/components/selection-list/selection-list.d.ts +42 -0
  1042. package/dist/components/selection-list/selection-list.d.ts.map +1 -0
  1043. package/dist/components/selection-list/selection-list.js +355 -0
  1044. package/dist/components/selection-list/selection-list.js.map +1 -0
  1045. package/dist/components/shader-transition/index.d.ts +4 -0
  1046. package/dist/components/shader-transition/index.js +4 -0
  1047. package/dist/components/shader-transition/meta.js +21 -0
  1048. package/dist/components/shader-transition/meta.js.map +1 -0
  1049. package/dist/components/shader-transition/shader-transition-engine.d.ts +39 -0
  1050. package/dist/components/shader-transition/shader-transition-engine.d.ts.map +1 -0
  1051. package/dist/components/shader-transition/shader-transition-engine.js +294 -0
  1052. package/dist/components/shader-transition/shader-transition-engine.js.map +1 -0
  1053. package/dist/components/shader-transition/shader-transition-presets.d.ts +222 -0
  1054. package/dist/components/shader-transition/shader-transition-presets.d.ts.map +1 -0
  1055. package/dist/components/shader-transition/shader-transition-presets.js +346 -0
  1056. package/dist/components/shader-transition/shader-transition-presets.js.map +1 -0
  1057. package/dist/components/shader-transition/shader-transition.d.ts +35 -0
  1058. package/dist/components/shader-transition/shader-transition.d.ts.map +1 -0
  1059. package/dist/components/shader-transition/shader-transition.js +314 -0
  1060. package/dist/components/shader-transition/shader-transition.js.map +1 -0
  1061. package/dist/components/shape-loader/index.d.ts +2 -0
  1062. package/dist/components/shape-loader/index.js +2 -0
  1063. package/dist/components/shape-loader/meta.js +17 -0
  1064. package/dist/components/shape-loader/meta.js.map +1 -0
  1065. package/dist/components/shape-loader/shape-loader-variants.d.ts +8 -0
  1066. package/dist/components/shape-loader/shape-loader-variants.d.ts.map +1 -0
  1067. package/dist/components/shape-loader/shape-loader-variants.js +635 -0
  1068. package/dist/components/shape-loader/shape-loader-variants.js.map +1 -0
  1069. package/dist/components/shape-loader/shape-loader.d.ts +26 -0
  1070. package/dist/components/shape-loader/shape-loader.d.ts.map +1 -0
  1071. package/dist/components/shape-loader/shape-loader.js +99 -0
  1072. package/dist/components/shape-loader/shape-loader.js.map +1 -0
  1073. package/dist/components/sheet/meta.js +1 -1
  1074. package/dist/components/sheet/meta.js.map +1 -1
  1075. package/dist/components/sheet/sheet.d.ts +10 -2
  1076. package/dist/components/sheet/sheet.d.ts.map +1 -1
  1077. package/dist/components/sheet/sheet.js +25 -6
  1078. package/dist/components/sheet/sheet.js.map +1 -1
  1079. package/dist/components/shimmer-text/index.d.ts +2 -0
  1080. package/dist/components/shimmer-text/index.js +2 -0
  1081. package/dist/components/shimmer-text/meta.js +17 -0
  1082. package/dist/components/shimmer-text/meta.js.map +1 -0
  1083. package/dist/components/shimmer-text/shimmer-text.d.ts +33 -0
  1084. package/dist/components/shimmer-text/shimmer-text.d.ts.map +1 -0
  1085. package/dist/components/shimmer-text/shimmer-text.js +120 -0
  1086. package/dist/components/shimmer-text/shimmer-text.js.map +1 -0
  1087. package/dist/components/sidebar/index.d.ts +2 -0
  1088. package/dist/components/sidebar/index.js +2 -0
  1089. package/dist/components/sidebar/meta.js +17 -0
  1090. package/dist/components/sidebar/meta.js.map +1 -0
  1091. package/dist/components/sidebar/sidebar.d.ts +69 -0
  1092. package/dist/components/sidebar/sidebar.d.ts.map +1 -0
  1093. package/dist/components/sidebar/sidebar.js +256 -0
  1094. package/dist/components/sidebar/sidebar.js.map +1 -0
  1095. package/dist/components/skeleton/index.d.ts +2 -2
  1096. package/dist/components/skeleton/meta.js +1 -1
  1097. package/dist/components/skeleton/meta.js.map +1 -1
  1098. package/dist/components/skeleton/skeleton.d.ts +14 -2
  1099. package/dist/components/skeleton/skeleton.d.ts.map +1 -1
  1100. package/dist/components/skeleton/skeleton.js +24 -5
  1101. package/dist/components/skeleton/skeleton.js.map +1 -1
  1102. package/dist/components/slide-to-confirm/index.d.ts +2 -0
  1103. package/dist/components/slide-to-confirm/index.js +2 -0
  1104. package/dist/components/slide-to-confirm/meta.js +21 -0
  1105. package/dist/components/slide-to-confirm/meta.js.map +1 -0
  1106. package/dist/components/slide-to-confirm/slide-to-confirm.d.ts +38 -0
  1107. package/dist/components/slide-to-confirm/slide-to-confirm.d.ts.map +1 -0
  1108. package/dist/components/slide-to-confirm/slide-to-confirm.js +389 -0
  1109. package/dist/components/slide-to-confirm/slide-to-confirm.js.map +1 -0
  1110. package/dist/components/slosh-slider/index.d.ts +2 -0
  1111. package/dist/components/slosh-slider/index.js +2 -0
  1112. package/dist/components/slosh-slider/meta.js +21 -0
  1113. package/dist/components/slosh-slider/meta.js.map +1 -0
  1114. package/dist/components/slosh-slider/slosh-slider.d.ts +43 -0
  1115. package/dist/components/slosh-slider/slosh-slider.d.ts.map +1 -0
  1116. package/dist/components/slosh-slider/slosh-slider.js +140 -0
  1117. package/dist/components/slosh-slider/slosh-slider.js.map +1 -0
  1118. package/dist/components/social-selector/index.d.ts +2 -0
  1119. package/dist/components/social-selector/index.js +2 -0
  1120. package/dist/components/social-selector/meta.js +17 -0
  1121. package/dist/components/social-selector/meta.js.map +1 -0
  1122. package/dist/components/social-selector/social-selector.d.ts +45 -0
  1123. package/dist/components/social-selector/social-selector.d.ts.map +1 -0
  1124. package/dist/components/social-selector/social-selector.js +128 -0
  1125. package/dist/components/social-selector/social-selector.js.map +1 -0
  1126. package/dist/components/spinner/spinner.d.ts +1 -1
  1127. package/dist/components/star-count/index.d.ts +2 -0
  1128. package/dist/components/star-count/index.js +2 -0
  1129. package/dist/components/star-count/meta.js +17 -0
  1130. package/dist/components/star-count/meta.js.map +1 -0
  1131. package/dist/components/star-count/star-count.d.ts +35 -0
  1132. package/dist/components/star-count/star-count.d.ts.map +1 -0
  1133. package/dist/components/star-count/star-count.js +94 -0
  1134. package/dist/components/star-count/star-count.js.map +1 -0
  1135. package/dist/components/stepper/index.d.ts +2 -0
  1136. package/dist/components/stepper/index.js +2 -0
  1137. package/dist/components/stepper/meta.js +17 -0
  1138. package/dist/components/stepper/meta.js.map +1 -0
  1139. package/dist/components/stepper/stepper.d.ts +45 -0
  1140. package/dist/components/stepper/stepper.d.ts.map +1 -0
  1141. package/dist/components/stepper/stepper.js +207 -0
  1142. package/dist/components/stepper/stepper.js.map +1 -0
  1143. package/dist/components/swipe-carousel/carousel-controls.js +98 -0
  1144. package/dist/components/swipe-carousel/carousel-controls.js.map +1 -0
  1145. package/dist/components/swipe-carousel/index.d.ts +2 -0
  1146. package/dist/components/swipe-carousel/index.js +2 -0
  1147. package/dist/components/swipe-carousel/meta.js +17 -0
  1148. package/dist/components/swipe-carousel/meta.js.map +1 -0
  1149. package/dist/components/swipe-carousel/swipe-carousel.d.ts +27 -0
  1150. package/dist/components/swipe-carousel/swipe-carousel.d.ts.map +1 -0
  1151. package/dist/components/swipe-carousel/swipe-carousel.js +288 -0
  1152. package/dist/components/swipe-carousel/swipe-carousel.js.map +1 -0
  1153. package/dist/components/switch/meta.js +1 -1
  1154. package/dist/components/switch/meta.js.map +1 -1
  1155. package/dist/components/switch/switch.d.ts +25 -3
  1156. package/dist/components/switch/switch.d.ts.map +1 -1
  1157. package/dist/components/switch/switch.js +20 -4
  1158. package/dist/components/switch/switch.js.map +1 -1
  1159. package/dist/components/switchboard-card/index.d.ts +2 -0
  1160. package/dist/components/switchboard-card/index.js +2 -0
  1161. package/dist/components/switchboard-card/meta.js +17 -0
  1162. package/dist/components/switchboard-card/meta.js.map +1 -0
  1163. package/dist/components/switchboard-card/switchboard-card.d.ts +44 -0
  1164. package/dist/components/switchboard-card/switchboard-card.d.ts.map +1 -0
  1165. package/dist/components/switchboard-card/switchboard-card.js +169 -0
  1166. package/dist/components/switchboard-card/switchboard-card.js.map +1 -0
  1167. package/dist/components/table/table.js +2 -2
  1168. package/dist/components/table/table.js.map +1 -1
  1169. package/dist/components/tabs/index.d.ts +2 -2
  1170. package/dist/components/tabs/index.js +2 -2
  1171. package/dist/components/tabs/meta.js +1 -1
  1172. package/dist/components/tabs/meta.js.map +1 -1
  1173. package/dist/components/tabs/tabs.d.ts +6 -2
  1174. package/dist/components/tabs/tabs.d.ts.map +1 -1
  1175. package/dist/components/tabs/tabs.js +112 -10
  1176. package/dist/components/tabs/tabs.js.map +1 -1
  1177. package/dist/components/tags-input/meta.js +1 -1
  1178. package/dist/components/tags-input/meta.js.map +1 -1
  1179. package/dist/components/tags-input/tags-input.d.ts +7 -1
  1180. package/dist/components/tags-input/tags-input.d.ts.map +1 -1
  1181. package/dist/components/tags-input/tags-input.js +82 -6
  1182. package/dist/components/tags-input/tags-input.js.map +1 -1
  1183. package/dist/components/text-effect/index.d.ts +3 -0
  1184. package/dist/components/text-effect/index.js +3 -0
  1185. package/dist/components/text-effect/meta.js +17 -0
  1186. package/dist/components/text-effect/meta.js.map +1 -0
  1187. package/dist/components/text-effect/text-effect-presets.d.ts +256 -0
  1188. package/dist/components/text-effect/text-effect-presets.d.ts.map +1 -0
  1189. package/dist/components/text-effect/text-effect-presets.js +292 -0
  1190. package/dist/components/text-effect/text-effect-presets.js.map +1 -0
  1191. package/dist/components/text-effect/text-effect.d.ts +58 -0
  1192. package/dist/components/text-effect/text-effect.d.ts.map +1 -0
  1193. package/dist/components/text-effect/text-effect.js +243 -0
  1194. package/dist/components/text-effect/text-effect.js.map +1 -0
  1195. package/dist/components/text-loader/index.d.ts +2 -0
  1196. package/dist/components/text-loader/index.js +2 -0
  1197. package/dist/components/text-loader/meta.js +17 -0
  1198. package/dist/components/text-loader/meta.js.map +1 -0
  1199. package/dist/components/text-loader/text-loader.d.ts +30 -0
  1200. package/dist/components/text-loader/text-loader.d.ts.map +1 -0
  1201. package/dist/components/text-loader/text-loader.js +514 -0
  1202. package/dist/components/text-loader/text-loader.js.map +1 -0
  1203. package/dist/components/text-swap/index.d.ts +3 -0
  1204. package/dist/components/text-swap/index.js +3 -0
  1205. package/dist/components/text-swap/meta.js +17 -0
  1206. package/dist/components/text-swap/meta.js.map +1 -0
  1207. package/dist/components/text-swap/text-rotate.d.ts +17 -0
  1208. package/dist/components/text-swap/text-rotate.d.ts.map +1 -0
  1209. package/dist/components/text-swap/text-rotate.js +51 -0
  1210. package/dist/components/text-swap/text-rotate.js.map +1 -0
  1211. package/dist/components/text-swap/text-swap.d.ts +41 -0
  1212. package/dist/components/text-swap/text-swap.d.ts.map +1 -0
  1213. package/dist/components/text-swap/text-swap.js +303 -0
  1214. package/dist/components/text-swap/text-swap.js.map +1 -0
  1215. package/dist/components/textarea/index.d.ts +2 -0
  1216. package/dist/components/textarea/index.js +2 -0
  1217. package/dist/components/textarea/meta.js +17 -0
  1218. package/dist/components/textarea/meta.js.map +1 -0
  1219. package/dist/components/textarea/textarea.d.ts +43 -0
  1220. package/dist/components/textarea/textarea.d.ts.map +1 -0
  1221. package/dist/components/textarea/textarea.js +119 -0
  1222. package/dist/components/textarea/textarea.js.map +1 -0
  1223. package/dist/components/tick-progress/index.d.ts +2 -0
  1224. package/dist/components/tick-progress/index.js +2 -0
  1225. package/dist/components/tick-progress/meta.js +17 -0
  1226. package/dist/components/tick-progress/meta.js.map +1 -0
  1227. package/dist/components/tick-progress/tick-progress.d.ts +28 -0
  1228. package/dist/components/tick-progress/tick-progress.d.ts.map +1 -0
  1229. package/dist/components/tick-progress/tick-progress.js +151 -0
  1230. package/dist/components/tick-progress/tick-progress.js.map +1 -0
  1231. package/dist/components/tilt-card/index.d.ts +2 -0
  1232. package/dist/components/tilt-card/index.js +2 -0
  1233. package/dist/components/tilt-card/meta.js +17 -0
  1234. package/dist/components/tilt-card/meta.js.map +1 -0
  1235. package/dist/components/tilt-card/tilt-card.d.ts +36 -0
  1236. package/dist/components/tilt-card/tilt-card.d.ts.map +1 -0
  1237. package/dist/components/tilt-card/tilt-card.js +135 -0
  1238. package/dist/components/tilt-card/tilt-card.js.map +1 -0
  1239. package/dist/components/time-range-picker/time-range-picker.js +3 -3
  1240. package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
  1241. package/dist/components/time-stack/index.d.ts +2 -0
  1242. package/dist/components/time-stack/index.js +2 -0
  1243. package/dist/components/time-stack/meta.js +17 -0
  1244. package/dist/components/time-stack/meta.js.map +1 -0
  1245. package/dist/components/time-stack/time-stack.d.ts +37 -0
  1246. package/dist/components/time-stack/time-stack.d.ts.map +1 -0
  1247. package/dist/components/time-stack/time-stack.js +253 -0
  1248. package/dist/components/time-stack/time-stack.js.map +1 -0
  1249. package/dist/components/toast/meta.js +1 -1
  1250. package/dist/components/toast/meta.js.map +1 -1
  1251. package/dist/components/toast/toast.d.ts +13 -4
  1252. package/dist/components/toast/toast.d.ts.map +1 -1
  1253. package/dist/components/toast/toast.js +34 -11
  1254. package/dist/components/toast/toast.js.map +1 -1
  1255. package/dist/components/todo-tower/index.d.ts +2 -0
  1256. package/dist/components/todo-tower/index.js +2 -0
  1257. package/dist/components/todo-tower/meta.js +17 -0
  1258. package/dist/components/todo-tower/meta.js.map +1 -0
  1259. package/dist/components/todo-tower/todo-tower.d.ts +38 -0
  1260. package/dist/components/todo-tower/todo-tower.d.ts.map +1 -0
  1261. package/dist/components/todo-tower/todo-tower.js +284 -0
  1262. package/dist/components/todo-tower/todo-tower.js.map +1 -0
  1263. package/dist/components/tooltip/meta.js +1 -1
  1264. package/dist/components/tooltip/meta.js.map +1 -1
  1265. package/dist/components/tooltip/tooltip.d.ts +4 -0
  1266. package/dist/components/tooltip/tooltip.d.ts.map +1 -1
  1267. package/dist/components/tooltip/tooltip.js +20 -4
  1268. package/dist/components/tooltip/tooltip.js.map +1 -1
  1269. package/dist/components/tweet-card/index.d.ts +2 -0
  1270. package/dist/components/tweet-card/index.js +2 -0
  1271. package/dist/components/tweet-card/meta.js +17 -0
  1272. package/dist/components/tweet-card/meta.js.map +1 -0
  1273. package/dist/components/tweet-card/tweet-card.d.ts +57 -0
  1274. package/dist/components/tweet-card/tweet-card.d.ts.map +1 -0
  1275. package/dist/components/tweet-card/tweet-card.js +243 -0
  1276. package/dist/components/tweet-card/tweet-card.js.map +1 -0
  1277. package/dist/components/typewriter-text/index.d.ts +2 -0
  1278. package/dist/components/typewriter-text/index.js +2 -0
  1279. package/dist/components/typewriter-text/meta.js +17 -0
  1280. package/dist/components/typewriter-text/meta.js.map +1 -0
  1281. package/dist/components/typewriter-text/typewriter-text.d.ts +33 -0
  1282. package/dist/components/typewriter-text/typewriter-text.d.ts.map +1 -0
  1283. package/dist/components/typewriter-text/typewriter-text.js +135 -0
  1284. package/dist/components/typewriter-text/typewriter-text.js.map +1 -0
  1285. package/dist/components/uptime-matrix/index.d.ts +2 -0
  1286. package/dist/components/uptime-matrix/index.js +2 -0
  1287. package/dist/components/uptime-matrix/meta.js +17 -0
  1288. package/dist/components/uptime-matrix/meta.js.map +1 -0
  1289. package/dist/components/uptime-matrix/uptime-matrix.d.ts +60 -0
  1290. package/dist/components/uptime-matrix/uptime-matrix.d.ts.map +1 -0
  1291. package/dist/components/uptime-matrix/uptime-matrix.js +303 -0
  1292. package/dist/components/uptime-matrix/uptime-matrix.js.map +1 -0
  1293. package/dist/index.d.ts +256 -18
  1294. package/dist/index.js +134 -10
  1295. package/dist/lib/styles.d.ts +16 -1
  1296. package/dist/lib/styles.d.ts.map +1 -1
  1297. package/dist/lib/styles.js +16 -1
  1298. package/dist/lib/styles.js.map +1 -1
  1299. package/dist/registry/blocks.d.ts.map +1 -1
  1300. package/dist/registry/blocks.js +95 -9
  1301. package/dist/registry/blocks.js.map +1 -1
  1302. package/dist/registry/components.d.ts.map +1 -1
  1303. package/dist/registry/components.js +278 -50
  1304. package/dist/registry/components.js.map +1 -1
  1305. package/dist/registry/schema.d.ts +9 -1
  1306. package/dist/registry/schema.d.ts.map +1 -1
  1307. package/dist/registry/schema.js +2 -1
  1308. package/dist/registry/schema.js.map +1 -1
  1309. package/package.json +6 -4
  1310. package/src/components/accordion/accordion.tsx +1 -1
  1311. package/src/components/account-menu/account-menu.tsx +338 -0
  1312. package/src/components/account-menu/index.ts +12 -0
  1313. package/src/components/account-menu/meta.ts +19 -0
  1314. package/src/components/action-node/action-node-spring.ts +34 -0
  1315. package/src/components/action-node/action-node.tsx +516 -0
  1316. package/src/components/action-node/index.ts +8 -0
  1317. package/src/components/action-node/meta.ts +21 -0
  1318. package/src/components/activity-feed/activity-feed.tsx +1 -1
  1319. package/src/components/ai-agent-plan/ai-agent-plan.tsx +0 -0
  1320. package/src/components/ai-agent-plan/index.ts +1 -0
  1321. package/src/components/ai-agent-plan/meta.ts +3 -1
  1322. package/src/components/ai-approval-request/ai-approval-request.tsx +103 -4
  1323. package/src/components/ai-approval-request/meta.ts +4 -1
  1324. package/src/components/ai-artifact/ai-artifact.tsx +203 -0
  1325. package/src/components/ai-artifact/index.ts +1 -0
  1326. package/src/components/ai-artifact/meta.ts +18 -0
  1327. package/src/components/ai-branch/ai-branch.tsx +222 -0
  1328. package/src/components/ai-branch/index.ts +11 -0
  1329. package/src/components/ai-branch/meta.ts +18 -0
  1330. package/src/components/ai-conversation/ai-conversation.tsx +142 -31
  1331. package/src/components/ai-conversation/index.ts +1 -0
  1332. package/src/components/ai-extraction-review/ai-extraction-review.tsx +1 -1
  1333. package/src/components/ai-loader/ai-loader.tsx +112 -0
  1334. package/src/components/ai-loader/index.ts +6 -0
  1335. package/src/components/ai-loader/meta.ts +18 -0
  1336. package/src/components/ai-message/ai-message.tsx +54 -9
  1337. package/src/components/ai-message/index.ts +2 -0
  1338. package/src/components/ai-message/meta.ts +2 -1
  1339. package/src/components/ai-prompt-input/ai-prompt-input.tsx +57 -19
  1340. package/src/components/ai-reasoning/ai-reasoning.tsx +192 -13
  1341. package/src/components/ai-reasoning/index.ts +1 -0
  1342. package/src/components/ai-reasoning/meta.ts +4 -2
  1343. package/src/components/ai-response/ai-response.tsx +12 -3
  1344. package/src/components/ai-response/index.ts +1 -0
  1345. package/src/components/ai-response/meta.ts +6 -3
  1346. package/src/components/ai-response/response-text.tsx +119 -0
  1347. package/src/components/ai-sources/ai-sources.tsx +191 -8
  1348. package/src/components/ai-sources/index.ts +1 -0
  1349. package/src/components/ai-sources/meta.ts +4 -2
  1350. package/src/components/ai-suggestions/ai-suggestions.tsx +130 -0
  1351. package/src/components/ai-suggestions/index.ts +6 -0
  1352. package/src/components/ai-suggestions/meta.ts +17 -0
  1353. package/src/components/ai-token-usage/ai-token-usage.tsx +288 -14
  1354. package/src/components/ai-token-usage/index.ts +5 -0
  1355. package/src/components/ai-token-usage/meta.ts +6 -2
  1356. package/src/components/ai-tool/ai-tool.tsx +125 -4
  1357. package/src/components/ai-tool/meta.ts +3 -1
  1358. package/src/components/animated-checklist/animated-checklist.tsx +324 -0
  1359. package/src/components/animated-checklist/index.ts +6 -0
  1360. package/src/components/animated-checklist/meta.ts +18 -0
  1361. package/src/components/app-stack/app-stack.tsx +414 -0
  1362. package/src/components/app-stack/index.ts +7 -0
  1363. package/src/components/app-stack/meta.ts +20 -0
  1364. package/src/components/aspect-morph/aspect-morph.tsx +272 -0
  1365. package/src/components/aspect-morph/index.ts +8 -0
  1366. package/src/components/aspect-morph/meta.ts +19 -0
  1367. package/src/components/assignee-picker/assignee-picker-spring.ts +33 -0
  1368. package/src/components/assignee-picker/assignee-picker.tsx +535 -0
  1369. package/src/components/assignee-picker/index.ts +6 -0
  1370. package/src/components/assignee-picker/meta.ts +21 -0
  1371. package/src/components/avatar-group/avatar-group.tsx +176 -0
  1372. package/src/components/avatar-group/index.ts +6 -0
  1373. package/src/components/avatar-group/meta.ts +18 -0
  1374. package/src/components/bar-loader/bar-loader.tsx +549 -0
  1375. package/src/components/bar-loader/index.ts +7 -0
  1376. package/src/components/bar-loader/meta.ts +18 -0
  1377. package/src/components/book/book.tsx +300 -0
  1378. package/src/components/book/index.ts +1 -0
  1379. package/src/components/book/meta.ts +18 -0
  1380. package/src/components/breadcrumb/breadcrumb.tsx +198 -0
  1381. package/src/components/breadcrumb/index.ts +11 -0
  1382. package/src/components/breadcrumb/meta.ts +20 -0
  1383. package/src/components/browser-tabs/browser-tabs-spring.ts +34 -0
  1384. package/src/components/browser-tabs/browser-tabs.tsx +608 -0
  1385. package/src/components/browser-tabs/index.ts +7 -0
  1386. package/src/components/browser-tabs/meta.ts +22 -0
  1387. package/src/components/button/button.tsx +57 -2
  1388. package/src/components/calendar/calendar.tsx +2 -2
  1389. package/src/components/canvas-toolbar/canvas-toolbar.tsx +457 -0
  1390. package/src/components/canvas-toolbar/index.ts +9 -0
  1391. package/src/components/canvas-toolbar/meta.ts +22 -0
  1392. package/src/components/card-spread/card-spread-layouts.ts +251 -0
  1393. package/src/components/card-spread/card-spread.tsx +415 -0
  1394. package/src/components/card-spread/index.ts +19 -0
  1395. package/src/components/card-spread/meta.ts +21 -0
  1396. package/src/components/card-stack/card-stack-layout.ts +100 -0
  1397. package/src/components/card-stack/card-stack.tsx +359 -0
  1398. package/src/components/card-stack/index.ts +1 -0
  1399. package/src/components/card-stack/meta.ts +20 -0
  1400. package/src/components/carousel-3d/carousel-3d.tsx +501 -0
  1401. package/src/components/carousel-3d/index.ts +7 -0
  1402. package/src/components/carousel-3d/meta.ts +20 -0
  1403. package/src/components/checkbox/checkbox.tsx +29 -1
  1404. package/src/components/code-block/code-block.tsx +11 -110
  1405. package/src/components/code-block/index.ts +4 -1
  1406. package/src/components/code-block/meta.ts +1 -1
  1407. package/src/components/collapsible/collapsible.tsx +63 -0
  1408. package/src/components/collapsible/index.ts +6 -0
  1409. package/src/components/collapsible/meta.ts +16 -0
  1410. package/src/components/combobox/combobox.tsx +167 -14
  1411. package/src/components/combobox/index.ts +1 -0
  1412. package/src/components/combobox/meta.ts +2 -1
  1413. package/src/components/command/command.tsx +1 -1
  1414. package/src/components/command-bar/command-bar.tsx +177 -0
  1415. package/src/components/command-bar/index.ts +1 -0
  1416. package/src/components/command-bar/meta.ts +17 -0
  1417. package/src/components/comment-bubble/comment-bubble.tsx +269 -0
  1418. package/src/components/comment-bubble/index.ts +6 -0
  1419. package/src/components/comment-bubble/meta.ts +18 -0
  1420. package/src/components/context-menu/context-menu.tsx +280 -0
  1421. package/src/components/context-menu/index.ts +21 -0
  1422. package/src/components/context-menu/meta.ts +19 -0
  1423. package/src/components/contribution-graph/contribution-graph.tsx +372 -0
  1424. package/src/components/contribution-graph/index.ts +6 -0
  1425. package/src/components/contribution-graph/meta.ts +19 -0
  1426. package/src/components/copy-button/copy-button.tsx +278 -0
  1427. package/src/components/copy-button/index.ts +6 -0
  1428. package/src/components/copy-button/meta.ts +19 -0
  1429. package/src/components/create-menu/create-menu.tsx +319 -0
  1430. package/src/components/create-menu/index.ts +7 -0
  1431. package/src/components/create-menu/meta.ts +21 -0
  1432. package/src/components/cursor-follow/cursor-follow.tsx +186 -0
  1433. package/src/components/cursor-follow/index.ts +1 -0
  1434. package/src/components/cursor-follow/meta.ts +19 -0
  1435. package/src/components/data-table/data-table.tsx +14 -3
  1436. package/src/components/dial/dial.tsx +308 -0
  1437. package/src/components/dial/index.ts +1 -0
  1438. package/src/components/dial/meta.ts +19 -0
  1439. package/src/components/dialog/dialog.tsx +80 -37
  1440. package/src/components/dialog/meta.ts +2 -1
  1441. package/src/components/diff-viewer/diff-viewer.tsx +160 -21
  1442. package/src/components/diff-viewer/meta.ts +4 -1
  1443. package/src/components/direction/direction.tsx +38 -0
  1444. package/src/components/direction/index.ts +1 -0
  1445. package/src/components/direction/meta.ts +19 -0
  1446. package/src/components/dither-area/dither-area.tsx +280 -0
  1447. package/src/components/dither-area/index.ts +9 -0
  1448. package/src/components/dither-area/meta.ts +18 -0
  1449. package/src/components/dither-bar/dither-bar.tsx +389 -0
  1450. package/src/components/dither-bar/index.ts +8 -0
  1451. package/src/components/dither-bar/meta.ts +19 -0
  1452. package/src/components/dither-canvas/canvas-mock.ts +143 -0
  1453. package/src/components/dither-canvas/dither-canvas.tsx +382 -0
  1454. package/src/components/dither-canvas/dither-engine.ts +354 -0
  1455. package/src/components/dither-canvas/dither-geometry.ts +295 -0
  1456. package/src/components/dither-canvas/dither-scrubber.tsx +244 -0
  1457. package/src/components/dither-canvas/index.ts +68 -0
  1458. package/src/components/dither-canvas/meta.ts +19 -0
  1459. package/src/components/dither-donut/dither-donut.tsx +377 -0
  1460. package/src/components/dither-donut/index.ts +7 -0
  1461. package/src/components/dither-donut/meta.ts +19 -0
  1462. package/src/components/dither-funnel/dither-funnel.tsx +273 -0
  1463. package/src/components/dither-funnel/index.ts +9 -0
  1464. package/src/components/dither-funnel/meta.ts +19 -0
  1465. package/src/components/dither-gauge/dither-gauge.tsx +279 -0
  1466. package/src/components/dither-gauge/index.ts +8 -0
  1467. package/src/components/dither-gauge/meta.ts +19 -0
  1468. package/src/components/dither-heatmap/dither-heatmap.tsx +453 -0
  1469. package/src/components/dither-heatmap/index.ts +10 -0
  1470. package/src/components/dither-heatmap/meta.ts +19 -0
  1471. package/src/components/dither-line/dither-line.tsx +244 -0
  1472. package/src/components/dither-line/index.ts +8 -0
  1473. package/src/components/dither-line/meta.ts +18 -0
  1474. package/src/components/dither-meter/dither-meter.tsx +299 -0
  1475. package/src/components/dither-meter/index.ts +8 -0
  1476. package/src/components/dither-meter/meta.ts +19 -0
  1477. package/src/components/dither-scatter/dither-scatter.tsx +317 -0
  1478. package/src/components/dither-scatter/index.ts +8 -0
  1479. package/src/components/dither-scatter/meta.ts +19 -0
  1480. package/src/components/dot-morph-button/dot-morph-button.tsx +86 -0
  1481. package/src/components/dot-morph-button/index.ts +5 -0
  1482. package/src/components/dot-morph-button/meta.ts +17 -0
  1483. package/src/components/dots-loader/dots-loader.tsx +451 -0
  1484. package/src/components/dots-loader/index.ts +7 -0
  1485. package/src/components/dots-loader/meta.ts +17 -0
  1486. package/src/components/drag-stepper/drag-stepper.tsx +367 -0
  1487. package/src/components/drag-stepper/index.ts +1 -0
  1488. package/src/components/drag-stepper/meta.ts +23 -0
  1489. package/src/components/drawer/drawer.tsx +78 -35
  1490. package/src/components/drawer/meta.ts +1 -1
  1491. package/src/components/dropdown-menu/dropdown-menu.tsx +61 -18
  1492. package/src/components/dropdown-menu/meta.ts +2 -1
  1493. package/src/components/effect-button/effect-button.tsx +310 -0
  1494. package/src/components/effect-button/index.ts +8 -0
  1495. package/src/components/effect-button/meta.ts +18 -0
  1496. package/src/components/escape-button/escape-button.tsx +232 -0
  1497. package/src/components/escape-button/index.ts +1 -0
  1498. package/src/components/escape-button/meta.ts +18 -0
  1499. package/src/components/expandable-cards/expandable-cards.tsx +435 -0
  1500. package/src/components/expandable-cards/index.ts +6 -0
  1501. package/src/components/expandable-cards/meta.ts +20 -0
  1502. package/src/components/expandable-list/expandable-list.tsx +260 -0
  1503. package/src/components/expandable-list/index.ts +6 -0
  1504. package/src/components/expandable-list/meta.ts +19 -0
  1505. package/src/components/expanding-search/expanding-search.tsx +244 -0
  1506. package/src/components/expanding-search/index.ts +5 -0
  1507. package/src/components/expanding-search/meta.ts +19 -0
  1508. package/src/components/exposure-slider/exposure-slider.tsx +351 -0
  1509. package/src/components/exposure-slider/index.ts +5 -0
  1510. package/src/components/exposure-slider/meta.ts +20 -0
  1511. package/src/components/file-upload/file-upload.tsx +134 -12
  1512. package/src/components/file-upload/meta.ts +2 -1
  1513. package/src/components/focus-blur-links/focus-blur-links.tsx +189 -0
  1514. package/src/components/focus-blur-links/index.ts +7 -0
  1515. package/src/components/focus-blur-links/meta.ts +18 -0
  1516. package/src/components/folding-frame/folding-frame.tsx +435 -0
  1517. package/src/components/folding-frame/index.ts +1 -0
  1518. package/src/components/folding-frame/meta.ts +21 -0
  1519. package/src/components/form/form.tsx +105 -13
  1520. package/src/components/form/meta.ts +2 -1
  1521. package/src/components/glass-bubble/glass-bubble.tsx +418 -0
  1522. package/src/components/glass-bubble/index.ts +9 -0
  1523. package/src/components/glass-bubble/meta.ts +20 -0
  1524. package/src/components/glow-card/glow-card.tsx +195 -0
  1525. package/src/components/glow-card/index.ts +7 -0
  1526. package/src/components/glow-card/meta.ts +18 -0
  1527. package/src/components/goo-ball/goo-ball.tsx +379 -0
  1528. package/src/components/goo-ball/index.ts +7 -0
  1529. package/src/components/goo-ball/meta.ts +19 -0
  1530. package/src/components/goo-tabs/goo-tabs.tsx +389 -0
  1531. package/src/components/goo-tabs/index.ts +11 -0
  1532. package/src/components/goo-tabs/meta.ts +20 -0
  1533. package/src/components/gooey-popover/gooey-popover.tsx +332 -0
  1534. package/src/components/gooey-popover/index.ts +1 -0
  1535. package/src/components/gooey-popover/meta.ts +20 -0
  1536. package/src/components/gradient-orb/gradient-orb.tsx +230 -0
  1537. package/src/components/gradient-orb/index.ts +6 -0
  1538. package/src/components/gradient-orb/meta.ts +17 -0
  1539. package/src/components/grid-loader/grid-loader.tsx +364 -0
  1540. package/src/components/grid-loader/index.ts +10 -0
  1541. package/src/components/grid-loader/meta.ts +17 -0
  1542. package/src/components/image-accordion/image-accordion.tsx +230 -0
  1543. package/src/components/image-accordion/index.ts +6 -0
  1544. package/src/components/image-accordion/meta.ts +20 -0
  1545. package/src/components/image-metadata/image-metadata.tsx +265 -0
  1546. package/src/components/image-metadata/index.ts +6 -0
  1547. package/src/components/image-metadata/meta.ts +19 -0
  1548. package/src/components/image-selector/image-selector.tsx +338 -0
  1549. package/src/components/image-selector/index.ts +6 -0
  1550. package/src/components/image-selector/meta.ts +20 -0
  1551. package/src/components/inline-confirm/index.ts +6 -0
  1552. package/src/components/inline-confirm/inline-confirm.tsx +363 -0
  1553. package/src/components/inline-confirm/meta.ts +18 -0
  1554. package/src/components/input/floating-label-input.tsx +110 -0
  1555. package/src/components/input/index.ts +5 -0
  1556. package/src/components/input/input.tsx +1 -1
  1557. package/src/components/input/meta.ts +3 -2
  1558. package/src/components/invite-carousel/carousel-controls.tsx +291 -0
  1559. package/src/components/invite-carousel/index.ts +8 -0
  1560. package/src/components/invite-carousel/invite-carousel.tsx +359 -0
  1561. package/src/components/invite-carousel/meta.ts +21 -0
  1562. package/src/components/island/index.ts +7 -0
  1563. package/src/components/island/island.tsx +162 -0
  1564. package/src/components/island/meta.ts +18 -0
  1565. package/src/components/liquid-toggle/index.ts +1 -0
  1566. package/src/components/liquid-toggle/liquid-toggle.tsx +254 -0
  1567. package/src/components/liquid-toggle/meta.ts +18 -0
  1568. package/src/components/log-viewer/log-viewer.tsx +2 -2
  1569. package/src/components/magnetic-button/index.ts +1 -0
  1570. package/src/components/magnetic-button/magnetic-button.tsx +218 -0
  1571. package/src/components/magnetic-button/meta.ts +18 -0
  1572. package/src/components/magnetic-select/index.ts +6 -0
  1573. package/src/components/magnetic-select/magnetic-select-spring.ts +33 -0
  1574. package/src/components/magnetic-select/magnetic-select.tsx +426 -0
  1575. package/src/components/magnetic-select/meta.ts +19 -0
  1576. package/src/components/magnify-dock/index.ts +7 -0
  1577. package/src/components/magnify-dock/magnify-dock.tsx +308 -0
  1578. package/src/components/magnify-dock/meta.ts +21 -0
  1579. package/src/components/marquee/index.ts +1 -0
  1580. package/src/components/marquee/marquee.tsx +215 -0
  1581. package/src/components/marquee/meta.ts +19 -0
  1582. package/src/components/meter/meter.tsx +1 -1
  1583. package/src/components/morph-button/index.ts +7 -0
  1584. package/src/components/morph-button/meta.ts +18 -0
  1585. package/src/components/morph-button/morph-button.tsx +390 -0
  1586. package/src/components/morph-surface/index.ts +7 -0
  1587. package/src/components/morph-surface/meta.ts +21 -0
  1588. package/src/components/morph-surface/morph-surface.tsx +367 -0
  1589. package/src/components/notification-badge/index.ts +6 -0
  1590. package/src/components/notification-badge/meta.ts +19 -0
  1591. package/src/components/notification-badge/notification-badge.tsx +183 -0
  1592. package/src/components/notify-button/index.ts +1 -0
  1593. package/src/components/notify-button/meta.ts +17 -0
  1594. package/src/components/notify-button/notify-button.tsx +194 -0
  1595. package/src/components/now-playing/index.ts +1 -0
  1596. package/src/components/now-playing/meta.ts +19 -0
  1597. package/src/components/now-playing/now-playing.tsx +474 -0
  1598. package/src/components/number-flow/index.ts +10 -0
  1599. package/src/components/number-flow/meta.ts +18 -0
  1600. package/src/components/number-flow/number-flow.tsx +330 -0
  1601. package/src/components/orb-face/index.ts +1 -0
  1602. package/src/components/orb-face/meta.ts +18 -0
  1603. package/src/components/orb-face/orb-face.tsx +431 -0
  1604. package/src/components/otp-input/index.ts +6 -0
  1605. package/src/components/otp-input/meta.ts +21 -0
  1606. package/src/components/otp-input/otp-input.tsx +407 -0
  1607. package/src/components/pagination/index.ts +1 -0
  1608. package/src/components/pagination/meta.ts +4 -2
  1609. package/src/components/pagination/pagination-indicator.tsx +95 -0
  1610. package/src/components/pagination/pagination.tsx +50 -5
  1611. package/src/components/palette-generator/index.ts +8 -0
  1612. package/src/components/palette-generator/meta.ts +17 -0
  1613. package/src/components/palette-generator/palette-generator.tsx +300 -0
  1614. package/src/components/permission-matrix/permission-matrix.tsx +4 -4
  1615. package/src/components/photo-stack/index.ts +1 -0
  1616. package/src/components/photo-stack/meta.ts +19 -0
  1617. package/src/components/photo-stack/photo-stack.tsx +310 -0
  1618. package/src/components/photo-tabs/index.ts +1 -0
  1619. package/src/components/photo-tabs/meta.ts +18 -0
  1620. package/src/components/photo-tabs/photo-tabs.tsx +180 -0
  1621. package/src/components/pixel-avatar/index.ts +1 -0
  1622. package/src/components/pixel-avatar/meta.ts +17 -0
  1623. package/src/components/pixel-avatar/pixel-avatar.tsx +249 -0
  1624. package/src/components/product-card/index.ts +1 -0
  1625. package/src/components/product-card/meta.ts +20 -0
  1626. package/src/components/product-card/product-card.tsx +313 -0
  1627. package/src/components/progress/meta.ts +2 -1
  1628. package/src/components/progress/progress.tsx +123 -27
  1629. package/src/components/pull-to-refresh/index.ts +7 -0
  1630. package/src/components/pull-to-refresh/meta.ts +20 -0
  1631. package/src/components/pull-to-refresh/pull-to-refresh.tsx +421 -0
  1632. package/src/components/radial-menu/index.ts +7 -0
  1633. package/src/components/radial-menu/meta.ts +22 -0
  1634. package/src/components/radial-menu/radial-menu.tsx +441 -0
  1635. package/src/components/radio-group/radio-group.tsx +12 -1
  1636. package/src/components/range-dial/index.ts +1 -0
  1637. package/src/components/range-dial/meta.ts +21 -0
  1638. package/src/components/range-dial/range-dial.tsx +428 -0
  1639. package/src/components/record-diff/record-diff.tsx +4 -4
  1640. package/src/components/reorder-list/index.ts +10 -0
  1641. package/src/components/reorder-list/meta.ts +21 -0
  1642. package/src/components/reorder-list/reorder-list.tsx +627 -0
  1643. package/src/components/reviews-carousel/carousel-controls.tsx +291 -0
  1644. package/src/components/reviews-carousel/index.ts +7 -0
  1645. package/src/components/reviews-carousel/meta.ts +21 -0
  1646. package/src/components/reviews-carousel/reviews-carousel.tsx +301 -0
  1647. package/src/components/rich-popover/index.ts +1 -0
  1648. package/src/components/rich-popover/meta.ts +18 -0
  1649. package/src/components/rich-popover/rich-popover.tsx +228 -0
  1650. package/src/components/ring-loader/index.ts +7 -0
  1651. package/src/components/ring-loader/meta.ts +17 -0
  1652. package/src/components/ring-loader/ring-loader.tsx +795 -0
  1653. package/src/components/scramble-text/index.ts +8 -0
  1654. package/src/components/scramble-text/meta.ts +17 -0
  1655. package/src/components/scramble-text/scramble-text.tsx +250 -0
  1656. package/src/components/scroll-reveal-text/index.ts +6 -0
  1657. package/src/components/scroll-reveal-text/meta.ts +18 -0
  1658. package/src/components/scroll-reveal-text/scroll-reveal-text.tsx +193 -0
  1659. package/src/components/scrubber/index.ts +1 -0
  1660. package/src/components/scrubber/meta.ts +20 -0
  1661. package/src/components/scrubber/scrubber.tsx +348 -0
  1662. package/src/components/select/meta.ts +2 -1
  1663. package/src/components/select/select.tsx +71 -24
  1664. package/src/components/selection-list/index.ts +6 -0
  1665. package/src/components/selection-list/meta.ts +21 -0
  1666. package/src/components/selection-list/selection-list-spring.ts +33 -0
  1667. package/src/components/selection-list/selection-list.tsx +497 -0
  1668. package/src/components/shader-transition/index.ts +21 -0
  1669. package/src/components/shader-transition/meta.ts +23 -0
  1670. package/src/components/shader-transition/shader-transition-engine.ts +396 -0
  1671. package/src/components/shader-transition/shader-transition-presets.ts +424 -0
  1672. package/src/components/shader-transition/shader-transition.tsx +470 -0
  1673. package/src/components/shader-transition/webgl-mock.ts +176 -0
  1674. package/src/components/shape-loader/index.ts +7 -0
  1675. package/src/components/shape-loader/meta.ts +17 -0
  1676. package/src/components/shape-loader/shape-loader-variants.tsx +717 -0
  1677. package/src/components/shape-loader/shape-loader.tsx +149 -0
  1678. package/src/components/sheet/meta.ts +1 -1
  1679. package/src/components/sheet/sheet.tsx +80 -34
  1680. package/src/components/shimmer-text/index.ts +7 -0
  1681. package/src/components/shimmer-text/meta.ts +18 -0
  1682. package/src/components/shimmer-text/shimmer-text.tsx +218 -0
  1683. package/src/components/sidebar/index.ts +19 -0
  1684. package/src/components/sidebar/meta.ts +25 -0
  1685. package/src/components/sidebar/sidebar.tsx +374 -0
  1686. package/src/components/skeleton/index.ts +1 -1
  1687. package/src/components/skeleton/meta.ts +2 -1
  1688. package/src/components/skeleton/skeleton.tsx +49 -7
  1689. package/src/components/slide-to-confirm/index.ts +6 -0
  1690. package/src/components/slide-to-confirm/meta.ts +20 -0
  1691. package/src/components/slide-to-confirm/slide-to-confirm.tsx +519 -0
  1692. package/src/components/slosh-slider/index.ts +6 -0
  1693. package/src/components/slosh-slider/meta.ts +20 -0
  1694. package/src/components/slosh-slider/slosh-slider.tsx +266 -0
  1695. package/src/components/social-selector/index.ts +6 -0
  1696. package/src/components/social-selector/meta.ts +18 -0
  1697. package/src/components/social-selector/social-selector.tsx +247 -0
  1698. package/src/components/star-count/index.ts +1 -0
  1699. package/src/components/star-count/meta.ts +18 -0
  1700. package/src/components/star-count/star-count.tsx +161 -0
  1701. package/src/components/stepper/index.ts +8 -0
  1702. package/src/components/stepper/meta.ts +20 -0
  1703. package/src/components/stepper/stepper.tsx +364 -0
  1704. package/src/components/swipe-carousel/carousel-controls.tsx +148 -0
  1705. package/src/components/swipe-carousel/index.ts +6 -0
  1706. package/src/components/swipe-carousel/meta.ts +21 -0
  1707. package/src/components/swipe-carousel/swipe-carousel.tsx +407 -0
  1708. package/src/components/switch/meta.ts +3 -1
  1709. package/src/components/switch/switch.tsx +69 -4
  1710. package/src/components/switchboard-card/index.ts +6 -0
  1711. package/src/components/switchboard-card/meta.ts +18 -0
  1712. package/src/components/switchboard-card/switchboard-card.tsx +312 -0
  1713. package/src/components/table/table.tsx +3 -3
  1714. package/src/components/tabs/index.ts +1 -0
  1715. package/src/components/tabs/meta.ts +3 -1
  1716. package/src/components/tabs/tabs.tsx +144 -4
  1717. package/src/components/tags-input/meta.ts +2 -1
  1718. package/src/components/tags-input/tags-input.tsx +123 -5
  1719. package/src/components/text-effect/index.ts +10 -0
  1720. package/src/components/text-effect/meta.ts +18 -0
  1721. package/src/components/text-effect/text-effect-presets.ts +305 -0
  1722. package/src/components/text-effect/text-effect.tsx +454 -0
  1723. package/src/components/text-loader/index.ts +7 -0
  1724. package/src/components/text-loader/meta.ts +17 -0
  1725. package/src/components/text-loader/text-loader.tsx +585 -0
  1726. package/src/components/text-swap/index.ts +9 -0
  1727. package/src/components/text-swap/meta.ts +20 -0
  1728. package/src/components/text-swap/text-rotate.tsx +76 -0
  1729. package/src/components/text-swap/text-swap.tsx +414 -0
  1730. package/src/components/textarea/index.ts +1 -0
  1731. package/src/components/textarea/meta.ts +21 -0
  1732. package/src/components/textarea/textarea.tsx +210 -0
  1733. package/src/components/tick-progress/index.ts +1 -0
  1734. package/src/components/tick-progress/meta.ts +19 -0
  1735. package/src/components/tick-progress/tick-progress.tsx +253 -0
  1736. package/src/components/tilt-card/index.ts +6 -0
  1737. package/src/components/tilt-card/meta.ts +18 -0
  1738. package/src/components/tilt-card/tilt-card.tsx +256 -0
  1739. package/src/components/time-range-picker/time-range-picker.tsx +3 -3
  1740. package/src/components/time-stack/index.ts +6 -0
  1741. package/src/components/time-stack/meta.ts +19 -0
  1742. package/src/components/time-stack/time-stack.tsx +385 -0
  1743. package/src/components/toast/meta.ts +2 -1
  1744. package/src/components/toast/toast.tsx +81 -15
  1745. package/src/components/todo-tower/index.ts +1 -0
  1746. package/src/components/todo-tower/meta.ts +18 -0
  1747. package/src/components/todo-tower/todo-tower.tsx +429 -0
  1748. package/src/components/tooltip/meta.ts +1 -1
  1749. package/src/components/tooltip/tooltip.tsx +39 -15
  1750. package/src/components/tweet-card/index.ts +11 -0
  1751. package/src/components/tweet-card/meta.ts +19 -0
  1752. package/src/components/tweet-card/tweet-card.tsx +372 -0
  1753. package/src/components/typewriter-text/index.ts +6 -0
  1754. package/src/components/typewriter-text/meta.ts +17 -0
  1755. package/src/components/typewriter-text/typewriter-text.tsx +214 -0
  1756. package/src/components/uptime-matrix/index.ts +11 -0
  1757. package/src/components/uptime-matrix/meta.ts +20 -0
  1758. package/src/components/uptime-matrix/uptime-matrix.tsx +443 -0
  1759. package/src/index.ts +114 -0
  1760. package/src/lib/styles.ts +16 -0
  1761. package/src/registry/blocks.ts +86 -0
  1762. package/src/registry/components.ts +228 -0
  1763. package/src/registry/schema.ts +9 -0
  1764. package/src/blocks/admin-users/admin-users.tsx +0 -251
  1765. package/src/blocks/admin-users/index.ts +0 -1
  1766. package/src/blocks/admin-users/meta.ts +0 -27
  1767. package/src/blocks/ai-chat/ai-chat.tsx +0 -280
  1768. package/src/blocks/ai-chat/index.ts +0 -7
  1769. package/src/blocks/ai-chat/meta.ts +0 -32
  1770. package/src/blocks/dashboard/dashboard.tsx +0 -192
  1771. package/src/blocks/dashboard/index.ts +0 -6
  1772. package/src/blocks/dashboard/meta.ts +0 -18
  1773. package/src/blocks/forgot-password/forgot-password.tsx +0 -158
  1774. package/src/blocks/forgot-password/index.ts +0 -1
  1775. package/src/blocks/forgot-password/meta.ts +0 -18
  1776. package/src/blocks/login/index.ts +0 -1
  1777. package/src/blocks/login/login.tsx +0 -178
  1778. package/src/blocks/login/meta.ts +0 -18
  1779. package/src/blocks/pricing/index.ts +0 -1
  1780. package/src/blocks/pricing/meta.ts +0 -18
  1781. package/src/blocks/pricing/pricing.tsx +0 -176
  1782. package/src/blocks/settings/index.ts +0 -6
  1783. package/src/blocks/settings/meta.ts +0 -29
  1784. package/src/blocks/settings/settings.tsx +0 -317
  1785. package/src/blocks/signup/index.ts +0 -1
  1786. package/src/blocks/signup/meta.ts +0 -18
  1787. package/src/blocks/signup/signup.tsx +0 -240
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { cn } from "../../lib/utils.js";
3
- import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
5
5
  //#region src/components/ai-conversation/ai-conversation.tsx
6
6
  const ConversationContext = createContext(null);
@@ -9,6 +9,18 @@ function useConversation(component) {
9
9
  if (!context) throw new Error(`${component} must be rendered inside <Conversation>.`);
10
10
  return context;
11
11
  }
12
+ /**
13
+ * Resolves `"smooth"` to `"auto"` for readers who asked for less motion.
14
+ *
15
+ * The theme's `scroll-behavior: auto !important` only governs the CSS default:
16
+ * an explicit `behavior: "smooth"` passed to `scrollTo` still animates, so the
17
+ * preference has to be honoured here.
18
+ */
19
+ function resolveBehavior(behavior) {
20
+ if (behavior !== "smooth") return behavior;
21
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return behavior;
22
+ return window.matchMedia("(prefers-reduced-motion: reduce)").matches ? "auto" : behavior;
23
+ }
12
24
  /** How close to the bottom still counts as "at the bottom", in pixels. */
13
25
  const BOTTOM_THRESHOLD = 32;
14
26
  function Conversation({ className, autoScroll = true, children, ...props }) {
@@ -17,9 +29,13 @@ function Conversation({ className, autoScroll = true, children, ...props }) {
17
29
  const scrollToBottom = useCallback((behavior = "smooth") => {
18
30
  const viewport = viewportRef.current;
19
31
  if (!viewport) return;
32
+ if (typeof viewport.scrollTo !== "function") {
33
+ viewport.scrollTop = viewport.scrollHeight;
34
+ return;
35
+ }
20
36
  viewport.scrollTo({
21
37
  top: viewport.scrollHeight,
22
- behavior
38
+ behavior: resolveBehavior(behavior)
23
39
  });
24
40
  }, []);
25
41
  useEffect(() => {
@@ -82,6 +98,15 @@ function ConversationMessages({ className, ...props }) {
82
98
  ...props
83
99
  });
84
100
  }
101
+ /** Default wording per state. `idle` is empty, so first paint announces nothing. */
102
+ const STATE_LABELS = {
103
+ idle: "",
104
+ listening: "Listening",
105
+ thinking: "Thinking",
106
+ streaming: "Generating response",
107
+ done: "Response complete",
108
+ error: "Response failed"
109
+ };
85
110
  /**
86
111
  * A polite live region for conversation state.
87
112
  *
@@ -89,33 +114,76 @@ function ConversationMessages({ className, ...props }) {
89
114
  * the response *text* here instead is the mistake this component exists to
90
115
  * prevent.
91
116
  */
92
- function ConversationStatus({ className, children, ...props }) {
117
+ function ConversationStatus({ className, children, state, stateLabels, ...props }) {
118
+ const worded = state === void 0 ? void 0 : stateLabels?.[state] ?? STATE_LABELS[state];
93
119
  return /* @__PURE__ */ jsx("div", {
94
120
  "data-slot": "conversation-status",
95
121
  role: "status",
96
122
  "aria-live": "polite",
97
123
  className: cn("px-4 text-xs text-muted-foreground", className),
98
124
  ...props,
99
- children
125
+ children: children ?? worded
100
126
  });
101
127
  }
128
+ const PREFIX = "dowel-ai-conversation";
129
+ const STYLES = `
130
+ @keyframes ${PREFIX}-pill-in{from{opacity:0;translate:0 8px;scale:.96}}
131
+ @keyframes ${PREFIX}-pill-out{to{opacity:0;translate:0 8px;scale:.96}}
132
+ [data-slot=conversation-scroll-button][data-state=open]{animation:${PREFIX}-pill-in calc(250ms * var(--motion-scale,1)) var(--ease-out-quint) both}
133
+ [data-slot=conversation-scroll-button][data-state=closed]{animation:${PREFIX}-pill-out calc(130ms * var(--motion-scale,1)) var(--ease-in-quint) both;pointer-events:none}
134
+ `;
135
+ /** Unmounts a closing pill even if its exit animation never reports ending. */
136
+ const EXIT_FALLBACK_MS = 400;
102
137
  /**
103
138
  * Returns the reader to the newest message.
104
139
  *
105
140
  * Rendered only when they have scrolled away, and removed from the DOM
106
141
  * otherwise so it is never a focus stop pointing at where the reader already
107
- * is.
142
+ * is. While it plays its exit it is `inert` and `aria-hidden`: already gone as
143
+ * far as focus, clicks and assistive technology are concerned.
108
144
  */
109
- function ConversationScrollButton({ className, label = "Jump to latest", ...props }) {
145
+ function ConversationScrollButton({ className, label = "Jump to latest", ref, ...props }) {
110
146
  const { atBottom, scrollToBottom } = useConversation("ConversationScrollButton");
111
- if (atBottom) return null;
112
- return /* @__PURE__ */ jsxs("button", {
147
+ const [phase, setPhase] = useState(atBottom ? "hidden" : "open");
148
+ const buttonRef = useRef(null);
149
+ if (!atBottom && phase !== "open") setPhase("open");
150
+ if (atBottom && phase === "open") setPhase("closing");
151
+ useEffect(() => {
152
+ if (phase !== "closing") return;
153
+ const button = buttonRef.current;
154
+ const finish = (event) => {
155
+ if (event && event.target !== button) return;
156
+ setPhase("hidden");
157
+ };
158
+ const timer = setTimeout(finish, EXIT_FALLBACK_MS);
159
+ button?.addEventListener("animationend", finish);
160
+ return () => {
161
+ clearTimeout(timer);
162
+ button?.removeEventListener("animationend", finish);
163
+ };
164
+ }, [phase]);
165
+ if (phase === "hidden") return null;
166
+ const closing = phase === "closing";
167
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("style", {
168
+ href: PREFIX,
169
+ precedence: "dowel",
170
+ children: STYLES
171
+ }), /* @__PURE__ */ jsxs("button", {
113
172
  type: "button",
173
+ ref: (node) => {
174
+ buttonRef.current = node;
175
+ if (typeof ref === "function") return ref(node);
176
+ if (ref) ref.current = node;
177
+ },
114
178
  "data-slot": "conversation-scroll-button",
179
+ "data-state": closing ? "closed" : "open",
180
+ inert: closing || void 0,
181
+ "aria-hidden": closing || void 0,
182
+ tabIndex: closing ? -1 : void 0,
115
183
  onClick: () => {
116
184
  scrollToBottom();
117
185
  },
118
- className: cn("absolute bottom-3 left-1/2 z-[var(--z-sticky)] flex -translate-x-1/2 items-center gap-1.5", "rounded-full border border-border bg-popover px-3 py-1.5 text-xs font-medium shadow-md", "transition-colors duration-[var(--duration-fast)] hover:bg-accent", "outline-none focus-visible:ring-2 focus-visible:ring-ring/55", className),
186
+ className: cn("absolute inset-x-0 bottom-3 z-[var(--z-sticky)] mx-auto flex w-fit items-center gap-1.5", "rounded-full border border-border bg-popover px-3 py-1.5 text-xs font-medium shadow-md", "transition-colors duration-[var(--duration-fast)] hover:bg-accent", "outline-none focus-visible:ring-2 focus-visible:ring-ring/55", className),
119
187
  ...props,
120
188
  children: [/* @__PURE__ */ jsx("svg", {
121
189
  viewBox: "0 0 24 24",
@@ -130,7 +198,7 @@ function ConversationScrollButton({ className, label = "Jump to latest", ...prop
130
198
  strokeLinejoin: "round"
131
199
  })
132
200
  }), label]
133
- });
201
+ })] });
134
202
  }
135
203
  //#endregion
136
204
  export { Conversation, ConversationMessages, ConversationScrollButton, ConversationStatus };
@@ -1 +1 @@
1
- {"version":3,"file":"ai-conversation.js","names":[],"sources":["../../../src/components/ai-conversation/ai-conversation.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type ReactNode,\n} from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\n/**\n * The scrolling container for a conversation.\n *\n * Two problems here are easy to get wrong and unpleasant to live with.\n *\n * **Scrolling.** A chat should follow new content, but only while the reader is\n * already at the bottom. The moment someone scrolls up to re-read something,\n * yanking them back down is worse than not following at all — so this tracks\n * whether they are pinned to the bottom and stops following as soon as they are\n * not, offering an explicit way back instead.\n *\n * **Announcements.** The obvious thing is to make the transcript a live region.\n * Do not: a live region that updates on every token produces a stream of\n * interruptions that is unusable with a screen reader, and it is the single\n * most common accessibility failure in chat interfaces. The transcript here is\n * an ordinary list, navigable at the reader's pace, and a *separate* status\n * region announces state — \"generating\", \"response complete\" — never content.\n */\n\ninterface ConversationContextValue {\n viewportRef: React.RefObject<HTMLDivElement | null>;\n atBottom: boolean;\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n}\n\nconst ConversationContext = createContext<ConversationContextValue | null>(null);\n\nfunction useConversation(component: string): ConversationContextValue {\n const context = useContext(ConversationContext);\n if (!context) {\n throw new Error(`${component} must be rendered inside <Conversation>.`);\n }\n return context;\n}\n\n/** How close to the bottom still counts as \"at the bottom\", in pixels. */\nconst BOTTOM_THRESHOLD = 32;\n\nexport interface ConversationProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Follow new content while the reader is at the bottom.\n *\n * Turning this off never scrolls automatically; it does not pin the view.\n */\n autoScroll?: boolean;\n}\n\nexport function Conversation({\n className,\n autoScroll = true,\n children,\n ...props\n}: ConversationProps) {\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const [atBottom, setAtBottom] = useState(true);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n viewport.scrollTo({ top: viewport.scrollHeight, behavior });\n }, []);\n\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n\n function handleScroll() {\n if (!viewport) return;\n const distance = viewport.scrollHeight - viewport.scrollTop - viewport.clientHeight;\n setAtBottom(distance <= BOTTOM_THRESHOLD);\n }\n\n handleScroll();\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n viewport.removeEventListener(\"scroll\", handleScroll);\n };\n }, []);\n\n // Follows content as it grows, but only while the reader is pinned to the\n // bottom. Layout effect so the jump happens before paint rather than as a\n // visible lurch.\n useLayoutEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport || !autoScroll) return;\n\n const observer = new ResizeObserver(() => {\n if (atBottom) viewport.scrollTop = viewport.scrollHeight;\n });\n\n for (const child of viewport.children) observer.observe(child);\n return () => {\n observer.disconnect();\n };\n }, [autoScroll, atBottom]);\n\n const context = useMemo<ConversationContextValue>(\n () => ({ viewportRef, atBottom, scrollToBottom }),\n [atBottom, scrollToBottom],\n );\n\n return (\n <ConversationContext.Provider value={context}>\n <div\n data-slot=\"conversation\"\n data-at-bottom={atBottom || undefined}\n className={cn(\"relative flex min-h-0 flex-1 flex-col\", className)}\n {...props}\n >\n <div\n ref={viewportRef}\n data-slot=\"conversation-viewport\"\n className=\"flex-1 overflow-y-auto overscroll-contain\"\n >\n {children}\n </div>\n </div>\n </ConversationContext.Provider>\n );\n}\n\n/**\n * The transcript.\n *\n * An ordered list, deliberately not a live region — see the note on\n * `Conversation`. Order is meaning here, and list semantics give a screen\n * reader user position and count (\"3 of 12\") as they move through it.\n */\nexport function ConversationMessages({ className, ...props }: ComponentPropsWithRef<\"ol\">) {\n return (\n <ol\n data-slot=\"conversation-messages\"\n className={cn(\"flex flex-col gap-6 p-4\", className)}\n {...props}\n />\n );\n}\n\nexport interface ConversationStatusProps extends ComponentPropsWithRef<\"div\"> {\n /** Announced politely when it changes. Keep it short: state, never content. */\n children?: ReactNode;\n}\n\n/**\n * A polite live region for conversation state.\n *\n * This is where \"generating response\" and \"response complete\" belong. Putting\n * the response *text* here instead is the mistake this component exists to\n * prevent.\n */\nexport function ConversationStatus({ className, children, ...props }: ConversationStatusProps) {\n return (\n <div\n data-slot=\"conversation-status\"\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\"px-4 text-xs text-muted-foreground\", className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport interface ConversationScrollButtonProps extends ComponentPropsWithRef<\"button\"> {\n label?: string;\n}\n\n/**\n * Returns the reader to the newest message.\n *\n * Rendered only when they have scrolled away, and removed from the DOM\n * otherwise so it is never a focus stop pointing at where the reader already\n * is.\n */\nexport function ConversationScrollButton({\n className,\n label = \"Jump to latest\",\n ...props\n}: ConversationScrollButtonProps) {\n const { atBottom, scrollToBottom } = useConversation(\"ConversationScrollButton\");\n if (atBottom) return null;\n\n return (\n <button\n type=\"button\"\n data-slot=\"conversation-scroll-button\"\n onClick={() => {\n scrollToBottom();\n }}\n className={cn(\n \"absolute bottom-3 left-1/2 z-[var(--z-sticky)] flex -translate-x-1/2 items-center gap-1.5\",\n \"rounded-full border border-border bg-popover px-3 py-1.5 text-xs font-medium shadow-md\",\n \"transition-colors duration-[var(--duration-fast)] hover:bg-accent\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-ring/55\",\n className,\n )}\n {...props}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" className=\"size-3.5\">\n <path\n d=\"M12 5v14m0 0-6-6m6 6 6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n {label}\n </button>\n );\n}\n"],"mappings":";;;;;AA0CA,MAAM,sBAAsB,cAA+C,IAAI;AAE/E,SAAS,gBAAgB,WAA6C;CACpE,MAAM,UAAU,WAAW,mBAAmB;CAC9C,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,GAAG,UAAU,yCAAyC;CAExE,OAAO;AACT;;AAGA,MAAM,mBAAmB;AAWzB,SAAgB,aAAa,EAC3B,WACA,aAAa,MACb,UACA,GAAG,SACiB;CACpB,MAAM,cAAc,OAA8B,IAAI;CACtD,MAAM,CAAC,UAAU,eAAe,SAAS,IAAI;CAE7C,MAAM,iBAAiB,aAAa,WAA2B,aAAa;EAC1E,MAAM,WAAW,YAAY;EAC7B,IAAI,CAAC,UAAU;EACf,SAAS,SAAS;GAAE,KAAK,SAAS;GAAc;EAAS,CAAC;CAC5D,GAAG,CAAC,CAAC;CAEL,gBAAgB;EACd,MAAM,WAAW,YAAY;EAC7B,IAAI,CAAC,UAAU;EAEf,SAAS,eAAe;GACtB,IAAI,CAAC,UAAU;GACf,MAAM,WAAW,SAAS,eAAe,SAAS,YAAY,SAAS;GACvE,YAAY,YAAY,gBAAgB;EAC1C;EAEA,aAAa;EACb,SAAS,iBAAiB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;EACnE,aAAa;GACX,SAAS,oBAAoB,UAAU,YAAY;EACrD;CACF,GAAG,CAAC,CAAC;CAKL,sBAAsB;EACpB,MAAM,WAAW,YAAY;EAC7B,IAAI,CAAC,YAAY,CAAC,YAAY;EAE9B,MAAM,WAAW,IAAI,qBAAqB;GACxC,IAAI,UAAU,SAAS,YAAY,SAAS;EAC9C,CAAC;EAED,KAAK,MAAM,SAAS,SAAS,UAAU,SAAS,QAAQ,KAAK;EAC7D,aAAa;GACX,SAAS,WAAW;EACtB;CACF,GAAG,CAAC,YAAY,QAAQ,CAAC;CAEzB,MAAM,UAAU,eACP;EAAE;EAAa;EAAU;CAAe,IAC/C,CAAC,UAAU,cAAc,CAC3B;CAEA,OACE,oBAAC,oBAAoB,UAArB;EAA8B,OAAO;EACnC,UAAA,oBAAC,OAAD;GACE,aAAU;GACV,kBAAgB,YAAY,KAAA;GAC5B,WAAW,GAAG,yCAAyC,SAAS;GAChE,GAAI;GAEJ,UAAA,oBAAC,OAAD;IACE,KAAK;IACL,aAAU;IACV,WAAU;IAET;GACE,CAAA;EACF,CAAA;CACuB,CAAA;AAElC;;;;;;;;AASA,SAAgB,qBAAqB,EAAE,WAAW,GAAG,SAAsC;CACzF,OACE,oBAAC,MAAD;EACE,aAAU;EACV,WAAW,GAAG,2BAA2B,SAAS;EAClD,GAAI;CACL,CAAA;AAEL;;;;;;;;AAcA,SAAgB,mBAAmB,EAAE,WAAW,UAAU,GAAG,SAAkC;CAC7F,OACE,oBAAC,OAAD;EACE,aAAU;EACV,MAAK;EACL,aAAU;EACV,WAAW,GAAG,sCAAsC,SAAS;EAC7D,GAAI;EAEH;CACE,CAAA;AAET;;;;;;;;AAaA,SAAgB,yBAAyB,EACvC,WACA,QAAQ,kBACR,GAAG,SAC6B;CAChC,MAAM,EAAE,UAAU,mBAAmB,gBAAgB,0BAA0B;CAC/E,IAAI,UAAU,OAAO;CAErB,OACE,qBAAC,UAAD;EACE,MAAK;EACL,aAAU;EACV,eAAe;GACb,eAAe;EACjB;EACA,WAAW,GACT,6FACA,0FACA,qEACA,gEACA,SACF;EACA,GAAI;EAbN,UAAA,CAeE,oBAAC,OAAD;GAAK,SAAQ;GAAY,MAAK;GAAO,eAAY;GAAO,WAAU;GAChE,UAAA,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;GAChB,CAAA;EACE,CAAA,GACJ,KACK;;AAEZ"}
1
+ {"version":3,"file":"ai-conversation.js","names":[],"sources":["../../../src/components/ai-conversation/ai-conversation.tsx"],"sourcesContent":["\"use client\";\n\n// Motion from SmoothUI AI Conversation (MIT, © 2024 Eduardo Calvo). See THIRD_PARTY_NOTICES.md.\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type ReactNode,\n} from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\n/**\n * The scrolling container for a conversation.\n *\n * Two problems here are easy to get wrong and unpleasant to live with.\n *\n * **Scrolling.** A chat should follow new content, but only while the reader is\n * already at the bottom. The moment someone scrolls up to re-read something,\n * yanking them back down is worse than not following at all — so this tracks\n * whether they are pinned to the bottom and stops following as soon as they are\n * not, offering an explicit way back instead.\n *\n * **Announcements.** The obvious thing is to make the transcript a live region.\n * Do not: a live region that updates on every token produces a stream of\n * interruptions that is unusable with a screen reader, and it is the single\n * most common accessibility failure in chat interfaces. The transcript here is\n * an ordinary list, navigable at the reader's pace, and a *separate* status\n * region announces state — \"generating\", \"response complete\" — never content.\n */\n\ninterface ConversationContextValue {\n viewportRef: React.RefObject<HTMLDivElement | null>;\n atBottom: boolean;\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n}\n\nconst ConversationContext = createContext<ConversationContextValue | null>(null);\n\nfunction useConversation(component: string): ConversationContextValue {\n const context = useContext(ConversationContext);\n if (!context) {\n throw new Error(`${component} must be rendered inside <Conversation>.`);\n }\n return context;\n}\n\n/**\n * Resolves `\"smooth\"` to `\"auto\"` for readers who asked for less motion.\n *\n * The theme's `scroll-behavior: auto !important` only governs the CSS default:\n * an explicit `behavior: \"smooth\"` passed to `scrollTo` still animates, so the\n * preference has to be honoured here.\n */\nfunction resolveBehavior(behavior: ScrollBehavior): ScrollBehavior {\n if (behavior !== \"smooth\") return behavior;\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return behavior;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches ? \"auto\" : behavior;\n}\n\n/** How close to the bottom still counts as \"at the bottom\", in pixels. */\nconst BOTTOM_THRESHOLD = 32;\n\nexport interface ConversationProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Follow new content while the reader is at the bottom.\n *\n * Turning this off never scrolls automatically; it does not pin the view.\n */\n autoScroll?: boolean;\n}\n\nexport function Conversation({\n className,\n autoScroll = true,\n children,\n ...props\n}: ConversationProps) {\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const [atBottom, setAtBottom] = useState(true);\n\n const scrollToBottom = useCallback((behavior: ScrollBehavior = \"smooth\") => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n // jsdom and some embedded webviews have no Element.scrollTo.\n if (typeof viewport.scrollTo !== \"function\") {\n viewport.scrollTop = viewport.scrollHeight;\n return;\n }\n viewport.scrollTo({ top: viewport.scrollHeight, behavior: resolveBehavior(behavior) });\n }, []);\n\n useEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n\n function handleScroll() {\n if (!viewport) return;\n const distance = viewport.scrollHeight - viewport.scrollTop - viewport.clientHeight;\n setAtBottom(distance <= BOTTOM_THRESHOLD);\n }\n\n handleScroll();\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n viewport.removeEventListener(\"scroll\", handleScroll);\n };\n }, []);\n\n // Follows content as it grows, but only while the reader is pinned to the\n // bottom. Layout effect so the jump happens before paint rather than as a\n // visible lurch.\n useLayoutEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport || !autoScroll) return;\n\n const observer = new ResizeObserver(() => {\n if (atBottom) viewport.scrollTop = viewport.scrollHeight;\n });\n\n for (const child of viewport.children) observer.observe(child);\n return () => {\n observer.disconnect();\n };\n }, [autoScroll, atBottom]);\n\n const context = useMemo<ConversationContextValue>(\n () => ({ viewportRef, atBottom, scrollToBottom }),\n [atBottom, scrollToBottom],\n );\n\n return (\n <ConversationContext.Provider value={context}>\n <div\n data-slot=\"conversation\"\n data-at-bottom={atBottom || undefined}\n className={cn(\"relative flex min-h-0 flex-1 flex-col\", className)}\n {...props}\n >\n <div\n ref={viewportRef}\n data-slot=\"conversation-viewport\"\n className=\"flex-1 overflow-y-auto overscroll-contain\"\n >\n {children}\n </div>\n </div>\n </ConversationContext.Provider>\n );\n}\n\n/**\n * The transcript.\n *\n * An ordered list, deliberately not a live region — see the note on\n * `Conversation`. Order is meaning here, and list semantics give a screen\n * reader user position and count (\"3 of 12\") as they move through it.\n */\nexport function ConversationMessages({ className, ...props }: ComponentPropsWithRef<\"ol\">) {\n return (\n <ol\n data-slot=\"conversation-messages\"\n className={cn(\"flex flex-col gap-6 p-4\", className)}\n {...props}\n />\n );\n}\n\n/**\n * The conversation's state, in SmoothUI's AIState vocabulary.\n *\n * Named for this component rather than `AIState` so it can never collide with\n * a shared type exported elsewhere in the library.\n */\nexport type ConversationState =\n \"idle\" | \"listening\" | \"thinking\" | \"streaming\" | \"done\" | \"error\";\n\n/** Default wording per state. `idle` is empty, so first paint announces nothing. */\nconst STATE_LABELS: Record<ConversationState, string> = {\n idle: \"\",\n listening: \"Listening\",\n thinking: \"Thinking\",\n streaming: \"Generating response\",\n done: \"Response complete\",\n error: \"Response failed\",\n};\n\nexport interface ConversationStatusProps extends ComponentPropsWithRef<\"div\"> {\n /** Announced politely when it changes. Keep it short: state, never content. */\n children?: ReactNode;\n /** Renders default wording for a state. `children` wins when both are given. */\n state?: ConversationState;\n /** Overrides the default wording per state. */\n stateLabels?: Partial<Record<ConversationState, string>>;\n}\n\n/**\n * A polite live region for conversation state.\n *\n * This is where \"generating response\" and \"response complete\" belong. Putting\n * the response *text* here instead is the mistake this component exists to\n * prevent.\n */\nexport function ConversationStatus({\n className,\n children,\n state,\n stateLabels,\n ...props\n}: ConversationStatusProps) {\n // Only the text changes with `state`: the region itself stays mounted from\n // first paint, because a live region announces nothing until it exists.\n const worded =\n state === undefined ? undefined : (stateLabels?.[state] ?? STATE_LABELS[state]);\n return (\n <div\n data-slot=\"conversation-status\"\n role=\"status\"\n aria-live=\"polite\"\n className={cn(\"px-4 text-xs text-muted-foreground\", className)}\n {...props}\n >\n {children ?? worded}\n </div>\n );\n}\n\nexport interface ConversationScrollButtonProps extends ComponentPropsWithRef<\"button\"> {\n label?: string;\n}\n\nconst PREFIX = \"dowel-ai-conversation\";\n\n/* The pill rises in and sinks out. Exits are one step faster than entrances\n * (ADR 0004), and both run through --motion-scale, so under reduced motion the\n * exit still ends — which is what unmounts the button. */\nconst STYLES = `\n@keyframes ${PREFIX}-pill-in{from{opacity:0;translate:0 8px;scale:.96}}\n@keyframes ${PREFIX}-pill-out{to{opacity:0;translate:0 8px;scale:.96}}\n[data-slot=conversation-scroll-button][data-state=open]{animation:${PREFIX}-pill-in calc(250ms * var(--motion-scale,1)) var(--ease-out-quint) both}\n[data-slot=conversation-scroll-button][data-state=closed]{animation:${PREFIX}-pill-out calc(130ms * var(--motion-scale,1)) var(--ease-in-quint) both;pointer-events:none}\n`;\n\n/** Unmounts a closing pill even if its exit animation never reports ending. */\nconst EXIT_FALLBACK_MS = 400;\n\ntype PillPhase = \"hidden\" | \"open\" | \"closing\";\n\n/**\n * Returns the reader to the newest message.\n *\n * Rendered only when they have scrolled away, and removed from the DOM\n * otherwise so it is never a focus stop pointing at where the reader already\n * is. While it plays its exit it is `inert` and `aria-hidden`: already gone as\n * far as focus, clicks and assistive technology are concerned.\n */\nexport function ConversationScrollButton({\n className,\n label = \"Jump to latest\",\n ref,\n ...props\n}: ConversationScrollButtonProps) {\n const { atBottom, scrollToBottom } = useConversation(\"ConversationScrollButton\");\n const [phase, setPhase] = useState<PillPhase>(atBottom ? \"hidden\" : \"open\");\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n // Adjusted during render rather than in an effect, so the pill never paints\n // a frame in the wrong state.\n if (!atBottom && phase !== \"open\") setPhase(\"open\");\n if (atBottom && phase === \"open\") setPhase(\"closing\");\n\n // A native listener rather than onAnimationEnd: React picks a vendor-prefixed\n // event name wherever AnimationEvent is missing, and would never hear it.\n useEffect(() => {\n if (phase !== \"closing\") return;\n const button = buttonRef.current;\n const finish = (event?: Event) => {\n if (event && event.target !== button) return;\n setPhase(\"hidden\");\n };\n const timer = setTimeout(finish, EXIT_FALLBACK_MS);\n button?.addEventListener(\"animationend\", finish);\n return () => {\n clearTimeout(timer);\n button?.removeEventListener(\"animationend\", finish);\n };\n }, [phase]);\n\n if (phase === \"hidden\") return null;\n const closing = phase === \"closing\";\n\n return (\n <>\n <style href={PREFIX} precedence=\"dowel\">\n {STYLES}\n </style>\n <button\n type=\"button\"\n ref={(node) => {\n buttonRef.current = node;\n if (typeof ref === \"function\") return ref(node);\n if (ref) ref.current = node;\n }}\n data-slot=\"conversation-scroll-button\"\n data-state={closing ? \"closed\" : \"open\"}\n inert={closing || undefined}\n aria-hidden={closing || undefined}\n tabIndex={closing ? -1 : undefined}\n onClick={() => {\n scrollToBottom();\n }}\n className={cn(\n \"absolute inset-x-0 bottom-3 z-[var(--z-sticky)] mx-auto flex w-fit items-center gap-1.5\",\n \"rounded-full border border-border bg-popover px-3 py-1.5 text-xs font-medium shadow-md\",\n \"transition-colors duration-[var(--duration-fast)] hover:bg-accent\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-ring/55\",\n className,\n )}\n {...props}\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" className=\"size-3.5\">\n <path\n d=\"M12 5v14m0 0-6-6m6 6 6-6\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n {label}\n </button>\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { Conversation, ConversationMessages, ConversationProps, ConversationScrollButton, ConversationScrollButtonProps, ConversationStatus, ConversationStatusProps } from "./ai-conversation.js";
2
- export { Conversation, ConversationMessages, type ConversationProps, ConversationScrollButton, type ConversationScrollButtonProps, ConversationStatus, type ConversationStatusProps };
1
+ import { Conversation, ConversationMessages, ConversationProps, ConversationScrollButton, ConversationScrollButtonProps, ConversationState, ConversationStatus, ConversationStatusProps } from "./ai-conversation.js";
2
+ export { Conversation, ConversationMessages, type ConversationProps, ConversationScrollButton, type ConversationScrollButtonProps, type ConversationState, ConversationStatus, type ConversationStatusProps };
@@ -227,7 +227,7 @@ function ReviewField({ field, source, decision, streaming, lowConfidenceBelow, a
227
227
  }),
228
228
  sourced ? /* @__PURE__ */ jsx(FieldButton, {
229
229
  "aria-label": `Show in source — ${field.label}`,
230
- className: "ml-auto",
230
+ className: "ms-auto",
231
231
  onClick: onActivate,
232
232
  children: "Show in source"
233
233
  }) : null
@@ -1 +1 @@
1
- {"version":3,"file":"ai-extraction-review.js","names":[],"sources":["../../../src/components/ai-extraction-review/ai-extraction-review.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\n\nimport { disabledStyles, focusRing } from \"@/lib/styles\";\nimport { cn } from \"@/lib/utils\";\n\nimport {\n evidenceOf,\n isSourced,\n segmentSource,\n summarizeReview,\n type ExtractionField,\n type FieldDecision,\n type SourceRun,\n} from \"./extraction-model\";\n\n/**\n * The check after extraction: the document on one side, what the model read\n * out of it on the other, and a decision about every field.\n *\n * Every extraction demo shows the filled object and stops. The products that\n * run extraction for a living — invoice capture, KYC onboarding, claims intake —\n * all have this screen, each built from scratch, because a value that cannot\n * be checked can only be trusted, and nobody who is paying an invoice trusts a\n * model that far. No component library ships it.\n *\n * The link is the component. Each field carries where in the source it was\n * read from, quoted in text under the value as well as highlighted in the\n * document, so a reviewer who cannot see the highlight still has the evidence.\n * And a value with no evidence is said outright — \"the model supplied this\n * without evidence\" — because that is the case a review exists to catch, and\n * the one every filled-object view renders identically to a good value.\n *\n * Evidence is a text offset, not a bounding box. A language model reads text,\n * and a text layer with offsets is what every OCR pipeline already yields.\n * Boxes over a rendered page need page rendering, zoom and geometry, and are a\n * different component; this one does not pretend at them.\n *\n * Decisions are controlled and the component writes nothing. It reports that\n * a field was accepted as proposed, corrected from what was proposed, or\n * rejected — a richer record than a form's submitted values, and the one an\n * audit later needs — and leaves what to do with it to the application.\n */\n\nexport interface ExtractionReviewProps extends Omit<\n ComponentPropsWithRef<\"section\">,\n \"children\"\n> {\n /** What the model read. Every span indexes into it. */\n source: string;\n /** Names the source — \"Invoice 4471.pdf, page 1\". */\n sourceLabel?: string;\n /** What is being reviewed, as the heading. */\n heading: string;\n fields: ExtractionField[];\n /** Per-field decisions, keyed by field name. Controlled. */\n decisions?: Record<string, FieldDecision>;\n /** Omit to render the review as a record rather than something to operate. */\n onDecision?: (name: string, decision: FieldDecision) => void;\n /** True while fields are still arriving. Missing values wait instead of reading as not found. */\n streaming?: boolean;\n /** Confidence below this is called low, in words. */\n lowConfidenceBelow?: number;\n children?: ReactNode;\n}\n\nexport function ExtractionReview({\n className,\n source,\n sourceLabel = \"Source\",\n heading,\n fields,\n decisions = {},\n onDecision,\n streaming = false,\n lowConfidenceBelow = 0.7,\n children,\n ...props\n}: ExtractionReviewProps) {\n const headingId = useId();\n const [activeField, setActiveField] = useState<string | null>(null);\n\n const runs = useMemo(() => segmentSource(source, fields), [source, fields]);\n const summary = useMemo(\n () => summarizeReview(source, fields, decisions),\n [source, fields, decisions],\n );\n\n return (\n <section\n data-slot=\"extraction-review\"\n data-complete={summary.complete || undefined}\n aria-labelledby={headingId}\n aria-busy={streaming || undefined}\n className={cn(\"flex flex-col gap-3\", className)}\n {...props}\n >\n <div className=\"flex flex-wrap items-baseline justify-between gap-2\">\n <h3 id={headingId} className=\"text-sm font-medium\">\n {heading}\n </h3>\n {/* Live from the start and short, so each decision is followed by\n where the review stands rather than by silence. Evidence gaps are\n counted here too: they are the reason to read carefully, and worth\n knowing before starting rather than discovering on field six. */}\n <p\n data-slot=\"extraction-review-summary\"\n aria-live=\"polite\"\n className=\"text-xs text-muted-foreground\"\n >\n {streaming\n ? \"Fields are still arriving\"\n : `${String(summary.reviewed)} of ${String(summary.total)} reviewed`}\n {summary.unsourced.length > 0\n ? ` · ${String(summary.unsourced.length)} without evidence`\n : null}\n </p>\n </div>\n\n {children}\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <SourcePanel\n label={sourceLabel}\n runs={runs}\n active={activeField}\n decisions={decisions}\n />\n\n <ol data-slot=\"extraction-fields\" className=\"m-0 flex list-none flex-col gap-3 p-0\">\n {fields.map((field) => (\n <ReviewField\n key={field.name}\n field={field}\n source={source}\n decision={decisions[field.name]}\n streaming={streaming}\n lowConfidenceBelow={lowConfidenceBelow}\n active={activeField === field.name}\n onActivate={() => {\n setActiveField(field.name);\n }}\n onDecision={onDecision}\n />\n ))}\n </ol>\n </div>\n </section>\n );\n}\n\nfunction SourcePanel({\n label,\n runs,\n active,\n decisions,\n}: {\n label: string;\n runs: SourceRun[];\n active: string | null;\n decisions: Record<string, FieldDecision>;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n\n // Bring the active field's evidence into view. Focus stays where it is —\n // in the field — so a keyboard user is shown the source without being\n // moved into it.\n useEffect(() => {\n if (!active || !ref.current) return;\n const mark = ref.current.querySelector(`mark[data-active]`);\n mark?.scrollIntoView({ block: \"nearest\" });\n }, [active]);\n\n return (\n <div\n ref={ref}\n data-slot=\"extraction-source\"\n // A scrolling box has to be focusable to be scrolled by keyboard, and a\n // focusable box needs a name.\n role=\"region\"\n aria-label={label}\n tabIndex={0}\n // Sticks beside the fields on a wide screen, so the evidence for field\n // nine is still in view when the reviewer reaches it.\n className={cn(\n \"max-h-96 overflow-auto rounded-lg border border-border bg-muted/30 p-3 md:sticky md:top-0 md:self-start\",\n focusRing,\n )}\n >\n {runs.length === 0 ? (\n <p className=\"text-xs text-muted-foreground\">No source text.</p>\n ) : (\n <pre className=\"m-0 font-sans text-sm leading-relaxed break-words whitespace-pre-wrap\">\n {runs.map((run, index) =>\n run.fields.length === 0 ? (\n <span key={index}>{run.text}</span>\n ) : (\n // A mark element, so the evidence survives as structure rather\n // than only as a tint. No label is inserted into the text: a\n // document read aloud with field names spliced into it is not\n // the document, and the field already quotes its evidence.\n <mark\n key={index}\n data-fields={run.fields.join(\" \")}\n data-active={active !== null && run.fields.includes(active) ? \"\" : undefined}\n className={cn(\n \"rounded-[2px] text-inherit\",\n run.fields.every((name) => decisions[name]?.kind === \"rejected\")\n ? \"bg-muted line-through decoration-muted-foreground\"\n : \"bg-primary/15\",\n active !== null &&\n run.fields.includes(active) &&\n \"bg-primary/30 ring-1 ring-primary ring-inset\",\n )}\n >\n {run.text}\n </mark>\n ),\n )}\n </pre>\n )}\n </div>\n );\n}\n\n/** Whitespace collapsed and cut short, for quoting evidence under a field. */\nfunction quote(text: string, limit = 80): string {\n const collapsed = text.replace(/\\s+/g, \" \").trim();\n return collapsed.length > limit ? `${collapsed.slice(0, limit - 1)}…` : collapsed;\n}\n\nfunction ReviewField({\n field,\n source,\n decision,\n streaming,\n lowConfidenceBelow,\n active,\n onActivate,\n onDecision,\n}: {\n field: ExtractionField;\n source: string;\n decision?: FieldDecision;\n streaming: boolean;\n lowConfidenceBelow: number;\n active: boolean;\n onActivate: () => void;\n onDecision?: (name: string, decision: FieldDecision) => void;\n}) {\n const inputId = useId();\n const evidenceId = useId();\n const statusId = useId();\n const confidenceId = useId();\n\n // The reviewer's typing, kept apart from the model's value so the decision\n // can say which is which.\n const [draft, setDraft] = useState<string | null>(null);\n\n const proposed = field.value ?? \"\";\n const decided = decision && decision.kind !== \"rejected\" ? decision.value : undefined;\n const current = draft ?? decided ?? proposed;\n const edited = current !== proposed;\n const changedSince = decided !== undefined && current !== decided;\n\n const arriving = streaming && field.value === undefined;\n const sourced = isSourced(source, field);\n const evidence = sourced ? evidenceOf(source, field.span) : \"\";\n const unsourced = !arriving && field.value !== undefined && !sourced;\n\n const accept = () => {\n onDecision?.(\n field.name,\n edited\n ? { kind: \"corrected\", value: current, proposed }\n : { kind: \"accepted\", value: current },\n );\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (event.key !== \"Enter\") return;\n // Enter confirms an IME candidate before it means anything else. Without\n // this, a reviewer typing a Japanese correction accepts a fragment of it.\n if (event.nativeEvent.isComposing) return;\n if (field.multiline && !(event.ctrlKey || event.metaKey)) return;\n event.preventDefault();\n accept();\n };\n\n const status = arriving\n ? \"Arriving\"\n : !decision\n ? \"Not reviewed\"\n : decision.kind === \"rejected\"\n ? \"Rejected\"\n : changedSince\n ? `Changed since it was ${decision.kind}`\n : decision.kind === \"accepted\"\n ? \"Accepted\"\n : decision.proposed\n ? `Corrected from “${quote(decision.proposed, 40)}”`\n : \"Supplied by the reviewer\";\n\n const low = field.confidence !== undefined && field.confidence < lowConfidenceBelow;\n const percent =\n field.confidence === undefined\n ? null\n : new Intl.NumberFormat(undefined, { style: \"percent\", maximumFractionDigits: 0 }).format(\n field.confidence,\n );\n\n const describedBy = [evidenceId, statusId, percent !== null ? confidenceId : null]\n .filter(Boolean)\n .join(\" \");\n\n const controlClass = cn(\n \"w-full rounded-md border border-input bg-background px-2 py-1.5 text-sm\",\n edited && \"border-warning\",\n focusRing,\n );\n\n return (\n <li\n data-slot=\"extraction-field\"\n data-field={field.name}\n data-state={arriving ? \"arriving\" : (decision?.kind ?? \"undecided\")}\n data-active={active || undefined}\n data-unsourced={unsourced || undefined}\n // Focus anywhere in the field — value, either button — is the reviewer\n // looking at it, so the source follows without a separate step.\n onFocus={onActivate}\n className={cn(\n \"flex flex-col gap-1 rounded-lg border p-3\",\n active ? \"border-primary\" : \"border-border\",\n decision?.kind === \"rejected\" && \"bg-muted/40\",\n )}\n >\n <div className=\"flex flex-wrap items-baseline justify-between gap-2\">\n {onDecision && !arriving ? (\n <label htmlFor={inputId} className=\"text-xs font-medium text-muted-foreground\">\n {field.label}\n </label>\n ) : (\n <span className=\"text-xs font-medium text-muted-foreground\">{field.label}</span>\n )}\n {/* Status as a word, outside the label so editing never renames the\n control under a screen reader user. */}\n <span\n id={statusId}\n data-slot=\"extraction-field-status\"\n className={cn(\n \"text-xs\",\n decision?.kind === \"rejected\" ? \"text-destructive\" : \"text-muted-foreground\",\n changedSince && \"text-warning\",\n )}\n >\n {status}\n </span>\n </div>\n\n {arriving ? (\n <span\n aria-hidden=\"true\"\n className=\"block h-8 w-full animate-pulse-soft rounded-md bg-muted\"\n />\n ) : !onDecision ? (\n <p className=\"rounded-md bg-muted px-2 py-1.5 text-sm break-words\">\n {current || <span className=\"text-muted-foreground\">Empty</span>}\n </p>\n ) : field.multiline ? (\n <textarea\n id={inputId}\n rows={3}\n value={current}\n aria-describedby={describedBy}\n onChange={(event) => {\n setDraft(event.target.value);\n }}\n onKeyDown={onKeyDown}\n className={cn(controlClass, \"resize-none\")}\n />\n ) : (\n <input\n id={inputId}\n type=\"text\"\n value={current}\n aria-describedby={describedBy}\n onChange={(event) => {\n setDraft(event.target.value);\n }}\n onKeyDown={onKeyDown}\n className={controlClass}\n />\n )}\n\n {/* The evidence in text. This is the accessible path to the source, and\n for a sighted reviewer it is the comparison itself — \"1 March 2026\"\n beside \"2026-03-01\" is a normalisation, not an error, and only reads\n that way with both in view. */}\n <p\n id={evidenceId}\n data-slot=\"extraction-field-evidence\"\n className={cn(\"text-xs\", unsourced ? \"text-warning\" : \"text-muted-foreground\")}\n >\n {arriving\n ? \"Waiting for the model\"\n : sourced\n ? `In the source: “${quote(evidence)}”`\n : field.value === undefined\n ? \"The model found nothing for this field.\"\n : \"Not in the source — the model supplied this without evidence.\"}\n </p>\n\n {percent !== null ? (\n <p\n id={confidenceId}\n data-slot=\"extraction-field-confidence\"\n data-low={low || undefined}\n className={cn(\"text-xs\", low ? \"text-warning\" : \"text-muted-foreground\")}\n >\n {low ? `Low confidence, ${percent} — worth checking` : `${percent} confidence`}\n </p>\n ) : null}\n\n {onDecision && !arriving ? (\n <div className=\"mt-1 flex flex-wrap items-center gap-2\">\n <FieldButton\n variant=\"primary\"\n aria-label={`${edited ? \"Accept correction\" : \"Accept\"} — ${field.label}`}\n aria-pressed={\n decision !== undefined && decision.kind !== \"rejected\" && !changedSince\n }\n onClick={accept}\n >\n {edited ? \"Accept correction\" : \"Accept\"}\n </FieldButton>\n <FieldButton\n aria-label={`Reject — ${field.label}`}\n aria-pressed={decision?.kind === \"rejected\"}\n onClick={() => {\n onDecision(field.name, { kind: \"rejected\" });\n }}\n >\n Reject\n </FieldButton>\n {sourced ? (\n <FieldButton\n aria-label={`Show in source — ${field.label}`}\n className=\"ml-auto\"\n onClick={onActivate}\n >\n Show in source\n </FieldButton>\n ) : null}\n </div>\n ) : null}\n </li>\n );\n}\n\nfunction FieldButton({\n className,\n variant = \"default\",\n ...props\n}: ComponentPropsWithRef<\"button\"> & { variant?: \"default\" | \"primary\" }) {\n return (\n <button\n type=\"button\"\n className={cn(\n \"rounded-md border px-2.5 py-1 text-xs font-medium transition-colors\",\n variant === \"primary\" &&\n \"border-primary bg-primary text-primary-foreground hover:bg-primary-hover aria-pressed:bg-primary-active\",\n variant === \"default\" &&\n \"border-input bg-background hover:bg-accent hover:text-accent-foreground aria-pressed:bg-secondary aria-pressed:text-secondary-foreground\",\n focusRing,\n disabledStyles,\n className,\n )}\n {...props}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ai-extraction-review.js","names":[],"sources":["../../../src/components/ai-extraction-review/ai-extraction-review.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithRef,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\n\nimport { disabledStyles, focusRing } from \"@/lib/styles\";\nimport { cn } from \"@/lib/utils\";\n\nimport {\n evidenceOf,\n isSourced,\n segmentSource,\n summarizeReview,\n type ExtractionField,\n type FieldDecision,\n type SourceRun,\n} from \"./extraction-model\";\n\n/**\n * The check after extraction: the document on one side, what the model read\n * out of it on the other, and a decision about every field.\n *\n * Every extraction demo shows the filled object and stops. The products that\n * run extraction for a living — invoice capture, KYC onboarding, claims intake —\n * all have this screen, each built from scratch, because a value that cannot\n * be checked can only be trusted, and nobody who is paying an invoice trusts a\n * model that far. No component library ships it.\n *\n * The link is the component. Each field carries where in the source it was\n * read from, quoted in text under the value as well as highlighted in the\n * document, so a reviewer who cannot see the highlight still has the evidence.\n * And a value with no evidence is said outright — \"the model supplied this\n * without evidence\" — because that is the case a review exists to catch, and\n * the one every filled-object view renders identically to a good value.\n *\n * Evidence is a text offset, not a bounding box. A language model reads text,\n * and a text layer with offsets is what every OCR pipeline already yields.\n * Boxes over a rendered page need page rendering, zoom and geometry, and are a\n * different component; this one does not pretend at them.\n *\n * Decisions are controlled and the component writes nothing. It reports that\n * a field was accepted as proposed, corrected from what was proposed, or\n * rejected — a richer record than a form's submitted values, and the one an\n * audit later needs — and leaves what to do with it to the application.\n */\n\nexport interface ExtractionReviewProps extends Omit<\n ComponentPropsWithRef<\"section\">,\n \"children\"\n> {\n /** What the model read. Every span indexes into it. */\n source: string;\n /** Names the source — \"Invoice 4471.pdf, page 1\". */\n sourceLabel?: string;\n /** What is being reviewed, as the heading. */\n heading: string;\n fields: ExtractionField[];\n /** Per-field decisions, keyed by field name. Controlled. */\n decisions?: Record<string, FieldDecision>;\n /** Omit to render the review as a record rather than something to operate. */\n onDecision?: (name: string, decision: FieldDecision) => void;\n /** True while fields are still arriving. Missing values wait instead of reading as not found. */\n streaming?: boolean;\n /** Confidence below this is called low, in words. */\n lowConfidenceBelow?: number;\n children?: ReactNode;\n}\n\nexport function ExtractionReview({\n className,\n source,\n sourceLabel = \"Source\",\n heading,\n fields,\n decisions = {},\n onDecision,\n streaming = false,\n lowConfidenceBelow = 0.7,\n children,\n ...props\n}: ExtractionReviewProps) {\n const headingId = useId();\n const [activeField, setActiveField] = useState<string | null>(null);\n\n const runs = useMemo(() => segmentSource(source, fields), [source, fields]);\n const summary = useMemo(\n () => summarizeReview(source, fields, decisions),\n [source, fields, decisions],\n );\n\n return (\n <section\n data-slot=\"extraction-review\"\n data-complete={summary.complete || undefined}\n aria-labelledby={headingId}\n aria-busy={streaming || undefined}\n className={cn(\"flex flex-col gap-3\", className)}\n {...props}\n >\n <div className=\"flex flex-wrap items-baseline justify-between gap-2\">\n <h3 id={headingId} className=\"text-sm font-medium\">\n {heading}\n </h3>\n {/* Live from the start and short, so each decision is followed by\n where the review stands rather than by silence. Evidence gaps are\n counted here too: they are the reason to read carefully, and worth\n knowing before starting rather than discovering on field six. */}\n <p\n data-slot=\"extraction-review-summary\"\n aria-live=\"polite\"\n className=\"text-xs text-muted-foreground\"\n >\n {streaming\n ? \"Fields are still arriving\"\n : `${String(summary.reviewed)} of ${String(summary.total)} reviewed`}\n {summary.unsourced.length > 0\n ? ` · ${String(summary.unsourced.length)} without evidence`\n : null}\n </p>\n </div>\n\n {children}\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <SourcePanel\n label={sourceLabel}\n runs={runs}\n active={activeField}\n decisions={decisions}\n />\n\n <ol data-slot=\"extraction-fields\" className=\"m-0 flex list-none flex-col gap-3 p-0\">\n {fields.map((field) => (\n <ReviewField\n key={field.name}\n field={field}\n source={source}\n decision={decisions[field.name]}\n streaming={streaming}\n lowConfidenceBelow={lowConfidenceBelow}\n active={activeField === field.name}\n onActivate={() => {\n setActiveField(field.name);\n }}\n onDecision={onDecision}\n />\n ))}\n </ol>\n </div>\n </section>\n );\n}\n\nfunction SourcePanel({\n label,\n runs,\n active,\n decisions,\n}: {\n label: string;\n runs: SourceRun[];\n active: string | null;\n decisions: Record<string, FieldDecision>;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n\n // Bring the active field's evidence into view. Focus stays where it is —\n // in the field — so a keyboard user is shown the source without being\n // moved into it.\n useEffect(() => {\n if (!active || !ref.current) return;\n const mark = ref.current.querySelector(`mark[data-active]`);\n mark?.scrollIntoView({ block: \"nearest\" });\n }, [active]);\n\n return (\n <div\n ref={ref}\n data-slot=\"extraction-source\"\n // A scrolling box has to be focusable to be scrolled by keyboard, and a\n // focusable box needs a name.\n role=\"region\"\n aria-label={label}\n tabIndex={0}\n // Sticks beside the fields on a wide screen, so the evidence for field\n // nine is still in view when the reviewer reaches it.\n className={cn(\n \"max-h-96 overflow-auto rounded-lg border border-border bg-muted/30 p-3 md:sticky md:top-0 md:self-start\",\n focusRing,\n )}\n >\n {runs.length === 0 ? (\n <p className=\"text-xs text-muted-foreground\">No source text.</p>\n ) : (\n <pre className=\"m-0 font-sans text-sm leading-relaxed break-words whitespace-pre-wrap\">\n {runs.map((run, index) =>\n run.fields.length === 0 ? (\n <span key={index}>{run.text}</span>\n ) : (\n // A mark element, so the evidence survives as structure rather\n // than only as a tint. No label is inserted into the text: a\n // document read aloud with field names spliced into it is not\n // the document, and the field already quotes its evidence.\n <mark\n key={index}\n data-fields={run.fields.join(\" \")}\n data-active={active !== null && run.fields.includes(active) ? \"\" : undefined}\n className={cn(\n \"rounded-[2px] text-inherit\",\n run.fields.every((name) => decisions[name]?.kind === \"rejected\")\n ? \"bg-muted line-through decoration-muted-foreground\"\n : \"bg-primary/15\",\n active !== null &&\n run.fields.includes(active) &&\n \"bg-primary/30 ring-1 ring-primary ring-inset\",\n )}\n >\n {run.text}\n </mark>\n ),\n )}\n </pre>\n )}\n </div>\n );\n}\n\n/** Whitespace collapsed and cut short, for quoting evidence under a field. */\nfunction quote(text: string, limit = 80): string {\n const collapsed = text.replace(/\\s+/g, \" \").trim();\n return collapsed.length > limit ? `${collapsed.slice(0, limit - 1)}…` : collapsed;\n}\n\nfunction ReviewField({\n field,\n source,\n decision,\n streaming,\n lowConfidenceBelow,\n active,\n onActivate,\n onDecision,\n}: {\n field: ExtractionField;\n source: string;\n decision?: FieldDecision;\n streaming: boolean;\n lowConfidenceBelow: number;\n active: boolean;\n onActivate: () => void;\n onDecision?: (name: string, decision: FieldDecision) => void;\n}) {\n const inputId = useId();\n const evidenceId = useId();\n const statusId = useId();\n const confidenceId = useId();\n\n // The reviewer's typing, kept apart from the model's value so the decision\n // can say which is which.\n const [draft, setDraft] = useState<string | null>(null);\n\n const proposed = field.value ?? \"\";\n const decided = decision && decision.kind !== \"rejected\" ? decision.value : undefined;\n const current = draft ?? decided ?? proposed;\n const edited = current !== proposed;\n const changedSince = decided !== undefined && current !== decided;\n\n const arriving = streaming && field.value === undefined;\n const sourced = isSourced(source, field);\n const evidence = sourced ? evidenceOf(source, field.span) : \"\";\n const unsourced = !arriving && field.value !== undefined && !sourced;\n\n const accept = () => {\n onDecision?.(\n field.name,\n edited\n ? { kind: \"corrected\", value: current, proposed }\n : { kind: \"accepted\", value: current },\n );\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if (event.key !== \"Enter\") return;\n // Enter confirms an IME candidate before it means anything else. Without\n // this, a reviewer typing a Japanese correction accepts a fragment of it.\n if (event.nativeEvent.isComposing) return;\n if (field.multiline && !(event.ctrlKey || event.metaKey)) return;\n event.preventDefault();\n accept();\n };\n\n const status = arriving\n ? \"Arriving\"\n : !decision\n ? \"Not reviewed\"\n : decision.kind === \"rejected\"\n ? \"Rejected\"\n : changedSince\n ? `Changed since it was ${decision.kind}`\n : decision.kind === \"accepted\"\n ? \"Accepted\"\n : decision.proposed\n ? `Corrected from “${quote(decision.proposed, 40)}”`\n : \"Supplied by the reviewer\";\n\n const low = field.confidence !== undefined && field.confidence < lowConfidenceBelow;\n const percent =\n field.confidence === undefined\n ? null\n : new Intl.NumberFormat(undefined, { style: \"percent\", maximumFractionDigits: 0 }).format(\n field.confidence,\n );\n\n const describedBy = [evidenceId, statusId, percent !== null ? confidenceId : null]\n .filter(Boolean)\n .join(\" \");\n\n const controlClass = cn(\n \"w-full rounded-md border border-input bg-background px-2 py-1.5 text-sm\",\n edited && \"border-warning\",\n focusRing,\n );\n\n return (\n <li\n data-slot=\"extraction-field\"\n data-field={field.name}\n data-state={arriving ? \"arriving\" : (decision?.kind ?? \"undecided\")}\n data-active={active || undefined}\n data-unsourced={unsourced || undefined}\n // Focus anywhere in the field — value, either button — is the reviewer\n // looking at it, so the source follows without a separate step.\n onFocus={onActivate}\n className={cn(\n \"flex flex-col gap-1 rounded-lg border p-3\",\n active ? \"border-primary\" : \"border-border\",\n decision?.kind === \"rejected\" && \"bg-muted/40\",\n )}\n >\n <div className=\"flex flex-wrap items-baseline justify-between gap-2\">\n {onDecision && !arriving ? (\n <label htmlFor={inputId} className=\"text-xs font-medium text-muted-foreground\">\n {field.label}\n </label>\n ) : (\n <span className=\"text-xs font-medium text-muted-foreground\">{field.label}</span>\n )}\n {/* Status as a word, outside the label so editing never renames the\n control under a screen reader user. */}\n <span\n id={statusId}\n data-slot=\"extraction-field-status\"\n className={cn(\n \"text-xs\",\n decision?.kind === \"rejected\" ? \"text-destructive\" : \"text-muted-foreground\",\n changedSince && \"text-warning\",\n )}\n >\n {status}\n </span>\n </div>\n\n {arriving ? (\n <span\n aria-hidden=\"true\"\n className=\"block h-8 w-full animate-pulse-soft rounded-md bg-muted\"\n />\n ) : !onDecision ? (\n <p className=\"rounded-md bg-muted px-2 py-1.5 text-sm break-words\">\n {current || <span className=\"text-muted-foreground\">Empty</span>}\n </p>\n ) : field.multiline ? (\n <textarea\n id={inputId}\n rows={3}\n value={current}\n aria-describedby={describedBy}\n onChange={(event) => {\n setDraft(event.target.value);\n }}\n onKeyDown={onKeyDown}\n className={cn(controlClass, \"resize-none\")}\n />\n ) : (\n <input\n id={inputId}\n type=\"text\"\n value={current}\n aria-describedby={describedBy}\n onChange={(event) => {\n setDraft(event.target.value);\n }}\n onKeyDown={onKeyDown}\n className={controlClass}\n />\n )}\n\n {/* The evidence in text. This is the accessible path to the source, and\n for a sighted reviewer it is the comparison itself — \"1 March 2026\"\n beside \"2026-03-01\" is a normalisation, not an error, and only reads\n that way with both in view. */}\n <p\n id={evidenceId}\n data-slot=\"extraction-field-evidence\"\n className={cn(\"text-xs\", unsourced ? \"text-warning\" : \"text-muted-foreground\")}\n >\n {arriving\n ? \"Waiting for the model\"\n : sourced\n ? `In the source: “${quote(evidence)}”`\n : field.value === undefined\n ? \"The model found nothing for this field.\"\n : \"Not in the source — the model supplied this without evidence.\"}\n </p>\n\n {percent !== null ? (\n <p\n id={confidenceId}\n data-slot=\"extraction-field-confidence\"\n data-low={low || undefined}\n className={cn(\"text-xs\", low ? \"text-warning\" : \"text-muted-foreground\")}\n >\n {low ? `Low confidence, ${percent} — worth checking` : `${percent} confidence`}\n </p>\n ) : null}\n\n {onDecision && !arriving ? (\n <div className=\"mt-1 flex flex-wrap items-center gap-2\">\n <FieldButton\n variant=\"primary\"\n aria-label={`${edited ? \"Accept correction\" : \"Accept\"} — ${field.label}`}\n aria-pressed={\n decision !== undefined && decision.kind !== \"rejected\" && !changedSince\n }\n onClick={accept}\n >\n {edited ? \"Accept correction\" : \"Accept\"}\n </FieldButton>\n <FieldButton\n aria-label={`Reject — ${field.label}`}\n aria-pressed={decision?.kind === \"rejected\"}\n onClick={() => {\n onDecision(field.name, { kind: \"rejected\" });\n }}\n >\n Reject\n </FieldButton>\n {sourced ? (\n <FieldButton\n aria-label={`Show in source — ${field.label}`}\n className=\"ms-auto\"\n onClick={onActivate}\n >\n Show in source\n </FieldButton>\n ) : null}\n </div>\n ) : null}\n </li>\n );\n}\n\nfunction FieldButton({\n className,\n variant = \"default\",\n ...props\n}: ComponentPropsWithRef<\"button\"> & { variant?: \"default\" | \"primary\" }) {\n return (\n <button\n type=\"button\"\n className={cn(\n \"rounded-md border px-2.5 py-1 text-xs font-medium transition-colors\",\n variant === \"primary\" &&\n \"border-primary bg-primary text-primary-foreground hover:bg-primary-hover aria-pressed:bg-primary-active\",\n variant === \"default\" &&\n \"border-input bg-background hover:bg-accent hover:text-accent-foreground aria-pressed:bg-secondary aria-pressed:text-secondary-foreground\",\n focusRing,\n disabledStyles,\n className,\n )}\n {...props}\n />\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { VariantProps } from "class-variance-authority";
2
+ import { ComponentPropsWithRef } from "react";
3
+ //#region src/components/ai-loader/ai-loader.d.ts
4
+ type AILoaderVariant = "dots" | "bar" | "grid";
5
+ declare const aiLoaderVariants: (props?: ({
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ interface AILoaderProps extends Omit<ComponentPropsWithRef<"span">, "children">, VariantProps<typeof aiLoaderVariants> {
9
+ /** Which loader: thinking dots, an indeterminate bar, or a thinking grid. */
10
+ variant?: AILoaderVariant;
11
+ /** Visible text before the indicator, e.g. "Thinking". Also what is announced. */
12
+ label?: string;
13
+ /** Announced when there is no visible label. */
14
+ srLabel?: string;
15
+ /** Appends a live elapsed-seconds counter. Long waits need a sign of progress. */
16
+ showElapsed?: boolean;
17
+ }
18
+ /** A labelled AI waiting indicator, optionally counting the seconds. */
19
+ declare function AILoader({ className, variant, size, label, srLabel, showElapsed, ...props }: AILoaderProps): import("react").JSX.Element;
20
+ //#endregion
21
+ export { AILoader, AILoaderProps, AILoaderVariant, aiLoaderVariants };
22
+ //# sourceMappingURL=ai-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-loader.d.ts","names":[],"sources":["../../../src/components/ai-loader/ai-loader.tsx"],"mappings":";;;KAwBY;cAEN,mBAAgB;;6CAWpB;UAkBe,sBAEb,KAAK,4CACL,oBAAoB;;EAEtB,UAAU;;EAEV;;EAEA;;EAEA;;;iBAIc,WACd,WACA,SACA,MACA,OACA,SACA,gBACG,SACF,gCAAa,IAAA"}
@@ -0,0 +1,78 @@
1
+ "use client";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { DotsLoader } from "../dots-loader/dots-loader.js";
4
+ import { BarLoader } from "../bar-loader/bar-loader.js";
5
+ import { GridLoader } from "../grid-loader/grid-loader.js";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { cva } from "class-variance-authority";
8
+ import { useEffect, useState } from "react";
9
+ //#region src/components/ai-loader/ai-loader.tsx
10
+ const aiLoaderVariants = cva("inline-flex items-center gap-2 text-muted-foreground", {
11
+ variants: { size: {
12
+ sm: "text-xs",
13
+ md: "text-sm",
14
+ lg: "text-base"
15
+ } },
16
+ defaultVariants: { size: "md" }
17
+ });
18
+ const LOADER_SIZE = {
19
+ sm: "sm",
20
+ md: "md",
21
+ lg: "lg"
22
+ };
23
+ /** Seconds since mount, to one decimal, re-rendering only when that changes. */
24
+ function useElapsed(enabled) {
25
+ const [tenths, setTenths] = useState(0);
26
+ useEffect(() => {
27
+ if (!enabled) return;
28
+ const start = performance.now();
29
+ const id = setInterval(() => {
30
+ setTenths(Math.floor((performance.now() - start) / 100));
31
+ }, 100);
32
+ return () => clearInterval(id);
33
+ }, [enabled]);
34
+ return tenths / 10;
35
+ }
36
+ /** A labelled AI waiting indicator, optionally counting the seconds. */
37
+ function AILoader({ className, variant = "dots", size, label, srLabel = "Loading", showElapsed = false, ...props }) {
38
+ const elapsed = useElapsed(showElapsed);
39
+ const loaderSize = LOADER_SIZE[size ?? "md"];
40
+ return /* @__PURE__ */ jsxs("span", {
41
+ role: "status",
42
+ "data-slot": "ai-loader",
43
+ "data-variant": variant,
44
+ className: cn(aiLoaderVariants({ size }), className),
45
+ ...props,
46
+ children: [
47
+ label ? /* @__PURE__ */ jsx("span", {
48
+ "data-slot": "ai-loader-label",
49
+ children: label
50
+ }) : /* @__PURE__ */ jsx("span", {
51
+ className: "sr-only",
52
+ children: srLabel
53
+ }),
54
+ variant === "dots" ? /* @__PURE__ */ jsx(DotsLoader, {
55
+ variant: "thinking",
56
+ size: loaderSize
57
+ }) : null,
58
+ variant === "bar" ? /* @__PURE__ */ jsx(BarLoader, {
59
+ variant: "indeterminate",
60
+ size: loaderSize
61
+ }) : null,
62
+ variant === "grid" ? /* @__PURE__ */ jsx(GridLoader, {
63
+ variant: "thinking",
64
+ size: loaderSize
65
+ }) : null,
66
+ showElapsed ? /* @__PURE__ */ jsxs("span", {
67
+ "data-slot": "ai-loader-elapsed",
68
+ "aria-hidden": "true",
69
+ className: "tabular-nums opacity-60",
70
+ children: [elapsed.toFixed(1), "s"]
71
+ }) : null
72
+ ]
73
+ });
74
+ }
75
+ //#endregion
76
+ export { AILoader, aiLoaderVariants };
77
+
78
+ //# sourceMappingURL=ai-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-loader.js","names":[],"sources":["../../../src/components/ai-loader/ai-loader.tsx"],"sourcesContent":["\"use client\";\n\n// Ported from SmoothUI AI Loader (MIT, © 2024 Eduardo Calvo). See THIRD_PARTY_NOTICES.md.\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { useEffect, useState, type ComponentPropsWithRef } from \"react\";\n\nimport { BarLoader } from \"@/components/bar-loader\";\nimport { DotsLoader } from \"@/components/dots-loader\";\nimport { GridLoader } from \"@/components/grid-loader\";\nimport { cn } from \"@/lib/utils\";\n\n/*\n * The AI waiting indicator: a label, one of three loaders, and an optional\n * elapsed counter. The motion is not reimplemented here — it is Dowel's own\n * loader families, whose \"thinking\" dots, indeterminate bar and \"thinking\"\n * grid already share SmoothUI's 1.2s cycle, so a page can mix them and stay in\n * step. They carry data-motion=\"indicator\" themselves: under reduced motion\n * they slow rather than freeze.\n *\n * The root is the one status region. The loader inside it stays aria-hidden,\n * and the elapsed counter is hidden from assistive technology too: a live\n * region whose text changes ten times a second would announce continuously.\n */\n\nexport type AILoaderVariant = \"dots\" | \"bar\" | \"grid\";\n\nconst aiLoaderVariants = cva(\"inline-flex items-center gap-2 text-muted-foreground\", {\n variants: {\n size: {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nconst LOADER_SIZE = { sm: \"sm\", md: \"md\", lg: \"lg\" } as const;\n\n/** Seconds since mount, to one decimal, re-rendering only when that changes. */\nfunction useElapsed(enabled: boolean): number {\n const [tenths, setTenths] = useState(0);\n useEffect(() => {\n if (!enabled) return;\n const start = performance.now();\n const id = setInterval(() => {\n setTenths(Math.floor((performance.now() - start) / 100));\n }, 100);\n return () => clearInterval(id);\n }, [enabled]);\n return tenths / 10;\n}\n\nexport interface AILoaderProps\n extends\n Omit<ComponentPropsWithRef<\"span\">, \"children\">,\n VariantProps<typeof aiLoaderVariants> {\n /** Which loader: thinking dots, an indeterminate bar, or a thinking grid. */\n variant?: AILoaderVariant;\n /** Visible text before the indicator, e.g. \"Thinking\". Also what is announced. */\n label?: string;\n /** Announced when there is no visible label. */\n srLabel?: string;\n /** Appends a live elapsed-seconds counter. Long waits need a sign of progress. */\n showElapsed?: boolean;\n}\n\n/** A labelled AI waiting indicator, optionally counting the seconds. */\nexport function AILoader({\n className,\n variant = \"dots\",\n size,\n label,\n srLabel = \"Loading\",\n showElapsed = false,\n ...props\n}: AILoaderProps) {\n const elapsed = useElapsed(showElapsed);\n const loaderSize = LOADER_SIZE[size ?? \"md\"];\n\n return (\n <span\n role=\"status\"\n data-slot=\"ai-loader\"\n data-variant={variant}\n className={cn(aiLoaderVariants({ size }), className)}\n {...props}\n >\n {label ? (\n <span data-slot=\"ai-loader-label\">{label}</span>\n ) : (\n <span className=\"sr-only\">{srLabel}</span>\n )}\n {variant === \"dots\" ? <DotsLoader variant=\"thinking\" size={loaderSize} /> : null}\n {variant === \"bar\" ? <BarLoader variant=\"indeterminate\" size={loaderSize} /> : null}\n {variant === \"grid\" ? <GridLoader variant=\"thinking\" size={loaderSize} /> : null}\n {showElapsed ? (\n <span\n data-slot=\"ai-loader-elapsed\"\n aria-hidden=\"true\"\n className=\"tabular-nums opacity-60\"\n >\n {elapsed.toFixed(1)}s\n </span>\n ) : null}\n </span>\n );\n}\n\nexport { aiLoaderVariants };\n"],"mappings":";;;;;;;;;AA0BA,MAAM,mBAAmB,IAAI,wDAAwD;CACnF,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;CACN,EACF;CACA,iBAAiB,EACf,MAAM,KACR;AACF,CAAC;AAED,MAAM,cAAc;CAAE,IAAI;CAAM,IAAI;CAAM,IAAI;AAAK;;AAGnD,SAAS,WAAW,SAA0B;CAC5C,MAAM,CAAC,QAAQ,aAAa,SAAS,CAAC;CACtC,gBAAgB;EACd,IAAI,CAAC,SAAS;EACd,MAAM,QAAQ,YAAY,IAAI;EAC9B,MAAM,KAAK,kBAAkB;GAC3B,UAAU,KAAK,OAAO,YAAY,IAAI,IAAI,SAAS,GAAG,CAAC;EACzD,GAAG,GAAG;EACN,aAAa,cAAc,EAAE;CAC/B,GAAG,CAAC,OAAO,CAAC;CACZ,OAAO,SAAS;AAClB;;AAiBA,SAAgB,SAAS,EACvB,WACA,UAAU,QACV,MACA,OACA,UAAU,WACV,cAAc,OACd,GAAG,SACa;CAChB,MAAM,UAAU,WAAW,WAAW;CACtC,MAAM,aAAa,YAAY,QAAQ;CAEvC,OACE,qBAAC,QAAD;EACE,MAAK;EACL,aAAU;EACV,gBAAc;EACd,WAAW,GAAG,iBAAiB,EAAE,KAAK,CAAC,GAAG,SAAS;EACnD,GAAI;EALN,UAAA;GAOG,QACC,oBAAC,QAAD;IAAM,aAAU;IAAmB,UAAA;GAAY,CAAA,IAE/C,oBAAC,QAAD;IAAM,WAAU;IAAW,UAAA;GAAc,CAAA;GAE1C,YAAY,SAAS,oBAAC,YAAD;IAAY,SAAQ;IAAW,MAAM;GAAa,CAAA,IAAI;GAC3E,YAAY,QAAQ,oBAAC,WAAD;IAAW,SAAQ;IAAgB,MAAM;GAAa,CAAA,IAAI;GAC9E,YAAY,SAAS,oBAAC,YAAD;IAAY,SAAQ;IAAW,MAAM;GAAa,CAAA,IAAI;GAC3E,cACC,qBAAC,QAAD;IACE,aAAU;IACV,eAAY;IACZ,WAAU;IAHZ,UAAA,CAKG,QAAQ,QAAQ,CAAC,GAAE,GAChB;GACJ,CAAA,IAAA;EACA;;AAEV"}
@@ -0,0 +1,2 @@
1
+ import { AILoader, AILoaderProps, AILoaderVariant, aiLoaderVariants } from "./ai-loader.js";
2
+ export { AILoader, type AILoaderProps, type AILoaderVariant, aiLoaderVariants };
@@ -0,0 +1,2 @@
1
+ import { AILoader, aiLoaderVariants } from "./ai-loader.js";
2
+ export { AILoader, aiLoaderVariants };
@@ -0,0 +1,21 @@
1
+ import { defineMeta } from "../../registry/schema.js";
2
+ //#region src/components/ai-loader/meta.ts
3
+ const meta = defineMeta({
4
+ name: "ai-loader",
5
+ title: "AI Loader",
6
+ description: "A labelled AI waiting indicator — thinking dots, an indeterminate bar or a thinking grid — with an optional elapsed-seconds counter.",
7
+ category: "ai",
8
+ status: "beta",
9
+ dependencies: ["class-variance-authority"],
10
+ registryDependencies: [
11
+ "bar-loader",
12
+ "dots-loader",
13
+ "grid-loader"
14
+ ],
15
+ files: ["ai-loader.tsx"],
16
+ a11y: "The root is a single role=\"status\" region announcing the label (or `srLabel`, \"Loading\" by default). The loader inside it and the elapsed counter are aria-hidden — a counter ticking ten times a second inside a live region would announce continuously. The loaders are indicators: under reduced motion they slow rather than stop. None fakes determinate progress."
17
+ });
18
+ //#endregion
19
+ export { meta };
20
+
21
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","names":[],"sources":["../../../src/components/ai-loader/meta.ts"],"sourcesContent":["import { defineMeta } from \"@/registry/schema\";\n\nexport const meta = defineMeta({\n name: \"ai-loader\",\n title: \"AI Loader\",\n description:\n \"A labelled AI waiting indicator — thinking dots, an indeterminate bar or a thinking grid — with an optional elapsed-seconds counter.\",\n category: \"ai\",\n status: \"beta\",\n dependencies: [\"class-variance-authority\"],\n registryDependencies: [\"bar-loader\", \"dots-loader\", \"grid-loader\"],\n files: [\"ai-loader.tsx\"],\n a11y:\n 'The root is a single role=\"status\" region announcing the label (or `srLabel`, \"Loading\" by default). The ' +\n \"loader inside it and the elapsed counter are aria-hidden — a counter ticking ten times a second inside a \" +\n \"live region would announce continuously. The loaders are indicators: under reduced motion they slow rather \" +\n \"than stop. None fakes determinate progress.\",\n});\n"],"mappings":";;AAEA,MAAa,OAAO,WAAW;CAC7B,MAAM;CACN,OAAO;CACP,aACE;CACF,UAAU;CACV,QAAQ;CACR,cAAc,CAAC,0BAA0B;CACzC,sBAAsB;EAAC;EAAc;EAAe;CAAa;CACjE,OAAO,CAAC,eAAe;CACvB,MACE;AAIJ,CAAC"}
@@ -46,11 +46,22 @@ declare function MessageAvatar({ className, asChild, ...props }: MessageAvatarPr
46
46
  *
47
47
  * Revealed on hover for pointer users but always present in the DOM and in the
48
48
  * tab order — hiding controls behind hover makes them unreachable by keyboard
49
- * and invisible on touch.
49
+ * and invisible on touch. On devices that cannot hover they are always shown.
50
50
  */
51
51
  declare function MessageActions({ className, ...props }: ComponentPropsWithRef<"div">): import("react").JSX.Element;
52
+ interface MessageTimestampProps extends ComponentPropsWithRef<"time"> {
53
+ /** Machine-readable value for `dateTime`. Children are the display text. */
54
+ dateTime?: string;
55
+ }
56
+ /**
57
+ * When the message was sent.
58
+ *
59
+ * A real `<time>`, so the display text can be relative ("2 min ago") while the
60
+ * machine-readable value stays exact.
61
+ */
62
+ declare function MessageTimestamp({ className, ...props }: MessageTimestampProps): import("react").JSX.Element;
52
63
  /** Attachments, citations and other content that hangs off a message. */
53
64
  declare function MessageFooter({ className, ...props }: ComponentPropsWithRef<"div">): import("react").JSX.Element;
54
65
  //#endregion
55
- export { Message, MessageActions, MessageAvatar, MessageAvatarProps, MessageBody, MessageBodyProps, MessageFooter, MessageProps, MessageRole, messageBodyVariants, messageVariants };
66
+ export { Message, MessageActions, MessageAvatar, MessageAvatarProps, MessageBody, MessageBodyProps, MessageFooter, MessageProps, MessageRole, MessageTimestamp, MessageTimestampProps, messageBodyVariants, messageVariants };
56
67
  //# sourceMappingURL=ai-message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-message.d.ts","names":[],"sources":["../../../src/components/ai-message/ai-message.tsx"],"mappings":";;;;;;;;;;;cAiBM,kBAAe;;6CAWnB;cAEI,sBAAmB;;6CAYvB;KAEU;UAEK,qBACP,6BAA6B,KAAK,oBAAoB;;;;;;;;;;EAU9D,OAAO;;EAEP;;iBASc,UACd,WACA,MACA,WACA,aACG,SACF,+BAAY,IAAA;UAeE,yBACP,8BAA8B,KAAK,oBAAoB;;EAE/D,OAAO;;iBAGO,cAAc,WAAW,SAAuB,SAAS,mCAAgB,IAAA;UAUxE,2BAA2B;EAC1C;;;iBAIc,gBAAgB,WAAW,YAAY,SAAS,qCAAkB,IAAA;;;;;;;;iBAyBlE,iBAAiB,cAAc,SAAS,+CAA4B,IAAA;;iBAgBpE,gBAAgB,cAAc,SAAS,+CAA4B,IAAA"}
1
+ {"version":3,"file":"ai-message.d.ts","names":[],"sources":["../../../src/components/ai-message/ai-message.tsx"],"mappings":";;;;;;;;;;;cAkBM,kBAAe;;6CAWnB;cAEI,sBAAmB;;6CAYvB;KAEU;UAEK,qBACP,6BAA6B,KAAK,oBAAoB;;;;;;;;;;EAU9D,OAAO;;EAEP;;iBASc,UACd,WACA,MACA,WACA,aACG,SACF,+BAAY,IAAA;UAeE,yBACP,8BAA8B,KAAK,oBAAoB;;EAE/D,OAAO;;iBAGO,cAAc,WAAW,SAAuB,SAAS,mCAAgB,IAAA;UAUxE,2BAA2B;EAC1C;;;iBAIc,gBAAgB,WAAW,YAAY,SAAS,qCAAkB,IAAA;;;;;;;;iBAwClE,iBAAiB,cAAc,SAAS,+CAA4B,IAAA;UAuBnE,8BAA8B;;EAE7C;;;;;;;;iBASc,mBAAmB,cAAc,SAAS,wCAAqB,IAAA;;iBAW/D,gBAAgB,cAAc,SAAS,+CAA4B,IAAA"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { cn } from "../../lib/utils.js";
3
3
  import { Slot } from "radix-ui";
4
- import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  import { cva } from "class-variance-authority";
6
6
  //#region src/components/ai-message/ai-message.tsx
7
7
  /**
@@ -62,17 +62,41 @@ function MessageAvatar({ className, asChild, ...props }) {
62
62
  ...props
63
63
  });
64
64
  }
65
+ const PREFIX = "dowel-ai-message";
66
+ const STYLES = `
67
+ [data-slot=message-actions]{--dowel-message-slide:-6px}
68
+ [data-from=user] [data-slot=message-actions]{--dowel-message-slide:6px}
69
+ [data-slot=message-actions]:dir(rtl){--dowel-message-slide:6px}
70
+ [data-from=user] [data-slot=message-actions]:dir(rtl){--dowel-message-slide:-6px}
71
+ `;
65
72
  /**
66
73
  * Per-message controls: copy, regenerate, feedback.
67
74
  *
68
75
  * Revealed on hover for pointer users but always present in the DOM and in the
69
76
  * tab order — hiding controls behind hover makes them unreachable by keyboard
70
- * and invisible on touch.
77
+ * and invisible on touch. On devices that cannot hover they are always shown.
71
78
  */
72
79
  function MessageActions({ className, ...props }) {
73
- return /* @__PURE__ */ jsx("div", {
80
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("style", {
81
+ href: PREFIX,
82
+ precedence: "dowel",
83
+ children: STYLES
84
+ }), /* @__PURE__ */ jsx("div", {
74
85
  "data-slot": "message-actions",
75
- className: cn("mt-1.5 flex items-center gap-1", "opacity-0 transition-opacity duration-[var(--duration-fast)]", "group-focus-within/message:opacity-100 group-hover/message:opacity-100", className),
86
+ className: cn("mt-1.5 flex items-center gap-1", "translate-x-(--dowel-message-slide) scale-90 opacity-0", "transition-[opacity,translate,scale] duration-[var(--duration-normal)] ease-[var(--ease-out-quint)]", "group-focus-within/message:translate-x-0 group-focus-within/message:scale-100 group-focus-within/message:opacity-100", "group-hover/message:translate-x-0 group-hover/message:scale-100 group-hover/message:opacity-100", "[@media(hover:none)]:translate-x-0 [@media(hover:none)]:scale-100 [@media(hover:none)]:opacity-100", className),
87
+ ...props
88
+ })] });
89
+ }
90
+ /**
91
+ * When the message was sent.
92
+ *
93
+ * A real `<time>`, so the display text can be relative ("2 min ago") while the
94
+ * machine-readable value stays exact.
95
+ */
96
+ function MessageTimestamp({ className, ...props }) {
97
+ return /* @__PURE__ */ jsx("time", {
98
+ "data-slot": "message-timestamp",
99
+ className: cn("text-xs text-muted-foreground tabular-nums", className),
76
100
  ...props
77
101
  });
78
102
  }
@@ -85,6 +109,6 @@ function MessageFooter({ className, ...props }) {
85
109
  });
86
110
  }
87
111
  //#endregion
88
- export { Message, MessageActions, MessageAvatar, MessageBody, MessageFooter, messageBodyVariants, messageVariants };
112
+ export { Message, MessageActions, MessageAvatar, MessageBody, MessageFooter, MessageTimestamp, messageBodyVariants, messageVariants };
89
113
 
90
114
  //# sourceMappingURL=ai-message.js.map