@exegia/corpora-ui 2.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (588) hide show
  1. package/README.md +20 -0
  2. package/dist-lib/EVILCHARTS-LICENSE.txt +21 -0
  3. package/dist-lib/button-CIRkQXA6.js +152 -0
  4. package/dist-lib/button.js +3 -0
  5. package/dist-lib/card.js +150 -0
  6. package/dist-lib/components/atoms/text/default.d.ts +2 -1143
  7. package/dist-lib/components/blocks/shell/index.d.ts +1 -0
  8. package/dist-lib/components/composed/chat/chart/chart-atom.d.ts +30 -0
  9. package/dist-lib/components/composed/chat/chart/chart-context.d.ts +2 -0
  10. package/dist-lib/components/composed/chat/chart/chart-legend.d.ts +4 -0
  11. package/dist-lib/components/composed/chat/chart/chart-plot.d.ts +3 -0
  12. package/dist-lib/components/composed/chat/chart/chart-root.d.ts +3 -0
  13. package/dist-lib/components/composed/chat/chart/chart-tooltip.d.ts +4 -0
  14. package/dist-lib/components/composed/chat/chart/constants.d.ts +3 -0
  15. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-area-chart.d.ts +93 -0
  16. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-bar-chart.d.ts +86 -0
  17. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-brush.d.ts +65 -0
  18. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-chart.d.ts +44 -0
  19. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-dot.d.ts +16 -0
  20. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-legend.d.ts +24 -0
  21. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-line-chart.d.ts +90 -0
  22. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-pie-chart.d.ts +73 -0
  23. package/dist-lib/components/composed/chat/chart/evilcharts/echarts-tooltip.d.ts +29 -0
  24. package/dist-lib/components/composed/chat/chart/index.d.ts +6 -0
  25. package/dist-lib/components/composed/chat/chart/type.d.ts +80 -0
  26. package/dist-lib/components/composed/chat/chart/use-chart-state.d.ts +3 -0
  27. package/dist-lib/components/composed/chat/chart/use-chart.d.ts +6 -0
  28. package/dist-lib/components/composed/chat/chart/utils.d.ts +5 -0
  29. package/dist-lib/components/composed/chat/chart.d.ts +1 -44
  30. package/dist-lib/components/composed/chat/index.d.ts +1 -1
  31. package/dist-lib/components/ui/badge.d.ts +2 -2
  32. package/dist-lib/components/ui/button.d.ts +2 -2
  33. package/dist-lib/components/ui/glasscn/lazy-glass-surface.d.ts +6 -0
  34. package/dist-lib/components/ui/modal.d.ts +10 -0
  35. package/dist-lib/components/ui/overlays.d.ts +4 -0
  36. package/dist-lib/components/ui/select.d.ts +1 -1
  37. package/dist-lib/components/ui/toast.d.ts +2 -0
  38. package/dist-lib/ease-C9At8rnB.js +120 -0
  39. package/dist-lib/exegia-provider-DNTuLljX.js +124 -0
  40. package/dist-lib/index.css +3 -0
  41. package/dist-lib/index.d.ts +3 -0
  42. package/dist-lib/index.js +10283 -8224
  43. package/dist-lib/input.js +28 -0
  44. package/dist-lib/label.js +19 -0
  45. package/dist-lib/lib/segmented-control.d.ts +1 -1
  46. package/dist-lib/lib/state/exegia-provider.d.ts +17 -8
  47. package/dist-lib/lib/state/index.d.ts +2 -0
  48. package/dist-lib/lib/state/portal-context.d.ts +5 -0
  49. package/dist-lib/lib/state/sound-loading.d.ts +4 -0
  50. package/dist-lib/liquid-glass-BihU6nMl.js +50 -0
  51. package/dist-lib/modal-DLaOK-s1.js +82 -0
  52. package/dist-lib/overlays.js +3 -0
  53. package/dist-lib/rolldown-runtime-Dy4uBu1J.js +11 -0
  54. package/dist-lib/scaffold-Qv4hs5Pf.js +925 -0
  55. package/dist-lib/scaffold.js +2 -0
  56. package/dist-lib/shell-BQ9cjIEu.js +722 -0
  57. package/dist-lib/shell.js +2 -0
  58. package/dist-lib/sound-knGH4lj-.js +19 -0
  59. package/dist-lib/state.js +2 -0
  60. package/dist-lib/toast-CataVXHN.js +193 -0
  61. package/dist-lib/utils-BO0qfoA6.js +61 -0
  62. package/package.json +65 -23
  63. package/dist-lib/components/atoms/_layout.d.ts +0 -4
  64. package/dist-lib/components/atoms/bubble/__tests__/bubble.test.d.ts +0 -1
  65. package/dist-lib/components/atoms/bubble/__tests__/reference.test.d.ts +0 -1
  66. package/dist-lib/components/atoms/text/__tests__/text.test.d.ts +0 -1
  67. package/dist-lib/components/atoms/text-selection/__tests__/click-popover.test.d.ts +0 -1
  68. package/dist-lib/components/atoms/text-selection/__tests__/text-selection.test.d.ts +0 -1
  69. package/dist-lib/components/blocks/auth/__tests__/auth-flow-block.test.d.ts +0 -1
  70. package/dist-lib/components/blocks/auth/__tests__/auth-state-atom.test.d.ts +0 -1
  71. package/dist-lib/components/blocks/auth/__tests__/linked-accounts-block.test.d.ts +0 -1
  72. package/dist-lib/components/blocks/auth/__tests__/onboarding-block.test.d.ts +0 -1
  73. package/dist-lib/components/blocks/auth/__tests__/passkey-manager-block.test.d.ts +0 -1
  74. package/dist-lib/components/blocks/auth/__tests__/passkey-sign-in-block.test.d.ts +0 -1
  75. package/dist-lib/components/blocks/auth/__tests__/signup-block.test.d.ts +0 -1
  76. package/dist-lib/components/blocks/auth/__tests__/update-password-block.test.d.ts +0 -1
  77. package/dist-lib/components/blocks/chat/__tests__/ai-panel.test.d.ts +0 -1
  78. package/dist-lib/components/blocks/profile/__tests__/profile-card-block.test.d.ts +0 -1
  79. package/dist-lib/components/blocks/scaffold/__tests__/scaffold-atom.test.d.ts +0 -1
  80. package/dist-lib/components/blocks/scaffold/__tests__/scaffold.test.d.ts +0 -1
  81. package/dist-lib/components/blocks/shell/__tests__/shell-fit-atom.test.d.ts +0 -1
  82. package/dist-lib/components/blocks/shell/__tests__/shell-layout.test.d.ts +0 -1
  83. package/dist-lib/components/blocks/shell/__tests__/shell-metrics.test.d.ts +0 -1
  84. package/dist-lib/components/blocks/sidebar/__tests__/ai-sidebar-atom.test.d.ts +0 -1
  85. package/dist-lib/components/blocks/sidebar/__tests__/ai-sidebar.test.d.ts +0 -1
  86. package/dist-lib/components/blocks/sidebar/__tests__/use-ai-sidebar.test.d.ts +0 -1
  87. package/dist-lib/components/composed/__tests__/logo.test.d.ts +0 -1
  88. package/dist-lib/components/composed/action-bar/__tests__/action-bar.test.d.ts +0 -1
  89. package/dist-lib/components/composed/ai/__tests__/ai.test.d.ts +0 -1
  90. package/dist-lib/components/composed/chat/__tests__/attachment.test.d.ts +0 -1
  91. package/dist-lib/components/composed/chat/__tests__/beautiful-ui.test.d.ts +0 -1
  92. package/dist-lib/components/composed/chat/__tests__/chart.test.d.ts +0 -1
  93. package/dist-lib/components/composed/chat/__tests__/code-block.test.d.ts +0 -1
  94. package/dist-lib/components/composed/chat/__tests__/composer-attachments.test.d.ts +0 -1
  95. package/dist-lib/components/composed/chat/__tests__/composer.test.d.ts +0 -1
  96. package/dist-lib/components/composed/chat/__tests__/flowchart.test.d.ts +0 -1
  97. package/dist-lib/components/composed/chat/__tests__/glass-material.test.d.ts +0 -1
  98. package/dist-lib/components/composed/chat/__tests__/markdown.test.d.ts +0 -1
  99. package/dist-lib/components/composed/chat/__tests__/menu-command.test.d.ts +0 -1
  100. package/dist-lib/components/composed/chat/__tests__/recommendation.test.d.ts +0 -1
  101. package/dist-lib/components/composed/tree/__tests__/tree-atom.test.d.ts +0 -1
  102. package/dist-lib/components/composed/tree/__tests__/tree.test.d.ts +0 -1
  103. package/dist-lib/components/composed/tree/__tests__/use-tree.test.d.ts +0 -1
  104. package/dist-lib/components/composed/user/__tests__/message.test.d.ts +0 -1
  105. package/dist-lib/components/composed/verse/__tests__/verse.test.d.ts +0 -1
  106. package/dist-lib/components/docs/atoms-gallery.d.ts +0 -12
  107. package/dist-lib/components/docs/block-demo-stage.d.ts +0 -7
  108. package/dist-lib/components/docs/blocks-gallery.d.ts +0 -2
  109. package/dist-lib/components/docs/browser.d.ts +0 -10
  110. package/dist-lib/components/docs/code-block.d.ts +0 -4
  111. package/dist-lib/components/docs/components-gallery.d.ts +0 -2
  112. package/dist-lib/components/docs/demo-controls.d.ts +0 -21
  113. package/dist-lib/components/docs/hero.d.ts +0 -5
  114. package/dist-lib/components/docs/mermaid.d.ts +0 -3
  115. package/dist-lib/components/icons/__tests__/icons.test.d.ts +0 -1
  116. package/dist-lib/components/stories/attachment.story.d.ts +0 -11
  117. package/dist-lib/components/stories/auth-flow-block.story.d.ts +0 -2
  118. package/dist-lib/components/stories/avatar.story.d.ts +0 -6
  119. package/dist-lib/components/stories/base.story.d.ts +0 -6
  120. package/dist-lib/components/stories/bubble.story.d.ts +0 -6
  121. package/dist-lib/components/stories/button.story.d.ts +0 -9
  122. package/dist-lib/components/stories/card.story.d.ts +0 -8
  123. package/dist-lib/components/stories/chart.story.d.ts +0 -34
  124. package/dist-lib/components/stories/checkbox.story.d.ts +0 -6
  125. package/dist-lib/components/stories/code-auth-block.story.d.ts +0 -2
  126. package/dist-lib/components/stories/code-block.story.d.ts +0 -12
  127. package/dist-lib/components/stories/composed-password-input.story.d.ts +0 -6
  128. package/dist-lib/components/stories/context-cards.story.d.ts +0 -3
  129. package/dist-lib/components/stories/emoji-action-bar.story.d.ts +0 -3
  130. package/dist-lib/components/stories/field.story.d.ts +0 -6
  131. package/dist-lib/components/stories/file-icons.story.d.ts +0 -5
  132. package/dist-lib/components/stories/filter-table.story.d.ts +0 -21
  133. package/dist-lib/components/stories/flowchart.story.d.ts +0 -3
  134. package/dist-lib/components/stories/forgot-password-block.story.d.ts +0 -2
  135. package/dist-lib/components/stories/frame.story.d.ts +0 -8
  136. package/dist-lib/components/stories/index.d.ts +0 -54
  137. package/dist-lib/components/stories/input-group.story.d.ts +0 -6
  138. package/dist-lib/components/stories/input.story.d.ts +0 -8
  139. package/dist-lib/components/stories/insight-cards.story.d.ts +0 -45
  140. package/dist-lib/components/stories/label.story.d.ts +0 -8
  141. package/dist-lib/components/stories/linked-accounts-block.story.d.ts +0 -2
  142. package/dist-lib/components/stories/login-block.story.d.ts +0 -2
  143. package/dist-lib/components/stories/logo.story.d.ts +0 -3
  144. package/dist-lib/components/stories/markdown.story.d.ts +0 -7
  145. package/dist-lib/components/stories/menu-command.story.d.ts +0 -13
  146. package/dist-lib/components/stories/onboarding-block.story.d.ts +0 -2
  147. package/dist-lib/components/stories/otp-field.story.d.ts +0 -8
  148. package/dist-lib/components/stories/passkey-manager-block.story.d.ts +0 -2
  149. package/dist-lib/components/stories/passkey-sign-in-block.story.d.ts +0 -2
  150. package/dist-lib/components/stories/password-input.story.d.ts +0 -9
  151. package/dist-lib/components/stories/profile-card-block.story.d.ts +0 -6
  152. package/dist-lib/components/stories/recommendation-card.story.d.ts +0 -3
  153. package/dist-lib/components/stories/records-table.story.d.ts +0 -23
  154. package/dist-lib/components/stories/reference.story.d.ts +0 -9
  155. package/dist-lib/components/stories/research-answer.story.d.ts +0 -10
  156. package/dist-lib/components/stories/scaffold-root.story.d.ts +0 -6
  157. package/dist-lib/components/stories/separator.story.d.ts +0 -6
  158. package/dist-lib/components/stories/shell-layout.story.d.ts +0 -2
  159. package/dist-lib/components/stories/signup-block.story.d.ts +0 -2
  160. package/dist-lib/components/stories/social-providers.story.d.ts +0 -3
  161. package/dist-lib/components/stories/streaming-text.story.d.ts +0 -3
  162. package/dist-lib/components/stories/text.story.d.ts +0 -8
  163. package/dist-lib/components/stories/textarea.story.d.ts +0 -6
  164. package/dist-lib/components/stories/tree.story.d.ts +0 -4
  165. package/dist-lib/components/stories/update-password-block.story.d.ts +0 -2
  166. package/dist-lib/components/stories/user.story.d.ts +0 -8
  167. package/dist-lib/components/stories/verse.story.d.ts +0 -6
  168. package/dist-lib/components/ui/chat/__tests__/segmented-toggle.test.d.ts +0 -1
  169. package/dist-lib/index.js.map +0 -1
  170. package/dist-lib/lib/state/__tests__/sound.test.d.ts +0 -1
  171. package/dist-lib/lib/utils.test.d.ts +0 -1
  172. package/src/assets/css/base.css +0 -62
  173. package/src/assets/css/chat.css +0 -229
  174. package/src/assets/css/shadows.css +0 -157
  175. package/src/assets/css/theme.css +0 -321
  176. package/src/components/AGENTS.md +0 -0
  177. package/src/components/atoms/_layout.tsx +0 -9
  178. package/src/components/atoms/avatar/base.tsx +0 -70
  179. package/src/components/atoms/avatar/index.ts +0 -10
  180. package/src/components/atoms/avatar/types.ts +0 -24
  181. package/src/components/atoms/avatar/utils.ts +0 -54
  182. package/src/components/atoms/avatar/verified.tsx +0 -16
  183. package/src/components/atoms/background/index.ts +0 -8
  184. package/src/components/atoms/background/texture.tsx +0 -29
  185. package/src/components/atoms/background/type.ts +0 -10
  186. package/src/components/atoms/background/utils.ts +0 -13
  187. package/src/components/atoms/bubble/__tests__/bubble.test.tsx +0 -193
  188. package/src/components/atoms/bubble/__tests__/reference.test.tsx +0 -25
  189. package/src/components/atoms/bubble/actions.tsx +0 -28
  190. package/src/components/atoms/bubble/context.ts +0 -11
  191. package/src/components/atoms/bubble/default.tsx +0 -46
  192. package/src/components/atoms/bubble/header.tsx +0 -36
  193. package/src/components/atoms/bubble/index.ts +0 -37
  194. package/src/components/atoms/bubble/message.tsx +0 -32
  195. package/src/components/atoms/bubble/reactions.tsx +0 -191
  196. package/src/components/atoms/bubble/types.ts +0 -82
  197. package/src/components/atoms/bubble/utils.ts +0 -46
  198. package/src/components/atoms/chip.tsx +0 -61
  199. package/src/components/atoms/field.tsx +0 -43
  200. package/src/components/atoms/index.ts +0 -26
  201. package/src/components/atoms/loader.tsx +0 -33
  202. package/src/components/atoms/reference.tsx +0 -41
  203. package/src/components/atoms/text/__tests__/text.test.tsx +0 -47
  204. package/src/components/atoms/text/default.tsx +0 -59
  205. package/src/components/atoms/text/heading.tsx +0 -58
  206. package/src/components/atoms/text/index.ts +0 -28
  207. package/src/components/atoms/text/label.tsx +0 -16
  208. package/src/components/atoms/text/paragraph.tsx +0 -55
  209. package/src/components/atoms/text/span.tsx +0 -14
  210. package/src/components/atoms/text/types.ts +0 -41
  211. package/src/components/atoms/text/utils.ts +0 -16
  212. package/src/components/atoms/text-selection/__tests__/click-popover.test.tsx +0 -61
  213. package/src/components/atoms/text-selection/__tests__/text-selection.test.tsx +0 -90
  214. package/src/components/atoms/text-selection/click-popover.tsx +0 -62
  215. package/src/components/atoms/text-selection/index.ts +0 -30
  216. package/src/components/atoms/text-selection/popover.tsx +0 -103
  217. package/src/components/atoms/text-selection/selection-atom.ts +0 -51
  218. package/src/components/atoms/text-selection/selection.tsx +0 -56
  219. package/src/components/atoms/text-selection/types.ts +0 -125
  220. package/src/components/atoms/text-selection/use-selection.ts +0 -84
  221. package/src/components/atoms/types.ts +0 -46
  222. package/src/components/blocks/.gitkeep +0 -0
  223. package/src/components/blocks/auth/__tests__/auth-flow-block.test.tsx +0 -183
  224. package/src/components/blocks/auth/__tests__/auth-state-atom.test.tsx +0 -247
  225. package/src/components/blocks/auth/__tests__/linked-accounts-block.test.tsx +0 -128
  226. package/src/components/blocks/auth/__tests__/onboarding-block.test.tsx +0 -183
  227. package/src/components/blocks/auth/__tests__/passkey-manager-block.test.tsx +0 -131
  228. package/src/components/blocks/auth/__tests__/passkey-sign-in-block.test.tsx +0 -59
  229. package/src/components/blocks/auth/__tests__/signup-block.test.tsx +0 -176
  230. package/src/components/blocks/auth/__tests__/update-password-block.test.tsx +0 -95
  231. package/src/components/blocks/auth/auth-flow-atom.ts +0 -238
  232. package/src/components/blocks/auth/auth-flow-block.tsx +0 -211
  233. package/src/components/blocks/auth/auth-session-atom.ts +0 -82
  234. package/src/components/blocks/auth/auth-shell.tsx +0 -265
  235. package/src/components/blocks/auth/auth-state.ts +0 -40
  236. package/src/components/blocks/auth/code-auth-block.tsx +0 -176
  237. package/src/components/blocks/auth/forgot-password-block.tsx +0 -112
  238. package/src/components/blocks/auth/linked-accounts-block.tsx +0 -203
  239. package/src/components/blocks/auth/login-block.tsx +0 -217
  240. package/src/components/blocks/auth/onboarding/profile-step.tsx +0 -216
  241. package/src/components/blocks/auth/onboarding-block.tsx +0 -183
  242. package/src/components/blocks/auth/passkey-manager-block.tsx +0 -316
  243. package/src/components/blocks/auth/passkey-sign-in-block.tsx +0 -67
  244. package/src/components/blocks/auth/signup-block.tsx +0 -256
  245. package/src/components/blocks/auth/type.ts +0 -436
  246. package/src/components/blocks/auth/update-password-block.tsx +0 -139
  247. package/src/components/blocks/auth/use-auth-state.ts +0 -127
  248. package/src/components/blocks/chat/__tests__/ai-panel.test.tsx +0 -65
  249. package/src/components/blocks/chat/banners.tsx +0 -61
  250. package/src/components/blocks/chat/base.tsx +0 -84
  251. package/src/components/blocks/chat/header.tsx +0 -60
  252. package/src/components/blocks/chat/index.ts +0 -37
  253. package/src/components/blocks/chat/recommendation-stack.tsx +0 -41
  254. package/src/components/blocks/chat/shared.tsx +0 -27
  255. package/src/components/blocks/chat/suggested-prompts.tsx +0 -45
  256. package/src/components/blocks/chat/type.ts +0 -96
  257. package/src/components/blocks/chat/version-history-record.tsx +0 -37
  258. package/src/components/blocks/layout.ts +0 -35
  259. package/src/components/blocks/profile/__tests__/profile-card-block.test.tsx +0 -362
  260. package/src/components/blocks/profile/index.ts +0 -28
  261. package/src/components/blocks/profile/profile-card-atom.ts +0 -247
  262. package/src/components/blocks/profile/profile-card-block.tsx +0 -369
  263. package/src/components/blocks/profile/type.ts +0 -93
  264. package/src/components/blocks/profile/use-profile-card-state.ts +0 -67
  265. package/src/components/blocks/profile/use-profile-card.ts +0 -132
  266. package/src/components/blocks/scaffold/__tests__/scaffold-atom.test.tsx +0 -236
  267. package/src/components/blocks/scaffold/__tests__/scaffold.test.tsx +0 -524
  268. package/src/components/blocks/scaffold/constants.ts +0 -39
  269. package/src/components/blocks/scaffold/index.ts +0 -60
  270. package/src/components/blocks/scaffold/panel-close-button.tsx +0 -36
  271. package/src/components/blocks/scaffold/panel-menu-button.tsx +0 -221
  272. package/src/components/blocks/scaffold/scaffold-actions.tsx +0 -92
  273. package/src/components/blocks/scaffold/scaffold-atom.ts +0 -427
  274. package/src/components/blocks/scaffold/scaffold-canvas.tsx +0 -162
  275. package/src/components/blocks/scaffold/scaffold-context.ts +0 -20
  276. package/src/components/blocks/scaffold/scaffold-inspector.tsx +0 -137
  277. package/src/components/blocks/scaffold/scaffold-main.tsx +0 -28
  278. package/src/components/blocks/scaffold/scaffold-panel.tsx +0 -186
  279. package/src/components/blocks/scaffold/scaffold-root.tsx +0 -120
  280. package/src/components/blocks/scaffold/scaffold-sidebar.tsx +0 -31
  281. package/src/components/blocks/scaffold/scaffold-sub-panel.tsx +0 -122
  282. package/src/components/blocks/scaffold/scaffold-tab.tsx +0 -108
  283. package/src/components/blocks/scaffold/type.ts +0 -264
  284. package/src/components/blocks/scaffold/use-scaffold-state.ts +0 -85
  285. package/src/components/blocks/scaffold/use-scaffold.ts +0 -59
  286. package/src/components/blocks/scaffold/utils.ts +0 -112
  287. package/src/components/blocks/shell/__tests__/shell-fit-atom.test.tsx +0 -362
  288. package/src/components/blocks/shell/__tests__/shell-layout.test.tsx +0 -596
  289. package/src/components/blocks/shell/__tests__/shell-metrics.test.ts +0 -154
  290. package/src/components/blocks/shell/animated-panel-inset.tsx +0 -27
  291. package/src/components/blocks/shell/animated-panel-provider.tsx +0 -269
  292. package/src/components/blocks/shell/animated-panel-trigger.tsx +0 -51
  293. package/src/components/blocks/shell/animated-panel.tsx +0 -180
  294. package/src/components/blocks/shell/index.ts +0 -30
  295. package/src/components/blocks/shell/shell-fit-atom.ts +0 -246
  296. package/src/components/blocks/shell/shell-layout.tsx +0 -139
  297. package/src/components/blocks/shell/shell-metrics.ts +0 -133
  298. package/src/components/blocks/shell/shell-panel-atom.ts +0 -74
  299. package/src/components/blocks/shell/type.ts +0 -361
  300. package/src/components/blocks/shell/use-shell-fit-state.ts +0 -49
  301. package/src/components/blocks/shell/use-shell-fit.ts +0 -153
  302. package/src/components/blocks/shell/use-shell-panels.ts +0 -126
  303. package/src/components/blocks/shell/utils.ts +0 -187
  304. package/src/components/blocks/sidebar/__tests__/ai-sidebar-atom.test.tsx +0 -325
  305. package/src/components/blocks/sidebar/__tests__/ai-sidebar.test.tsx +0 -93
  306. package/src/components/blocks/sidebar/__tests__/use-ai-sidebar.test.tsx +0 -310
  307. package/src/components/blocks/sidebar/ai-sidebar-atom.ts +0 -698
  308. package/src/components/blocks/sidebar/ai-sidebar.tsx +0 -150
  309. package/src/components/blocks/sidebar/index.ts +0 -67
  310. package/src/components/blocks/sidebar/marquee-label.tsx +0 -59
  311. package/src/components/blocks/sidebar/sidebar-context.ts +0 -15
  312. package/src/components/blocks/sidebar/sidebar-icon.tsx +0 -14
  313. package/src/components/blocks/sidebar/sidebar-row.tsx +0 -378
  314. package/src/components/blocks/sidebar/type.ts +0 -294
  315. package/src/components/blocks/sidebar/use-ai-sidebar-state.ts +0 -123
  316. package/src/components/blocks/sidebar/use-ai-sidebar.ts +0 -619
  317. package/src/components/blocks/sidebar/utils.ts +0 -170
  318. package/src/components/blocks/types.ts +0 -6
  319. package/src/components/composed/.gitkeep +0 -0
  320. package/src/components/composed/__tests__/logo.test.tsx +0 -60
  321. package/src/components/composed/action-bar/__tests__/action-bar.test.tsx +0 -125
  322. package/src/components/composed/action-bar/action.tsx +0 -77
  323. package/src/components/composed/action-bar/emojis.tsx +0 -97
  324. package/src/components/composed/action-bar/index.ts +0 -24
  325. package/src/components/composed/action-bar/toolbar.tsx +0 -66
  326. package/src/components/composed/action-bar/types.ts +0 -58
  327. package/src/components/composed/action-bar/utils.ts +0 -140
  328. package/src/components/composed/ai/__tests__/ai.test.tsx +0 -66
  329. package/src/components/composed/ai/avatar.tsx +0 -19
  330. package/src/components/composed/ai/index.ts +0 -36
  331. package/src/components/composed/ai/message.tsx +0 -49
  332. package/src/components/composed/ai/research-answer.tsx +0 -157
  333. package/src/components/composed/ai/shared.tsx +0 -94
  334. package/src/components/composed/ai/streaming-text.tsx +0 -94
  335. package/src/components/composed/ai/suggested-prompt.tsx +0 -183
  336. package/src/components/composed/ai/types.ts +0 -81
  337. package/src/components/composed/chat/__tests__/attachment.test.tsx +0 -218
  338. package/src/components/composed/chat/__tests__/beautiful-ui.test.tsx +0 -57
  339. package/src/components/composed/chat/__tests__/chart.test.tsx +0 -62
  340. package/src/components/composed/chat/__tests__/code-block.test.tsx +0 -12
  341. package/src/components/composed/chat/__tests__/composer-attachments.test.tsx +0 -101
  342. package/src/components/composed/chat/__tests__/composer.test.tsx +0 -248
  343. package/src/components/composed/chat/__tests__/flowchart.test.tsx +0 -145
  344. package/src/components/composed/chat/__tests__/glass-material.test.tsx +0 -54
  345. package/src/components/composed/chat/__tests__/markdown.test.tsx +0 -25
  346. package/src/components/composed/chat/__tests__/menu-command.test.tsx +0 -35
  347. package/src/components/composed/chat/__tests__/recommendation.test.tsx +0 -43
  348. package/src/components/composed/chat/actions.tsx +0 -81
  349. package/src/components/composed/chat/attachment-file.ts +0 -82
  350. package/src/components/composed/chat/attachment.tsx +0 -498
  351. package/src/components/composed/chat/chart.tsx +0 -401
  352. package/src/components/composed/chat/code-block.tsx +0 -123
  353. package/src/components/composed/chat/composer/add-button.tsx +0 -29
  354. package/src/components/composed/chat/composer/base.tsx +0 -573
  355. package/src/components/composed/chat/composer/command-menu.tsx +0 -47
  356. package/src/components/composed/chat/composer/hooks.ts +0 -29
  357. package/src/components/composed/chat/composer/index.ts +0 -19
  358. package/src/components/composed/chat/composer/send-button.tsx +0 -36
  359. package/src/components/composed/chat/composer/suggestions.tsx +0 -115
  360. package/src/components/composed/chat/composer/use-dictation.ts +0 -123
  361. package/src/components/composed/chat/composer/utils.ts +0 -74
  362. package/src/components/composed/chat/context-cards.tsx +0 -63
  363. package/src/components/composed/chat/filter-table.tsx +0 -119
  364. package/src/components/composed/chat/flowchart/chart-node.tsx +0 -162
  365. package/src/components/composed/chat/flowchart/connector.tsx +0 -32
  366. package/src/components/composed/chat/flowchart/constant.ts +0 -26
  367. package/src/components/composed/chat/flowchart/default.tsx +0 -230
  368. package/src/components/composed/chat/flowchart/edge-toolbar.tsx +0 -73
  369. package/src/components/composed/chat/flowchart/hooks.tsx +0 -347
  370. package/src/components/composed/chat/flowchart/index.ts +0 -14
  371. package/src/components/composed/chat/flowchart/step-body.tsx +0 -82
  372. package/src/components/composed/chat/flowchart/types.ts +0 -89
  373. package/src/components/composed/chat/flowchart/utils.ts +0 -78
  374. package/src/components/composed/chat/hint.tsx +0 -59
  375. package/src/components/composed/chat/index.ts +0 -98
  376. package/src/components/composed/chat/insight-cards.tsx +0 -199
  377. package/src/components/composed/chat/markdown-atom.ts +0 -15
  378. package/src/components/composed/chat/markdown.tsx +0 -213
  379. package/src/components/composed/chat/recommendation/checkbox.tsx +0 -122
  380. package/src/components/composed/chat/recommendation/constant.ts +0 -54
  381. package/src/components/composed/chat/recommendation/default.tsx +0 -25
  382. package/src/components/composed/chat/recommendation/group.tsx +0 -36
  383. package/src/components/composed/chat/recommendation/index.ts +0 -17
  384. package/src/components/composed/chat/recommendation/item.tsx +0 -215
  385. package/src/components/composed/chat/recommendation/types.ts +0 -76
  386. package/src/components/composed/chat/records-table.tsx +0 -130
  387. package/src/components/composed/chat/type.ts +0 -157
  388. package/src/components/composed/logo.tsx +0 -171
  389. package/src/components/composed/password-input.tsx +0 -179
  390. package/src/components/composed/reader/applied-mark.tsx +0 -32
  391. package/src/components/composed/reader/apply-toast.tsx +0 -49
  392. package/src/components/composed/reader/index.ts +0 -10
  393. package/src/components/composed/reader/selection-highlight.tsx +0 -26
  394. package/src/components/composed/reader/selection-popover.tsx +0 -149
  395. package/src/components/composed/reader/type.ts +0 -48
  396. package/src/components/composed/social-providers.tsx +0 -154
  397. package/src/components/composed/tree/CLAUDE.md +0 -145
  398. package/src/components/composed/tree/__tests__/tree-atom.test.tsx +0 -217
  399. package/src/components/composed/tree/__tests__/tree.test.tsx +0 -522
  400. package/src/components/composed/tree/__tests__/use-tree.test.tsx +0 -333
  401. package/src/components/composed/tree/constants.ts +0 -55
  402. package/src/components/composed/tree/index.ts +0 -51
  403. package/src/components/composed/tree/tree-atom.ts +0 -590
  404. package/src/components/composed/tree/tree-context.ts +0 -13
  405. package/src/components/composed/tree/tree-node.tsx +0 -496
  406. package/src/components/composed/tree/tree.tsx +0 -233
  407. package/src/components/composed/tree/type.ts +0 -322
  408. package/src/components/composed/tree/use-tree-dnd.ts +0 -179
  409. package/src/components/composed/tree/use-tree-state.ts +0 -105
  410. package/src/components/composed/tree/use-tree.ts +0 -311
  411. package/src/components/composed/tree/utils.ts +0 -172
  412. package/src/components/composed/types.ts +0 -9
  413. package/src/components/composed/user/__tests__/message.test.tsx +0 -79
  414. package/src/components/composed/user/index.ts +0 -14
  415. package/src/components/composed/user/info.tsx +0 -56
  416. package/src/components/composed/user/message.tsx +0 -36
  417. package/src/components/composed/user/pill.tsx +0 -20
  418. package/src/components/composed/user/types.ts +0 -47
  419. package/src/components/composed/user/utils.ts +0 -0
  420. package/src/components/composed/verse/__tests__/verse.test.tsx +0 -57
  421. package/src/components/composed/verse/index.ts +0 -2
  422. package/src/components/composed/verse/types.ts +0 -24
  423. package/src/components/composed/verse/verse.tsx +0 -100
  424. package/src/components/docs/atoms-gallery.tsx +0 -286
  425. package/src/components/docs/block-demo-stage.tsx +0 -38
  426. package/src/components/docs/blocks-gallery.tsx +0 -224
  427. package/src/components/docs/browser.tsx +0 -87
  428. package/src/components/docs/code-block.tsx +0 -10
  429. package/src/components/docs/components-gallery.tsx +0 -182
  430. package/src/components/docs/demo-controls.tsx +0 -142
  431. package/src/components/docs/hero.tsx +0 -197
  432. package/src/components/docs/mermaid.tsx +0 -55
  433. package/src/components/icons/README.md +0 -91
  434. package/src/components/icons/__tests__/icons.test.tsx +0 -58
  435. package/src/components/icons/file-badge-cfm.tsx +0 -615
  436. package/src/components/icons/file-badge-corpus.tsx +0 -604
  437. package/src/components/icons/file-badge-pdf.tsx +0 -570
  438. package/src/components/icons/file-badge-tei.tsx +0 -524
  439. package/src/components/icons/file-badge-tf.tsx +0 -620
  440. package/src/components/icons/file-badge-txt.tsx +0 -607
  441. package/src/components/icons/file-badge-xml.tsx +0 -576
  442. package/src/components/icons/file-wordmark-cfm.tsx +0 -424
  443. package/src/components/icons/file-wordmark-corpus.tsx +0 -454
  444. package/src/components/icons/file-wordmark-pdf.tsx +0 -470
  445. package/src/components/icons/file-wordmark-tei.tsx +0 -424
  446. package/src/components/icons/file-wordmark-tf.tsx +0 -406
  447. package/src/components/icons/file-wordmark-txt.tsx +0 -421
  448. package/src/components/icons/file-wordmark-xml.tsx +0 -424
  449. package/src/components/icons/index.ts +0 -16
  450. package/src/components/icons/types.ts +0 -8
  451. package/src/components/motion/index.ts +0 -0
  452. package/src/components/motion/overflow-actions.tsx +0 -376
  453. package/src/components/motion/popover-morph.tsx +0 -292
  454. package/src/components/motion/popover-position.ts +0 -86
  455. package/src/components/motion/shared-layout-bg.tsx +0 -151
  456. package/src/components/stories/attachment.story.tsx +0 -40
  457. package/src/components/stories/auth-flow-block.story.tsx +0 -17
  458. package/src/components/stories/avatar.story.tsx +0 -33
  459. package/src/components/stories/base.story.tsx +0 -70
  460. package/src/components/stories/bubble.story.tsx +0 -61
  461. package/src/components/stories/button.story.tsx +0 -32
  462. package/src/components/stories/card.story.tsx +0 -36
  463. package/src/components/stories/chart.story.tsx +0 -54
  464. package/src/components/stories/checkbox.story.tsx +0 -30
  465. package/src/components/stories/code-auth-block.story.tsx +0 -20
  466. package/src/components/stories/code-block.story.tsx +0 -35
  467. package/src/components/stories/composed-password-input.story.tsx +0 -41
  468. package/src/components/stories/context-cards.story.tsx +0 -30
  469. package/src/components/stories/emoji-action-bar.story.tsx +0 -20
  470. package/src/components/stories/field.story.tsx +0 -32
  471. package/src/components/stories/file-icons.story.tsx +0 -20
  472. package/src/components/stories/filter-table.story.tsx +0 -63
  473. package/src/components/stories/flowchart.story.tsx +0 -25
  474. package/src/components/stories/forgot-password-block.story.tsx +0 -14
  475. package/src/components/stories/frame.story.tsx +0 -32
  476. package/src/components/stories/index.ts +0 -57
  477. package/src/components/stories/input-group.story.tsx +0 -27
  478. package/src/components/stories/input.story.tsx +0 -42
  479. package/src/components/stories/insight-cards.story.tsx +0 -67
  480. package/src/components/stories/label.story.tsx +0 -32
  481. package/src/components/stories/linked-accounts-block.story.tsx +0 -23
  482. package/src/components/stories/login-block.story.tsx +0 -18
  483. package/src/components/stories/logo.story.tsx +0 -21
  484. package/src/components/stories/markdown.story.tsx +0 -31
  485. package/src/components/stories/menu-command.story.tsx +0 -43
  486. package/src/components/stories/onboarding-block.story.tsx +0 -14
  487. package/src/components/stories/otp-field.story.tsx +0 -35
  488. package/src/components/stories/passkey-manager-block.story.tsx +0 -18
  489. package/src/components/stories/passkey-sign-in-block.story.tsx +0 -15
  490. package/src/components/stories/password-input.story.tsx +0 -35
  491. package/src/components/stories/profile-card-block.story.tsx +0 -29
  492. package/src/components/stories/recommendation-card.story.tsx +0 -37
  493. package/src/components/stories/records-table.story.tsx +0 -52
  494. package/src/components/stories/reference.story.tsx +0 -33
  495. package/src/components/stories/research-answer.story.tsx +0 -32
  496. package/src/components/stories/scaffold-root.story.tsx +0 -47
  497. package/src/components/stories/separator.story.tsx +0 -37
  498. package/src/components/stories/shell-layout.story.tsx +0 -19
  499. package/src/components/stories/signup-block.story.tsx +0 -18
  500. package/src/components/stories/social-providers.story.tsx +0 -26
  501. package/src/components/stories/streaming-text.story.tsx +0 -25
  502. package/src/components/stories/text.story.tsx +0 -31
  503. package/src/components/stories/textarea.story.tsx +0 -34
  504. package/src/components/stories/tree.story.tsx +0 -31
  505. package/src/components/stories/update-password-block.story.tsx +0 -14
  506. package/src/components/stories/user.story.tsx +0 -32
  507. package/src/components/stories/verse.story.tsx +0 -42
  508. package/src/components/theme-provider.tsx +0 -230
  509. package/src/components/types.ts +0 -106
  510. package/src/components/ui/accordion.tsx +0 -68
  511. package/src/components/ui/alert-dialog.tsx +0 -167
  512. package/src/components/ui/alert.tsx +0 -84
  513. package/src/components/ui/autocomplete.tsx +0 -303
  514. package/src/components/ui/avatar.tsx +0 -109
  515. package/src/components/ui/badge.tsx +0 -101
  516. package/src/components/ui/button-group.tsx +0 -88
  517. package/src/components/ui/button.tsx +0 -192
  518. package/src/components/ui/card.tsx +0 -253
  519. package/src/components/ui/chat/__tests__/segmented-toggle.test.tsx +0 -27
  520. package/src/components/ui/chat/avatar-handle.tsx +0 -30
  521. package/src/components/ui/chat/badges.tsx +0 -85
  522. package/src/components/ui/chat/buttons.tsx +0 -94
  523. package/src/components/ui/chat/chips.tsx +0 -106
  524. package/src/components/ui/chat/dot.tsx +0 -81
  525. package/src/components/ui/chat/icon-button.tsx +0 -43
  526. package/src/components/ui/chat/icon-tile.tsx +0 -33
  527. package/src/components/ui/chat/index.ts +0 -12
  528. package/src/components/ui/chat/inline-source.tsx +0 -94
  529. package/src/components/ui/chat/segmented-toggle.tsx +0 -99
  530. package/src/components/ui/chat/tag.tsx +0 -61
  531. package/src/components/ui/chat/thumbnail.tsx +0 -31
  532. package/src/components/ui/chat/waveform.tsx +0 -30
  533. package/src/components/ui/checkbox.tsx +0 -83
  534. package/src/components/ui/collapsible.tsx +0 -42
  535. package/src/components/ui/command.tsx +0 -263
  536. package/src/components/ui/context-menu.tsx +0 -342
  537. package/src/components/ui/emoji-picker.tsx +0 -161
  538. package/src/components/ui/field.tsx +0 -89
  539. package/src/components/ui/frame.tsx +0 -87
  540. package/src/components/ui/glasscn/glass-button-group.tsx +0 -34
  541. package/src/components/ui/glasscn/glass-button.tsx +0 -25
  542. package/src/components/ui/glasscn/glass-container.tsx +0 -94
  543. package/src/components/ui/glasscn/glass-separator.tsx +0 -39
  544. package/src/components/ui/glasscn/liquid-glass.tsx +0 -59
  545. package/src/components/ui/group.tsx +0 -92
  546. package/src/components/ui/input-group.tsx +0 -105
  547. package/src/components/ui/input.tsx +0 -70
  548. package/src/components/ui/kbd.tsx +0 -32
  549. package/src/components/ui/label.tsx +0 -36
  550. package/src/components/ui/menu-command.tsx +0 -156
  551. package/src/components/ui/menu.tsx +0 -352
  552. package/src/components/ui/otp-field.tsx +0 -88
  553. package/src/components/ui/popover-glass.tsx +0 -158
  554. package/src/components/ui/popover.tsx +0 -120
  555. package/src/components/ui/preview-card.tsx +0 -61
  556. package/src/components/ui/scroll-area.tsx +0 -80
  557. package/src/components/ui/select.tsx +0 -257
  558. package/src/components/ui/separator.tsx +0 -23
  559. package/src/components/ui/sheet.tsx +0 -135
  560. package/src/components/ui/skeleton.tsx +0 -18
  561. package/src/components/ui/spinner.tsx +0 -17
  562. package/src/components/ui/switch.tsx +0 -30
  563. package/src/components/ui/tabs.tsx +0 -120
  564. package/src/components/ui/textarea.tsx +0 -58
  565. package/src/components/ui/toast.tsx +0 -325
  566. package/src/components/ui/toolbar.tsx +0 -92
  567. package/src/components/ui/tooltip.tsx +0 -67
  568. package/src/index.css +0 -10
  569. package/src/index.ts +0 -102
  570. package/src/lib/attachment-content.ts +0 -28
  571. package/src/lib/auth-accent.ts +0 -49
  572. package/src/lib/ease.ts +0 -90
  573. package/src/lib/glass-variants.ts +0 -22
  574. package/src/lib/hooks/use-hover-capable.ts +0 -23
  575. package/src/lib/hooks/use-mobile.ts +0 -21
  576. package/src/lib/keyed-atom.ts +0 -60
  577. package/src/lib/segmented-control.ts +0 -42
  578. package/src/lib/sound.ts +0 -39
  579. package/src/lib/specular.ts +0 -10
  580. package/src/lib/state/__tests__/sound.test.tsx +0 -53
  581. package/src/lib/state/exegia-provider.tsx +0 -83
  582. package/src/lib/state/index.ts +0 -4
  583. package/src/lib/state/store.ts +0 -19
  584. package/src/lib/use-motion-panel.ts +0 -78
  585. package/src/lib/utils.test.ts +0 -22
  586. package/src/lib/utils.ts +0 -100
  587. package/src/specular.js +0 -4
  588. /package/{src/components/composed/chat/composer → dist-lib}/BEAUTIFUL-UI-LICENSE.txt +0 -0
@@ -1,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
- }