@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,108 +0,0 @@
1
- "use client"
2
-
3
- import { useReducedMotion } from "motion/react"
4
- import * as React from "react"
5
- import { useAtomValue, useSetAtom } from "jotai"
6
-
7
- import { cn } from "@/lib/utils"
8
- import { SPRING_LAYOUT } from "@/lib/ease.ts"
9
- import {
10
- scaffoldPanelHiddenAtom,
11
- setScaffoldPanelHoveredAtom,
12
- toggleScaffoldPanelAtom,
13
- } from "./scaffold-atom"
14
- import { useScaffoldContext } from "./scaffold-context"
15
- import type { IScaffoldTabProps } from "./type"
16
- import { segmentVariants } from "./utils"
17
- import { Button } from "@/components/ui/button"
18
- import { LucideAppWindow, LucideEyeOff, LucideX } from "lucide-react"
19
- import { GlassButtonGroup } from "@/components/ui/glasscn/glass-button-group.tsx"
20
-
21
- /**
22
- * A panel's tab inside the action cluster: its label plus a close
23
- * affordance. Render one per open panel as Actions children, keyed —
24
- * closes animate out of the pill. Omit `onClose` on the last remaining
25
- * panel's tab; the canvas keeps at least one panel open.
26
- *
27
- * With `panelId` (matching a `Scaffold.Panel`'s `id`), the tab also fronts
28
- * that panel's visibility: a hidden panel dims its tab behind an eye-off
29
- * icon, and pressing the label toggles the panel — showing one past
30
- * capacity hides the least-recently-activated panel in its place.
31
- */
32
- export function ScaffoldTab({
33
- children,
34
- panelId,
35
- onClose,
36
- closeLabel = "Close panel",
37
- sound = true,
38
- className,
39
- ...rest
40
- }: IScaffoldTabProps): React.ReactElement {
41
- const { scaffoldId } = useScaffoldContext()
42
- // The per-panel atom keeps this tab still while its siblings toggle; the
43
- // empty-key sentinel reads false for a tab without a `panelId`.
44
- const hidden = useAtomValue(scaffoldPanelHiddenAtom(scaffoldId, panelId ?? ""))
45
- const togglePanel = useSetAtom(toggleScaffoldPanelAtom(scaffoldId))
46
- const setPanelHovered = useSetAtom(setScaffoldPanelHoveredAtom(scaffoldId))
47
- const reduce = useReducedMotion()
48
- const transition = reduce ? { duration: 0 } : SPRING_LAYOUT
49
-
50
- // A tab closed mid-hover never fires pointer-leave — release the
51
- // spotlight it holds so the canvas doesn't stay dimmed.
52
- React.useEffect(() => {
53
- if (panelId === undefined) return
54
- return () => setPanelHovered(panelId, false)
55
- }, [panelId, setPanelHovered])
56
-
57
- return (
58
- <GlassButtonGroup
59
- layout
60
- animate={reduce ? { opacity: 1, width: "auto" } : "visible"}
61
- data-slot="scaffold-tab"
62
- data-panel-hidden={hidden ? "" : undefined}
63
- onPointerEnter={
64
- panelId !== undefined ? () => setPanelHovered(panelId, true) : undefined
65
- }
66
- onPointerLeave={
67
- panelId !== undefined
68
- ? () => setPanelHovered(panelId, false)
69
- : undefined
70
- }
71
- exit={reduce ? { opacity: 0, width: 0 } : "exit"}
72
- initial={reduce ? { opacity: 0, width: 0 } : "hidden"}
73
- transition={transition}
74
- variants={segmentVariants}
75
- glassVariant="subtle"
76
- className={cn("h-full rounded-sm", className)}
77
- {...rest}
78
- >
79
- <Button
80
- aria-pressed={panelId !== undefined ? !hidden : undefined}
81
- onClick={panelId !== undefined ? () => togglePanel(panelId) : undefined}
82
- size="sm"
83
- sound={sound}
84
- variant="ghost"
85
- className={cn(
86
- "gap-2.5 rounded-sm pl-2",
87
- onClose && "pr-2",
88
- hidden && "text-muted-foreground/70"
89
- )}
90
- >
91
- {hidden ? <LucideEyeOff size={16} /> : <LucideAppWindow size={16} />}
92
- {children}
93
- </Button>
94
- {onClose && (
95
- <Button
96
- aria-label={closeLabel}
97
- onClick={onClose}
98
- size="icon-sm"
99
- sound={sound}
100
- variant="ghost"
101
- className="self-center rounded-none!"
102
- >
103
- <LucideX size={16} />
104
- </Button>
105
- )}
106
- </GlassButtonGroup>
107
- )
108
- }
@@ -1,264 +0,0 @@
1
- import React, {
2
- type ComponentProps,
3
- type ReactElement,
4
- type ReactNode,
5
- } from "react"
6
-
7
- /** Key of one scaffold's slice of the store. */
8
- export type TScaffoldInstanceId = string
9
-
10
- /** The identity every scaffold part shares through ScaffoldContext. State
11
- * itself lives in the store — parts subscribe to the atoms they render from,
12
- * so this value never changes identity while the scaffold is mounted. */
13
- export interface IScaffoldContextValue {
14
- scaffoldId: TScaffoldInstanceId
15
- /** Drawer width in px — Actions reads it to slide out of the drawer's way. */
16
- inspectorWidth: number
17
- }
18
-
19
- export interface IScaffoldPanelLayout {
20
- width?: number
21
- secondarySize?: number
22
- secondaryExpanded?: boolean
23
- swapped?: boolean
24
- }
25
-
26
- /** One scaffold's whole state, as `useScaffoldState` returns it. A component
27
- * that watches one field should subscribe to that field's atom instead. */
28
- export interface IScaffoldState {
29
- inspectorWidth: number | null
30
- panelLayouts: Record<string, IScaffoldPanelLayout>
31
- /** Whether the inspector drawer is currently shown. */
32
- inspectorOpen: boolean
33
- /** How many panels currently fit side by side, from the measured canvas
34
- * width at `SCAFFOLD_PANEL_MIN_WIDTH` per panel (1..`SCAFFOLD_PANEL_CAPACITY`). */
35
- panelCapacity: number
36
- /** Ids of id'd panels the scaffold is currently hiding — auto-hidden by
37
- * capacity pressure or toggled away from a tab. */
38
- hiddenPanelIds: readonly string[]
39
- /** Id of the panel whose tab the pointer is resting on — the canvas
40
- * spotlights it by fading every other id'd panel to 0.35 opacity. */
41
- hoveredPanelId: string | null
42
- }
43
-
44
- /** Drive a scaffold by id from anywhere, as `useScaffoldActions` returns it. */
45
- export interface IScaffoldStateActions {
46
- resizePanel: (panelId: string, width: number) => void
47
- resizeInspector: (width: number) => void
48
- resizeSecondaryPanel: (panelId: string, height: number) => void
49
- setSecondaryExpanded: (panelId: string, expanded: boolean) => void
50
- setPanelSwapped: (panelId: string, swapped: boolean) => void
51
- setInspectorOpen: (open: boolean) => void
52
- toggleInspector: () => void
53
- /** Show/hide an id'd panel. Showing past capacity auto-hides the
54
- * least-recently-activated visible panel; the last visible one never hides. */
55
- togglePanel: (panelId: string) => void
56
- reset: () => void
57
- }
58
-
59
- /** @internal Which props currently control the scaffold — write gates for
60
- * the action atoms, so the store never overwrites a prop. */
61
- export interface IScaffoldConfig {
62
- controlsInspector: boolean
63
- }
64
-
65
- /** @internal The mounted root's callbacks, published into the store so
66
- * action atoms can report changes wherever they were fired from. */
67
- export interface IScaffoldHandlers {
68
- onInspectorOpenChange?: (open: boolean) => void
69
- }
70
-
71
- /** @internal Bookkeeping for responsive panel hiding.
72
- * - `visibleOrder`: visible panel ids, least-recently-activated first — the
73
- * front is what capacity pressure evicts next.
74
- * - `autoHidden`: panels the scaffold hid because the canvas shrank, most
75
- * recent last. They return on their own when room comes back.
76
- * - `userHidden`: panels hidden by a tab press. They stay hidden until the
77
- * tab is pressed again, however wide the canvas grows. */
78
- export interface IScaffoldPanelVisibility {
79
- visibleOrder: string[]
80
- autoHidden: string[]
81
- userHidden: string[]
82
- }
83
-
84
- export interface IScaffoldRootProps extends ComponentProps<"div"> {
85
- /** Names this scaffold's slice of the store, so `useScaffoldState` /
86
- * `useScaffoldActions` can drive it by id and its state outlives the
87
- * component. Omitted, the root keys off `useId` and drops its state on
88
- * unmount. `useScaffold().providerProps` carries one. */
89
- scaffoldId?: TScaffoldInstanceId
90
- /** Controlled inspector state — pair with `onInspectorOpenChange`. The
91
- * prop stays the source of truth: store writes are gated off, and actions
92
- * report through the callback instead. */
93
- inspectorOpen?: boolean
94
- /** Initial inspector state when uncontrolled. Closed by default. */
95
- defaultInspectorOpen?: boolean
96
- onInspectorOpenChange?: (open: boolean) => void
97
- /** Drawer width in px. Also drives how far Actions slides aside. */
98
- inspectorWidth?: number
99
- }
100
-
101
- export type TScaffoldSidebarProps = ComponentProps<"nav">
102
-
103
- export type TScaffoldMainProps = ComponentProps<"div">
104
-
105
- export type TScaffoldCanvasProps = ComponentProps<"div">
106
-
107
- /** React's drag/animation DOM handlers collide with motion's gesture props
108
- * on `motion.*` elements — strip them from pass-through HTML props. */
109
- type TMotionSafe<T> = Omit<
110
- T,
111
- | "onDrag"
112
- | "onDragStart"
113
- | "onDragEnd"
114
- | "onAnimationStart"
115
- | "onAnimationEnd"
116
- | "onAnimationIteration"
117
- >
118
-
119
- export interface IScaffoldActionsProps extends TMotionSafe<
120
- Omit<ComponentProps<"div">, "children">
121
- > {
122
- /** Called when the Add segment is pressed. The segment renders only
123
- * while this is present — omit it to hide Add, e.g. once the canvas
124
- * holds `SCAFFOLD_PANEL_CAPACITY` panels. */
125
- onAdd?: () => void
126
- /** Label of the Add segment. */
127
- addLabel?: ReactNode
128
- /** Replaces the default add icon. */
129
- addIcon?: ReactNode
130
- /** The panel tabs (`Scaffold.Tab`, one per open panel) and any extra
131
- * segments, rendered before Add. Key each tab — closes animate out. */
132
- children?: ReactNode
133
- /** Emit interaction-sound attributes (inert until an app binds cuelume). */
134
- sound?: boolean
135
- }
136
-
137
- export type TScaffoldPanelChild<
138
- T extends IScaffoldSubPanelProps = IScaffoldSubPanelProps,
139
- > = ReactElement<T, React.JSXElementConstructor<T>>
140
-
141
- export interface IScaffoldPanelProps {
142
- /** Stable id opting the panel into responsive hiding: the canvas hides
143
- * id'd panels when it can't grant each `SCAFFOLD_PANEL_MIN_WIDTH`, and a
144
- * `Scaffold.Tab` with the matching `panelId` reflects and toggles it.
145
- * Omitted, the panel always renders. */
146
- id?: string
147
- /** The panel's content, rendered in a card with a drop shadow. */
148
- children: ReactNode
149
- /** The panel's content, rendered in a card with a drop shadow. */
150
- SecondaryPanel?: TScaffoldPanelChild
151
- /** Reveals the Swap action in the seam menu (needs `SecondaryPanel`).
152
- * Swapping trades the two cards with a layout morph — flip the slot
153
- * content here so each card carries its subject to its new home. */
154
- onSwap?: () => void
155
- /** Reveals the Close action in the seam menu — remove `SecondaryPanel`
156
- * here; the strip and the menu leave together. */
157
- onCloseSecondary?: () => void
158
- /** Accessible name of the panel region. */
159
- name?: string
160
- /** Emit interaction-sound attributes on the floating buttons. */
161
- sound?: boolean
162
- /** Accessible name of the seam-menu toggle. */
163
- swapLabel?: string
164
- /** Extra class names for the panel's root element. */
165
- className?: string
166
- }
167
-
168
- export interface IScaffoldTabProps extends TMotionSafe<
169
- Omit<ComponentProps<"div">, "children">
170
- > {
171
- /** The tab's label. */
172
- children?: ReactNode
173
- /** Id of the panel this tab fronts (`Scaffold.Panel`'s `id`). The tab
174
- * then shows whether the panel is hidden and pressing its label toggles
175
- * visibility — showing past capacity hides another panel in its place. */
176
- panelId?: string
177
- /** Renders the tab's close button. The button renders only while this
178
- * is present — omit it to pin the tab, e.g. on the last remaining
179
- * panel (the canvas keeps at least one open). */
180
- onClose?: () => void
181
- /** Accessible name of the close button. */
182
- closeLabel?: string
183
- /** Emit interaction-sound attributes on the close button. */
184
- sound?: boolean
185
- }
186
-
187
- export type TSubPanelPosition = "bottom" | "top"
188
- export type TSubPanelVariant = "card" | "subtle" | "inset"
189
-
190
- export interface IScaffoldSubPanelProps extends TMotionSafe<
191
- Omit<ComponentProps<"div">, "children">
192
- > {
193
- children?: ReactNode
194
- /** Accessible name of the sub-panel region. */
195
- name?: string
196
- /** Whether this is the primary or secondary sub-panel. */
197
- primary?: boolean
198
- /** Whether this sub-panel holds the flexible slot. Defaults to `primary` —
199
- * the panel flips it when the Expand action trades the slots. */
200
- expanded?: boolean
201
- /** Visual style of the sub-panel. */
202
- variant?: TSubPanelVariant
203
- /** Fixed width in px; omitted, the sub-panel flexes to share the canvas. */
204
- width?: number
205
- /** Emit interaction-sound attributes on the floating buttons. */
206
- sound?: boolean
207
- /** Extra class names for the sub-panel's root element. */
208
- className?: string
209
- }
210
-
211
- export interface IScaffoldInspectorProps extends TMotionSafe<
212
- Omit<ComponentProps<"aside">, "children">
213
- > {
214
- children?: ReactNode
215
- /** Accessible name of the drawer region. */
216
- name?: string
217
- }
218
-
219
- export interface IPanelFloatingButtonProps {
220
- onClick?: () => void
221
- /** Accessible name — the button is icon-only. */
222
- label: string
223
- sound?: boolean
224
- className?: string
225
- }
226
-
227
- export interface IPanelMenuButtonProps extends IPanelFloatingButtonProps {
228
- /** Called when the Expand action is pressed — the panel trades which
229
- * sub-panel holds the flexible slot. */
230
- onExpand?: () => void
231
- /** Renders the Close action; called when it is pressed — the consumer
232
- * removes the secondary strip. */
233
- onCloseSecondary?: () => void
234
- /** Whether the secondary strip currently holds the flexible slot —
235
- * flips the Expand chevron between down and up. */
236
- secondaryExpanded?: boolean
237
- /** Whether the panel is swapped (column-reverse). Mirrors the Expand
238
- * chevron so it keeps pointing at the sub-panel that grows next. */
239
- swapped?: boolean
240
- }
241
-
242
- export interface IUseScaffoldOptions {
243
- /** Names the scaffold's slice of the store. Omitted, the hook generates
244
- * one and drops its state on unmount. */
245
- scaffoldId?: TScaffoldInstanceId
246
- /** Initial inspector state. Closed by default. */
247
- defaultInspectorOpen?: boolean
248
- /** Fires on every inspector open/close. */
249
- onInspectorChange?: (open: boolean) => void
250
- }
251
-
252
- export interface IScaffoldControls {
253
- /** The id the hook and the root share — hand it to `useScaffoldState` /
254
- * `useScaffoldActions` to drive the scaffold from elsewhere. */
255
- scaffoldId: TScaffoldInstanceId
256
- inspectorOpen: boolean
257
- setInspectorOpen: (open: boolean) => void
258
- toggleInspector: () => void
259
- /** Spread onto Scaffold.Root. */
260
- providerProps: Pick<
261
- IScaffoldRootProps,
262
- "scaffoldId" | "defaultInspectorOpen" | "onInspectorOpenChange"
263
- >
264
- }
@@ -1,85 +0,0 @@
1
- "use client"
2
-
3
- import { useMemo } from "react"
4
- import { useAtomValue, useSetAtom } from "jotai"
5
-
6
- import {
7
- resetScaffoldAtom,
8
- resizeScaffoldInspectorAtom,
9
- updateScaffoldPanelLayoutAtom,
10
- scaffoldStateAtom,
11
- setScaffoldInspectorOpenAtom,
12
- toggleScaffoldInspectorAtom,
13
- toggleScaffoldPanelAtom,
14
- } from "./scaffold-atom"
15
- import type {
16
- TScaffoldInstanceId,
17
- IScaffoldState,
18
- IScaffoldStateActions,
19
- } from "./type"
20
-
21
- /**
22
- * Read the scaffold registered under `scaffoldId` from anywhere below
23
- * `ExegiaProvider` — no controller, no props, no provider of its own.
24
- *
25
- * ```tsx
26
- * const { inspectorOpen, hiddenPanelIds } = useScaffoldState("workspace")
27
- * ```
28
- *
29
- * This returns the whole state object, so the caller re-renders on every
30
- * change, hovers included. A component that reads one field should subscribe
31
- * to that field's atom instead:
32
- * `useAtomValue(scaffoldInspectorOpenAtom("workspace"))`.
33
- */
34
- export function useScaffoldState(
35
- scaffoldId: TScaffoldInstanceId
36
- ): IScaffoldState {
37
- return useAtomValue(scaffoldStateAtom(scaffoldId))
38
- }
39
-
40
- /**
41
- * Drive the scaffold registered under `scaffoldId` from anywhere. Writes
42
- * only — the caller never re-renders when the scaffold changes, so this is
43
- * what a command palette or a keyboard shortcut should reach for.
44
- *
45
- * ```tsx
46
- * const scaffold = useScaffoldActions("workspace")
47
- * <Button onClick={scaffold.toggleInspector}>Inspect</Button>
48
- * ```
49
- */
50
- export function useScaffoldActions(
51
- scaffoldId: TScaffoldInstanceId
52
- ): IScaffoldStateActions {
53
- const setInspectorOpen = useSetAtom(setScaffoldInspectorOpenAtom(scaffoldId))
54
- const toggleInspector = useSetAtom(toggleScaffoldInspectorAtom(scaffoldId))
55
- const togglePanel = useSetAtom(toggleScaffoldPanelAtom(scaffoldId))
56
- const updatePanel = useSetAtom(updateScaffoldPanelLayoutAtom(scaffoldId))
57
- const resizeInspector = useSetAtom(resizeScaffoldInspectorAtom(scaffoldId))
58
- const reset = useSetAtom(resetScaffoldAtom(scaffoldId))
59
-
60
- return useMemo(
61
- () => ({
62
- setInspectorOpen,
63
- toggleInspector,
64
- togglePanel,
65
- reset,
66
- resizeInspector,
67
- resizePanel: (panelId: string, width: number) =>
68
- updatePanel(panelId, { width }),
69
- resizeSecondaryPanel: (panelId: string, secondarySize: number) =>
70
- updatePanel(panelId, { secondarySize }),
71
- setSecondaryExpanded: (panelId: string, secondaryExpanded: boolean) =>
72
- updatePanel(panelId, { secondaryExpanded }),
73
- setPanelSwapped: (panelId: string, swapped: boolean) =>
74
- updatePanel(panelId, { swapped }),
75
- }),
76
- [
77
- setInspectorOpen,
78
- toggleInspector,
79
- togglePanel,
80
- reset,
81
- resizeInspector,
82
- updatePanel,
83
- ]
84
- )
85
- }
@@ -1,59 +0,0 @@
1
- "use client"
2
-
3
- import { useEffect, useId, useMemo } from "react"
4
- import { useAtomValue, useSetAtom } from "jotai"
5
-
6
- import {
7
- removeScaffoldInstance,
8
- scaffoldInspectorOpenAtom,
9
- setScaffoldInspectorOpenAtom,
10
- toggleScaffoldInspectorAtom,
11
- } from "./scaffold-atom"
12
- import type { IScaffoldControls, IUseScaffoldOptions } from "./type"
13
-
14
- /**
15
- * Owns the scaffold's inspector state for UI living outside the scaffold
16
- * (title-bar buttons, command palette, shortcuts). Spread the returned
17
- * `providerProps` onto `Scaffold.Root`; without this hook the root manages
18
- * the same state internally via `defaultInspectorOpen`.
19
- *
20
- * The hook and the root meet in the store: `providerProps` carries a
21
- * `scaffoldId`, both sides read and write that instance's atoms, and
22
- * `useScaffoldState` / `useScaffoldActions` reach the same slice from
23
- * anywhere else by id. Unnamed scaffolds key off `useId` and are dropped on
24
- * unmount; an explicit `scaffoldId` outlives its component.
25
- */
26
- export function useScaffold({
27
- scaffoldId: scaffoldIdProp,
28
- defaultInspectorOpen,
29
- onInspectorChange,
30
- }: IUseScaffoldOptions = {}): IScaffoldControls {
31
- const generatedId = useId()
32
- const scaffoldId = scaffoldIdProp ?? generatedId
33
-
34
- const inspectorOpen = useAtomValue(scaffoldInspectorOpenAtom(scaffoldId))
35
- const setInspectorOpen = useSetAtom(setScaffoldInspectorOpenAtom(scaffoldId))
36
- const toggleInspector = useSetAtom(toggleScaffoldInspectorAtom(scaffoldId))
37
-
38
- useEffect(() => {
39
- if (scaffoldIdProp !== undefined) return
40
- return () => removeScaffoldInstance(scaffoldId)
41
- }, [scaffoldIdProp, scaffoldId])
42
-
43
- const providerProps = useMemo<IScaffoldControls["providerProps"]>(
44
- () => ({
45
- scaffoldId,
46
- defaultInspectorOpen,
47
- onInspectorOpenChange: onInspectorChange,
48
- }),
49
- [scaffoldId, defaultInspectorOpen, onInspectorChange]
50
- )
51
-
52
- return {
53
- scaffoldId,
54
- inspectorOpen,
55
- setInspectorOpen,
56
- toggleInspector,
57
- providerProps,
58
- }
59
- }
@@ -1,112 +0,0 @@
1
- import type { Variants } from "motion/react"
2
- import type { ClassNameValue } from "tailwind-merge"
3
- import type {
4
- IScaffoldPanelVisibility,
5
- TSubPanelVariant,
6
- } from "@/components/blocks/scaffold/type.ts"
7
- import { EASE_OUT } from "@/lib/ease.ts"
8
- import {
9
- SCAFFOLD_CANVAS_GAP,
10
- SCAFFOLD_PANEL_CAPACITY,
11
- SCAFFOLD_PANEL_MIN_WIDTH,
12
- } from "./constants"
13
-
14
- /**
15
- * How many panels fit on a canvas of `width` px, granting each
16
- * `SCAFFOLD_PANEL_MIN_WIDTH` plus the gaps between them. Clamped to
17
- * [1, SCAFFOLD_PANEL_CAPACITY]; an unmeasured canvas (`null`) fits the cap.
18
- */
19
- export function getPanelCapacity(width: number | null): number {
20
- if (width === null) return SCAFFOLD_PANEL_CAPACITY
21
- const fits = Math.floor(
22
- (width + SCAFFOLD_CANVAS_GAP) /
23
- (SCAFFOLD_PANEL_MIN_WIDTH + SCAFFOLD_CANVAS_GAP)
24
- )
25
- return Math.max(1, Math.min(SCAFFOLD_PANEL_CAPACITY, fits))
26
- }
27
-
28
- /** @internal An untracked scaffold: nothing registered, nothing hidden. */
29
- export const EMPTY_SCAFFOLD_VISIBILITY: IScaffoldPanelVisibility = {
30
- visibleOrder: [],
31
- autoHidden: [],
32
- userHidden: [],
33
- }
34
-
35
- /**
36
- * @internal Fold the registered ids and current capacity into a settled
37
- * visibility: prune departed panels, admit new ones, evict the
38
- * least-recently-activated visible panels past capacity, and restore
39
- * auto-hidden ones when room returns. Returns `prev` untouched when nothing
40
- * changes, so callers can compare identities instead of contents.
41
- */
42
- export function reconcileVisibility(
43
- prev: IScaffoldPanelVisibility,
44
- ids: readonly string[],
45
- capacity: number
46
- ): IScaffoldPanelVisibility {
47
- const known = new Set(ids)
48
- const visibleOrder = prev.visibleOrder.filter((id) => known.has(id))
49
- const autoHidden = prev.autoHidden.filter((id) => known.has(id))
50
- const userHidden = prev.userHidden.filter((id) => known.has(id))
51
-
52
- const tracked = new Set([...visibleOrder, ...autoHidden, ...userHidden])
53
- for (const id of ids) if (!tracked.has(id)) visibleOrder.push(id)
54
-
55
- while (visibleOrder.length > capacity && visibleOrder.length > 1) {
56
- autoHidden.push(visibleOrder.shift() as string)
57
- }
58
- while (visibleOrder.length < capacity && autoHidden.length > 0) {
59
- visibleOrder.push(autoHidden.pop() as string)
60
- }
61
-
62
- const unchanged =
63
- visibleOrder.join(" ") === prev.visibleOrder.join(" ") &&
64
- autoHidden.join(" ") === prev.autoHidden.join(" ") &&
65
- userHidden.join(" ") === prev.userHidden.join(" ")
66
- return unchanged ? prev : { visibleOrder, autoHidden, userHidden }
67
- }
68
-
69
- /** Desktop backdrop the whole scaffold sits on — a soft warm-gray wash. */
70
- export const scaffoldBackgroundClass: ClassNameValue =
71
- "bg-linear-to-tr/increasing from-neutral-400 via-stone-200 to-neutral-300 dark:from-neutral-900 dark:via-neutral-950 dark:to-stone-950"
72
-
73
- export const SCAFFOLD_BEZEL_CLASSES =
74
- "bezel-lit-t-2 bezel-lit-blur-2 bezel-lit/57 bezel-dim-b-2 bezel-dim-blur-3 bezel-dim/11 dark:bezel-lit-blur-3 dark:bezel-lit/14 dark:bezel-dim/78"
75
-
76
- /** Card surface shared by a panel's primary area and secondary strip. */
77
- export const panelSurfaceClass: ClassNameValue =
78
- `rounded-md bg-slate-100 dark:bg-neutral-900 ${SCAFFOLD_BEZEL_CLASSES}`
79
-
80
- /** Floating icon button hovering over a panel (close, swap). */
81
- export const floatingButtonClass: ClassNameValue =
82
- "transition-[opacity,scale,box-shadow] duration-200 ease-smooth-out hover:text-neutral-900 hover:shadow-md active:scale-97 dark:bg-neutral-800/95 dark:text-neutral-300 dark:inset-ring-white/10 dark:hover:text-white motion-reduce:transition-none motion-reduce:active:scale-100 z-20"
83
-
84
- /** Hidden until the pointer rests on the panel (always shown for touch and
85
- * while focused) — the affordances stay quiet until the panel is engaged. */
86
- export const revealOnPanelHoverClass: ClassNameValue =
87
- "opacity-0 scale-95 group-hover/panel:opacity-100 group-hover/panel:scale-100 focus-visible:opacity-100 focus-visible:scale-100 pointer-coarse:opacity-100 pointer-coarse:scale-100"
88
-
89
- /** Pill segment inside the actions cluster (Add, browse). */
90
- export const actionSegmentClass: ClassNameValue =
91
- "flex h-[30px] items-center rounded-full text-neutral-700 transition-[background-color,color,scale,box-shadow] duration-150 ease-smooth-out hover:bg-white hover:text-neutral-900 hover:shadow-xs active:scale-97 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:hover:text-white motion-reduce:transition-none motion-reduce:active:scale-100"
92
-
93
- /** Pill segments (seam-menu actions, tabs, Add) blur/fade in place while
94
- * the track morphs around them. The exit is a fast tween, not the layout
95
- * spring — the track stays overflow-visible, so popped-out segments must be
96
- * gone before the shrinking pill leaves them behind as a ghost. */
97
- export const segmentVariants: Variants = {
98
- hidden: { opacity: 0, filter: "blur(4px)" },
99
- visible: { opacity: 1, filter: "blur(0px)" },
100
- exit: {
101
- opacity: 0,
102
- filter: "blur(4px)",
103
- transition: { duration: 0.18, ease: EASE_OUT },
104
- },
105
- }
106
-
107
- /** Map of sub-panel variants to their corresponding side. */
108
- export const subPanelVariant: Record<TSubPanelVariant, ClassNameValue> = {
109
- card: `bg-neutral-50 dark:bg-neutral-900 rounded-md ${SCAFFOLD_BEZEL_CLASSES}`,
110
- subtle: "bg-neutral-100 dark:bg-neutral-800",
111
- inset: "bg-neutral-200 dark:bg-neutral-700",
112
- } as const