@exegia/corpora-ui 3.0.0 → 3.1.0

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