@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,361 +0,0 @@
1
- import type { ReactNode, RefObject } from "react"
2
-
3
- import {
4
- type ButtonHTMLAttributes,
5
- type CSSProperties,
6
- type HTMLAttributes,
7
- } from "react"
8
- import type { HTMLMotionProps } from "motion/react"
9
-
10
- import type { IShellMetrics, IShellSidebarFit } from "./shell-metrics"
11
-
12
- // ---------------------------------------------------------------------------
13
- // Shell fit — the shell's measurement of itself, kept in Jotai atoms keyed by
14
- // `shellId` (see `shell-fit-atom.ts`). No atom imports here: this file stays
15
- // dependency-free so the types can travel without the store.
16
- // ---------------------------------------------------------------------------
17
-
18
- /** The key a shell's fit state is filed under. Pass your own to reach it from
19
- * anywhere (`useShellFitState("app-shell")`); leave it out and the provider
20
- * generates one that dies with it. */
21
- export type TShellFitInstanceId = string
22
-
23
- /** The range a secondary-panel resize may land in, in px. */
24
- export interface IShellFitPanelBounds {
25
- min: number
26
- max: number
27
- }
28
-
29
- /** What the shell measured of itself — readable by id through
30
- * `useShellFitState`. */
31
- export interface IShellFitState {
32
- /** Actual rail layout after applying container constraints. */
33
- sidebar: IShellSidebarFit | null
34
- /** The px the shell last measured, or null before its first measurement
35
- * (a server render, a host with no layout). */
36
- metrics: IShellMetrics | null
37
- /** Whether the shell can hold a secondary panel. True while unmeasured, so
38
- * a panel never flickers out over a reading that has not happened yet. */
39
- fits: boolean
40
- /** The secondary panel's width in px, already clamped to `bounds` — null
41
- * before the first measurement, where the panel falls back to
42
- * `--panel-width`. */
43
- panelWidth: number | null
44
- /** The range a resize may land in. */
45
- bounds: IShellFitPanelBounds
46
- }
47
-
48
- /** Writes only — drive a shell's secondary panel by id through
49
- * `useShellFitActions` without re-rendering when it moves. */
50
- export interface IShellFitActions {
51
- /** Resize the secondary panel. Clamped on the way in, so a drag past the
52
- * gutter parks at the bound instead of banking travel it has to give back. */
53
- resizePanel: (width: number) => void
54
- /** Back to the width the shell mounted with — `defaultPanelWidth`, or
55
- * `--panel-width` when there was none. */
56
- resetPanelWidth: () => void
57
- }
58
-
59
- /** What `useShellFit` hands the provider: the state, the actions and the id
60
- * they are filed under. */
61
- export interface IShellFitController extends IShellFitState, IShellFitActions {
62
- defaultPanelWidth: number | null
63
- shellId: TShellFitInstanceId
64
- }
65
-
66
- export interface IUseShellFitOptions {
67
- /** File the fit under this id so it can be read elsewhere and outlive the
68
- * shell. Generated (and dropped on unmount) when omitted. */
69
- shellId?: TShellFitInstanceId
70
- /** The element the shell's CSS variables live on (the provider wrapper). */
71
- hostRef: RefObject<HTMLElement | null>
72
- /** Whether the left rail is expanded right now — a render input, so a fold
73
- * counts the moment React commits it rather than a frame later when the
74
- * width animation has moved. */
75
- railOpen: boolean
76
- /** The width the secondary panel opens at, in px, instead of
77
- * `--panel-width`. Read once, on mount. */
78
- defaultPanelWidth?: number
79
- /** Fired whenever a measurement lands on "no room": the shell uses it to
80
- * retire the panel's open state instead of parking it. */
81
- onUnfit?: () => void
82
- }
83
-
84
- /** @internal What an instance starts from, restored by `resetShellPanelWidthAtom`. */
85
- export interface IShellFitSeed {
86
- /** The requested panel width at mount — null for `--panel-width`. */
87
- panelWidth: number | null
88
- }
89
-
90
- export interface IShellAction {
91
- id: string
92
- label: string
93
- icon: ReactNode
94
- badge?: ReactNode
95
- onSelect?: () => void
96
- }
97
-
98
- export interface IShellWorkspace {
99
- name: string
100
- logo?: ReactNode
101
- meta?: ReactNode
102
- }
103
-
104
- export interface IPanel {
105
- id: string
106
- name: string
107
- component: ReactNode
108
- /** Replaces the default icon inside the panel's header trigger. The shell
109
- * keeps the trigger button itself (toggle wiring, aria-label) — this only
110
- * swaps what renders inside it. */
111
- trigger?: ReactNode
112
- open: boolean
113
- defaultOpen?: boolean
114
- side: "left" | "bottom" | "right" | "sidebar"
115
- }
116
-
117
- /** The side a panel docks to, as a value union (`IPanel["side"]`).
118
- * `Pick<IPanel, "side">` would be the object type `{ side: ... }`, which can
119
- * neither key a Record nor travel as a plain callback argument. */
120
- export type TPanelSide = IPanel["side"]
121
-
122
- /** Panel content keyed by the side it docks to. `Side` narrows the map to
123
- * the sides a surface actually renders (the shell renders left and right).
124
- * Entries are optional — a shell with no bottom dock simply has no `bottom`
125
- * key. Where an entry's own `side` field disagrees with its key, the key
126
- * wins. */
127
- export type TPanelMap<Side extends TPanelSide = TPanelSide> = Partial<
128
- Record<Side, IPanel>
129
- >
130
-
131
- /** Dynamic panel content keyed by side — filled by
132
- * `useShellPanels().openPanel(side, component)` and read by ShellLayout,
133
- * where a side's entry wins over the static `panels` map's `component`. */
134
- export type TSidebarComponentMap = Partial<Record<TSidebarSide, ReactNode>>
135
-
136
- /** The open/close surface of the shell's panels, lifted straight from
137
- * AnimatedPanelProvider — every prop is keyed by side, there are no
138
- * explicit per-side props. `useShellPanels` produces the controlled subset
139
- * of these as `providerProps`. */
140
- export type TShellPanelControlProps = Pick<
141
- IAnimatedSidebarProviderProps,
142
- | "open"
143
- | "defaultOpen"
144
- | "onOpenChange"
145
- | "openMobile"
146
- | "defaultOpenMobile"
147
- | "onOpenMobileChange"
148
- | "shellId"
149
- | "defaultPanelWidth"
150
- | "panelComponents"
151
- >
152
-
153
- export interface IUseShellPanelsOptions {
154
- /** The id the shell's fit state is filed under. Name it to read the same
155
- * shell from elsewhere (`useShellFitState("app-shell")`) and to keep a
156
- * dragged panel width across a route change; otherwise the hook generates
157
- * one that dies with it. */
158
- shellId?: TShellFitInstanceId
159
- /** Initial desktop open state per side, merged over
160
- * `{ left: true, right: false }`. */
161
- defaultOpen?: IAnimatedSidebarProviderProps["defaultOpen"]
162
- /** Initial mobile overlay state per side — every side starts closed. */
163
- defaultOpenMobile?: IAnimatedSidebarProviderProps["defaultOpenMobile"]
164
- /** The width the secondary panel opens at, in px, instead of
165
- * `--panel-width`. */
166
- defaultPanelWidth?: number
167
- /** Panel change event returning both the next open state and the side of
168
- * the panel the change comes from. Mobile overlay changes report the same
169
- * side as their desktop counterpart. */
170
- onPanelChange?: (open: boolean, side: TPanelSide) => void
171
- }
172
-
173
- export interface IShellPanelControls {
174
- /** Rendered rail width and whether it can expand in the current container. */
175
- sidebar: IShellSidebarFit | null
176
- sidebarWidth: number | null
177
- resizeSidebar: (width: number) => void
178
- /** The id the shell's fit state is filed under — hand it to
179
- * `useShellFitState` / `useShellFitActions` anywhere below `ExegiaProvider`. */
180
- shellId: TShellFitInstanceId
181
- /** The viewport cannot hold the secondary panel beside the rail and the
182
- * body at their floors, so the shell has dropped the right panel and its
183
- * trigger — UI outside the shell should stand down with them. Read straight
184
- * out of the shell's fit atoms; it is only ever `true` once the shell is
185
- * mounted and measured. */
186
- isNarrow: boolean
187
- /** The secondary panel's current width in px, or null until the shell has
188
- * measured itself (the panel then sits at `--panel-width`). */
189
- panelWidth: number | null
190
- /** Resize the secondary panel from outside the shell — clamped to the room
191
- * the shell has. */
192
- resizePanel: (width: number) => void
193
- /** Requested open state. `sidebar` reports the responsive rail layout. */
194
- open: Record<TSidebarSide, boolean>
195
- /** Live mobile overlay state, keyed by side. */
196
- openMobile: Record<TSidebarSide, boolean>
197
- /** Refuses to OPEN the right panel while `isNarrow` — there is nothing on
198
- * screen to open. Closing it always goes through. */
199
- setOpen: (open: boolean, side: TSidebarSide) => void
200
- setOpenMobile: (open: boolean, side: TSidebarSide) => void
201
- /** Desktop-only convenience — the in-shell triggers already pick the
202
- * mobile state themselves when the viewport is narrow. Carries the same
203
- * `isNarrow` refusal as `setOpen`. */
204
- toggle: (side: TSidebarSide) => void
205
- /** Open a side's panel and, when given, swap in the content it shows.
206
- * The component travels through `providerProps.panelComponents` into
207
- * ShellLayout, where it wins over the static `panels` entry for that
208
- * side, and sticks until the next `openPanel(side, component)` replaces
209
- * it — closing the panel leaves it in place for the exit animation and
210
- * the next open. Carries the same `isNarrow` refusal as `setOpen`. */
211
- openPanel: (side: TSidebarSide, component?: ReactNode) => void
212
- /** Spread onto ShellLayout (or AnimatedPanelProvider directly). */
213
- providerProps: TShellPanelControlProps
214
- }
215
-
216
- export interface IShellLayoutProps extends TShellPanelControlProps {
217
- children?: ReactNode
218
- /** Content for the shell's panels, keyed by the side. The shell renders
219
- * the `left` rail and the `right` drawer; other sides are reserved. */
220
- panels?: TPanelMap
221
- header?: ReactNode
222
- /** Actions pinned to the header's right edge, rendered just before the
223
- * right panel's trigger. The cluster hugs the trailing edge no matter
224
- * which of `header` / the left rail / the right panel are present. */
225
- trailing?: ReactNode
226
- className?: string
227
- variant?: "web" | "desktop"
228
- }
229
-
230
- export type TSidebarSide = "left" | "right"
231
- /** Open flags keyed by the side. Sides left out stay uncontrolled / at their
232
- * default — there is no per-side prop, the record IS the API. */
233
- export type TSidebarOpenState = Partial<Record<TSidebarSide, boolean>>
234
- export type TSidebarVariant = "sidebar" | "floating" | "inset"
235
- export type TSidebarCollapsible = "offcanvas" | "icon" | "none"
236
-
237
- export interface IAnimatedSidebarContextValue {
238
- isMobile: boolean
239
- /** What the shell measured of itself: whether it can hold a secondary panel
240
- * at all, how wide that panel is, and the range a resize may land in. The
241
- * right panel and its trigger stand down when `fit.fits` is false. */
242
- fit: IShellFitController
243
- layoutId: string
244
- /** Desktop open state, keyed by side. */
245
- open: Record<TSidebarSide, boolean>
246
- /** Mobile overlay open state, keyed by side. */
247
- openMobile: Record<TSidebarSide, boolean>
248
- reduce: boolean
249
- setOpen: (open: boolean, side: TSidebarSide) => void
250
- setOpenMobile: (open: boolean, side: TSidebarSide) => void
251
- /** Toggle the docked panel when the container can accommodate it. */
252
- toggleSidebar: (side: TSidebarSide) => void
253
- triggerRefs: Record<TSidebarSide, React.RefObject<HTMLButtonElement | null>>
254
- }
255
-
256
- export interface IAnimatedSidebarProviderProps extends HTMLAttributes<HTMLDivElement> {
257
- /** The id this shell's fit state (whether a secondary panel fits, how wide
258
- * it is) is filed under in the store. Name it to read or drive the shell
259
- * from elsewhere and to keep a dragged width across a route change; omit it
260
- * and the provider generates one that is dropped on unmount. */
261
- shellId?: TShellFitInstanceId
262
- /** The width the secondary panel opens at, in px, instead of
263
- * `--panel-width`. Read once, on mount. */
264
- defaultPanelWidth?: number
265
- /** Controlled desktop open state, keyed by the side. A side left undefined
266
- * stays uncontrolled. */
267
- open?: TSidebarOpenState
268
- /** Initial desktop open state, merged over `{ left: true, right: false }`. */
269
- defaultOpen?: TSidebarOpenState
270
- onOpenChange?: (open: boolean, side: TSidebarSide) => void
271
- /** Controlled mobile overlay state, keyed by side. */
272
- openMobile?: TSidebarOpenState
273
- /** Initial mobile overlay state — every side starts closed. */
274
- defaultOpenMobile?: TSidebarOpenState
275
- onOpenMobileChange?: (open: boolean, side: TSidebarSide) => void
276
- /** Content pushed into a side's panel by `useShellPanels().openPanel`. It
277
- * rides along in `providerProps` so the record can be spread on either
278
- * surface: ShellLayout renders it in that side's panel; the bare provider
279
- * renders no panels, so it only swallows the prop to keep it off the DOM. */
280
- panelComponents?: TSidebarComponentMap
281
- /** Fires when the shell crosses the width a secondary panel needs (rail +
282
- * body + panel at their floors). An imperative escape hatch for a consumer
283
- * that mounts the provider on its own; anything under `ExegiaProvider` can
284
- * subscribe by id instead with `useShellFitState(shellId).fits`. */
285
- onNarrowChange?: (isNarrow: boolean) => void
286
- style?: TSidebarProviderStyle
287
- }
288
-
289
- export type TSidebarProviderStyle = CSSProperties & {
290
- /** Left rail, expanded. */
291
- "--sidebar-width"?: string
292
- /** Minimum expanded rail width before it folds to icons. Default 180px. */
293
- "--sidebar-min-width"?: string
294
- /** Left rail, folded to icons. */
295
- "--sidebar-width-icon"?: string
296
- "--sidebar-width-mobile"?: string
297
- /** The secondary panel's floor, and the width it opens at. */
298
- "--panel-width"?: string
299
- /** The body's floor — the secondary panel may never squeeze it past this. */
300
- "--inset-min-width"?: string
301
- }
302
-
303
- export type TAnimatedSidebarInsetProps = HTMLMotionProps<"main">
304
-
305
- export interface IAnimatedSidebarTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
306
- side?: TSidebarSide
307
- }
308
-
309
- export interface IAnimatedSidebarPanelContextValue {
310
- collapsed: boolean
311
- collapsible: TSidebarCollapsible
312
- side: TSidebarSide
313
- }
314
-
315
- export interface IAnimatedSidebarProps extends Omit<
316
- HTMLMotionProps<"aside">,
317
- "children"
318
- > {
319
- children?: ReactNode
320
- side?: TSidebarSide
321
- variant?: TSidebarVariant
322
- collapsible?: TSidebarCollapsible
323
- ariaLabel?: string
324
- panelClassName?: string
325
- }
326
-
327
- export interface IAnimatedSidebarMenuSubProps extends Omit<
328
- HTMLMotionProps<"ul">,
329
- "children"
330
- > {
331
- open: boolean
332
- children?: ReactNode
333
- }
334
-
335
- export interface IAnimatedSidebarMenuSubButtonProps {
336
- children: ReactNode
337
- icon?: ReactNode
338
- href?: string
339
- isActive?: boolean
340
- disabled?: boolean
341
- closeOnSelect?: boolean
342
- target?: "_blank" | "_self" | "_parent" | "_top"
343
- rel?: string
344
- onSelect?: () => void
345
- className?: string
346
- }
347
-
348
- export interface IAnimatedSidebarMenuButtonProps {
349
- children: ReactNode
350
- icon?: ReactNode
351
- badge?: ReactNode
352
- href?: string
353
- isActive?: boolean
354
- ariaExpanded?: boolean
355
- disabled?: boolean
356
- closeOnSelect?: boolean
357
- target?: "_blank" | "_self" | "_parent" | "_top"
358
- rel?: string
359
- onSelect?: () => void
360
- className?: string
361
- }
@@ -1,49 +0,0 @@
1
- "use client"
2
-
3
- import { useMemo } from "react"
4
- import { useAtomValueRawSync, useSetAtom } from "jotai"
5
-
6
- import {
7
- resetShellPanelWidthAtom,
8
- resizeShellPanelAtom,
9
- shellFitStateAtom,
10
- } from "./shell-fit-atom"
11
- import type { IShellFitActions, TShellFitInstanceId, IShellFitState } from "./type"
12
-
13
- /**
14
- * Read the fit of the shell registered under `shellId` from anywhere below
15
- * `ExegiaProvider` — no controller, no props, no provider of its own.
16
- *
17
- * ```tsx
18
- * const { fits, panelWidth } = useShellFitState("app-shell")
19
- * ```
20
- *
21
- * This returns the whole state object, so the caller re-renders on every
22
- * measurement. A component that reads one field should subscribe to that
23
- * field's atom instead: `useAtomValue(shellFitFitsAtom("app-shell"))`.
24
- */
25
- export function useShellFitState(shellId: TShellFitInstanceId): IShellFitState {
26
- return useAtomValueRawSync(shellFitStateAtom(shellId))
27
- }
28
-
29
- /**
30
- * Drive the secondary panel of the shell registered under `shellId` from
31
- * anywhere. Writes only — the caller never re-renders when the shell moves,
32
- * so this is what a command palette or a keyboard shortcut should reach for.
33
- *
34
- * ```tsx
35
- * const shell = useShellFitActions("app-shell")
36
- * <Button onClick={() => shell.resizePanel(480)}>Wide inspector</Button>
37
- * ```
38
- */
39
- export function useShellFitActions(
40
- shellId: TShellFitInstanceId
41
- ): IShellFitActions {
42
- const resizePanel = useSetAtom(resizeShellPanelAtom(shellId))
43
- const resetPanelWidth = useSetAtom(resetShellPanelWidthAtom(shellId))
44
-
45
- return useMemo(
46
- () => ({ resizePanel, resetPanelWidth }),
47
- [resizePanel, resetPanelWidth]
48
- )
49
- }
@@ -1,153 +0,0 @@
1
- "use client"
2
-
3
- import { useEffect, useId, useMemo, useRef, useState } from "react"
4
- import { useAtomValueRawSync, useSetAtom } from "jotai"
5
- import { useIsomorphicLayoutEffect } from "motion/react"
6
-
7
- import {
8
- measureShellFitAtom,
9
- mountShellFitAtom,
10
- removeShellFitInstance,
11
- resetShellPanelWidthAtom,
12
- resizeShellPanelAtom,
13
- shellFitStateAtom,
14
- } from "./shell-fit-atom"
15
- import { fitsPanel, fitSidebar, type IShellMetrics } from "./shell-metrics"
16
- import type {
17
- IShellFitController,
18
- IShellFitSeed,
19
- IUseShellFitOptions,
20
- } from "./type"
21
- import { shellPanelAtoms } from "./shell-panel-atom"
22
- import { resolveLength } from "./utils"
23
-
24
- /** Read the shell's columns out of the DOM. The widths come from CSS
25
- * variables; the rail's share comes from its own state, not its box, so a
26
- * fold counts the moment React commits it rather than a frame later when the
27
- * width animation has moved. */
28
- function readMetrics(host: HTMLElement, railOpen: boolean): IShellMetrics {
29
- // Whether a shell has a rail at all is the caller's composition, so it is
30
- // read off the DOM rather than tracked in state.
31
- const rail = host.querySelector<HTMLElement>(
32
- '[data-slot="sidebar"][data-side="left"]'
33
- )
34
- const frame = getComputedStyle(host)
35
- const gap = Number.parseFloat(frame.columnGap) || 0
36
- const padding =
37
- (Number.parseFloat(frame.paddingLeft) || 0) +
38
- (Number.parseFloat(frame.paddingRight) || 0)
39
- const width = host.clientWidth || host.getBoundingClientRect().width
40
- const insetMin = resolveLength(host, "var(--inset-min-width)")
41
- const sidebar = fitSidebar({
42
- width,
43
- padding,
44
- gap,
45
- insetMin,
46
- expanded: resolveLength(host, "var(--sidebar-width)") || 256,
47
- icon: resolveLength(host, "var(--sidebar-width-icon)") || 56,
48
- minimum: resolveLength(host, "var(--sidebar-min-width)") || 180,
49
- open: railOpen,
50
- collapsible: rail?.dataset.collapsible ?? "icon",
51
- present: Boolean(rail),
52
- })
53
- return {
54
- rail: sidebar.width,
55
- sidebar,
56
- insetMin,
57
- panelMin: resolveLength(host, "var(--panel-width)"),
58
- viewport: width,
59
- // Measure the space a prospective inspector needs, even while absent.
60
- chrome: padding + gap * (sidebar.width > 0 ? 2 : 1),
61
- }
62
- }
63
-
64
- /**
65
- * Measures the shell and decides what the secondary panel may do: whether it
66
- * exists at all, and how wide it may be dragged.
67
- *
68
- * Container resizing, rail folding, and user resizing are observed here,
69
- * so embedded shells obey the same bounds as full-page layouts. The measurement is
70
- * the only thing this hook keeps to itself: the numbers land in the shell-fit
71
- * atoms keyed by `shellId`, so anything under `ExegiaProvider` can read the
72
- * verdict (`useShellFitState`) or move the panel (`useShellFitActions`)
73
- * without holding this controller.
74
- */
75
- export function useShellFit({
76
- shellId: explicitId,
77
- hostRef,
78
- railOpen,
79
- defaultPanelWidth,
80
- onUnfit,
81
- }: IUseShellFitOptions): IShellFitController {
82
- // A generated key isolates unnamed shells from each other; an explicit
83
- // `shellId` is the app's handle on this one.
84
- const generatedId = useId()
85
- const shellId = explicitId ?? generatedId
86
- const railWidth = useAtomValueRawSync(shellPanelAtoms(shellId).railWidth)
87
-
88
- // Read once: `defaultPanelWidth` describes the mount, not every render.
89
- const [seed] = useState<IShellFitSeed>(() => ({
90
- panelWidth: defaultPanelWidth ?? null,
91
- }))
92
-
93
- const mount = useSetAtom(mountShellFitAtom(shellId))
94
- const measure = useSetAtom(measureShellFitAtom(shellId))
95
- const resizePanel = useSetAtom(resizeShellPanelAtom(shellId))
96
- const resetPanelWidth = useSetAtom(resetShellPanelWidthAtom(shellId))
97
-
98
- // Before paint, and before the first measurement below, so a seeded width
99
- // is in the store by the time the panel first reads its width.
100
- useIsomorphicLayoutEffect(() => {
101
- mount(seed)
102
- }, [mount, seed])
103
-
104
- // The listener below is bound once per fold, so the callback rides a ref
105
- // rather than rebinding it whenever a consumer passes a fresh arrow.
106
- const onUnfitRef = useRef(onUnfit)
107
- useIsomorphicLayoutEffect(() => {
108
- onUnfitRef.current = onUnfit
109
- })
110
-
111
- useIsomorphicLayoutEffect(() => {
112
- const host = hostRef.current
113
- if (!host) return
114
-
115
- const takeMeasurement = () => {
116
- const next = readMetrics(host, railOpen)
117
- measure(next)
118
- if (!fitsPanel(next)) onUnfitRef.current?.()
119
- }
120
-
121
- // Observe the host, including changes from a split view or surrounding
122
- // navigation that never trigger a window resize.
123
- takeMeasurement()
124
- const observer = new ResizeObserver(takeMeasurement)
125
- observer.observe(host)
126
- window.addEventListener("resize", takeMeasurement)
127
- return () => {
128
- observer.disconnect()
129
- window.removeEventListener("resize", takeMeasurement)
130
- }
131
- }, [hostRef, railOpen, railWidth, measure])
132
-
133
- // A shell the hook keyed is scrap once its component goes. An explicit
134
- // `shellId` is the app's key and outlives the mount — that is what lets a
135
- // dragged width survive a route change.
136
- useEffect(() => {
137
- if (explicitId !== undefined) return
138
- return () => removeShellFitInstance(shellId)
139
- }, [shellId, explicitId])
140
-
141
- const state = useAtomValueRawSync(shellFitStateAtom(shellId))
142
-
143
- return useMemo<IShellFitController>(
144
- () => ({
145
- shellId,
146
- ...state,
147
- defaultPanelWidth: seed.panelWidth,
148
- resizePanel,
149
- resetPanelWidth,
150
- }),
151
- [shellId, state, seed.panelWidth, resizePanel, resetPanelWidth]
152
- )
153
- }
@@ -1,126 +0,0 @@
1
- "use client"
2
-
3
- import { useCallback, useEffect, useId, useMemo } from "react"
4
- import type { ReactNode } from "react"
5
- import { shellPanelAtoms } from "./shell-panel-atom"
6
- import { useAtomValueRawSync, useSetAtom } from "jotai"
7
-
8
- import {
9
- removeShellFitInstance,
10
- resizeShellPanelAtom,
11
- shellFitFitsAtom,
12
- shellFitStateAtom,
13
- shellFitPanelWidthAtom,
14
- } from "./shell-fit-atom"
15
- import type {
16
- TShellPanelControlProps,
17
- IShellPanelControls,
18
- TSidebarSide,
19
- IUseShellPanelsOptions,
20
- } from "./type"
21
-
22
- /**
23
- * Owns the open/close state of the shell's panels, keyed by side, and
24
- * reports every change through a single `onPanelChange(open, side)`
25
- * callback. Spread the returned `providerProps` onto ShellLayout; the
26
- * setters and `toggle` are for UI that lives outside the shell (title-bar
27
- * buttons, command palette, shortcuts).
28
- *
29
- * The way back down is the store: `providerProps` carries a `shellId`, the
30
- * shell files its measurement under it, and this hook reads `isNarrow` and
31
- * `panelWidth` straight out of those atoms — so outside UI stands down with
32
- * the panel instead of measuring `--sidebar-width` a second time. Name the
33
- * `shellId` and any component below `ExegiaProvider` can do the same with
34
- * `useShellFitState(shellId)`.
35
- *
36
- * Call it under the same `ExegiaProvider` as the shell it drives (or under
37
- * none at all, on both sides): mounted above the provider it would read
38
- * Jotai's default store while the shell writes to the provider's.
39
- */
40
- export function useShellPanels({
41
- shellId: explicitId,
42
- defaultOpen,
43
- defaultOpenMobile,
44
- defaultPanelWidth,
45
- onPanelChange,
46
- }: IUseShellPanelsOptions = {}): IShellPanelControls {
47
- // The hook, not the provider, keys the shell: it renders above the provider
48
- // and has to read the same atoms the provider writes. Whoever generates the
49
- // key drops it — the provider treats a passed-in id as the app's and leaves
50
- // it alone on unmount.
51
- const generatedId = useId()
52
- const shellId = explicitId ?? generatedId
53
- useEffect(() => {
54
- if (explicitId !== undefined) return
55
- return () => removeShellFitInstance(shellId)
56
- }, [shellId, explicitId])
57
-
58
- const atoms = shellPanelAtoms(shellId)
59
- const sidebarWidth = useAtomValueRawSync(atoms.railWidth)
60
- const resizeSidebar = useSetAtom(atoms.resizeSidebar)
61
- const open = useAtomValueRawSync(atoms.open)
62
- const openMobile = useAtomValueRawSync(atoms.mobile)
63
- const setOpen = useSetAtom(atoms.setOpen)
64
- const setOpenMobile = useSetAtom(atoms.setOpenMobile)
65
- const toggle = useSetAtom(atoms.toggle)
66
- const panelComponents = useAtomValueRawSync(atoms.components)
67
- const setPanelComponents = useSetAtom(atoms.components)
68
-
69
- // Reads false until the shell has measured itself — an unmeasured shell
70
- // fails open, so nothing out here stands down over a reading that has not
71
- // happened yet.
72
- const fits = useAtomValueRawSync(shellFitFitsAtom(shellId))
73
- const isNarrow = !fits
74
- const { sidebar } = useAtomValueRawSync(shellFitStateAtom(shellId))
75
- const panelWidth = useAtomValueRawSync(shellFitPanelWidthAtom(shellId))
76
- const resizePanel = useSetAtom(resizeShellPanelAtom(shellId))
77
-
78
- const openPanel = useCallback(
79
- (side: TSidebarSide, component?: ReactNode) => {
80
- if (component !== undefined) {
81
- setPanelComponents((prev) =>
82
- prev[side] === component ? prev : { ...prev, [side]: component }
83
- )
84
- }
85
- setOpen(true, side)
86
- },
87
- [setOpen, setPanelComponents]
88
- )
89
-
90
- const providerProps = useMemo<TShellPanelControlProps>(
91
- () => ({
92
- shellId,
93
- defaultPanelWidth,
94
- defaultOpen,
95
- defaultOpenMobile,
96
- onOpenChange: onPanelChange,
97
- onOpenMobileChange: onPanelChange,
98
- panelComponents,
99
- }),
100
- [
101
- shellId,
102
- defaultPanelWidth,
103
- defaultOpen,
104
- defaultOpenMobile,
105
- onPanelChange,
106
- panelComponents,
107
- ]
108
- )
109
-
110
- return {
111
- shellId,
112
- sidebar,
113
- sidebarWidth,
114
- resizeSidebar,
115
- isNarrow,
116
- panelWidth,
117
- resizePanel,
118
- open,
119
- openMobile,
120
- setOpen,
121
- setOpenMobile,
122
- toggle,
123
- openPanel,
124
- providerProps,
125
- }
126
- }