@od-oneapp/uni-ui 2026.1.1301

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 (1253) hide show
  1. package/README.md +753 -0
  2. package/dist/actions-C-SEx2GS.mjs +180 -0
  3. package/dist/actions-C-SEx2GS.mjs.map +1 -0
  4. package/dist/actions-Ch7h6cYC.d.mts +50 -0
  5. package/dist/actions-Cnupw96c.d.mts +50 -0
  6. package/dist/alert-BVUF7Xzb.d.mts +22 -0
  7. package/dist/alert-BuPyEXF-.mjs +206 -0
  8. package/dist/alert-BuPyEXF-.mjs.map +1 -0
  9. package/dist/alert-CfjDnZpm.d.mts +22 -0
  10. package/dist/animated-size-container-DSKNt1Cn.mjs +106 -0
  11. package/dist/animated-size-container-DSKNt1Cn.mjs.map +1 -0
  12. package/dist/areas-CtE8w69A.mjs +144 -0
  13. package/dist/areas-CtE8w69A.mjs.map +1 -0
  14. package/dist/areas-DtGnjGuX.d.mts +22 -0
  15. package/dist/auth-nav-user-CRxDpY_7.d.mts +30 -0
  16. package/dist/auth-nav-user-DPFv8dTp.mjs +181 -0
  17. package/dist/auth-nav-user-DPFv8dTp.mjs.map +1 -0
  18. package/dist/avatar-DjiX7nT8.mjs +202 -0
  19. package/dist/avatar-DjiX7nT8.mjs.map +1 -0
  20. package/dist/badge-CGTN2VG0.d.mts +25 -0
  21. package/dist/badge-CVoIuyYX.mjs +242 -0
  22. package/dist/badge-CVoIuyYX.mjs.map +1 -0
  23. package/dist/badge-DH0tY3wJ.d.mts +25 -0
  24. package/dist/bars-CWTAPKgm.d.mts +20 -0
  25. package/dist/bars-DOLvecrq.mjs +125 -0
  26. package/dist/bars-DOLvecrq.mjs.map +1 -0
  27. package/dist/branch-BEl6eS77.mjs +323 -0
  28. package/dist/branch-BEl6eS77.mjs.map +1 -0
  29. package/dist/branch-BtdY_TLE.d.mts +58 -0
  30. package/dist/branch-Duq6cW0s.d.mts +58 -0
  31. package/dist/button-BAdq0gBE.d.mts +31 -0
  32. package/dist/button-DVOrrZLw.mjs +632 -0
  33. package/dist/button-DVOrrZLw.mjs.map +1 -0
  34. package/dist/button-DnjeAftr.d.mts +31 -0
  35. package/dist/carousel-D-J1Zgn1.d.mts +49 -0
  36. package/dist/carousel-Dx5AOW5k.mjs +345 -0
  37. package/dist/carousel-Dx5AOW5k.mjs.map +1 -0
  38. package/dist/carousel-sY0y1-or.d.mts +49 -0
  39. package/dist/chart-context-CLV35VLJ.mjs +27 -0
  40. package/dist/chart-context-CLV35VLJ.mjs.map +1 -0
  41. package/dist/checkbox-wiF-DV6q.mjs +194 -0
  42. package/dist/checkbox-wiF-DV6q.mjs.map +1 -0
  43. package/dist/code-block-Cg_XtPH7.mjs +243 -0
  44. package/dist/code-block-Cg_XtPH7.mjs.map +1 -0
  45. package/dist/collapsible-CRgTpRfr.d.mts +46 -0
  46. package/dist/collapsible-CXy4T04n.mjs +239 -0
  47. package/dist/collapsible-CXy4T04n.mjs.map +1 -0
  48. package/dist/combobox-DSrxSkSl.d.mts +79 -0
  49. package/dist/combobox-DYFh2eZf.d.mts +79 -0
  50. package/dist/combobox-uEKksQFR.mjs +410 -0
  51. package/dist/combobox-uEKksQFR.mjs.map +1 -0
  52. package/dist/command-xK3X_A9t.mjs +206 -0
  53. package/dist/command-xK3X_A9t.mjs.map +1 -0
  54. package/dist/components-ai-elements/actions/index.d.mts +5 -0
  55. package/dist/components-ai-elements/actions/index.mjs +4 -0
  56. package/dist/components-ai-elements/agent-step/index.d.mts +32 -0
  57. package/dist/components-ai-elements/agent-step/index.mjs +183 -0
  58. package/dist/components-ai-elements/agent-step/index.mjs.map +1 -0
  59. package/dist/components-ai-elements/artifact/index.d.mts +81 -0
  60. package/dist/components-ai-elements/artifact/index.mjs +153 -0
  61. package/dist/components-ai-elements/artifact/index.mjs.map +1 -0
  62. package/dist/components-ai-elements/branch/index.d.mts +5 -0
  63. package/dist/components-ai-elements/branch/index.mjs +4 -0
  64. package/dist/components-ai-elements/chain-of-thought/index.d.mts +90 -0
  65. package/dist/components-ai-elements/chain-of-thought/index.mjs +338 -0
  66. package/dist/components-ai-elements/chain-of-thought/index.mjs.map +1 -0
  67. package/dist/components-ai-elements/chat-input/index.d.mts +21 -0
  68. package/dist/components-ai-elements/chat-input/index.mjs +137 -0
  69. package/dist/components-ai-elements/chat-input/index.mjs.map +1 -0
  70. package/dist/components-ai-elements/checkpoint/index.d.mts +46 -0
  71. package/dist/components-ai-elements/checkpoint/index.mjs +161 -0
  72. package/dist/components-ai-elements/checkpoint/index.mjs.map +1 -0
  73. package/dist/components-ai-elements/code-block/index.d.mts +39 -0
  74. package/dist/components-ai-elements/code-block/index.mjs +4 -0
  75. package/dist/components-ai-elements/confirmation/index.d.mts +96 -0
  76. package/dist/components-ai-elements/confirmation/index.mjs +295 -0
  77. package/dist/components-ai-elements/confirmation/index.mjs.map +1 -0
  78. package/dist/components-ai-elements/context/index.d.mts +83 -0
  79. package/dist/components-ai-elements/context/index.mjs +456 -0
  80. package/dist/components-ai-elements/context/index.mjs.map +1 -0
  81. package/dist/components-ai-elements/conversation/index.d.mts +46 -0
  82. package/dist/components-ai-elements/conversation/index.mjs +180 -0
  83. package/dist/components-ai-elements/conversation/index.mjs.map +1 -0
  84. package/dist/components-ai-elements/custom/index.d.mts +1142 -0
  85. package/dist/components-ai-elements/custom/index.mjs +5578 -0
  86. package/dist/components-ai-elements/custom/index.mjs.map +1 -0
  87. package/dist/components-ai-elements/generative-ui/index.d.mts +4 -0
  88. package/dist/components-ai-elements/generative-ui/index.mjs +4 -0
  89. package/dist/components-ai-elements/image/index.d.mts +20 -0
  90. package/dist/components-ai-elements/image/index.mjs +121 -0
  91. package/dist/components-ai-elements/image/index.mjs.map +1 -0
  92. package/dist/components-ai-elements/inline-citation/index.d.mts +94 -0
  93. package/dist/components-ai-elements/inline-citation/index.mjs +371 -0
  94. package/dist/components-ai-elements/inline-citation/index.mjs.map +1 -0
  95. package/dist/components-ai-elements/loader/index.d.mts +24 -0
  96. package/dist/components-ai-elements/loader/index.mjs +4 -0
  97. package/dist/components-ai-elements/message/index.d.mts +153 -0
  98. package/dist/components-ai-elements/message/index.mjs +597 -0
  99. package/dist/components-ai-elements/message/index.mjs.map +1 -0
  100. package/dist/components-ai-elements/model-selector/index.d.mts +72 -0
  101. package/dist/components-ai-elements/model-selector/index.mjs +224 -0
  102. package/dist/components-ai-elements/model-selector/index.mjs.map +1 -0
  103. package/dist/components-ai-elements/open-in-chat/index.d.mts +64 -0
  104. package/dist/components-ai-elements/open-in-chat/index.mjs +502 -0
  105. package/dist/components-ai-elements/open-in-chat/index.mjs.map +1 -0
  106. package/dist/components-ai-elements/plan/index.d.mts +71 -0
  107. package/dist/components-ai-elements/plan/index.mjs +219 -0
  108. package/dist/components-ai-elements/plan/index.mjs.map +1 -0
  109. package/dist/components-ai-elements/prompt-char-counter/index.d.mts +19 -0
  110. package/dist/components-ai-elements/prompt-char-counter/index.mjs +116 -0
  111. package/dist/components-ai-elements/prompt-char-counter/index.mjs.map +1 -0
  112. package/dist/components-ai-elements/prompt-input/index.d.mts +386 -0
  113. package/dist/components-ai-elements/prompt-input/index.mjs +4 -0
  114. package/dist/components-ai-elements/queue/index.d.mts +121 -0
  115. package/dist/components-ai-elements/queue/index.mjs +284 -0
  116. package/dist/components-ai-elements/queue/index.mjs.map +1 -0
  117. package/dist/components-ai-elements/reasoning/index.d.mts +42 -0
  118. package/dist/components-ai-elements/reasoning/index.mjs +241 -0
  119. package/dist/components-ai-elements/reasoning/index.mjs.map +1 -0
  120. package/dist/components-ai-elements/shimmer/index.d.mts +23 -0
  121. package/dist/components-ai-elements/shimmer/index.mjs +4 -0
  122. package/dist/components-ai-elements/sources/index.d.mts +56 -0
  123. package/dist/components-ai-elements/sources/index.mjs +211 -0
  124. package/dist/components-ai-elements/sources/index.mjs.map +1 -0
  125. package/dist/components-ai-elements/suggestion/index.d.mts +40 -0
  126. package/dist/components-ai-elements/suggestion/index.mjs +145 -0
  127. package/dist/components-ai-elements/suggestion/index.mjs.map +1 -0
  128. package/dist/components-ai-elements/task/index.d.mts +70 -0
  129. package/dist/components-ai-elements/task/index.mjs +218 -0
  130. package/dist/components-ai-elements/task/index.mjs.map +1 -0
  131. package/dist/components-ai-elements/tool/index.d.mts +78 -0
  132. package/dist/components-ai-elements/tool/index.mjs +370 -0
  133. package/dist/components-ai-elements/tool/index.mjs.map +1 -0
  134. package/dist/components-ai-elements/tool-approval/index.d.mts +20 -0
  135. package/dist/components-ai-elements/tool-approval/index.mjs +252 -0
  136. package/dist/components-ai-elements/tool-approval/index.mjs.map +1 -0
  137. package/dist/components-ai-elements/web-preview/index.d.mts +136 -0
  138. package/dist/components-ai-elements/web-preview/index.mjs +773 -0
  139. package/dist/components-ai-elements/web-preview/index.mjs.map +1 -0
  140. package/dist/components-ai-elements-constants.d.mts +207 -0
  141. package/dist/components-ai-elements-constants.mjs +301 -0
  142. package/dist/components-ai-elements-constants.mjs.map +1 -0
  143. package/dist/components-ai-workflows/canvas/index.d.mts +22 -0
  144. package/dist/components-ai-workflows/canvas/index.mjs +135 -0
  145. package/dist/components-ai-workflows/canvas/index.mjs.map +1 -0
  146. package/dist/components-ai-workflows/connection/index.d.mts +22 -0
  147. package/dist/components-ai-workflows/connection/index.mjs +4 -0
  148. package/dist/components-ai-workflows/controls/index.d.mts +14 -0
  149. package/dist/components-ai-workflows/controls/index.mjs +89 -0
  150. package/dist/components-ai-workflows/controls/index.mjs.map +1 -0
  151. package/dist/components-ai-workflows/edge/index.d.mts +20 -0
  152. package/dist/components-ai-workflows/edge/index.mjs +102 -0
  153. package/dist/components-ai-workflows/edge/index.mjs.map +1 -0
  154. package/dist/components-ai-workflows/node/index.d.mts +3 -0
  155. package/dist/components-ai-workflows/node/index.mjs +4 -0
  156. package/dist/components-ai-workflows/panel/index.d.mts +15 -0
  157. package/dist/components-ai-workflows/panel/index.mjs +89 -0
  158. package/dist/components-ai-workflows/panel/index.mjs.map +1 -0
  159. package/dist/components-ai-workflows/resizable-node/index.d.mts +30 -0
  160. package/dist/components-ai-workflows/resizable-node/index.mjs +164 -0
  161. package/dist/components-ai-workflows/resizable-node/index.mjs.map +1 -0
  162. package/dist/components-ai-workflows/toolbar/index.d.mts +19 -0
  163. package/dist/components-ai-workflows/toolbar/index.mjs +91 -0
  164. package/dist/components-ai-workflows/toolbar/index.mjs.map +1 -0
  165. package/dist/components-auth-client-nav-user.d.mts +3 -0
  166. package/dist/components-auth-client-nav-user.mjs +4 -0
  167. package/dist/components-auth-client-providers.d.mts +13 -0
  168. package/dist/components-auth-client-providers.mjs +89 -0
  169. package/dist/components-auth-client-providers.mjs.map +1 -0
  170. package/dist/components-auth-client.d.mts +5 -0
  171. package/dist/components-auth-client.mjs +5 -0
  172. package/dist/components-auth-server.d.mts +1878 -0
  173. package/dist/components-auth-server.mjs +32769 -0
  174. package/dist/components-auth-server.mjs.map +1 -0
  175. package/dist/components-auth.d.mts +5 -0
  176. package/dist/components-auth.mjs +5 -0
  177. package/dist/components-charts/areas/index.d.mts +3 -0
  178. package/dist/components-charts/areas/index.mjs +4 -0
  179. package/dist/components-charts/bars/index.d.mts +3 -0
  180. package/dist/components-charts/bars/index.mjs +4 -0
  181. package/dist/components-charts/funnel-chart/index.d.mts +3 -0
  182. package/dist/components-charts/funnel-chart/index.mjs +4 -0
  183. package/dist/components-charts/mini-area-chart/index.d.mts +3 -0
  184. package/dist/components-charts/mini-area-chart/index.mjs +4 -0
  185. package/dist/components-charts/time-series-chart/index.d.mts +3 -0
  186. package/dist/components-charts/time-series-chart/index.mjs +4 -0
  187. package/dist/components-charts/tooltip-sync/index.d.mts +3 -0
  188. package/dist/components-charts/tooltip-sync/index.mjs +4 -0
  189. package/dist/components-charts/x-axis/index.d.mts +3 -0
  190. package/dist/components-charts/x-axis/index.mjs +4 -0
  191. package/dist/components-charts/y-axis/index.d.mts +3 -0
  192. package/dist/components-charts/y-axis/index.mjs +4 -0
  193. package/dist/components-elements-accordion.d.mts +59 -0
  194. package/dist/components-elements-accordion.mjs +275 -0
  195. package/dist/components-elements-accordion.mjs.map +1 -0
  196. package/dist/components-elements-alert.d.mts +3 -0
  197. package/dist/components-elements-alert.mjs +4 -0
  198. package/dist/components-elements-avatar.d.mts +24 -0
  199. package/dist/components-elements-avatar.mjs +4 -0
  200. package/dist/components-elements-badge.d.mts +4 -0
  201. package/dist/components-elements-badge.mjs +4 -0
  202. package/dist/components-elements-button.d.mts +4 -0
  203. package/dist/components-elements-button.mjs +4 -0
  204. package/dist/components-elements-card.d.mts +3 -0
  205. package/dist/components-elements-card.mjs +4 -0
  206. package/dist/components-elements-carousel.d.mts +5 -0
  207. package/dist/components-elements-carousel.mjs +4 -0
  208. package/dist/components-elements-chart.d.mts +24 -0
  209. package/dist/components-elements-chart.mjs +226 -0
  210. package/dist/components-elements-chart.mjs.map +1 -0
  211. package/dist/components-elements-collapsible.d.mts +3 -0
  212. package/dist/components-elements-collapsible.mjs +4 -0
  213. package/dist/components-elements-dialog.d.mts +3 -0
  214. package/dist/components-elements-dialog.mjs +4 -0
  215. package/dist/components-elements-dropdown-menu.d.mts +3 -0
  216. package/dist/components-elements-dropdown-menu.mjs +4 -0
  217. package/dist/components-elements-dynamic-breadcrumb.d.mts +16 -0
  218. package/dist/components-elements-dynamic-breadcrumb.mjs +4 -0
  219. package/dist/components-elements-empty.d.mts +18 -0
  220. package/dist/components-elements-empty.mjs +199 -0
  221. package/dist/components-elements-empty.mjs.map +1 -0
  222. package/dist/components-elements-hover-card.d.mts +3 -0
  223. package/dist/components-elements-hover-card.mjs +4 -0
  224. package/dist/components-elements-loading-dots.d.mts +3 -0
  225. package/dist/components-elements-loading-dots.mjs +4 -0
  226. package/dist/components-elements-pagination-controls.d.mts +28 -0
  227. package/dist/components-elements-pagination-controls.mjs +4 -0
  228. package/dist/components-elements-progress.d.mts +28 -0
  229. package/dist/components-elements-progress.mjs +4 -0
  230. package/dist/components-elements-resizable.d.mts +31 -0
  231. package/dist/components-elements-resizable.mjs +4 -0
  232. package/dist/components-elements-scroll-area.d.mts +3 -0
  233. package/dist/components-elements-scroll-area.mjs +4 -0
  234. package/dist/components-elements-separator.d.mts +3 -0
  235. package/dist/components-elements-separator.mjs +4 -0
  236. package/dist/components-elements-skeleton.d.mts +3 -0
  237. package/dist/components-elements-skeleton.mjs +4 -0
  238. package/dist/components-elements-status-badge.d.mts +22 -0
  239. package/dist/components-elements-status-badge.mjs +174 -0
  240. package/dist/components-elements-status-badge.mjs.map +1 -0
  241. package/dist/components-elements-table.d.mts +44 -0
  242. package/dist/components-elements-table.mjs +4 -0
  243. package/dist/components-elements-tabs.d.mts +43 -0
  244. package/dist/components-elements-tabs.mjs +435 -0
  245. package/dist/components-elements-tabs.mjs.map +1 -0
  246. package/dist/components-elements-tooltip.d.mts +3 -0
  247. package/dist/components-elements-tooltip.mjs +4 -0
  248. package/dist/components-filter/filter-list/index.d.mts +4 -0
  249. package/dist/components-filter/filter-list/index.mjs +4 -0
  250. package/dist/components-filter/filter-select/index.d.mts +4 -0
  251. package/dist/components-filter/filter-select/index.mjs +4 -0
  252. package/dist/components-forms/checkbox/index.d.mts +27 -0
  253. package/dist/components-forms/checkbox/index.mjs +4 -0
  254. package/dist/components-forms/combobox/index.d.mts +5 -0
  255. package/dist/components-forms/combobox/index.mjs +4 -0
  256. package/dist/components-forms/date-picker/index.d.mts +3 -0
  257. package/dist/components-forms/date-picker/index.mjs +4 -0
  258. package/dist/components-forms/file-upload/index.d.mts +49 -0
  259. package/dist/components-forms/file-upload/index.mjs +323 -0
  260. package/dist/components-forms/file-upload/index.mjs.map +1 -0
  261. package/dist/components-forms/input/index.d.mts +3 -0
  262. package/dist/components-forms/input/index.mjs +4 -0
  263. package/dist/components-forms/input-group/index.d.mts +5 -0
  264. package/dist/components-forms/input-group/index.mjs +4 -0
  265. package/dist/components-forms/label/index.d.mts +23 -0
  266. package/dist/components-forms/label/index.mjs +4 -0
  267. package/dist/components-forms/radio-group/index.d.mts +29 -0
  268. package/dist/components-forms/radio-group/index.mjs +215 -0
  269. package/dist/components-forms/radio-group/index.mjs.map +1 -0
  270. package/dist/components-forms/select/index.d.mts +3 -0
  271. package/dist/components-forms/select/index.mjs +4 -0
  272. package/dist/components-forms/switch/index.d.mts +30 -0
  273. package/dist/components-forms/switch/index.mjs +4 -0
  274. package/dist/components-forms/textarea/index.d.mts +19 -0
  275. package/dist/components-forms/textarea/index.mjs +4 -0
  276. package/dist/components-layout/app-sidebar/index.d.mts +47 -0
  277. package/dist/components-layout/app-sidebar/index.mjs +340 -0
  278. package/dist/components-layout/app-sidebar/index.mjs.map +1 -0
  279. package/dist/components-layout/artifact-panel/index.d.mts +3 -0
  280. package/dist/components-layout/artifact-panel/index.mjs +4 -0
  281. package/dist/components-layout/content-sidebar/index.d.mts +89 -0
  282. package/dist/components-layout/content-sidebar/index.mjs +202 -0
  283. package/dist/components-layout/content-sidebar/index.mjs.map +1 -0
  284. package/dist/components-layout/nav-app-switcher/index.d.mts +3 -0
  285. package/dist/components-layout/nav-app-switcher/index.mjs +4 -0
  286. package/dist/components-layout/nav-main/index.d.mts +30 -0
  287. package/dist/components-layout/nav-main/index.mjs +4 -0
  288. package/dist/components-layout/nav-projects/index.d.mts +18 -0
  289. package/dist/components-layout/nav-projects/index.mjs +153 -0
  290. package/dist/components-layout/nav-projects/index.mjs.map +1 -0
  291. package/dist/components-layout/nav-secondary/index.d.mts +31 -0
  292. package/dist/components-layout/nav-secondary/index.mjs +4 -0
  293. package/dist/components-layout/nav-user/index.d.mts +17 -0
  294. package/dist/components-layout/nav-user/index.mjs +4 -0
  295. package/dist/components-layout/oneapp/index.mjs +4 -0
  296. package/dist/components-layout/sidebar/index.d.mts +8 -0
  297. package/dist/components-layout/sidebar/index.mjs +4 -0
  298. package/dist/components-layout/sidebar-inset-header-portal/index.d.mts +3 -0
  299. package/dist/components-layout/sidebar-inset-header-portal/index.mjs +4 -0
  300. package/dist/components-layout/sidebar-slots/index.d.mts +3 -0
  301. package/dist/components-layout/sidebar-slots/index.mjs +4 -0
  302. package/dist/components-layout/theme-provider/index.d.mts +15 -0
  303. package/dist/components-layout/theme-provider/index.mjs +4 -0
  304. package/dist/components-layout-app-shell.d.mts +83 -0
  305. package/dist/components-layout-app-shell.mjs +185 -0
  306. package/dist/components-layout-app-shell.mjs.map +1 -0
  307. package/dist/components-layout-oneapp.d.mts +84 -0
  308. package/dist/components-layout-oneapp.mjs +4 -0
  309. package/dist/components-overlays-confirm-dialog.d.mts +38 -0
  310. package/dist/components-overlays-confirm-dialog.mjs +145 -0
  311. package/dist/components-overlays-confirm-dialog.mjs.map +1 -0
  312. package/dist/components-overlays-toast.d.mts +16 -0
  313. package/dist/components-overlays-toast.mjs +127 -0
  314. package/dist/components-overlays-toast.mjs.map +1 -0
  315. package/dist/connection-D_kWZtAX.mjs +105 -0
  316. package/dist/connection-D_kWZtAX.mjs.map +1 -0
  317. package/dist/dark-mode-B4L-MZr7.mjs +288 -0
  318. package/dist/dark-mode-B4L-MZr7.mjs.map +1 -0
  319. package/dist/dark-mode-CYb7lJ6G.d.mts +191 -0
  320. package/dist/date-range-picker-CdemRFs_.mjs +676 -0
  321. package/dist/date-range-picker-CdemRFs_.mjs.map +1 -0
  322. package/dist/dialog-Di5QhIga.d.mts +31 -0
  323. package/dist/dialog-DuluSpxA.mjs +293 -0
  324. package/dist/dialog-DuluSpxA.mjs.map +1 -0
  325. package/dist/dropdown-menu-91g1g_Cl.mjs +379 -0
  326. package/dist/dropdown-menu-91g1g_Cl.mjs.map +1 -0
  327. package/dist/dropdown-menu-CwRZCnNs.d.mts +91 -0
  328. package/dist/dynamic-breadcrumb-33t_hdEI.mjs +385 -0
  329. package/dist/dynamic-breadcrumb-33t_hdEI.mjs.map +1 -0
  330. package/dist/error-boundary-Ggc5btkU.mjs +297 -0
  331. package/dist/error-boundary-Ggc5btkU.mjs.map +1 -0
  332. package/dist/filter-list-BMT7Nrli.d.mts +27 -0
  333. package/dist/filter-list-B_9aV5Lp.mjs +279 -0
  334. package/dist/filter-list-B_9aV5Lp.mjs.map +1 -0
  335. package/dist/filter-select-COLb1S5z.d.mts +34 -0
  336. package/dist/filter-select-CYfBhJ_E.mjs +341 -0
  337. package/dist/filter-select-CYfBhJ_E.mjs.map +1 -0
  338. package/dist/fonts.d.mts +22 -0
  339. package/dist/fonts.mjs +104 -0
  340. package/dist/fonts.mjs.map +1 -0
  341. package/dist/funnel-chart-CUpUr1pl.d.mts +22 -0
  342. package/dist/funnel-chart-fdwagDvc.mjs +318 -0
  343. package/dist/funnel-chart-fdwagDvc.mjs.map +1 -0
  344. package/dist/generative-ui-renderer-D0ZgNRZF.mjs +484 -0
  345. package/dist/generative-ui-renderer-D0ZgNRZF.mjs.map +1 -0
  346. package/dist/generative-ui-renderer-D69qYK0D.d.mts +32 -0
  347. package/dist/hooks/index.d.mts +5 -0
  348. package/dist/hooks/index.mjs +6 -0
  349. package/dist/hooks/use-mobile.d.mts +6 -0
  350. package/dist/hooks/use-mobile.mjs +45 -0
  351. package/dist/hooks/use-mobile.mjs.map +1 -0
  352. package/dist/hooks/use-responsive.d.mts +13 -0
  353. package/dist/hooks/use-responsive.mjs +50 -0
  354. package/dist/hooks/use-responsive.mjs.map +1 -0
  355. package/dist/hooks/use-scroll-progress.d.mts +17 -0
  356. package/dist/hooks/use-scroll-progress.mjs +62 -0
  357. package/dist/hooks/use-scroll-progress.mjs.map +1 -0
  358. package/dist/hooks/use-toast.d.mts +21 -0
  359. package/dist/hooks/use-toast.mjs +40 -0
  360. package/dist/hooks/use-toast.mjs.map +1 -0
  361. package/dist/hover-card-BqEpbXMp.d.mts +31 -0
  362. package/dist/hover-card-nn4fjJOh.mjs +161 -0
  363. package/dist/hover-card-nn4fjJOh.mjs.map +1 -0
  364. package/dist/index-AwyfWaOP.d.mts +60 -0
  365. package/dist/index.d.mts +503 -0
  366. package/dist/index.mjs +2158 -0
  367. package/dist/index.mjs.map +1 -0
  368. package/dist/input-CT1C9DMs.d.mts +19 -0
  369. package/dist/input-D0T5jbR6.d.mts +19 -0
  370. package/dist/input-DhpkXN3J.mjs +176 -0
  371. package/dist/input-DhpkXN3J.mjs.map +1 -0
  372. package/dist/input-group-CTBpkGI9.mjs +231 -0
  373. package/dist/input-group-CTBpkGI9.mjs.map +1 -0
  374. package/dist/input-group-DcDPUaQ3.d.mts +20 -0
  375. package/dist/input-group-VSZJM_on.d.mts +20 -0
  376. package/dist/integrations-COjiOhkd.d.mts +60 -0
  377. package/dist/integrations-Doz6nfxm.d.mts +60 -0
  378. package/dist/integrations-lBG309ZD.mjs +471 -0
  379. package/dist/integrations-lBG309ZD.mjs.map +1 -0
  380. package/dist/label-DnUThLUR.mjs +148 -0
  381. package/dist/label-DnUThLUR.mjs.map +1 -0
  382. package/dist/lib/export-csv.d.mts +12 -0
  383. package/dist/lib/export-csv.mjs +63 -0
  384. package/dist/lib/export-csv.mjs.map +1 -0
  385. package/dist/lib/index.d.mts +6 -0
  386. package/dist/lib/index.mjs +7 -0
  387. package/dist/lib/resize-image.d.mts +11 -0
  388. package/dist/lib/resize-image.mjs +66 -0
  389. package/dist/lib/resize-image.mjs.map +1 -0
  390. package/dist/lib/stable-sort.d.mts +6 -0
  391. package/dist/lib/stable-sort.mjs +33 -0
  392. package/dist/lib/stable-sort.mjs.map +1 -0
  393. package/dist/lib/utils.d.mts +8 -0
  394. package/dist/lib/utils.mjs +4 -0
  395. package/dist/lib-utils.mjs +4 -0
  396. package/dist/loader-B2SF0yPJ.mjs +168 -0
  397. package/dist/loader-B2SF0yPJ.mjs.map +1 -0
  398. package/dist/loading-dots-DJfxDgv3.mjs +119 -0
  399. package/dist/loading-dots-DJfxDgv3.mjs.map +1 -0
  400. package/dist/loading-dots-DvR1lwC-.d.mts +11 -0
  401. package/dist/mini-area-chart-GIUU-ZLo.d.mts +30 -0
  402. package/dist/mini-area-chart-s5ItHBk8.mjs +225 -0
  403. package/dist/mini-area-chart-s5ItHBk8.mjs.map +1 -0
  404. package/dist/motion-DLlwbMJ0.d.mts +33 -0
  405. package/dist/motion-zelaDelJ.mjs +47 -0
  406. package/dist/motion-zelaDelJ.mjs.map +1 -0
  407. package/dist/nav-app-switcher-B1NTlYrm.d.mts +43 -0
  408. package/dist/nav-app-switcher-V7aJAC18.mjs +235 -0
  409. package/dist/nav-app-switcher-V7aJAC18.mjs.map +1 -0
  410. package/dist/nav-main-BscfzNoi.mjs +105 -0
  411. package/dist/nav-main-BscfzNoi.mjs.map +1 -0
  412. package/dist/nav-secondary-t-xeA0I4.mjs +51 -0
  413. package/dist/nav-secondary-t-xeA0I4.mjs.map +1 -0
  414. package/dist/nav-user-A4YHm3-O.mjs +193 -0
  415. package/dist/nav-user-A4YHm3-O.mjs.map +1 -0
  416. package/dist/node-BKXOPjw9.d.mts +100 -0
  417. package/dist/node-CdmDD4k-.mjs +116 -0
  418. package/dist/node-CdmDD4k-.mjs.map +1 -0
  419. package/dist/oneapp-CfwhNatF.mjs +322 -0
  420. package/dist/oneapp-CfwhNatF.mjs.map +1 -0
  421. package/dist/pagination-controls-CE3-eCxI.mjs +135 -0
  422. package/dist/pagination-controls-CE3-eCxI.mjs.map +1 -0
  423. package/dist/popover-DmWxl2lW.mjs +198 -0
  424. package/dist/popover-DmWxl2lW.mjs.map +1 -0
  425. package/dist/preview.d.mts +6 -0
  426. package/dist/progress-BWxdthl4.mjs +230 -0
  427. package/dist/progress-BWxdthl4.mjs.map +1 -0
  428. package/dist/prompt-input-SFJ9_lNw.mjs +1149 -0
  429. package/dist/prompt-input-SFJ9_lNw.mjs.map +1 -0
  430. package/dist/resizable--DaTse0W.mjs +124 -0
  431. package/dist/resizable--DaTse0W.mjs.map +1 -0
  432. package/dist/scroll-area-Bxi-Edjc.mjs +139 -0
  433. package/dist/scroll-area-Bxi-Edjc.mjs.map +1 -0
  434. package/dist/scroll-area-CDRGG59G.d.mts +19 -0
  435. package/dist/select-DI6PzHN3.mjs +411 -0
  436. package/dist/select-DI6PzHN3.mjs.map +1 -0
  437. package/dist/select-csqviwUw.d.mts +44 -0
  438. package/dist/separator-BG9BqZqg.d.mts +20 -0
  439. package/dist/separator-CNQqqwfO.d.mts +20 -0
  440. package/dist/separator-veJJBul5.mjs +118 -0
  441. package/dist/separator-veJJBul5.mjs.map +1 -0
  442. package/dist/shared-BqVcofZN.d.mts +91 -0
  443. package/dist/shared-auth.d.mts +5 -0
  444. package/dist/shared-auth.mjs +6 -0
  445. package/dist/shimmer-BLRAD4VL.mjs +102 -0
  446. package/dist/shimmer-BLRAD4VL.mjs.map +1 -0
  447. package/dist/sidebar-CPteoqnB.d.mts +163 -0
  448. package/dist/sidebar-CdWE7H3R.mjs +814 -0
  449. package/dist/sidebar-CdWE7H3R.mjs.map +1 -0
  450. package/dist/sidebar-DYgXCHqQ.d.mts +163 -0
  451. package/dist/sidebar-inset-header-portal-CIRN-lKw.mjs +153 -0
  452. package/dist/sidebar-inset-header-portal-CIRN-lKw.mjs.map +1 -0
  453. package/dist/sidebar-inset-header-portal-DjfK7xCt.d.mts +24 -0
  454. package/dist/sidebar-slots-DNCEnx5L.mjs +135 -0
  455. package/dist/sidebar-slots-DNCEnx5L.mjs.map +1 -0
  456. package/dist/sidebar-slots-OqNmzlIk.d.mts +47 -0
  457. package/dist/skeleton-ByXUFNDF.d.mts +35 -0
  458. package/dist/skeleton-aXwA3YID.mjs +211 -0
  459. package/dist/skeleton-aXwA3YID.mjs.map +1 -0
  460. package/dist/sources.css +16 -0
  461. package/dist/storybook-preview.mjs +184 -0
  462. package/dist/storybook-preview.mjs.map +1 -0
  463. package/dist/styles/colors.css +166 -0
  464. package/dist/styles/index.css +2 -0
  465. package/dist/styles/mantine.css +1024 -0
  466. package/dist/styles/spacing.css +62 -0
  467. package/dist/styles/theme.css +1687 -0
  468. package/dist/styles/typography.css +59 -0
  469. package/dist/styles/variables.css +998 -0
  470. package/dist/styles.css +1 -0
  471. package/dist/switch-BFct1r4a.mjs +223 -0
  472. package/dist/switch-BFct1r4a.mjs.map +1 -0
  473. package/dist/table-DNkLM1TB.mjs +261 -0
  474. package/dist/table-DNkLM1TB.mjs.map +1 -0
  475. package/dist/textarea-MpLFc9sB.mjs +173 -0
  476. package/dist/textarea-MpLFc9sB.mjs.map +1 -0
  477. package/dist/theme-provider-4D34sBmG.mjs +83 -0
  478. package/dist/theme-provider-4D34sBmG.mjs.map +1 -0
  479. package/dist/time-series-chart-B66xH88w.d.mts +69 -0
  480. package/dist/time-series-chart-DxnknDhW.mjs +400 -0
  481. package/dist/time-series-chart-DxnknDhW.mjs.map +1 -0
  482. package/dist/tokens/tokens.dtcg.json +4353 -0
  483. package/dist/tokens/tokens.json +895 -0
  484. package/dist/tokens-mantine-types.d.mts +3 -0
  485. package/dist/tokens-mantine-types.mjs +4 -0
  486. package/dist/tokens.css +2 -0
  487. package/dist/tokens.d.mts +9398 -0
  488. package/dist/tokens.mjs +9311 -0
  489. package/dist/tokens.mjs.map +1 -0
  490. package/dist/tooltip-B8_zKnHC.mjs +301 -0
  491. package/dist/tooltip-B8_zKnHC.mjs.map +1 -0
  492. package/dist/tooltip-BA27ygge.d.mts +44 -0
  493. package/dist/tooltip-FqB3srL-.d.mts +44 -0
  494. package/dist/tooltip-sync-Ax1GmpjC.d.mts +17 -0
  495. package/dist/tooltip-sync-DzJUgiTM.mjs +85 -0
  496. package/dist/tooltip-sync-DzJUgiTM.mjs.map +1 -0
  497. package/dist/types-B8z57DW2.d.mts +41 -0
  498. package/dist/use-artifact-panel-state-CUQTn2Uq.mjs +346 -0
  499. package/dist/use-artifact-panel-state-CUQTn2Uq.mjs.map +1 -0
  500. package/dist/use-artifact-panel-state-DPZC--sz.d.mts +150 -0
  501. package/dist/utils-BJGrUJ6T.mjs +77 -0
  502. package/dist/utils-BJGrUJ6T.mjs.map +1 -0
  503. package/dist/utils-D2bGp2p_.mjs +33 -0
  504. package/dist/utils-D2bGp2p_.mjs.map +1 -0
  505. package/dist/x-axis-BY00htJY.mjs +137 -0
  506. package/dist/x-axis-BY00htJY.mjs.map +1 -0
  507. package/dist/x-axis-Dh66iD8l.d.mts +21 -0
  508. package/dist/y-axis-DgHlVHRG.mjs +118 -0
  509. package/dist/y-axis-DgHlVHRG.mjs.map +1 -0
  510. package/dist/y-axis-DocBbrSp.d.mts +23 -0
  511. package/dist/z-index-BlBlZL-F.d.mts +10775 -0
  512. package/package.json +429 -0
  513. package/src/ai-oneapp/flow-chat/index.ts +3 -0
  514. package/src/ai-oneapp/flow-chat/node-suggestion-card.tsx +37 -0
  515. package/src/ai-oneapp/flow-chat/template-suggestion-card.tsx +49 -0
  516. package/src/ai-oneapp/flow-chat/workflow-action-toast.tsx +55 -0
  517. package/src/components/.gitkeep +0 -0
  518. package/src/components/ai-elements/__tests__/test-utils.tsx +12 -0
  519. package/src/components/ai-elements/actions/actions.stories.tsx +288 -0
  520. package/src/components/ai-elements/actions/actions.test.tsx +60 -0
  521. package/src/components/ai-elements/actions/actions.tsx +286 -0
  522. package/src/components/ai-elements/actions/index.ts +7 -0
  523. package/src/components/ai-elements/agent-step/agent-step.stories.tsx +167 -0
  524. package/src/components/ai-elements/agent-step/agent-step.tsx +206 -0
  525. package/src/components/ai-elements/agent-step/index.ts +7 -0
  526. package/src/components/ai-elements/ai-elements.constants.ts +516 -0
  527. package/src/components/ai-elements/artifact/artifact.stories.tsx +199 -0
  528. package/src/components/ai-elements/artifact/artifact.tsx +277 -0
  529. package/src/components/ai-elements/artifact/index.ts +7 -0
  530. package/src/components/ai-elements/branch/branch.stories.tsx +212 -0
  531. package/src/components/ai-elements/branch/branch.test.tsx +148 -0
  532. package/src/components/ai-elements/branch/branch.tsx +502 -0
  533. package/src/components/ai-elements/branch/index.ts +7 -0
  534. package/src/components/ai-elements/chain-of-thought/chain-of-thought.stories.tsx +172 -0
  535. package/src/components/ai-elements/chain-of-thought/chain-of-thought.tsx +505 -0
  536. package/src/components/ai-elements/chain-of-thought/index.ts +7 -0
  537. package/src/components/ai-elements/chat-input/chat-input.stories.tsx +185 -0
  538. package/src/components/ai-elements/chat-input/chat-input.tsx +201 -0
  539. package/src/components/ai-elements/chat-input/index.ts +7 -0
  540. package/src/components/ai-elements/checkpoint/checkpoint.stories.tsx +171 -0
  541. package/src/components/ai-elements/checkpoint/checkpoint.tsx +256 -0
  542. package/src/components/ai-elements/checkpoint/index.ts +7 -0
  543. package/src/components/ai-elements/code-block/code-block.stories.tsx +317 -0
  544. package/src/components/ai-elements/code-block/code-block.tsx +366 -0
  545. package/src/components/ai-elements/code-block/index.ts +7 -0
  546. package/src/components/ai-elements/confirmation/confirmation.stories.tsx +236 -0
  547. package/src/components/ai-elements/confirmation/confirmation.tsx +465 -0
  548. package/src/components/ai-elements/confirmation/index.ts +7 -0
  549. package/src/components/ai-elements/context/context.stories.tsx +80 -0
  550. package/src/components/ai-elements/context/context.tsx +585 -0
  551. package/src/components/ai-elements/context/index.ts +7 -0
  552. package/src/components/ai-elements/conversation/__tests__/conversation.test.tsx +402 -0
  553. package/src/components/ai-elements/conversation/conversation.stories.tsx +1019 -0
  554. package/src/components/ai-elements/conversation/conversation.tsx +260 -0
  555. package/src/components/ai-elements/conversation/index.ts +7 -0
  556. package/src/components/ai-elements/custom/__tests__/accessibility.test.tsx +27 -0
  557. package/src/components/ai-elements/custom/__tests__/chat-container.test.tsx +30 -0
  558. package/src/components/ai-elements/custom/__tests__/conversation-history.test.tsx +100 -0
  559. package/src/components/ai-elements/custom/__tests__/export-dropdown.test.tsx +60 -0
  560. package/src/components/ai-elements/custom/ai-label/ai-label.stories.tsx +86 -0
  561. package/src/components/ai-elements/custom/ai-label/ai-label.tsx +291 -0
  562. package/src/components/ai-elements/custom/ai-label/index.ts +7 -0
  563. package/src/components/ai-elements/custom/artifact-skeleton/artifact-skeleton.stories.tsx +155 -0
  564. package/src/components/ai-elements/custom/artifact-skeleton/artifact-skeleton.tsx +269 -0
  565. package/src/components/ai-elements/custom/artifact-skeleton/index.ts +18 -0
  566. package/src/components/ai-elements/custom/audio-player/audio-player.stories.tsx +50 -0
  567. package/src/components/ai-elements/custom/audio-player/audio-player.tsx +296 -0
  568. package/src/components/ai-elements/custom/audio-player/index.ts +1 -0
  569. package/src/components/ai-elements/custom/button-group/button-group.stories.tsx +108 -0
  570. package/src/components/ai-elements/custom/button-group/button-group.tsx +142 -0
  571. package/src/components/ai-elements/custom/button-group/index.ts +15 -0
  572. package/src/components/ai-elements/custom/chat-container/chat-container.stories.tsx +143 -0
  573. package/src/components/ai-elements/custom/chat-container/chat-container.tsx +406 -0
  574. package/src/components/ai-elements/custom/chat-container/index.ts +9 -0
  575. package/src/components/ai-elements/custom/collapsible/collapsible.stories.tsx +130 -0
  576. package/src/components/ai-elements/custom/collapsible/index.ts +11 -0
  577. package/src/components/ai-elements/custom/collapsible/use-collapsible.tsx +240 -0
  578. package/src/components/ai-elements/custom/collapsible-content/collapsible-content.stories.tsx +113 -0
  579. package/src/components/ai-elements/custom/collapsible-content/collapsible-content.tsx +141 -0
  580. package/src/components/ai-elements/custom/collapsible-content/index.ts +7 -0
  581. package/src/components/ai-elements/custom/content-placeholder/content-placeholder.stories.tsx +82 -0
  582. package/src/components/ai-elements/custom/content-placeholder/content-placeholder.tsx +319 -0
  583. package/src/components/ai-elements/custom/content-placeholder/index.ts +10 -0
  584. package/src/components/ai-elements/custom/conversation-header/conversation-header.stories.tsx +102 -0
  585. package/src/components/ai-elements/custom/conversation-header/conversation-header.tsx +202 -0
  586. package/src/components/ai-elements/custom/conversation-header/index.ts +12 -0
  587. package/src/components/ai-elements/custom/conversation-history/conversation-history.stories.tsx +191 -0
  588. package/src/components/ai-elements/custom/conversation-history/conversation-history.tsx +515 -0
  589. package/src/components/ai-elements/custom/conversation-history/index.ts +16 -0
  590. package/src/components/ai-elements/custom/diff-view/diff-view.stories.tsx +173 -0
  591. package/src/components/ai-elements/custom/diff-view/diff-view.tsx +261 -0
  592. package/src/components/ai-elements/custom/diff-view/index.ts +7 -0
  593. package/src/components/ai-elements/custom/draggable-tabs/draggable-tabs.stories.tsx +157 -0
  594. package/src/components/ai-elements/custom/draggable-tabs/draggable-tabs.tsx +311 -0
  595. package/src/components/ai-elements/custom/draggable-tabs/index.ts +7 -0
  596. package/src/components/ai-elements/custom/export-conversation/export-conversation.stories.tsx +73 -0
  597. package/src/components/ai-elements/custom/export-conversation/export-conversation.tsx +405 -0
  598. package/src/components/ai-elements/custom/export-conversation/index.ts +10 -0
  599. package/src/components/ai-elements/custom/export-dropdown/export-dropdown.stories.tsx +121 -0
  600. package/src/components/ai-elements/custom/export-dropdown/export-dropdown.tsx +315 -0
  601. package/src/components/ai-elements/custom/export-dropdown/index.ts +11 -0
  602. package/src/components/ai-elements/custom/feedback/feedback.stories.tsx +85 -0
  603. package/src/components/ai-elements/custom/feedback/feedback.tsx +425 -0
  604. package/src/components/ai-elements/custom/feedback/index.ts +13 -0
  605. package/src/components/ai-elements/custom/file-card/file-card.stories.tsx +65 -0
  606. package/src/components/ai-elements/custom/file-card/file-card.tsx +249 -0
  607. package/src/components/ai-elements/custom/file-card/index.ts +1 -0
  608. package/src/components/ai-elements/custom/file-tree/file-tree.stories.tsx +96 -0
  609. package/src/components/ai-elements/custom/file-tree/file-tree.tsx +266 -0
  610. package/src/components/ai-elements/custom/file-tree/index.ts +7 -0
  611. package/src/components/ai-elements/custom/index.ts +73 -0
  612. package/src/components/ai-elements/custom/keyboard-shortcut/index.ts +14 -0
  613. package/src/components/ai-elements/custom/keyboard-shortcut/keyboard-shortcut.stories.tsx +118 -0
  614. package/src/components/ai-elements/custom/keyboard-shortcut/keyboard-shortcut.tsx +292 -0
  615. package/src/components/ai-elements/custom/message-edit/index.ts +1 -0
  616. package/src/components/ai-elements/custom/message-edit/message-edit.stories.tsx +88 -0
  617. package/src/components/ai-elements/custom/message-edit/message-edit.tsx +225 -0
  618. package/src/components/ai-elements/custom/message-error/index.ts +7 -0
  619. package/src/components/ai-elements/custom/message-error/message-error.stories.tsx +85 -0
  620. package/src/components/ai-elements/custom/message-error/message-error.tsx +301 -0
  621. package/src/components/ai-elements/custom/message-group/index.ts +1 -0
  622. package/src/components/ai-elements/custom/message-group/message-group.stories.tsx +82 -0
  623. package/src/components/ai-elements/custom/message-group/message-group.tsx +77 -0
  624. package/src/components/ai-elements/custom/message-separator/index.ts +1 -0
  625. package/src/components/ai-elements/custom/message-separator/message-separator.stories.tsx +65 -0
  626. package/src/components/ai-elements/custom/message-separator/message-separator.tsx +132 -0
  627. package/src/components/ai-elements/custom/scroll-to-bottom/index.ts +11 -0
  628. package/src/components/ai-elements/custom/scroll-to-bottom/scroll-to-bottom.stories.tsx +116 -0
  629. package/src/components/ai-elements/custom/scroll-to-bottom/use-scroll-to-bottom.tsx +215 -0
  630. package/src/components/ai-elements/custom/snippet/index.ts +1 -0
  631. package/src/components/ai-elements/custom/snippet/snippet.stories.tsx +59 -0
  632. package/src/components/ai-elements/custom/snippet/snippet.tsx +158 -0
  633. package/src/components/ai-elements/custom/stack-trace/index.ts +1 -0
  634. package/src/components/ai-elements/custom/stack-trace/stack-trace.stories.tsx +112 -0
  635. package/src/components/ai-elements/custom/stack-trace/stack-trace.tsx +368 -0
  636. package/src/components/ai-elements/custom/terminal/index.ts +9 -0
  637. package/src/components/ai-elements/custom/terminal/terminal.stories.tsx +92 -0
  638. package/src/components/ai-elements/custom/terminal/terminal.tsx +233 -0
  639. package/src/components/ai-elements/custom/test-results/test-results.tsx +438 -0
  640. package/src/components/ai-elements/custom/thought-chain/index.ts +7 -0
  641. package/src/components/ai-elements/custom/thought-chain/thought-chain.stories.tsx +123 -0
  642. package/src/components/ai-elements/custom/thought-chain/thought-chain.tsx +246 -0
  643. package/src/components/ai-elements/custom/token-usage/index.ts +6 -0
  644. package/src/components/ai-elements/custom/token-usage/token-usage.stories.tsx +104 -0
  645. package/src/components/ai-elements/custom/token-usage/token-usage.tsx +236 -0
  646. package/src/components/ai-elements/custom/transcription/index.ts +1 -0
  647. package/src/components/ai-elements/custom/transcription/transcription.stories.tsx +80 -0
  648. package/src/components/ai-elements/custom/transcription/transcription.tsx +163 -0
  649. package/src/components/ai-elements/custom/typing-indicator/index.ts +1 -0
  650. package/src/components/ai-elements/custom/typing-indicator/typing-indicator.stories.tsx +71 -0
  651. package/src/components/ai-elements/custom/typing-indicator/typing-indicator.tsx +126 -0
  652. package/src/components/ai-elements/custom/undo-redo/index.ts +12 -0
  653. package/src/components/ai-elements/custom/undo-redo/undo-redo.stories.tsx +145 -0
  654. package/src/components/ai-elements/custom/undo-redo/use-undo-redo.tsx +324 -0
  655. package/src/components/ai-elements/custom/voice-selector/index.ts +7 -0
  656. package/src/components/ai-elements/custom/voice-selector/voice-selector.stories.tsx +67 -0
  657. package/src/components/ai-elements/custom/voice-selector/voice-selector.tsx +301 -0
  658. package/src/components/ai-elements/custom/welcome/index.ts +1 -0
  659. package/src/components/ai-elements/custom/welcome/welcome.stories.tsx +92 -0
  660. package/src/components/ai-elements/custom/welcome/welcome.tsx +213 -0
  661. package/src/components/ai-elements/generative-ui/generative-ui-renderer.stories.tsx +451 -0
  662. package/src/components/ai-elements/generative-ui/generative-ui-renderer.test.tsx +383 -0
  663. package/src/components/ai-elements/generative-ui/generative-ui-renderer.tsx +668 -0
  664. package/src/components/ai-elements/generative-ui/index.ts +21 -0
  665. package/src/components/ai-elements/image/image.stories.tsx +179 -0
  666. package/src/components/ai-elements/image/image.tsx +178 -0
  667. package/src/components/ai-elements/image/index.ts +7 -0
  668. package/src/components/ai-elements/index.ts +195 -0
  669. package/src/components/ai-elements/inline-citation/index.ts +7 -0
  670. package/src/components/ai-elements/inline-citation/inline-citation.stories.tsx +331 -0
  671. package/src/components/ai-elements/inline-citation/inline-citation.tsx +595 -0
  672. package/src/components/ai-elements/loader/index.ts +7 -0
  673. package/src/components/ai-elements/loader/loader.stories.tsx +185 -0
  674. package/src/components/ai-elements/loader/loader.tsx +177 -0
  675. package/src/components/ai-elements/message/__tests__/message.test.tsx +352 -0
  676. package/src/components/ai-elements/message/index.ts +7 -0
  677. package/src/components/ai-elements/message/message-actions.test.tsx +51 -0
  678. package/src/components/ai-elements/message/message.stories.tsx +609 -0
  679. package/src/components/ai-elements/message/message.test.tsx +52 -0
  680. package/src/components/ai-elements/message/message.tsx +1125 -0
  681. package/src/components/ai-elements/message/response.test.tsx +18 -0
  682. package/src/components/ai-elements/model-selector/index.ts +7 -0
  683. package/src/components/ai-elements/model-selector/model-selector.stories.tsx +198 -0
  684. package/src/components/ai-elements/model-selector/model-selector.tsx +406 -0
  685. package/src/components/ai-elements/modernization_walkthrough.md +51 -0
  686. package/src/components/ai-elements/open-in-chat/index.ts +7 -0
  687. package/src/components/ai-elements/open-in-chat/open-in-chat.stories.tsx +221 -0
  688. package/src/components/ai-elements/open-in-chat/open-in-chat.tsx +606 -0
  689. package/src/components/ai-elements/plan/index.ts +7 -0
  690. package/src/components/ai-elements/plan/plan.stories.tsx +233 -0
  691. package/src/components/ai-elements/plan/plan.tsx +337 -0
  692. package/src/components/ai-elements/prompt-char-counter/index.ts +7 -0
  693. package/src/components/ai-elements/prompt-char-counter/prompt-char-counter.stories.tsx +98 -0
  694. package/src/components/ai-elements/prompt-char-counter/prompt-char-counter.tsx +159 -0
  695. package/src/components/ai-elements/prompt-input/index.ts +7 -0
  696. package/src/components/ai-elements/prompt-input/prompt-input.stories.tsx +548 -0
  697. package/src/components/ai-elements/prompt-input/prompt-input.test.tsx +22 -0
  698. package/src/components/ai-elements/prompt-input/prompt-input.tsx +2112 -0
  699. package/src/components/ai-elements/queue/index.ts +7 -0
  700. package/src/components/ai-elements/queue/queue.stories.tsx +249 -0
  701. package/src/components/ai-elements/queue/queue.tsx +456 -0
  702. package/src/components/ai-elements/reasoning/index.ts +7 -0
  703. package/src/components/ai-elements/reasoning/reasoning.stories.tsx +147 -0
  704. package/src/components/ai-elements/reasoning/reasoning.tsx +356 -0
  705. package/src/components/ai-elements/shimmer/index.ts +7 -0
  706. package/src/components/ai-elements/shimmer/shimmer.stories.tsx +240 -0
  707. package/src/components/ai-elements/shimmer/shimmer.tsx +150 -0
  708. package/src/components/ai-elements/sources/index.ts +7 -0
  709. package/src/components/ai-elements/sources/sources.stories.tsx +259 -0
  710. package/src/components/ai-elements/sources/sources.test.tsx +40 -0
  711. package/src/components/ai-elements/sources/sources.tsx +327 -0
  712. package/src/components/ai-elements/suggestion/index.ts +7 -0
  713. package/src/components/ai-elements/suggestion/suggestion.stories.tsx +207 -0
  714. package/src/components/ai-elements/suggestion/suggestion.tsx +229 -0
  715. package/src/components/ai-elements/task/index.ts +7 -0
  716. package/src/components/ai-elements/task/task.stories.tsx +213 -0
  717. package/src/components/ai-elements/task/task.tsx +356 -0
  718. package/src/components/ai-elements/test-utils.tsx +28 -0
  719. package/src/components/ai-elements/tool/index.ts +7 -0
  720. package/src/components/ai-elements/tool/tool.stories.tsx +195 -0
  721. package/src/components/ai-elements/tool/tool.test.tsx +160 -0
  722. package/src/components/ai-elements/tool/tool.tsx +537 -0
  723. package/src/components/ai-elements/tool-approval/index.ts +7 -0
  724. package/src/components/ai-elements/tool-approval/tool-approval.stories.tsx +260 -0
  725. package/src/components/ai-elements/tool-approval/tool-approval.tsx +423 -0
  726. package/src/components/ai-elements/vitest.config.ts +17 -0
  727. package/src/components/ai-elements/vitest.setup.ts +6 -0
  728. package/src/components/ai-elements/web-preview/index.ts +7 -0
  729. package/src/components/ai-elements/web-preview/web-preview.stories.tsx +202 -0
  730. package/src/components/ai-elements/web-preview/web-preview.tsx +1166 -0
  731. package/src/components/ai-workflows/canvas/canvas.stories.tsx +120 -0
  732. package/src/components/ai-workflows/canvas/canvas.tsx +173 -0
  733. package/src/components/ai-workflows/canvas/index.ts +7 -0
  734. package/src/components/ai-workflows/connection/connection.stories.tsx +66 -0
  735. package/src/components/ai-workflows/connection/connection.tsx +119 -0
  736. package/src/components/ai-workflows/connection/index.ts +7 -0
  737. package/src/components/ai-workflows/controls/controls.stories.tsx +72 -0
  738. package/src/components/ai-workflows/controls/controls.tsx +132 -0
  739. package/src/components/ai-workflows/controls/index.ts +7 -0
  740. package/src/components/ai-workflows/edge/edge.stories.tsx +120 -0
  741. package/src/components/ai-workflows/edge/edge.test.tsx +47 -0
  742. package/src/components/ai-workflows/edge/edge.tsx +136 -0
  743. package/src/components/ai-workflows/edge/index.ts +7 -0
  744. package/src/components/ai-workflows/flow-constants.ts +11 -0
  745. package/src/components/ai-workflows/node/index.ts +7 -0
  746. package/src/components/ai-workflows/node/node.stories.tsx +111 -0
  747. package/src/components/ai-workflows/node/node.tsx +227 -0
  748. package/src/components/ai-workflows/panel/index.ts +7 -0
  749. package/src/components/ai-workflows/panel/panel.stories.tsx +102 -0
  750. package/src/components/ai-workflows/panel/panel.tsx +106 -0
  751. package/src/components/ai-workflows/resizable-node/index.ts +7 -0
  752. package/src/components/ai-workflows/resizable-node/resizable-node.stories.tsx +93 -0
  753. package/src/components/ai-workflows/resizable-node/resizable-node.tsx +228 -0
  754. package/src/components/ai-workflows/toolbar/index.ts +7 -0
  755. package/src/components/ai-workflows/toolbar/toolbar.stories.tsx +99 -0
  756. package/src/components/ai-workflows/toolbar/toolbar.tsx +130 -0
  757. package/src/components/auth/client/index.ts +12 -0
  758. package/src/components/auth/client/nav-user/auth-nav-user.tsx +237 -0
  759. package/src/components/auth/client/nav-user/index.ts +11 -0
  760. package/src/components/auth/client/providers/ThemeProvider.stories.tsx +59 -0
  761. package/src/components/auth/client/providers/ThemeProvider.tsx +39 -0
  762. package/src/components/auth/client/providers/index.ts +7 -0
  763. package/src/components/auth/client/providers.tsx +129 -0
  764. package/src/components/auth/index.ts +14 -0
  765. package/src/components/auth/server/account/ProfileForm.stories.tsx +105 -0
  766. package/src/components/auth/server/account/ProfileForm.tsx +236 -0
  767. package/src/components/auth/server/account/index.ts +7 -0
  768. package/src/components/auth/server/actions/index.ts +11 -0
  769. package/src/components/auth/server/actions.ts +88 -0
  770. package/src/components/auth/server/admin/AdminBulkUserActions.stories.tsx +129 -0
  771. package/src/components/auth/server/admin/AdminBulkUserActions.tsx +649 -0
  772. package/src/components/auth/server/admin/AdminDashboard.stories.tsx +215 -0
  773. package/src/components/auth/server/admin/AdminDashboard.tsx +785 -0
  774. package/src/components/auth/server/admin/AdminDevicesManager.tsx +411 -0
  775. package/src/components/auth/server/admin/AdminImpersonation.stories.tsx +121 -0
  776. package/src/components/auth/server/admin/AdminImpersonation.tsx +569 -0
  777. package/src/components/auth/server/admin/AdminPasskeysManager.tsx +393 -0
  778. package/src/components/auth/server/admin/AdminSecurityEventsViewer.tsx +395 -0
  779. package/src/components/auth/server/admin/AdminServiceAccountsManager.tsx +454 -0
  780. package/src/components/auth/server/admin/AdminSessionsManager.tsx +664 -0
  781. package/src/components/auth/server/admin/AdminTwoFactorManager.tsx +431 -0
  782. package/src/components/auth/server/admin/AdminUserCreation.stories.tsx +87 -0
  783. package/src/components/auth/server/admin/AdminUserCreation.tsx +777 -0
  784. package/src/components/auth/server/admin/AdminUserDetail.stories.tsx +178 -0
  785. package/src/components/auth/server/admin/AdminUserDetail.tsx +1044 -0
  786. package/src/components/auth/server/admin/AdminUsersList.stories.tsx +228 -0
  787. package/src/components/auth/server/admin/AdminUsersList.tsx +859 -0
  788. package/src/components/auth/server/admin/index.ts +59 -0
  789. package/src/components/auth/server/advanced/PasskeySetup.stories.tsx +70 -0
  790. package/src/components/auth/server/advanced/PasskeySetup.tsx +383 -0
  791. package/src/components/auth/server/advanced/TwoFactorSetup.stories.tsx +79 -0
  792. package/src/components/auth/server/advanced/TwoFactorSetup.tsx +459 -0
  793. package/src/components/auth/server/advanced/TwoFactorVerify.stories.tsx +69 -0
  794. package/src/components/auth/server/advanced/TwoFactorVerify.tsx +323 -0
  795. package/src/components/auth/server/advanced/index.ts +10 -0
  796. package/src/components/auth/server/api-keys/APIKeysList.stories.tsx +95 -0
  797. package/src/components/auth/server/api-keys/APIKeysList.tsx +470 -0
  798. package/src/components/auth/server/api-keys/CreateAPIKeyForm.stories.tsx +79 -0
  799. package/src/components/auth/server/api-keys/CreateAPIKeyForm.tsx +501 -0
  800. package/src/components/auth/server/api-keys/index.ts +9 -0
  801. package/src/components/auth/server/enhanced/AccountDeletionFlow.stories.tsx +115 -0
  802. package/src/components/auth/server/enhanced/AccountDeletionFlow.tsx +733 -0
  803. package/src/components/auth/server/enhanced/AnonymousSessionCreator.stories.tsx +80 -0
  804. package/src/components/auth/server/enhanced/AnonymousSessionCreator.tsx +398 -0
  805. package/src/components/auth/server/enhanced/AnonymousToAccountConverter.stories.tsx +61 -0
  806. package/src/components/auth/server/enhanced/AnonymousToAccountConverter.tsx +538 -0
  807. package/src/components/auth/server/enhanced/BackupCodesManager.stories.tsx +108 -0
  808. package/src/components/auth/server/enhanced/BackupCodesManager.tsx +718 -0
  809. package/src/components/auth/server/enhanced/BearerTokenGenerator.stories.tsx +85 -0
  810. package/src/components/auth/server/enhanced/BearerTokenGenerator.tsx +618 -0
  811. package/src/components/auth/server/enhanced/ChangePasswordForm.stories.tsx +108 -0
  812. package/src/components/auth/server/enhanced/ChangePasswordForm.tsx +313 -0
  813. package/src/components/auth/server/enhanced/DataExportRequest.stories.tsx +84 -0
  814. package/src/components/auth/server/enhanced/DataExportRequest.tsx +734 -0
  815. package/src/components/auth/server/enhanced/DeviceManagement.stories.tsx +161 -0
  816. package/src/components/auth/server/enhanced/DeviceManagement.tsx +700 -0
  817. package/src/components/auth/server/enhanced/EmailChangeVerification.stories.tsx +94 -0
  818. package/src/components/auth/server/enhanced/EmailChangeVerification.tsx +421 -0
  819. package/src/components/auth/server/enhanced/EmailOTPSignIn.stories.tsx +68 -0
  820. package/src/components/auth/server/enhanced/EmailOTPSignIn.tsx +516 -0
  821. package/src/components/auth/server/enhanced/EmailOTPVerification.stories.tsx +95 -0
  822. package/src/components/auth/server/enhanced/EmailOTPVerification.tsx +610 -0
  823. package/src/components/auth/server/enhanced/EmailVerificationRequest.stories.tsx +97 -0
  824. package/src/components/auth/server/enhanced/EmailVerificationRequest.tsx +461 -0
  825. package/src/components/auth/server/enhanced/EmailVerificationStatus.stories.tsx +96 -0
  826. package/src/components/auth/server/enhanced/EmailVerificationStatus.tsx +631 -0
  827. package/src/components/auth/server/enhanced/MagicLinkRequestForm.stories.tsx +88 -0
  828. package/src/components/auth/server/enhanced/MagicLinkRequestForm.tsx +439 -0
  829. package/src/components/auth/server/enhanced/MagicLinkStatusIndicator.stories.tsx +101 -0
  830. package/src/components/auth/server/enhanced/MagicLinkStatusIndicator.tsx +610 -0
  831. package/src/components/auth/server/enhanced/MultiSessionDashboard.stories.tsx +101 -0
  832. package/src/components/auth/server/enhanced/MultiSessionDashboard.tsx +996 -0
  833. package/src/components/auth/server/enhanced/OrganizationAuditLog.stories.tsx +86 -0
  834. package/src/components/auth/server/enhanced/OrganizationAuditLog.tsx +1006 -0
  835. package/src/components/auth/server/enhanced/PasskeyManagement.stories.tsx +102 -0
  836. package/src/components/auth/server/enhanced/PasskeyManagement.tsx +705 -0
  837. package/src/components/auth/server/enhanced/PasskeyRegistrationWizard.stories.tsx +83 -0
  838. package/src/components/auth/server/enhanced/PasskeyRegistrationWizard.tsx +566 -0
  839. package/src/components/auth/server/enhanced/PasskeySignInInterface.stories.tsx +90 -0
  840. package/src/components/auth/server/enhanced/PasskeySignInInterface.tsx +792 -0
  841. package/src/components/auth/server/enhanced/PasswordStrengthIndicator.stories.tsx +129 -0
  842. package/src/components/auth/server/enhanced/PasswordStrengthIndicator.tsx +539 -0
  843. package/src/components/auth/server/enhanced/PhoneNumberManagement.stories.tsx +103 -0
  844. package/src/components/auth/server/enhanced/PhoneNumberManagement.tsx +594 -0
  845. package/src/components/auth/server/enhanced/PhoneNumberSetupForm.stories.tsx +91 -0
  846. package/src/components/auth/server/enhanced/PhoneNumberSetupForm.tsx +518 -0
  847. package/src/components/auth/server/enhanced/PhoneSignInForm.stories.tsx +63 -0
  848. package/src/components/auth/server/enhanced/PhoneSignInForm.tsx +801 -0
  849. package/src/components/auth/server/enhanced/PhoneSignInWithSMS.stories.tsx +87 -0
  850. package/src/components/auth/server/enhanced/PhoneSignInWithSMS.tsx +886 -0
  851. package/src/components/auth/server/enhanced/PhoneVerificationForm.stories.tsx +81 -0
  852. package/src/components/auth/server/enhanced/PhoneVerificationForm.tsx +306 -0
  853. package/src/components/auth/server/enhanced/ResendVerificationEmail.stories.tsx +84 -0
  854. package/src/components/auth/server/enhanced/ResendVerificationEmail.tsx +407 -0
  855. package/src/components/auth/server/enhanced/SMSVerificationForm.stories.tsx +92 -0
  856. package/src/components/auth/server/enhanced/SMSVerificationForm.tsx +521 -0
  857. package/src/components/auth/server/enhanced/SecurityEventLog.stories.tsx +115 -0
  858. package/src/components/auth/server/enhanced/SecurityEventLog.tsx +916 -0
  859. package/src/components/auth/server/enhanced/TeamCreationWizard.stories.tsx +85 -0
  860. package/src/components/auth/server/enhanced/TeamCreationWizard.tsx +1023 -0
  861. package/src/components/auth/server/enhanced/__tests__/actions.test.ts +388 -0
  862. package/src/components/auth/server/enhanced/__tests__/more-actions.test.ts +139 -0
  863. package/src/components/auth/server/enhanced/actions.ts +1199 -0
  864. package/src/components/auth/server/enhanced/auth-enhanced-actions.ts +936 -0
  865. package/src/components/auth/server/enhanced/index.ts +37 -0
  866. package/src/components/auth/server/forms/ForgotPasswordForm.stories.tsx +82 -0
  867. package/src/components/auth/server/forms/ForgotPasswordForm.tsx +287 -0
  868. package/src/components/auth/server/forms/ResetPasswordForm.stories.tsx +79 -0
  869. package/src/components/auth/server/forms/ResetPasswordForm.tsx +217 -0
  870. package/src/components/auth/server/forms/SignInForm.stories.tsx +113 -0
  871. package/src/components/auth/server/forms/SignInForm.tsx +211 -0
  872. package/src/components/auth/server/forms/SignUpForm.stories.tsx +130 -0
  873. package/src/components/auth/server/forms/SignUpForm.tsx +243 -0
  874. package/src/components/auth/server/forms/index.ts +10 -0
  875. package/src/components/auth/server/index.ts +22 -0
  876. package/src/components/auth/server/jwt/JWTTokenManager.tsx +315 -0
  877. package/src/components/auth/server/jwt/index.ts +7 -0
  878. package/src/components/auth/server/organization/AuditLogViewer.tsx +288 -0
  879. package/src/components/auth/server/organization/CreateRoleDialog.tsx +540 -0
  880. package/src/components/auth/server/organization/EditRoleDialog.tsx +487 -0
  881. package/src/components/auth/server/organization/InviteMembers.stories.tsx +82 -0
  882. package/src/components/auth/server/organization/InviteMembers.tsx +264 -0
  883. package/src/components/auth/server/organization/MembersList.stories.tsx +117 -0
  884. package/src/components/auth/server/organization/MembersList.tsx +425 -0
  885. package/src/components/auth/server/organization/OrganizationCreation.stories.tsx +99 -0
  886. package/src/components/auth/server/organization/OrganizationCreation.tsx +293 -0
  887. package/src/components/auth/server/organization/OrganizationSettings.stories.tsx +99 -0
  888. package/src/components/auth/server/organization/OrganizationSettings.tsx +494 -0
  889. package/src/components/auth/server/organization/OrganizationSwitcher.stories.tsx +98 -0
  890. package/src/components/auth/server/organization/OrganizationSwitcher.tsx +308 -0
  891. package/src/components/auth/server/organization/PermissionMatrix.tsx +366 -0
  892. package/src/components/auth/server/organization/RoleManagement.stories.tsx +120 -0
  893. package/src/components/auth/server/organization/RoleManagement.tsx +318 -0
  894. package/src/components/auth/server/organization/index.ts +16 -0
  895. package/src/components/auth/server/session/SessionsList.stories.tsx +81 -0
  896. package/src/components/auth/server/session/SessionsList.tsx +274 -0
  897. package/src/components/auth/server/session/index.ts +7 -0
  898. package/src/components/auth/server/social/SocialLoginButtons.stories.tsx +139 -0
  899. package/src/components/auth/server/social/SocialLoginButtons.tsx +292 -0
  900. package/src/components/auth/server/social/index.ts +7 -0
  901. package/src/components/auth/server/ui/Alert.stories.tsx +97 -0
  902. package/src/components/auth/server/ui/Alert.tsx +159 -0
  903. package/src/components/auth/server/ui/Button.stories.tsx +149 -0
  904. package/src/components/auth/server/ui/Button.tsx +221 -0
  905. package/src/components/auth/server/ui/Card.stories.tsx +80 -0
  906. package/src/components/auth/server/ui/Card.tsx +51 -0
  907. package/src/components/auth/server/ui/Input.stories.tsx +143 -0
  908. package/src/components/auth/server/ui/Input.tsx +195 -0
  909. package/src/components/auth/server/ui/index.ts +18 -0
  910. package/src/components/charts/areas/areas.stories.tsx +113 -0
  911. package/src/components/charts/areas/areas.tsx +185 -0
  912. package/src/components/charts/areas/index.ts +11 -0
  913. package/src/components/charts/bars/bars.stories.tsx +109 -0
  914. package/src/components/charts/bars/bars.tsx +164 -0
  915. package/src/components/charts/bars/index.ts +11 -0
  916. package/src/components/charts/chart-context.ts +35 -0
  917. package/src/components/charts/funnel-chart/funnel-chart.stories.tsx +111 -0
  918. package/src/components/charts/funnel-chart/funnel-chart.tsx +392 -0
  919. package/src/components/charts/funnel-chart/index.ts +11 -0
  920. package/src/components/charts/index.ts +45 -0
  921. package/src/components/charts/mini-area-chart/index.ts +11 -0
  922. package/src/components/charts/mini-area-chart/mini-area-chart.stories.tsx +100 -0
  923. package/src/components/charts/mini-area-chart/mini-area-chart.tsx +244 -0
  924. package/src/components/charts/time-series-chart/index.ts +11 -0
  925. package/src/components/charts/time-series-chart/time-series-chart.stories.tsx +140 -0
  926. package/src/components/charts/time-series-chart/time-series-chart.tsx +337 -0
  927. package/src/components/charts/tooltip-sync/index.ts +11 -0
  928. package/src/components/charts/tooltip-sync/tooltip-sync.stories.tsx +89 -0
  929. package/src/components/charts/tooltip-sync/tooltip-sync.tsx +91 -0
  930. package/src/components/charts/types.ts +93 -0
  931. package/src/components/charts/use-tooltip.ts +230 -0
  932. package/src/components/charts/utils.ts +69 -0
  933. package/src/components/charts/x-axis/index.ts +11 -0
  934. package/src/components/charts/x-axis/x-axis.stories.tsx +94 -0
  935. package/src/components/charts/x-axis/x-axis.tsx +176 -0
  936. package/src/components/charts/y-axis/index.ts +7 -0
  937. package/src/components/charts/y-axis/y-axis.stories.tsx +110 -0
  938. package/src/components/charts/y-axis/y-axis.tsx +139 -0
  939. package/src/components/elements/atoms/alert/alert.stories.tsx +234 -0
  940. package/src/components/elements/atoms/alert/alert.tsx +293 -0
  941. package/src/components/elements/atoms/alert/index.ts +7 -0
  942. package/src/components/elements/atoms/avatar/avatar.stories.tsx +174 -0
  943. package/src/components/elements/atoms/avatar/avatar.tsx +274 -0
  944. package/src/components/elements/atoms/avatar/index.ts +7 -0
  945. package/src/components/elements/atoms/badge/badge.stories.tsx +186 -0
  946. package/src/components/elements/atoms/badge/badge.tsx +333 -0
  947. package/src/components/elements/atoms/badge/index.ts +7 -0
  948. package/src/components/elements/atoms/blur-image/blur-image.stories.tsx +140 -0
  949. package/src/components/elements/atoms/blur-image/blur-image.tsx +102 -0
  950. package/src/components/elements/atoms/blur-image/index.ts +7 -0
  951. package/src/components/elements/atoms/button/button.stories.tsx +776 -0
  952. package/src/components/elements/atoms/button/button.tsx +878 -0
  953. package/src/components/elements/atoms/button/index.ts +7 -0
  954. package/src/components/elements/atoms/copy-button/copy-button.stories.tsx +162 -0
  955. package/src/components/elements/atoms/copy-button/copy-button.tsx +232 -0
  956. package/src/components/elements/atoms/copy-button/index.ts +7 -0
  957. package/src/components/elements/atoms/copy-text/copy-text.stories.tsx +128 -0
  958. package/src/components/elements/atoms/copy-text/copy-text.tsx +201 -0
  959. package/src/components/elements/atoms/copy-text/index.ts +7 -0
  960. package/src/components/elements/atoms/empty-state/empty-state.stories.tsx +410 -0
  961. package/src/components/elements/atoms/empty-state/empty-state.tsx +338 -0
  962. package/src/components/elements/atoms/empty-state/index.ts +1 -0
  963. package/src/components/elements/atoms/go-back-button/go-back-button.stories.tsx +83 -0
  964. package/src/components/elements/atoms/go-back-button/go-back-button.tsx +104 -0
  965. package/src/components/elements/atoms/go-back-button/index.ts +7 -0
  966. package/src/components/elements/atoms/inline-snippet/index.ts +7 -0
  967. package/src/components/elements/atoms/inline-snippet/inline-snippet.stories.tsx +130 -0
  968. package/src/components/elements/atoms/inline-snippet/inline-snippet.tsx +140 -0
  969. package/src/components/elements/atoms/loading-dots/index.ts +1 -0
  970. package/src/components/elements/atoms/loading-dots/loading-dots.stories.tsx +274 -0
  971. package/src/components/elements/atoms/loading-dots/loading-dots.tsx +138 -0
  972. package/src/components/elements/atoms/mode-toggle/index.ts +7 -0
  973. package/src/components/elements/atoms/mode-toggle/mode-toggle.stories.tsx +67 -0
  974. package/src/components/elements/atoms/mode-toggle/mode-toggle.tsx +163 -0
  975. package/src/components/elements/atoms/progress/index.ts +7 -0
  976. package/src/components/elements/atoms/progress/progress.stories.tsx +141 -0
  977. package/src/components/elements/atoms/progress/progress.tsx +314 -0
  978. package/src/components/elements/atoms/progress-circle/index.ts +7 -0
  979. package/src/components/elements/atoms/progress-circle/progress-circle.stories.tsx +185 -0
  980. package/src/components/elements/atoms/progress-circle/progress-circle.tsx +207 -0
  981. package/src/components/elements/atoms/separator/index.ts +7 -0
  982. package/src/components/elements/atoms/separator/separator.stories.tsx +154 -0
  983. package/src/components/elements/atoms/separator/separator.tsx +169 -0
  984. package/src/components/elements/atoms/skeleton/index.ts +7 -0
  985. package/src/components/elements/atoms/skeleton/skeleton.stories.tsx +152 -0
  986. package/src/components/elements/atoms/skeleton/skeleton.tsx +336 -0
  987. package/src/components/elements/atoms/slider/index.ts +7 -0
  988. package/src/components/elements/atoms/slider/slider.stories.tsx +199 -0
  989. package/src/components/elements/atoms/slider/slider.tsx +487 -0
  990. package/src/components/elements/atoms/sonner/index.ts +7 -0
  991. package/src/components/elements/atoms/sonner/sonner.stories.tsx +408 -0
  992. package/src/components/elements/atoms/sonner/sonner.tsx +131 -0
  993. package/src/components/elements/atoms/status-badge/index.ts +7 -0
  994. package/src/components/elements/atoms/status-badge/status-badge.stories.tsx +166 -0
  995. package/src/components/elements/atoms/status-badge/status-badge.tsx +262 -0
  996. package/src/components/elements/atoms/timestamp-tooltip/index.ts +7 -0
  997. package/src/components/elements/atoms/timestamp-tooltip/timestamp-tooltip.stories.tsx +127 -0
  998. package/src/components/elements/atoms/timestamp-tooltip/timestamp-tooltip.tsx +404 -0
  999. package/src/components/elements/molecules/animated-size-container/animated-size-container.stories.tsx +165 -0
  1000. package/src/components/elements/molecules/animated-size-container/animated-size-container.tsx +125 -0
  1001. package/src/components/elements/molecules/animated-size-container/index.ts +7 -0
  1002. package/src/components/elements/molecules/avatar-stack/avatar-stack.stories.tsx +179 -0
  1003. package/src/components/elements/molecules/avatar-stack/avatar-stack.tsx +258 -0
  1004. package/src/components/elements/molecules/avatar-stack/index.ts +7 -0
  1005. package/src/components/elements/molecules/breadcrumb/breadcrumb.stories.tsx +273 -0
  1006. package/src/components/elements/molecules/breadcrumb/breadcrumb.tsx +299 -0
  1007. package/src/components/elements/molecules/breadcrumb/index.ts +7 -0
  1008. package/src/components/elements/molecules/button-group/button-group.stories.tsx +267 -0
  1009. package/src/components/elements/molecules/button-group/button-group.tsx +244 -0
  1010. package/src/components/elements/molecules/button-group/index.ts +7 -0
  1011. package/src/components/elements/molecules/collapsible/collapsible.stories.tsx +186 -0
  1012. package/src/components/elements/molecules/collapsible/collapsible.tsx +362 -0
  1013. package/src/components/elements/molecules/collapsible/index.ts +7 -0
  1014. package/src/components/elements/molecules/empty/empty.stories.tsx +182 -0
  1015. package/src/components/elements/molecules/empty/empty.tsx +230 -0
  1016. package/src/components/elements/molecules/empty/index.ts +7 -0
  1017. package/src/components/elements/molecules/pagination-controls/index.ts +8 -0
  1018. package/src/components/elements/molecules/pagination-controls/pagination-controls.stories.tsx +193 -0
  1019. package/src/components/elements/molecules/pagination-controls/pagination-controls.tsx +174 -0
  1020. package/src/components/elements/molecules/tab-select/index.ts +7 -0
  1021. package/src/components/elements/molecules/tab-select/tab-select.stories.tsx +175 -0
  1022. package/src/components/elements/molecules/tab-select/tab-select.tsx +261 -0
  1023. package/src/components/elements/molecules/tabs/index.ts +7 -0
  1024. package/src/components/elements/molecules/tabs/tabs.stories.tsx +198 -0
  1025. package/src/components/elements/molecules/tabs/tabs.tsx +744 -0
  1026. package/src/components/elements/molecules/toggle-group/index.ts +7 -0
  1027. package/src/components/elements/molecules/toggle-group/toggle-group.stories.tsx +201 -0
  1028. package/src/components/elements/molecules/toggle-group/toggle-group.tsx +236 -0
  1029. package/src/components/elements/organisms/accordion/accordion.stories.tsx +217 -0
  1030. package/src/components/elements/organisms/accordion/accordion.tsx +456 -0
  1031. package/src/components/elements/organisms/accordion/index.ts +7 -0
  1032. package/src/components/elements/organisms/card/card.stories.tsx +406 -0
  1033. package/src/components/elements/organisms/card/card.tsx +437 -0
  1034. package/src/components/elements/organisms/card/index.ts +8 -0
  1035. package/src/components/elements/organisms/card/integration-card.stories.tsx +348 -0
  1036. package/src/components/elements/organisms/card/integration-compact.stories.tsx +310 -0
  1037. package/src/components/elements/organisms/card/integrations.tsx +356 -0
  1038. package/src/components/elements/organisms/carousel/carousel.stories.tsx +182 -0
  1039. package/src/components/elements/organisms/carousel/carousel.tsx +537 -0
  1040. package/src/components/elements/organisms/carousel/index.ts +7 -0
  1041. package/src/components/elements/organisms/chart/chart.stories.tsx +147 -0
  1042. package/src/components/elements/organisms/chart/chart.tsx +317 -0
  1043. package/src/components/elements/organisms/chart/index.ts +7 -0
  1044. package/src/components/elements/organisms/command/command.stories.tsx +246 -0
  1045. package/src/components/elements/organisms/command/command.tsx +284 -0
  1046. package/src/components/elements/organisms/command/index.ts +7 -0
  1047. package/src/components/elements/organisms/dialog/dialog.stories.tsx +266 -0
  1048. package/src/components/elements/organisms/dialog/dialog.tsx +366 -0
  1049. package/src/components/elements/organisms/dialog/index.ts +7 -0
  1050. package/src/components/elements/organisms/dropdown-menu/dropdown-menu.stories.tsx +334 -0
  1051. package/src/components/elements/organisms/dropdown-menu/dropdown-menu.tsx +611 -0
  1052. package/src/components/elements/organisms/dropdown-menu/index.ts +7 -0
  1053. package/src/components/elements/organisms/dynamic-breadcrumb/dynamic-breadcrumb.stories.tsx +50 -0
  1054. package/src/components/elements/organisms/dynamic-breadcrumb/dynamic-breadcrumb.tsx +257 -0
  1055. package/src/components/elements/organisms/dynamic-breadcrumb/index.ts +7 -0
  1056. package/src/components/elements/organisms/error-boundary/error-boundary.stories.tsx +142 -0
  1057. package/src/components/elements/organisms/error-boundary/error-boundary.tsx +408 -0
  1058. package/src/components/elements/organisms/error-boundary/index.ts +7 -0
  1059. package/src/components/elements/organisms/hover-card/hover-card.stories.tsx +245 -0
  1060. package/src/components/elements/organisms/hover-card/hover-card.tsx +370 -0
  1061. package/src/components/elements/organisms/hover-card/index.ts +7 -0
  1062. package/src/components/elements/organisms/modal/index.ts +7 -0
  1063. package/src/components/elements/organisms/modal/modal.stories.tsx +189 -0
  1064. package/src/components/elements/organisms/modal/modal.tsx +266 -0
  1065. package/src/components/elements/organisms/popover/index.ts +7 -0
  1066. package/src/components/elements/organisms/popover/popover.stories.tsx +200 -0
  1067. package/src/components/elements/organisms/popover/popover.tsx +302 -0
  1068. package/src/components/elements/organisms/resizable/index.ts +7 -0
  1069. package/src/components/elements/organisms/resizable/resizable.stories.tsx +204 -0
  1070. package/src/components/elements/organisms/resizable/resizable.tsx +178 -0
  1071. package/src/components/elements/organisms/scroll-area/index.ts +7 -0
  1072. package/src/components/elements/organisms/scroll-area/scroll-area.stories.tsx +170 -0
  1073. package/src/components/elements/organisms/scroll-area/scroll-area.tsx +167 -0
  1074. package/src/components/elements/organisms/sheet/index.ts +7 -0
  1075. package/src/components/elements/organisms/sheet/sheet.stories.tsx +235 -0
  1076. package/src/components/elements/organisms/sheet/sheet.tsx +381 -0
  1077. package/src/components/elements/organisms/table/index.ts +7 -0
  1078. package/src/components/elements/organisms/table/table.stories.tsx +238 -0
  1079. package/src/components/elements/organisms/table/table.tsx +392 -0
  1080. package/src/components/elements/organisms/tooltip/index.ts +7 -0
  1081. package/src/components/elements/organisms/tooltip/tooltip.stories.tsx +205 -0
  1082. package/src/components/elements/organisms/tooltip/tooltip.tsx +547 -0
  1083. package/src/components/filter/filter-list/filter-list.stories.tsx +157 -0
  1084. package/src/components/filter/filter-list/filter-list.tsx +435 -0
  1085. package/src/components/filter/filter-list/index.ts +7 -0
  1086. package/src/components/filter/filter-select/filter-select.stories.tsx +124 -0
  1087. package/src/components/filter/filter-select/filter-select.tsx +558 -0
  1088. package/src/components/filter/filter-select/index.ts +7 -0
  1089. package/src/components/filter/index.ts +9 -0
  1090. package/src/components/filter/types.ts +70 -0
  1091. package/src/components/forms/checkbox/checkbox.stories.tsx +177 -0
  1092. package/src/components/forms/checkbox/checkbox.tsx +332 -0
  1093. package/src/components/forms/checkbox/index.ts +11 -0
  1094. package/src/components/forms/combobox/combobox.stories.tsx +224 -0
  1095. package/src/components/forms/combobox/combobox.tsx +679 -0
  1096. package/src/components/forms/combobox/index.ts +7 -0
  1097. package/src/components/forms/date-picker/calendar/calendar.stories.tsx +78 -0
  1098. package/src/components/forms/date-picker/calendar/calendar.tsx +271 -0
  1099. package/src/components/forms/date-picker/calendar/index.ts +7 -0
  1100. package/src/components/forms/date-picker/date-range-picker/date-range-picker.stories.tsx +108 -0
  1101. package/src/components/forms/date-picker/date-range-picker/date-range-picker.tsx +334 -0
  1102. package/src/components/forms/date-picker/date-range-picker/index.ts +7 -0
  1103. package/src/components/forms/date-picker/index.ts +10 -0
  1104. package/src/components/forms/date-picker/presets/index.ts +7 -0
  1105. package/src/components/forms/date-picker/presets/presets.stories.tsx +105 -0
  1106. package/src/components/forms/date-picker/presets/presets.tsx +196 -0
  1107. package/src/components/forms/date-picker/shared.ts +109 -0
  1108. package/src/components/forms/date-picker/trigger/index.ts +7 -0
  1109. package/src/components/forms/date-picker/trigger/trigger.stories.tsx +78 -0
  1110. package/src/components/forms/date-picker/trigger/trigger.tsx +195 -0
  1111. package/src/components/forms/date-picker/types.ts +63 -0
  1112. package/src/components/forms/file-upload/file-upload.stories.tsx +145 -0
  1113. package/src/components/forms/file-upload/file-upload.tsx +504 -0
  1114. package/src/components/forms/file-upload/index.ts +7 -0
  1115. package/src/components/forms/input/index.ts +7 -0
  1116. package/src/components/forms/input/input.stories.tsx +185 -0
  1117. package/src/components/forms/input/input.tsx +228 -0
  1118. package/src/components/forms/input-group/index.ts +11 -0
  1119. package/src/components/forms/input-group/input-group.stories.tsx +146 -0
  1120. package/src/components/forms/input-group/input-group.tsx +344 -0
  1121. package/src/components/forms/label/index.ts +7 -0
  1122. package/src/components/forms/label/label.stories.tsx +140 -0
  1123. package/src/components/forms/label/label.tsx +189 -0
  1124. package/src/components/forms/radio-group/index.ts +7 -0
  1125. package/src/components/forms/radio-group/radio-group.stories.tsx +233 -0
  1126. package/src/components/forms/radio-group/radio-group.tsx +476 -0
  1127. package/src/components/forms/select/index.ts +7 -0
  1128. package/src/components/forms/select/select.stories.tsx +274 -0
  1129. package/src/components/forms/select/select.tsx +654 -0
  1130. package/src/components/forms/switch/index.ts +11 -0
  1131. package/src/components/forms/switch/switch.stories.tsx +166 -0
  1132. package/src/components/forms/switch/switch.tsx +362 -0
  1133. package/src/components/forms/textarea/index.ts +7 -0
  1134. package/src/components/forms/textarea/textarea.stories.tsx +176 -0
  1135. package/src/components/forms/textarea/textarea.tsx +225 -0
  1136. package/src/components/layout/app-shell.tsx +363 -0
  1137. package/src/components/layout/app-sidebar/app-sidebar.stories.tsx +68 -0
  1138. package/src/components/layout/app-sidebar/app-sidebar.tsx +418 -0
  1139. package/src/components/layout/app-sidebar/index.ts +11 -0
  1140. package/src/components/layout/artifact-panel/artifact-panel-header.tsx +89 -0
  1141. package/src/components/layout/artifact-panel/expandable-panel.stories.tsx +484 -0
  1142. package/src/components/layout/artifact-panel/expandable-panel.tsx +289 -0
  1143. package/src/components/layout/artifact-panel/index.ts +23 -0
  1144. package/src/components/layout/artifact-panel/split-panel-layout.tsx +70 -0
  1145. package/src/components/layout/artifact-panel/types.ts +63 -0
  1146. package/src/components/layout/artifact-panel/use-artifact-panel-state.ts +101 -0
  1147. package/src/components/layout/content-sidebar/content-sidebar.stories.tsx +490 -0
  1148. package/src/components/layout/content-sidebar/content-sidebar.tsx +337 -0
  1149. package/src/components/layout/content-sidebar/index.ts +17 -0
  1150. package/src/components/layout/nav-app-switcher/index.ts +7 -0
  1151. package/src/components/layout/nav-app-switcher/nav-app-switcher.stories.tsx +138 -0
  1152. package/src/components/layout/nav-app-switcher/nav-app-switcher.tsx +282 -0
  1153. package/src/components/layout/nav-main/index.ts +11 -0
  1154. package/src/components/layout/nav-main/nav-main.stories.tsx +103 -0
  1155. package/src/components/layout/nav-main/nav-main.tsx +259 -0
  1156. package/src/components/layout/nav-projects/index.ts +11 -0
  1157. package/src/components/layout/nav-projects/nav-projects.stories.tsx +82 -0
  1158. package/src/components/layout/nav-projects/nav-projects.tsx +218 -0
  1159. package/src/components/layout/nav-secondary/index.ts +11 -0
  1160. package/src/components/layout/nav-secondary/nav-secondary.stories.tsx +81 -0
  1161. package/src/components/layout/nav-secondary/nav-secondary.tsx +145 -0
  1162. package/src/components/layout/nav-user/index.ts +11 -0
  1163. package/src/components/layout/nav-user/nav-user.stories.tsx +80 -0
  1164. package/src/components/layout/nav-user/nav-user.tsx +226 -0
  1165. package/src/components/layout/oneapp/auth-context.tsx +74 -0
  1166. package/src/components/layout/oneapp/ensure-anonymous-session.tsx +218 -0
  1167. package/src/components/layout/oneapp/index.ts +37 -0
  1168. package/src/components/layout/oneapp/microfrontend-layout.tsx +191 -0
  1169. package/src/components/layout/oneapp/types.ts +98 -0
  1170. package/src/components/layout/sidebar/index.ts +7 -0
  1171. package/src/components/layout/sidebar/sidebar.stories.tsx +170 -0
  1172. package/src/components/layout/sidebar/sidebar.tsx +945 -0
  1173. package/src/components/layout/sidebar-inset-header-portal/index.ts +8 -0
  1174. package/src/components/layout/sidebar-inset-header-portal/sidebar-inset-header-portal.stories.tsx +355 -0
  1175. package/src/components/layout/sidebar-inset-header-portal/sidebar-inset-header-portal.tsx +179 -0
  1176. package/src/components/layout/sidebar-slots/USAGE.md +163 -0
  1177. package/src/components/layout/sidebar-slots/__tests__/sidebar-slots.test.tsx +239 -0
  1178. package/src/components/layout/sidebar-slots/index.ts +9 -0
  1179. package/src/components/layout/sidebar-slots/sidebar-slots.stories.tsx +525 -0
  1180. package/src/components/layout/sidebar-slots/sidebar-slots.tsx +205 -0
  1181. package/src/components/layout/theme-provider/index.ts +11 -0
  1182. package/src/components/layout/theme-provider/theme-provider.stories.tsx +82 -0
  1183. package/src/components/layout/theme-provider/theme-provider.tsx +101 -0
  1184. package/src/components/overlays/confirm-dialog.stories.tsx +371 -0
  1185. package/src/components/overlays/confirm-dialog.tsx +201 -0
  1186. package/src/components/overlays/toast.stories.tsx +373 -0
  1187. package/src/components/overlays/toast.tsx +115 -0
  1188. package/src/constants/container.ts +183 -0
  1189. package/src/constants/index.ts +38 -0
  1190. package/src/constants/motion.ts +104 -0
  1191. package/src/fonts/Satoshi-Variable.woff2 +0 -0
  1192. package/src/fonts/Satoshi-VariableItalic.woff2 +0 -0
  1193. package/src/fonts/fonts.css +41 -0
  1194. package/src/fonts/index.ts +106 -0
  1195. package/src/hooks/.gitkeep +0 -0
  1196. package/src/hooks/ai-chat/context.tsx +294 -0
  1197. package/src/hooks/ai-chat/hooks.ts +297 -0
  1198. package/src/hooks/ai-chat/index.ts +35 -0
  1199. package/src/hooks/ai-chat/utils.ts +65 -0
  1200. package/src/hooks/index.ts +18 -0
  1201. package/src/hooks/use-mobile.ts +45 -0
  1202. package/src/hooks/use-responsive.ts +64 -0
  1203. package/src/hooks/use-scroll-progress.ts +101 -0
  1204. package/src/hooks/use-toast.ts +65 -0
  1205. package/src/index.ts +857 -0
  1206. package/src/lib/export-csv.ts +107 -0
  1207. package/src/lib/index.ts +10 -0
  1208. package/src/lib/resize-image.ts +109 -0
  1209. package/src/lib/stable-sort.ts +29 -0
  1210. package/src/lib/utils.ts +28 -0
  1211. package/src/react-19-compat.d.ts +28 -0
  1212. package/src/shared/auth/index.ts +8 -0
  1213. package/src/shared/auth/types/index.ts +163 -0
  1214. package/src/shared/auth/types.ts +196 -0
  1215. package/src/shared/auth/utils/dark-mode.ts +336 -0
  1216. package/src/shared/index.ts +5 -0
  1217. package/src/styles/_tokens.generated.scss +84 -0
  1218. package/src/styles/ai-elements.scss +9 -0
  1219. package/src/styles/base.scss +44 -0
  1220. package/src/styles/flows.scss +62 -0
  1221. package/src/styles/globals.css +627 -0
  1222. package/src/styles/index.scss +9 -0
  1223. package/src/styles/shadcn.scss +16 -0
  1224. package/src/styles/sources.css +16 -0
  1225. package/src/styles/theme.css +1687 -0
  1226. package/src/styles/theme.template.css +95 -0
  1227. package/src/tokens/accessibility.ts +494 -0
  1228. package/src/tokens/animations.ts +305 -0
  1229. package/src/tokens/aspect-ratio.ts +89 -0
  1230. package/src/tokens/blur.ts +82 -0
  1231. package/src/tokens/border-width.ts +86 -0
  1232. package/src/tokens/breakpoints.ts +150 -0
  1233. package/src/tokens/colors.ts +1199 -0
  1234. package/src/tokens/component.ts +362 -0
  1235. package/src/tokens/container.ts +42 -0
  1236. package/src/tokens/focus.ts +266 -0
  1237. package/src/tokens/form-states.ts +521 -0
  1238. package/src/tokens/grid.ts +258 -0
  1239. package/src/tokens/index.ts +1175 -0
  1240. package/src/tokens/interactions.ts +558 -0
  1241. package/src/tokens/mantine-types.ts +68 -0
  1242. package/src/tokens/opacity.ts +139 -0
  1243. package/src/tokens/palette.ts +854 -0
  1244. package/src/tokens/pseudo-elements.ts +508 -0
  1245. package/src/tokens/radius.ts +57 -0
  1246. package/src/tokens/shadows.ts +313 -0
  1247. package/src/tokens/spacing.ts +95 -0
  1248. package/src/tokens/states.ts +392 -0
  1249. package/src/tokens/structural.ts +589 -0
  1250. package/src/tokens/timing.ts +224 -0
  1251. package/src/tokens/typography.ts +242 -0
  1252. package/src/tokens/z-index.ts +184 -0
  1253. package/storybook/preview.tsx +201 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/components/ai-elements/web-preview/web-preview.tsx"],"sourcesContent":["/**\n * @fileoverview WebPreview Component - Premium Harmony V2\n *\n * A comprehensive web preview component for displaying and navigating web content\n * with browser-like controls, viewport switching, and console integration.\n *\n * Features:\n * - Premium Harmony V2 spring physics (SPRING_TACTILE, SPRING_FLUID, SPRING_GENTLE)\n * - Touch vs desktop detection with useMediaQuery\n * - Reduced motion support with useReducedMotion\n * - ES2023 syntax with useCallback, useMemo optimization\n * - Tailwind v4 CSS-first theming\n * - CVA variants for console log level styling\n * - Context-based state management for all preview controls\n * - Mantine hooks (useDebouncedValue, useDisclosure, useFullscreen, useInputState, useMergedRef, useNetwork, useMediaQuery, useReducedMotion)\n * - URL navigation with history (back/forward)\n * - Viewport switching (desktop, tablet, mobile)\n * - Native Fullscreen API with CSS fallback\n * - Console panel for debugging logs\n * - Network status indicator (offline/slow connection)\n * - Sandboxed iframe for security\n * - Debounced URL input for auto-navigation\n * - Device toggle controls\n * - Example URL selector\n * - AI design system constants integration\n * - 44px minimum touch targets for accessibility\n * - Data attributes for state management\n * - Semantic color tokens (no hardcoded colors)\n * - AnimatePresence for smooth conditional rendering\n * - Focus-visible ring styles\n *\n * @module @od-oneapp/uni-ui/components/ai-elements/web-preview\n * @component WebPreview, WebPreviewNavigation, WebPreviewNavigationButton, WebPreviewBackButton, WebPreviewForwardButton, WebPreviewFullscreenToggle, WebPreviewUrl, WebPreviewBody, WebPreviewConsole, WebPreviewDeviceToggle, WebPreviewExampleSelect, WebPreviewNetworkStatus\n *\n * @useCases\n * - Web content preview in development tools\n * - Responsive design testing with viewport switching\n * - Browser simulation for documentation\n * - Embedded web viewer with navigation controls\n * - Debug console integration for web content\n * - Network status monitoring for preview loading\n * - Fullscreen presentation mode for demos\n * - Example URL quick selection for testing\n * - Sandboxed iframe security for untrusted content\n * - History-based navigation (back/forward)\n *\n * @subcomponents\n * - WebPreview - Root container with context provider\n * - WebPreviewNavigation - Navigation toolbar container\n * - WebPreviewNavigationButton - Generic nav button with tooltip\n * - WebPreviewBackButton - History back button\n * - WebPreviewForwardButton - History forward button\n * - WebPreviewFullscreenToggle - Fullscreen toggle button\n * - WebPreviewUrl - URL input with debounced navigation\n * - WebPreviewBody - Sandboxed iframe with viewport sizing\n * - WebPreviewConsole - Collapsible console log panel\n * - WebPreviewDeviceToggle - Desktop/tablet/mobile switcher\n * - WebPreviewExampleSelect - Example URL dropdown\n * - WebPreviewNetworkStatus - Offline/slow connection indicator\n *\n * @variants\n * - level: log, warn, error (console logs)\n *\n * @example\n * <WebPreview defaultUrl=\"https://example.com\">\n * <WebPreviewNavigation>\n * <WebPreviewBackButton />\n * <WebPreviewForwardButton />\n * <WebPreviewUrl />\n * <WebPreviewDeviceToggle />\n * <WebPreviewFullscreenToggle />\n * <WebPreviewNetworkStatus />\n * </WebPreviewNavigation>\n * <WebPreviewBody />\n * <WebPreviewConsole logs={consoleLogs} />\n * </WebPreview>\n */\n\n'use client';\n\nimport type { ComponentProps, ReactNode, RefObject } from 'react';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport {\n useDebouncedValue,\n useDisclosure,\n useFullscreen,\n useInputState,\n useMediaQuery,\n useMergedRef,\n useNetwork,\n useReducedMotion,\n} from '@mantine/hooks';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport {\n ChevronDownIcon,\n GlobeIcon,\n LockIcon,\n MaximizeIcon,\n MinimizeIcon,\n MonitorIcon,\n SmartphoneIcon,\n TabletIcon,\n WifiOffIcon,\n} from 'lucide-react';\nimport { AnimatePresence, motion } from 'motion/react';\n\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../elements/atoms/button';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../../elements/molecules/collapsible';\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '../../elements/organisms/tooltip';\nimport { Input } from '../../forms/input';\nimport {\n AI_COLLAPSIBLE,\n AI_CONTAINER_RADIUS,\n AI_FOCUS,\n AI_ICON,\n AI_SPACING,\n AI_TRANSITION,\n SPRING_FLUID,\n SPRING_GENTLE,\n SPRING_TACTILE,\n SPRING_WEIGHTED,\n} from '../ai-elements.constants';\n\n/**\n * CVA variants for console log level styling with DevTools aesthetic\n */\nexport const consoleLogVariants = cva(\n 'flex items-start gap-2 rounded-sm border-l-2 px-2 py-1.5 font-mono text-xs',\n {\n variants: {\n level: {\n log: 'border-l-muted-foreground/30 bg-transparent text-foreground',\n warn: 'border-l-warning bg-warning/5 text-warning-foreground dark:text-warning',\n error: 'border-l-destructive bg-destructive/5 text-destructive',\n },\n },\n defaultVariants: {\n level: 'log',\n },\n },\n);\n\nexport type ConsoleLogVariants = VariantProps<typeof consoleLogVariants>;\n\nexport type WebPreviewContextValue = {\n url: string;\n setUrl: (url: string) => void;\n consoleOpen: boolean;\n setConsoleOpen: (open: boolean) => void;\n goBack: () => void;\n goForward: () => void;\n canGoBack: boolean;\n canGoForward: boolean;\n viewport: 'desktop' | 'tablet' | 'mobile';\n setViewport: (viewport: 'desktop' | 'tablet' | 'mobile') => void;\n isFullscreen: boolean;\n setIsFullscreen: (fullscreen: boolean) => void;\n toggle: () => void;\n /** Ref for the fullscreen container element */\n containerRef: RefObject<HTMLDivElement | null>;\n /** Network status information */\n network: {\n online: boolean;\n effectiveType?: 'slow-2g' | '2g' | '3g' | '4g';\n downlink?: number;\n rtt?: number;\n };\n /** Touch device detection */\n isTouchDevice: boolean;\n /** Reduced motion preference */\n prefersReducedMotion: boolean;\n /** Loading state for URL navigation */\n isLoading: boolean;\n /** Set loading state */\n setIsLoading: (loading: boolean) => void;\n};\n\nconst WebPreviewContext = createContext<WebPreviewContextValue | null>(null);\n\nconst useWebPreview = () => {\n const context = useContext(WebPreviewContext);\n if (!context) {\n throw new Error('WebPreview components must be used within a WebPreview');\n }\n return context;\n};\n\nexport type WebPreviewProps = ComponentProps<'div'> & {\n defaultUrl?: string;\n onUrlChange?: (url: string) => void;\n};\n\nexport const WebPreview = ({\n className,\n children,\n defaultUrl = '',\n onUrlChange,\n ...props\n}: WebPreviewProps) => {\n const [history, setHistory] = useState<string[]>(defaultUrl ? [defaultUrl] : []);\n const [historyIndex, setHistoryIndex] = useState<number>(defaultUrl ? 0 : -1);\n const url: string = historyIndex >= 0 ? (history[historyIndex] ?? '') : '';\n // Use Mantine's useDisclosure for boolean console open/close state\n const [consoleOpen, { open: openConsole, close: closeConsole }] = useDisclosure(false);\n const [viewport, setViewport] = useState<'desktop' | 'tablet' | 'mobile'>('desktop');\n // Global loading state for URL navigation progress bar\n const [isLoading, setIsLoading] = useState(false);\n\n // Use Mantine's useFullscreen for native Fullscreen API support\n // Falls back to CSS positioning when Fullscreen API is unavailable\n const {\n ref: fullscreenRef,\n toggle: toggleFullscreen,\n fullscreen: isFullscreen,\n } = useFullscreen();\n\n // Local ref for when fullscreen API is not available\n const localRef = useRef<HTMLDivElement>(null);\n // Merge refs for fullscreen and local access\n const containerRef = useMergedRef(fullscreenRef, localRef);\n\n // Use Mantine's useNetwork to track network status\n const networkStatus = useNetwork();\n\n // Premium Harmony V2: Touch device detection\n const isTouchDevice = useMediaQuery('(pointer: coarse)') ?? false;\n\n // Premium Harmony V2: Reduced motion support\n const prefersReducedMotion = useReducedMotion();\n\n // Wrapper functions to match expected API signature\n const setConsoleOpen = useCallback(\n (open: boolean) => {\n if (open) {\n openConsole();\n } else {\n closeConsole();\n }\n },\n [openConsole, closeConsole],\n );\n\n // setIsFullscreen uses toggle since useFullscreen doesn't provide open/close separately\n const setIsFullscreen = useCallback(\n (fullscreen: boolean) => {\n if (fullscreen !== isFullscreen) {\n void toggleFullscreen();\n }\n },\n [isFullscreen, toggleFullscreen],\n );\n\n const handleUrlChange = useCallback(\n (newUrl: string) => {\n setHistory(prev => {\n const next = prev.slice(0, historyIndex + 1);\n next.push(newUrl);\n return next;\n });\n setHistoryIndex(idx => idx + 1);\n onUrlChange?.(newUrl);\n },\n [historyIndex, onUrlChange],\n );\n\n const goBack = useCallback(() => {\n setHistoryIndex(idx => (idx > 0 ? idx - 1 : idx));\n }, []);\n\n const goForward = useCallback(() => {\n setHistoryIndex(idx => (idx < history.length - 1 ? idx + 1 : idx));\n }, [history.length]);\n\n const contextValue = useMemo<WebPreviewContextValue>(\n () => ({\n url,\n setUrl: handleUrlChange,\n consoleOpen,\n setConsoleOpen,\n goBack,\n goForward,\n canGoBack: historyIndex > 0,\n canGoForward: historyIndex < history.length - 1 && historyIndex >= 0,\n viewport,\n setViewport,\n isFullscreen,\n setIsFullscreen,\n toggle: () => {\n void toggleFullscreen();\n },\n containerRef: localRef,\n network: {\n online: networkStatus.online,\n effectiveType: networkStatus.effectiveType,\n downlink: networkStatus.downlink,\n rtt: networkStatus.rtt,\n },\n isTouchDevice,\n prefersReducedMotion,\n isLoading,\n setIsLoading,\n }),\n [\n url,\n handleUrlChange,\n consoleOpen,\n setConsoleOpen,\n goBack,\n goForward,\n historyIndex,\n history.length,\n viewport,\n isFullscreen,\n setIsFullscreen,\n toggleFullscreen,\n networkStatus.online,\n networkStatus.effectiveType,\n networkStatus.downlink,\n networkStatus.rtt,\n isTouchDevice,\n prefersReducedMotion,\n isLoading,\n ],\n );\n\n return (\n <WebPreviewContext.Provider value={contextValue}>\n <div\n ref={containerRef}\n data-state={isFullscreen ? 'fullscreen' : 'normal'}\n data-viewport={viewport}\n className={cn(\n 'bg-card flex size-full flex-col border',\n AI_CONTAINER_RADIUS,\n AI_TRANSITION.all,\n // CSS fallback for fullscreen mode (useFullscreen handles native API)\n isFullscreen && 'fixed inset-0 z-50 rounded-none border-0 shadow-none',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </WebPreviewContext.Provider>\n );\n};\n\nexport type WebPreviewNavigationProps = ComponentProps<'div'>;\n\nexport const WebPreviewNavigation = ({\n className,\n children,\n ...props\n}: WebPreviewNavigationProps) => {\n const { isLoading, prefersReducedMotion, isTouchDevice } = useWebPreview();\n\n // Premium Harmony V2: Progress bar transition\n const progressTransition = useMemo(\n () =>\n prefersReducedMotion\n ? { duration: 0.001 }\n : { duration: 0.8, ease: [0.23, 1, 0.32, 1] as const },\n [prefersReducedMotion],\n );\n\n return (\n <div\n className={cn(\n // Glassmorphism effect with backdrop blur\n 'bg-background/80 supports-[backdrop-filter]:bg-background/60',\n 'relative flex items-center border-b backdrop-blur-md',\n 'sticky top-0 z-10',\n // Responsive padding\n isTouchDevice ? 'gap-1 p-2' : 'gap-1.5 p-2',\n AI_SPACING.xs,\n AI_TRANSITION.all,\n className,\n )}\n {...props}\n >\n {children}\n {/* Animated progress bar at bottom of navigation */}\n <AnimatePresence>\n {isLoading ? (\n <motion.div\n key=\"progress-bar\"\n className=\"bg-primary absolute bottom-0 left-0 h-0.5 w-full origin-left\"\n initial={{ scaleX: 0, opacity: 1 }}\n animate={{ scaleX: 1, opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={progressTransition}\n />\n ) : null}\n </AnimatePresence>\n </div>\n );\n};\n\nexport type WebPreviewNavigationButtonProps = ComponentProps<typeof Button> & {\n tooltip?: string;\n};\n\nexport const WebPreviewNavigationButton = ({\n onClick,\n disabled,\n tooltip,\n children,\n className,\n ...props\n}: WebPreviewNavigationButtonProps) => {\n const { prefersReducedMotion, isTouchDevice } = useWebPreview();\n\n // Premium Harmony V2: Physical feedback on tap\n const tapAnimation = useMemo(\n () => (prefersReducedMotion ? {} : { scale: 0.95 }),\n [prefersReducedMotion],\n );\n\n const tapTransition = useMemo(\n () => (prefersReducedMotion ? { duration: 0 } : (isTouchDevice ? SPRING_TACTILE : SPRING_FLUID)),\n [prefersReducedMotion, isTouchDevice],\n );\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <motion.div whileTap={disabled ? undefined : tapAnimation} transition={tapTransition}>\n <Button\n className={cn(\n 'hover:text-foreground hover:bg-accent/50 min-h-[44px] min-w-[44px] p-0',\n 'active:bg-accent/70',\n AI_TRANSITION.colors,\n className,\n )}\n data-disabled={disabled}\n disabled={disabled}\n onClick={onClick}\n size=\"sm\"\n variant=\"ghost\"\n {...props}\n >\n {children}\n </Button>\n </motion.div>\n </TooltipTrigger>\n {tooltip ? (\n <TooltipContent>\n <p>{tooltip}</p>\n </TooltipContent>\n ) : null}\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nexport const WebPreviewBackButton = ({\n tooltip = 'Back',\n ...props\n}: Omit<WebPreviewNavigationButtonProps, 'onClick'>) => {\n const { goBack, canGoBack } = useWebPreview();\n return (\n <WebPreviewNavigationButton\n disabled={!canGoBack}\n onClick={goBack}\n tooltip={tooltip}\n {...props}\n />\n );\n};\n\nexport const WebPreviewForwardButton = ({\n tooltip = 'Forward',\n ...props\n}: Omit<WebPreviewNavigationButtonProps, 'onClick'>) => {\n const { goForward, canGoForward } = useWebPreview();\n return (\n <WebPreviewNavigationButton\n disabled={!canGoForward}\n onClick={goForward}\n tooltip={tooltip}\n {...props}\n />\n );\n};\n\nexport const WebPreviewFullscreenToggle = ({\n tooltip,\n ...props\n}: Omit<WebPreviewNavigationButtonProps, 'onClick'>) => {\n const { isFullscreen, toggle: toggleFullscreen } = useWebPreview();\n const dynamicTooltip = tooltip ?? (isFullscreen ? 'Exit fullscreen' : 'Fullscreen');\n\n return (\n <div data-state={isFullscreen ? 'fullscreen' : 'normal'}>\n <WebPreviewNavigationButton\n aria-pressed={isFullscreen}\n onClick={() => void toggleFullscreen()}\n tooltip={dynamicTooltip}\n {...props}\n >\n {isFullscreen ? (\n <MinimizeIcon aria-hidden=\"true\" className={AI_ICON.md} />\n ) : (\n <MaximizeIcon aria-hidden=\"true\" className={AI_ICON.md} />\n )}\n <span className=\"sr-only\">{dynamicTooltip}</span>\n </WebPreviewNavigationButton>\n </div>\n );\n};\n\nexport type WebPreviewUrlProps = ComponentProps<typeof Input>;\n\nexport const WebPreviewUrl = ({\n value,\n onChange,\n onKeyDown,\n className,\n ...props\n}: WebPreviewUrlProps) => {\n const { url, setUrl, isLoading, setIsLoading, prefersReducedMotion } = useWebPreview();\n // Use Mantine's useInputState for simplified input state management\n const [inputValue, setInputValue] = useInputState(url);\n // Debounce URL input for auto-navigation after user stops typing\n const [debouncedUrl] = useDebouncedValue(inputValue, 500);\n\n // Determine protocol for icon display\n const isSecure = useMemo(() => {\n const currentValue = (value as string) ?? inputValue;\n try {\n const urlObj = new URL(currentValue);\n return urlObj.protocol === 'https:';\n } catch {\n return currentValue.startsWith('https://');\n }\n }, [value, inputValue]);\n\n // Premium Harmony V2: Icon animation variants\n const iconVariants = useMemo(\n () => ({\n initial: { opacity: 0, scale: 0.8, rotate: -10 },\n animate: { opacity: 1, scale: 1, rotate: 0 },\n exit: { opacity: 0, scale: 0.8, rotate: 10 },\n }),\n [],\n );\n\n const iconTransition = useMemo(\n () => (prefersReducedMotion ? { duration: 0 } : SPRING_TACTILE),\n [prefersReducedMotion],\n );\n\n // Sync input value with context URL when it changes externally\n useEffect(() => {\n setInputValue(url);\n }, [url, setInputValue]);\n\n // Auto-navigate when debounced URL changes (user stopped typing)\n useEffect(() => {\n if (debouncedUrl && debouncedUrl !== url) {\n setIsLoading(true);\n setUrl(debouncedUrl);\n // Reset loading state after a delay\n const timer = setTimeout(() => setIsLoading(false), 800);\n return () => clearTimeout(timer);\n }\n return;\n }, [debouncedUrl, url, setUrl, setIsLoading]);\n\n // Memoize change handler to prevent unnecessary re-renders\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(event);\n onChange?.(event);\n },\n [setInputValue, onChange],\n );\n\n // Memoize keydown handler to prevent unnecessary re-renders\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n const target = event.target as HTMLInputElement;\n setIsLoading(true);\n setUrl(target.value);\n // Reset loading state after a delay\n setTimeout(() => setIsLoading(false), 800);\n }\n onKeyDown?.(event);\n },\n [setUrl, onKeyDown, setIsLoading],\n );\n\n const currentValue = (value as string) ?? inputValue;\n const hasUrl = currentValue.length > 0;\n\n return (\n <div className=\"relative flex flex-1 items-center\">\n {/* Protocol icon indicator */}\n <AnimatePresence mode=\"wait\">\n {hasUrl ? (\n <motion.div\n key={isSecure ? 'secure' : 'insecure'}\n className={cn(\n 'pointer-events-none absolute left-2.5 z-10',\n isSecure ? 'text-success' : 'text-muted-foreground',\n )}\n variants={iconVariants}\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n transition={iconTransition}\n >\n {isSecure ? (\n <LockIcon aria-hidden=\"true\" className=\"size-3.5\" />\n ) : (\n <GlobeIcon aria-hidden=\"true\" className=\"size-3.5\" />\n )}\n </motion.div>\n ) : null}\n </AnimatePresence>\n <Input\n aria-label=\"URL\"\n className={cn('h-9 flex-1 text-sm', hasUrl && 'pl-8', AI_TRANSITION.all, className)}\n data-loading={isLoading}\n data-secure={isSecure}\n onChange={onChange ?? handleChange}\n onKeyDown={handleKeyDown}\n placeholder=\"Enter URL…\"\n spellCheck={false}\n autoComplete=\"url\"\n type=\"url\"\n value={currentValue}\n {...props}\n />\n </div>\n );\n};\n\nexport type WebPreviewBodyProps = ComponentProps<'iframe'> & {\n loading?: ReactNode;\n};\n\n// Memoize viewport widths outside component to prevent recreation on each render\nconst VIEWPORT_WIDTHS: Record<'desktop' | 'tablet' | 'mobile', string> = {\n desktop: '100%',\n tablet: '768px',\n mobile: '390px',\n};\n\nexport const WebPreviewBody = ({ className, loading, src, ...props }: WebPreviewBodyProps) => {\n const { url, viewport, prefersReducedMotion, isLoading, isTouchDevice } = useWebPreview();\n const [iframeLoaded, setIframeLoaded] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n\n // Track iframe load state for skeleton overlay\n const currentSrc = src ?? url;\n\n // Reset loaded state when URL changes\n useEffect(() => {\n // eslint-disable-next-line react-hooks/set-state-in-effect -- Safe: resetting load state is necessary when URL changes to show skeleton\n setIframeLoaded(false);\n }, [currentSrc]);\n\n // Handle iframe load event\n const handleIframeLoad = useCallback(() => {\n setIframeLoaded(true);\n }, []);\n\n // Premium Harmony V2: Memoized animation variants with weighted physics\n const containerVariants = useMemo(\n () => ({\n initial: { opacity: 0, scale: 0.96, y: 8 },\n animate: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.96, y: -8 },\n }),\n [],\n );\n\n // Skeleton overlay variants\n const skeletonVariants = useMemo(\n () => ({\n visible: { opacity: 1 },\n hidden: { opacity: 0 },\n }),\n [],\n );\n\n // Generate descriptive iframe title based on URL\n const iframeTitle = useMemo(() => {\n if (!currentSrc) return 'Web preview';\n try {\n const urlObj = new URL(currentSrc);\n return `Preview of ${urlObj.hostname}`;\n } catch {\n return 'Web preview';\n }\n }, [currentSrc]);\n\n // Determine transition based on preferences\n const viewportTransition = useMemo(\n () =>\n prefersReducedMotion ? { duration: 0 } : (isTouchDevice ? SPRING_TACTILE : SPRING_WEIGHTED),\n [prefersReducedMotion, isTouchDevice],\n );\n\n return (\n <div\n className={cn(\n 'relative flex h-full flex-1 items-start justify-center overflow-hidden',\n // Prevent scroll chaining in nested contexts\n 'overscroll-contain',\n )}\n id={`viewport-${viewport}`}\n role=\"tabpanel\"\n aria-label={`${viewport} viewport preview`}\n >\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={viewport}\n animate=\"animate\"\n className=\"relative h-full w-full\"\n exit=\"exit\"\n initial=\"initial\"\n style={{ maxWidth: VIEWPORT_WIDTHS[viewport] }}\n transition={viewportTransition}\n variants={containerVariants}\n >\n {/* Skeleton loading overlay */}\n <AnimatePresence>\n {(isLoading || !iframeLoaded) && currentSrc ? (\n <motion.div\n key=\"skeleton-overlay\"\n className={cn(\n 'bg-muted/80 absolute inset-0 z-10 flex items-center justify-center rounded-md backdrop-blur-sm',\n AI_TRANSITION.opacity,\n )}\n variants={skeletonVariants}\n initial=\"visible\"\n animate=\"visible\"\n exit=\"hidden\"\n transition={prefersReducedMotion ? { duration: 0 } : { duration: 0.3 }}\n >\n <div className=\"flex flex-col items-center gap-3\">\n {/* Animated loading dots */}\n <div className=\"flex gap-1\">\n {[0, 1, 2].map(i => (\n <motion.div\n key={i}\n className=\"bg-primary/60 size-2 rounded-full\"\n animate={\n prefersReducedMotion\n ? {}\n : {\n scale: [1, 1.2, 1],\n opacity: [0.5, 1, 0.5],\n }\n }\n transition={{\n duration: 0.8,\n repeat: Infinity,\n delay: i * 0.15,\n }}\n />\n ))}\n </div>\n <span className=\"text-muted-foreground text-sm\">Loading preview…</span>\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n <iframe\n ref={iframeRef}\n className={cn(\n 'h-full w-full rounded-md border',\n 'bg-background',\n AI_TRANSITION.opacity,\n className,\n )}\n data-viewport={viewport}\n data-loaded={iframeLoaded}\n sandbox=\"allow-scripts allow-same-origin allow-forms allow-popups allow-presentation\"\n src={currentSrc ?? undefined}\n title={iframeTitle}\n onLoad={handleIframeLoad}\n tabIndex={-1}\n {...props}\n />\n </motion.div>\n </AnimatePresence>\n {loading}\n </div>\n );\n};\n\nexport type WebPreviewConsoleProps = ComponentProps<'div'> & {\n logs?: Array<{\n level: 'log' | 'warn' | 'error';\n message: string;\n timestamp: Date;\n }>;\n};\n\nexport const WebPreviewConsole = ({\n className,\n logs = [],\n children,\n ...props\n}: WebPreviewConsoleProps) => {\n const { consoleOpen, setConsoleOpen, prefersReducedMotion } = useWebPreview();\n\n // Count logs by level for badge display\n const logCounts = useMemo(() => {\n const counts = { log: 0, warn: 0, error: 0 };\n for (const log of logs) {\n counts[log.level]++;\n }\n return counts;\n }, [logs]);\n\n // Premium Harmony V2: Memoized animation variants for console logs\n const logItemVariants = useMemo(\n () => ({\n hidden: { opacity: 0, x: -10, height: 0 },\n visible: (i: number) => ({\n opacity: 1,\n x: 0,\n height: 'auto',\n transition: prefersReducedMotion\n ? { duration: 0 }\n : {\n ...SPRING_GENTLE,\n delay: i * 0.03,\n },\n }),\n exit: { opacity: 0, x: -10, height: 0 },\n }),\n [prefersReducedMotion],\n );\n\n // Chevron animation variants\n const chevronVariants = useMemo(\n () => ({\n closed: { rotate: 0 },\n open: { rotate: 180 },\n }),\n [],\n );\n\n return (\n <Collapsible\n className={cn(\n 'bg-muted/30 border-t font-mono text-sm',\n 'backdrop-blur-sm',\n AI_TRANSITION.all,\n className,\n )}\n data-state={consoleOpen ? 'open' : 'closed'}\n onOpenChange={setConsoleOpen}\n open={consoleOpen}\n {...props}\n >\n <CollapsibleTrigger asChild>\n <Button\n className={cn(\n 'hover:bg-muted/50 flex w-full items-center justify-between',\n 'min-h-[44px] rounded-none px-3 py-2 text-left font-medium',\n AI_TRANSITION.colors,\n )}\n variant=\"ghost\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-foreground font-sans text-sm font-medium\">Console</span>\n {/* Log level badges */}\n {logs.length > 0 && (\n <div className=\"flex items-center gap-1\">\n {logCounts.error > 0 && (\n <span className=\"bg-destructive/15 text-destructive rounded px-1.5 py-0.5 text-xs font-medium tabular-nums\">\n {logCounts.error}\n </span>\n )}\n {logCounts.warn > 0 && (\n <span className=\"bg-warning/15 text-warning rounded px-1.5 py-0.5 text-xs font-medium tabular-nums\">\n {logCounts.warn}\n </span>\n )}\n {logCounts.log > 0 && (\n <span className=\"bg-muted text-muted-foreground rounded px-1.5 py-0.5 text-xs font-medium tabular-nums\">\n {logCounts.log}\n </span>\n )}\n </div>\n )}\n </div>\n <motion.div\n variants={chevronVariants}\n animate={consoleOpen ? 'open' : 'closed'}\n transition={prefersReducedMotion ? { duration: 0 } : SPRING_TACTILE}\n >\n <ChevronDownIcon aria-hidden=\"true\" className={AI_ICON.md} />\n </motion.div>\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className={cn('outline-none', AI_COLLAPSIBLE.content)}>\n <div\n className={cn(\n 'bg-background/50 max-h-48 space-y-0.5 overflow-y-auto p-2',\n // Prevent scroll chaining\n 'overscroll-contain',\n )}\n >\n {logs.length === 0 ? (\n <div className=\"text-muted-foreground flex items-center justify-center py-4 font-sans text-sm\">\n No console output\n </div>\n ) : (\n <AnimatePresence mode=\"popLayout\">\n {logs.map((log, index) => (\n <motion.div\n key={`${log.timestamp.getTime()}-${log.message.slice(0, 20)}`}\n layout\n animate=\"visible\"\n className={consoleLogVariants({ level: log.level })}\n custom={index}\n data-level={log.level}\n exit=\"exit\"\n initial=\"hidden\"\n variants={logItemVariants}\n >\n <span className=\"text-muted-foreground text-2xs shrink-0 font-mono tabular-nums\">\n {log.timestamp.toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n })}\n </span>\n <span className=\"break-all\">{log.message}</span>\n </motion.div>\n ))}\n </AnimatePresence>\n )}\n {children}\n </div>\n </CollapsibleContent>\n </Collapsible>\n );\n};\n\nexport type WebPreviewDeviceToggleProps = ComponentProps<'div'>;\n\n// Memoize devices array outside component to prevent recreation on each render\nconst DEVICES: Array<{\n id: 'desktop' | 'tablet' | 'mobile';\n label: string;\n icon: typeof MonitorIcon;\n}> = [\n { id: 'desktop', label: 'Desktop', icon: MonitorIcon },\n { id: 'tablet', label: 'Tablet', icon: TabletIcon },\n { id: 'mobile', label: 'Mobile', icon: SmartphoneIcon },\n];\n\nexport const WebPreviewDeviceToggle = ({ className, ...props }: WebPreviewDeviceToggleProps) => {\n const { viewport, setViewport, prefersReducedMotion, isTouchDevice } = useWebPreview();\n\n // Premium Harmony V2: Spring transition for the indicator pill\n const pillTransition = useMemo(\n () => (prefersReducedMotion ? { duration: 0 } : SPRING_TACTILE),\n [prefersReducedMotion],\n );\n\n return (\n <div\n className={cn(\n 'bg-muted/50 relative flex items-center rounded-lg p-1',\n AI_TRANSITION.colors,\n className,\n )}\n role=\"tablist\"\n aria-label=\"Device viewport\"\n {...props}\n >\n {DEVICES.map(({ id, label, icon: Icon }) => {\n const isActive = viewport === id;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`viewport-${id}`}\n data-active={isActive}\n data-viewport={id}\n className={cn(\n 'relative z-10 flex min-h-[36px] min-w-[44px] items-center justify-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium',\n 'transition-colors outline-none',\n isActive ? 'text-foreground' : 'text-muted-foreground hover:text-foreground/80',\n AI_FOCUS.ring,\n )}\n onClick={() => setViewport(id)}\n >\n {/* Animated background pill indicator */}\n {isActive ? (\n <motion.div\n layoutId=\"viewport-indicator\"\n className=\"bg-background absolute inset-0 rounded-md shadow-sm\"\n transition={pillTransition}\n style={{ zIndex: -1 }}\n />\n ) : null}\n <Icon aria-hidden=\"true\" className=\"size-4\" />\n {/* Show label on larger screens or if not touch device */}\n <span className={cn(isTouchDevice ? 'sr-only' : 'hidden sm:inline')}>{label}</span>\n </button>\n );\n })}\n </div>\n );\n};\n\nexport type WebPreviewExampleSelectProps = {\n examples: Array<{ label: string; url: string }>;\n placeholder?: string;\n};\n\nexport const WebPreviewExampleSelect = ({\n examples,\n placeholder = 'Examples',\n}: WebPreviewExampleSelectProps) => {\n const { setUrl } = useWebPreview();\n const [selectedValue, setSelectedValue] = useState('');\n\n // Memoize change handler to prevent unnecessary re-renders\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLSelectElement>) => {\n if (e.target.value) {\n setSelectedValue(e.target.value);\n setUrl(e.target.value);\n }\n },\n [setUrl],\n );\n\n return (\n <div className={cn('flex items-center', AI_SPACING.xs)}>\n <select\n aria-label=\"Example URLs\"\n className={cn(\n 'bg-background min-h-[44px] rounded-md border px-2 text-sm',\n AI_TRANSITION.colors,\n AI_FOCUS.ring,\n )}\n data-selected={Boolean(selectedValue)}\n defaultValue=\"\"\n onChange={handleChange}\n >\n <option disabled value=\"\">\n {placeholder}\n </option>\n {examples.map(ex => (\n <option key={ex.url} value={ex.url}>\n {ex.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nexport type WebPreviewNetworkStatusProps = ComponentProps<'div'>;\n\n/**\n * WebPreviewNetworkStatus - Shows offline indicator and slow connection warnings\n *\n * Displays when:\n * - User is offline (red indicator)\n * - Connection is slow-2g or 2g (yellow warning)\n */\nexport const WebPreviewNetworkStatus = ({ className, ...props }: WebPreviewNetworkStatusProps) => {\n const { network, prefersReducedMotion } = useWebPreview();\n\n // Don't show anything if online with good connection\n const shouldShow =\n !network.online || network.effectiveType === 'slow-2g' || network.effectiveType === '2g';\n\n const isOffline = !network.online;\n const isSlowConnection = network.effectiveType === 'slow-2g' || network.effectiveType === '2g';\n\n // Premium Harmony V2: Memoized animation variants\n const statusVariants = useMemo(\n () => ({\n hidden: { opacity: 0, scale: 0.9, y: -10 },\n visible: { opacity: 1, scale: 1, y: 0 },\n exit: { opacity: 0, scale: 0.9, y: -10 },\n }),\n [],\n );\n\n return (\n <AnimatePresence>\n {shouldShow ? (\n <motion.div\n key=\"network-status\"\n animate=\"visible\"\n exit=\"exit\"\n initial=\"hidden\"\n transition={prefersReducedMotion ? { duration: 0 } : SPRING_FLUID}\n variants={statusVariants}\n >\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n className={cn(\n 'flex items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium',\n AI_TRANSITION.colors,\n isOffline && 'bg-destructive/10 text-destructive',\n !isOffline && isSlowConnection && 'bg-warning/10 text-warning',\n className,\n )}\n data-state={isOffline ? 'offline' : 'slow'}\n data-connection-type={network.effectiveType}\n role=\"status\"\n aria-live=\"polite\"\n {...props}\n >\n <WifiOffIcon aria-hidden=\"true\" className=\"size-3.5\" />\n <span>{isOffline ? 'Offline' : 'Slow connection'}</span>\n </div>\n </TooltipTrigger>\n <TooltipContent>\n {isOffline ? (\n <p>No internet connection. Preview may not load.</p>\n ) : (\n <p>Slow connection ({network.effectiveType}). Preview may load slowly.</p>\n )}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </motion.div>\n ) : null}\n </AnimatePresence>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,207 @@
1
+
2
+ import { a as SPRING_TACTILE, i as SPRING_GENTLE, o as SPRING_WEIGHTED, r as SPRING_FLUID } from "./motion-DLlwbMJ0.mjs";
3
+
4
+ //#region src/components/ai-elements/ai-elements.constants.d.ts
5
+ declare const AI_SPACING: {
6
+ readonly xs: "gap-2";
7
+ readonly sm: "gap-3";
8
+ readonly md: "gap-4";
9
+ readonly lg: "gap-6";
10
+ };
11
+ declare const AI_PADDING: {
12
+ readonly compact: "p-2";
13
+ readonly standard: "p-3";
14
+ readonly comfortable: "p-4";
15
+ };
16
+ declare const AI_STACK: {
17
+ readonly tight: "space-y-2";
18
+ readonly standard: "space-y-3";
19
+ readonly loose: "space-y-4";
20
+ };
21
+ declare const AI_RADIUS: {
22
+ readonly sm: "rounded-sm";
23
+ readonly md: "rounded-md";
24
+ readonly lg: "rounded-lg";
25
+ readonly xl: "rounded-xl";
26
+ readonly full: "rounded-full";
27
+ };
28
+ declare const AI_CONTAINER_RADIUS: "rounded-lg";
29
+ declare const AI_NESTED_RADIUS: "rounded-md";
30
+ declare const AI_TEXT: {
31
+ readonly '2xs': "text-2xs";
32
+ readonly xs: "text-xs";
33
+ readonly sm: "text-sm";
34
+ readonly base: "text-base";
35
+ readonly lg: "text-lg";
36
+ };
37
+ declare const AI_WEIGHT: {
38
+ readonly normal: "font-normal";
39
+ readonly medium: "font-medium";
40
+ readonly semibold: "font-semibold";
41
+ };
42
+ declare const AI_TITLE: {
43
+ readonly primary: "text-sm font-semibold text-foreground";
44
+ readonly secondary: "text-sm font-medium text-foreground";
45
+ readonly label: "text-xs font-medium text-muted-foreground uppercase tracking-wide";
46
+ };
47
+ declare const AI_BODY: {
48
+ readonly primary: "text-sm text-foreground";
49
+ readonly secondary: "text-sm text-muted-foreground";
50
+ readonly small: "text-xs text-muted-foreground";
51
+ };
52
+ declare const AI_COLORS: {
53
+ readonly default: {
54
+ readonly bg: "bg-card";
55
+ readonly text: "text-foreground";
56
+ readonly border: "border-border";
57
+ };
58
+ readonly muted: {
59
+ readonly bg: "bg-muted";
60
+ readonly text: "text-muted-foreground";
61
+ readonly border: "border-border/50";
62
+ };
63
+ readonly success: {
64
+ readonly bg: "bg-success/10";
65
+ readonly text: "text-success";
66
+ readonly border: "border-success/30";
67
+ };
68
+ readonly warning: {
69
+ readonly bg: "bg-warning/10";
70
+ readonly text: "text-warning";
71
+ readonly border: "border-warning/30";
72
+ };
73
+ readonly error: {
74
+ readonly bg: "bg-destructive/10";
75
+ readonly text: "text-destructive";
76
+ readonly border: "border-destructive/30";
77
+ };
78
+ readonly info: {
79
+ readonly bg: "bg-info/10";
80
+ readonly text: "text-info";
81
+ readonly border: "border-info/30";
82
+ };
83
+ };
84
+ declare const AI_CONTAINER: {
85
+ readonly card: "bg-card border border-border rounded-lg p-3";
86
+ readonly cardCompact: "bg-card border border-border rounded-lg p-2";
87
+ readonly subtle: "bg-muted/50 rounded-md p-3";
88
+ readonly ghost: "rounded-md";
89
+ readonly elevated: "bg-popover border border-border rounded-lg p-3 shadow-md";
90
+ readonly interactive: "bg-card border border-border rounded-lg p-3 transition-colors hover:bg-accent/50 focus-visible:ring-2 focus-visible:ring-ring";
91
+ };
92
+ declare const AI_HEADER: {
93
+ readonly base: "flex w-full items-center gap-2 text-sm";
94
+ readonly muted: "text-muted-foreground hover:text-foreground transition-colors";
95
+ readonly active: "text-foreground";
96
+ };
97
+ declare const AI_ICON: {
98
+ readonly sm: "size-3.5";
99
+ readonly md: "size-4";
100
+ readonly lg: "size-5";
101
+ };
102
+ declare const AI_ICON_STYLE: {
103
+ readonly muted: "text-muted-foreground";
104
+ readonly default: "text-foreground";
105
+ readonly inherit: "";
106
+ };
107
+ declare const AI_ANIMATE: {
108
+ readonly entry: "animate-message-entry";
109
+ readonly stagger: "animate-stagger-fade-in";
110
+ readonly thinking: "animate-brain-pulse";
111
+ readonly stateChange: "animate-tool-state-enter";
112
+ readonly slideLeft: "animate-branch-slide-left";
113
+ readonly slideRight: "animate-branch-slide-right";
114
+ readonly copyBounce: "animate-code-copy-bounce";
115
+ readonly focusPulse: "animate-focus-pulse";
116
+ readonly lineDraw: "animate-line-draw";
117
+ readonly popoverBounce: "animate-sources-bounce";
118
+ };
119
+ declare const AI_STAGGER_DELAY: {
120
+ readonly fast: 30;
121
+ readonly standard: 50;
122
+ readonly slow: 75;
123
+ readonly dramatic: 100;
124
+ };
125
+ declare const AI_DURATION: {
126
+ readonly fast: 150;
127
+ readonly standard: 200;
128
+ readonly entry: 300;
129
+ readonly complex: 400;
130
+ };
131
+ declare const AI_INTERACTION: {
132
+ readonly hoverScale: 1.01;
133
+ readonly tapScale: 0.98;
134
+ };
135
+ declare const AI_HOVER: {
136
+ readonly bg: "hover:bg-accent/50";
137
+ readonly text: "hover:text-foreground";
138
+ readonly both: "hover:bg-accent/50 hover:text-foreground";
139
+ };
140
+ declare const AI_FOCUS: {
141
+ readonly ring: "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2";
142
+ readonly subtle: "focus-visible:outline-none focus-visible:text-foreground";
143
+ };
144
+ declare const AI_DISABLED: {
145
+ readonly opacity: "disabled:opacity-50";
146
+ readonly cursor: "disabled:cursor-not-allowed";
147
+ readonly full: "disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none";
148
+ };
149
+ declare const AI_TRANSITION: {
150
+ readonly colors: "transition-colors";
151
+ readonly transform: "transition-transform";
152
+ readonly all: "transition-all";
153
+ readonly opacity: "transition-opacity";
154
+ };
155
+ declare const AI_COLLAPSIBLE: {
156
+ readonly content: string;
157
+ readonly chevron: "transition-transform data-[state=open]:rotate-180";
158
+ readonly chevronGroup: "transition-transform group-data-[state=open]:rotate-180";
159
+ };
160
+ declare const AI_STATUS: {
161
+ readonly pending: {
162
+ readonly icon: "text-muted-foreground";
163
+ readonly text: "text-muted-foreground";
164
+ readonly bg: "";
165
+ };
166
+ readonly active: {
167
+ readonly icon: "text-info animate-pulse";
168
+ readonly text: "text-foreground";
169
+ readonly bg: "";
170
+ };
171
+ readonly complete: {
172
+ readonly icon: "text-success";
173
+ readonly text: "text-muted-foreground";
174
+ readonly bg: "";
175
+ };
176
+ readonly error: {
177
+ readonly icon: "text-destructive";
178
+ readonly text: "text-destructive";
179
+ readonly bg: "bg-destructive/10";
180
+ };
181
+ readonly warning: {
182
+ readonly icon: "text-warning";
183
+ readonly text: "text-warning";
184
+ readonly bg: "bg-warning/10";
185
+ };
186
+ };
187
+ declare const AI_STYLES: {
188
+ readonly card: "bg-card border border-border rounded-lg p-3";
189
+ readonly trigger: "flex w-full items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors transition-colors";
190
+ readonly contentArea: "bg-muted/50 rounded-md p-3";
191
+ readonly listItem: "flex items-start gap-2 p-2 rounded-md hover:bg-accent/50 transition-colors";
192
+ readonly badge: "inline-flex items-center gap-2 px-2 py-0.5 rounded-full text-xs";
193
+ readonly actions: "flex items-center gap-2";
194
+ };
195
+ type AISpacing = keyof typeof AI_SPACING;
196
+ type AIPadding = keyof typeof AI_PADDING;
197
+ type AIRadius = keyof typeof AI_RADIUS;
198
+ type AIText = keyof typeof AI_TEXT;
199
+ type AIWeight = keyof typeof AI_WEIGHT;
200
+ type AIColorScheme = keyof typeof AI_COLORS;
201
+ type AIContainer = keyof typeof AI_CONTAINER;
202
+ type AIIcon = keyof typeof AI_ICON;
203
+ type AIAnimate = keyof typeof AI_ANIMATE;
204
+ type AIStatus = keyof typeof AI_STATUS;
205
+ //#endregion
206
+ export { AIAnimate, AIColorScheme, AIContainer, AIIcon, AIPadding, AIRadius, AISpacing, AIStatus, AIText, AIWeight, AI_ANIMATE, AI_BODY, AI_COLLAPSIBLE, AI_COLORS, AI_CONTAINER, AI_CONTAINER_RADIUS, AI_DISABLED, AI_DURATION, AI_FOCUS, AI_HEADER, AI_HOVER, AI_ICON, AI_ICON_STYLE, AI_INTERACTION, AI_NESTED_RADIUS, AI_PADDING, AI_RADIUS, AI_SPACING, AI_STACK, AI_STAGGER_DELAY, AI_STATUS, AI_STYLES, AI_TEXT, AI_TITLE, AI_TRANSITION, AI_WEIGHT, SPRING_FLUID, SPRING_GENTLE, SPRING_TACTILE, SPRING_WEIGHTED };
207
+ //# sourceMappingURL=components-ai-elements-constants.d.mts.map
@@ -0,0 +1,301 @@
1
+ 'use client';
2
+ import { a as SPRING_TACTILE, i as SPRING_GENTLE, o as SPRING_WEIGHTED, r as SPRING_FLUID } from "./motion-zelaDelJ.mjs";
3
+
4
+ //#region src/components/ai-elements/ai-elements.constants.ts
5
+ /**
6
+ * @fileoverview AI Elements Design System Constants
7
+ * AI Elements Design System Constants
8
+ *
9
+ * Unified visual language for all AI chat components.
10
+ * All values reference the design token system.
11
+ *
12
+ * @module @od-oneapp/uni-ui/components/ai-elements/ai-elements.constants
13
+ */
14
+ /**
15
+ * Standard spacing values for AI elements
16
+ * Using consistent scale: 2 (8px), 3 (12px), 4 (16px)
17
+ */
18
+ const AI_SPACING = {
19
+ xs: "gap-2",
20
+ sm: "gap-3",
21
+ md: "gap-4",
22
+ lg: "gap-6"
23
+ };
24
+ /**
25
+ * Standard padding for AI element containers
26
+ */
27
+ const AI_PADDING = {
28
+ compact: "p-2",
29
+ standard: "p-3",
30
+ comfortable: "p-4"
31
+ };
32
+ /**
33
+ * Standard internal spacing (space-y for vertical stacking)
34
+ */
35
+ const AI_STACK = {
36
+ tight: "space-y-2",
37
+ standard: "space-y-3",
38
+ loose: "space-y-4"
39
+ };
40
+ /**
41
+ * Standard border radius for AI elements
42
+ * Primary: rounded-lg (12px) for cards/containers
43
+ * Secondary: rounded-md (8px) for nested elements
44
+ */
45
+ const AI_RADIUS = {
46
+ sm: "rounded-sm",
47
+ md: "rounded-md",
48
+ lg: "rounded-lg",
49
+ xl: "rounded-xl",
50
+ full: "rounded-full"
51
+ };
52
+ /**
53
+ * Standard container radius - use this for all AI element cards
54
+ */
55
+ const AI_CONTAINER_RADIUS = AI_RADIUS.lg;
56
+ /**
57
+ * Standard nested element radius - use this for elements inside containers
58
+ */
59
+ const AI_NESTED_RADIUS = AI_RADIUS.md;
60
+ /**
61
+ * Typography scale for AI elements
62
+ * Follows existing token system
63
+ */
64
+ const AI_TEXT = {
65
+ "2xs": "text-2xs",
66
+ xs: "text-xs",
67
+ sm: "text-sm",
68
+ base: "text-base",
69
+ lg: "text-lg"
70
+ };
71
+ /**
72
+ * Font weights for AI elements
73
+ */
74
+ const AI_WEIGHT = {
75
+ normal: "font-normal",
76
+ medium: "font-medium",
77
+ semibold: "font-semibold"
78
+ };
79
+ /**
80
+ * Standard title styles for AI element headers
81
+ */
82
+ const AI_TITLE = {
83
+ primary: "text-sm font-semibold text-foreground",
84
+ secondary: "text-sm font-medium text-foreground",
85
+ label: "text-xs font-medium text-muted-foreground uppercase tracking-wide"
86
+ };
87
+ /**
88
+ * Standard body text styles
89
+ */
90
+ const AI_BODY = {
91
+ primary: "text-sm text-foreground",
92
+ secondary: "text-sm text-muted-foreground",
93
+ small: "text-xs text-muted-foreground"
94
+ };
95
+ /**
96
+ * Semantic color classes for AI element states
97
+ */
98
+ const AI_COLORS = {
99
+ default: {
100
+ bg: "bg-card",
101
+ text: "text-foreground",
102
+ border: "border-border"
103
+ },
104
+ muted: {
105
+ bg: "bg-muted",
106
+ text: "text-muted-foreground",
107
+ border: "border-border/50"
108
+ },
109
+ success: {
110
+ bg: "bg-success/10",
111
+ text: "text-success",
112
+ border: "border-success/30"
113
+ },
114
+ warning: {
115
+ bg: "bg-warning/10",
116
+ text: "text-warning",
117
+ border: "border-warning/30"
118
+ },
119
+ error: {
120
+ bg: "bg-destructive/10",
121
+ text: "text-destructive",
122
+ border: "border-destructive/30"
123
+ },
124
+ info: {
125
+ bg: "bg-info/10",
126
+ text: "text-info",
127
+ border: "border-info/30"
128
+ }
129
+ };
130
+ /**
131
+ * Standard AI element container styles
132
+ * Use these for visual consistency across all AI components
133
+ */
134
+ const AI_CONTAINER = {
135
+ card: "bg-card border border-border rounded-lg p-3",
136
+ cardCompact: "bg-card border border-border rounded-lg p-2",
137
+ subtle: "bg-muted/50 rounded-md p-3",
138
+ ghost: "rounded-md",
139
+ elevated: "bg-popover border border-border rounded-lg p-3 shadow-md",
140
+ interactive: "bg-card border border-border rounded-lg p-3 transition-colors hover:bg-accent/50 focus-visible:ring-2 focus-visible:ring-ring"
141
+ };
142
+ /**
143
+ * Standard header styles for collapsible AI elements
144
+ * Provides consistent trigger appearance
145
+ */
146
+ const AI_HEADER = {
147
+ base: "flex w-full items-center gap-2 text-sm",
148
+ muted: "text-muted-foreground hover:text-foreground transition-colors",
149
+ active: "text-foreground"
150
+ };
151
+ /**
152
+ * Standard icon sizes for AI elements
153
+ * Use consistent sizes across all components
154
+ */
155
+ const AI_ICON = {
156
+ sm: "size-3.5",
157
+ md: "size-4",
158
+ lg: "size-5"
159
+ };
160
+ /**
161
+ * Standard icon styling
162
+ */
163
+ const AI_ICON_STYLE = {
164
+ muted: "text-muted-foreground",
165
+ default: "text-foreground",
166
+ inherit: ""
167
+ };
168
+ /**
169
+ * Animation class names for AI elements
170
+ * All respect prefers-reduced-motion via conditional application
171
+ */
172
+ const AI_ANIMATE = {
173
+ entry: "animate-message-entry",
174
+ stagger: "animate-stagger-fade-in",
175
+ thinking: "animate-brain-pulse",
176
+ stateChange: "animate-tool-state-enter",
177
+ slideLeft: "animate-branch-slide-left",
178
+ slideRight: "animate-branch-slide-right",
179
+ copyBounce: "animate-code-copy-bounce",
180
+ focusPulse: "animate-focus-pulse",
181
+ lineDraw: "animate-line-draw",
182
+ popoverBounce: "animate-sources-bounce"
183
+ };
184
+ /**
185
+ * Stagger delay scale for list animations (in ms)
186
+ */
187
+ const AI_STAGGER_DELAY = {
188
+ fast: 30,
189
+ standard: 50,
190
+ slow: 75,
191
+ dramatic: 100
192
+ };
193
+ /**
194
+ * Animation duration tokens (matching globals.css)
195
+ */
196
+ const AI_DURATION = {
197
+ fast: 150,
198
+ standard: 200,
199
+ entry: 300,
200
+ complex: 400
201
+ };
202
+ /**
203
+ * Standard interaction tokens for animations
204
+ */
205
+ const AI_INTERACTION = {
206
+ hoverScale: 1.01,
207
+ tapScale: .98
208
+ };
209
+ /**
210
+ * Standard hover state classes
211
+ */
212
+ const AI_HOVER = {
213
+ bg: "hover:bg-accent/50",
214
+ text: "hover:text-foreground",
215
+ both: "hover:bg-accent/50 hover:text-foreground"
216
+ };
217
+ /**
218
+ * Standard focus state classes
219
+ */
220
+ const AI_FOCUS = {
221
+ ring: "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
222
+ subtle: "focus-visible:outline-none focus-visible:text-foreground"
223
+ };
224
+ /**
225
+ * Standard disabled state classes
226
+ */
227
+ const AI_DISABLED = {
228
+ opacity: "disabled:opacity-50",
229
+ cursor: "disabled:cursor-not-allowed",
230
+ full: "disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none"
231
+ };
232
+ /**
233
+ * Standard transition classes
234
+ */
235
+ const AI_TRANSITION = {
236
+ colors: "transition-colors",
237
+ transform: "transition-transform",
238
+ all: "transition-all",
239
+ opacity: "transition-opacity"
240
+ };
241
+ /**
242
+ * Standard collapsible content animations
243
+ * Used for Tool, Task, Reasoning, ChainOfThought, etc.
244
+ */
245
+ const AI_COLLAPSIBLE = {
246
+ content: [
247
+ "data-[state=closed]:animate-out",
248
+ "data-[state=open]:animate-in",
249
+ "data-[state=closed]:fade-out-0",
250
+ "data-[state=open]:fade-in-0",
251
+ "data-[state=closed]:slide-out-to-top-2",
252
+ "data-[state=open]:slide-in-from-top-2"
253
+ ].join(" "),
254
+ chevron: "transition-transform data-[state=open]:rotate-180",
255
+ chevronGroup: "transition-transform group-data-[state=open]:rotate-180"
256
+ };
257
+ /**
258
+ * Status indicator styles for progress/state display
259
+ */
260
+ const AI_STATUS = {
261
+ pending: {
262
+ icon: "text-muted-foreground",
263
+ text: "text-muted-foreground",
264
+ bg: ""
265
+ },
266
+ active: {
267
+ icon: "text-info animate-pulse",
268
+ text: "text-foreground",
269
+ bg: ""
270
+ },
271
+ complete: {
272
+ icon: "text-success",
273
+ text: "text-muted-foreground",
274
+ bg: ""
275
+ },
276
+ error: {
277
+ icon: "text-destructive",
278
+ text: "text-destructive",
279
+ bg: "bg-destructive/10"
280
+ },
281
+ warning: {
282
+ icon: "text-warning",
283
+ text: "text-warning",
284
+ bg: "bg-warning/10"
285
+ }
286
+ };
287
+ /**
288
+ * Ready-to-use composite class strings for common patterns
289
+ */
290
+ const AI_STYLES = {
291
+ card: `${AI_CONTAINER.card}`,
292
+ trigger: `${AI_HEADER.base} ${AI_HEADER.muted} ${AI_TRANSITION.colors}`,
293
+ contentArea: `${AI_CONTAINER.subtle}`,
294
+ listItem: `flex items-start ${AI_SPACING.xs} ${AI_PADDING.compact} ${AI_RADIUS.md} ${AI_HOVER.bg} ${AI_TRANSITION.colors}`,
295
+ badge: `inline-flex items-center ${AI_SPACING.xs} px-2 py-0.5 ${AI_RADIUS.full} ${AI_TEXT.xs}`,
296
+ actions: `flex items-center ${AI_SPACING.xs}`
297
+ };
298
+
299
+ //#endregion
300
+ export { AI_ANIMATE, AI_BODY, AI_COLLAPSIBLE, AI_COLORS, AI_CONTAINER, AI_CONTAINER_RADIUS, AI_DISABLED, AI_DURATION, AI_FOCUS, AI_HEADER, AI_HOVER, AI_ICON, AI_ICON_STYLE, AI_INTERACTION, AI_NESTED_RADIUS, AI_PADDING, AI_RADIUS, AI_SPACING, AI_STACK, AI_STAGGER_DELAY, AI_STATUS, AI_STYLES, AI_TEXT, AI_TITLE, AI_TRANSITION, AI_WEIGHT, SPRING_FLUID, SPRING_GENTLE, SPRING_TACTILE, SPRING_WEIGHTED };
301
+ //# sourceMappingURL=components-ai-elements-constants.mjs.map