@keboola/design 10.1.0 → 11.0.1

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 (382) hide show
  1. package/AGENTS.md +2 -0
  2. package/dist/AIKit-Dre37SJr.js +1320 -0
  3. package/dist/AIKit-Dre37SJr.js.map +1 -0
  4. package/dist/Alert-DfZq9kGe.js +133 -0
  5. package/dist/Alert-DfZq9kGe.js.map +1 -0
  6. package/dist/AlertModal-BUC4Es8o.js +222 -0
  7. package/dist/AlertModal-BUC4Es8o.js.map +1 -0
  8. package/dist/AppShell-B5GQN6Zs.js +143 -0
  9. package/dist/AppShell-B5GQN6Zs.js.map +1 -0
  10. package/dist/AutoSaveTextarea-BeuWuszr.js +58 -0
  11. package/dist/AutoSaveTextarea-BeuWuszr.js.map +1 -0
  12. package/dist/Badge-Ch26CXoP.js +195 -0
  13. package/dist/Badge-Ch26CXoP.js.map +1 -0
  14. package/dist/BrandEditor-B8o9zdZO.js +903 -0
  15. package/dist/BrandEditor-B8o9zdZO.js.map +1 -0
  16. package/dist/BrandLogo-CJkRd0F8.js +46 -0
  17. package/dist/BrandLogo-CJkRd0F8.js.map +1 -0
  18. package/dist/Breadcrumb-DJp7WwSv.js +330 -0
  19. package/dist/Breadcrumb-DJp7WwSv.js.map +1 -0
  20. package/dist/Button-nzmDNS2q.js +391 -0
  21. package/dist/Button-nzmDNS2q.js.map +1 -0
  22. package/dist/Calendar-cG5NIJ4O.js +6768 -0
  23. package/dist/Calendar-cG5NIJ4O.js.map +1 -0
  24. package/dist/Card-BAoZ35CV.js +105 -0
  25. package/dist/Card-BAoZ35CV.js.map +1 -0
  26. package/dist/Checkbox-GJ8-srt4.js +97 -0
  27. package/dist/Checkbox-GJ8-srt4.js.map +1 -0
  28. package/dist/Clipboard-CBJZiviP.js +58 -0
  29. package/dist/Clipboard-CBJZiviP.js.map +1 -0
  30. package/dist/ClipboardButton-ez5V3fkk.js +43 -0
  31. package/dist/ClipboardButton-ez5V3fkk.js.map +1 -0
  32. package/dist/CodeEditor-BfQJfbhL.js +952 -0
  33. package/dist/CodeEditor-BfQJfbhL.js.map +1 -0
  34. package/dist/Collapsible-BQXWEOBC.js +34 -0
  35. package/dist/Collapsible-BQXWEOBC.js.map +1 -0
  36. package/dist/ColorInput-Dx8Dsv7Y.js +180 -0
  37. package/dist/ColorInput-Dx8Dsv7Y.js.map +1 -0
  38. package/dist/ColorModeSwitch-CCqj7tjE.js +77 -0
  39. package/dist/ColorModeSwitch-CCqj7tjE.js.map +1 -0
  40. package/dist/Combobox-c_xBjf0P.js +439 -0
  41. package/dist/Combobox-c_xBjf0P.js.map +1 -0
  42. package/dist/Command-CQ_bQsJp.js +102 -0
  43. package/dist/Command-CQ_bQsJp.js.map +1 -0
  44. package/dist/CopyField-BJ96zvXs.js +322 -0
  45. package/dist/CopyField-BJ96zvXs.js.map +1 -0
  46. package/dist/DateInput-CMD3dY-T.js +141 -0
  47. package/dist/DateInput-CMD3dY-T.js.map +1 -0
  48. package/dist/DatePicker-BbFbmsGl.js +24 -0
  49. package/dist/DatePicker-BbFbmsGl.js.map +1 -0
  50. package/dist/DateRangeInput-D3BhiKyk.js +139 -0
  51. package/dist/DateRangeInput-D3BhiKyk.js.map +1 -0
  52. package/dist/DateRangePicker-BiUgtt_M.js +159 -0
  53. package/dist/DateRangePicker-BiUgtt_M.js.map +1 -0
  54. package/dist/DiagramSkeleton-lwBS2YBa.js +11 -0
  55. package/dist/DiagramSkeleton-lwBS2YBa.js.map +1 -0
  56. package/dist/DiffView-ppTIzh2h.js +429 -0
  57. package/dist/DiffView-ppTIzh2h.js.map +1 -0
  58. package/dist/DropdownMenu-B6ZbYvaM.js +327 -0
  59. package/dist/DropdownMenu-B6ZbYvaM.js.map +1 -0
  60. package/dist/FieldBox-D7DYtX_m.js +70 -0
  61. package/dist/FieldBox-D7DYtX_m.js.map +1 -0
  62. package/dist/FileUpload-sXRv7JiY.js +2527 -0
  63. package/dist/FileUpload-sXRv7JiY.js.map +1 -0
  64. package/dist/Form-BDCef6O9.js +371 -0
  65. package/dist/Form-BDCef6O9.js.map +1 -0
  66. package/dist/FormGroup-S9mPNHKH.js +124 -0
  67. package/dist/FormGroup-S9mPNHKH.js.map +1 -0
  68. package/dist/FullScreenModal-CJa2VkJ2.js +96 -0
  69. package/dist/FullScreenModal-CJa2VkJ2.js.map +1 -0
  70. package/dist/HoverCard-WfDkLK1s.js +31 -0
  71. package/dist/HoverCard-WfDkLK1s.js.map +1 -0
  72. package/dist/InputGroup-BJWsI35s.js +292 -0
  73. package/dist/InputGroup-BJWsI35s.js.map +1 -0
  74. package/dist/Kbd-CxHAo1oo.js +111 -0
  75. package/dist/Kbd-CxHAo1oo.js.map +1 -0
  76. package/dist/MarkedText-Ckbft5mw.js +44 -0
  77. package/dist/MarkedText-Ckbft5mw.js.map +1 -0
  78. package/dist/MermaidDiagram-BB06gymm.js +399 -0
  79. package/dist/MermaidDiagram-BB06gymm.js.map +1 -0
  80. package/dist/Modal-BA5Wc3sx.js +185 -0
  81. package/dist/Modal-BA5Wc3sx.js.map +1 -0
  82. package/dist/ModalTitle-C76ke2eo.js +28 -0
  83. package/dist/ModalTitle-C76ke2eo.js.map +1 -0
  84. package/dist/MultiActionButtonGroup-CiBHxsSk.js +33 -0
  85. package/dist/MultiActionButtonGroup-CiBHxsSk.js.map +1 -0
  86. package/dist/Navbar-t16usFZQ.js +322 -0
  87. package/dist/Navbar-t16usFZQ.js.map +1 -0
  88. package/dist/OtpInput-CbbymqYs.js +93 -0
  89. package/dist/OtpInput-CbbymqYs.js.map +1 -0
  90. package/dist/PageHeader-Q3IpCnQd.js +177 -0
  91. package/dist/PageHeader-Q3IpCnQd.js.map +1 -0
  92. package/dist/PageLayout-DSVM-ASz.js +176 -0
  93. package/dist/PageLayout-DSVM-ASz.js.map +1 -0
  94. package/dist/PageToolbar-0_1OBzaZ.js +153 -0
  95. package/dist/PageToolbar-0_1OBzaZ.js.map +1 -0
  96. package/dist/Pagination-CM_Rszz-.js +70 -0
  97. package/dist/Pagination-CM_Rszz-.js.map +1 -0
  98. package/dist/Popconfirm-BGe1jLov.js +170 -0
  99. package/dist/Popconfirm-BGe1jLov.js.map +1 -0
  100. package/dist/Popover-Ca0V6AD1.js +92 -0
  101. package/dist/Popover-Ca0V6AD1.js.map +1 -0
  102. package/dist/RadioGroup-sIveSsNa.js +233 -0
  103. package/dist/RadioGroup-sIveSsNa.js.map +1 -0
  104. package/dist/Resizable-D3vYToZH.js +52 -0
  105. package/dist/Resizable-D3vYToZH.js.map +1 -0
  106. package/dist/Search-3UiqNZRj.js +184 -0
  107. package/dist/Search-3UiqNZRj.js.map +1 -0
  108. package/dist/SearchInput-D2fcOv7E.js +102 -0
  109. package/dist/SearchInput-D2fcOv7E.js.map +1 -0
  110. package/dist/SectionNav--7bw2b6u.js +276 -0
  111. package/dist/SectionNav--7bw2b6u.js.map +1 -0
  112. package/dist/Select-4YX38G5h.js +181 -0
  113. package/dist/Select-4YX38G5h.js.map +1 -0
  114. package/dist/Sheet-BQrX8-h5.js +169 -0
  115. package/dist/Sheet-BQrX8-h5.js.map +1 -0
  116. package/dist/Sidebar-ROaR_AqC.js +799 -0
  117. package/dist/Sidebar-ROaR_AqC.js.map +1 -0
  118. package/dist/Slider-Da_3mS5v.js +127 -0
  119. package/dist/Slider-Da_3mS5v.js.map +1 -0
  120. package/dist/Stepper-C8sm9ZFM.js +325 -0
  121. package/dist/Stepper-C8sm9ZFM.js.map +1 -0
  122. package/dist/Switch-CX2A0v50.js +201 -0
  123. package/dist/Switch-CX2A0v50.js.map +1 -0
  124. package/dist/Table-CvYuTuNU.js +104 -0
  125. package/dist/Table-CvYuTuNU.js.map +1 -0
  126. package/dist/Tabs-EAihyqCt.js +74 -0
  127. package/dist/Tabs-EAihyqCt.js.map +1 -0
  128. package/dist/TextInput-BGed-V13.js +110 -0
  129. package/dist/TextInput-BGed-V13.js.map +1 -0
  130. package/dist/ThemeProvider-QncUrfJn.js +203 -0
  131. package/dist/ThemeProvider-QncUrfJn.js.map +1 -0
  132. package/dist/TimePicker-B_NegL-7.js +98 -0
  133. package/dist/TimePicker-B_NegL-7.js.map +1 -0
  134. package/dist/Timeline-6btyJl4D.js +154 -0
  135. package/dist/Timeline-6btyJl4D.js.map +1 -0
  136. package/dist/Toast-DQSbs3oA.js +49 -0
  137. package/dist/Toast-DQSbs3oA.js.map +1 -0
  138. package/dist/ToggleGroup-Cy_10Mvu.js +47 -0
  139. package/dist/ToggleGroup-Cy_10Mvu.js.map +1 -0
  140. package/dist/Workbench-BzE-Vvd9.js +293 -0
  141. package/dist/Workbench-BzE-Vvd9.js.map +1 -0
  142. package/dist/ZoomableSvg-DG9PnAm8.js +248 -0
  143. package/dist/ZoomableSvg-DG9PnAm8.js.map +1 -0
  144. package/dist/charts.d.ts +124 -111
  145. package/dist/charts.js +303 -249
  146. package/dist/charts.js.map +1 -1
  147. package/dist/classNames-BzrkDnOD.js +9 -0
  148. package/dist/classNames-BzrkDnOD.js.map +1 -0
  149. package/dist/constants-D6JcsD4_.d.ts +41 -0
  150. package/dist/context-KxxeMHbR.js +62 -0
  151. package/dist/context-KxxeMHbR.js.map +1 -0
  152. package/dist/editors.d.ts +180 -173
  153. package/dist/editors.js +747 -420
  154. package/dist/editors.js.map +1 -1
  155. package/dist/escapeStringRegexp-8MxP2knR.js +6 -0
  156. package/dist/escapeStringRegexp-8MxP2knR.js.map +1 -0
  157. package/dist/icons-Cek151jC.js +640 -0
  158. package/dist/icons-Cek151jC.js.map +1 -0
  159. package/dist/icons.d.ts +2 -41
  160. package/dist/icons.js +2 -4
  161. package/dist/index-m-kQEWiY.d.ts +54 -0
  162. package/dist/index.d.ts +6192 -9904
  163. package/dist/index.js +112 -15803
  164. package/dist/internal/blocks/AIKit.js +2 -0
  165. package/dist/internal/blocks/AppShell.js +2 -0
  166. package/dist/internal/blocks/AutoSaveTextarea.js +2 -0
  167. package/dist/internal/blocks/BrandEditor.js +2 -0
  168. package/dist/internal/blocks/ChartPanel.js +46 -0
  169. package/dist/internal/blocks/ChartPanel.js.map +1 -0
  170. package/dist/internal/blocks/ClipboardButton.js +2 -0
  171. package/dist/internal/blocks/ColorInput.js +2 -0
  172. package/dist/internal/blocks/ColorModeSwitch.js +2 -0
  173. package/dist/internal/blocks/Command.js +2 -0
  174. package/dist/internal/blocks/CopyField.js +2 -0
  175. package/dist/internal/blocks/DashboardHero.js +59 -0
  176. package/dist/internal/blocks/DashboardHero.js.map +1 -0
  177. package/dist/internal/blocks/DateInput.js +2 -0
  178. package/dist/internal/blocks/DateRangeInput.js +2 -0
  179. package/dist/internal/blocks/EmptyConfigurationActionCard.js +16 -0
  180. package/dist/internal/blocks/EmptyConfigurationActionCard.js.map +1 -0
  181. package/dist/internal/blocks/EmptyState.js +142 -0
  182. package/dist/internal/blocks/EmptyState.js.map +1 -0
  183. package/dist/internal/blocks/ErrorState.js +179 -0
  184. package/dist/internal/blocks/ErrorState.js.map +1 -0
  185. package/dist/internal/blocks/ExportMenu.js +41 -0
  186. package/dist/internal/blocks/ExportMenu.js.map +1 -0
  187. package/dist/internal/blocks/Form.js +2 -0
  188. package/dist/internal/blocks/FormGroup.js +2 -0
  189. package/dist/internal/blocks/GoogleButton.js +95 -0
  190. package/dist/internal/blocks/GoogleButton.js.map +1 -0
  191. package/dist/internal/blocks/MicrosoftButton.js +64 -0
  192. package/dist/internal/blocks/MicrosoftButton.js.map +1 -0
  193. package/dist/internal/blocks/MultiActionButtonGroup.js +2 -0
  194. package/dist/internal/blocks/MultiCombobox.js +188 -0
  195. package/dist/internal/blocks/MultiCombobox.js.map +1 -0
  196. package/dist/internal/blocks/NumberInput.js +44 -0
  197. package/dist/internal/blocks/NumberInput.js.map +1 -0
  198. package/dist/internal/blocks/OtpInput.js +2 -0
  199. package/dist/internal/blocks/PageHeader.js +2 -0
  200. package/dist/internal/blocks/PageLayout.js +2 -0
  201. package/dist/internal/blocks/PageToolbar.js +2 -0
  202. package/dist/internal/blocks/PasswordInput.js +97 -0
  203. package/dist/internal/blocks/PasswordInput.js.map +1 -0
  204. package/dist/internal/blocks/SearchInput.js +2 -0
  205. package/dist/internal/blocks/SearchInputWithNavigation.js +65 -0
  206. package/dist/internal/blocks/SearchInputWithNavigation.js.map +1 -0
  207. package/dist/internal/blocks/SectionNav.js +2 -0
  208. package/dist/internal/blocks/SplitButton.js +46 -0
  209. package/dist/internal/blocks/SplitButton.js.map +1 -0
  210. package/dist/internal/blocks/StatCard.js +97 -0
  211. package/dist/internal/blocks/StatCard.js.map +1 -0
  212. package/dist/internal/blocks/TextInput.js +2 -0
  213. package/dist/internal/blocks/Textarea.js +32 -0
  214. package/dist/internal/blocks/Textarea.js.map +1 -0
  215. package/dist/internal/blocks/TimeInput.js +77 -0
  216. package/dist/internal/blocks/TimeInput.js.map +1 -0
  217. package/dist/internal/components/Alert.js +2 -0
  218. package/dist/internal/components/AlertModal.js +2 -0
  219. package/dist/internal/components/Avatar.js +53 -0
  220. package/dist/internal/components/Avatar.js.map +1 -0
  221. package/dist/internal/components/Badge.js +2 -0
  222. package/dist/internal/components/BrandLogo.js +2 -0
  223. package/dist/internal/components/Breadcrumb.js +2 -0
  224. package/dist/internal/components/Button.js +2 -0
  225. package/dist/internal/components/ButtonGroup.js +66 -0
  226. package/dist/internal/components/ButtonGroup.js.map +1 -0
  227. package/dist/internal/components/Calendar.js +2 -0
  228. package/dist/internal/components/Card.js +2 -0
  229. package/dist/internal/components/Checkbox.js +2 -0
  230. package/dist/internal/components/Clipboard.js +2 -0
  231. package/dist/internal/components/Collapsible.js +2 -0
  232. package/dist/internal/components/CollapsiblePanel.js +87 -0
  233. package/dist/internal/components/CollapsiblePanel.js.map +1 -0
  234. package/dist/internal/components/Combobox.js +2 -0
  235. package/dist/internal/components/DatePicker.js +2 -0
  236. package/dist/internal/components/DateRangePicker.js +2 -0
  237. package/dist/internal/components/DiffView.js +2 -0
  238. package/dist/internal/components/DotsLoader.js +18 -0
  239. package/dist/internal/components/DotsLoader.js.map +1 -0
  240. package/dist/internal/components/DropdownMenu.js +2 -0
  241. package/dist/internal/components/EmptySearchContent.js +12 -0
  242. package/dist/internal/components/EmptySearchContent.js.map +1 -0
  243. package/dist/internal/components/FileUpload.js +2 -0
  244. package/dist/internal/components/FullScreenModal.js +2 -0
  245. package/dist/internal/components/HelpBlock.js +25 -0
  246. package/dist/internal/components/HelpBlock.js.map +1 -0
  247. package/dist/internal/components/HoverCard.js +2 -0
  248. package/dist/internal/components/InputGroup.js +2 -0
  249. package/dist/internal/components/Kbd.js +2 -0
  250. package/dist/internal/components/Label.js +39 -0
  251. package/dist/internal/components/Label.js.map +1 -0
  252. package/dist/internal/components/Link.js +22 -0
  253. package/dist/internal/components/Link.js.map +1 -0
  254. package/dist/internal/components/MarkedText.js +2 -0
  255. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +20 -0
  256. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js.map +1 -0
  257. package/dist/internal/components/MergeEditor/PaneHeader.js +13 -0
  258. package/dist/internal/components/MergeEditor/PaneHeader.js.map +1 -0
  259. package/dist/internal/components/MergeEditor/constants.js +18 -0
  260. package/dist/internal/components/MergeEditor/constants.js.map +1 -0
  261. package/dist/internal/components/MergeEditor/useMergeDiff.js +2 -0
  262. package/dist/internal/components/Modal.js +2 -0
  263. package/dist/internal/components/Navbar.js +2 -0
  264. package/dist/internal/components/Pagination.js +2 -0
  265. package/dist/internal/components/PanelWithDetails.js +31 -0
  266. package/dist/internal/components/PanelWithDetails.js.map +1 -0
  267. package/dist/internal/components/Popconfirm.js +2 -0
  268. package/dist/internal/components/Popover.js +2 -0
  269. package/dist/internal/components/Progress.js +47 -0
  270. package/dist/internal/components/Progress.js.map +1 -0
  271. package/dist/internal/components/RadioGroup.js +2 -0
  272. package/dist/internal/components/Resizable.js +2 -0
  273. package/dist/internal/components/ScrollArea.js +42 -0
  274. package/dist/internal/components/ScrollArea.js.map +1 -0
  275. package/dist/internal/components/Search.js +2 -0
  276. package/dist/internal/components/Select.js +2 -0
  277. package/dist/internal/components/Separator.js +84 -0
  278. package/dist/internal/components/Separator.js.map +1 -0
  279. package/dist/internal/components/Sheet.js +2 -0
  280. package/dist/internal/components/Sidebar.js +2 -0
  281. package/dist/internal/components/Skeleton/Skeleton.js +39 -0
  282. package/dist/internal/components/Skeleton/Skeleton.js.map +1 -0
  283. package/dist/internal/components/Skeleton/SkeletonList.js +41 -0
  284. package/dist/internal/components/Skeleton/SkeletonList.js.map +1 -0
  285. package/dist/internal/components/Slider.js +2 -0
  286. package/dist/internal/components/SpotlightBackdrop.js +132 -0
  287. package/dist/internal/components/SpotlightBackdrop.js.map +1 -0
  288. package/dist/internal/components/Stepper.js +2 -0
  289. package/dist/internal/components/Switch.js +2 -0
  290. package/dist/internal/components/Table.js +2 -0
  291. package/dist/internal/components/Tabs.js +2 -0
  292. package/dist/internal/components/ThemeProvider.js +3 -0
  293. package/dist/internal/components/TimePicker.js +2 -0
  294. package/dist/internal/components/Timeline.js +2 -0
  295. package/dist/internal/components/Toast.js +3 -0
  296. package/dist/internal/components/Toggle.js +169 -0
  297. package/dist/internal/components/Toggle.js.map +1 -0
  298. package/dist/internal/components/ToggleGroup.js +2 -0
  299. package/dist/internal/components/Tooltip.js +2 -0
  300. package/dist/internal/components/Truncated.js +45 -0
  301. package/dist/internal/components/Truncated.js.map +1 -0
  302. package/dist/internal/components/Workbench.js +2 -0
  303. package/dist/internal/components/ZoomableSvg.js +2 -0
  304. package/dist/internal/hooks/useAutosizeInput.js +77 -0
  305. package/dist/internal/hooks/useAutosizeInput.js.map +1 -0
  306. package/dist/internal/hooks/useScrollbarPosition.js +45 -0
  307. package/dist/internal/hooks/useScrollbarPosition.js.map +1 -0
  308. package/dist/internal/hooks/useStableCallback.js +29 -0
  309. package/dist/internal/hooks/useStableCallback.js.map +1 -0
  310. package/dist/internal/utils/mergeRefs.js +20 -0
  311. package/dist/internal/utils/mergeRefs.js.map +1 -0
  312. package/dist/internal/utils.js +5 -0
  313. package/dist/markdown-editor.d.ts +72 -72
  314. package/dist/markdown-editor.js +1122 -1193
  315. package/dist/markdown-editor.js.map +1 -1
  316. package/dist/mermaid.d.ts +12 -12
  317. package/dist/mermaid.js +2 -10
  318. package/dist/rjsf.d.ts +33 -34
  319. package/dist/rjsf.js +1543 -1600
  320. package/dist/rjsf.js.map +1 -1
  321. package/dist/rolldown-runtime-Bdc48AWt.js +33 -0
  322. package/dist/styles-DSUP_-9Z.js +158 -0
  323. package/dist/styles-DSUP_-9Z.js.map +1 -0
  324. package/dist/styles.css +1 -1
  325. package/dist/testing.d.ts +8 -7
  326. package/dist/testing.js +36 -16
  327. package/dist/testing.js.map +1 -1
  328. package/dist/themeTokens-BNg98Mu9.js +85 -0
  329. package/dist/themeTokens-BNg98Mu9.js.map +1 -0
  330. package/dist/toast-CjkURw0M.js +184 -0
  331. package/dist/toast-CjkURw0M.js.map +1 -0
  332. package/dist/useColorSchemeState-CYqcUfSH.js +61 -0
  333. package/dist/useColorSchemeState-CYqcUfSH.js.map +1 -0
  334. package/dist/useControllableState-M6494mCT.js +31 -0
  335. package/dist/useControllableState-M6494mCT.js.map +1 -0
  336. package/dist/useElement-DkF6esWL.js +15 -0
  337. package/dist/useElement-DkF6esWL.js.map +1 -0
  338. package/dist/useMergeDiff-CvowEXJ1.js +465 -0
  339. package/dist/useMergeDiff-CvowEXJ1.js.map +1 -0
  340. package/dist/utils-D0c5VAyF.js +308 -0
  341. package/dist/utils-D0c5VAyF.js.map +1 -0
  342. package/package.json +10 -9
  343. package/src/styles.css +35 -7
  344. package/src/theme.css +64 -0
  345. package/dist/MermaidDiagram-EOKJHQQV.js +0 -10
  346. package/dist/MermaidDiagram-EOKJHQQV.js.map +0 -1
  347. package/dist/chunk-63NSN2VL.js +0 -274
  348. package/dist/chunk-63NSN2VL.js.map +0 -1
  349. package/dist/chunk-6FPEI4EM.js +0 -6683
  350. package/dist/chunk-6FPEI4EM.js.map +0 -1
  351. package/dist/chunk-7PUUHEJQ.js +0 -1313
  352. package/dist/chunk-7PUUHEJQ.js.map +0 -1
  353. package/dist/chunk-BOHNXTMM.js +0 -606
  354. package/dist/chunk-BOHNXTMM.js.map +0 -1
  355. package/dist/chunk-C3L3TBBT.js +0 -242
  356. package/dist/chunk-C3L3TBBT.js.map +0 -1
  357. package/dist/chunk-CTCFYWJC.js +0 -407
  358. package/dist/chunk-CTCFYWJC.js.map +0 -1
  359. package/dist/chunk-ESBL3IPF.js +0 -23
  360. package/dist/chunk-ESBL3IPF.js.map +0 -1
  361. package/dist/chunk-IJTHFNNJ.js +0 -261
  362. package/dist/chunk-IJTHFNNJ.js.map +0 -1
  363. package/dist/chunk-JP7PNHLH.js +0 -40
  364. package/dist/chunk-JP7PNHLH.js.map +0 -1
  365. package/dist/chunk-KPNAW5MU.js +0 -229
  366. package/dist/chunk-KPNAW5MU.js.map +0 -1
  367. package/dist/chunk-L37JJ6MR.js +0 -152
  368. package/dist/chunk-L37JJ6MR.js.map +0 -1
  369. package/dist/chunk-Q7NWXLCT.js +0 -90
  370. package/dist/chunk-Q7NWXLCT.js.map +0 -1
  371. package/dist/chunk-SYIEF644.js +0 -1016
  372. package/dist/chunk-SYIEF644.js.map +0 -1
  373. package/dist/chunk-VMFSRV5H.js +0 -16
  374. package/dist/chunk-VMFSRV5H.js.map +0 -1
  375. package/dist/chunk-VPPM7UUQ.js +0 -47
  376. package/dist/chunk-VPPM7UUQ.js.map +0 -1
  377. package/dist/chunk-XV3UUOYF.js +0 -845
  378. package/dist/chunk-XV3UUOYF.js.map +0 -1
  379. package/dist/constants-D3gaMY-W.d.ts +0 -39
  380. package/dist/icons.js.map +0 -1
  381. package/dist/index.js.map +0 -1
  382. package/dist/mermaid.js.map +0 -1
