@exegia/corpora-ui 2.0.0 → 3.1.0

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