@exegia/corpora-ui 3.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 (587) hide show
  1. package/README.md +20 -0
  2. package/dist-lib/button-CIRkQXA6.js +152 -0
  3. package/dist-lib/button.js +3 -0
  4. package/dist-lib/card.js +150 -0
  5. package/dist-lib/components/atoms/text/default.d.ts +2 -1143
  6. package/dist-lib/components/blocks/shell/index.d.ts +1 -0
  7. package/dist-lib/components/ui/badge.d.ts +2 -2
  8. package/dist-lib/components/ui/button.d.ts +2 -2
  9. package/dist-lib/components/ui/glasscn/lazy-glass-surface.d.ts +6 -0
  10. package/dist-lib/components/ui/modal.d.ts +10 -0
  11. package/dist-lib/components/ui/overlays.d.ts +4 -0
  12. package/dist-lib/components/ui/select.d.ts +1 -1
  13. package/dist-lib/components/ui/toast.d.ts +2 -0
  14. package/dist-lib/ease-C9At8rnB.js +120 -0
  15. package/dist-lib/exegia-provider-DNTuLljX.js +124 -0
  16. package/dist-lib/index.css +3 -0
  17. package/dist-lib/index.d.ts +3 -0
  18. package/dist-lib/index.js +6482 -8894
  19. package/dist-lib/input.js +28 -0
  20. package/dist-lib/label.js +19 -0
  21. package/dist-lib/lib/segmented-control.d.ts +1 -1
  22. package/dist-lib/lib/state/exegia-provider.d.ts +17 -8
  23. package/dist-lib/lib/state/index.d.ts +2 -0
  24. package/dist-lib/lib/state/portal-context.d.ts +5 -0
  25. package/dist-lib/lib/state/sound-loading.d.ts +4 -0
  26. package/dist-lib/liquid-glass-BihU6nMl.js +50 -0
  27. package/dist-lib/modal-DLaOK-s1.js +82 -0
  28. package/dist-lib/overlays.js +3 -0
  29. package/dist-lib/rolldown-runtime-Dy4uBu1J.js +11 -0
  30. package/dist-lib/scaffold-Qv4hs5Pf.js +925 -0
  31. package/dist-lib/scaffold.js +2 -0
  32. package/dist-lib/shell-BQ9cjIEu.js +722 -0
  33. package/dist-lib/shell.js +2 -0
  34. package/dist-lib/sound-knGH4lj-.js +19 -0
  35. package/dist-lib/state.js +2 -0
  36. package/dist-lib/toast-CataVXHN.js +193 -0
  37. package/dist-lib/utils-BO0qfoA6.js +61 -0
  38. package/package.json +64 -23
  39. package/dist-lib/components/atoms/_layout.d.ts +0 -4
  40. package/dist-lib/components/atoms/bubble/__tests__/bubble.test.d.ts +0 -1
  41. package/dist-lib/components/atoms/bubble/__tests__/reference.test.d.ts +0 -1
  42. package/dist-lib/components/atoms/text/__tests__/text.test.d.ts +0 -1
  43. package/dist-lib/components/atoms/text-selection/__tests__/click-popover.test.d.ts +0 -1
  44. package/dist-lib/components/atoms/text-selection/__tests__/text-selection.test.d.ts +0 -1
  45. package/dist-lib/components/blocks/auth/__tests__/auth-flow-block.test.d.ts +0 -1
  46. package/dist-lib/components/blocks/auth/__tests__/auth-state-atom.test.d.ts +0 -1
  47. package/dist-lib/components/blocks/auth/__tests__/linked-accounts-block.test.d.ts +0 -1
  48. package/dist-lib/components/blocks/auth/__tests__/onboarding-block.test.d.ts +0 -1
  49. package/dist-lib/components/blocks/auth/__tests__/passkey-manager-block.test.d.ts +0 -1
  50. package/dist-lib/components/blocks/auth/__tests__/passkey-sign-in-block.test.d.ts +0 -1
  51. package/dist-lib/components/blocks/auth/__tests__/signup-block.test.d.ts +0 -1
  52. package/dist-lib/components/blocks/auth/__tests__/update-password-block.test.d.ts +0 -1
  53. package/dist-lib/components/blocks/chat/__tests__/ai-panel.test.d.ts +0 -1
  54. package/dist-lib/components/blocks/profile/__tests__/profile-card-block.test.d.ts +0 -1
  55. package/dist-lib/components/blocks/scaffold/__tests__/scaffold-atom.test.d.ts +0 -1
  56. package/dist-lib/components/blocks/scaffold/__tests__/scaffold.test.d.ts +0 -1
  57. package/dist-lib/components/blocks/shell/__tests__/shell-fit-atom.test.d.ts +0 -1
  58. package/dist-lib/components/blocks/shell/__tests__/shell-layout.test.d.ts +0 -1
  59. package/dist-lib/components/blocks/shell/__tests__/shell-metrics.test.d.ts +0 -1
  60. package/dist-lib/components/blocks/sidebar/__tests__/ai-sidebar-atom.test.d.ts +0 -1
  61. package/dist-lib/components/blocks/sidebar/__tests__/ai-sidebar.test.d.ts +0 -1
  62. package/dist-lib/components/blocks/sidebar/__tests__/use-ai-sidebar.test.d.ts +0 -1
  63. package/dist-lib/components/composed/__tests__/logo.test.d.ts +0 -1
  64. package/dist-lib/components/composed/action-bar/__tests__/action-bar.test.d.ts +0 -1
  65. package/dist-lib/components/composed/ai/__tests__/ai.test.d.ts +0 -1
  66. package/dist-lib/components/composed/chat/__tests__/attachment.test.d.ts +0 -1
  67. package/dist-lib/components/composed/chat/__tests__/beautiful-ui.test.d.ts +0 -1
  68. package/dist-lib/components/composed/chat/__tests__/chart.test.d.ts +0 -1
  69. package/dist-lib/components/composed/chat/__tests__/code-block.test.d.ts +0 -1
  70. package/dist-lib/components/composed/chat/__tests__/composer-attachments.test.d.ts +0 -1
  71. package/dist-lib/components/composed/chat/__tests__/composer.test.d.ts +0 -1
  72. package/dist-lib/components/composed/chat/__tests__/flowchart.test.d.ts +0 -1
  73. package/dist-lib/components/composed/chat/__tests__/glass-material.test.d.ts +0 -1
  74. package/dist-lib/components/composed/chat/__tests__/markdown.test.d.ts +0 -1
  75. package/dist-lib/components/composed/chat/__tests__/menu-command.test.d.ts +0 -1
  76. package/dist-lib/components/composed/chat/__tests__/recommendation.test.d.ts +0 -1
  77. package/dist-lib/components/composed/tree/__tests__/tree-atom.test.d.ts +0 -1
  78. package/dist-lib/components/composed/tree/__tests__/tree.test.d.ts +0 -1
  79. package/dist-lib/components/composed/tree/__tests__/use-tree.test.d.ts +0 -1
  80. package/dist-lib/components/composed/user/__tests__/message.test.d.ts +0 -1
  81. package/dist-lib/components/composed/verse/__tests__/verse.test.d.ts +0 -1
  82. package/dist-lib/components/docs/atoms-gallery.d.ts +0 -12
  83. package/dist-lib/components/docs/block-demo-stage.d.ts +0 -7
  84. package/dist-lib/components/docs/blocks-gallery.d.ts +0 -2
  85. package/dist-lib/components/docs/browser.d.ts +0 -10
  86. package/dist-lib/components/docs/code-block.d.ts +0 -4
  87. package/dist-lib/components/docs/components-gallery.d.ts +0 -2
  88. package/dist-lib/components/docs/demo-controls.d.ts +0 -21
  89. package/dist-lib/components/docs/hero.d.ts +0 -5
  90. package/dist-lib/components/docs/mermaid.d.ts +0 -3
  91. package/dist-lib/components/icons/__tests__/icons.test.d.ts +0 -1
  92. package/dist-lib/components/stories/attachment.story.d.ts +0 -11
  93. package/dist-lib/components/stories/auth-flow-block.story.d.ts +0 -2
  94. package/dist-lib/components/stories/avatar.story.d.ts +0 -6
  95. package/dist-lib/components/stories/base.story.d.ts +0 -6
  96. package/dist-lib/components/stories/bubble.story.d.ts +0 -6
  97. package/dist-lib/components/stories/button.story.d.ts +0 -9
  98. package/dist-lib/components/stories/card.story.d.ts +0 -8
  99. package/dist-lib/components/stories/chart.story.d.ts +0 -71
  100. package/dist-lib/components/stories/checkbox.story.d.ts +0 -6
  101. package/dist-lib/components/stories/code-auth-block.story.d.ts +0 -2
  102. package/dist-lib/components/stories/code-block.story.d.ts +0 -12
  103. package/dist-lib/components/stories/composed-password-input.story.d.ts +0 -6
  104. package/dist-lib/components/stories/context-cards.story.d.ts +0 -3
  105. package/dist-lib/components/stories/emoji-action-bar.story.d.ts +0 -3
  106. package/dist-lib/components/stories/field.story.d.ts +0 -6
  107. package/dist-lib/components/stories/file-icons.story.d.ts +0 -5
  108. package/dist-lib/components/stories/filter-table.story.d.ts +0 -21
  109. package/dist-lib/components/stories/flowchart.story.d.ts +0 -3
  110. package/dist-lib/components/stories/forgot-password-block.story.d.ts +0 -2
  111. package/dist-lib/components/stories/frame.story.d.ts +0 -8
  112. package/dist-lib/components/stories/index.d.ts +0 -54
  113. package/dist-lib/components/stories/input-group.story.d.ts +0 -6
  114. package/dist-lib/components/stories/input.story.d.ts +0 -8
  115. package/dist-lib/components/stories/insight-cards.story.d.ts +0 -74
  116. package/dist-lib/components/stories/label.story.d.ts +0 -8
  117. package/dist-lib/components/stories/linked-accounts-block.story.d.ts +0 -2
  118. package/dist-lib/components/stories/login-block.story.d.ts +0 -2
  119. package/dist-lib/components/stories/logo.story.d.ts +0 -3
  120. package/dist-lib/components/stories/markdown.story.d.ts +0 -7
  121. package/dist-lib/components/stories/menu-command.story.d.ts +0 -13
  122. package/dist-lib/components/stories/onboarding-block.story.d.ts +0 -2
  123. package/dist-lib/components/stories/otp-field.story.d.ts +0 -8
  124. package/dist-lib/components/stories/passkey-manager-block.story.d.ts +0 -2
  125. package/dist-lib/components/stories/passkey-sign-in-block.story.d.ts +0 -2
  126. package/dist-lib/components/stories/password-input.story.d.ts +0 -9
  127. package/dist-lib/components/stories/profile-card-block.story.d.ts +0 -6
  128. package/dist-lib/components/stories/recommendation-card.story.d.ts +0 -3
  129. package/dist-lib/components/stories/records-table.story.d.ts +0 -23
  130. package/dist-lib/components/stories/reference.story.d.ts +0 -9
  131. package/dist-lib/components/stories/research-answer.story.d.ts +0 -10
  132. package/dist-lib/components/stories/scaffold-root.story.d.ts +0 -6
  133. package/dist-lib/components/stories/separator.story.d.ts +0 -6
  134. package/dist-lib/components/stories/shell-layout.story.d.ts +0 -2
  135. package/dist-lib/components/stories/signup-block.story.d.ts +0 -2
  136. package/dist-lib/components/stories/social-providers.story.d.ts +0 -3
  137. package/dist-lib/components/stories/streaming-text.story.d.ts +0 -3
  138. package/dist-lib/components/stories/text.story.d.ts +0 -8
  139. package/dist-lib/components/stories/textarea.story.d.ts +0 -6
  140. package/dist-lib/components/stories/tree.story.d.ts +0 -4
  141. package/dist-lib/components/stories/update-password-block.story.d.ts +0 -2
  142. package/dist-lib/components/stories/user.story.d.ts +0 -8
  143. package/dist-lib/components/stories/verse.story.d.ts +0 -6
  144. package/dist-lib/components/ui/chat/__tests__/segmented-toggle.test.d.ts +0 -1
  145. package/dist-lib/index.js.map +0 -1
  146. package/dist-lib/lib/state/__tests__/sound.test.d.ts +0 -1
  147. package/dist-lib/lib/utils.test.d.ts +0 -1
  148. package/src/assets/css/base.css +0 -62
  149. package/src/assets/css/chat.css +0 -229
  150. package/src/assets/css/shadows.css +0 -157
  151. package/src/assets/css/theme.css +0 -321
  152. package/src/components/AGENTS.md +0 -0
  153. package/src/components/atoms/_layout.tsx +0 -9
  154. package/src/components/atoms/avatar/base.tsx +0 -70
  155. package/src/components/atoms/avatar/index.ts +0 -10
  156. package/src/components/atoms/avatar/types.ts +0 -24
  157. package/src/components/atoms/avatar/utils.ts +0 -54
  158. package/src/components/atoms/avatar/verified.tsx +0 -16
  159. package/src/components/atoms/background/index.ts +0 -8
  160. package/src/components/atoms/background/texture.tsx +0 -29
  161. package/src/components/atoms/background/type.ts +0 -10
  162. package/src/components/atoms/background/utils.ts +0 -13
  163. package/src/components/atoms/bubble/__tests__/bubble.test.tsx +0 -193
  164. package/src/components/atoms/bubble/__tests__/reference.test.tsx +0 -25
  165. package/src/components/atoms/bubble/actions.tsx +0 -28
  166. package/src/components/atoms/bubble/context.ts +0 -11
  167. package/src/components/atoms/bubble/default.tsx +0 -46
  168. package/src/components/atoms/bubble/header.tsx +0 -36
  169. package/src/components/atoms/bubble/index.ts +0 -37
  170. package/src/components/atoms/bubble/message.tsx +0 -32
  171. package/src/components/atoms/bubble/reactions.tsx +0 -191
  172. package/src/components/atoms/bubble/types.ts +0 -82
  173. package/src/components/atoms/bubble/utils.ts +0 -46
  174. package/src/components/atoms/chip.tsx +0 -61
  175. package/src/components/atoms/field.tsx +0 -43
  176. package/src/components/atoms/index.ts +0 -26
  177. package/src/components/atoms/loader.tsx +0 -33
  178. package/src/components/atoms/reference.tsx +0 -41
  179. package/src/components/atoms/text/__tests__/text.test.tsx +0 -47
  180. package/src/components/atoms/text/default.tsx +0 -59
  181. package/src/components/atoms/text/heading.tsx +0 -58
  182. package/src/components/atoms/text/index.ts +0 -28
  183. package/src/components/atoms/text/label.tsx +0 -16
  184. package/src/components/atoms/text/paragraph.tsx +0 -55
  185. package/src/components/atoms/text/span.tsx +0 -14
  186. package/src/components/atoms/text/types.ts +0 -41
  187. package/src/components/atoms/text/utils.ts +0 -16
  188. package/src/components/atoms/text-selection/__tests__/click-popover.test.tsx +0 -61
  189. package/src/components/atoms/text-selection/__tests__/text-selection.test.tsx +0 -90
  190. package/src/components/atoms/text-selection/click-popover.tsx +0 -62
  191. package/src/components/atoms/text-selection/index.ts +0 -30
  192. package/src/components/atoms/text-selection/popover.tsx +0 -103
  193. package/src/components/atoms/text-selection/selection-atom.ts +0 -51
  194. package/src/components/atoms/text-selection/selection.tsx +0 -56
  195. package/src/components/atoms/text-selection/types.ts +0 -125
  196. package/src/components/atoms/text-selection/use-selection.ts +0 -84
  197. package/src/components/atoms/types.ts +0 -46
  198. package/src/components/blocks/.gitkeep +0 -0
  199. package/src/components/blocks/auth/__tests__/auth-flow-block.test.tsx +0 -183
  200. package/src/components/blocks/auth/__tests__/auth-state-atom.test.tsx +0 -247
  201. package/src/components/blocks/auth/__tests__/linked-accounts-block.test.tsx +0 -128
  202. package/src/components/blocks/auth/__tests__/onboarding-block.test.tsx +0 -183
  203. package/src/components/blocks/auth/__tests__/passkey-manager-block.test.tsx +0 -131
  204. package/src/components/blocks/auth/__tests__/passkey-sign-in-block.test.tsx +0 -59
  205. package/src/components/blocks/auth/__tests__/signup-block.test.tsx +0 -176
  206. package/src/components/blocks/auth/__tests__/update-password-block.test.tsx +0 -95
  207. package/src/components/blocks/auth/auth-flow-atom.ts +0 -238
  208. package/src/components/blocks/auth/auth-flow-block.tsx +0 -211
  209. package/src/components/blocks/auth/auth-session-atom.ts +0 -82
  210. package/src/components/blocks/auth/auth-shell.tsx +0 -265
  211. package/src/components/blocks/auth/auth-state.ts +0 -40
  212. package/src/components/blocks/auth/code-auth-block.tsx +0 -176
  213. package/src/components/blocks/auth/forgot-password-block.tsx +0 -112
  214. package/src/components/blocks/auth/linked-accounts-block.tsx +0 -203
  215. package/src/components/blocks/auth/login-block.tsx +0 -217
  216. package/src/components/blocks/auth/onboarding/profile-step.tsx +0 -216
  217. package/src/components/blocks/auth/onboarding-block.tsx +0 -183
  218. package/src/components/blocks/auth/passkey-manager-block.tsx +0 -316
  219. package/src/components/blocks/auth/passkey-sign-in-block.tsx +0 -67
  220. package/src/components/blocks/auth/signup-block.tsx +0 -256
  221. package/src/components/blocks/auth/type.ts +0 -436
  222. package/src/components/blocks/auth/update-password-block.tsx +0 -139
  223. package/src/components/blocks/auth/use-auth-state.ts +0 -127
  224. package/src/components/blocks/chat/__tests__/ai-panel.test.tsx +0 -65
  225. package/src/components/blocks/chat/banners.tsx +0 -61
  226. package/src/components/blocks/chat/base.tsx +0 -84
  227. package/src/components/blocks/chat/header.tsx +0 -60
  228. package/src/components/blocks/chat/index.ts +0 -37
  229. package/src/components/blocks/chat/recommendation-stack.tsx +0 -41
  230. package/src/components/blocks/chat/shared.tsx +0 -27
  231. package/src/components/blocks/chat/suggested-prompts.tsx +0 -45
  232. package/src/components/blocks/chat/type.ts +0 -96
  233. package/src/components/blocks/chat/version-history-record.tsx +0 -37
  234. package/src/components/blocks/layout.ts +0 -35
  235. package/src/components/blocks/profile/__tests__/profile-card-block.test.tsx +0 -362
  236. package/src/components/blocks/profile/index.ts +0 -28
  237. package/src/components/blocks/profile/profile-card-atom.ts +0 -247
  238. package/src/components/blocks/profile/profile-card-block.tsx +0 -369
  239. package/src/components/blocks/profile/type.ts +0 -93
  240. package/src/components/blocks/profile/use-profile-card-state.ts +0 -67
  241. package/src/components/blocks/profile/use-profile-card.ts +0 -132
  242. package/src/components/blocks/scaffold/__tests__/scaffold-atom.test.tsx +0 -236
  243. package/src/components/blocks/scaffold/__tests__/scaffold.test.tsx +0 -524
  244. package/src/components/blocks/scaffold/constants.ts +0 -39
  245. package/src/components/blocks/scaffold/index.ts +0 -60
  246. package/src/components/blocks/scaffold/panel-close-button.tsx +0 -36
  247. package/src/components/blocks/scaffold/panel-menu-button.tsx +0 -221
  248. package/src/components/blocks/scaffold/scaffold-actions.tsx +0 -92
  249. package/src/components/blocks/scaffold/scaffold-atom.ts +0 -427
  250. package/src/components/blocks/scaffold/scaffold-canvas.tsx +0 -162
  251. package/src/components/blocks/scaffold/scaffold-context.ts +0 -20
  252. package/src/components/blocks/scaffold/scaffold-inspector.tsx +0 -137
  253. package/src/components/blocks/scaffold/scaffold-main.tsx +0 -28
  254. package/src/components/blocks/scaffold/scaffold-panel.tsx +0 -186
  255. package/src/components/blocks/scaffold/scaffold-root.tsx +0 -120
  256. package/src/components/blocks/scaffold/scaffold-sidebar.tsx +0 -31
  257. package/src/components/blocks/scaffold/scaffold-sub-panel.tsx +0 -122
  258. package/src/components/blocks/scaffold/scaffold-tab.tsx +0 -108
  259. package/src/components/blocks/scaffold/type.ts +0 -264
  260. package/src/components/blocks/scaffold/use-scaffold-state.ts +0 -85
  261. package/src/components/blocks/scaffold/use-scaffold.ts +0 -59
  262. package/src/components/blocks/scaffold/utils.ts +0 -112
  263. package/src/components/blocks/shell/__tests__/shell-fit-atom.test.tsx +0 -362
  264. package/src/components/blocks/shell/__tests__/shell-layout.test.tsx +0 -596
  265. package/src/components/blocks/shell/__tests__/shell-metrics.test.ts +0 -154
  266. package/src/components/blocks/shell/animated-panel-inset.tsx +0 -27
  267. package/src/components/blocks/shell/animated-panel-provider.tsx +0 -269
  268. package/src/components/blocks/shell/animated-panel-trigger.tsx +0 -51
  269. package/src/components/blocks/shell/animated-panel.tsx +0 -180
  270. package/src/components/blocks/shell/index.ts +0 -30
  271. package/src/components/blocks/shell/shell-fit-atom.ts +0 -246
  272. package/src/components/blocks/shell/shell-layout.tsx +0 -139
  273. package/src/components/blocks/shell/shell-metrics.ts +0 -133
  274. package/src/components/blocks/shell/shell-panel-atom.ts +0 -74
  275. package/src/components/blocks/shell/type.ts +0 -361
  276. package/src/components/blocks/shell/use-shell-fit-state.ts +0 -49
  277. package/src/components/blocks/shell/use-shell-fit.ts +0 -153
  278. package/src/components/blocks/shell/use-shell-panels.ts +0 -126
  279. package/src/components/blocks/shell/utils.ts +0 -187
  280. package/src/components/blocks/sidebar/__tests__/ai-sidebar-atom.test.tsx +0 -325
  281. package/src/components/blocks/sidebar/__tests__/ai-sidebar.test.tsx +0 -93
  282. package/src/components/blocks/sidebar/__tests__/use-ai-sidebar.test.tsx +0 -310
  283. package/src/components/blocks/sidebar/ai-sidebar-atom.ts +0 -698
  284. package/src/components/blocks/sidebar/ai-sidebar.tsx +0 -150
  285. package/src/components/blocks/sidebar/index.ts +0 -67
  286. package/src/components/blocks/sidebar/marquee-label.tsx +0 -59
  287. package/src/components/blocks/sidebar/sidebar-context.ts +0 -15
  288. package/src/components/blocks/sidebar/sidebar-icon.tsx +0 -14
  289. package/src/components/blocks/sidebar/sidebar-row.tsx +0 -378
  290. package/src/components/blocks/sidebar/type.ts +0 -294
  291. package/src/components/blocks/sidebar/use-ai-sidebar-state.ts +0 -123
  292. package/src/components/blocks/sidebar/use-ai-sidebar.ts +0 -619
  293. package/src/components/blocks/sidebar/utils.ts +0 -170
  294. package/src/components/blocks/types.ts +0 -6
  295. package/src/components/composed/.gitkeep +0 -0
  296. package/src/components/composed/__tests__/logo.test.tsx +0 -60
  297. package/src/components/composed/action-bar/__tests__/action-bar.test.tsx +0 -125
  298. package/src/components/composed/action-bar/action.tsx +0 -77
  299. package/src/components/composed/action-bar/emojis.tsx +0 -97
  300. package/src/components/composed/action-bar/index.ts +0 -24
  301. package/src/components/composed/action-bar/toolbar.tsx +0 -66
  302. package/src/components/composed/action-bar/types.ts +0 -58
  303. package/src/components/composed/action-bar/utils.ts +0 -140
  304. package/src/components/composed/ai/__tests__/ai.test.tsx +0 -66
  305. package/src/components/composed/ai/avatar.tsx +0 -19
  306. package/src/components/composed/ai/index.ts +0 -36
  307. package/src/components/composed/ai/message.tsx +0 -49
  308. package/src/components/composed/ai/research-answer.tsx +0 -157
  309. package/src/components/composed/ai/shared.tsx +0 -94
  310. package/src/components/composed/ai/streaming-text.tsx +0 -94
  311. package/src/components/composed/ai/suggested-prompt.tsx +0 -183
  312. package/src/components/composed/ai/types.ts +0 -81
  313. package/src/components/composed/chat/__tests__/attachment.test.tsx +0 -218
  314. package/src/components/composed/chat/__tests__/beautiful-ui.test.tsx +0 -57
  315. package/src/components/composed/chat/__tests__/chart.test.tsx +0 -316
  316. package/src/components/composed/chat/__tests__/code-block.test.tsx +0 -12
  317. package/src/components/composed/chat/__tests__/composer-attachments.test.tsx +0 -101
  318. package/src/components/composed/chat/__tests__/composer.test.tsx +0 -248
  319. package/src/components/composed/chat/__tests__/flowchart.test.tsx +0 -145
  320. package/src/components/composed/chat/__tests__/glass-material.test.tsx +0 -54
  321. package/src/components/composed/chat/__tests__/markdown.test.tsx +0 -25
  322. package/src/components/composed/chat/__tests__/menu-command.test.tsx +0 -35
  323. package/src/components/composed/chat/__tests__/recommendation.test.tsx +0 -43
  324. package/src/components/composed/chat/actions.tsx +0 -81
  325. package/src/components/composed/chat/attachment-file.ts +0 -82
  326. package/src/components/composed/chat/attachment.tsx +0 -498
  327. package/src/components/composed/chat/chart/chart-atom.ts +0 -55
  328. package/src/components/composed/chat/chart/chart-context.ts +0 -9
  329. package/src/components/composed/chat/chart/chart-legend.tsx +0 -75
  330. package/src/components/composed/chat/chart/chart-plot.tsx +0 -233
  331. package/src/components/composed/chat/chart/chart-root.tsx +0 -229
  332. package/src/components/composed/chat/chart/chart-tooltip.tsx +0 -74
  333. package/src/components/composed/chat/chart/constants.ts +0 -8
  334. package/src/components/composed/chat/chart/evilcharts/README.md +0 -8
  335. package/src/components/composed/chat/chart/evilcharts/echarts-area-chart.tsx +0 -2358
  336. package/src/components/composed/chat/chart/evilcharts/echarts-bar-chart.tsx +0 -2261
  337. package/src/components/composed/chat/chart/evilcharts/echarts-brush.tsx +0 -233
  338. package/src/components/composed/chat/chart/evilcharts/echarts-chart.tsx +0 -214
  339. package/src/components/composed/chat/chart/evilcharts/echarts-dot.tsx +0 -111
  340. package/src/components/composed/chat/chart/evilcharts/echarts-legend.tsx +0 -131
  341. package/src/components/composed/chat/chart/evilcharts/echarts-line-chart.tsx +0 -2112
  342. package/src/components/composed/chat/chart/evilcharts/echarts-pie-chart.tsx +0 -1235
  343. package/src/components/composed/chat/chart/evilcharts/echarts-tooltip.tsx +0 -125
  344. package/src/components/composed/chat/chart/index.ts +0 -13
  345. package/src/components/composed/chat/chart/type.ts +0 -88
  346. package/src/components/composed/chat/chart/use-chart-state.ts +0 -22
  347. package/src/components/composed/chat/chart/use-chart.ts +0 -70
  348. package/src/components/composed/chat/chart/utils.ts +0 -47
  349. package/src/components/composed/chat/chart.tsx +0 -3
  350. package/src/components/composed/chat/code-block.tsx +0 -123
  351. package/src/components/composed/chat/composer/add-button.tsx +0 -29
  352. package/src/components/composed/chat/composer/base.tsx +0 -573
  353. package/src/components/composed/chat/composer/command-menu.tsx +0 -47
  354. package/src/components/composed/chat/composer/hooks.ts +0 -29
  355. package/src/components/composed/chat/composer/index.ts +0 -19
  356. package/src/components/composed/chat/composer/send-button.tsx +0 -36
  357. package/src/components/composed/chat/composer/suggestions.tsx +0 -115
  358. package/src/components/composed/chat/composer/use-dictation.ts +0 -123
  359. package/src/components/composed/chat/composer/utils.ts +0 -74
  360. package/src/components/composed/chat/context-cards.tsx +0 -63
  361. package/src/components/composed/chat/filter-table.tsx +0 -119
  362. package/src/components/composed/chat/flowchart/chart-node.tsx +0 -162
  363. package/src/components/composed/chat/flowchart/connector.tsx +0 -32
  364. package/src/components/composed/chat/flowchart/constant.ts +0 -26
  365. package/src/components/composed/chat/flowchart/default.tsx +0 -230
  366. package/src/components/composed/chat/flowchart/edge-toolbar.tsx +0 -73
  367. package/src/components/composed/chat/flowchart/hooks.tsx +0 -347
  368. package/src/components/composed/chat/flowchart/index.ts +0 -14
  369. package/src/components/composed/chat/flowchart/step-body.tsx +0 -82
  370. package/src/components/composed/chat/flowchart/types.ts +0 -89
  371. package/src/components/composed/chat/flowchart/utils.ts +0 -78
  372. package/src/components/composed/chat/hint.tsx +0 -59
  373. package/src/components/composed/chat/index.ts +0 -92
  374. package/src/components/composed/chat/insight-cards.tsx +0 -199
  375. package/src/components/composed/chat/markdown-atom.ts +0 -15
  376. package/src/components/composed/chat/markdown.tsx +0 -213
  377. package/src/components/composed/chat/recommendation/checkbox.tsx +0 -122
  378. package/src/components/composed/chat/recommendation/constant.ts +0 -54
  379. package/src/components/composed/chat/recommendation/default.tsx +0 -25
  380. package/src/components/composed/chat/recommendation/group.tsx +0 -36
  381. package/src/components/composed/chat/recommendation/index.ts +0 -17
  382. package/src/components/composed/chat/recommendation/item.tsx +0 -215
  383. package/src/components/composed/chat/recommendation/types.ts +0 -76
  384. package/src/components/composed/chat/records-table.tsx +0 -130
  385. package/src/components/composed/chat/type.ts +0 -157
  386. package/src/components/composed/logo.tsx +0 -171
  387. package/src/components/composed/password-input.tsx +0 -179
  388. package/src/components/composed/reader/applied-mark.tsx +0 -32
  389. package/src/components/composed/reader/apply-toast.tsx +0 -49
  390. package/src/components/composed/reader/index.ts +0 -10
  391. package/src/components/composed/reader/selection-highlight.tsx +0 -26
  392. package/src/components/composed/reader/selection-popover.tsx +0 -149
  393. package/src/components/composed/reader/type.ts +0 -48
  394. package/src/components/composed/social-providers.tsx +0 -154
  395. package/src/components/composed/tree/CLAUDE.md +0 -145
  396. package/src/components/composed/tree/__tests__/tree-atom.test.tsx +0 -217
  397. package/src/components/composed/tree/__tests__/tree.test.tsx +0 -522
  398. package/src/components/composed/tree/__tests__/use-tree.test.tsx +0 -333
  399. package/src/components/composed/tree/constants.ts +0 -55
  400. package/src/components/composed/tree/index.ts +0 -51
  401. package/src/components/composed/tree/tree-atom.ts +0 -590
  402. package/src/components/composed/tree/tree-context.ts +0 -13
  403. package/src/components/composed/tree/tree-node.tsx +0 -496
  404. package/src/components/composed/tree/tree.tsx +0 -233
  405. package/src/components/composed/tree/type.ts +0 -322
  406. package/src/components/composed/tree/use-tree-dnd.ts +0 -179
  407. package/src/components/composed/tree/use-tree-state.ts +0 -105
  408. package/src/components/composed/tree/use-tree.ts +0 -311
  409. package/src/components/composed/tree/utils.ts +0 -172
  410. package/src/components/composed/types.ts +0 -9
  411. package/src/components/composed/user/__tests__/message.test.tsx +0 -79
  412. package/src/components/composed/user/index.ts +0 -14
  413. package/src/components/composed/user/info.tsx +0 -56
  414. package/src/components/composed/user/message.tsx +0 -36
  415. package/src/components/composed/user/pill.tsx +0 -20
  416. package/src/components/composed/user/types.ts +0 -47
  417. package/src/components/composed/user/utils.ts +0 -0
  418. package/src/components/composed/verse/__tests__/verse.test.tsx +0 -57
  419. package/src/components/composed/verse/index.ts +0 -2
  420. package/src/components/composed/verse/types.ts +0 -24
  421. package/src/components/composed/verse/verse.tsx +0 -100
  422. package/src/components/docs/atoms-gallery.tsx +0 -286
  423. package/src/components/docs/block-demo-stage.tsx +0 -38
  424. package/src/components/docs/blocks-gallery.tsx +0 -224
  425. package/src/components/docs/browser.tsx +0 -87
  426. package/src/components/docs/code-block.tsx +0 -10
  427. package/src/components/docs/components-gallery.tsx +0 -182
  428. package/src/components/docs/demo-controls.tsx +0 -142
  429. package/src/components/docs/hero.tsx +0 -197
  430. package/src/components/docs/mermaid.tsx +0 -55
  431. package/src/components/icons/README.md +0 -91
  432. package/src/components/icons/__tests__/icons.test.tsx +0 -58
  433. package/src/components/icons/file-badge-cfm.tsx +0 -615
  434. package/src/components/icons/file-badge-corpus.tsx +0 -604
  435. package/src/components/icons/file-badge-pdf.tsx +0 -570
  436. package/src/components/icons/file-badge-tei.tsx +0 -524
  437. package/src/components/icons/file-badge-tf.tsx +0 -620
  438. package/src/components/icons/file-badge-txt.tsx +0 -607
  439. package/src/components/icons/file-badge-xml.tsx +0 -576
  440. package/src/components/icons/file-wordmark-cfm.tsx +0 -424
  441. package/src/components/icons/file-wordmark-corpus.tsx +0 -454
  442. package/src/components/icons/file-wordmark-pdf.tsx +0 -470
  443. package/src/components/icons/file-wordmark-tei.tsx +0 -424
  444. package/src/components/icons/file-wordmark-tf.tsx +0 -406
  445. package/src/components/icons/file-wordmark-txt.tsx +0 -421
  446. package/src/components/icons/file-wordmark-xml.tsx +0 -424
  447. package/src/components/icons/index.ts +0 -16
  448. package/src/components/icons/types.ts +0 -8
  449. package/src/components/motion/index.ts +0 -0
  450. package/src/components/motion/overflow-actions.tsx +0 -376
  451. package/src/components/motion/popover-morph.tsx +0 -292
  452. package/src/components/motion/popover-position.ts +0 -86
  453. package/src/components/motion/shared-layout-bg.tsx +0 -151
  454. package/src/components/stories/attachment.story.tsx +0 -40
  455. package/src/components/stories/auth-flow-block.story.tsx +0 -17
  456. package/src/components/stories/avatar.story.tsx +0 -33
  457. package/src/components/stories/base.story.tsx +0 -70
  458. package/src/components/stories/bubble.story.tsx +0 -61
  459. package/src/components/stories/button.story.tsx +0 -32
  460. package/src/components/stories/card.story.tsx +0 -36
  461. package/src/components/stories/chart.story.tsx +0 -69
  462. package/src/components/stories/checkbox.story.tsx +0 -30
  463. package/src/components/stories/code-auth-block.story.tsx +0 -20
  464. package/src/components/stories/code-block.story.tsx +0 -35
  465. package/src/components/stories/composed-password-input.story.tsx +0 -41
  466. package/src/components/stories/context-cards.story.tsx +0 -30
  467. package/src/components/stories/emoji-action-bar.story.tsx +0 -20
  468. package/src/components/stories/field.story.tsx +0 -32
  469. package/src/components/stories/file-icons.story.tsx +0 -20
  470. package/src/components/stories/filter-table.story.tsx +0 -63
  471. package/src/components/stories/flowchart.story.tsx +0 -25
  472. package/src/components/stories/forgot-password-block.story.tsx +0 -14
  473. package/src/components/stories/frame.story.tsx +0 -32
  474. package/src/components/stories/index.ts +0 -57
  475. package/src/components/stories/input-group.story.tsx +0 -27
  476. package/src/components/stories/input.story.tsx +0 -42
  477. package/src/components/stories/insight-cards.story.tsx +0 -67
  478. package/src/components/stories/label.story.tsx +0 -32
  479. package/src/components/stories/linked-accounts-block.story.tsx +0 -23
  480. package/src/components/stories/login-block.story.tsx +0 -18
  481. package/src/components/stories/logo.story.tsx +0 -21
  482. package/src/components/stories/markdown.story.tsx +0 -31
  483. package/src/components/stories/menu-command.story.tsx +0 -43
  484. package/src/components/stories/onboarding-block.story.tsx +0 -14
  485. package/src/components/stories/otp-field.story.tsx +0 -35
  486. package/src/components/stories/passkey-manager-block.story.tsx +0 -18
  487. package/src/components/stories/passkey-sign-in-block.story.tsx +0 -15
  488. package/src/components/stories/password-input.story.tsx +0 -35
  489. package/src/components/stories/profile-card-block.story.tsx +0 -29
  490. package/src/components/stories/recommendation-card.story.tsx +0 -37
  491. package/src/components/stories/records-table.story.tsx +0 -52
  492. package/src/components/stories/reference.story.tsx +0 -33
  493. package/src/components/stories/research-answer.story.tsx +0 -32
  494. package/src/components/stories/scaffold-root.story.tsx +0 -47
  495. package/src/components/stories/separator.story.tsx +0 -37
  496. package/src/components/stories/shell-layout.story.tsx +0 -19
  497. package/src/components/stories/signup-block.story.tsx +0 -18
  498. package/src/components/stories/social-providers.story.tsx +0 -26
  499. package/src/components/stories/streaming-text.story.tsx +0 -25
  500. package/src/components/stories/text.story.tsx +0 -31
  501. package/src/components/stories/textarea.story.tsx +0 -34
  502. package/src/components/stories/tree.story.tsx +0 -31
  503. package/src/components/stories/update-password-block.story.tsx +0 -14
  504. package/src/components/stories/user.story.tsx +0 -32
  505. package/src/components/stories/verse.story.tsx +0 -42
  506. package/src/components/theme-provider.tsx +0 -230
  507. package/src/components/types.ts +0 -106
  508. package/src/components/ui/accordion.tsx +0 -68
  509. package/src/components/ui/alert-dialog.tsx +0 -167
  510. package/src/components/ui/alert.tsx +0 -84
  511. package/src/components/ui/autocomplete.tsx +0 -303
  512. package/src/components/ui/avatar.tsx +0 -109
  513. package/src/components/ui/badge.tsx +0 -101
  514. package/src/components/ui/button-group.tsx +0 -88
  515. package/src/components/ui/button.tsx +0 -192
  516. package/src/components/ui/card.tsx +0 -253
  517. package/src/components/ui/chat/__tests__/segmented-toggle.test.tsx +0 -27
  518. package/src/components/ui/chat/avatar-handle.tsx +0 -30
  519. package/src/components/ui/chat/badges.tsx +0 -85
  520. package/src/components/ui/chat/buttons.tsx +0 -94
  521. package/src/components/ui/chat/chips.tsx +0 -106
  522. package/src/components/ui/chat/dot.tsx +0 -81
  523. package/src/components/ui/chat/icon-button.tsx +0 -43
  524. package/src/components/ui/chat/icon-tile.tsx +0 -33
  525. package/src/components/ui/chat/index.ts +0 -12
  526. package/src/components/ui/chat/inline-source.tsx +0 -94
  527. package/src/components/ui/chat/segmented-toggle.tsx +0 -99
  528. package/src/components/ui/chat/tag.tsx +0 -61
  529. package/src/components/ui/chat/thumbnail.tsx +0 -31
  530. package/src/components/ui/chat/waveform.tsx +0 -30
  531. package/src/components/ui/checkbox.tsx +0 -83
  532. package/src/components/ui/collapsible.tsx +0 -42
  533. package/src/components/ui/command.tsx +0 -263
  534. package/src/components/ui/context-menu.tsx +0 -342
  535. package/src/components/ui/emoji-picker.tsx +0 -161
  536. package/src/components/ui/field.tsx +0 -89
  537. package/src/components/ui/frame.tsx +0 -87
  538. package/src/components/ui/glasscn/glass-button-group.tsx +0 -34
  539. package/src/components/ui/glasscn/glass-button.tsx +0 -25
  540. package/src/components/ui/glasscn/glass-container.tsx +0 -94
  541. package/src/components/ui/glasscn/glass-separator.tsx +0 -39
  542. package/src/components/ui/glasscn/liquid-glass.tsx +0 -59
  543. package/src/components/ui/group.tsx +0 -92
  544. package/src/components/ui/input-group.tsx +0 -105
  545. package/src/components/ui/input.tsx +0 -70
  546. package/src/components/ui/kbd.tsx +0 -32
  547. package/src/components/ui/label.tsx +0 -36
  548. package/src/components/ui/menu-command.tsx +0 -156
  549. package/src/components/ui/menu.tsx +0 -352
  550. package/src/components/ui/otp-field.tsx +0 -88
  551. package/src/components/ui/popover-glass.tsx +0 -158
  552. package/src/components/ui/popover.tsx +0 -120
  553. package/src/components/ui/preview-card.tsx +0 -61
  554. package/src/components/ui/scroll-area.tsx +0 -80
  555. package/src/components/ui/select.tsx +0 -257
  556. package/src/components/ui/separator.tsx +0 -23
  557. package/src/components/ui/sheet.tsx +0 -135
  558. package/src/components/ui/skeleton.tsx +0 -18
  559. package/src/components/ui/spinner.tsx +0 -17
  560. package/src/components/ui/switch.tsx +0 -30
  561. package/src/components/ui/tabs.tsx +0 -120
  562. package/src/components/ui/textarea.tsx +0 -58
  563. package/src/components/ui/toast.tsx +0 -325
  564. package/src/components/ui/toolbar.tsx +0 -92
  565. package/src/components/ui/tooltip.tsx +0 -67
  566. package/src/index.css +0 -10
  567. package/src/index.ts +0 -102
  568. package/src/lib/attachment-content.ts +0 -28
  569. package/src/lib/auth-accent.ts +0 -49
  570. package/src/lib/ease.ts +0 -90
  571. package/src/lib/glass-variants.ts +0 -22
  572. package/src/lib/hooks/use-hover-capable.ts +0 -23
  573. package/src/lib/hooks/use-mobile.ts +0 -21
  574. package/src/lib/keyed-atom.ts +0 -60
  575. package/src/lib/segmented-control.ts +0 -42
  576. package/src/lib/sound.ts +0 -39
  577. package/src/lib/specular.ts +0 -10
  578. package/src/lib/state/__tests__/sound.test.tsx +0 -53
  579. package/src/lib/state/exegia-provider.tsx +0 -83
  580. package/src/lib/state/index.ts +0 -4
  581. package/src/lib/state/store.ts +0 -19
  582. package/src/lib/use-motion-panel.ts +0 -78
  583. package/src/lib/utils.test.ts +0 -22
  584. package/src/lib/utils.ts +0 -100
  585. package/src/specular.js +0 -4
  586. /package/{src/components/composed/chat/composer → dist-lib}/BEAUTIFUL-UI-LICENSE.txt +0 -0
  587. /package/{src/components/composed/chat/chart/evilcharts/LICENSE → dist-lib/EVILCHARTS-LICENSE.txt} +0 -0