@@ -0,0 +1,1320 @@
1
+ import { cn } from "./classNames-BzrkDnOD.js";
2
+ import { Tooltip, TooltipProvider } from "./utils-D0c5VAyF.js";
3
+ import { AlertCircle, ChevronDown, ChevronLeft, ChevronRight, CircleCheck, CirclePause, CircleX, FileText, Loader2, Maximize2, Minimize2, Play, Send, X, XCircle } from "./icons-Cek151jC.js";
4
+ import { Button } from "./Button-nzmDNS2q.js";
5
+ import { ClipboardButton } from "./ClipboardButton-ez5V3fkk.js";
6
+ import { FullScreenModal, FullScreenModalBody, FullScreenModalHeader } from "./FullScreenModal-CJa2VkJ2.js";
7
+ import { Truncated } from "./internal/components/Truncated.js";
8
+ import { HoverCard } from "./HoverCard-WfDkLK1s.js";
9
+ import { Command } from "./Command-CQ_bQsJp.js";
10
+ import { TextInput } from "./TextInput-BGed-V13.js";
11
+ import { Checkbox } from "./Checkbox-GJ8-srt4.js";
12
+ import { Badge } from "./Badge-Ch26CXoP.js";
13
+ import { Textarea } from "./internal/blocks/Textarea.js";
14
+ import { Table } from "./Table-CvYuTuNU.js";
15
+ import { DiagramSkeleton } from "./DiagramSkeleton-lwBS2YBa.js";
16
+ import { Avatar } from "./internal/components/Avatar.js";
17
+ import { Progress } from "./internal/components/Progress.js";
18
+ import { Slot } from "@radix-ui/react-slot";
19
+ import { Suspense, isValidElement, lazy, useEffect, useId, useRef, useState } from "react";
20
+ import { cva } from "class-variance-authority";
21
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
22
+ import TextareaAutosize from "react-textarea-autosize";
23
+ import ReactMarkdown from "react-markdown";
24
+ import remarkGfm from "remark-gfm";
25
+ //#region src/blocks/AIKit/CollapsibleStepHeader.tsx
26
+ const variantClasses = {
27
+ success: "tw:text-secondary-500 tw:focus-visible:outline-ring tw:not-disabled:hover:text-secondary-600",
28
+ error: "tw:text-error-500 tw:focus-visible:outline-error-500 tw:not-disabled:hover:text-error-600",
29
+ processing: "tw:text-secondary-500 tw:focus-visible:outline-ring tw:not-disabled:hover:text-secondary-600",
30
+ dismissed: "tw:text-neutral-700 tw:focus-visible:outline-neutral-500 tw:not-disabled:hover:text-neutral-800"
31
+ };
32
+ const iconClasses = "tw:size-4 tw:shrink-0 tw:basis-4";
33
+ const renderVariantIcon$1 = (variant) => {
34
+ if (variant === "processing") return /* @__PURE__ */ jsx(Loader2, { className: cn(iconClasses, "tw:animate-spin") });
35
+ if (variant === "error") return /* @__PURE__ */ jsx(XCircle, { className: iconClasses });
36
+ if (variant === "dismissed") return /* @__PURE__ */ jsx(XCircle, { className: cn(iconClasses, "tw:text-neutral-500") });
37
+ return /* @__PURE__ */ jsx(CircleCheck, { className: iconClasses });
38
+ };
39
+ const CollapsibleStepHeader = ({ isExpanded, onToggle, label, variant = "success" }) => {
40
+ return /* @__PURE__ */ jsxs("button", {
41
+ type: "button",
42
+ "aria-expanded": isExpanded,
43
+ onClick: onToggle,
44
+ className: cn("tw:flex tw:w-fit tw:items-start tw:gap-2 tw:text-left tw:text-sm tw:font-medium tw:italic tw:transition-colors tw:focus-visible:outline tw:focus-visible:outline-2 tw:focus-visible:outline-offset-2 tw:disabled:opacity-40", variantClasses[variant]),
45
+ children: [renderVariantIcon$1(variant), /* @__PURE__ */ jsxs("span", {
46
+ className: "tw:min-w-0",
47
+ children: [label, /* @__PURE__ */ jsxs("span", {
48
+ className: "tw:whitespace-nowrap",
49
+ children: ["⁠", /* @__PURE__ */ jsx(ChevronDown, { className: cn("tw:ml-2 tw:inline-block tw:size-4 tw:align-middle tw:transition-transform", isExpanded && "tw:rotate-180") })]
50
+ })]
51
+ })]
52
+ });
53
+ };
54
+ //#endregion
55
+ //#region src/blocks/AIKit/InlineStepDetail.tsx
56
+ const InlineStepDetail = ({ children }) => /* @__PURE__ */ jsx("div", {
57
+ className: "tw:ml-2.5 tw:whitespace-pre-wrap tw:border-l tw:border-neutral-200 tw:pl-3 tw:text-xs tw:text-neutral-400",
58
+ children
59
+ });
60
+ //#endregion
61
+ //#region src/blocks/AIKit/InlineStepLabel.tsx
62
+ const renderVariantIcon = (variant) => {
63
+ if (variant === "processing") return /* @__PURE__ */ jsx(Loader2, { className: "tw:size-4 tw:animate-spin tw:text-neutral-200" });
64
+ if (variant === "error") return /* @__PURE__ */ jsx(XCircle, { className: "tw:size-4 tw:text-error-500" });
65
+ if (variant === "dismissed") return /* @__PURE__ */ jsx(XCircle, { className: "tw:size-4 tw:text-neutral-200" });
66
+ return /* @__PURE__ */ jsx(CircleCheck, { className: "tw:size-4 tw:text-neutral-200" });
67
+ };
68
+ const InlineStepLabel = ({ variant, children }) => /* @__PURE__ */ jsxs("div", {
69
+ className: "tw:flex tw:min-w-0 tw:items-center tw:gap-1",
70
+ children: [/* @__PURE__ */ jsx("div", {
71
+ className: "tw:flex tw:size-5 tw:shrink-0 tw:items-center tw:justify-center",
72
+ children: renderVariantIcon(variant)
73
+ }), /* @__PURE__ */ jsx("div", {
74
+ className: "tw:flex tw:min-w-0 tw:flex-wrap tw:items-center tw:gap-x-1.5 tw:gap-y-1 tw:text-sm tw:font-medium tw:italic tw:text-neutral-800",
75
+ children
76
+ })]
77
+ });
78
+ //#endregion
79
+ //#region src/blocks/AIKit/AnswerSummary.tsx
80
+ const SECTION_LABELS = {
81
+ success: "Answered questions",
82
+ dismissed: "Dismissed questions"
83
+ };
84
+ const AnswerSummary = ({ items, variant = "success", noAnswerLabel = "No answer" }) => {
85
+ const [isExpanded, setIsExpanded] = useState(false);
86
+ const toggle = () => setIsExpanded((prev) => !prev);
87
+ const count = items.length;
88
+ const [firstItem] = items;
89
+ const label = count === 1 && firstItem ? firstItem.question : `${count} questions`;
90
+ return /* @__PURE__ */ jsxs("section", {
91
+ className: "tw:mt-4 tw:flex tw:flex-col tw:gap-4",
92
+ "aria-label": SECTION_LABELS[variant],
93
+ children: [/* @__PURE__ */ jsx(CollapsibleStepHeader, {
94
+ isExpanded,
95
+ onToggle: toggle,
96
+ variant,
97
+ label
98
+ }), isExpanded && /* @__PURE__ */ jsx("div", {
99
+ className: "tw:flex tw:flex-col tw:gap-4 tw:pl-5",
100
+ children: items.map(({ question, answer }, index) => /* @__PURE__ */ jsxs("div", {
101
+ className: "tw:flex tw:flex-col tw:gap-1",
102
+ children: [/* @__PURE__ */ jsx(InlineStepLabel, {
103
+ variant,
104
+ children: question
105
+ }), /* @__PURE__ */ jsx(InlineStepDetail, { children: answer && answer.length > 0 ? answer : noAnswerLabel })]
106
+ }, `${index}-${question}`))
107
+ })]
108
+ });
109
+ };
110
+ //#endregion
111
+ //#region src/blocks/AIKit/Markdown.tsx
112
+ const MermaidDiagram = lazy(() => import("@keboola/design/mermaid").then((module) => ({ default: module.MermaidDiagram }), (error) => {
113
+ console.error("[AIKit] failed to load the MermaidDiagram chunk", error);
114
+ return { default: ({ code }) => /* @__PURE__ */ jsx("pre", { children: /* @__PURE__ */ jsx("code", { children: code }) }) };
115
+ }));
116
+ const proseClass = "tw:prose tw:prose-sm tw:max-w-none tw:break-words tw:[&_pre]:bg-neutral-50 tw:[&_pre]:text-neutral-800 tw:[&_:not(pre)>code]:bg-neutral-50 tw:[&_:not(pre)>code]:rounded tw:[&_:not(pre)>code]:px-1 tw:[&_:not(pre)>code]:py-0.5 tw:[&_:not(pre)>code]:before:content-none tw:[&_:not(pre)>code]:after:content-none";
117
+ const getText = (node) => {
118
+ if (typeof node === "string") return node;
119
+ if (typeof node === "number") return String(node);
120
+ if (Array.isArray(node)) return node.map(getText).join("");
121
+ if (isValidElement(node) && typeof node.props === "object" && node.props !== null && "children" in node.props) return getText(node.props.children);
122
+ return "";
123
+ };
124
+ const getLanguage = (element) => {
125
+ if (!isValidElement(element)) return void 0;
126
+ const { props } = element;
127
+ if (typeof props !== "object" || props === null || !("className" in props)) return void 0;
128
+ if (typeof props.className !== "string") return void 0;
129
+ return props.className.match(/language-(\S+)/)?.[1];
130
+ };
131
+ const components = {
132
+ pre({ children, ...props }) {
133
+ const child = Array.isArray(children) ? children[0] : children;
134
+ if (getLanguage(child) === "mermaid") {
135
+ const code = getText(child).replace(/\n$/, "");
136
+ if (!code.trim()) return null;
137
+ return /* @__PURE__ */ jsx(Suspense, {
138
+ fallback: /* @__PURE__ */ jsx(DiagramSkeleton, {}),
139
+ children: /* @__PURE__ */ jsx(MermaidDiagram, { code })
140
+ });
141
+ }
142
+ const { node: _node, ...rest } = props;
143
+ const code = getText(child).replace(/\n$/, "");
144
+ return /* @__PURE__ */ jsxs("div", {
145
+ className: "tw:group tw:relative",
146
+ children: [/* @__PURE__ */ jsx("span", {
147
+ className: "tw:absolute tw:right-2 tw:top-2 tw:opacity-0 tw:transition-opacity tw:group-focus-within:opacity-100 tw:group-hover:opacity-100",
148
+ children: /* @__PURE__ */ jsx(ClipboardButton, {
149
+ text: code,
150
+ tooltip: "Copy",
151
+ size: "icon-xs",
152
+ variant: "outline"
153
+ })
154
+ }), /* @__PURE__ */ jsx("pre", {
155
+ ...rest,
156
+ children
157
+ })]
158
+ });
159
+ },
160
+ a({ children, href, ...props }) {
161
+ const { node: _node, ...rest } = props;
162
+ const isExternal = !!href && /^https?:\/\//.test(href);
163
+ return /* @__PURE__ */ jsx("a", {
164
+ href,
165
+ ...isExternal ? {
166
+ target: "_blank",
167
+ rel: "noopener noreferrer"
168
+ } : null,
169
+ ...rest,
170
+ children
171
+ });
172
+ },
173
+ table({ className, ...props }) {
174
+ const { node: _node, ...rest } = props;
175
+ return /* @__PURE__ */ jsx("div", {
176
+ className: "tw:not-prose tw:my-4",
177
+ children: /* @__PURE__ */ jsx(Table, {
178
+ bordered: true,
179
+ className: cn("tw:!mb-0", className),
180
+ ...rest
181
+ })
182
+ });
183
+ },
184
+ thead(props) {
185
+ const { node: _node, ...rest } = props;
186
+ return /* @__PURE__ */ jsx(Table.Header, { ...rest });
187
+ },
188
+ tbody(props) {
189
+ const { node: _node, ...rest } = props;
190
+ return /* @__PURE__ */ jsx(Table.Body, { ...rest });
191
+ },
192
+ tr(props) {
193
+ const { node: _node, ...rest } = props;
194
+ return /* @__PURE__ */ jsx(Table.Row, { ...rest });
195
+ },
196
+ th(props) {
197
+ const { node: _node, ...rest } = props;
198
+ return /* @__PURE__ */ jsx(Table.Head, { ...rest });
199
+ },
200
+ td(props) {
201
+ const { node: _node, ...rest } = props;
202
+ return /* @__PURE__ */ jsx(Table.Cell, { ...rest });
203
+ }
204
+ };
205
+ /**
206
+ * Read-only GFM Markdown renderer with design-token typography. Pair with
207
+ * `MessageBubble` to render an assistant message body. Code blocks expose a
208
+ * copy button, so mount a `TooltipProvider` once at the app root.
209
+ */
210
+ const Markdown = ({ children, className }) => {
211
+ return /* @__PURE__ */ jsx("div", {
212
+ "data-prose": true,
213
+ className: cn(proseClass, className),
214
+ children: /* @__PURE__ */ jsx(ReactMarkdown, {
215
+ remarkPlugins: [remarkGfm],
216
+ components,
217
+ children
218
+ })
219
+ });
220
+ };
221
+ //#endregion
222
+ //#region src/blocks/AIKit/MessageBubble.tsx
223
+ const containerClasses = cva([
224
+ "tw:flex",
225
+ "tw:max-w-full",
226
+ "tw:gap-4"
227
+ ], {
228
+ variants: { variant: {
229
+ user: ["tw:justify-self-end", "tw:flex-row-reverse"],
230
+ assistant: [
231
+ "tw:justify-self-start",
232
+ "tw:w-full",
233
+ "tw:gap-3"
234
+ ]
235
+ } },
236
+ defaultVariants: { variant: "assistant" }
237
+ });
238
+ const contentClasses = cva([
239
+ "tw:flex",
240
+ "tw:flex-col",
241
+ "tw:gap-4",
242
+ "tw:break-words",
243
+ "tw:leading-relaxed",
244
+ "tw:text-foreground",
245
+ "tw:[&_[data-prose]]:text-foreground"
246
+ ], {
247
+ variants: { variant: {
248
+ assistant: [
249
+ "tw:flex-1",
250
+ "tw:w-full",
251
+ "tw:min-w-0",
252
+ "tw:[&>*]:min-w-0"
253
+ ],
254
+ user: [
255
+ "tw:max-w-screen-sm",
256
+ "tw:w-fit",
257
+ "tw:bg-muted",
258
+ "tw:p-3",
259
+ "tw:rounded-2xl",
260
+ "tw:ml-6",
261
+ "tw:overflow-hidden",
262
+ "tw:break-anywhere"
263
+ ]
264
+ } },
265
+ defaultVariants: { variant: "assistant" }
266
+ });
267
+ const MessageBubble = ({ variant, children, user, actions, createdAt }) => {
268
+ return /* @__PURE__ */ jsxs("div", {
269
+ className: containerClasses({ variant }),
270
+ "data-testid": `chat-message-${variant}`,
271
+ children: [variant === "user" && /* @__PURE__ */ jsx(Avatar, {
272
+ user,
273
+ size: 30,
274
+ title: createdAt
275
+ }), /* @__PURE__ */ jsxs("div", {
276
+ className: "tw:flex tw:min-w-0 tw:flex-1 tw:flex-col tw:gap-2",
277
+ children: [/* @__PURE__ */ jsx("div", {
278
+ className: contentClasses({ variant }),
279
+ children
280
+ }), actions]
281
+ })]
282
+ });
283
+ };
284
+ //#endregion
285
+ //#region src/blocks/AIKit/PlanApproval.tsx
286
+ const defaultStepCountLabel = (count) => `${count} step${count === 1 ? "" : "s"}`;
287
+ const StatusPill = ({ status, pendingLabel, approvedLabel, dismissedLabel, changesRequestedLabel }) => {
288
+ if (status === "approved") return /* @__PURE__ */ jsx(Badge, {
289
+ color: "green",
290
+ variant: "pill",
291
+ className: "tw:normal-case tw:tracking-normal",
292
+ children: approvedLabel
293
+ });
294
+ if (status === "dismissed") return /* @__PURE__ */ jsx(Badge, {
295
+ color: "gray",
296
+ variant: "pill",
297
+ className: "tw:normal-case tw:tracking-normal",
298
+ children: dismissedLabel
299
+ });
300
+ if (status === "changes-requested") return /* @__PURE__ */ jsx(Badge, {
301
+ color: "blue",
302
+ variant: "pill",
303
+ className: "tw:normal-case tw:tracking-normal",
304
+ children: changesRequestedLabel
305
+ });
306
+ return /* @__PURE__ */ jsx(Badge, {
307
+ color: "green",
308
+ variant: "pill",
309
+ className: "tw:normal-case tw:tracking-normal",
310
+ children: pendingLabel
311
+ });
312
+ };
313
+ const ExpandToggle = ({ isExpanded, onToggle, showMoreLabel, showLessLabel }) => /* @__PURE__ */ jsxs("button", {
314
+ type: "button",
315
+ onClick: onToggle,
316
+ "aria-expanded": isExpanded,
317
+ className: "tw:inline-flex tw:cursor-pointer tw:items-center tw:gap-1 tw:bg-transparent tw:p-0 tw:text-sm tw:font-medium tw:text-secondary-500 tw:hover:text-secondary-600 tw:focus-visible:outline tw:focus-visible:outline-2 tw:focus-visible:outline-offset-2 tw:focus-visible:outline-ring tailwindcss-preflight",
318
+ children: [/* @__PURE__ */ jsx("span", { children: isExpanded ? showLessLabel : showMoreLabel }), /* @__PURE__ */ jsx(ChevronDown, { className: cn("tw:size-5 tw:transition-transform", isExpanded && "tw:rotate-180") })]
319
+ });
320
+ const ChangeRequestForm = ({ value, onValueChange, onSubmit, onKeyDown, placeholder, submitLabel, formLabel, canSubmit, isSubmitting }) => /* @__PURE__ */ jsx("form", {
321
+ onSubmit,
322
+ className: "tw:border-0 tw:border-t tw:border-solid tw:border-neutral-100 tw:bg-white tw:px-4 tw:py-3",
323
+ "aria-label": formLabel,
324
+ children: /* @__PURE__ */ jsxs("div", {
325
+ className: "tw:relative",
326
+ children: [/* @__PURE__ */ jsx(Textarea, {
327
+ value,
328
+ onValueChange,
329
+ placeholder,
330
+ maxRows: 4,
331
+ autoFocus: true,
332
+ onKeyDown,
333
+ containerClassName: "tw:pr-12",
334
+ disabled: isSubmitting,
335
+ "aria-label": placeholder,
336
+ "data-testid": "plan-change-request-input"
337
+ }), /* @__PURE__ */ jsx(Button, {
338
+ type: "submit",
339
+ variant: "invisible",
340
+ size: "icon-sm",
341
+ "aria-label": submitLabel,
342
+ disabled: !canSubmit,
343
+ className: "tw:absolute tw:right-2 tw:top-1/2 tw:-translate-y-1/2 tw:[&_svg]:text-secondary-500 tw:not-disabled:hover:[&_svg]:text-secondary-600",
344
+ "data-testid": "plan-change-request-submit",
345
+ children: /* @__PURE__ */ jsx(Send, { className: "tw:size-4" })
346
+ })]
347
+ })
348
+ });
349
+ const PlanActions = ({ isRequestingChanges, isSubmitting, onApprove, onRequestChanges, onOpenRequestChanges, onCancelChangeRequest, approveLabel, requestChangesLabel, cancelLabel, approveTooltip }) => /* @__PURE__ */ jsxs("div", {
350
+ className: "tw:flex tw:shrink-0 tw:items-center tw:gap-2",
351
+ children: [isRequestingChanges ? /* @__PURE__ */ jsx(Button, {
352
+ variant: "outline",
353
+ size: "small",
354
+ onClick: onCancelChangeRequest,
355
+ disabled: isSubmitting,
356
+ "data-testid": "plan-cancel-button",
357
+ className: "tw:shrink-0 tw:whitespace-nowrap",
358
+ children: cancelLabel
359
+ }) : onRequestChanges && /* @__PURE__ */ jsx(Button, {
360
+ variant: "outline",
361
+ size: "small",
362
+ onClick: onOpenRequestChanges,
363
+ disabled: isSubmitting,
364
+ "data-testid": "plan-request-changes-button",
365
+ className: "tw:shrink-0 tw:whitespace-nowrap",
366
+ children: requestChangesLabel
367
+ }), onApprove && (approveTooltip ? /* @__PURE__ */ jsx(Tooltip, {
368
+ tooltip: approveTooltip,
369
+ placement: "top",
370
+ triggerAsChild: true,
371
+ children: /* @__PURE__ */ jsx(Button, {
372
+ variant: "primary",
373
+ size: "small",
374
+ onClick: onApprove,
375
+ disabled: isSubmitting || isRequestingChanges,
376
+ "data-testid": "plan-approve-button",
377
+ className: "tw:shrink-0 tw:whitespace-nowrap",
378
+ children: approveLabel
379
+ })
380
+ }) : /* @__PURE__ */ jsx(Button, {
381
+ variant: "primary",
382
+ size: "small",
383
+ onClick: onApprove,
384
+ disabled: isSubmitting || isRequestingChanges,
385
+ "data-testid": "plan-approve-button",
386
+ className: "tw:shrink-0 tw:whitespace-nowrap",
387
+ children: approveLabel
388
+ }))]
389
+ });
390
+ const PlanApproval = ({ status, title, summary, stepCount, planBody, defaultExpanded = false, isExpanded: isExpandedProp, onExpandToggle, onApprove, onRequestChanges, onClose, isSubmitting = false, approveTooltip, pendingPillLabel = "Ready for approval", approvedPillLabel = "Approved", dismissedPillLabel = "Dismissed", changesRequestedPillLabel = "Changes Requested", approveLabel = "Approve", requestChangesLabel = "Request Changes", cancelLabel = "Cancel", showMoreLabel = "Show more", showLessLabel = "Show less", closeLabel = "Dismiss plan", fullScreenLabel = "View full screen", exitFullScreenLabel = "Exit full screen", changeRequestPlaceholder = "What would you like to change in the plan?", changeRequestSubmitLabel = "Send change request", stepCountLabel = defaultStepCountLabel, className }) => {
391
+ const [uncontrolledExpanded, setUncontrolledExpanded] = useState(defaultExpanded);
392
+ const isExpanded = isExpandedProp ?? uncontrolledExpanded;
393
+ const [isRequestingChanges, setIsRequestingChanges] = useState(false);
394
+ const [changeRequest, setChangeRequest] = useState("");
395
+ const [isFullScreen, setIsFullScreen] = useState(false);
396
+ const isPending = status === "pending";
397
+ const showActions = isPending && (onApprove || onRequestChanges);
398
+ const showClose = isPending && Boolean(onClose);
399
+ const canShowPlanBody = planBody != null;
400
+ const trimmedChangeRequest = changeRequest.trim();
401
+ const canSubmitChangeRequest = trimmedChangeRequest.length > 0 && !isSubmitting;
402
+ const toggleExpanded = () => {
403
+ const next = !isExpanded;
404
+ if (isExpandedProp === void 0) setUncontrolledExpanded(next);
405
+ onExpandToggle?.(next);
406
+ };
407
+ const handleOpenRequestChanges = () => {
408
+ setIsRequestingChanges(true);
409
+ if (!isExpanded) toggleExpanded();
410
+ };
411
+ const handleCancelChangeRequest = () => {
412
+ setIsRequestingChanges(false);
413
+ setChangeRequest("");
414
+ };
415
+ const handleSubmitChangeRequest = (event) => {
416
+ event?.preventDefault();
417
+ if (!canSubmitChangeRequest) return;
418
+ onRequestChanges?.(trimmedChangeRequest);
419
+ };
420
+ const handleTextareaKeyDown = (event) => {
421
+ if (event.key === "Enter" && !event.shiftKey) {
422
+ event.preventDefault();
423
+ handleSubmitChangeRequest();
424
+ }
425
+ };
426
+ const showChangeRequestForm = isRequestingChanges && isPending;
427
+ const changeRequestForm = /* @__PURE__ */ jsx(ChangeRequestForm, {
428
+ value: changeRequest,
429
+ onValueChange: setChangeRequest,
430
+ onSubmit: handleSubmitChangeRequest,
431
+ onKeyDown: handleTextareaKeyDown,
432
+ placeholder: changeRequestPlaceholder,
433
+ submitLabel: changeRequestSubmitLabel,
434
+ formLabel: requestChangesLabel,
435
+ canSubmit: canSubmitChangeRequest,
436
+ isSubmitting
437
+ });
438
+ const planActions = /* @__PURE__ */ jsx(PlanActions, {
439
+ isRequestingChanges,
440
+ isSubmitting,
441
+ onApprove,
442
+ onRequestChanges,
443
+ onOpenRequestChanges: handleOpenRequestChanges,
444
+ onCancelChangeRequest: handleCancelChangeRequest,
445
+ approveLabel,
446
+ requestChangesLabel,
447
+ cancelLabel,
448
+ approveTooltip
449
+ });
450
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("section", {
451
+ "aria-label": title,
452
+ className: cn("tw:flex tw:w-full tw:max-w-[800px] tw:flex-col tw:overflow-hidden tw:rounded-xl tw:border tw:border-solid tw:border-border tw:bg-neutral-50", className),
453
+ "data-testid": "plan-approval-root",
454
+ "data-plan-status": status,
455
+ children: [
456
+ /* @__PURE__ */ jsxs("div", {
457
+ className: "tw:flex tw:items-start tw:gap-2 tw:pl-4 tw:pr-2 tw:pt-4",
458
+ children: [/* @__PURE__ */ jsxs("div", {
459
+ className: "tw:flex tw:min-w-0 tw:flex-1 tw:flex-col tw:gap-2 tw:pb-4",
460
+ children: [/* @__PURE__ */ jsxs("div", {
461
+ className: "tw:flex tw:items-center tw:gap-3",
462
+ children: [/* @__PURE__ */ jsx(StatusPill, {
463
+ status,
464
+ pendingLabel: pendingPillLabel,
465
+ approvedLabel: approvedPillLabel,
466
+ dismissedLabel: dismissedPillLabel,
467
+ changesRequestedLabel: changesRequestedPillLabel
468
+ }), stepCount != null && stepCount > 0 && /* @__PURE__ */ jsx("span", {
469
+ className: "tw:text-xs tw:leading-4 tw:text-neutral-500",
470
+ children: stepCountLabel(stepCount)
471
+ })]
472
+ }), /* @__PURE__ */ jsx("p", {
473
+ className: "tw:m-0 tw:text-base tw:font-semibold tw:leading-6 tw:text-neutral-800",
474
+ children: title
475
+ })]
476
+ }), /* @__PURE__ */ jsxs("div", {
477
+ className: "tw:flex tw:items-center tw:gap-2",
478
+ children: [canShowPlanBody && !isFullScreen && /* @__PURE__ */ jsx(Tooltip, {
479
+ tooltip: fullScreenLabel,
480
+ placement: "top",
481
+ triggerAsChild: true,
482
+ children: /* @__PURE__ */ jsx(Button, {
483
+ variant: "outline",
484
+ size: "icon-sm",
485
+ "aria-label": fullScreenLabel,
486
+ onClick: () => setIsFullScreen(true),
487
+ "data-testid": "plan-fullscreen-button",
488
+ children: /* @__PURE__ */ jsx(Maximize2, { className: "tw:size-4" })
489
+ })
490
+ }), showClose && !isFullScreen && /* @__PURE__ */ jsx(Button, {
491
+ variant: "outline",
492
+ size: "icon-sm",
493
+ "aria-label": closeLabel,
494
+ onClick: onClose,
495
+ disabled: isSubmitting,
496
+ "data-testid": "plan-close-button",
497
+ children: /* @__PURE__ */ jsx(X, { className: "tw:size-4" })
498
+ })]
499
+ })]
500
+ }),
501
+ summary != null && /* @__PURE__ */ jsx("div", {
502
+ className: cn("tw:whitespace-pre-wrap tw:border-0 tw:border-t tw:border-solid tw:border-neutral-100 tw:px-4 tw:pt-4 tw:text-sm tw:text-neutral-700", isExpanded && canShowPlanBody ? "tw:pb-4" : "tw:pb-2"),
503
+ children: summary
504
+ }),
505
+ isExpanded && canShowPlanBody && /* @__PURE__ */ jsx("div", {
506
+ className: "tw:max-h-[400px] tw:overflow-y-auto tw:border-0 tw:border-t tw:border-solid tw:border-neutral-100 tw:bg-white tw:p-4 tw:text-sm tw:text-neutral-700",
507
+ children: planBody
508
+ }),
509
+ !isFullScreen && /* @__PURE__ */ jsxs(Fragment$1, { children: [showChangeRequestForm && changeRequestForm, /* @__PURE__ */ jsxs("div", {
510
+ className: cn("tw:flex tw:items-center tw:gap-2 tw:overflow-x-auto tw:border-0 tw:border-t tw:border-solid tw:border-neutral-100 tw:bg-white tw:px-4 tw:py-3", canShowPlanBody ? "tw:justify-between" : "tw:justify-end"),
511
+ children: [canShowPlanBody && /* @__PURE__ */ jsx("div", {
512
+ className: "tw:shrink-0",
513
+ children: /* @__PURE__ */ jsx(ExpandToggle, {
514
+ isExpanded,
515
+ onToggle: toggleExpanded,
516
+ showMoreLabel,
517
+ showLessLabel
518
+ })
519
+ }), showActions && planActions]
520
+ })] })
521
+ ]
522
+ }), canShowPlanBody && isFullScreen && /* @__PURE__ */ jsxs(FullScreenModal, {
523
+ onEscapeKeyDown: () => setIsFullScreen(false),
524
+ children: [
525
+ /* @__PURE__ */ jsx(FullScreenModalHeader, {
526
+ title: /* @__PURE__ */ jsxs("div", {
527
+ className: "tw:flex tw:min-w-0 tw:items-center tw:gap-3",
528
+ children: [/* @__PURE__ */ jsx(StatusPill, {
529
+ status,
530
+ pendingLabel: pendingPillLabel,
531
+ approvedLabel: approvedPillLabel,
532
+ dismissedLabel: dismissedPillLabel,
533
+ changesRequestedLabel: changesRequestedPillLabel
534
+ }), /* @__PURE__ */ jsx("span", {
535
+ className: "tw:truncate",
536
+ children: title
537
+ })]
538
+ }),
539
+ onClose: () => setIsFullScreen(false),
540
+ showPreviousTitle: false,
541
+ children: /* @__PURE__ */ jsxs("div", {
542
+ className: "tw:flex tw:items-center tw:gap-2",
543
+ children: [showClose && /* @__PURE__ */ jsx(Tooltip, {
544
+ tooltip: closeLabel,
545
+ placement: "bottom",
546
+ triggerAsChild: true,
547
+ children: /* @__PURE__ */ jsx(Button, {
548
+ variant: "outline",
549
+ size: "icon",
550
+ "aria-label": closeLabel,
551
+ onClick: onClose,
552
+ disabled: isSubmitting,
553
+ "data-testid": "plan-close-button",
554
+ children: /* @__PURE__ */ jsx(X, { className: "tw:size-4" })
555
+ })
556
+ }), /* @__PURE__ */ jsx(Tooltip, {
557
+ tooltip: exitFullScreenLabel,
558
+ placement: "bottom",
559
+ triggerAsChild: true,
560
+ children: /* @__PURE__ */ jsx(Button, {
561
+ variant: "outline",
562
+ size: "icon",
563
+ "aria-label": exitFullScreenLabel,
564
+ onClick: () => setIsFullScreen(false),
565
+ "data-testid": "plan-exit-fullscreen-button",
566
+ children: /* @__PURE__ */ jsx(Minimize2, { className: "tw:size-4" })
567
+ })
568
+ })]
569
+ })
570
+ }),
571
+ /* @__PURE__ */ jsx(FullScreenModalBody, {
572
+ className: "tw:bg-white tw:px-6 tw:py-4",
573
+ children: /* @__PURE__ */ jsx("div", {
574
+ className: "tw:mx-auto tw:w-full tw:max-w-[800px] tw:text-sm tw:text-neutral-700",
575
+ children: planBody
576
+ })
577
+ }),
578
+ (showChangeRequestForm || showActions) && /* @__PURE__ */ jsx("div", {
579
+ className: "tw:shrink-0 tw:border-0 tw:border-t tw:border-solid tw:border-neutral-100 tw:bg-white",
580
+ children: /* @__PURE__ */ jsxs("div", {
581
+ className: "tw:mx-auto tw:w-full tw:max-w-[800px]",
582
+ children: [showChangeRequestForm && changeRequestForm, showActions && /* @__PURE__ */ jsx("div", {
583
+ className: "tw:flex tw:justify-end tw:px-4 tw:py-3",
584
+ children: planActions
585
+ })]
586
+ })
587
+ })
588
+ ]
589
+ })] });
590
+ };
591
+ //#endregion
592
+ //#region src/blocks/AIKit/PlanRewritingIndicator.tsx
593
+ const PlanRewritingIndicator = ({ label = "Rewriting the plan..." }) => /* @__PURE__ */ jsxs("div", {
594
+ className: "tw:flex tw:items-center tw:gap-2",
595
+ role: "status",
596
+ "data-testid": "plan-rewriting-indicator",
597
+ children: [/* @__PURE__ */ jsx(Loader2, { className: "tw:size-4 tw:animate-spin tw:text-secondary-500" }), /* @__PURE__ */ jsx("span", {
598
+ className: "tw:text-sm tw:italic tw:text-secondary-500",
599
+ children: label
600
+ })]
601
+ });
602
+ //#endregion
603
+ //#region src/blocks/AIKit/PromptInputAction.tsx
604
+ const PromptInputAction = ({ ref, onMouseDown, ...rest }) => {
605
+ const handleOnMouseDown = (event) => {
606
+ event.stopPropagation();
607
+ onMouseDown?.(event);
608
+ };
609
+ return /* @__PURE__ */ jsx(Slot, {
610
+ ...rest,
611
+ ref,
612
+ onMouseDown: handleOnMouseDown
613
+ });
614
+ };
615
+ //#endregion
616
+ //#region src/blocks/AIKit/PromptInputCommands.tsx
617
+ const PromptInputCommands = ({ items, open, onSelect, filterValue, children }) => {
618
+ const filtered = filterValue ? items.filter((item) => item.label.toLowerCase().includes(filterValue.toLowerCase()) || item.value.toLowerCase().includes(filterValue.toLowerCase())) : items;
619
+ const groups = filtered.reduce((acc, item) => {
620
+ const group = acc[item.group] ?? [];
621
+ group.push(item);
622
+ acc[item.group] = group;
623
+ return acc;
624
+ }, {});
625
+ return /* @__PURE__ */ jsxs(Command, {
626
+ loop: true,
627
+ className: "tw:relative",
628
+ shouldFilter: false,
629
+ children: [open && /* @__PURE__ */ jsx("div", {
630
+ className: cn("tw:absolute tw:bottom-full tw:left-0 tw:right-0 tw:z-50 tw:mb-1", "tw:rounded-md tw:border tw:border-border tw:bg-popover tw:text-popover-foreground tw:shadow-lg"),
631
+ children: filtered.length === 0 ? /* @__PURE__ */ jsx("div", {
632
+ className: "tw:px-4 tw:py-3 tw:text-center tw:text-sm tw:text-muted-foreground",
633
+ children: "No commands found"
634
+ }) : /* @__PURE__ */ jsx(Command.List, {
635
+ viewPortClassName: "tw:max-h-80",
636
+ children: Object.entries(groups).map(([groupName, groupItems]) => /* @__PURE__ */ jsx(Command.Group, {
637
+ heading: groupName,
638
+ children: groupItems.map((item) => /* @__PURE__ */ jsx(Command.Item, {
639
+ value: item.value,
640
+ icon: item.icon,
641
+ onSelect: () => onSelect(item.value),
642
+ children: /* @__PURE__ */ jsxs("div", {
643
+ className: "tw:flex tw:min-w-0 tw:flex-1 tw:flex-col",
644
+ children: [/* @__PURE__ */ jsx("span", { children: item.label }), item.description && /* @__PURE__ */ jsx(Truncated, {
645
+ text: item.description,
646
+ twoLines: true,
647
+ className: "tw:text-xs tw:text-muted-foreground"
648
+ })]
649
+ })
650
+ }, item.value))
651
+ }, groupName))
652
+ })
653
+ }), children]
654
+ });
655
+ };
656
+ //#endregion
657
+ //#region src/blocks/AIKit/PromptInputSubmit.tsx
658
+ const ARIA_LABEL_BY_STATUS = {
659
+ ready: "Send message",
660
+ streaming: "Stop",
661
+ interrupted: "Continue",
662
+ submitted: "Sending…"
663
+ };
664
+ const PromptInputSubmit = ({ ref, disabled, status = "ready" }) => {
665
+ const icon = (() => {
666
+ if (status === "streaming") return /* @__PURE__ */ jsx(CirclePause, { className: "tw:size-4" });
667
+ if (status === "interrupted") return /* @__PURE__ */ jsx(Play, { className: "tw:size-4" });
668
+ return /* @__PURE__ */ jsx(Send, { className: "tw:size-4" });
669
+ })();
670
+ const getTooltipText = () => {
671
+ if (status === "streaming") return "Stop";
672
+ if (status === "interrupted") return "Continue";
673
+ };
674
+ return /* @__PURE__ */ jsxs(Tooltip.Root, { children: [/* @__PURE__ */ jsx(Tooltip.Trigger, {
675
+ asChild: true,
676
+ children: /* @__PURE__ */ jsx(PromptInputAction, { children: /* @__PURE__ */ jsx(Button, {
677
+ ref,
678
+ type: "submit",
679
+ disabled,
680
+ "aria-label": ARIA_LABEL_BY_STATUS[status],
681
+ size: "icon-sm",
682
+ variant: "invisible",
683
+ isLoading: status === "submitted",
684
+ className: "tw:ml-auto tw:flex tw:items-center tw:rounded-lg tw:[&_svg]:text-secondary-500 tw:not-disabled:hover:[&_svg]:text-secondary-600",
685
+ children: status !== "submitted" && icon
686
+ }) })
687
+ }), getTooltipText() && /* @__PURE__ */ jsx(Tooltip.Content, {
688
+ placement: "top",
689
+ variant: "action",
690
+ children: getTooltipText()
691
+ })] });
692
+ };
693
+ //#endregion
694
+ //#region src/blocks/AIKit/PromptInput.tsx
695
+ const CMDK_HIJACKED_KEYS = /* @__PURE__ */ new Set([
696
+ "ArrowUp",
697
+ "ArrowDown",
698
+ "Home",
699
+ "End",
700
+ "Enter"
701
+ ]);
702
+ const isCmdkNavigation = (event) => event.key !== "Enter" || !(event.metaKey || event.ctrlKey || event.altKey);
703
+ const promptInputVariants = cva([
704
+ "tailwindcss-preflight",
705
+ "tw:relative",
706
+ "tw:flex",
707
+ "tw:gap-2",
708
+ "tw:justify-center",
709
+ "tw:border",
710
+ "tw:border-2",
711
+ "tw:border-transparent",
712
+ "tw:rounded-[14px]",
713
+ "tw:bg-gradient-to-bl",
714
+ "tw:from-[#61E4FF]",
715
+ "tw:via-[#1F8FFF]",
716
+ "tw:to-[#7C5CFF]",
717
+ "tw:bg-origin-border",
718
+ "tw:shadow-[inset_0_100vw_rgb(var(--card))]",
719
+ "tw:has-[textarea:focus]:ring-4",
720
+ "tw:has-[textarea:focus]:ring-ring/30",
721
+ "tw:cursor-text",
722
+ "tw:px-2"
723
+ ], {
724
+ defaultVariants: { variant: "default" },
725
+ variants: { variant: {
726
+ default: [
727
+ "tw:flex-col",
728
+ "tw:pt-3",
729
+ "tw:pb-2"
730
+ ],
731
+ inline: [
732
+ "tw:flex-row",
733
+ "tw:py-3",
734
+ "tw:items-center"
735
+ ]
736
+ } }
737
+ });
738
+ const wrapperVariants = cva(null, {
739
+ defaultVariants: { variant: "default" },
740
+ variants: { variant: {
741
+ default: "tw:rounded-[14px]",
742
+ inline: ""
743
+ } }
744
+ });
745
+ const PromptInput = ({ onSend, onAbort, onContinue, prefix, variant, suffix, disabled, disableSubmit, value = "", onValueChange, status = "ready", maxRows = 6, minRows, commands, ...textareaProps }) => {
746
+ const defaultMinRows = variant === "inline" ? 1 : 2;
747
+ const isDisabled = (disabled || disableSubmit || !value.trim()) && status !== "streaming" && status !== "interrupted";
748
+ const textareaId = useId();
749
+ const textareaRef = useRef(null);
750
+ const [dismissedValue, setDismissedValue] = useState(null);
751
+ if (dismissedValue !== null && value !== dismissedValue) setDismissedValue(null);
752
+ const hasCommands = !!commands && commands.length > 0;
753
+ const valueLooksLikeSlashCommand = value.startsWith("/") && !/\s/.test(value);
754
+ const commandsOpen = hasCommands && valueLooksLikeSlashCommand && value !== dismissedValue;
755
+ const slashFilter = commandsOpen ? value.slice(1) : "";
756
+ const handleSubmit = () => {
757
+ if (isDisabled) return;
758
+ if (status === "streaming") onAbort?.();
759
+ if (status === "interrupted") onContinue?.();
760
+ if (status === "ready") onSend?.(value);
761
+ };
762
+ const handleOnSubmit = (event) => {
763
+ event.preventDefault();
764
+ handleSubmit();
765
+ };
766
+ const handleOnChange = (event) => {
767
+ onValueChange?.(event.target.value);
768
+ };
769
+ const handleCommandSelect = (commandValue) => {
770
+ onValueChange?.(commandValue + " ");
771
+ textareaRef.current?.focus();
772
+ };
773
+ const handleOnKeyDown = (event) => {
774
+ if (commandsOpen) {
775
+ if (event.key === "Escape") {
776
+ event.preventDefault();
777
+ setDismissedValue(value);
778
+ return;
779
+ }
780
+ if (event.key === "ArrowUp" || event.key === "ArrowDown" || event.key === "Enter") return;
781
+ } else if (hasCommands && CMDK_HIJACKED_KEYS.has(event.key) && isCmdkNavigation(event)) event.stopPropagation();
782
+ if (event.key === "Enter" && !event.shiftKey && !event.ctrlKey && !event.metaKey) {
783
+ event.preventDefault();
784
+ if (status !== "streaming") handleSubmit();
785
+ }
786
+ };
787
+ const handleOnMouseDown = (event) => {
788
+ if (event.target === textareaRef.current) return;
789
+ event.preventDefault();
790
+ textareaRef.current?.focus();
791
+ };
792
+ const formEl = /* @__PURE__ */ jsx("div", {
793
+ className: wrapperVariants({ variant }),
794
+ children: /* @__PURE__ */ jsxs("form", {
795
+ "data-testid": "prompt-input",
796
+ "data-status": status,
797
+ onMouseDown: handleOnMouseDown,
798
+ onSubmit: handleOnSubmit,
799
+ className: cn(promptInputVariants({ variant }), disabled && "tw:bg-none tw:border-border tw:shadow-[inset_0_100vw_rgb(var(--muted))] tw:cursor-default"),
800
+ children: [
801
+ prefix && /* @__PURE__ */ jsx("div", {
802
+ className: "tw:flex tw:items-center",
803
+ children: prefix
804
+ }),
805
+ /* @__PURE__ */ jsx("label", {
806
+ htmlFor: textareaId,
807
+ className: "tw:sr-only",
808
+ children: "Prompt Input"
809
+ }),
810
+ /* @__PURE__ */ jsx(TextareaAutosize, {
811
+ ...textareaProps,
812
+ disabled,
813
+ minRows: minRows ?? defaultMinRows,
814
+ maxRows,
815
+ id: textareaId,
816
+ ref: textareaRef,
817
+ value,
818
+ onChange: handleOnChange,
819
+ onKeyDown: handleOnKeyDown,
820
+ className: cn("tw:resize-none", "tw:outline-hidden", "tw:w-full", "tw:px-2", "tw:bg-transparent", disabled ? "tw:text-muted-foreground" : "tw:text-foreground", "tw:text-sm", "tw:font-sans", "tw:transition-[width]", "tw:delay-75", "tw:ease-linear", "tw:overflow-auto")
821
+ }),
822
+ /* @__PURE__ */ jsxs("div", {
823
+ className: cn("tw:flex tw:items-center tw:gap-4", variant === "inline" ? "tw:items-end" : "tw:items-center"),
824
+ children: [suffix, /* @__PURE__ */ jsx(PromptInputSubmit, {
825
+ disabled: isDisabled,
826
+ status
827
+ })]
828
+ })
829
+ ]
830
+ })
831
+ });
832
+ return /* @__PURE__ */ jsx(TooltipProvider, { children: hasCommands ? /* @__PURE__ */ jsx(PromptInputCommands, {
833
+ items: commands ?? [],
834
+ open: commandsOpen,
835
+ onSelect: handleCommandSelect,
836
+ filterValue: slashFilter,
837
+ children: formEl
838
+ }) : formEl });
839
+ };
840
+ PromptInput.Action = PromptInputAction;
841
+ //#endregion
842
+ //#region src/blocks/AIKit/Question.tsx
843
+ const handleKeyDown = (callback) => (e) => {
844
+ if (e.key === "Enter" || e.key === " ") {
845
+ e.preventDefault();
846
+ callback();
847
+ }
848
+ };
849
+ const Question = ({ question, header, options, multiSelect = true, selectedOptionIds = [], onSelectionChange, customAnswer = "", onCustomAnswerChange, onCustomAnswerConfirm, showCustomAnswer = true, customAnswerPlaceholder = "Type your answer…", showSkip = true, onSkip, onClose, onNext, submitTooltip, onPrevious, currentStep, totalSteps, renderPreview, className }) => {
850
+ const [isCustomExpanded, setIsCustomExpanded] = useState(false);
851
+ const isCustomSelected = isCustomExpanded || customAnswer.length > 0;
852
+ const hasSteps = currentStep != null && totalSteps != null;
853
+ const progressValue = hasSteps ? currentStep / totalSteps * 100 : 0;
854
+ const isFirstStep = currentStep === 1;
855
+ const isLastStep = hasSteps && currentStep === totalSteps;
856
+ const handleOptionToggle = (optionId) => {
857
+ if (multiSelect) {
858
+ const nextIds = selectedOptionIds.includes(optionId) ? selectedOptionIds.filter((id) => id !== optionId) : [...selectedOptionIds, optionId];
859
+ onSelectionChange?.(nextIds);
860
+ } else {
861
+ setIsCustomExpanded(false);
862
+ onCustomAnswerChange?.("");
863
+ onSelectionChange?.([optionId]);
864
+ }
865
+ };
866
+ const handleCustomToggle = (checked) => {
867
+ setIsCustomExpanded(checked);
868
+ if (checked) {
869
+ if (!multiSelect) onSelectionChange?.([]);
870
+ } else onCustomAnswerChange?.("");
871
+ };
872
+ const handleCustomFocus = () => {
873
+ setIsCustomExpanded(true);
874
+ if (!multiSelect) onSelectionChange?.([]);
875
+ };
876
+ const handleCustomRowClick = () => {
877
+ if (multiSelect) handleCustomToggle(!isCustomSelected);
878
+ else handleCustomFocus();
879
+ };
880
+ return /* @__PURE__ */ jsxs("div", {
881
+ className: cn("tw:flex tw:max-w-[800px] tw:flex-col tw:gap-4 tw:overflow-hidden tw:rounded-xl tw:border tw:border-solid tw:border-border tw:bg-neutral-50 tw:shadow-lg", className),
882
+ "data-testid": "question-root",
883
+ "data-question-step": currentStep,
884
+ "data-question-total-steps": totalSteps,
885
+ "data-question-multi-select": multiSelect,
886
+ children: [
887
+ /* @__PURE__ */ jsxs("div", {
888
+ className: "tw:flex tw:items-start tw:gap-2 tw:pl-4 tw:pr-2 tw:pt-4",
889
+ children: [/* @__PURE__ */ jsxs("div", {
890
+ className: "tw:flex tw:min-w-0 tw:flex-1 tw:flex-col tw:gap-1",
891
+ children: [/* @__PURE__ */ jsx("p", {
892
+ className: "tw:m-0 tw:text-base tw:font-semibold tw:leading-6 tw:text-neutral-800",
893
+ children: question
894
+ }), header && /* @__PURE__ */ jsx("p", {
895
+ className: "tw:m-0 tw:text-xs tw:leading-4 tw:text-neutral-500",
896
+ children: header
897
+ })]
898
+ }), onClose && /* @__PURE__ */ jsx(Button, {
899
+ variant: "outline",
900
+ size: "icon-sm",
901
+ "aria-label": "Close",
902
+ onClick: onClose,
903
+ "data-testid": "question-close-button",
904
+ children: /* @__PURE__ */ jsx(X, { className: "tw:size-4" })
905
+ })]
906
+ }),
907
+ /* @__PURE__ */ jsx("div", {
908
+ className: "tw:px-4",
909
+ children: /* @__PURE__ */ jsxs("div", {
910
+ className: "tw:flex tw:flex-col tw:gap-4 tw:border-0 tw:border-l tw:border-solid tw:border-primary tw:px-4 tw:py-2",
911
+ children: [options.map((option) => /* @__PURE__ */ jsxs("div", {
912
+ className: "tw:-mx-2 tw:-my-1.5 tw:flex tw:cursor-pointer tw:items-start tw:gap-2 tw:rounded-md tw:px-2 tw:py-1.5 tw:hover:bg-neutral-100",
913
+ onClick: () => handleOptionToggle(option.id),
914
+ onKeyDown: handleKeyDown(() => handleOptionToggle(option.id)),
915
+ role: "button",
916
+ tabIndex: 0,
917
+ "data-testid": `question-option-${option.id}`,
918
+ children: [multiSelect && /* @__PURE__ */ jsx(Checkbox, {
919
+ checked: selectedOptionIds.includes(option.id),
920
+ onCheckedChange: () => handleOptionToggle(option.id),
921
+ onClick: (e) => e.stopPropagation(),
922
+ className: "tw:shrink-0"
923
+ }), /* @__PURE__ */ jsxs("div", {
924
+ className: "tw:flex tw:min-w-0 tw:flex-1 tw:items-start tw:gap-3",
925
+ children: [/* @__PURE__ */ jsxs("div", {
926
+ className: "tw:flex tw:flex-col tw:gap-1.5",
927
+ children: [/* @__PURE__ */ jsx("span", {
928
+ className: "tw:text-sm tw:font-medium tw:leading-none tw:text-neutral-800",
929
+ children: option.label
930
+ }), option.description && /* @__PURE__ */ jsx("span", {
931
+ className: "tw:text-sm tw:font-normal tw:leading-5 tw:text-muted-foreground",
932
+ children: option.description
933
+ })]
934
+ }), option.preview && /* @__PURE__ */ jsx("div", {
935
+ className: cn("tw:ml-auto tw:flex tw:max-h-40 tw:min-w-0 tw:max-w-[50%] tw:flex-col tw:overflow-hidden tw:rounded-md", !renderPreview && "tw:overflow-auto tw:border tw:border-solid tw:border-neutral-200 tw:bg-white tw:p-2"),
936
+ children: renderPreview ? renderPreview(option.preview) : /* @__PURE__ */ jsx("pre", {
937
+ className: "tw:m-0 tw:overflow-visible tw:border-0 tw:bg-transparent tw:p-0 tw:font-mono tw:text-xs tw:leading-5 tw:text-neutral-700",
938
+ children: option.preview
939
+ })
940
+ })]
941
+ })]
942
+ }, option.id)), showCustomAnswer && /* @__PURE__ */ jsxs("div", {
943
+ className: "tw:flex tw:flex-col tw:gap-2",
944
+ children: [/* @__PURE__ */ jsxs("div", {
945
+ className: "tw:-mx-2 tw:-my-1.5 tw:flex tw:cursor-pointer tw:items-start tw:gap-2 tw:rounded-md tw:px-2 tw:py-1.5 tw:hover:bg-neutral-100",
946
+ onClick: handleCustomRowClick,
947
+ onKeyDown: handleKeyDown(handleCustomRowClick),
948
+ role: "button",
949
+ tabIndex: 0,
950
+ children: [multiSelect && /* @__PURE__ */ jsx(Checkbox, {
951
+ checked: isCustomSelected,
952
+ onCheckedChange: handleCustomToggle,
953
+ onClick: (e) => e.stopPropagation(),
954
+ className: "tw:shrink-0"
955
+ }), /* @__PURE__ */ jsx("span", {
956
+ className: cn("tw:text-sm tw:font-medium tw:leading-none", !multiSelect && isCustomSelected ? "tw:text-primary" : "tw:text-neutral-800"),
957
+ children: "Other"
958
+ })]
959
+ }), /* @__PURE__ */ jsx(TextInput, {
960
+ value: customAnswer,
961
+ onValueChange: (value) => onCustomAnswerChange?.(value),
962
+ onFocus: handleCustomFocus,
963
+ onKeyDown: onCustomAnswerConfirm ? (e) => {
964
+ if (e.key === "Enter" && !e.shiftKey && !(e.metaKey || e.ctrlKey)) {
965
+ e.preventDefault();
966
+ onCustomAnswerConfirm();
967
+ }
968
+ } : void 0,
969
+ placeholder: customAnswerPlaceholder,
970
+ sizing: "small",
971
+ testId: "question-custom"
972
+ })]
973
+ })]
974
+ })
975
+ }),
976
+ /* @__PURE__ */ jsxs("div", {
977
+ className: "tw:flex tw:flex-col",
978
+ children: [hasSteps && /* @__PURE__ */ jsx(Progress, {
979
+ size: "sm",
980
+ value: progressValue,
981
+ className: "tw:rounded-none"
982
+ }), /* @__PURE__ */ jsxs("div", {
983
+ className: cn("tw:flex tw:items-center tw:justify-end tw:gap-4 tw:px-4 tw:py-3", !hasSteps && "tw:border-0 tw:border-t tw:border-solid tw:border-neutral-100"),
984
+ children: [
985
+ hasSteps && /* @__PURE__ */ jsxs("div", {
986
+ className: "tw:flex tw:items-center tw:gap-2",
987
+ children: [
988
+ /* @__PURE__ */ jsx("button", {
989
+ type: "button",
990
+ disabled: isFirstStep,
991
+ className: "tw:flex tw:cursor-pointer tw:items-center tw:justify-center tw:bg-transparent tw:p-0 tw:disabled:cursor-default tailwindcss-preflight",
992
+ onClick: onPrevious,
993
+ "aria-label": "Previous step",
994
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: cn("tw:size-5", isFirstStep ? "tw:text-primary/25" : "tw:text-primary") })
995
+ }),
996
+ /* @__PURE__ */ jsxs("span", {
997
+ className: "tw:text-xs tw:leading-4 tw:text-neutral-500",
998
+ children: [
999
+ currentStep,
1000
+ " of ",
1001
+ totalSteps
1002
+ ]
1003
+ }),
1004
+ /* @__PURE__ */ jsx("button", {
1005
+ type: "button",
1006
+ disabled: currentStep === totalSteps,
1007
+ className: "tw:flex tw:cursor-pointer tw:items-center tw:justify-center tw:bg-transparent tw:p-0 tw:disabled:cursor-default tailwindcss-preflight",
1008
+ onClick: onNext,
1009
+ "aria-label": "Next step",
1010
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: cn("tw:size-5", currentStep === totalSteps ? "tw:text-primary/25" : "tw:text-primary") })
1011
+ })
1012
+ ]
1013
+ }),
1014
+ showSkip && onSkip && /* @__PURE__ */ jsx(Button, {
1015
+ variant: "outline",
1016
+ size: "small",
1017
+ onClick: onSkip,
1018
+ "data-testid": "question-skip-button",
1019
+ children: "Skip"
1020
+ }),
1021
+ (multiSelect || isCustomSelected) && (submitTooltip ? /* @__PURE__ */ jsx(Tooltip, {
1022
+ tooltip: submitTooltip,
1023
+ placement: "top",
1024
+ triggerAsChild: true,
1025
+ children: /* @__PURE__ */ jsx(Button, {
1026
+ variant: "primary",
1027
+ size: "small",
1028
+ onClick: onNext,
1029
+ "data-testid": "question-next-button",
1030
+ children: isLastStep ? "Submit" : "Next"
1031
+ })
1032
+ }) : /* @__PURE__ */ jsx(Button, {
1033
+ variant: "primary",
1034
+ size: "small",
1035
+ onClick: onNext,
1036
+ "data-testid": "question-next-button",
1037
+ children: isLastStep ? "Submit" : "Next"
1038
+ }))
1039
+ ]
1040
+ })]
1041
+ })
1042
+ ]
1043
+ });
1044
+ };
1045
+ //#endregion
1046
+ //#region src/blocks/AIKit/QuestionBlock.tsx
1047
+ const QuestionBlock = ({ steps, showSkip = true, onSubmit, onClose, renderPreview, className }) => {
1048
+ const [currentStep, setCurrentStep] = useState(1);
1049
+ const [selections, setSelections] = useState({});
1050
+ const [customAnswers, setCustomAnswers] = useState({});
1051
+ const stepData = steps[currentStep - 1];
1052
+ const isLastStep = currentStep === steps.length;
1053
+ const advance = (updatedSelections) => {
1054
+ const finalSelections = updatedSelections ?? selections;
1055
+ if (isLastStep) onSubmit?.({
1056
+ selections: finalSelections,
1057
+ customAnswers
1058
+ });
1059
+ else setCurrentStep((s) => Math.min(s + 1, steps.length));
1060
+ };
1061
+ const handleSelectionChange = (ids) => {
1062
+ const updated = {
1063
+ ...selections,
1064
+ [currentStep]: ids
1065
+ };
1066
+ setSelections(updated);
1067
+ if (!stepData.multiSelect) advance(updated);
1068
+ };
1069
+ return /* @__PURE__ */ jsx(Question, {
1070
+ ...stepData,
1071
+ selectedOptionIds: selections[currentStep] ?? [],
1072
+ onSelectionChange: handleSelectionChange,
1073
+ customAnswer: customAnswers[currentStep] ?? "",
1074
+ onCustomAnswerChange: (value) => setCustomAnswers((prev) => ({
1075
+ ...prev,
1076
+ [currentStep]: value
1077
+ })),
1078
+ currentStep,
1079
+ totalSteps: steps.length,
1080
+ showSkip: showSkip && !isLastStep,
1081
+ onNext: () => advance(),
1082
+ onPrevious: () => setCurrentStep((s) => Math.max(s - 1, 1)),
1083
+ onSkip: () => setCurrentStep((s) => Math.min(s + 1, steps.length)),
1084
+ onClose,
1085
+ renderPreview,
1086
+ className
1087
+ }, currentStep);
1088
+ };
1089
+ //#endregion
1090
+ //#region src/blocks/AIKit/SuggestedPrompt.tsx
1091
+ const SuggestedPrompt = ({ label, disabled, onClick, icon, className }) => {
1092
+ return /* @__PURE__ */ jsxs("button", {
1093
+ type: "button",
1094
+ disabled,
1095
+ className: cn("tailwindcss-preflight tw:flex tw:items-center tw:justify-start tw:gap-2 tw:whitespace-nowrap tw:rounded-lg tw:p-2 tw:text-left tw:text-sm tw:font-medium tw:text-foreground tw:transition-colors tw:not-disabled:hover:bg-muted tw:disabled:cursor-not-allowed tw:disabled:opacity-50", className),
1096
+ onClick,
1097
+ children: [icon ?? /* @__PURE__ */ jsx(FileText, { className: "tw:size-4 tw:shrink-0 tw:basis-4 tw:[&_*]:stroke-aigradient-600" }), /* @__PURE__ */ jsx("div", {
1098
+ className: "tw:whitespace-normal tw:text-left",
1099
+ children: label
1100
+ })]
1101
+ });
1102
+ };
1103
+ //#endregion
1104
+ //#region src/blocks/AIKit/ThinkingIndicator.tsx
1105
+ const ThinkingIndicator = ({ label = "Thinking..." }) => {
1106
+ return /* @__PURE__ */ jsxs("div", {
1107
+ className: "tw:flex tw:items-center tw:gap-2",
1108
+ "data-testid": "chat-thinking-indicator",
1109
+ children: [/* @__PURE__ */ jsx(Loader2, { className: "tw:size-4 tw:animate-spin tw:text-secondary-500" }), /* @__PURE__ */ jsx("span", {
1110
+ className: "tw:text-sm tw:italic tw:text-secondary-500",
1111
+ children: label
1112
+ })]
1113
+ });
1114
+ };
1115
+ //#endregion
1116
+ //#region src/blocks/AIKit/ToolCall/ToolCallApproval.tsx
1117
+ const STATUS_BADGE = {
1118
+ pending: {
1119
+ label: "Needs approval",
1120
+ color: "blue"
1121
+ },
1122
+ approved: {
1123
+ label: "Approved",
1124
+ color: "green"
1125
+ },
1126
+ rejected: {
1127
+ label: "Rejected",
1128
+ color: "red"
1129
+ },
1130
+ expired: {
1131
+ label: "Expired",
1132
+ color: "gray"
1133
+ }
1134
+ };
1135
+ /**
1136
+ * Per-tool-call approve/reject frame — the granular sibling of `PlanApproval`
1137
+ * (which approves a whole plan). Chrome + status + actions only: the app
1138
+ * renders the call detail as `children` and owns the SDK/permission wiring.
1139
+ */
1140
+ const ToolCallApproval = ({ toolName, title, status, onApprove, onReject, children, actions, isSubmitting = false, enableShortcuts = false, approveLabel = "Approve", rejectLabel = "Reject", className }) => {
1141
+ const isPending = status === "pending";
1142
+ const hasCustomActions = actions != null;
1143
+ const showActions = isPending && (isPending && !hasCustomActions && Boolean(onApprove || onReject) || hasCustomActions);
1144
+ const badge = STATUS_BADGE[status];
1145
+ useEffect(() => {
1146
+ if (!enableShortcuts || !isPending || isSubmitting) return;
1147
+ const isEditableTarget = (target) => {
1148
+ if (!(target instanceof HTMLElement)) return false;
1149
+ return target.isContentEditable || target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.tagName === "SELECT";
1150
+ };
1151
+ const handleKeyDown = (event) => {
1152
+ if (event.repeat || event.defaultPrevented || isEditableTarget(event.target)) return;
1153
+ if (event.key === "Enter" && !event.shiftKey && !event.ctrlKey && !event.metaKey && onApprove) {
1154
+ event.preventDefault();
1155
+ onApprove();
1156
+ } else if (event.key === "Escape" && onReject) {
1157
+ event.preventDefault();
1158
+ onReject();
1159
+ }
1160
+ };
1161
+ window.addEventListener("keydown", handleKeyDown);
1162
+ return () => window.removeEventListener("keydown", handleKeyDown);
1163
+ }, [
1164
+ enableShortcuts,
1165
+ isPending,
1166
+ isSubmitting,
1167
+ onApprove,
1168
+ onReject
1169
+ ]);
1170
+ return /* @__PURE__ */ jsxs("section", {
1171
+ "data-testid": "tool-call-approval",
1172
+ "data-status": status,
1173
+ "aria-label": typeof title === "string" ? title : toolName,
1174
+ className: cn("tw:flex tw:w-full tw:max-w-[800px] tw:flex-col tw:gap-3 tw:overflow-hidden tw:rounded-xl tw:border tw:border-solid tw:border-border tw:bg-muted tw:p-4", className),
1175
+ children: [
1176
+ /* @__PURE__ */ jsxs("div", {
1177
+ className: "tw:flex tw:items-center tw:gap-2",
1178
+ children: [/* @__PURE__ */ jsx(Badge, {
1179
+ color: badge.color,
1180
+ variant: "pill",
1181
+ className: "tw:normal-case tw:tracking-normal",
1182
+ children: badge.label
1183
+ }), /* @__PURE__ */ jsx("code", {
1184
+ className: "tw:rounded tw:bg-background tw:px-1.5 tw:py-0.5 tw:font-mono tw:text-xs tw:text-foreground",
1185
+ children: toolName
1186
+ })]
1187
+ }),
1188
+ title != null && /* @__PURE__ */ jsx("p", {
1189
+ className: "tw:m-0 tw:text-sm tw:font-medium tw:text-foreground",
1190
+ children: title
1191
+ }),
1192
+ children,
1193
+ showActions && /* @__PURE__ */ jsx("div", {
1194
+ className: "tw:flex tw:items-center tw:justify-end tw:gap-2 tw:overflow-x-auto",
1195
+ children: actions ?? /* @__PURE__ */ jsxs(Fragment$1, { children: [onReject && /* @__PURE__ */ jsx(Button, {
1196
+ variant: "outline",
1197
+ size: "small",
1198
+ onClick: onReject,
1199
+ disabled: isSubmitting,
1200
+ className: "tw:shrink-0 tw:whitespace-nowrap",
1201
+ children: rejectLabel
1202
+ }), onApprove && /* @__PURE__ */ jsx(Button, {
1203
+ variant: "primary",
1204
+ size: "small",
1205
+ onClick: onApprove,
1206
+ disabled: isSubmitting,
1207
+ className: "tw:shrink-0 tw:whitespace-nowrap",
1208
+ children: approveLabel
1209
+ })] })
1210
+ })
1211
+ ]
1212
+ });
1213
+ };
1214
+ //#endregion
1215
+ //#region src/blocks/AIKit/ToolCall/ToolCallChip.tsx
1216
+ const chipClasses = cva(["tw:inline-flex tw:items-center tw:gap-1.5 tw:rounded-md tw:border tw:border-solid", "tw:border-border tw:bg-muted tw:px-2 tw:py-1 tw:text-xs tw:text-foreground"], {
1217
+ variants: { interactive: {
1218
+ true: "tw:cursor-pointer tw:focus-visible:outline-hidden tw:focus-visible:ring-2 tw:focus-visible:ring-ring tw:not-disabled:hover:bg-accent",
1219
+ false: ""
1220
+ } },
1221
+ defaultVariants: { interactive: false }
1222
+ });
1223
+ const StateIcon = ({ state }) => {
1224
+ if (state === "processing") return /* @__PURE__ */ jsx(Loader2, { className: "tw:size-3.5 tw:shrink-0 tw:animate-spin tw:text-muted-foreground" });
1225
+ if (state === "error") return /* @__PURE__ */ jsx(CircleX, { className: "tw:size-3.5 tw:shrink-0 tw:text-error-500" });
1226
+ return /* @__PURE__ */ jsx(CircleCheck, { className: "tw:size-3.5 tw:shrink-0 tw:text-primary" });
1227
+ };
1228
+ /**
1229
+ * Presentational chip summarising a single tool call (icon + label + optional
1230
+ * trailing action). It has **no** URL/router knowledge — wrap it in a `Link`
1231
+ * or pass `onClick` for navigation; the app owns deep-linking.
1232
+ */
1233
+ const ToolCallChip = ({ label, state, icon, trailing, onClick, className }) => {
1234
+ const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
1235
+ icon ?? /* @__PURE__ */ jsx(StateIcon, { state }),
1236
+ /* @__PURE__ */ jsx("span", {
1237
+ className: "tw:min-w-0 tw:truncate",
1238
+ children: label
1239
+ }),
1240
+ trailing != null && /* @__PURE__ */ jsx("span", {
1241
+ className: "tw:ml-auto tw:inline-flex tw:shrink-0 tw:items-center",
1242
+ children: trailing
1243
+ })
1244
+ ] });
1245
+ if (onClick) return /* @__PURE__ */ jsx("button", {
1246
+ type: "button",
1247
+ "data-testid": "tool-call-chip",
1248
+ "data-state": state,
1249
+ onClick,
1250
+ className: cn("tailwindcss-preflight", chipClasses({ interactive: true }), className),
1251
+ children: content
1252
+ });
1253
+ return /* @__PURE__ */ jsx("span", {
1254
+ "data-testid": "tool-call-chip",
1255
+ "data-state": state,
1256
+ className: cn(chipClasses({ interactive: false }), className),
1257
+ children: content
1258
+ });
1259
+ };
1260
+ //#endregion
1261
+ //#region src/blocks/AIKit/usageStatsHelpers.ts
1262
+ /** Clamp a percentage to 0–100 and normalize non-finite input to 0. */
1263
+ const clampPercentage = (value) => Number.isFinite(value) ? Math.min(100, Math.max(0, value)) : 0;
1264
+ //#endregion
1265
+ //#region src/blocks/AIKit/UsageStatsRing.tsx
1266
+ const UsageStatsRing = ({ value, size = 16, strokeWidth = 2.5, className }) => {
1267
+ const radius = Math.max(0, (size - strokeWidth) / 2 - 1);
1268
+ const circumference = 2 * Math.PI * radius;
1269
+ const offset = circumference * (1 - clampPercentage(value) / 100);
1270
+ return /* @__PURE__ */ jsxs("svg", {
1271
+ width: size,
1272
+ height: size,
1273
+ viewBox: `0 0 ${size} ${size}`,
1274
+ className: cn("tw:-rotate-90", className),
1275
+ role: "presentation",
1276
+ children: [/* @__PURE__ */ jsx("circle", {
1277
+ cx: size / 2,
1278
+ cy: size / 2,
1279
+ r: radius,
1280
+ fill: "none",
1281
+ strokeWidth,
1282
+ className: "tw:stroke-neutral-400 tw:opacity-50"
1283
+ }), /* @__PURE__ */ jsx("circle", {
1284
+ cx: size / 2,
1285
+ cy: size / 2,
1286
+ r: radius,
1287
+ fill: "none",
1288
+ strokeWidth,
1289
+ strokeLinecap: "round",
1290
+ strokeDasharray: circumference,
1291
+ strokeDashoffset: offset,
1292
+ className: "tw:stroke-primary tw:transition-all"
1293
+ })]
1294
+ });
1295
+ };
1296
+ //#endregion
1297
+ //#region src/blocks/AIKit/UsageStats.tsx
1298
+ const UsageStats = ({ value, alert = false, children, className, ariaLabel, align = "end", side = "top", sideOffset = 8 }) => {
1299
+ const defaultLabel = `Usage: ${Math.round(clampPercentage(value))}%${alert ? " (usage alert)" : ""}`;
1300
+ return /* @__PURE__ */ jsxs(HoverCard, { children: [/* @__PURE__ */ jsx(HoverCard.Trigger, {
1301
+ asChild: true,
1302
+ children: /* @__PURE__ */ jsxs("span", {
1303
+ "aria-label": ariaLabel ?? defaultLabel,
1304
+ className: cn("tw:relative tw:inline-flex tw:size-8 tw:items-center tw:justify-center", className),
1305
+ children: [/* @__PURE__ */ jsx(UsageStatsRing, { value }), alert && /* @__PURE__ */ jsx(AlertCircle, {
1306
+ "data-testid": "usage-stats-alert",
1307
+ className: "tw:absolute tw:-right-0.5 tw:-top-0.5 tw:size-3 tw:text-error-500"
1308
+ })]
1309
+ })
1310
+ }), /* @__PURE__ */ jsx(HoverCard.Content, {
1311
+ align,
1312
+ side,
1313
+ sideOffset,
1314
+ children
1315
+ })] });
1316
+ };
1317
+ //#endregion
1318
+ export { AnswerSummary, CollapsibleStepHeader, InlineStepDetail, InlineStepLabel, Markdown, MessageBubble, PlanApproval, PlanRewritingIndicator, PromptInput, Question, QuestionBlock, SuggestedPrompt, ThinkingIndicator, ToolCallApproval, ToolCallChip, UsageStats, UsageStatsRing };
1319
+
1320
+ //# sourceMappingURL=AIKit-Dre37SJr.js.map