@exegia/corpora-ui 2.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (588) hide show
  1. package/README.md +20 -0
  2. package/dist-lib/EVILCHARTS-LICENSE.txt +21 -0
  3. package/dist-lib/button-CIRkQXA6.js +152 -0
  4. package/dist-lib/button.js +3 -0
  5. package/dist-lib/card.js +150 -0
  6. package/dist-lib/components/atoms/text/default.d.ts +2 -1143
  7. package/dist-lib/components/blocks/shell/index.d.ts +1 -0
  8. package/dist-lib/components/composed/chat/chart/chart-atom.d.ts +30 -0
  9. package/dist-lib/components/composed/chat/chart/chart-context.d.ts +2 -0
  10. package/dist-lib/components/composed/chat/chart/chart-legend.d.ts +4 -0
  11. package/dist-lib/components/composed/chat/chart/chart-plot.d.ts +3 -0
  12. package/dist-lib/components/composed/chat/chart/chart-root.d.ts +3 -0
  13. package/dist-lib/components/composed/chat/chart/chart-tooltip.d.ts +4 -0
  14. package/dist-lib/components/composed/chat/chart/constants.d.ts +3 -0
  15. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-area-chart.d.ts +93 -0
  16. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-bar-chart.d.ts +86 -0
  17. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-brush.d.ts +65 -0
  18. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-chart.d.ts +44 -0
  19. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-dot.d.ts +16 -0
  20. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-legend.d.ts +24 -0
  21. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-line-chart.d.ts +90 -0
  22. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-pie-chart.d.ts +73 -0
  23. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-tooltip.d.ts +29 -0
  24. package/dist-lib/components/composed/chat/chart/index.d.ts +6 -0
  25. package/dist-lib/components/composed/chat/chart/type.d.ts +80 -0
  26. package/dist-lib/components/composed/chat/chart/use-chart-state.d.ts +3 -0
  27. package/dist-lib/components/composed/chat/chart/use-chart.d.ts +6 -0
  28. package/dist-lib/components/composed/chat/chart/utils.d.ts +5 -0
  29. package/dist-lib/components/composed/chat/chart.d.ts +1 -44
  30. package/dist-lib/components/composed/chat/index.d.ts +1 -1
  31. package/dist-lib/components/ui/badge.d.ts +2 -2
  32. package/dist-lib/components/ui/button.d.ts +2 -2
  33. package/dist-lib/components/ui/glasscn/lazy-glass-surface.d.ts +6 -0
  34. package/dist-lib/components/ui/modal.d.ts +10 -0
  35. package/dist-lib/components/ui/overlays.d.ts +4 -0
  36. package/dist-lib/components/ui/select.d.ts +1 -1
  37. package/dist-lib/components/ui/toast.d.ts +2 -0
  38. package/dist-lib/ease-C9At8rnB.js +120 -0
  39. package/dist-lib/exegia-provider-DNTuLljX.js +124 -0
  40. package/dist-lib/index.css +3 -0
  41. package/dist-lib/index.d.ts +3 -0
  42. package/dist-lib/index.js +10283 -8224
  43. package/dist-lib/input.js +28 -0
  44. package/dist-lib/label.js +19 -0
  45. package/dist-lib/lib/segmented-control.d.ts +1 -1
  46. package/dist-lib/lib/state/exegia-provider.d.ts +17 -8
  47. package/dist-lib/lib/state/index.d.ts +2 -0
  48. package/dist-lib/lib/state/portal-context.d.ts +5 -0
  49. package/dist-lib/lib/state/sound-loading.d.ts +4 -0
  50. package/dist-lib/liquid-glass-BihU6nMl.js +50 -0
  51. package/dist-lib/modal-DLaOK-s1.js +82 -0
  52. package/dist-lib/overlays.js +3 -0
  53. package/dist-lib/rolldown-runtime-Dy4uBu1J.js +11 -0
  54. package/dist-lib/scaffold-Qv4hs5Pf.js +925 -0
  55. package/dist-lib/scaffold.js +2 -0
  56. package/dist-lib/shell-BQ9cjIEu.js +722 -0
  57. package/dist-lib/shell.js +2 -0
  58. package/dist-lib/sound-knGH4lj-.js +19 -0
  59. package/dist-lib/state.js +2 -0
  60. package/dist-lib/toast-CataVXHN.js +193 -0
  61. package/dist-lib/utils-BO0qfoA6.js +61 -0
  62. package/package.json +65 -23
  63. package/dist-lib/components/atoms/_layout.d.ts +0 -4
  64. package/dist-lib/components/atoms/bubble/__tests__/bubble.test.d.ts +0 -1
  65. package/dist-lib/components/atoms/bubble/__tests__/reference.test.d.ts +0 -1
  66. package/dist-lib/components/atoms/text/__tests__/text.test.d.ts +0 -1
  67. package/dist-lib/components/atoms/text-selection/__tests__/click-popover.test.d.ts +0 -1
  68. package/dist-lib/components/atoms/text-selection/__tests__/text-selection.test.d.ts +0 -1
  69. package/dist-lib/components/blocks/auth/__tests__/auth-flow-block.test.d.ts +0 -1
  70. package/dist-lib/components/blocks/auth/__tests__/auth-state-atom.test.d.ts +0 -1
  71. package/dist-lib/components/blocks/auth/__tests__/linked-accounts-block.test.d.ts +0 -1
  72. package/dist-lib/components/blocks/auth/__tests__/onboarding-block.test.d.ts +0 -1
  73. package/dist-lib/components/blocks/auth/__tests__/passkey-manager-block.test.d.ts +0 -1
  74. package/dist-lib/components/blocks/auth/__tests__/passkey-sign-in-block.test.d.ts +0 -1
  75. package/dist-lib/components/blocks/auth/__tests__/signup-block.test.d.ts +0 -1
  76. package/dist-lib/components/blocks/auth/__tests__/update-password-block.test.d.ts +0 -1
  77. package/dist-lib/components/blocks/chat/__tests__/ai-panel.test.d.ts +0 -1
  78. package/dist-lib/components/blocks/profile/__tests__/profile-card-block.test.d.ts +0 -1
  79. package/dist-lib/components/blocks/scaffold/__tests__/scaffold-atom.test.d.ts +0 -1
  80. package/dist-lib/components/blocks/scaffold/__tests__/scaffold.test.d.ts +0 -1
  81. package/dist-lib/components/blocks/shell/__tests__/shell-fit-atom.test.d.ts +0 -1
  82. package/dist-lib/components/blocks/shell/__tests__/shell-layout.test.d.ts +0 -1
  83. package/dist-lib/components/blocks/shell/__tests__/shell-metrics.test.d.ts +0 -1
  84. package/dist-lib/components/blocks/sidebar/__tests__/ai-sidebar-atom.test.d.ts +0 -1
  85. package/dist-lib/components/blocks/sidebar/__tests__/ai-sidebar.test.d.ts +0 -1
  86. package/dist-lib/components/blocks/sidebar/__tests__/use-ai-sidebar.test.d.ts +0 -1
  87. package/dist-lib/components/composed/__tests__/logo.test.d.ts +0 -1
  88. package/dist-lib/components/composed/action-bar/__tests__/action-bar.test.d.ts +0 -1
  89. package/dist-lib/components/composed/ai/__tests__/ai.test.d.ts +0 -1
  90. package/dist-lib/components/composed/chat/__tests__/attachment.test.d.ts +0 -1
  91. package/dist-lib/components/composed/chat/__tests__/beautiful-ui.test.d.ts +0 -1
  92. package/dist-lib/components/composed/chat/__tests__/chart.test.d.ts +0 -1
  93. package/dist-lib/components/composed/chat/__tests__/code-block.test.d.ts +0 -1
  94. package/dist-lib/components/composed/chat/__tests__/composer-attachments.test.d.ts +0 -1
  95. package/dist-lib/components/composed/chat/__tests__/composer.test.d.ts +0 -1
  96. package/dist-lib/components/composed/chat/__tests__/flowchart.test.d.ts +0 -1
  97. package/dist-lib/components/composed/chat/__tests__/glass-material.test.d.ts +0 -1
  98. package/dist-lib/components/composed/chat/__tests__/markdown.test.d.ts +0 -1
  99. package/dist-lib/components/composed/chat/__tests__/menu-command.test.d.ts +0 -1
  100. package/dist-lib/components/composed/chat/__tests__/recommendation.test.d.ts +0 -1
  101. package/dist-lib/components/composed/tree/__tests__/tree-atom.test.d.ts +0 -1
  102. package/dist-lib/components/composed/tree/__tests__/tree.test.d.ts +0 -1
  103. package/dist-lib/components/composed/tree/__tests__/use-tree.test.d.ts +0 -1
  104. package/dist-lib/components/composed/user/__tests__/message.test.d.ts +0 -1
  105. package/dist-lib/components/composed/verse/__tests__/verse.test.d.ts +0 -1
  106. package/dist-lib/components/docs/atoms-gallery.d.ts +0 -12
  107. package/dist-lib/components/docs/block-demo-stage.d.ts +0 -7
  108. package/dist-lib/components/docs/blocks-gallery.d.ts +0 -2
  109. package/dist-lib/components/docs/browser.d.ts +0 -10
  110. package/dist-lib/components/docs/code-block.d.ts +0 -4
  111. package/dist-lib/components/docs/components-gallery.d.ts +0 -2
  112. package/dist-lib/components/docs/demo-controls.d.ts +0 -21
  113. package/dist-lib/components/docs/hero.d.ts +0 -5
  114. package/dist-lib/components/docs/mermaid.d.ts +0 -3
  115. package/dist-lib/components/icons/__tests__/icons.test.d.ts +0 -1
  116. package/dist-lib/components/stories/attachment.story.d.ts +0 -11
  117. package/dist-lib/components/stories/auth-flow-block.story.d.ts +0 -2
  118. package/dist-lib/components/stories/avatar.story.d.ts +0 -6
  119. package/dist-lib/components/stories/base.story.d.ts +0 -6
  120. package/dist-lib/components/stories/bubble.story.d.ts +0 -6
  121. package/dist-lib/components/stories/button.story.d.ts +0 -9
  122. package/dist-lib/components/stories/card.story.d.ts +0 -8
  123. package/dist-lib/components/stories/chart.story.d.ts +0 -34
  124. package/dist-lib/components/stories/checkbox.story.d.ts +0 -6
  125. package/dist-lib/components/stories/code-auth-block.story.d.ts +0 -2
  126. package/dist-lib/components/stories/code-block.story.d.ts +0 -12
  127. package/dist-lib/components/stories/composed-password-input.story.d.ts +0 -6
  128. package/dist-lib/components/stories/context-cards.story.d.ts +0 -3
  129. package/dist-lib/components/stories/emoji-action-bar.story.d.ts +0 -3
  130. package/dist-lib/components/stories/field.story.d.ts +0 -6
  131. package/dist-lib/components/stories/file-icons.story.d.ts +0 -5
  132. package/dist-lib/components/stories/filter-table.story.d.ts +0 -21
  133. package/dist-lib/components/stories/flowchart.story.d.ts +0 -3
  134. package/dist-lib/components/stories/forgot-password-block.story.d.ts +0 -2
  135. package/dist-lib/components/stories/frame.story.d.ts +0 -8
  136. package/dist-lib/components/stories/index.d.ts +0 -54
  137. package/dist-lib/components/stories/input-group.story.d.ts +0 -6
  138. package/dist-lib/components/stories/input.story.d.ts +0 -8
  139. package/dist-lib/components/stories/insight-cards.story.d.ts +0 -45
  140. package/dist-lib/components/stories/label.story.d.ts +0 -8
  141. package/dist-lib/components/stories/linked-accounts-block.story.d.ts +0 -2
  142. package/dist-lib/components/stories/login-block.story.d.ts +0 -2
  143. package/dist-lib/components/stories/logo.story.d.ts +0 -3
  144. package/dist-lib/components/stories/markdown.story.d.ts +0 -7
  145. package/dist-lib/components/stories/menu-command.story.d.ts +0 -13
  146. package/dist-lib/components/stories/onboarding-block.story.d.ts +0 -2
  147. package/dist-lib/components/stories/otp-field.story.d.ts +0 -8
  148. package/dist-lib/components/stories/passkey-manager-block.story.d.ts +0 -2
  149. package/dist-lib/components/stories/passkey-sign-in-block.story.d.ts +0 -2
  150. package/dist-lib/components/stories/password-input.story.d.ts +0 -9
  151. package/dist-lib/components/stories/profile-card-block.story.d.ts +0 -6
  152. package/dist-lib/components/stories/recommendation-card.story.d.ts +0 -3
  153. package/dist-lib/components/stories/records-table.story.d.ts +0 -23
  154. package/dist-lib/components/stories/reference.story.d.ts +0 -9
  155. package/dist-lib/components/stories/research-answer.story.d.ts +0 -10
  156. package/dist-lib/components/stories/scaffold-root.story.d.ts +0 -6
  157. package/dist-lib/components/stories/separator.story.d.ts +0 -6
  158. package/dist-lib/components/stories/shell-layout.story.d.ts +0 -2
  159. package/dist-lib/components/stories/signup-block.story.d.ts +0 -2
  160. package/dist-lib/components/stories/social-providers.story.d.ts +0 -3
  161. package/dist-lib/components/stories/streaming-text.story.d.ts +0 -3
  162. package/dist-lib/components/stories/text.story.d.ts +0 -8
  163. package/dist-lib/components/stories/textarea.story.d.ts +0 -6
  164. package/dist-lib/components/stories/tree.story.d.ts +0 -4
  165. package/dist-lib/components/stories/update-password-block.story.d.ts +0 -2
  166. package/dist-lib/components/stories/user.story.d.ts +0 -8
  167. package/dist-lib/components/stories/verse.story.d.ts +0 -6
  168. package/dist-lib/components/ui/chat/__tests__/segmented-toggle.test.d.ts +0 -1
  169. package/dist-lib/index.js.map +0 -1
  170. package/dist-lib/lib/state/__tests__/sound.test.d.ts +0 -1
  171. package/dist-lib/lib/utils.test.d.ts +0 -1
  172. package/src/assets/css/base.css +0 -62
  173. package/src/assets/css/chat.css +0 -229
  174. package/src/assets/css/shadows.css +0 -157
  175. package/src/assets/css/theme.css +0 -321
  176. package/src/components/AGENTS.md +0 -0
  177. package/src/components/atoms/_layout.tsx +0 -9
  178. package/src/components/atoms/avatar/base.tsx +0 -70
  179. package/src/components/atoms/avatar/index.ts +0 -10
  180. package/src/components/atoms/avatar/types.ts +0 -24
  181. package/src/components/atoms/avatar/utils.ts +0 -54
  182. package/src/components/atoms/avatar/verified.tsx +0 -16
  183. package/src/components/atoms/background/index.ts +0 -8
  184. package/src/components/atoms/background/texture.tsx +0 -29
  185. package/src/components/atoms/background/type.ts +0 -10
  186. package/src/components/atoms/background/utils.ts +0 -13
  187. package/src/components/atoms/bubble/__tests__/bubble.test.tsx +0 -193
  188. package/src/components/atoms/bubble/__tests__/reference.test.tsx +0 -25
  189. package/src/components/atoms/bubble/actions.tsx +0 -28
  190. package/src/components/atoms/bubble/context.ts +0 -11
  191. package/src/components/atoms/bubble/default.tsx +0 -46
  192. package/src/components/atoms/bubble/header.tsx +0 -36
  193. package/src/components/atoms/bubble/index.ts +0 -37
  194. package/src/components/atoms/bubble/message.tsx +0 -32
  195. package/src/components/atoms/bubble/reactions.tsx +0 -191
  196. package/src/components/atoms/bubble/types.ts +0 -82
  197. package/src/components/atoms/bubble/utils.ts +0 -46
  198. package/src/components/atoms/chip.tsx +0 -61
  199. package/src/components/atoms/field.tsx +0 -43
  200. package/src/components/atoms/index.ts +0 -26
  201. package/src/components/atoms/loader.tsx +0 -33
  202. package/src/components/atoms/reference.tsx +0 -41
  203. package/src/components/atoms/text/__tests__/text.test.tsx +0 -47
  204. package/src/components/atoms/text/default.tsx +0 -59
  205. package/src/components/atoms/text/heading.tsx +0 -58
  206. package/src/components/atoms/text/index.ts +0 -28
  207. package/src/components/atoms/text/label.tsx +0 -16
  208. package/src/components/atoms/text/paragraph.tsx +0 -55
  209. package/src/components/atoms/text/span.tsx +0 -14
  210. package/src/components/atoms/text/types.ts +0 -41
  211. package/src/components/atoms/text/utils.ts +0 -16
  212. package/src/components/atoms/text-selection/__tests__/click-popover.test.tsx +0 -61
  213. package/src/components/atoms/text-selection/__tests__/text-selection.test.tsx +0 -90
  214. package/src/components/atoms/text-selection/click-popover.tsx +0 -62
  215. package/src/components/atoms/text-selection/index.ts +0 -30
  216. package/src/components/atoms/text-selection/popover.tsx +0 -103
  217. package/src/components/atoms/text-selection/selection-atom.ts +0 -51
  218. package/src/components/atoms/text-selection/selection.tsx +0 -56
  219. package/src/components/atoms/text-selection/types.ts +0 -125
  220. package/src/components/atoms/text-selection/use-selection.ts +0 -84
  221. package/src/components/atoms/types.ts +0 -46
  222. package/src/components/blocks/.gitkeep +0 -0
  223. package/src/components/blocks/auth/__tests__/auth-flow-block.test.tsx +0 -183
  224. package/src/components/blocks/auth/__tests__/auth-state-atom.test.tsx +0 -247
  225. package/src/components/blocks/auth/__tests__/linked-accounts-block.test.tsx +0 -128
  226. package/src/components/blocks/auth/__tests__/onboarding-block.test.tsx +0 -183
  227. package/src/components/blocks/auth/__tests__/passkey-manager-block.test.tsx +0 -131
  228. package/src/components/blocks/auth/__tests__/passkey-sign-in-block.test.tsx +0 -59
  229. package/src/components/blocks/auth/__tests__/signup-block.test.tsx +0 -176
  230. package/src/components/blocks/auth/__tests__/update-password-block.test.tsx +0 -95
  231. package/src/components/blocks/auth/auth-flow-atom.ts +0 -238
  232. package/src/components/blocks/auth/auth-flow-block.tsx +0 -211
  233. package/src/components/blocks/auth/auth-session-atom.ts +0 -82
  234. package/src/components/blocks/auth/auth-shell.tsx +0 -265
  235. package/src/components/blocks/auth/auth-state.ts +0 -40
  236. package/src/components/blocks/auth/code-auth-block.tsx +0 -176
  237. package/src/components/blocks/auth/forgot-password-block.tsx +0 -112
  238. package/src/components/blocks/auth/linked-accounts-block.tsx +0 -203
  239. package/src/components/blocks/auth/login-block.tsx +0 -217
  240. package/src/components/blocks/auth/onboarding/profile-step.tsx +0 -216
  241. package/src/components/blocks/auth/onboarding-block.tsx +0 -183
  242. package/src/components/blocks/auth/passkey-manager-block.tsx +0 -316
  243. package/src/components/blocks/auth/passkey-sign-in-block.tsx +0 -67
  244. package/src/components/blocks/auth/signup-block.tsx +0 -256
  245. package/src/components/blocks/auth/type.ts +0 -436
  246. package/src/components/blocks/auth/update-password-block.tsx +0 -139
  247. package/src/components/blocks/auth/use-auth-state.ts +0 -127
  248. package/src/components/blocks/chat/__tests__/ai-panel.test.tsx +0 -65
  249. package/src/components/blocks/chat/banners.tsx +0 -61
  250. package/src/components/blocks/chat/base.tsx +0 -84
  251. package/src/components/blocks/chat/header.tsx +0 -60
  252. package/src/components/blocks/chat/index.ts +0 -37
  253. package/src/components/blocks/chat/recommendation-stack.tsx +0 -41
  254. package/src/components/blocks/chat/shared.tsx +0 -27
  255. package/src/components/blocks/chat/suggested-prompts.tsx +0 -45
  256. package/src/components/blocks/chat/type.ts +0 -96
  257. package/src/components/blocks/chat/version-history-record.tsx +0 -37
  258. package/src/components/blocks/layout.ts +0 -35
  259. package/src/components/blocks/profile/__tests__/profile-card-block.test.tsx +0 -362
  260. package/src/components/blocks/profile/index.ts +0 -28
  261. package/src/components/blocks/profile/profile-card-atom.ts +0 -247
  262. package/src/components/blocks/profile/profile-card-block.tsx +0 -369
  263. package/src/components/blocks/profile/type.ts +0 -93
  264. package/src/components/blocks/profile/use-profile-card-state.ts +0 -67
  265. package/src/components/blocks/profile/use-profile-card.ts +0 -132
  266. package/src/components/blocks/scaffold/__tests__/scaffold-atom.test.tsx +0 -236
  267. package/src/components/blocks/scaffold/__tests__/scaffold.test.tsx +0 -524
  268. package/src/components/blocks/scaffold/constants.ts +0 -39
  269. package/src/components/blocks/scaffold/index.ts +0 -60
  270. package/src/components/blocks/scaffold/panel-close-button.tsx +0 -36
  271. package/src/components/blocks/scaffold/panel-menu-button.tsx +0 -221
  272. package/src/components/blocks/scaffold/scaffold-actions.tsx +0 -92
  273. package/src/components/blocks/scaffold/scaffold-atom.ts +0 -427
  274. package/src/components/blocks/scaffold/scaffold-canvas.tsx +0 -162
  275. package/src/components/blocks/scaffold/scaffold-context.ts +0 -20
  276. package/src/components/blocks/scaffold/scaffold-inspector.tsx +0 -137
  277. package/src/components/blocks/scaffold/scaffold-main.tsx +0 -28
  278. package/src/components/blocks/scaffold/scaffold-panel.tsx +0 -186
  279. package/src/components/blocks/scaffold/scaffold-root.tsx +0 -120
  280. package/src/components/blocks/scaffold/scaffold-sidebar.tsx +0 -31
  281. package/src/components/blocks/scaffold/scaffold-sub-panel.tsx +0 -122
  282. package/src/components/blocks/scaffold/scaffold-tab.tsx +0 -108
  283. package/src/components/blocks/scaffold/type.ts +0 -264
  284. package/src/components/blocks/scaffold/use-scaffold-state.ts +0 -85
  285. package/src/components/blocks/scaffold/use-scaffold.ts +0 -59
  286. package/src/components/blocks/scaffold/utils.ts +0 -112
  287. package/src/components/blocks/shell/__tests__/shell-fit-atom.test.tsx +0 -362
  288. package/src/components/blocks/shell/__tests__/shell-layout.test.tsx +0 -596
  289. package/src/components/blocks/shell/__tests__/shell-metrics.test.ts +0 -154
  290. package/src/components/blocks/shell/animated-panel-inset.tsx +0 -27
  291. package/src/components/blocks/shell/animated-panel-provider.tsx +0 -269
  292. package/src/components/blocks/shell/animated-panel-trigger.tsx +0 -51
  293. package/src/components/blocks/shell/animated-panel.tsx +0 -180
  294. package/src/components/blocks/shell/index.ts +0 -30
  295. package/src/components/blocks/shell/shell-fit-atom.ts +0 -246
  296. package/src/components/blocks/shell/shell-layout.tsx +0 -139
  297. package/src/components/blocks/shell/shell-metrics.ts +0 -133
  298. package/src/components/blocks/shell/shell-panel-atom.ts +0 -74
  299. package/src/components/blocks/shell/type.ts +0 -361
  300. package/src/components/blocks/shell/use-shell-fit-state.ts +0 -49
  301. package/src/components/blocks/shell/use-shell-fit.ts +0 -153
  302. package/src/components/blocks/shell/use-shell-panels.ts +0 -126
  303. package/src/components/blocks/shell/utils.ts +0 -187
  304. package/src/components/blocks/sidebar/__tests__/ai-sidebar-atom.test.tsx +0 -325
  305. package/src/components/blocks/sidebar/__tests__/ai-sidebar.test.tsx +0 -93
  306. package/src/components/blocks/sidebar/__tests__/use-ai-sidebar.test.tsx +0 -310
  307. package/src/components/blocks/sidebar/ai-sidebar-atom.ts +0 -698
  308. package/src/components/blocks/sidebar/ai-sidebar.tsx +0 -150
  309. package/src/components/blocks/sidebar/index.ts +0 -67
  310. package/src/components/blocks/sidebar/marquee-label.tsx +0 -59
  311. package/src/components/blocks/sidebar/sidebar-context.ts +0 -15
  312. package/src/components/blocks/sidebar/sidebar-icon.tsx +0 -14
  313. package/src/components/blocks/sidebar/sidebar-row.tsx +0 -378
  314. package/src/components/blocks/sidebar/type.ts +0 -294
  315. package/src/components/blocks/sidebar/use-ai-sidebar-state.ts +0 -123
  316. package/src/components/blocks/sidebar/use-ai-sidebar.ts +0 -619
  317. package/src/components/blocks/sidebar/utils.ts +0 -170
  318. package/src/components/blocks/types.ts +0 -6
  319. package/src/components/composed/.gitkeep +0 -0
  320. package/src/components/composed/__tests__/logo.test.tsx +0 -60
  321. package/src/components/composed/action-bar/__tests__/action-bar.test.tsx +0 -125
  322. package/src/components/composed/action-bar/action.tsx +0 -77
  323. package/src/components/composed/action-bar/emojis.tsx +0 -97
  324. package/src/components/composed/action-bar/index.ts +0 -24
  325. package/src/components/composed/action-bar/toolbar.tsx +0 -66
  326. package/src/components/composed/action-bar/types.ts +0 -58
  327. package/src/components/composed/action-bar/utils.ts +0 -140
  328. package/src/components/composed/ai/__tests__/ai.test.tsx +0 -66
  329. package/src/components/composed/ai/avatar.tsx +0 -19
  330. package/src/components/composed/ai/index.ts +0 -36
  331. package/src/components/composed/ai/message.tsx +0 -49
  332. package/src/components/composed/ai/research-answer.tsx +0 -157
  333. package/src/components/composed/ai/shared.tsx +0 -94
  334. package/src/components/composed/ai/streaming-text.tsx +0 -94
  335. package/src/components/composed/ai/suggested-prompt.tsx +0 -183
  336. package/src/components/composed/ai/types.ts +0 -81
  337. package/src/components/composed/chat/__tests__/attachment.test.tsx +0 -218
  338. package/src/components/composed/chat/__tests__/beautiful-ui.test.tsx +0 -57
  339. package/src/components/composed/chat/__tests__/chart.test.tsx +0 -62
  340. package/src/components/composed/chat/__tests__/code-block.test.tsx +0 -12
  341. package/src/components/composed/chat/__tests__/composer-attachments.test.tsx +0 -101
  342. package/src/components/composed/chat/__tests__/composer.test.tsx +0 -248
  343. package/src/components/composed/chat/__tests__/flowchart.test.tsx +0 -145
  344. package/src/components/composed/chat/__tests__/glass-material.test.tsx +0 -54
  345. package/src/components/composed/chat/__tests__/markdown.test.tsx +0 -25
  346. package/src/components/composed/chat/__tests__/menu-command.test.tsx +0 -35
  347. package/src/components/composed/chat/__tests__/recommendation.test.tsx +0 -43
  348. package/src/components/composed/chat/actions.tsx +0 -81
  349. package/src/components/composed/chat/attachment-file.ts +0 -82
  350. package/src/components/composed/chat/attachment.tsx +0 -498
  351. package/src/components/composed/chat/chart.tsx +0 -401
  352. package/src/components/composed/chat/code-block.tsx +0 -123
  353. package/src/components/composed/chat/composer/add-button.tsx +0 -29
  354. package/src/components/composed/chat/composer/base.tsx +0 -573
  355. package/src/components/composed/chat/composer/command-menu.tsx +0 -47
  356. package/src/components/composed/chat/composer/hooks.ts +0 -29
  357. package/src/components/composed/chat/composer/index.ts +0 -19
  358. package/src/components/composed/chat/composer/send-button.tsx +0 -36
  359. package/src/components/composed/chat/composer/suggestions.tsx +0 -115
  360. package/src/components/composed/chat/composer/use-dictation.ts +0 -123
  361. package/src/components/composed/chat/composer/utils.ts +0 -74
  362. package/src/components/composed/chat/context-cards.tsx +0 -63
  363. package/src/components/composed/chat/filter-table.tsx +0 -119
  364. package/src/components/composed/chat/flowchart/chart-node.tsx +0 -162
  365. package/src/components/composed/chat/flowchart/connector.tsx +0 -32
  366. package/src/components/composed/chat/flowchart/constant.ts +0 -26
  367. package/src/components/composed/chat/flowchart/default.tsx +0 -230
  368. package/src/components/composed/chat/flowchart/edge-toolbar.tsx +0 -73
  369. package/src/components/composed/chat/flowchart/hooks.tsx +0 -347
  370. package/src/components/composed/chat/flowchart/index.ts +0 -14
  371. package/src/components/composed/chat/flowchart/step-body.tsx +0 -82
  372. package/src/components/composed/chat/flowchart/types.ts +0 -89
  373. package/src/components/composed/chat/flowchart/utils.ts +0 -78
  374. package/src/components/composed/chat/hint.tsx +0 -59
  375. package/src/components/composed/chat/index.ts +0 -98
  376. package/src/components/composed/chat/insight-cards.tsx +0 -199
  377. package/src/components/composed/chat/markdown-atom.ts +0 -15
  378. package/src/components/composed/chat/markdown.tsx +0 -213
  379. package/src/components/composed/chat/recommendation/checkbox.tsx +0 -122
  380. package/src/components/composed/chat/recommendation/constant.ts +0 -54
  381. package/src/components/composed/chat/recommendation/default.tsx +0 -25
  382. package/src/components/composed/chat/recommendation/group.tsx +0 -36
  383. package/src/components/composed/chat/recommendation/index.ts +0 -17
  384. package/src/components/composed/chat/recommendation/item.tsx +0 -215
  385. package/src/components/composed/chat/recommendation/types.ts +0 -76
  386. package/src/components/composed/chat/records-table.tsx +0 -130
  387. package/src/components/composed/chat/type.ts +0 -157
  388. package/src/components/composed/logo.tsx +0 -171
  389. package/src/components/composed/password-input.tsx +0 -179
  390. package/src/components/composed/reader/applied-mark.tsx +0 -32
  391. package/src/components/composed/reader/apply-toast.tsx +0 -49
  392. package/src/components/composed/reader/index.ts +0 -10
  393. package/src/components/composed/reader/selection-highlight.tsx +0 -26
  394. package/src/components/composed/reader/selection-popover.tsx +0 -149
  395. package/src/components/composed/reader/type.ts +0 -48
  396. package/src/components/composed/social-providers.tsx +0 -154
  397. package/src/components/composed/tree/CLAUDE.md +0 -145
  398. package/src/components/composed/tree/__tests__/tree-atom.test.tsx +0 -217
  399. package/src/components/composed/tree/__tests__/tree.test.tsx +0 -522
  400. package/src/components/composed/tree/__tests__/use-tree.test.tsx +0 -333
  401. package/src/components/composed/tree/constants.ts +0 -55
  402. package/src/components/composed/tree/index.ts +0 -51
  403. package/src/components/composed/tree/tree-atom.ts +0 -590
  404. package/src/components/composed/tree/tree-context.ts +0 -13
  405. package/src/components/composed/tree/tree-node.tsx +0 -496
  406. package/src/components/composed/tree/tree.tsx +0 -233
  407. package/src/components/composed/tree/type.ts +0 -322
  408. package/src/components/composed/tree/use-tree-dnd.ts +0 -179
  409. package/src/components/composed/tree/use-tree-state.ts +0 -105
  410. package/src/components/composed/tree/use-tree.ts +0 -311
  411. package/src/components/composed/tree/utils.ts +0 -172
  412. package/src/components/composed/types.ts +0 -9
  413. package/src/components/composed/user/__tests__/message.test.tsx +0 -79
  414. package/src/components/composed/user/index.ts +0 -14
  415. package/src/components/composed/user/info.tsx +0 -56
  416. package/src/components/composed/user/message.tsx +0 -36
  417. package/src/components/composed/user/pill.tsx +0 -20
  418. package/src/components/composed/user/types.ts +0 -47
  419. package/src/components/composed/user/utils.ts +0 -0
  420. package/src/components/composed/verse/__tests__/verse.test.tsx +0 -57
  421. package/src/components/composed/verse/index.ts +0 -2
  422. package/src/components/composed/verse/types.ts +0 -24
  423. package/src/components/composed/verse/verse.tsx +0 -100
  424. package/src/components/docs/atoms-gallery.tsx +0 -286
  425. package/src/components/docs/block-demo-stage.tsx +0 -38
  426. package/src/components/docs/blocks-gallery.tsx +0 -224
  427. package/src/components/docs/browser.tsx +0 -87
  428. package/src/components/docs/code-block.tsx +0 -10
  429. package/src/components/docs/components-gallery.tsx +0 -182
  430. package/src/components/docs/demo-controls.tsx +0 -142
  431. package/src/components/docs/hero.tsx +0 -197
  432. package/src/components/docs/mermaid.tsx +0 -55
  433. package/src/components/icons/README.md +0 -91
  434. package/src/components/icons/__tests__/icons.test.tsx +0 -58
  435. package/src/components/icons/file-badge-cfm.tsx +0 -615
  436. package/src/components/icons/file-badge-corpus.tsx +0 -604
  437. package/src/components/icons/file-badge-pdf.tsx +0 -570
  438. package/src/components/icons/file-badge-tei.tsx +0 -524
  439. package/src/components/icons/file-badge-tf.tsx +0 -620
  440. package/src/components/icons/file-badge-txt.tsx +0 -607
  441. package/src/components/icons/file-badge-xml.tsx +0 -576
  442. package/src/components/icons/file-wordmark-cfm.tsx +0 -424
  443. package/src/components/icons/file-wordmark-corpus.tsx +0 -454
  444. package/src/components/icons/file-wordmark-pdf.tsx +0 -470
  445. package/src/components/icons/file-wordmark-tei.tsx +0 -424
  446. package/src/components/icons/file-wordmark-tf.tsx +0 -406
  447. package/src/components/icons/file-wordmark-txt.tsx +0 -421
  448. package/src/components/icons/file-wordmark-xml.tsx +0 -424
  449. package/src/components/icons/index.ts +0 -16
  450. package/src/components/icons/types.ts +0 -8
  451. package/src/components/motion/index.ts +0 -0
  452. package/src/components/motion/overflow-actions.tsx +0 -376
  453. package/src/components/motion/popover-morph.tsx +0 -292
  454. package/src/components/motion/popover-position.ts +0 -86
  455. package/src/components/motion/shared-layout-bg.tsx +0 -151
  456. package/src/components/stories/attachment.story.tsx +0 -40
  457. package/src/components/stories/auth-flow-block.story.tsx +0 -17
  458. package/src/components/stories/avatar.story.tsx +0 -33
  459. package/src/components/stories/base.story.tsx +0 -70
  460. package/src/components/stories/bubble.story.tsx +0 -61
  461. package/src/components/stories/button.story.tsx +0 -32
  462. package/src/components/stories/card.story.tsx +0 -36
  463. package/src/components/stories/chart.story.tsx +0 -54
  464. package/src/components/stories/checkbox.story.tsx +0 -30
  465. package/src/components/stories/code-auth-block.story.tsx +0 -20
  466. package/src/components/stories/code-block.story.tsx +0 -35
  467. package/src/components/stories/composed-password-input.story.tsx +0 -41
  468. package/src/components/stories/context-cards.story.tsx +0 -30
  469. package/src/components/stories/emoji-action-bar.story.tsx +0 -20
  470. package/src/components/stories/field.story.tsx +0 -32
  471. package/src/components/stories/file-icons.story.tsx +0 -20
  472. package/src/components/stories/filter-table.story.tsx +0 -63
  473. package/src/components/stories/flowchart.story.tsx +0 -25
  474. package/src/components/stories/forgot-password-block.story.tsx +0 -14
  475. package/src/components/stories/frame.story.tsx +0 -32
  476. package/src/components/stories/index.ts +0 -57
  477. package/src/components/stories/input-group.story.tsx +0 -27
  478. package/src/components/stories/input.story.tsx +0 -42
  479. package/src/components/stories/insight-cards.story.tsx +0 -67
  480. package/src/components/stories/label.story.tsx +0 -32
  481. package/src/components/stories/linked-accounts-block.story.tsx +0 -23
  482. package/src/components/stories/login-block.story.tsx +0 -18
  483. package/src/components/stories/logo.story.tsx +0 -21
  484. package/src/components/stories/markdown.story.tsx +0 -31
  485. package/src/components/stories/menu-command.story.tsx +0 -43
  486. package/src/components/stories/onboarding-block.story.tsx +0 -14
  487. package/src/components/stories/otp-field.story.tsx +0 -35
  488. package/src/components/stories/passkey-manager-block.story.tsx +0 -18
  489. package/src/components/stories/passkey-sign-in-block.story.tsx +0 -15
  490. package/src/components/stories/password-input.story.tsx +0 -35
  491. package/src/components/stories/profile-card-block.story.tsx +0 -29
  492. package/src/components/stories/recommendation-card.story.tsx +0 -37
  493. package/src/components/stories/records-table.story.tsx +0 -52
  494. package/src/components/stories/reference.story.tsx +0 -33
  495. package/src/components/stories/research-answer.story.tsx +0 -32
  496. package/src/components/stories/scaffold-root.story.tsx +0 -47
  497. package/src/components/stories/separator.story.tsx +0 -37
  498. package/src/components/stories/shell-layout.story.tsx +0 -19
  499. package/src/components/stories/signup-block.story.tsx +0 -18
  500. package/src/components/stories/social-providers.story.tsx +0 -26
  501. package/src/components/stories/streaming-text.story.tsx +0 -25
  502. package/src/components/stories/text.story.tsx +0 -31
  503. package/src/components/stories/textarea.story.tsx +0 -34
  504. package/src/components/stories/tree.story.tsx +0 -31
  505. package/src/components/stories/update-password-block.story.tsx +0 -14
  506. package/src/components/stories/user.story.tsx +0 -32
  507. package/src/components/stories/verse.story.tsx +0 -42
  508. package/src/components/theme-provider.tsx +0 -230
  509. package/src/components/types.ts +0 -106
  510. package/src/components/ui/accordion.tsx +0 -68
  511. package/src/components/ui/alert-dialog.tsx +0 -167
  512. package/src/components/ui/alert.tsx +0 -84
  513. package/src/components/ui/autocomplete.tsx +0 -303
  514. package/src/components/ui/avatar.tsx +0 -109
  515. package/src/components/ui/badge.tsx +0 -101
  516. package/src/components/ui/button-group.tsx +0 -88
  517. package/src/components/ui/button.tsx +0 -192
  518. package/src/components/ui/card.tsx +0 -253
  519. package/src/components/ui/chat/__tests__/segmented-toggle.test.tsx +0 -27
  520. package/src/components/ui/chat/avatar-handle.tsx +0 -30
  521. package/src/components/ui/chat/badges.tsx +0 -85
  522. package/src/components/ui/chat/buttons.tsx +0 -94
  523. package/src/components/ui/chat/chips.tsx +0 -106
  524. package/src/components/ui/chat/dot.tsx +0 -81
  525. package/src/components/ui/chat/icon-button.tsx +0 -43
  526. package/src/components/ui/chat/icon-tile.tsx +0 -33
  527. package/src/components/ui/chat/index.ts +0 -12
  528. package/src/components/ui/chat/inline-source.tsx +0 -94
  529. package/src/components/ui/chat/segmented-toggle.tsx +0 -99
  530. package/src/components/ui/chat/tag.tsx +0 -61
  531. package/src/components/ui/chat/thumbnail.tsx +0 -31
  532. package/src/components/ui/chat/waveform.tsx +0 -30
  533. package/src/components/ui/checkbox.tsx +0 -83
  534. package/src/components/ui/collapsible.tsx +0 -42
  535. package/src/components/ui/command.tsx +0 -263
  536. package/src/components/ui/context-menu.tsx +0 -342
  537. package/src/components/ui/emoji-picker.tsx +0 -161
  538. package/src/components/ui/field.tsx +0 -89
  539. package/src/components/ui/frame.tsx +0 -87
  540. package/src/components/ui/glasscn/glass-button-group.tsx +0 -34
  541. package/src/components/ui/glasscn/glass-button.tsx +0 -25
  542. package/src/components/ui/glasscn/glass-container.tsx +0 -94
  543. package/src/components/ui/glasscn/glass-separator.tsx +0 -39
  544. package/src/components/ui/glasscn/liquid-glass.tsx +0 -59
  545. package/src/components/ui/group.tsx +0 -92
  546. package/src/components/ui/input-group.tsx +0 -105
  547. package/src/components/ui/input.tsx +0 -70
  548. package/src/components/ui/kbd.tsx +0 -32
  549. package/src/components/ui/label.tsx +0 -36
  550. package/src/components/ui/menu-command.tsx +0 -156
  551. package/src/components/ui/menu.tsx +0 -352
  552. package/src/components/ui/otp-field.tsx +0 -88
  553. package/src/components/ui/popover-glass.tsx +0 -158
  554. package/src/components/ui/popover.tsx +0 -120
  555. package/src/components/ui/preview-card.tsx +0 -61
  556. package/src/components/ui/scroll-area.tsx +0 -80
  557. package/src/components/ui/select.tsx +0 -257
  558. package/src/components/ui/separator.tsx +0 -23
  559. package/src/components/ui/sheet.tsx +0 -135
  560. package/src/components/ui/skeleton.tsx +0 -18
  561. package/src/components/ui/spinner.tsx +0 -17
  562. package/src/components/ui/switch.tsx +0 -30
  563. package/src/components/ui/tabs.tsx +0 -120
  564. package/src/components/ui/textarea.tsx +0 -58
  565. package/src/components/ui/toast.tsx +0 -325
  566. package/src/components/ui/toolbar.tsx +0 -92
  567. package/src/components/ui/tooltip.tsx +0 -67
  568. package/src/index.css +0 -10
  569. package/src/index.ts +0 -102
  570. package/src/lib/attachment-content.ts +0 -28
  571. package/src/lib/auth-accent.ts +0 -49
  572. package/src/lib/ease.ts +0 -90
  573. package/src/lib/glass-variants.ts +0 -22
  574. package/src/lib/hooks/use-hover-capable.ts +0 -23
  575. package/src/lib/hooks/use-mobile.ts +0 -21
  576. package/src/lib/keyed-atom.ts +0 -60
  577. package/src/lib/segmented-control.ts +0 -42
  578. package/src/lib/sound.ts +0 -39
  579. package/src/lib/specular.ts +0 -10
  580. package/src/lib/state/__tests__/sound.test.tsx +0 -53
  581. package/src/lib/state/exegia-provider.tsx +0 -83
  582. package/src/lib/state/index.ts +0 -4
  583. package/src/lib/state/store.ts +0 -19
  584. package/src/lib/use-motion-panel.ts +0 -78
  585. package/src/lib/utils.test.ts +0 -22
  586. package/src/lib/utils.ts +0 -100
  587. package/src/specular.js +0 -4
  588. /package/{src/components/composed/chat/composer → dist-lib}/BEAUTIFUL-UI-LICENSE.txt +0 -0