@@ -1,139 +0,0 @@
1
- "use client";
2
-
3
- import * as React from "react";
4
-
5
- import {
6
- getPasswordStrength,
7
- PasswordInput,
8
- } from "@/components/composed/password-input";
9
- import { Button } from "@/components/ui/button";
10
- import { Field, FieldLabel } from "@/components/ui/field";
11
- import { authAccentActionStyles } from "@/lib/auth-accent";
12
- import { cn } from "@/lib/utils";
13
- import {
14
- AuthCard,
15
- AuthError,
16
- AuthSuccess,
17
- MorphStep,
18
- Reveal,
19
- } from "./auth-shell";
20
- import type { IUpdatePasswordBlockProps, TAuthStatus } from "./type";
21
-
22
- /**
23
- * Password change form for an already-authenticated user: a strength-metered
24
- * new password gates the confirm field, which in turn gates the submit
25
- * button. Mismatch is caught client-side; everything else comes back as a
26
- * rejection from `onSubmit`.
27
- */
28
- export function UpdatePasswordBlock({
29
- title = "Update your password",
30
- description = "Choose a new password for your account",
31
- logo,
32
- accent,
33
- minStrength = 4,
34
- onSubmit,
35
- onDone,
36
- }: IUpdatePasswordBlockProps) {
37
- const passwordId = React.useId();
38
- const confirmId = React.useId();
39
- const [status, setStatus] = React.useState<TAuthStatus>("idle");
40
- const [error, setError] = React.useState<string | null>(null);
41
- const [password, setPassword] = React.useState("");
42
- const [confirmPassword, setConfirmPassword] = React.useState("");
43
-
44
- // Progressive disclosure, matching the signup block: the confirm field
45
- // appears once the new password clears the policy, the submit button once
46
- // the two match.
47
- const strongEnough = getPasswordStrength(password) >= minStrength;
48
- const matches = confirmPassword.length > 0 && confirmPassword === password;
49
- const canSubmit = strongEnough && matches;
50
-
51
- // Only flag a mismatch once the confirmation has diverged — while it is
52
- // still a prefix of the new password the user is simply mid-keystroke, and
53
- // nagging on every character would shake the field the whole way through.
54
- const mismatch =
55
- confirmPassword.length > 0 && !password.startsWith(confirmPassword);
56
-
57
- async function handleSubmit(event: React.FormEvent<HTMLFormElement>) {
58
- event.preventDefault();
59
- // Enter in any field submits the form even while the button is hidden.
60
- if (!canSubmit) return;
61
- setError(null);
62
- setStatus("loading");
63
- try {
64
- await onSubmit?.({ password });
65
- setStatus("success");
66
- } catch (cause) {
67
- setStatus("idle");
68
- setError(
69
- cause instanceof Error ? cause.message : "Unable to update password.",
70
- );
71
- }
72
- }
73
-
74
- return (
75
- <AuthCard
76
- title={title}
77
- description={description}
78
- logo={logo}
79
- accent={accent}
80
- >
81
- <MorphStep step={status === "success" ? "success" : "form"}>
82
- {status === "success" ? (
83
- <AuthSuccess
84
- title="Password updated"
85
- description="Your password has been changed successfully."
86
- >
87
- {onDone && (
88
- <Button variant="link" onClick={onDone}>
89
- Continue
90
- </Button>
91
- )}
92
- </AuthSuccess>
93
- ) : (
94
- <form className="flex flex-col gap-4" onSubmit={handleSubmit}>
95
- <Field name="password">
96
- <FieldLabel htmlFor={passwordId}>New password</FieldLabel>
97
- <PasswordInput
98
- id={passwordId}
99
- name="password"
100
- autoComplete="new-password"
101
- required
102
- showStrength
103
- disabled={status === "loading"}
104
- value={password}
105
- onChange={(event) => setPassword(event.target.value)}
106
- />
107
- </Field>
108
- <Reveal show={strongEnough}>
109
- <Field name="confirmPassword">
110
- <FieldLabel htmlFor={confirmId}>Confirm new password</FieldLabel>
111
- <PasswordInput
112
- id={confirmId}
113
- name="confirmPassword"
114
- autoComplete="new-password"
115
- required
116
- disabled={status === "loading"}
117
- value={confirmPassword}
118
- onChange={(event) => setConfirmPassword(event.target.value)}
119
- />
120
- </Field>
121
- </Reveal>
122
- <AuthError
123
- message={error ?? (mismatch ? "Passwords do not match." : null)}
124
- />
125
- <Reveal show={canSubmit}>
126
- <Button
127
- className={cn("w-full", accent && authAccentActionStyles)}
128
- type="submit"
129
- loading={status === "loading"}
130
- >
131
- Update password
132
- </Button>
133
- </Reveal>
134
- </form>
135
- )}
136
- </MorphStep>
137
- </AuthCard>
138
- );
139
- }
@@ -1,127 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import { useAtomValue, useSetAtom } from "jotai"
5
-
6
- import {
7
- DEFAULT_AUTH_FLOW_ID,
8
- authFlowStateAtom,
9
- beginAuthAttemptAtom,
10
- beginAuthVerificationAtom,
11
- completeAuthFlowAtom,
12
- endAuthSessionAtom,
13
- failAuthFlowAtom,
14
- goToAuthStepAtom,
15
- resetAuthFlowAtom,
16
- } from "./auth-flow-atom"
17
- import {
18
- authSessionStateAtom,
19
- isAuthenticatedAtom,
20
- markUnauthenticatedAtom,
21
- signInAtom,
22
- updateAuthUserAtom,
23
- } from "./auth-session-atom"
24
- import type {
25
- IAuthFlowActions,
26
- TAuthFlowId,
27
- IAuthFlowState,
28
- IAuthSessionActions,
29
- IAuthSessionState,
30
- } from "./type"
31
-
32
- /**
33
- * Read the auth flow registered under `flowId` from anywhere below
34
- * `ExegiaProvider`. Pairs with `useAuthFlowActions` to wire the auth blocks
35
- * into one flow — the blocks keep passwords and codes in local state, the
36
- * flow tracks which block shows and what identifier is in flight:
37
- *
38
- * ```tsx
39
- * const flow = useAuthFlow()
40
- * const { beginVerification, complete, fail } = useAuthFlowActions()
41
- *
42
- * {flow.step === "login" && (
43
- * <LoginBlock
44
- * onSubmit={async ({ email }) => {
45
- * await api.requestCode(email)
46
- * beginVerification({ identifier: email })
47
- * }}
48
- * />
49
- * )}
50
- * {flow.step === "verify-code" && (
51
- * <CodeAuthBlock
52
- * destination={flow.maskedIdentifier ?? undefined}
53
- * onVerify={async (code) => complete(await api.verify(code))}
54
- * />
55
- * )}
56
- * ```
57
- *
58
- * This returns the whole state object, so the caller re-renders on any
59
- * change. A component that reads one field should subscribe to that field's
60
- * atom instead: `useAtomValue(authFlowStepAtom(flowId))`.
61
- */
62
- export function useAuthFlow(
63
- flowId: TAuthFlowId = DEFAULT_AUTH_FLOW_ID
64
- ): IAuthFlowState {
65
- return useAtomValue(authFlowStateAtom(flowId))
66
- }
67
-
68
- /**
69
- * Drive the auth flow registered under `flowId` from anywhere. Writes only —
70
- * the caller never re-renders when the flow changes. See `useAuthFlow` for
71
- * the intended wiring; a block's submit handler typically runs
72
- * `beginAttempt()` → the API call → `complete(user)` or `fail(message)`.
73
- */
74
- export function useAuthFlowActions(
75
- flowId: TAuthFlowId = DEFAULT_AUTH_FLOW_ID
76
- ): IAuthFlowActions {
77
- const goToStep = useSetAtom(goToAuthStepAtom(flowId))
78
- const beginVerification = useSetAtom(beginAuthVerificationAtom(flowId))
79
- const beginAttempt = useSetAtom(beginAuthAttemptAtom(flowId))
80
- const fail = useSetAtom(failAuthFlowAtom(flowId))
81
- const complete = useSetAtom(completeAuthFlowAtom(flowId))
82
- const reset = useSetAtom(resetAuthFlowAtom(flowId))
83
-
84
- return React.useMemo(
85
- () => ({
86
- goToStep,
87
- beginVerification,
88
- beginAttempt,
89
- fail,
90
- complete,
91
- reset,
92
- }),
93
- [goToStep, beginVerification, beginAttempt, fail, complete, reset]
94
- )
95
- }
96
-
97
- /**
98
- * Read the session: `status` (`"unknown"` until the app restores or rejects
99
- * a session at boot), the signed-in `user`, and derived `isAuthenticated`.
100
- */
101
- export function useAuthSession(): IAuthSessionState & {
102
- isAuthenticated: boolean
103
- } {
104
- const state = useAtomValue(authSessionStateAtom)
105
- const isAuthenticated = useAtomValue(isAuthenticatedAtom)
106
- return React.useMemo(
107
- () => ({ ...state, isAuthenticated }),
108
- [state, isAuthenticated]
109
- )
110
- }
111
-
112
- /**
113
- * Drive the session. Writes only. `signOut` is the composite
114
- * `endAuthSessionAtom`: it clears the session AND returns the default flow
115
- * to the login step — the one to wire to a logout button.
116
- */
117
- export function useAuthSessionActions(): IAuthSessionActions {
118
- const signIn = useSetAtom(signInAtom)
119
- const updateUser = useSetAtom(updateAuthUserAtom)
120
- const markUnauthenticated = useSetAtom(markUnauthenticatedAtom)
121
- const signOut = useSetAtom(endAuthSessionAtom)
122
-
123
- return React.useMemo(
124
- () => ({ signIn, updateUser, markUnauthenticated, signOut }),
125
- [signIn, updateUser, markUnauthenticated, signOut]
126
- )
127
- }
@@ -1,65 +0,0 @@
1
- import { describe, expect, mock, test } from "bun:test"
2
- import { render, screen } from "@testing-library/react"
3
- import userEvent from "@testing-library/user-event"
4
- import { Provider } from "jotai"
5
- import { AiPanel, SelectionPopover, type IAiScope } from "../index"
6
- import { formatScopeLabel } from "../shared"
7
-
8
- const passageScope: IAiScope = {
9
- kind: "passage",
10
- label: "a.1",
11
- range: "¶1–¶2",
12
- nodeIds: ["p-1", "p-2"],
13
- }
14
-
15
- describe("AI curation component set", () => {
16
- test("keeps the word popover content and appends one Add to chat action", async () => {
17
- const onAddToChat = mock(() => {})
18
- const user = userEvent.setup()
19
- render(
20
- <SelectionPopover
21
- open
22
- onAddToChat={onAddToChat}
23
- variant="word"
24
- word={{
25
- lemma: "doctrina",
26
- partOfSpeech: "noun",
27
- frequency: 12,
28
- onViewDetails: mock(() => {}),
29
- }}
30
- >
31
- <span>doctrina in context</span>
32
- </SelectionPopover>
33
- )
34
-
35
- expect(screen.getByText("doctrina")).toBeDefined()
36
- expect(screen.getByText("noun · 12×")).toBeDefined()
37
- expect(screen.getByRole("button", { name: /View details/ })).toBeDefined()
38
- expect(screen.getAllByRole("button", { name: /Add to chat/ })).toHaveLength(
39
- 1
40
- )
41
- await user.click(screen.getByRole("button", { name: /Add to chat/ }))
42
- expect(onAddToChat).toHaveBeenCalledTimes(1)
43
- })
44
-
45
- test("formats range and pinned scope labels", () => {
46
- expect(formatScopeLabel(passageScope)).toBe("a.1 ¶1–¶2 · passage")
47
- expect(
48
- formatScopeLabel({ kind: "passage", label: "a.1 ¶1–¶2", pinned: true })
49
- ).toBe("PINNED · a.1 ¶1–¶2")
50
- })
51
-
52
- test("panel is a named region carrying the thread and the composer", () => {
53
- render(
54
- <Provider>
55
- <AiPanel scope={passageScope} thread={<p>Validate this passage.</p>} />
56
- </Provider>
57
- )
58
-
59
- expect(
60
- screen.getByRole("complementary", { name: "AI panel" })
61
- ).toBeDefined()
62
- expect(screen.getByText("Validate this passage.")).toBeDefined()
63
- expect(screen.getByRole("textbox", { name: "Message" })).toBeDefined()
64
- })
65
- })
@@ -1,61 +0,0 @@
1
- "use client"
2
-
3
- import type * as React from "react"
4
- import { cn } from "@/lib/utils"
5
- import { Button } from "@/components/ui/button"
6
- import { Alert, AlertAction, AlertDescription } from "@/components/ui/alert"
7
- import type { IDegradedBannerProps, ILockedBannerProps, IPinnedThreadBannerProps } from "./type"
8
-
9
- export function LockedBanner({
10
- children = "This published corpus is locked. Ask questions here, or continue in a working draft to make changes.",
11
- className,
12
- }: ILockedBannerProps): React.ReactElement {
13
- return (
14
- <Alert className={cn("rounded-sm text-xs", className)} role="status">
15
- <AlertDescription className="text-xs">
16
- <span>
17
- <span aria-hidden="true">🔒 </span>
18
- {children}
19
- </span>
20
- </AlertDescription>
21
- </Alert>
22
- )
23
- }
24
-
25
- export function PinnedThreadBanner({
26
- className,
27
- }: IPinnedThreadBannerProps): React.ReactElement {
28
- return (
29
- <Alert className={cn("rounded-sm", className)} role="status">
30
- <AlertDescription className="text-xs">
31
- Thread follows its passage, not your view.
32
- </AlertDescription>
33
- </Alert>
34
- )
35
- }
36
-
37
-
38
-
39
- export function DegradedBanner({
40
- reason = "The model is unavailable right now.",
41
- onRetry,
42
- className,
43
- }: IDegradedBannerProps): React.ReactElement {
44
- return (
45
- <Alert className={cn("rounded-sm", className)} variant="warning">
46
- <AlertDescription className="text-xs">{reason}</AlertDescription>
47
- {onRetry ? (
48
- <AlertAction>
49
- <Button
50
- className="font-normal"
51
- onClick={onRetry}
52
- size="xs"
53
- variant="outline"
54
- >
55
- Retry
56
- </Button>
57
- </AlertAction>
58
- ) : null}
59
- </Alert>
60
- )
61
- }
@@ -1,84 +0,0 @@
1
- "use client"
2
-
3
- import type * as React from "react"
4
- import { cn } from "@/lib/utils"
5
- import { Composer } from "@/components/composed/chat/composer"
6
- import { ScrollArea } from "@/components/ui/scroll-area"
7
- import Background from "@/components/atoms/background"
8
- import { AiPanelHeader } from "./header"
9
- import { SuggestedPrompts } from "./suggested-prompts"
10
- import type { IAiPanelProps } from "./type"
11
-
12
- /**
13
- * Full-height curation rail, designed to sit inside a host container such as
14
- * the shell's right panel — it brings no surface chrome or close affordance
15
- * of its own. Data fetching, streaming and version writes stay with the host
16
- * application; this component only establishes layout and the focus order
17
- * shared by all panel states.
18
- */
19
- export function AiPanel({
20
- onNewThread,
21
- thread,
22
- prompts = [],
23
- onPromptSelect,
24
- composerProps,
25
- locked = false,
26
- headerTitle = "AI panel",
27
- className,
28
- ...props
29
- }: IAiPanelProps): React.ReactElement {
30
- return (
31
- // A landmark, not a bare div: `aria-label` on a roleless element is not
32
- // exposed, so the panel would lose both its name and its region.
33
- <aside
34
- aria-label={headerTitle}
35
- className={cn(
36
- "relative flex h-full w-full flex-col bg-background",
37
- className
38
- )}
39
- data-slot="ai-panel"
40
- {...props}
41
- >
42
- <Background.Texture
43
- variant="paper"
44
- className="relative flex h-full w-full flex-col"
45
- >
46
- <AiPanelHeader
47
- locked={locked}
48
- onNewThread={onNewThread}
49
- title={headerTitle}
50
- />
51
-
52
- <div className="relative min-h-0 flex-1">
53
- <ScrollArea
54
- aria-label="Thread"
55
- role="region"
56
- scrollFade="bottom"
57
- fill
58
- >
59
- {/* `w-full`, not `mx-auto`: as a flex item, auto margins shrink the
60
- column to fit-content, so the thread would drift off the
61
- composer's gutters. px-3 lines it up with the footer. */}
62
- <div className="flex min-h-0 flex-1 flex-col px-5">
63
- <div className="w-full">{thread}</div>
64
- {!thread && (
65
- <div className="flex h-full min-h-44 flex-col justify-end">
66
- <SuggestedPrompts
67
- onSelect={onPromptSelect}
68
- prompts={prompts}
69
- />
70
- </div>
71
- )}
72
- </div>
73
- </ScrollArea>
74
- </div>
75
- <footer className="shrink-0 px-5 pb-3.5">
76
- <Composer
77
- {...composerProps}
78
- disabled={locked || composerProps?.disabled}
79
- />
80
- </footer>
81
- </Background.Texture>
82
- </aside>
83
- )
84
- }
@@ -1,60 +0,0 @@
1
- "use client"
2
-
3
- import type * as React from "react"
4
- import { cn } from "@/lib/utils"
5
- import { Button } from "@/components/ui/button"
6
- import { Lock, Plus } from "lucide-react"
7
- import { Tooltip, TooltipPopup, TooltipTrigger } from "@/components/ui/tooltip"
8
- import type { IAiPanelHeaderProps } from "./type"
9
-
10
- function LockedHint({ locked }: { locked?: boolean }): React.ReactElement {
11
- return (
12
- <Tooltip>
13
- <TooltipTrigger
14
- disabled={locked}
15
- render={
16
- <Button variant="ghost" size="icon-xs" className="opacity-50" />
17
- }
18
- >
19
- <Lock className="size-3" />
20
- </TooltipTrigger>
21
- <TooltipPopup side="bottom">
22
- <div>
23
- <div className="flex items-center gap-1">
24
- <Lock className="size-2.5" />
25
- <h6 className="text-sm">Published corpus</h6>
26
- </div>
27
- <p className="text-xs text-muted-foreground">
28
- Editing is disabled. Answers only.
29
- </p>
30
- </div>
31
- </TooltipPopup>
32
- </Tooltip>
33
- )
34
- }
35
-
36
- /** The panel's sticky top row: title, lock hint and the new-thread button. */
37
- export function AiPanelHeader({
38
- title,
39
- locked = false,
40
- onNewThread,
41
- }: IAiPanelHeaderProps): React.ReactElement {
42
- return (
43
- <header className="sticky top-0 flex shrink-0 flex-col items-center gap-2 border-b border-border bg-sidebar p-3.5">
44
- <div className="flex w-full flex-row items-center justify-between">
45
- <div className="flex flex-1 items-center">
46
- <h2 className="text-sm font-semibold text-foreground">{title}</h2>
47
- {!locked && <LockedHint locked={locked} />}
48
- </div>
49
- <Button
50
- className={cn("font-semibold")}
51
- onClick={onNewThread}
52
- size="icon-xs"
53
- variant="ghost"
54
- >
55
- <Plus className="size-4 stroke-3" />
56
- </Button>
57
- </div>
58
- </header>
59
- )
60
- }
@@ -1,37 +0,0 @@
1
- import { AiPanel } from "./base"
2
-
3
- export { AiPanel }
4
- export { AiPanelHeader } from "./header"
5
- export { SuggestedPrompts } from "./suggested-prompts"
6
- export { RecommendationStack } from "./recommendation-stack"
7
- export { DegradedBanner, LockedBanner, PinnedThreadBanner } from "./banners"
8
- export { VersionHistoryRecord } from "./version-history-record"
9
-
10
- export {
11
- AppliedMark,
12
- ApplyToast,
13
- SelectionHighlight,
14
- SelectionPopover,
15
- } from "@/components/composed/reader"
16
- export type {
17
- IAppliedMarkProps,
18
- IApplyToastProps,
19
- ISelectionHighlightProps,
20
- ISelectionPopoverProps,
21
- } from "@/components/composed/reader"
22
- export type {
23
- IAiPanelHeaderProps,
24
- IAiPanelProps,
25
- ILockedBannerProps,
26
- IAiScope,
27
- TAiScopeKind,
28
- TComposerMode,
29
- IDiffRow,
30
- INodeSelection,
31
- TSuggestionState,
32
- IVersionHistoryEntry,
33
- ISuggestedPromptsProps,
34
- IWordSelection,
35
- } from "./type"
36
-
37
- export default AiPanel
@@ -1,41 +0,0 @@
1
- "use client"
2
-
3
- import type * as React from "react"
4
- import { Group } from "@/components/ui/group"
5
- import { cn } from "@/lib/utils"
6
- import type { IRecommendationStackProps } from "./type"
7
-
8
-
9
-
10
- /**
11
- * Fuses a run of RecommendationCards into one bordered stack for the thread.
12
- *
13
- * The ui Group only fuses bordered direct children, but each card wraps its
14
- * frame in a borderless accordion root — so the frames are fused one level
15
- * down instead, and the Group-injected ::before (which would render as a
16
- * phantom flex item between the cards) is dropped.
17
- */
18
- export function RecommendationStack({
19
- className,
20
- children,
21
- ...props
22
- }: IRecommendationStackProps): React.ReactElement {
23
- return (
24
- <Group
25
- className={cn(
26
- "w-full *:before:content-none mt-3",
27
- "[&>*:not(:last-child)_[data-slot=recommendation-card]]:rounded-b-none",
28
- "[&>*:not(:last-child)_[data-slot=recommendation-card]]:before:rounded-b-none",
29
- "[&>*+*_[data-slot=recommendation-card]]:rounded-t-none",
30
- "[&>*+*_[data-slot=recommendation-card]]:border-t-0",
31
- "[&>*+*_[data-slot=recommendation-card]]:before:rounded-t-none",
32
- className
33
- )}
34
- data-slot="recommendation-stack"
35
- orientation="vertical"
36
- {...props}
37
- >
38
- {children}
39
- </Group>
40
- )
41
- }
@@ -1,27 +0,0 @@
1
- // The visual language (accent constants, ✦ icon, close glyph) lives with the
2
- // reusable AI components in `components/composed/ai`; the block re-uses it
3
- // from there.
4
- export {
5
- accentRing,
6
- accentSolid,
7
- accentText,
8
- ghostMuted,
9
- mutedText,
10
- surface,
11
- } from "@/components/composed/ai/shared"
12
-
13
- export function formatScopeLabel(scope: {
14
- kind: string
15
- label: string
16
- location?: string
17
- range?: string
18
- pinned?: boolean
19
- }): string {
20
- if (scope.pinned) {
21
- return `PINNED · ${scope.label}${scope.range ? ` ${scope.range}` : ""}`
22
- }
23
- if (scope.range && scope.kind === "passage") {
24
- return `${scope.label} ${scope.range} · passage`
25
- }
26
- return `${scope.label} · ${scope.kind}${scope.location ? ` · ${scope.location}` : ""}`
27
- }
@@ -1,45 +0,0 @@
1
- "use client"
2
-
3
- import type * as React from "react"
4
- import { cn } from "@/lib/utils"
5
- import { Button } from "@/components/ui/button"
6
- import { accentRing, mutedText } from "./shared"
7
- import { Sparkles } from "lucide-react"
8
- import type { ISuggestedPromptsProps } from "./type";
9
-
10
-
11
- export function SuggestedPrompts({
12
- prompts = [],
13
- onSelect,
14
- emptyLabel = "Ask about this selection or validate it against the schema.",
15
- className,
16
- }: ISuggestedPromptsProps): React.ReactElement | null {
17
- if (!prompts.length) {
18
- return (
19
- <p className={cn("px-1 py-3", mutedText, className)} data-empty="true">
20
- <Sparkles className="mr-1.5" />
21
- {emptyLabel}
22
- </p>
23
- )
24
- }
25
- return (
26
- <div
27
- className={cn("grid gap-1.5", className)}
28
- aria-label="Suggested prompts"
29
- >
30
- {prompts.map((prompt) => (
31
- <Button
32
- className={cn(
33
- "h-auto justify-start border bg-muted/30 px-3 py-2 text-left text-xs font-normal whitespace-normal text-muted-foreground hover:border-amber-500/30 hover:text-foreground sm:h-auto sm:text-xs",
34
- accentRing
35
- )}
36
- key={prompt}
37
- onClick={() => onSelect?.(prompt)}
38
- variant="ghost"
39
- >
40
- {prompt}
41
- </Button>
42
- ))}
43
- </div>
44
- )
45
- }