@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,619 +0,0 @@
1
- "use client"
2
-
3
- import {
4
- type DragEvent,
5
- type KeyboardEvent,
6
- useCallback,
7
- useEffect,
8
- useId,
9
- useMemo,
10
- useRef,
11
- useState,
12
- } from "react"
13
- import { useAtomValue, useSetAtom, useStore } from "jotai"
14
-
15
- import {
16
- aiSidebarAnnouncementAtom,
17
- aiSidebarDraggingIdAtom,
18
- aiSidebarDropTargetAtom,
19
- aiSidebarExpandedIdsAtom,
20
- aiSidebarFlatAtom,
21
- aiSidebarFocusedIdAtom,
22
- aiSidebarHoveredIdAtom,
23
- aiSidebarItemsAtom,
24
- aiSidebarMenuOpenIdAtom,
25
- aiSidebarMovePendingAtom,
26
- aiSidebarOwnActiveIdAtom,
27
- aiSidebarOwnedExpandedIdsAtom,
28
- aiSidebarOwnedItemsAtom,
29
- aiSidebarRenamingIdAtom,
30
- cancelAISidebarRenameAtom,
31
- clearAISidebarHoverAtom,
32
- closeAISidebarMenuAtom,
33
- collapseAISidebarRowAtom,
34
- collapseAllAISidebarRowsAtom,
35
- endAISidebarDragAtom,
36
- expandAISidebarRowAtom,
37
- expandAllAISidebarRowsAtom,
38
- focusAISidebarRowAtom,
39
- mountAISidebarAtom,
40
- moveAISidebarRowAtom,
41
- normalizeAISidebarFocusAtom,
42
- openAISidebarMenuAtom,
43
- projectAISidebarActiveIdAtom,
44
- projectAISidebarExpandedIdsAtom,
45
- projectAISidebarItemsAtom,
46
- removeAISidebarInstance,
47
- renameAISidebarRowAtom,
48
- resetAISidebarAtom,
49
- revealAISidebarRowAtom,
50
- selectAISidebarRowAtom,
51
- setAISidebarHandlersAtom,
52
- setAISidebarHoveredAtom,
53
- startAISidebarRenameAtom,
54
- toggleAISidebarRowAtom,
55
- } from "./ai-sidebar-atom.ts"
56
- import type {
57
- IAISidebarConfig,
58
- IAISidebarController,
59
- IAISidebarHandlers,
60
- IAISidebarSeed,
61
- IFlatResource,
62
- IUseAISidebarOptions,
63
- } from "./type.ts"
64
- import {
65
- canContain,
66
- containsResource,
67
- findResource,
68
- flattenResources,
69
- } from "./utils.ts"
70
-
71
- export type { IUseAISidebarOptions }
72
-
73
- /**
74
- * The AI sidebar's headless controller — every behaviour the block
75
- * performs, callable from outside it: select, expand/collapse (one row,
76
- * every row, or just the ancestors of one), move focus, rename, open a
77
- * row's action menu, reorder.
78
- *
79
- * `items`, `activeId` and `expandedIds` are each controlled when passed
80
- * and hook-owned via their `default*` twin otherwise. Reorder and rename
81
- * are applied to the data optimistically and rolled back if
82
- * `onMove`/`onRename` rejects, so a consumer never reduces the tree
83
- * itself — `moveResource` and `renameResource` are exported for the ones
84
- * who keep their data elsewhere.
85
- *
86
- * ```tsx
87
- * const sidebar = useAISidebar({ defaultItems: resources })
88
- * <AISidebar controller={sidebar} />
89
- * <Button onClick={sidebar.collapseAll}>Collapse all</Button>
90
- * ```
91
- *
92
- * State lives in Jotai atoms keyed by `sidebarId`, so anything under
93
- * `ExegiaProvider` can drive this sidebar without the controller — name it
94
- * and reach for `useAISidebarState(sidebarId)` /
95
- * `useAISidebarActions(sidebarId)` elsewhere.
96
- */
97
- export function useAISidebar(
98
- options: IUseAISidebarOptions
99
- ): IAISidebarController {
100
- const {
101
- items,
102
- defaultItems = [],
103
- onItemsChange,
104
- onMove,
105
- onMoveError,
106
- onRename,
107
- activeId,
108
- defaultActiveId = null,
109
- onActiveChange,
110
- onExpandedChange,
111
- } = options
112
-
113
- // A generated key isolates unnamed sidebars from each other; an explicit
114
- // `sidebarId` is the app's handle on this one.
115
- const generatedId = useId()
116
- const sidebarId = options.sidebarId ?? generatedId
117
- const store = useStore()
118
- const hoverLayoutId = useId()
119
-
120
- const controlledExpandedIds = options.expandedIds
121
- const controlsItems = items !== undefined
122
- const controlsActiveId = activeId !== undefined
123
- const controlsExpandedIds = controlledExpandedIds !== undefined
124
-
125
- // Primitives only, so this object is stable and the store write below runs
126
- // once per real change rather than once per render.
127
- const config = useMemo<IAISidebarConfig>(
128
- () => ({ controlsItems, controlsActiveId, controlsExpandedIds }),
129
- [controlsActiveId, controlsExpandedIds, controlsItems]
130
- )
131
-
132
- const handlers = useMemo<IAISidebarHandlers>(
133
- () => ({
134
- onItemsChange,
135
- onMove,
136
- onMoveError,
137
- onRename,
138
- onActiveChange,
139
- onExpandedChange,
140
- }),
141
- [
142
- onActiveChange,
143
- onExpandedChange,
144
- onItemsChange,
145
- onMove,
146
- onMoveError,
147
- onRename,
148
- ]
149
- )
150
-
151
- // Read once: the `default*` options describe the mount, not every render.
152
- const [seed] = useState<IAISidebarSeed>(() => ({
153
- items: items ?? defaultItems,
154
- activeId: defaultActiveId,
155
- focusedId: activeId ?? defaultActiveId,
156
- expandedIds: [
157
- ...(controlledExpandedIds ?? options.defaultExpandedIds ?? []),
158
- ],
159
- }))
160
-
161
- const mount = useSetAtom(mountAISidebarAtom(sidebarId))
162
- const publishHandlers = useSetAtom(setAISidebarHandlersAtom(sidebarId))
163
- const projectItems = useSetAtom(projectAISidebarItemsAtom(sidebarId))
164
- const projectActiveId = useSetAtom(projectAISidebarActiveIdAtom(sidebarId))
165
- const projectExpandedIds = useSetAtom(
166
- projectAISidebarExpandedIdsAtom(sidebarId)
167
- )
168
- const normalizeFocus = useSetAtom(normalizeAISidebarFocusAtom(sidebarId))
169
-
170
- // Reads BEFORE the write effects, and the writes in passive effects: jotai
171
- // (v3) subscribes `useAtomValue` in its own `useEffect` with no
172
- // post-subscription recheck, so a write from a `useLayoutEffect` (or from
173
- // any effect declared before the reads) lands before the subscription
174
- // exists and the sidebar never re-renders with the seeded state.
175
- // Never `aiSidebarItemsAtom` — see the note on `aiSidebarOwnedItemsAtom`.
176
- const ownedItems = useAtomValue(aiSidebarOwnedItemsAtom(sidebarId))
177
- const renderedItems = items ?? ownedItems
178
- // `activeId ?? own` rather than the projected atom: a controlled `activeId`
179
- // of `null` has always fallen through to the hook-owned selection.
180
- const ownActiveId = useAtomValue(aiSidebarOwnActiveIdAtom(sidebarId))
181
- const selectedId = activeId ?? ownActiveId
182
- const ownExpandedIds = useAtomValue(aiSidebarOwnedExpandedIdsAtom(sidebarId))
183
- const expandedIds = useMemo(
184
- () =>
185
- controlledExpandedIds ? new Set(controlledExpandedIds) : ownExpandedIds,
186
- [controlledExpandedIds, ownExpandedIds]
187
- )
188
- const focusedId = useAtomValue(aiSidebarFocusedIdAtom(sidebarId))
189
- const renamingId = useAtomValue(aiSidebarRenamingIdAtom(sidebarId))
190
- const menuOpenId = useAtomValue(aiSidebarMenuOpenIdAtom(sidebarId))
191
- const draggingId = useAtomValue(aiSidebarDraggingIdAtom(sidebarId))
192
- const dropTarget = useAtomValue(aiSidebarDropTargetAtom(sidebarId))
193
- const hoveredId = useAtomValue(aiSidebarHoveredIdAtom(sidebarId))
194
- const announcement = useAtomValue(aiSidebarAnnouncementAtom(sidebarId))
195
- const movePending = useAtomValue(aiSidebarMovePendingAtom(sidebarId))
196
-
197
- // Handlers first — they must be in the store before any action can fire.
198
- // Rewritten every commit; no read atom depends on them, so nobody
199
- // re-renders for it.
200
- useEffect(() => {
201
- publishHandlers(handlers)
202
- }, [handlers, publishHandlers])
203
-
204
- useEffect(() => {
205
- mount(config, seed)
206
- }, [config, mount, seed])
207
-
208
- // Controlled props stay the source of truth; the store carries a projection
209
- // so the action atoms and remote readers see current data.
210
- useEffect(() => {
211
- if (items !== undefined) projectItems(items)
212
- }, [items, projectItems])
213
-
214
- useEffect(() => {
215
- if (activeId !== undefined) projectActiveId(activeId)
216
- }, [activeId, projectActiveId])
217
-
218
- useEffect(() => {
219
- if (controlledExpandedIds !== undefined)
220
- projectExpandedIds(controlledExpandedIds)
221
- }, [controlledExpandedIds, projectExpandedIds])
222
-
223
- // A sidebar the hook keyed is scrap once its component goes. An explicit
224
- // `sidebarId` is the app's key and outlives the mount.
225
- useEffect(() => {
226
- if (options.sidebarId !== undefined) return
227
- return () => removeAISidebarInstance(sidebarId)
228
- }, [options.sidebarId, sidebarId])
229
-
230
- const flat = useMemo(
231
- () => flattenResources(renderedItems, expandedIds),
232
- [expandedIds, renderedItems]
233
- )
234
-
235
- // The roving target must name a row that still renders: one that folds away
236
- // hands focus to the first visible row instead of pointing at nothing. Last
237
- // of the effects, so it reads the projections this commit wrote.
238
- useEffect(() => {
239
- normalizeFocus()
240
- }, [flat, focusedId, normalizeFocus])
241
-
242
- useEffect(() => {
243
- if (!menuOpenId) return
244
- const frame = requestAnimationFrame(() => {
245
- const menus = Array.from(
246
- document.querySelectorAll<HTMLElement>("[data-sidebar-resource-menu]")
247
- )
248
- menus
249
- .find((menu) => menu.dataset.sidebarResourceMenu === menuOpenId)
250
- ?.querySelector<HTMLElement>("button, a[href]")
251
- ?.focus()
252
- })
253
- return () => cancelAnimationFrame(frame)
254
- }, [menuOpenId])
255
-
256
- const getItem = useCallback(
257
- (id: string) => findResource(renderedItems, id),
258
- [renderedItems]
259
- )
260
-
261
- const isExpanded = useCallback(
262
- (id: string) => expandedIds.has(id),
263
- [expandedIds]
264
- )
265
-
266
- // `useSetAtom` setters are already stable — no useCallback needed.
267
- const select = useSetAtom(selectAISidebarRowAtom(sidebarId))
268
- const expand = useSetAtom(expandAISidebarRowAtom(sidebarId))
269
- const collapse = useSetAtom(collapseAISidebarRowAtom(sidebarId))
270
- const toggleExpanded = useSetAtom(toggleAISidebarRowAtom(sidebarId))
271
- const expandAll = useSetAtom(expandAllAISidebarRowsAtom(sidebarId))
272
- const collapseAll = useSetAtom(collapseAllAISidebarRowsAtom(sidebarId))
273
- const reveal = useSetAtom(revealAISidebarRowAtom(sidebarId))
274
- const startRename = useSetAtom(startAISidebarRenameAtom(sidebarId))
275
- const cancelRename = useSetAtom(cancelAISidebarRenameAtom(sidebarId))
276
- const rename = useSetAtom(renameAISidebarRowAtom(sidebarId))
277
- const openMenu = useSetAtom(openAISidebarMenuAtom(sidebarId))
278
- const closeMenuInStore = useSetAtom(closeAISidebarMenuAtom(sidebarId))
279
- const move = useSetAtom(moveAISidebarRowAtom(sidebarId))
280
- const reset = useSetAtom(resetAISidebarAtom(sidebarId))
281
- const setFocusedRow = useSetAtom(focusAISidebarRowAtom(sidebarId))
282
- const onRowHover = useSetAtom(setAISidebarHoveredAtom(sidebarId))
283
- const clearHover = useSetAtom(clearAISidebarHoverAtom(sidebarId))
284
- const onRowDragEnd = useSetAtom(endAISidebarDragAtom(sidebarId))
285
- const setDraggingId = useSetAtom(aiSidebarDraggingIdAtom(sidebarId))
286
- const setDropTarget = useSetAtom(aiSidebarDropTargetAtom(sidebarId))
287
-
288
- // The one piece of row state that cannot live in the store: these are DOM
289
- // nodes. The block owns them, and every DOM focus move goes through here.
290
- const rowRefs = useRef(new Map<string, HTMLDivElement>())
291
-
292
- const setRowRef = useCallback((id: string, node: HTMLDivElement | null) => {
293
- if (node) rowRefs.current.set(id, node)
294
- else rowRefs.current.delete(id)
295
- }, [])
296
-
297
- const focusRow = useCallback((id: string) => {
298
- requestAnimationFrame(() => rowRefs.current.get(id)?.focus())
299
- }, [])
300
-
301
- const focus = useCallback(
302
- (id: string) => {
303
- setFocusedRow(id)
304
- focusRow(id)
305
- },
306
- [focusRow, setFocusedRow]
307
- )
308
-
309
- // Closing returns focus to the row that owned the menu — otherwise focus
310
- // falls back to the body and the keyboard user loses their place. The atom
311
- // hands back the id it closed so only the DOM half happens here.
312
- const closeMenu = useCallback(() => {
313
- const closed = closeMenuInStore()
314
- if (closed) focusRow(closed)
315
- }, [closeMenuInStore, focusRow])
316
-
317
- // Roving nav reads the visible rows out of the store when a key lands
318
- // rather than closing over them, so one stable handler serves every row.
319
- const readFlat = useCallback(
320
- () => store.get(aiSidebarFlatAtom(sidebarId)),
321
- [sidebarId, store]
322
- )
323
-
324
- const onRowKeyDown = useCallback(
325
- (event: KeyboardEvent<HTMLDivElement>, row: IFlatResource) => {
326
- const flatRows = readFlat()
327
- const expanded = store.get(aiSidebarExpandedIdsAtom(sidebarId))
328
- const index = flatRows.findIndex(({ item }) => item.id === row.item.id)
329
- const previous = flatRows[index - 1]
330
- const next = flatRows[index + 1]
331
- const moveModifier = event.altKey && event.shiftKey
332
-
333
- if (event.key === "ArrowDown" && !moveModifier && next) {
334
- event.preventDefault()
335
- focus(next.item.id)
336
- return
337
- }
338
- if (event.key === "ArrowUp" && !moveModifier && previous) {
339
- event.preventDefault()
340
- focus(previous.item.id)
341
- return
342
- }
343
- if (event.key === "Home" && flatRows[0]) {
344
- event.preventDefault()
345
- focus(flatRows[0].item.id)
346
- return
347
- }
348
- if (event.key === "End" && flatRows.at(-1)) {
349
- event.preventDefault()
350
- focus(flatRows.at(-1)?.item.id ?? row.item.id)
351
- return
352
- }
353
-
354
- if (row.item.disabled) {
355
- if (event.key === "ArrowLeft" && row.parentId) {
356
- event.preventDefault()
357
- focus(row.parentId)
358
- } else if (
359
- moveModifier ||
360
- ["ArrowRight", "Enter", " ", "F2", "ContextMenu"].includes(
361
- event.key
362
- ) ||
363
- (event.shiftKey && event.key === "F10")
364
- ) {
365
- event.preventDefault()
366
- }
367
- return
368
- }
369
-
370
- if (moveModifier && event.key === "ArrowUp" && previous) {
371
- event.preventDefault()
372
- void move({
373
- itemId: row.item.id,
374
- targetId: previous.item.id,
375
- position: "before",
376
- })
377
- return
378
- }
379
- if (moveModifier && event.key === "ArrowDown" && next) {
380
- event.preventDefault()
381
- void move({
382
- itemId: row.item.id,
383
- targetId: next.item.id,
384
- position: "after",
385
- })
386
- return
387
- }
388
- if (
389
- moveModifier &&
390
- event.key === "ArrowRight" &&
391
- previous &&
392
- canContain(previous.item)
393
- ) {
394
- event.preventDefault()
395
- expand(previous.item.id)
396
- void move({
397
- itemId: row.item.id,
398
- targetId: previous.item.id,
399
- position: "inside",
400
- })
401
- return
402
- }
403
- if (moveModifier && event.key === "ArrowLeft" && row.parentId) {
404
- event.preventDefault()
405
- void move({
406
- itemId: row.item.id,
407
- targetId: row.parentId,
408
- position: "after",
409
- })
410
- return
411
- }
412
-
413
- if (event.key === "ArrowRight" && canContain(row.item)) {
414
- event.preventDefault()
415
- if (!expanded.has(row.item.id)) expand(row.item.id)
416
- else if (next?.parentId === row.item.id) focus(next.item.id)
417
- } else if (event.key === "ArrowLeft") {
418
- event.preventDefault()
419
- if (expanded.has(row.item.id)) collapse(row.item.id)
420
- else if (row.parentId) focus(row.parentId)
421
- } else if (event.key === "Enter" || event.key === " ") {
422
- event.preventDefault()
423
- if (canContain(row.item)) toggleExpanded(row.item.id)
424
- else select(row.item.id)
425
- } else if (event.key === "F2") {
426
- event.preventDefault()
427
- startRename(row.item.id)
428
- } else if (
429
- event.key === "ContextMenu" ||
430
- (event.shiftKey && event.key === "F10")
431
- ) {
432
- event.preventDefault()
433
- openMenu(row.item.id)
434
- }
435
- },
436
- [
437
- collapse,
438
- expand,
439
- focus,
440
- move,
441
- openMenu,
442
- readFlat,
443
- select,
444
- sidebarId,
445
- startRename,
446
- store,
447
- toggleExpanded,
448
- ]
449
- )
450
-
451
- // The drag handlers read drag state out of the store when they run instead
452
- // of closing over it. That is what keeps them stable for the life of the
453
- // sidebar, so every row can share one set without re-rendering on a drag.
454
- const onRootDragOver = useCallback(
455
- (event: DragEvent<HTMLDivElement>) => {
456
- if (
457
- !store.get(aiSidebarDraggingIdAtom(sidebarId)) ||
458
- event.target !== event.currentTarget
459
- )
460
- return
461
- event.preventDefault()
462
- setDropTarget({ id: null, position: "after" })
463
- },
464
- [setDropTarget, sidebarId, store]
465
- )
466
-
467
- const onDrop = useCallback(
468
- (event: DragEvent<HTMLDivElement>) => {
469
- event.preventDefault()
470
- event.stopPropagation()
471
- const dragging = store.get(aiSidebarDraggingIdAtom(sidebarId))
472
- const target = store.get(aiSidebarDropTargetAtom(sidebarId))
473
- if (dragging && target) {
474
- void move({
475
- itemId: dragging,
476
- targetId: target.id,
477
- position: target.position,
478
- })
479
- }
480
- },
481
- [move, sidebarId, store]
482
- )
483
-
484
- const onRowDragStart = useCallback(
485
- (event: DragEvent<HTMLDivElement>, id: string) => {
486
- setDraggingId(id)
487
- event.dataTransfer.effectAllowed = "move"
488
- event.dataTransfer.setData("text/plain", id)
489
- },
490
- [setDraggingId]
491
- )
492
-
493
- const onRowDragOver = useCallback(
494
- (event: DragEvent<HTMLDivElement>, targetRow: IFlatResource) => {
495
- const dragging = store.get(aiSidebarDraggingIdAtom(sidebarId))
496
- if (!dragging || dragging === targetRow.item.id) return
497
- const source = findResource(
498
- store.get(aiSidebarItemsAtom(sidebarId)),
499
- dragging
500
- )
501
- if (source && containsResource(source, targetRow.item.id)) return
502
- event.preventDefault()
503
- event.stopPropagation()
504
- const rect = event.currentTarget.getBoundingClientRect()
505
- const ratio = (event.clientY - rect.top) / rect.height
506
- const position =
507
- !targetRow.item.disabled &&
508
- canContain(targetRow.item) &&
509
- ratio >= 0.25 &&
510
- ratio <= 0.75
511
- ? "inside"
512
- : ratio < 0.5
513
- ? "before"
514
- : "after"
515
- setDropTarget({ id: targetRow.item.id, position })
516
- },
517
- [setDropTarget, sidebarId, store]
518
- )
519
-
520
- const dnd = useMemo(
521
- () => ({
522
- draggingId,
523
- dropTarget,
524
- onRootDragOver,
525
- onDrop,
526
- onRowDragStart,
527
- onRowDragEnd,
528
- onRowDragOver,
529
- }),
530
- [
531
- draggingId,
532
- dropTarget,
533
- onRootDragOver,
534
- onDrop,
535
- onRowDragStart,
536
- onRowDragEnd,
537
- onRowDragOver,
538
- ]
539
- )
540
-
541
- const hover = useMemo(
542
- () => ({
543
- hoveredId,
544
- layoutId: hoverLayoutId,
545
- onRowHover,
546
- clear: clearHover,
547
- }),
548
- [clearHover, hoverLayoutId, hoveredId, onRowHover]
549
- )
550
-
551
- return useMemo<IAISidebarController>(
552
- () => ({
553
- sidebarId,
554
- items: renderedItems,
555
- flat,
556
- getItem,
557
- selectedId,
558
- select,
559
- expandedIds,
560
- isExpanded,
561
- expand,
562
- collapse,
563
- toggleExpanded,
564
- expandAll,
565
- collapseAll,
566
- reveal,
567
- focusedId,
568
- focus,
569
- renamingId,
570
- startRename,
571
- cancelRename,
572
- rename,
573
- menuOpenId,
574
- openMenu,
575
- closeMenu,
576
- move,
577
- movePending,
578
- announcement,
579
- reset,
580
- dnd,
581
- hover,
582
- onRowKeyDown,
583
- setRowRef,
584
- }),
585
- [
586
- sidebarId,
587
- renderedItems,
588
- flat,
589
- getItem,
590
- selectedId,
591
- select,
592
- expandedIds,
593
- isExpanded,
594
- expand,
595
- collapse,
596
- toggleExpanded,
597
- expandAll,
598
- collapseAll,
599
- reveal,
600
- focusedId,
601
- focus,
602
- renamingId,
603
- startRename,
604
- cancelRename,
605
- rename,
606
- menuOpenId,
607
- openMenu,
608
- closeMenu,
609
- move,
610
- movePending,
611
- announcement,
612
- reset,
613
- dnd,
614
- hover,
615
- onRowKeyDown,
616
- setRowRef,
617
- ]
618
- )
619
- }