@@ -1,573 +0,0 @@
1
- "use client"
2
-
3
- import { useAtom } from "jotai"
4
- import { useEffect, useId, useLayoutEffect, useRef, useState } from "react"
5
- import type * as React from "react"
6
- import { AtSign, ChevronDown, Mic, Paperclip, Plus, Slash } from "lucide-react"
7
- import { cn } from "@/lib/utils"
8
- import {
9
- Select,
10
- SelectItem,
11
- SelectPopup,
12
- SelectTrigger,
13
- SelectValue,
14
- } from "@/components/ui/select"
15
- import { Popover, PopoverPopup, PopoverTrigger } from "@/components/ui/popover"
16
- import type { IComposerProps, IComposerOption } from "../type"
17
- import { composerAttachmentsAtom, removeComposerInstance } from "./utils"
18
- import { SendButton } from "./send-button"
19
- import { useDictation } from "./use-dictation"
20
- import { Attachment } from "../attachment"
21
- import { attachmentFileKind, attachmentMimeType } from "../attachment-file"
22
-
23
- const AUTO_MODEL = [{ id: "auto", label: "Auto" }]
24
- const control =
25
- "flex size-7 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-foreground/5 hover:text-foreground focus-visible:outline-2 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-40"
26
-
27
- /** Beautiful UI Prompt Bar layout, adapted for Corpora's composer contract.
28
- * https://www.beautifului.dev/#prompt-bar — see BEAUTIFUL-UI-LICENSE.txt. */
29
- export function Composer({
30
- value,
31
- onValueChange,
32
- composerId,
33
- attachments: seedAttachments,
34
- isStreaming = false,
35
- disabled = false,
36
- safetyNote,
37
- expanded = false,
38
- placeholder = "Write a message…",
39
- SubmitButton = SendButton,
40
- ComposerMenu,
41
- Suggestions,
42
- defaultValue = "",
43
- onSubmit,
44
- onStop,
45
- className,
46
- shape = "rounded",
47
- sources = [],
48
- commands = [],
49
- models = AUTO_MODEL,
50
- model,
51
- defaultModel,
52
- onModelChange,
53
- onSourceSelect,
54
- onCommand,
55
- onFilesChange,
56
- accept,
57
- dictation = true,
58
- }: IComposerProps): React.ReactElement {
59
- const [internalValue, setInternalValue] = useState(defaultValue)
60
- const [internalModel, setInternalModel] = useState(
61
- defaultModel ?? models[0]?.id ?? "auto"
62
- )
63
- const [promptsOpen, setPromptsOpen] = useState(true)
64
- const [plusOpen, setPlusOpen] = useState(false)
65
- const [dismissed, setDismissed] = useState(false)
66
- const [active, setActive] = useState(0)
67
- const [caret, setCaret] = useState(defaultValue.length)
68
- const [wide, setWide] = useState(expanded)
69
- const generatedId = useId()
70
- const id = composerId ?? generatedId
71
- const listId = `${generatedId}-options`
72
- const [attachments, setAttachments] = useAtom(composerAttachmentsAtom(id))
73
- const seeded = useRef(false)
74
- const input = useRef<HTMLTextAreaElement>(null)
75
- const fileInput = useRef<HTMLInputElement>(null)
76
- const surface = useRef<HTMLDivElement>(null)
77
- const controls = useRef<HTMLDivElement>(null)
78
- const measure = useRef<HTMLSpanElement>(null)
79
- const modelControl = useRef<HTMLDivElement>(null)
80
- const pendingCaret = useRef<number | null>(null)
81
-
82
- useEffect(() => {
83
- if (seeded.current) return
84
- seeded.current = true
85
- if (seedAttachments?.length) setAttachments(seedAttachments)
86
- }, [seedAttachments, setAttachments])
87
- useEffect(() => {
88
- if (composerId) return
89
- return () => removeComposerInstance(id)
90
- }, [composerId, id])
91
- const draft = value ?? internalValue
92
- const isDisabled = disabled || isStreaming
93
- const selectedModel = model ?? internalModel
94
- const changeValue = (next: string) => {
95
- if (value === undefined) setInternalValue(next)
96
- onValueChange?.(next)
97
- }
98
- const speech = useDictation((text) => {
99
- const next = draft ? `${draft.trimEnd()} ${text}` : text
100
- changeValue(next)
101
- setCaret(next.length)
102
- }, isDisabled || !dictation)
103
-
104
- const match = /(?:^|\s)([@/])([^\s@/]*)$/.exec(draft.slice(0, caret))
105
- const token = match
106
- ? {
107
- kind: match[1],
108
- query: match[2].toLowerCase(),
109
- start: caret - match[2].length - 1,
110
- }
111
- : null
112
- const kind = !isDisabled && !dismissed ? (plusOpen ? "@" : token?.kind) : null
113
- const options = (kind === "@" ? sources : commands).filter((item) =>
114
- item.label.toLowerCase().includes(plusOpen ? "" : (token?.query ?? ""))
115
- )
116
- const hasUpload =
117
- kind === "@" &&
118
- (plusOpen || !token?.query || "add photos and files".includes(token.query))
119
- const count = options.length + (hasUpload ? 1 : 0)
120
- const menuOpen = Boolean(kind)
121
- const closeMenu = () => {
122
- setPlusOpen(false)
123
- setDismissed(true)
124
- }
125
- const focusAt = (position: number) => {
126
- pendingCaret.current = position
127
- input.current?.focus()
128
- }
129
- const pick = (item: IComposerOption) => {
130
- if (isDisabled) return
131
- const replacement =
132
- item.insertText ?? `${kind === "@" ? "@" + item.label : "/" + item.id} `
133
- const start = !plusOpen && token ? token.start : caret
134
- const next = draft.slice(0, start) + replacement + draft.slice(caret)
135
- changeValue(next)
136
- setCaret(start + replacement.length)
137
- closeMenu()
138
- item.onSelect?.()
139
- if (kind === "@") onSourceSelect?.(item)
140
- else onCommand?.(item)
141
- focusAt(start + replacement.length)
142
- }
143
- const upload = () => {
144
- closeMenu()
145
- fileInput.current?.click()
146
- }
147
- const chooseActive = () => {
148
- const selected = Math.min(active, count - 1)
149
- if (hasUpload && selected === 0) upload()
150
- else {
151
- const item = options[selected - (hasUpload ? 1 : 0)]
152
- if (item) pick(item)
153
- }
154
- }
155
- const send = () => {
156
- if (isDisabled || (!draft.trim() && !attachments.length)) return
157
- speech.cancel()
158
- onSubmit?.(draft.trim(), "answer", attachments)
159
- if (value === undefined) setInternalValue("")
160
- setAttachments([])
161
- closeMenu()
162
- }
163
- useLayoutEffect(() => {
164
- if (pendingCaret.current === null || !input.current) return
165
- input.current.setSelectionRange(pendingCaret.current, pendingCaret.current)
166
- pendingCaret.current = null
167
- }, [draft])
168
- useLayoutEffect(() => {
169
- const field = input.current
170
- const row = controls.current
171
- if (!field || !row) return
172
- const resize = () => {
173
- const fixed =
174
- 28 * (dictation ? 3 : 2) + (modelControl.current?.offsetWidth ?? 0) + 16
175
- const available = row.clientWidth - fixed
176
- setWide(
177
- expanded ||
178
- draft.includes("\n") ||
179
- (row.clientWidth > 0 &&
180
- (available < 110 ||
181
- (measure.current?.offsetWidth ?? 0) + 8 > available))
182
- )
183
- field.style.height = "0px"
184
- const height = Math.max(wide ? 44 : 28, field.scrollHeight)
185
- field.style.height = `${Math.min(height, 128)}px`
186
- field.style.overflowY = height > 128 ? "auto" : "hidden"
187
- }
188
- resize()
189
- const observer = new ResizeObserver(resize)
190
- observer.observe(row)
191
- return () => observer.disconnect()
192
- }, [draft, expanded, wide, selectedModel, dictation])
193
-
194
- return (
195
- <form
196
- className="min-w-0 max-w-3xl w-full"
197
- data-slot="composer"
198
- data-expanded={wide ? "" : undefined}
199
- onSubmit={(event) => {
200
- event.preventDefault()
201
- send()
202
- }}
203
- >
204
- {Suggestions && (
205
- <Suggestions onOpenChange={setPromptsOpen} open={promptsOpen} />
206
- )}
207
- <Popover
208
- open={menuOpen}
209
- onOpenChange={(open) => {
210
- if (!open) closeMenu()
211
- }}
212
- >
213
- <div
214
- ref={surface}
215
- className={cn(
216
- "min-w-0 gap-1.5 p-1.5 shadow-sm relative flex flex-col border border-foreground/10 bg-(--chat-field) transition-[border-color,border-radius] duration-150 focus-within:border-foreground/25",
217
- shape === "pill"
218
- ? wide || attachments.length
219
- ? "rounded-3xl"
220
- : "rounded-full"
221
- : "rounded-[14px]",
222
- className
223
- )}
224
- >
225
- <span
226
- ref={measure}
227
- aria-hidden
228
- className="pointer-events-none invisible absolute text-[13px] leading-[18px] whitespace-pre"
229
- >
230
- {draft}
231
- </span>
232
- {attachments.length > 0 && (
233
- <div
234
- className="gap-1.5 px-0.5 pt-0.5 flex flex-wrap"
235
- data-slot="composer-tray"
236
- >
237
- {attachments.map((attachment) => (
238
- <Attachment
239
- key={attachment.id}
240
- {...attachment}
241
- onRemove={
242
- isDisabled
243
- ? undefined
244
- : () =>
245
- setAttachments((items) =>
246
- items.filter((item) => item.id !== attachment.id)
247
- )
248
- }
249
- />
250
- ))}
251
- </div>
252
- )}
253
- <div
254
- ref={controls}
255
- className={cn(
256
- "min-w-0 gap-x-1 gap-y-1.5 grid items-end",
257
- dictation
258
- ? wide
259
- ? "grid-cols-[28px_auto_minmax(0,1fr)_28px_28px]"
260
- : "grid-cols-[28px_minmax(0,1fr)_auto_28px_28px]"
261
- : wide
262
- ? "grid-cols-[28px_auto_minmax(0,1fr)_28px]"
263
- : "grid-cols-[28px_minmax(0,1fr)_auto_28px]"
264
- )}
265
- >
266
- <div
267
- className={
268
- wide ? "col-start-1 row-start-2" : "col-start-1 row-start-1"
269
- }
270
- >
271
- {ComposerMenu ? (
272
- <ComposerMenu disabled={isDisabled} />
273
- ) : (
274
- <PopoverTrigger
275
- render={<button type="button" />}
276
- aria-label="Add attachments and sources"
277
- data-cuelume-press=""
278
- data-cuelume-release=""
279
- disabled={isDisabled}
280
- className={control}
281
- onClick={() => {
282
- setPlusOpen(!plusOpen)
283
- setDismissed(false)
284
- setActive(0)
285
- input.current?.focus()
286
- }}
287
- >
288
- <Plus aria-hidden className="size-4" />
289
- </PopoverTrigger>
290
- )}
291
- </div>
292
- <textarea
293
- ref={input}
294
- rows={1}
295
- aria-label="Message"
296
- aria-keyshortcuts="Meta+Enter Control+Enter"
297
- aria-controls={menuOpen ? listId : undefined}
298
- aria-activedescendant={
299
- menuOpen && count
300
- ? `${listId}-${Math.min(active, count - 1)}`
301
- : undefined
302
- }
303
- autoComplete="off"
304
- disabled={isDisabled}
305
- value={draft}
306
- placeholder={speech.listening ? "Listening…" : placeholder}
307
- className={cn(
308
- "min-h-7 min-w-0 px-1 w-full resize-none bg-transparent py-[5px] text-[13px] leading-[18px] [overflow-wrap:anywhere] text-foreground outline-none placeholder:text-muted-foreground/70 disabled:opacity-50",
309
- wide
310
- ? "col-span-full col-start-1 row-start-1"
311
- : "col-start-2 row-start-1"
312
- )}
313
- onFocus={() => setPromptsOpen(false)}
314
- onSelect={(event) => setCaret(event.currentTarget.selectionStart)}
315
- onChange={(event) => {
316
- changeValue(event.target.value)
317
- setCaret(event.target.selectionStart)
318
- setDismissed(false)
319
- setPlusOpen(false)
320
- setActive(0)
321
- }}
322
- onKeyDown={(event) => {
323
- if (event.nativeEvent.isComposing) return
324
- if (event.key === "Escape") {
325
- closeMenu()
326
- if (isStreaming) onStop?.()
327
- return
328
- }
329
- if (
330
- menuOpen &&
331
- count &&
332
- (event.key === "ArrowDown" || event.key === "ArrowUp")
333
- ) {
334
- event.preventDefault()
335
- setActive(
336
- (current) =>
337
- (current + (event.key === "ArrowDown" ? 1 : count - 1)) %
338
- count
339
- )
340
- return
341
- }
342
- if (
343
- menuOpen &&
344
- count &&
345
- (event.key === "Tab" ||
346
- (event.key === "Enter" &&
347
- !event.shiftKey &&
348
- !event.metaKey &&
349
- !event.ctrlKey))
350
- ) {
351
- event.preventDefault()
352
- chooseActive()
353
- return
354
- }
355
- if (event.key === "Enter" && !event.shiftKey) {
356
- event.preventDefault()
357
- send()
358
- }
359
- }}
360
- />
361
- <div
362
- ref={modelControl}
363
- className={
364
- wide
365
- ? "min-w-0 col-start-2 row-start-2"
366
- : "min-w-0 col-start-3 row-start-1"
367
- }
368
- >
369
- <Select
370
- value={selectedModel}
371
- onValueChange={(next) => {
372
- if (next) {
373
- if (model === undefined) setInternalModel(next)
374
- onModelChange?.(next)
375
- }
376
- }}
377
- disabled={isDisabled}
378
- >
379
- <SelectTrigger
380
- aria-label="Choose model"
381
- className="h-7 min-h-7 min-w-0 max-w-32 gap-1 px-1.5 text-xs font-medium sm:min-h-7 sm:text-xs w-auto rounded-lg border-0 bg-transparent! text-muted-foreground shadow-none! before:hidden hover:bg-foreground/5! [&_[data-slot=select-icon]]:hidden"
382
- >
383
- <SelectValue>
384
- {models.find((item) => item.id === selectedModel)?.label ??
385
- "Auto"}
386
- </SelectValue>
387
- <ChevronDown aria-hidden className="size-3!" />
388
- </SelectTrigger>
389
- <SelectPopup
390
- side="top"
391
- alignItemWithTrigger={false}
392
- className="min-w-44"
393
- >
394
- {models.map((item) => (
395
- <SelectItem key={item.id} value={item.id}>
396
- {item.label}
397
- {item.description && (
398
- <span className="text-xs ml-auto text-muted-foreground">
399
- {" "}
400
- {item.description}
401
- </span>
402
- )}
403
- </SelectItem>
404
- ))}
405
- </SelectPopup>
406
- </Select>
407
- </div>
408
- {dictation && (
409
- <button
410
- type="button"
411
- aria-label={
412
- speech.listening ? "Stop dictation" : "Start dictation"
413
- }
414
- aria-pressed={speech.listening}
415
- data-cuelume-press=""
416
- data-cuelume-release=""
417
- title={
418
- speech.supported
419
- ? "Dictate a message"
420
- : "Dictation is not supported in this browser"
421
- }
422
- disabled={isDisabled || !speech.supported}
423
- onClick={speech.toggle}
424
- className={cn(
425
- control,
426
- wide ? "col-start-4 row-start-2" : "col-start-4 row-start-1",
427
- speech.listening && "bg-primary/10 text-primary"
428
- )}
429
- >
430
- <Mic
431
- aria-hidden
432
- className={cn(
433
- "size-4",
434
- speech.listening &&
435
- "animate-pulse motion-reduce:animate-none"
436
- )}
437
- />
438
- </button>
439
- )}
440
- <div
441
- className={cn(
442
- dictation ? "col-start-5" : "col-start-4",
443
- wide ? "row-start-2" : "row-start-1"
444
- )}
445
- >
446
- <SubmitButton
447
- isExpanded
448
- isStreaming={isStreaming}
449
- disabled={
450
- !isStreaming &&
451
- (disabled || (!draft.trim() && !attachments.length))
452
- }
453
- onStop={onStop}
454
- />
455
- </div>
456
- </div>
457
- </div>
458
- <PopoverPopup
459
- anchor={surface}
460
- side="top"
461
- align="start"
462
- sideOffset={8}
463
- initialFocus={false}
464
- finalFocus={false}
465
- className="min-w-56 [&_[data-slot=popover-viewport]]:p-1 w-(--anchor-width) rounded-[10px]"
466
- >
467
- <div
468
- id={listId}
469
- role="listbox"
470
- aria-label={kind === "@" ? "Sources and attachments" : "Commands"}
471
- >
472
- {hasUpload && (
473
- <button
474
- id={`${listId}-0`}
475
- type="button"
476
- role="option"
477
- aria-selected={active === 0}
478
- onMouseDown={(event) => event.preventDefault()}
479
- onMouseEnter={() => setActive(0)}
480
- onClick={upload}
481
- className={cn(
482
- "min-h-9 gap-2 px-2 flex w-full items-center rounded-md text-left text-[13px]",
483
- active === 0 && "bg-foreground/5"
484
- )}
485
- >
486
- <Paperclip aria-hidden className="size-4" />
487
- <span>Add photos &amp; files</span>
488
- </button>
489
- )}
490
- {options.map((item, index) => {
491
- const row = index + (hasUpload ? 1 : 0)
492
- return (
493
- <button
494
- id={`${listId}-${row}`}
495
- key={item.id}
496
- type="button"
497
- role="option"
498
- aria-selected={active === row}
499
- onMouseDown={(event) => event.preventDefault()}
500
- onMouseEnter={() => setActive(row)}
501
- onClick={() => pick(item)}
502
- className={cn(
503
- "min-h-9 gap-2 px-2 flex w-full items-center rounded-md text-left text-[13px]",
504
- active === row && "bg-foreground/5"
505
- )}
506
- >
507
- <span className="[&_svg]:size-4 shrink-0">
508
- {item.icon ??
509
- (kind === "@" ? (
510
- <AtSign aria-hidden className="size-4" />
511
- ) : (
512
- <Slash aria-hidden className="size-4" />
513
- ))}
514
- </span>
515
- <span className="shrink-0">{item.label}</span>
516
- <span className="text-xs truncate text-muted-foreground">
517
- {item.description}
518
- </span>
519
- </button>
520
- )
521
- })}
522
- {!count && (
523
- <p className="px-2 py-3 text-xs text-muted-foreground">
524
- No {kind === "@" ? "sources" : "commands"} found.
525
- </p>
526
- )}
527
- </div>
528
- <p className="mt-1 px-2 py-1.5 border-t text-[11px] text-muted-foreground">
529
- {kind === "@"
530
- ? "Type @ to search sources & files"
531
- : "Type / to search commands"}
532
- </p>
533
- </PopoverPopup>
534
- </Popover>
535
- <input
536
- ref={fileInput}
537
- type="file"
538
- multiple
539
- accept={accept}
540
- aria-label="Attach files"
541
- className="hidden"
542
- disabled={isDisabled}
543
- onChange={(event) => {
544
- const files = Array.from(event.target.files ?? [])
545
- if (!files.length) return
546
- setAttachments((items) => [
547
- ...items,
548
- ...files.map((file) => ({
549
- id: crypto.randomUUID(),
550
- ...attachmentFileKind(file),
551
- title: file.name,
552
- meta: attachmentMimeType(file),
553
- file,
554
- })),
555
- ])
556
- onFilesChange?.(files)
557
- event.target.value = ""
558
- input.current?.focus()
559
- }}
560
- />
561
- {speech.error && (
562
- <p role="status" className="mt-1 text-xs text-muted-foreground">
563
- {speech.error}
564
- </p>
565
- )}
566
- {safetyNote && (
567
- <p className="mt-1 px-1.5 text-[10px] text-muted-foreground">
568
- {safetyNote}
569
- </p>
570
- )}
571
- </form>
572
- )
573
- }
@@ -1,47 +0,0 @@
1
- import { useState } from "react"
2
- import type { IComposerMenuProps } from "../type"
3
- import { Popover, PopoverPopup, PopoverTrigger } from "@/components/ui/popover"
4
- import { MenuCommandList } from "@/components/ui/menu-command"
5
- import { AddButton } from "./add-button"
6
-
7
- /** Compatibility slot for apps that provide their own attachment commands. */
8
- export function CommandMenu({
9
- items = [],
10
- onCommand,
11
- onAttach,
12
- disabled,
13
- }: IComposerMenuProps): React.ReactElement {
14
- const [open, setOpen] = useState(false)
15
- return (
16
- <Popover open={open && !disabled} onOpenChange={setOpen}>
17
- <PopoverTrigger
18
- disabled={disabled}
19
- render={(props, state) => <AddButton {...props} state={state} />}
20
- />
21
- <PopoverPopup
22
- side="top"
23
- align="start"
24
- className="w-80 [&_[data-slot=popover-viewport]]:p-0"
25
- >
26
- <MenuCommandList
27
- items={
28
- onAttach
29
- ? [
30
- {
31
- id: "attach",
32
- label: "Add photos & files",
33
- onSelect: onAttach,
34
- },
35
- ...items,
36
- ]
37
- : items
38
- }
39
- onSelect={(item) => {
40
- onCommand?.(item)
41
- setOpen(false)
42
- }}
43
- />
44
- </PopoverPopup>
45
- </Popover>
46
- )
47
- }
@@ -1,29 +0,0 @@
1
- import { useAtomValue, useSetAtom } from "jotai"
2
- import { useCallback } from "react"
3
-
4
- import type { TComposerAttachment } from "../type"
5
- import {
6
- addComposerAttachmentAtom,
7
- clearComposerAttachmentsAtom,
8
- composerAttachmentsAtom,
9
- removeComposerAttachmentAtom,
10
- } from "./utils"
11
-
12
- /** Read the tray of one composer. */
13
- export function useComposerAttachments(
14
- composerId: string
15
- ): TComposerAttachment[] {
16
- return useAtomValue(composerAttachmentsAtom(composerId))
17
- }
18
-
19
- /** Write-only tray actions; never re-renders the caller when the tray changes. */
20
- export function useComposerAttachmentActions(composerId: string) {
21
- const add = useSetAtom(addComposerAttachmentAtom(composerId))
22
- const remove = useSetAtom(removeComposerAttachmentAtom(composerId))
23
- const clear = useSetAtom(clearComposerAttachmentsAtom(composerId))
24
- return {
25
- add: useCallback((item: TComposerAttachment) => add(item), [add]),
26
- remove: useCallback((itemId: string) => remove(itemId), [remove]),
27
- clear: useCallback(() => clear(), [clear]),
28
- }
29
- }
@@ -1,19 +0,0 @@
1
- import { Composer } from "./base"
2
-
3
- export type * from "../type"
4
-
5
- export { Composer }
6
- export { SendButton } from "./send-button"
7
- export { AddButton } from "./add-button"
8
- export { CommandMenu } from "./command-menu"
9
- export { SuggestedPrompts } from "./suggestions"
10
- export {
11
- addComposerAttachmentAtom,
12
- clearComposerAttachmentsAtom,
13
- composerAttachmentsAtom,
14
- removeComposerAttachmentAtom,
15
- removeComposerInstance,
16
- } from "./utils"
17
- export { useComposerAttachmentActions, useComposerAttachments } from "./hooks"
18
-
19
- export default Composer