@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,30 +0,0 @@
1
- import { ShellLayout } from "./shell-layout"
2
-
3
- export type * from "./type"
4
- export * from "./shell-metrics"
5
- export * from "./use-shell-panels"
6
- export { useShellFit } from "./use-shell-fit"
7
- export { useShellFitActions, useShellFitState } from "./use-shell-fit-state"
8
- // The public atom surface. `@internal` atoms (measure, mount) stay unexported
9
- // on purpose — `export *` would make every internal a breaking-change surface
10
- // for consumer apps.
11
- export {
12
- removeShellFitInstance,
13
- resetShellPanelWidthAtom,
14
- resizeShellPanelAtom,
15
- shellFitFitsAtom,
16
- shellFitMeasuredAtom,
17
- shellFitMetricsAtom,
18
- shellFitPanelBoundsAtom,
19
- shellFitPanelWidthAtom,
20
- shellFitRequestedWidthAtom,
21
- shellFitStateAtom,
22
- } from "./shell-fit-atom"
23
- export * from "./utils"
24
-
25
- export * from "./animated-panel"
26
- export * from "./animated-panel-inset"
27
- export * from "./animated-panel-provider"
28
- export * from "./animated-panel-trigger"
29
-
30
- export { ShellLayout as default }
@@ -1,246 +0,0 @@
1
- import { removeShellPanelInstance } from "./shell-panel-atom"
2
- /**
3
- * Per-instance Jotai state for the shell's layout fit.
4
- *
5
- * Every atom is a module-level family keyed by a shell id, so one
6
- * `ExegiaProvider` at the app root is enough: several shells coexist in one
7
- * store without a provider each, and a title bar, a command palette or a
8
- * layout test can drive one by id without holding its controller.
9
- *
10
- * Unlike the tree, this feature has no controlled props — the shell measures
11
- * itself, nobody hands it a viewport. So, like `blocks/auth`'s coordination
12
- * layer, there is no config atom, no projection and no owned-* loop guard.
13
- * `useShellFit` is the only writer of `metrics`, and that write is silent by
14
- * design: a resize is not an event an app subscribed to.
15
- *
16
- * The rule itself lives in `shell-metrics.ts` and is called from here, so the
17
- * arithmetic has one home whether it is read through a hook or a store.
18
- */
19
- import { atom } from "jotai"
20
- import type { Getter, Setter } from "jotai"
21
-
22
- import {
23
- clampPanelWidth,
24
- fitsPanel,
25
- metricsEqual,
26
- panelBounds,
27
- type IShellMetrics,
28
- } from "./shell-metrics"
29
- import type {
30
- TShellFitInstanceId,
31
- IShellFitPanelBounds,
32
- IShellFitSeed,
33
- IShellFitState,
34
- } from "./type"
35
-
36
- /** An unmeasured shell. Zeroes read as "no layout yet", which the rule fails
37
- * open on rather than hiding a panel over a reading it never took. */
38
- const NO_METRICS: IShellMetrics = {
39
- rail: 0,
40
- insetMin: 0,
41
- panelMin: 0,
42
- viewport: 0,
43
- chrome: 0,
44
- }
45
-
46
- /** A panel that mounts at `--panel-width`. */
47
- const DEFAULT_SHELL_FIT_SEED: IShellFitSeed = { panelWidth: null }
48
-
49
- const NO_BOUNDS: IShellFitPanelBounds = { min: 0, max: 0 }
50
-
51
- /**
52
- * A string-keyed atom family.
53
- *
54
- * `jotai/utils`' `atomFamily` is deprecated for Jotai v3, and we need only
55
- * the string-keyed case with a `remove` — so this stays in-house rather than
56
- * adding `jotai-family` as a second Jotai package to keep version-aligned.
57
- * Dropping a key lets the store's WeakMap release that instance's state.
58
- */
59
- type TFamily<AtomType> = ((id: TShellFitInstanceId) => AtomType) & {
60
- remove: (id: TShellFitInstanceId) => void
61
- }
62
-
63
- /** Every family, so `removeShellFitInstance` can drop an id from all of them. */
64
- const families: { remove: (id: TShellFitInstanceId) => void }[] = []
65
-
66
- function keyed<AtomType>(create: (id: TShellFitInstanceId) => AtomType) {
67
- const cache = new Map<TShellFitInstanceId, AtomType>()
68
- const family = ((id: TShellFitInstanceId) => {
69
- let instance = cache.get(id)
70
- if (instance === undefined) {
71
- instance = create(id)
72
- cache.set(id, instance)
73
- }
74
- return instance
75
- }) as TFamily<AtomType>
76
- family.remove = (id: TShellFitInstanceId) => {
77
- cache.delete(id)
78
- }
79
- families.push(family)
80
- return family
81
- }
82
-
83
- function stateFamily<Value>(name: string, initialValue: Value) {
84
- return keyed((id) => {
85
- const instance = atom(initialValue)
86
- instance.debugLabel = `shell-fit/${id}/${name}`
87
- return instance
88
- })
89
- }
90
-
91
- function readFamily<Value>(
92
- name: string,
93
- read: (get: Getter, id: TShellFitInstanceId) => Value
94
- ) {
95
- return keyed((id) => {
96
- const instance = atom((get) => read(get, id))
97
- instance.debugLabel = `shell-fit/${id}/${name}`
98
- return instance
99
- })
100
- }
101
-
102
- function actionFamily<Args extends unknown[]>(
103
- name: string,
104
- write: (
105
- get: Getter,
106
- set: Setter,
107
- id: TShellFitInstanceId,
108
- ...args: Args
109
- ) => void
110
- ) {
111
- return keyed((id) => {
112
- const instance = atom(null, (get, set, ...args: Args) =>
113
- write(get, set, id, ...args)
114
- )
115
- instance.debugLabel = `shell-fit/${id}/${name}`
116
- return instance
117
- })
118
- }
119
-
120
- /** The shell's own measurement of its columns. `useShellFit` is the only
121
- * writer; read `shellFitMeasuredAtom` to get it with the "no layout yet" case
122
- * already resolved. */
123
- export const shellFitMetricsAtom = stateFamily<IShellMetrics>(
124
- "metrics",
125
- NO_METRICS
126
- )
127
-
128
- /** The width the user dragged to, before clamping — null while the panel sits
129
- * at `--panel-width`. Read `shellFitPanelWidthAtom` for the width the panel
130
- * actually renders at: clamping on read is what lets a narrowing viewport
131
- * pull the panel down without forgetting the width they asked for. */
132
- export const shellFitRequestedWidthAtom = stateFamily<number | null>(
133
- "requestedWidth",
134
- null
135
- )
136
-
137
- const shellFitSeedAtom = stateFamily<IShellFitSeed>(
138
- "seed",
139
- DEFAULT_SHELL_FIT_SEED
140
- )
141
- const shellFitInitializedAtom = stateFamily<boolean>("initialized", false)
142
-
143
- /** The metrics, or null when the shell has no layout to report — a server
144
- * render, a `display: none` host, a test with no layout engine. A zero is not
145
- * a width, and treating it as one would pin the panel to nothing. */
146
- export const shellFitMeasuredAtom = readFamily<IShellMetrics | null>(
147
- "measured",
148
- (get, id) => {
149
- const metrics = get(shellFitMetricsAtom(id))
150
- return metrics.panelMin > 0 ? metrics : null
151
- }
152
- )
153
-
154
- /** Whether the shell can hold a secondary panel at all. */
155
- export const shellFitFitsAtom = readFamily("fits", (get, id) =>
156
- fitsPanel(get(shellFitMetricsAtom(id)))
157
- )
158
-
159
- /** The range a resize may land in. */
160
- export const shellFitPanelBoundsAtom = readFamily<IShellFitPanelBounds>(
161
- "panelBounds",
162
- (get, id) => {
163
- const measured = get(shellFitMeasuredAtom(id))
164
- return measured ? panelBounds(measured) : NO_BOUNDS
165
- }
166
- )
167
-
168
- /** The width the secondary panel renders at, or null before the first
169
- * measurement, where the caller falls back to `--panel-width`. */
170
- export const shellFitPanelWidthAtom = readFamily<number | null>(
171
- "panelWidth",
172
- (get, id) => {
173
- const measured = get(shellFitMeasuredAtom(id))
174
- if (!measured) return null
175
- const requested = get(shellFitRequestedWidthAtom(id))
176
- return clampPanelWidth(requested ?? measured.panelMin, measured)
177
- }
178
- )
179
-
180
- /** The whole fit of one shell. This changes on every measurement, so a
181
- * component that reads one field should subscribe to that field's atom
182
- * instead: `useAtomValue(shellFitFitsAtom("app-shell"))`. */
183
- export const shellFitStateAtom = readFamily<IShellFitState>(
184
- "state",
185
- (get, id) => ({
186
- sidebar: get(shellFitMetricsAtom(id)).sidebar ?? null,
187
- metrics: get(shellFitMeasuredAtom(id)),
188
- fits: get(shellFitFitsAtom(id)),
189
- panelWidth: get(shellFitPanelWidthAtom(id)),
190
- bounds: get(shellFitPanelBoundsAtom(id)),
191
- })
192
- )
193
-
194
- /** @internal The measurement's way in. Silent, and inert when the numbers did
195
- * not move — a resize event that changes nothing must not re-render a shell. */
196
- export const measureShellFitAtom = actionFamily<[metrics: IShellMetrics]>(
197
- "measure",
198
- (get, set, id, metrics) => {
199
- if (metricsEqual(get(shellFitMetricsAtom(id)), metrics)) return
200
- set(shellFitMetricsAtom(id), metrics)
201
- }
202
- )
203
-
204
- /** Resize the secondary panel. Clamped on the way in, so a drag past the
205
- * gutter parks at the bound instead of banking travel it has to give back —
206
- * and a caller with no idea how wide the shell is can still ask for 900. */
207
- export const resizeShellPanelAtom = actionFamily<[width: number]>(
208
- "resizePanel",
209
- (get, set, id, width) => {
210
- const measured = get(shellFitMeasuredAtom(id))
211
- set(
212
- shellFitRequestedWidthAtom(id),
213
- measured ? clampPanelWidth(width, measured) : width
214
- )
215
- }
216
- )
217
-
218
- /** Back to the width the shell mounted with — `defaultPanelWidth`, or
219
- * `--panel-width` when there was none. */
220
- export const resetShellPanelWidthAtom = actionFamily<[]>(
221
- "resetPanelWidth",
222
- (get, set, id) => {
223
- set(shellFitRequestedWidthAtom(id), get(shellFitSeedAtom(id)).panelWidth)
224
- }
225
- )
226
-
227
- /** @internal Seed the instance once. A seed describes the mount, not every
228
- * render, so a `defaultPanelWidth` that arrives later never overwrites a
229
- * width the user dragged to. */
230
- export const mountShellFitAtom = actionFamily<[seed: IShellFitSeed]>(
231
- "mount",
232
- (get, set, id, seed) => {
233
- if (get(shellFitInitializedAtom(id))) return
234
- set(shellFitInitializedAtom(id), true)
235
- set(shellFitSeedAtom(id), seed)
236
- set(shellFitRequestedWidthAtom(id), seed.panelWidth)
237
- }
238
- )
239
-
240
- /** Drop every atom for `id`. `useShellFit` calls this on unmount for shells it
241
- * keyed itself; an explicit `shellId` is the app's key and outlives its
242
- * component, so a resized panel survives a route change. */
243
- export function removeShellFitInstance(id: TShellFitInstanceId): void {
244
- removeShellPanelInstance(id)
245
- for (const family of families) family.remove(id)
246
- }
@@ -1,139 +0,0 @@
1
- "use client"
2
-
3
- import { MotionIcon } from "motion-icons-react"
4
- import * as React from "react"
5
- import { useAtomValueRawSync } from "jotai"
6
- import { removeShellFitInstance } from "./shell-fit-atom"
7
- import { shellPanelAtoms } from "./shell-panel-atom"
8
-
9
- import { AnimatedPanel } from "./animated-panel.tsx"
10
- import { cn } from "@/lib/utils"
11
- import type { IShellLayoutProps, TShellPanelControlProps } from "./type"
12
- import { SHELL_BEZEL_CLASSES, TITLE_BAR_HEIGHT } from "./utils"
13
- import type { ClassNameValue } from "tailwind-merge"
14
- import { AnimatedPanelProvider } from "./animated-panel-provider.tsx"
15
- import { AnimatedPanelTrigger } from "./animated-panel-trigger.tsx"
16
- import { AnimatedPanelInset } from "./animated-panel-inset.tsx"
17
-
18
- export function ShellLayout({
19
- children,
20
- variant = "desktop",
21
- panels,
22
- className,
23
- header,
24
- trailing,
25
- defaultOpen,
26
- panelComponents,
27
- ...panelControlProps
28
- }: IShellLayoutProps): React.ReactElement {
29
- const background: ClassNameValue = `bg-linear-to-tr/increasing from-neutral-200 via-neutral-100 to-stone-200 dark:from-neutral-900 dark:via-neutral-950 dark:to-stone-950`
30
-
31
- const generatedId = React.useId()
32
- const shellId = panelControlProps.shellId ?? generatedId
33
- React.useEffect(() => {
34
- if (panelControlProps.shellId !== undefined) return
35
- return () => removeShellFitInstance(shellId)
36
- }, [shellId, panelControlProps.shellId])
37
- const sharedComponents = useAtomValueRawSync(
38
- shellPanelAtoms(shellId).components
39
- )
40
-
41
- // Content pushed through `openPanel(side, component)` wins over the static
42
- // `panels` entry; a side renders its panel when either supplies content.
43
- const leftContent =
44
- sharedComponents.left ?? panelComponents?.left ?? panels?.left?.component
45
- const rightContent =
46
- sharedComponents.right ?? panelComponents?.right ?? panels?.right?.component
47
-
48
- // Each panel seeds its own side's initial state (`defaultOpen ?? open`);
49
- // an explicit `defaultOpen` record — usually from useShellPanels — wins
50
- // per side.
51
- const initialOpen: TShellPanelControlProps["defaultOpen"] = {
52
- ...(panels?.left && {
53
- left: panels.left.defaultOpen ?? true,
54
- }),
55
- ...(panels?.right && {
56
- right: panels.right.defaultOpen ?? false,
57
- }),
58
- ...defaultOpen,
59
- }
60
-
61
- return (
62
- <AnimatedPanelProvider
63
- {...panelControlProps}
64
- shellId={shellId}
65
- defaultOpen={initialOpen}
66
- className={cn(
67
- "min-h-0 px-2 pb-2 relative h-full",
68
- variant === "web" && "pt-2",
69
- className,
70
- background
71
- )}
72
- style={{
73
- paddingTop: variant === "desktop" ? TITLE_BAR_HEIGHT : 0,
74
- }}
75
- >
76
- {leftContent && (
77
- <AnimatedPanel
78
- ariaLabel="Primary navigation"
79
- collapsible="icon"
80
- role="navigation"
81
- variant="inset"
82
- >
83
- {leftContent}
84
- </AnimatedPanel>
85
- )}
86
-
87
- <AnimatedPanelInset>
88
- <header className="h-12 gap-2 px-2 flex flex-row! items-center justify-between border-b">
89
- {leftContent && (
90
- <div className="min-w-0 gap-2 flex shrink-0 items-center justify-start">
91
- <AnimatedPanelTrigger side="left">
92
- <MotionIcon name="PanelLeft" size={24} animation="press" />
93
- </AnimatedPanelTrigger>
94
- </div>
95
- )}
96
- {header && (
97
- <div className="min-w-0 flex flex-1 items-center">{header}</div>
98
- )}
99
- {(trailing || rightContent) && (
100
- // ml-auto, not flex-fill: the cluster hugs the trailing edge even
101
- // when there is no header (or left trigger) to push against.
102
- <div className="gap-2 ml-auto flex shrink-0 items-center justify-end">
103
- {trailing}
104
- {rightContent && (
105
- <AnimatedPanelTrigger aria-label="Toggle panel" side="right">
106
- <MotionIcon
107
- className="opacity-70"
108
- name="PanelRight"
109
- size={24}
110
- />
111
- </AnimatedPanelTrigger>
112
- )}
113
- </div>
114
- )}
115
- </header>
116
- <div className="min-h-24 flex-1 overflow-auto">{children}</div>
117
- </AnimatedPanelInset>
118
-
119
- {rightContent && (
120
- <AnimatedPanel
121
- ariaLabel={panels?.right?.name ?? "Secondary panel"}
122
- // Below md the panel is portal led over the page, so it carries the
123
- // surface itself; the desktop rail keeps it on the inner panel.
124
- className={cn(
125
- "bg-neutral-50 dark:border-neutral-800 dark:bg-neutral-900",
126
- "rounded-md",
127
- SHELL_BEZEL_CLASSES
128
- )}
129
- collapsible="offcanvas"
130
- role="complementary"
131
- side="right"
132
- variant="inset"
133
- >
134
- {rightContent}
135
- </AnimatedPanel>
136
- )}
137
- </AnimatedPanelProvider>
138
- )
139
- }
@@ -1,133 +0,0 @@
1
- /**
2
- * The shell's layout arithmetic, as plain functions over px.
3
- *
4
- * Nothing here touches React or the DOM. This module IS the contract of who
5
- * gets which column, which keeps the rule unit-testable on its own and lets
6
- * the shell-fit atoms (`shellFitFitsAtom`, `shellFitPanelWidthAtom`) call it
7
- * without restating it: `useShellFit` only supplies the measurements.
8
- */
9
-
10
- /** The px the shell lays itself out with. Every field is measured from a CSS
11
- * variable (see `SHELL_WIDTHS`), never hard-coded, so a consumer's override
12
- * flows straight through the rule. */
13
- export interface IShellSidebarFit {
14
- width: number
15
- minWidth: number
16
- maxWidth: number
17
- canExpand: boolean
18
- mode: "expanded" | "icon" | "hidden"
19
- }
20
-
21
- /** Reserve the body first, then shrink, fold, or hide the navigation rail.
22
- * The requested width/open state is retained so widening restores it. */
23
- export function fitSidebar({
24
- width,
25
- padding,
26
- gap,
27
- insetMin,
28
- expanded,
29
- icon,
30
- minimum,
31
- open,
32
- collapsible,
33
- present,
34
- }: {
35
- width: number
36
- padding: number
37
- gap: number
38
- insetMin: number
39
- expanded: number
40
- icon: number
41
- minimum: number
42
- open: boolean
43
- collapsible: string
44
- present: boolean
45
- }): IShellSidebarFit {
46
- const room = width > 0 ? Math.max(0, width - padding - gap - insetMin) : 480
47
- const canExpand = present && room >= minimum
48
- const isExpanded = canExpand && (open || collapsible === "none")
49
- const railWidth = !present
50
- ? 0
51
- : isExpanded
52
- ? Math.min(expanded, room)
53
- : collapsible === "offcanvas" || room < icon
54
- ? 0
55
- : icon
56
- return {
57
- width: railWidth,
58
- minWidth: minimum,
59
- maxWidth: Math.max(minimum, Math.min(480, room)),
60
- canExpand,
61
- mode: railWidth === 0 ? "hidden" : isExpanded ? "expanded" : "icon",
62
- }
63
- }
64
-
65
- export interface IShellMetrics {
66
- sidebar?: IShellSidebarFit
67
- /** What the left rail occupies right now — its expanded width, its icon
68
- * width, or 0 when there is no rail at all (or it is off canvas). */
69
- rail: number
70
- /** The floor the body refuses to go below. */
71
- insetMin: number
72
- /** The secondary panel's floor, which is also the width it opens at. */
73
- panelMin: number
74
- /** Available shell container width (legacy field name). */
75
- viewport: number
76
- /** px the shell's own frame eats before any column gets a share: its
77
- * padding, plus the gap between columns.
78
- */
79
- chrome: number
80
- }
81
-
82
- /** px the shell needs before a secondary panel can exist: the rail as it
83
- * stands, plus the body and the panel at their own floors. */
84
- export function requiredWidth({ rail, insetMin, panelMin }: IShellMetrics) {
85
- return rail + insetMin + panelMin
86
- }
87
-
88
- /**
89
- * Whether the shell can hold a secondary panel, including padding and gaps.
90
- *
91
- * An unmeasurable shell fails open. A server render, a `display: none` host
92
- * or a test environment with no layout engine all report 0, and a panel must
93
- * never disappear over a reading the layout could not produce.
94
- */
95
- export function fitsPanel(metrics: IShellMetrics) {
96
- if (metrics.viewport <= 0 || metrics.panelMin <= 0) return true
97
- return requiredWidth(metrics) + metrics.chrome <= metrics.viewport
98
- }
99
-
100
- /** How wide the secondary panel may be: never under its own floor, never past
101
- * the slack the body holds above its floor. `max` never drops below `min`, so
102
- * a shell that does not fit reports a degenerate range instead of an inverted
103
- * one — `fitsPanel` is what hides the panel, not a negative bound. */
104
- export function panelBounds(metrics: IShellMetrics) {
105
- const { chrome, insetMin, panelMin, rail, viewport } = metrics
106
- return {
107
- min: panelMin,
108
- max: Math.max(panelMin, viewport - chrome - rail - insetMin),
109
- }
110
- }
111
-
112
- export function clampPanelWidth(width: number, metrics: IShellMetrics) {
113
- const { min, max } = panelBounds(metrics)
114
- return Math.min(Math.max(width, min), max)
115
- }
116
-
117
- /** Resizes fire per pointer move and per resize event, most of them landing
118
- * on the same numbers — comparing fields keeps those from re-rendering the
119
- * whole shell. */
120
- export function metricsEqual(a: IShellMetrics, b: IShellMetrics) {
121
- return (
122
- a.rail === b.rail &&
123
- a.insetMin === b.insetMin &&
124
- a.panelMin === b.panelMin &&
125
- a.viewport === b.viewport &&
126
- a.chrome === b.chrome &&
127
- a.sidebar?.width === b.sidebar?.width &&
128
- a.sidebar?.minWidth === b.sidebar?.minWidth &&
129
- a.sidebar?.maxWidth === b.sidebar?.maxWidth &&
130
- a.sidebar?.canExpand === b.sidebar?.canExpand &&
131
- a.sidebar?.mode === b.sidebar?.mode
132
- )
133
- }
@@ -1,74 +0,0 @@
1
- import { atom } from "jotai"
2
- import type { TSidebarComponentMap, TSidebarSide } from "./type"
3
-
4
- type OpenState = Record<TSidebarSide, boolean>
5
- type Handlers = {
6
- setOpen: (open: boolean, side: TSidebarSide) => void
7
- setOpenMobile: (open: boolean, side: TSidebarSide) => void
8
- }
9
- function createState() {
10
- const railWidth = atom<number | null>(null)
11
- const resizeSidebar = atom(null, (_get, set, width: number) => {
12
- if (Number.isFinite(width))
13
- set(railWidth, Math.max(180, Math.min(480, width)))
14
- })
15
- const open = atom<OpenState>({ left: true, right: false })
16
- const mobile = atom<OpenState>({ left: false, right: false })
17
- const components = atom<TSidebarComponentMap>({})
18
- const handlers = atom<Handlers | null>(null)
19
- const seeded = atom(false)
20
- const setOpen = atom(null, (get, set, value: boolean, side: TSidebarSide) => {
21
- const host = get(handlers)
22
- if (host) host.setOpen(value, side)
23
- else set(open, { ...get(open), [side]: value })
24
- })
25
- const setOpenMobile = atom(
26
- null,
27
- (get, set, value: boolean, side: TSidebarSide) => {
28
- const host = get(handlers)
29
- if (host) host.setOpenMobile(value, side)
30
- else set(mobile, { ...get(mobile), [side]: value })
31
- }
32
- )
33
- const toggle = atom(null, (get, set, side: TSidebarSide) =>
34
- set(setOpen, !get(open)[side], side)
35
- )
36
- const seed = atom(
37
- null,
38
- (
39
- get,
40
- set,
41
- initial?: Partial<OpenState>,
42
- initialMobile?: Partial<OpenState>
43
- ) => {
44
- if (get(seeded)) return
45
- set(seeded, true)
46
- set(open, { ...get(open), ...initial })
47
- set(mobile, { ...get(mobile), ...initialMobile })
48
- }
49
- )
50
- return {
51
- railWidth,
52
- resizeSidebar,
53
- open,
54
- mobile,
55
- components,
56
- handlers,
57
- setOpen,
58
- setOpenMobile,
59
- toggle,
60
- seed,
61
- }
62
- }
63
- const instances = new Map<string, ReturnType<typeof createState>>()
64
- export function shellPanelAtoms(id: string) {
65
- let state = instances.get(id)
66
- if (!state) {
67
- state = createState()
68
- instances.set(id, state)
69
- }
70
- return state
71
- }
72
- export function removeShellPanelInstance(id: string) {
73
- instances.delete(id)
74
- }