@digithings-ai/ui 0.0.0-stage → 0.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 (424) hide show
  1. package/README.md +48 -2
  2. package/package.json +143 -4
  3. package/src/components/NavShell.tsx +776 -0
  4. package/src/components/SocialRow.tsx +87 -0
  5. package/src/components/Spinner.tsx +27 -0
  6. package/src/components/StackLogo.tsx +40 -0
  7. package/src/components/Terminal.tsx +110 -0
  8. package/src/components/TerminalManifest.tsx +212 -0
  9. package/src/components/ThemeProvider.tsx +271 -0
  10. package/src/components/account/AuthCard.tsx +309 -0
  11. package/src/components/assistant-ui/elements/mermaid-diagram.aui.tsx +63 -0
  12. package/src/components/assistant-ui/elements/mermaid-diagram.tsx +340 -0
  13. package/src/components/brand/BrandWordmark.tsx +32 -0
  14. package/src/components/changelog/ReleaseRail.tsx +81 -0
  15. package/src/components/changelog/index.ts +1 -0
  16. package/src/components/chat/ChatCodeBlock.tsx +67 -0
  17. package/src/components/chat/ChatMarkdown.tsx +66 -0
  18. package/src/components/chat/ChatMarkdownSource.tsx +203 -0
  19. package/src/components/chat/ChatMermaidBlock.tsx +202 -0
  20. package/src/components/chat/ChatMessage.tsx +77 -0
  21. package/src/components/chat/ChatPlayback.tsx +422 -0
  22. package/src/components/chat/ChatStreamCursor.tsx +25 -0
  23. package/src/components/chat/ChatThinking.tsx +113 -0
  24. package/src/components/chat/ChatToolCall.tsx +190 -0
  25. package/src/components/chat/ChatTranscript.tsx +60 -0
  26. package/src/components/chat/ChatWidgetFrame.tsx +107 -0
  27. package/src/components/chat/DigichatBootLoader.tsx +683 -0
  28. package/src/components/chat/DigichatLauncher.tsx +361 -0
  29. package/src/components/chat/DigichatThread.tsx +118 -0
  30. package/src/components/chat/DigichatThreadList.tsx +54 -0
  31. package/src/components/chat/DigichatWordmark.tsx +24 -0
  32. package/src/components/chat/DotMatrix.tsx +650 -0
  33. package/src/components/chat/boot-lab.tsx +766 -0
  34. package/src/components/chat/boot-signal.ts +144 -0
  35. package/src/components/chat/chat-surfaces.ts +52 -0
  36. package/src/components/chat/connection-status.ts +40 -0
  37. package/src/components/chat/digichat-wordmark.ts +355 -0
  38. package/src/components/chat/disclosure-chevron.tsx +49 -0
  39. package/src/components/chat/followable-href.ts +9 -0
  40. package/src/components/chat/gallery-thread/action-icons.tsx +25 -0
  41. package/src/components/chat/gallery-thread/attachment.aui.tsx +262 -0
  42. package/src/components/chat/gallery-thread/block-caret.tsx +439 -0
  43. package/src/components/chat/gallery-thread/cn.ts +1 -0
  44. package/src/components/chat/gallery-thread/composer-keyboard.ts +106 -0
  45. package/src/components/chat/gallery-thread/composer-trigger-popover.aui.tsx +235 -0
  46. package/src/components/chat/gallery-thread/css.d.ts +6 -0
  47. package/src/components/chat/gallery-thread/file.tsx +238 -0
  48. package/src/components/chat/gallery-thread/follow-up-suggestions.aui.tsx +92 -0
  49. package/src/components/chat/gallery-thread/format-json-dump.ts +112 -0
  50. package/src/components/chat/gallery-thread/hooks/use-attachment-src.ts +46 -0
  51. package/src/components/chat/gallery-thread/hooks/use-copy-to-clipboard.ts +9 -0
  52. package/src/components/chat/gallery-thread/image.tsx +519 -0
  53. package/src/components/chat/gallery-thread/markdown-text.tsx +278 -0
  54. package/src/components/chat/gallery-thread/message-error.aui.tsx +105 -0
  55. package/src/components/chat/gallery-thread/message-timing.aui.tsx +143 -0
  56. package/src/components/chat/gallery-thread/private-work-step.tsx +188 -0
  57. package/src/components/chat/gallery-thread/reasoning.tsx +332 -0
  58. package/src/components/chat/gallery-thread/scroll-mode.ts +174 -0
  59. package/src/components/chat/gallery-thread/source.tsx +76 -0
  60. package/src/components/chat/gallery-thread/thread.aui.tsx +1619 -0
  61. package/src/components/chat/gallery-thread/tooltip-icon-button.tsx +53 -0
  62. package/src/components/chat/gallery-thread/typed-welcome-copy.tsx +18 -0
  63. package/src/components/chat/gallery-thread/ui/tooltip.tsx +22 -0
  64. package/src/components/chat/gallery-thread/work-chain-summary.tsx +48 -0
  65. package/src/components/chat/gallery-thread/work-chain.tsx +110 -0
  66. package/src/components/chat/gallery-thread/work-status.ts +66 -0
  67. package/src/components/chat/overlay-scrollbar.tsx +86 -0
  68. package/src/components/chat/sanitize-mermaid-svg.ts +38 -0
  69. package/src/components/chat/skins/SOURCE.md +36 -0
  70. package/src/components/chat/skins/base/attachment.aui.tsx +287 -0
  71. package/src/components/chat/skins/base/aui-default/README.md +45 -0
  72. package/src/components/chat/skins/base/aui-default/collapsible-root.tsx +19 -0
  73. package/src/components/chat/skins/base/aui-default/collapsible.tsx +21 -0
  74. package/src/components/chat/skins/base/aui-default/reasoning.aui.tsx +120 -0
  75. package/src/components/chat/skins/base/aui-default/reasoning.tsx +331 -0
  76. package/src/components/chat/skins/base/aui-default/surfaces.ts +7 -0
  77. package/src/components/chat/skins/base/aui-default/tool-fallback.aui.tsx +772 -0
  78. package/src/components/chat/skins/base/aui-default/tool-group.aui.tsx +241 -0
  79. package/src/components/chat/skins/base/docs-model-options.ts +6 -0
  80. package/src/components/chat/skins/base/elements/assistant-trace.aui.tsx +169 -0
  81. package/src/components/chat/skins/base/elements/composer-trigger-popover.aui.tsx +271 -0
  82. package/src/components/chat/skins/base/elements/directive-text.aui.tsx +29 -0
  83. package/src/components/chat/skins/base/elements/directive-text.tsx +76 -0
  84. package/src/components/chat/skins/base/elements/message-timing.aui.tsx +104 -0
  85. package/src/components/chat/skins/base/elements/model-selector.aui.tsx +140 -0
  86. package/src/components/chat/skins/base/elements/model-selector.tsx +720 -0
  87. package/src/components/chat/skins/base/elements/quote.aui.tsx +290 -0
  88. package/src/components/chat/skins/base/elements/work-chain.tsx +100 -0
  89. package/src/components/chat/skins/base/markdown-text.tsx +294 -0
  90. package/src/components/chat/skins/base/model.ts +1 -0
  91. package/src/components/chat/skins/base/thread.tsx +1050 -0
  92. package/src/components/chat/skins/base/tooltip-icon-button.tsx +56 -0
  93. package/src/components/chat/skins/base/ui/avatar.tsx +115 -0
  94. package/src/components/chat/skins/base/ui/badge.tsx +51 -0
  95. package/src/components/chat/skins/base/ui/button.tsx +67 -0
  96. package/src/components/chat/skins/base/ui/command.tsx +185 -0
  97. package/src/components/chat/skins/base/ui/dialog.tsx +168 -0
  98. package/src/components/chat/skins/base/ui/dot-matrix.tsx +267 -0
  99. package/src/components/chat/skins/base/ui/popover.tsx +97 -0
  100. package/src/components/chat/skins/base/ui/skeleton.tsx +20 -0
  101. package/src/components/chat/skins/base/ui/textarea.tsx +24 -0
  102. package/src/components/chat/skins/base/ui/tooltip.tsx +73 -0
  103. package/src/components/chat/skins/base-assistant-ui/config-provider.tsx +90 -0
  104. package/src/components/chat/skins/base-assistant-ui/defaults.ts +419 -0
  105. package/src/components/chat/skins/base-assistant-ui/index.tsx +44 -0
  106. package/src/components/chat/skins/chatgpt.tsx +448 -0
  107. package/src/components/chat/skins/claude.tsx +380 -0
  108. package/src/components/chat/skins/digichat-composer-toolbar.tsx +151 -0
  109. package/src/components/chat/skins/digichat-context-meter-shares.ts +158 -0
  110. package/src/components/chat/skins/digichat-context-meter.tsx +243 -0
  111. package/src/components/chat/skins/digichat-meter-tone.ts +26 -0
  112. package/src/components/chat/skins/digichat-usage-meter.tsx +103 -0
  113. package/src/components/chat/skins/digichat.tsx +144 -0
  114. package/src/components/chat/skins/expo-react-native.tsx +29 -0
  115. package/src/components/chat/skins/gemini.tsx +322 -0
  116. package/src/components/chat/skins/grok-icon.tsx +34 -0
  117. package/src/components/chat/skins/grok.tsx +369 -0
  118. package/src/components/chat/skins/index.ts +46 -0
  119. package/src/components/chat/skins/perplexity.tsx +462 -0
  120. package/src/components/chat/skins/product-page-assistant/assistant-modal.tsx +73 -0
  121. package/src/components/chat/skins/product-page-assistant/index.tsx +19 -0
  122. package/src/components/chat/skins/product-page-assistant/product-dashboard.tsx +164 -0
  123. package/src/components/chat/skins/react-ink.tsx +97 -0
  124. package/src/components/chat/skins/thread-skin-host-contract.ts +102 -0
  125. package/src/components/chat/skins/thread-skin-view.tsx +156 -0
  126. package/src/components/chat/skins/thread-skins.ts +143 -0
  127. package/src/components/chat/skins/tooltip-icon-button.tsx +35 -0
  128. package/src/components/chat/skins/ui/dropdown-menu.tsx +272 -0
  129. package/src/components/chat/skins/webpage-assistant/assistant-config.ts +238 -0
  130. package/src/components/chat/skins/webpage-assistant/assistant-modal.tsx +78 -0
  131. package/src/components/chat/skins/webpage-assistant/config-provider.tsx +132 -0
  132. package/src/components/chat/skins/webpage-assistant/docs-app.tsx +106 -0
  133. package/src/components/chat/skins/webpage-assistant/docs-article.tsx +109 -0
  134. package/src/components/chat/skins/webpage-assistant/docs-assistant.tsx +73 -0
  135. package/src/components/chat/skins/webpage-assistant/docs-nav.tsx +81 -0
  136. package/src/components/chat/skins/webpage-assistant/host-ui.ts +79 -0
  137. package/src/components/chat/skins/webpage-assistant/index.tsx +12 -0
  138. package/src/components/chat/skins/webpage-assistant/markdown-page.tsx +11 -0
  139. package/src/components/chat/skins/webpage-assistant/pages.ts +9 -0
  140. package/src/components/chat/skins/webpage-assistant/types.ts +178 -0
  141. package/src/components/chat/skins/webpage-assistant/use-mobile.ts +19 -0
  142. package/src/components/chat/stock/SOURCE.md +90 -0
  143. package/src/components/chat/stock/artifacts-panel.tsx +305 -0
  144. package/src/components/chat/stock/attachment.aui.tsx +280 -0
  145. package/src/components/chat/stock/chat-notice.tsx +143 -0
  146. package/src/components/chat/stock/chat-private-mode.tsx +64 -0
  147. package/src/components/chat/stock/deploy-ui-context.tsx +89 -0
  148. package/src/components/chat/stock/embed-chat-prefs.tsx +471 -0
  149. package/src/components/chat/stock/file.tsx +265 -0
  150. package/src/components/chat/stock/follow-up-suggestions.aui.tsx +83 -0
  151. package/src/components/chat/stock/image.tsx +531 -0
  152. package/src/components/chat/stock/index.ts +129 -0
  153. package/src/components/chat/stock/json-view.tsx +140 -0
  154. package/src/components/chat/stock/markdown-text.tsx +319 -0
  155. package/src/components/chat/stock/message-error.aui.tsx +96 -0
  156. package/src/components/chat/stock/message-export-menu.tsx +156 -0
  157. package/src/components/chat/stock/palette-row-preview.tsx +26 -0
  158. package/src/components/chat/stock/reasoning.aui.tsx +120 -0
  159. package/src/components/chat/stock/reasoning.tsx +335 -0
  160. package/src/components/chat/stock/skin-chrome.tsx +81 -0
  161. package/src/components/chat/stock/skin-credit.tsx +63 -0
  162. package/src/components/chat/stock/skin-palette-bridge.tsx +235 -0
  163. package/src/components/chat/stock/skin-palette-context.ts +16 -0
  164. package/src/components/chat/stock/skin-runtime.tsx +52 -0
  165. package/src/components/chat/stock/skin-slash-palette.tsx +393 -0
  166. package/src/components/chat/stock/skin-types.ts +217 -0
  167. package/src/components/chat/stock/stock-chat-prefs-host.tsx +501 -0
  168. package/src/components/chat/stock/stock-send-gate.tsx +94 -0
  169. package/src/components/chat/stock/stock-shape.tsx +39 -0
  170. package/src/components/chat/stock/thread.aui.tsx +645 -0
  171. package/src/components/chat/stock/tool-display.ts +6 -0
  172. package/src/components/chat/stock/tool-fallback.aui.tsx +866 -0
  173. package/src/components/chat/stock/tool-group.aui.tsx +244 -0
  174. package/src/components/chat/stock/tool-surface.ts +120 -0
  175. package/src/components/chat/stock/tooltip-icon-button.tsx +49 -0
  176. package/src/components/chat/stock/ui/avatar.tsx +108 -0
  177. package/src/components/chat/stock/ui/button.tsx +81 -0
  178. package/src/components/chat/stock/ui/collapsible.tsx +21 -0
  179. package/src/components/chat/stock/ui/dialog.tsx +163 -0
  180. package/src/components/chat/stock/ui/skeleton.tsx +13 -0
  181. package/src/components/chat/stock/ui/textarea.tsx +20 -0
  182. package/src/components/chat/stock/ui/tooltip.tsx +68 -0
  183. package/src/components/chat/stock/use-attachment-src.ts +42 -0
  184. package/src/components/chat/stock/use-copy-to-clipboard.ts +29 -0
  185. package/src/components/chat/strip-model-boilerplate.ts +42 -0
  186. package/src/components/chat/suggestion-cycle.tsx +230 -0
  187. package/src/components/chat/suggestion-scroll-row.tsx +81 -0
  188. package/src/components/chat/trace-grouping/chain-group-by.ts +44 -0
  189. package/src/components/chat/trace-grouping/chain-state.ts +141 -0
  190. package/src/components/chat/trace-grouping/index.ts +32 -0
  191. package/src/components/chat/trace-grouping/tool-row.ts +74 -0
  192. package/src/components/chat/trace-grouping/use-deploy-work-disclosure.ts +35 -0
  193. package/src/components/chat/trace-grouping/use-work-chain.ts +103 -0
  194. package/src/components/chat/trace-i18n/core.ts +48 -0
  195. package/src/components/chat/trace-i18n/index.tsx +23 -0
  196. package/src/components/chat/trace-i18n/locales/en.ts +24 -0
  197. package/src/components/chat/trace-i18n/locales/fr.ts +28 -0
  198. package/src/components/chat/trace-i18n/types.ts +35 -0
  199. package/src/components/chat/trace-spacing.ts +249 -0
  200. package/src/components/chat/transcript/activity-view.ts +375 -0
  201. package/src/components/chat/transcript/chat-export.ts +133 -0
  202. package/src/components/chat/transcript/index.ts +10 -0
  203. package/src/components/chat/transcript/save-file.ts +209 -0
  204. package/src/components/chat/transcript/transcript-markdown.ts +428 -0
  205. package/src/components/chat/transcript/types.ts +81 -0
  206. package/src/components/chat/turn-outcome.ts +52 -0
  207. package/src/components/chat/use-warmup-phase.ts +18 -0
  208. package/src/components/chat/work-status-lead.tsx +49 -0
  209. package/src/components/chrome.tsx +264 -0
  210. package/src/components/command-palette/CommandPalette.tsx +404 -0
  211. package/src/components/command-palette/index.ts +6 -0
  212. package/src/components/contact/ContactMailto.tsx +112 -0
  213. package/src/components/contact/index.ts +5 -0
  214. package/src/components/conviction/ConvictionMeter.tsx +40 -0
  215. package/src/components/conviction/SignedConvictionBadge.tsx +26 -0
  216. package/src/components/conviction/index.ts +7 -0
  217. package/src/components/data-layout/BentoGrid.tsx +52 -0
  218. package/src/components/data-layout/CardRail.tsx +150 -0
  219. package/src/components/data-layout/DotMatrixStat.tsx +65 -0
  220. package/src/components/data-layout/FeatureCell.tsx +80 -0
  221. package/src/components/data-layout/MediaFrame.tsx +125 -0
  222. package/src/components/data-layout/ModuleGrid.tsx +735 -0
  223. package/src/components/data-layout/Odometer.tsx +149 -0
  224. package/src/components/data-layout/ProductFrame.tsx +79 -0
  225. package/src/components/data-layout/TestimonialWall.tsx +139 -0
  226. package/src/components/data-layout/index.ts +19 -0
  227. package/src/components/data-layout/treemap.ts +368 -0
  228. package/src/components/deck/DeckStack.tsx +243 -0
  229. package/src/components/desk/DataTable.tsx +373 -0
  230. package/src/components/desk/KpiGrid.tsx +80 -0
  231. package/src/components/desk/Sparkline.tsx +63 -0
  232. package/src/components/desk/StateBlock.tsx +132 -0
  233. package/src/components/desk/index.ts +18 -0
  234. package/src/components/diagrams/ArchitectureDiagram.tsx +350 -0
  235. package/src/components/diagrams/ArchitectureTour.tsx +912 -0
  236. package/src/components/diagrams/TerminalSchematic.tsx +192 -0
  237. package/src/components/diagrams/architecture-svg.tsx +384 -0
  238. package/src/components/diagrams/index.ts +30 -0
  239. package/src/components/diagrams/mermaid-theme.ts +115 -0
  240. package/src/components/diagrams/tour-camera.ts +171 -0
  241. package/src/components/docs/CodeTabs.tsx +90 -0
  242. package/src/components/docs/CopyCommand.tsx +151 -0
  243. package/src/components/docs/DocsLayout.tsx +197 -0
  244. package/src/components/docs/DocsSearch.tsx +97 -0
  245. package/src/components/docs/Endpoint.tsx +135 -0
  246. package/src/components/document/DocumentFrame.tsx +43 -0
  247. package/src/components/document/GlyphList.tsx +51 -0
  248. package/src/components/document/PageTitle.tsx +44 -0
  249. package/src/components/document/Prose.tsx +38 -0
  250. package/src/components/document/Section.tsx +55 -0
  251. package/src/components/document/index.ts +13 -0
  252. package/src/components/effects-chrome/AnnouncementBar.tsx +88 -0
  253. package/src/components/effects-chrome/HorizontalScrollTrack.tsx +461 -0
  254. package/src/components/effects-chrome/Pipeline.tsx +226 -0
  255. package/src/components/effects-chrome/RotatingPrompts.tsx +116 -0
  256. package/src/components/effects-chrome/StackingPanels.tsx +101 -0
  257. package/src/components/effects-chrome/TabStrip.tsx +232 -0
  258. package/src/components/effects-chrome/ToastStack.tsx +201 -0
  259. package/src/components/effects-chrome/horizontal-track-core.ts +70 -0
  260. package/src/components/effects-chrome/index.ts +35 -0
  261. package/src/components/emblems.tsx +188 -0
  262. package/src/components/faviconTheme.ts +23 -0
  263. package/src/components/figure/Figure.tsx +38 -0
  264. package/src/components/figure/index.ts +2 -0
  265. package/src/components/finance-charts/DrawdownPlot.tsx +76 -0
  266. package/src/components/finance-charts/EquityCurve.tsx +71 -0
  267. package/src/components/finance-charts/PriceChart.tsx +119 -0
  268. package/src/components/finance-charts/chart-host.tsx +236 -0
  269. package/src/components/finance-charts/chart-scale.ts +93 -0
  270. package/src/components/finance-charts/demo-data.ts +88 -0
  271. package/src/components/finance-charts/index.ts +46 -0
  272. package/src/components/finance-charts/lw-chart.tsx +292 -0
  273. package/src/components/finance-composites/MarketBar.tsx +243 -0
  274. package/src/components/finance-composites/OrderBook.tsx +133 -0
  275. package/src/components/finance-composites/PerformanceDashboard.tsx +185 -0
  276. package/src/components/finance-composites/SortableTable.tsx +144 -0
  277. package/src/components/finance-composites/StockTicker.tsx +65 -0
  278. package/src/components/finance-composites/SyncedTearsheet.tsx +226 -0
  279. package/src/components/finance-composites/index.ts +28 -0
  280. package/src/components/finance-tearsheet/KpiStrip.tsx +49 -0
  281. package/src/components/finance-tearsheet/LiveBadge.tsx +29 -0
  282. package/src/components/finance-tearsheet/ReturnsMatrix.tsx +321 -0
  283. package/src/components/finance-tearsheet/StrategyTearsheet.tsx +99 -0
  284. package/src/components/finance-tearsheet/TearsheetCard.tsx +54 -0
  285. package/src/components/finance-tearsheet/TradeLogTable.tsx +73 -0
  286. package/src/components/finance-tearsheet/charts.tsx +2624 -0
  287. package/src/components/finance-tearsheet/demo-data.ts +177 -0
  288. package/src/components/finance-tearsheet/format.ts +41 -0
  289. package/src/components/finance-tearsheet/index.ts +120 -0
  290. package/src/components/finance-tearsheet/print.ts +52 -0
  291. package/src/components/finance-tearsheet/risk-bands.ts +48 -0
  292. package/src/components/finance-tearsheet/stats.ts +35 -0
  293. package/src/components/finance-tearsheet/strategy-sheet-model.ts +238 -0
  294. package/src/components/finance-tearsheet/types.ts +58 -0
  295. package/src/components/footer/FooterCells.tsx +109 -0
  296. package/src/components/footer/index.ts +6 -0
  297. package/src/components/graph.tsx +158 -0
  298. package/src/components/icons.tsx +98 -0
  299. package/src/components/landing/PixelWordmark.tsx +36 -0
  300. package/src/components/logos.ts +39 -0
  301. package/src/components/marquee/Marquee.tsx +204 -0
  302. package/src/components/metrics/PerfMetrics.tsx +68 -0
  303. package/src/components/metrics/StatCounter.tsx +104 -0
  304. package/src/components/page-geometry.tsx +177 -0
  305. package/src/components/pricing/Pricing.tsx +174 -0
  306. package/src/components/pricing/PricingMatrix.tsx +219 -0
  307. package/src/components/prose/index.ts +2 -0
  308. package/src/components/prose/prose.tsx +86 -0
  309. package/src/components/repo-activity/RepoActivity.tsx +599 -0
  310. package/src/components/repo-activity/RepoHeatmap.tsx +225 -0
  311. package/src/components/repo-activity/demo.ts +201 -0
  312. package/src/components/repo-activity/fetch.ts +211 -0
  313. package/src/components/repo-activity/heatmap.ts +123 -0
  314. package/src/components/repo-activity/index.ts +28 -0
  315. package/src/components/repo-activity/types.ts +99 -0
  316. package/src/components/stages/NumberedStages.tsx +116 -0
  317. package/src/components/symbols/marks.tsx +116 -0
  318. package/src/components/symbols/terminal-lockup.tsx +136 -0
  319. package/src/components/symbols/terminal-marks.tsx +226 -0
  320. package/src/components/terminal/ChatResponseLoader.tsx +67 -0
  321. package/src/components/terminal/ContainerBootLoader.tsx +82 -0
  322. package/src/components/terminal/TerminalStepCaret.tsx +202 -0
  323. package/src/components/themeInit.ts +24 -0
  324. package/src/components/typography/MotionReveal.tsx +108 -0
  325. package/src/components/typography/TypewriterReveal.tsx +101 -0
  326. package/src/components/typography/WordReveal.tsx +143 -0
  327. package/src/data/modules.ts +378 -0
  328. package/src/data/subsystems.ts +101 -0
  329. package/src/index.ts +587 -0
  330. package/src/lib/base-path.ts +60 -0
  331. package/src/lib/cx.ts +25 -0
  332. package/src/lib/gloomberb.ts +69 -0
  333. package/src/lib/record.ts +19 -0
  334. package/src/lib/stub-payload.ts +183 -0
  335. package/src/lib/useBodyScrollLock.ts +44 -0
  336. package/src/lib/utils.ts +6 -0
  337. package/src/motion/primitives.tsx +105 -0
  338. package/src/motion/scroll-glide.ts +62 -0
  339. package/src/motion/scrolly-core.ts +38 -0
  340. package/src/motion/scrolly.tsx +95 -0
  341. package/src/navigation/HashScrollManager.tsx +167 -0
  342. package/src/navigation/hashScroll.ts +78 -0
  343. package/src/replay/browser.ts +280 -0
  344. package/src/replay/chat-export-run.ts +121 -0
  345. package/src/replay/export-format.ts +25 -0
  346. package/src/replay/export-mount.ts +32 -0
  347. package/src/replay/filename.ts +54 -0
  348. package/src/replay/index.ts +21 -0
  349. package/src/replay/redact-dom.ts +178 -0
  350. package/src/replay/redact.ts +113 -0
  351. package/src/replay/snapshot.ts +659 -0
  352. package/src/styles/account-auth.css +339 -0
  353. package/src/styles/brand-wordmark.css +11 -0
  354. package/src/styles/card-rail.css +120 -0
  355. package/src/styles/chat-aui.css +1143 -0
  356. package/src/styles/chat-core.css +469 -0
  357. package/src/styles/chat-digichat.css +2531 -0
  358. package/src/styles/chat-math.css +70 -0
  359. package/src/styles/chat-skin-palette.css +138 -0
  360. package/src/styles/chat-stock-menu.css +37 -0
  361. package/src/styles/chat-widgets.css +190 -0
  362. package/src/styles/command-palette.css +372 -0
  363. package/src/styles/controls-core.css +2261 -0
  364. package/src/styles/controls-overlay.css +603 -0
  365. package/src/styles/data-layout.css +288 -0
  366. package/src/styles/deck.css +141 -0
  367. package/src/styles/diagrams.css +1860 -0
  368. package/src/styles/digichat-app-theme.css +250 -0
  369. package/src/styles/digichat-boot-loader.css +487 -0
  370. package/src/styles/digichat-launcher.css +377 -0
  371. package/src/styles/docs.css +165 -0
  372. package/src/styles/effects-chrome.css +888 -0
  373. package/src/styles/finance-composites.css +214 -0
  374. package/src/styles/finance-tearsheet-overlay.css +90 -0
  375. package/src/styles/finance-tearsheet.css +945 -0
  376. package/src/styles/marquee.css +168 -0
  377. package/src/styles/metrics.css +82 -0
  378. package/src/styles/nav-shell.css +551 -0
  379. package/src/styles/pricing.css +79 -0
  380. package/src/styles/repo-activity.css +575 -0
  381. package/src/styles/stages.css +69 -0
  382. package/src/styles/terminal-loaders.css +122 -0
  383. package/src/styles/terminal-manifest.css +228 -0
  384. package/src/styles/web-theme.css +1007 -0
  385. package/src/styles/word-reveal.css +204 -0
  386. package/src/theme/apply-theme.ts +214 -0
  387. package/src/theme/index.ts +27 -0
  388. package/src/theme/palette-registry.ts +855 -0
  389. package/src/theme/tui-prefs.ts +64 -0
  390. package/src/ui/alert.tsx +78 -0
  391. package/src/ui/avatar.tsx +104 -0
  392. package/src/ui/badge.tsx +75 -0
  393. package/src/ui/breadcrumb.tsx +61 -0
  394. package/src/ui/button.tsx +67 -0
  395. package/src/ui/card.tsx +139 -0
  396. package/src/ui/checkbox.tsx +27 -0
  397. package/src/ui/collapsible.tsx +32 -0
  398. package/src/ui/date-pager.tsx +325 -0
  399. package/src/ui/dialog.tsx +157 -0
  400. package/src/ui/dropdown-menu.tsx +267 -0
  401. package/src/ui/empty-state.tsx +165 -0
  402. package/src/ui/field.tsx +104 -0
  403. package/src/ui/form.tsx +36 -0
  404. package/src/ui/icon-button.tsx +36 -0
  405. package/src/ui/index.ts +34 -0
  406. package/src/ui/input.tsx +33 -0
  407. package/src/ui/kbd.tsx +30 -0
  408. package/src/ui/label.tsx +32 -0
  409. package/src/ui/pager.tsx +119 -0
  410. package/src/ui/pagination.tsx +126 -0
  411. package/src/ui/radio-group.tsx +51 -0
  412. package/src/ui/search-bar.tsx +85 -0
  413. package/src/ui/segmented-control.tsx +76 -0
  414. package/src/ui/select.tsx +257 -0
  415. package/src/ui/separator.tsx +24 -0
  416. package/src/ui/sheet.tsx +141 -0
  417. package/src/ui/skeleton.tsx +76 -0
  418. package/src/ui/slider.tsx +76 -0
  419. package/src/ui/switch.tsx +31 -0
  420. package/src/ui/table.tsx +179 -0
  421. package/src/ui/tabs.tsx +89 -0
  422. package/src/ui/tags-input.tsx +168 -0
  423. package/src/ui/textarea.tsx +17 -0
  424. package/src/ui/tooltip.tsx +71 -0
@@ -0,0 +1,287 @@
1
+ "use client";
2
+
3
+ /**
4
+ * Base skin attachment: the stock twin re-expressed on theme tokens only
5
+ * (foreground, background, muted, border, destructive, ring), so the active
6
+ * tenant or brand theme styles it. Kept in step with `stock/attachment.aui.tsx`; the
7
+ * stock copy keeps the digichat square look.
8
+ */
9
+
10
+ import {
11
+ type PropsWithChildren,
12
+ useState,
13
+ type FC,
14
+ isValidElement,
15
+ } from "react";
16
+ import {
17
+ XIcon,
18
+ PlusIcon,
19
+ FileText,
20
+ AlertCircleIcon,
21
+ } from "lucide-react";
22
+ import {
23
+ AttachmentPrimitive,
24
+ ComposerPrimitive,
25
+ MessagePrimitive,
26
+ useAuiState,
27
+ useAui,
28
+ } from "@assistant-ui/react";
29
+ import {
30
+ Tooltip,
31
+ TooltipContent,
32
+ TooltipProvider,
33
+ TooltipTrigger,
34
+ } from "./ui/tooltip";
35
+ import {
36
+ Dialog,
37
+ DialogTitle,
38
+ DialogContent,
39
+ DialogTrigger,
40
+ } from "./ui/dialog";
41
+ import { Avatar, AvatarImage, AvatarFallback } from "./ui/avatar";
42
+ import { TooltipIconButton } from "./tooltip-icon-button";
43
+ import { useAttachmentSrc } from "../../stock/use-attachment-src";
44
+ import { useSkinChrome } from "../../stock/skin-chrome";
45
+ import { cn } from "../../../../lib/utils";
46
+ import { DotMatrix } from "../../DotMatrix";
47
+
48
+ // Protocol literal mirrored from the app's embed-page-context-messages
49
+ // (`PAGE_CONTEXT_ATTACHMENT_NAME = "page-context.html"`). The sending side
50
+ // names the page-context attachment; silent skins suppress its chip by this
51
+ // name. Kept as a literal so the package never imports app code (WS4).
52
+ const PAGE_CONTEXT_ATTACHMENT_NAME = "page-context.html";
53
+
54
+ type AttachmentPreviewProps = {
55
+ src: string;
56
+ };
57
+
58
+ const AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {
59
+ const [isLoaded, setIsLoaded] = useState(false);
60
+ return (
61
+ <img
62
+ src={src}
63
+ alt="Attachment preview"
64
+ className={cn(
65
+ "block h-auto max-h-[80vh] w-auto max-w-full rounded-md object-contain transition-opacity duration-(--dur) motion-reduce:transition-none",
66
+ isLoaded
67
+ ? "aui-attachment-preview-image-loaded opacity-100"
68
+ : "aui-attachment-preview-image-loading opacity-0",
69
+ )}
70
+ onLoad={() => setIsLoaded(true)}
71
+ />
72
+ );
73
+ };
74
+
75
+ const AttachmentPreviewDialog: FC<PropsWithChildren> = ({ children }) => {
76
+ const src = useAttachmentSrc();
77
+
78
+ if (!src) return children;
79
+
80
+ return (
81
+ <Dialog>
82
+ <DialogTrigger
83
+ nativeButton={false}
84
+ className="aui-attachment-preview-trigger cursor-zoom-in"
85
+ render={
86
+ isValidElement(children) ? (
87
+ children
88
+ ) : (
89
+ <button type="button">{children}</button>
90
+ )
91
+ }
92
+ />
93
+ <DialogContent className="aui-attachment-preview-dialog-content [&>button]:bg-foreground/60 [&>button]:hover:bg-foreground/80 [&_svg]:text-background p-2 sm:max-w-3xl [&>button]:rounded-full [&>button]:p-1 [&>button]:opacity-100 [&>button]:ring-0!">
94
+ <DialogTitle className="aui-sr-only sr-only">
95
+ Image Attachment Preview
96
+ </DialogTitle>
97
+ <div className="aui-attachment-preview bg-background relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden rounded-md">
98
+ <AttachmentPreview src={src} />
99
+ </div>
100
+ </DialogContent>
101
+ </Dialog>
102
+ );
103
+ };
104
+
105
+ const AttachmentThumb: FC = () => {
106
+ const src = useAttachmentSrc();
107
+
108
+ return (
109
+ <Avatar className="aui-attachment-tile-avatar h-full w-full rounded-lg after:hidden">
110
+ <AvatarImage
111
+ src={src}
112
+ alt="Attachment preview"
113
+ className="aui-attachment-tile-image rounded-lg object-cover"
114
+ />
115
+ <AvatarFallback>
116
+ <FileText className="aui-attachment-tile-fallback-icon text-muted-foreground size-6 stroke-[1.5]" />
117
+ </AvatarFallback>
118
+ </Avatar>
119
+ );
120
+ };
121
+
122
+ const AttachmentUI: FC = () => {
123
+ const aui = useAui();
124
+ const isComposer = aui.attachment.source !== "message";
125
+
126
+ const { pageContext } = useSkinChrome();
127
+ const attachmentName = useAuiState((s) => s.attachment.name);
128
+
129
+ const isImage = useAuiState((s) => s.attachment.type === "image");
130
+ const typeLabel = useAuiState((s) => {
131
+ const type = s.attachment.type;
132
+ switch (type) {
133
+ case "image":
134
+ return "Image";
135
+ case "document":
136
+ return "Document";
137
+ case "file":
138
+ return "File";
139
+ default:
140
+ return type;
141
+ }
142
+ });
143
+
144
+ const uploadState = useAuiState((s) =>
145
+ s.attachment.status.type === "running"
146
+ ? "uploading"
147
+ : s.attachment.status.type === "incomplete" &&
148
+ s.attachment.status.reason === "error"
149
+ ? "error"
150
+ : undefined,
151
+ );
152
+ const isUploading = uploadState === "uploading";
153
+ const isError = uploadState === "error";
154
+
155
+ const errorMessage = useAuiState((s) =>
156
+ s.attachment.status.type === "incomplete" &&
157
+ s.attachment.status.reason === "error"
158
+ ? (s.attachment.status.message ?? "Upload failed")
159
+ : undefined,
160
+ );
161
+
162
+ // Hooks above — safe to bail. The attachment stays on the runtime so its
163
+ // file part still reaches the model; only the chip is suppressed.
164
+ if (pageContext === "silent" && attachmentName === PAGE_CONTEXT_ATTACHMENT_NAME) {
165
+ return null;
166
+ }
167
+
168
+ return (
169
+ <TooltipProvider>
170
+ <Tooltip>
171
+ <AttachmentPrimitive.Root
172
+ className={cn(
173
+ "aui-attachment-root relative",
174
+ isComposer &&
175
+ "animate-in fade-in-0 zoom-in-95 duration-(--duration-hover) motion-reduce:animate-none",
176
+ isImage &&
177
+ !isComposer &&
178
+ "aui-attachment-root-message only:*:first:size-24",
179
+ )}
180
+ >
181
+ <AttachmentPreviewDialog>
182
+ <TooltipTrigger
183
+ render={
184
+ <div
185
+ className={cn(
186
+ "aui-attachment-tile bg-muted hover:after:bg-foreground/10 focus-visible:ring-ring/50 relative size-14 cursor-pointer overflow-hidden rounded-lg transition-transform outline-none after:pointer-events-none after:absolute after:inset-0 after:rounded-[inherit] after:ring-1 after:ring-black/10 after:transition-colors after:ring-inset focus-visible:ring-1 active:scale-[0.96] motion-reduce:transition-none dark:after:ring-white/10",
187
+ isError &&
188
+ "after:ring-destructive/60 dark:after:ring-destructive/60",
189
+ )}
190
+ role="button"
191
+ tabIndex={0}
192
+ aria-label={`${typeLabel} attachment${
193
+ isError
194
+ ? ", upload failed"
195
+ : isUploading
196
+ ? ", uploading"
197
+ : ""
198
+ }`}
199
+ />
200
+ }
201
+ >
202
+ <AttachmentThumb />
203
+ {isUploading && (
204
+ <div
205
+ aria-hidden="true"
206
+ className="aui-attachment-tile-uploading bg-background/60 animate-in fade-in-0 absolute inset-0 flex items-center justify-center backdrop-blur-[2px] motion-reduce:animate-none"
207
+ >
208
+ <DotMatrix state="loading" decorative className="text-muted-foreground size-4" />
209
+ </div>
210
+ )}
211
+ {isError && (
212
+ <div
213
+ aria-hidden="true"
214
+ className="aui-attachment-tile-error bg-background/70 animate-in fade-in-0 absolute inset-0 flex items-center justify-center backdrop-blur-[2px] motion-reduce:animate-none"
215
+ >
216
+ <AlertCircleIcon className="text-destructive size-4" />
217
+ </div>
218
+ )}
219
+ </TooltipTrigger>
220
+ </AttachmentPreviewDialog>
221
+ {isComposer && <AttachmentRemove />}
222
+ </AttachmentPrimitive.Root>
223
+ <TooltipContent side="top">
224
+ <AttachmentPrimitive.Name />
225
+ {errorMessage && (
226
+ <p className="aui-attachment-error-message">{errorMessage}</p>
227
+ )}
228
+ </TooltipContent>
229
+ </Tooltip>
230
+ </TooltipProvider>
231
+ );
232
+ };
233
+
234
+ const AttachmentRemove: FC = () => {
235
+ return (
236
+ <AttachmentPrimitive.Remove
237
+ render={
238
+ <TooltipIconButton
239
+ tooltip="Remove file"
240
+ className="aui-attachment-tile-remove absolute end-1 top-1 size-5 rounded-full bg-foreground/60! text-background after:absolute after:-inset-1.5 hover:bg-foreground/80! hover:text-background! active:scale-[0.96] motion-reduce:transition-none"
241
+ side="top"
242
+ />
243
+ }
244
+ >
245
+ <XIcon className="aui-attachment-remove-icon size-3 stroke-[2.5]" />
246
+ </AttachmentPrimitive.Remove>
247
+ );
248
+ };
249
+
250
+ export const UserMessageAttachments: FC = () => {
251
+ return (
252
+ <div className="aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2">
253
+ <MessagePrimitive.Attachments>
254
+ {() => <AttachmentUI />}
255
+ </MessagePrimitive.Attachments>
256
+ </div>
257
+ );
258
+ };
259
+
260
+ export const ComposerAttachments: FC = () => {
261
+ return (
262
+ <div className="aui-composer-attachments flex w-full flex-row items-center gap-2 overflow-x-auto empty:hidden">
263
+ <ComposerPrimitive.Attachments>
264
+ {() => <AttachmentUI />}
265
+ </ComposerPrimitive.Attachments>
266
+ </div>
267
+ );
268
+ };
269
+
270
+ export const ComposerAddAttachment: FC = () => {
271
+ return (
272
+ <ComposerPrimitive.AddAttachment
273
+ render={
274
+ <TooltipIconButton
275
+ tooltip="Add Attachment"
276
+ side="bottom"
277
+ variant="ghost"
278
+ size="icon"
279
+ className="aui-composer-add-attachment text-muted-foreground hover:text-foreground hover:bg-muted-foreground/15 dark:border-border dark:hover:bg-muted-foreground/30 size-7 rounded-full active:scale-[0.96] motion-reduce:transition-none"
280
+ aria-label="Add Attachment"
281
+ />
282
+ }
283
+ >
284
+ <PlusIcon className="aui-attachment-add-icon size-4" />
285
+ </ComposerPrimitive.AddAttachment>
286
+ );
287
+ };
@@ -0,0 +1,45 @@
1
+ # assistant-ui default trace parts (base skin)
2
+
3
+ Copies of assistant-ui's own Reasoning, ToolGroup and ToolFallback components
4
+ at the pinned `@assistant-ui/react@0.15.18` tag
5
+ (`assistant-ui/assistant-ui@d511ff49`, `packages/ui/src/components/react/assistant-ui/elements/`,
6
+ the source of the `https://r.assistant-ui.com/base/*` registry items), so the
7
+ `base` / `base-assistant-ui` skins render reasoning, tool calls and tool
8
+ groups exactly as assistant-ui ships them (no digichat trace styling).
9
+
10
+ | file | upstream file at the tag |
11
+ |---|---|
12
+ | `reasoning.tsx`, `reasoning.aui.tsx` | `elements/reasoning.tsx`, `elements/reasoning.aui.tsx` |
13
+ | `tool-group.aui.tsx` | `elements/tool-group.aui.tsx` |
14
+ | `tool-fallback.aui.tsx` | `elements/tool-fallback.aui.tsx` (name, arguments, result, approval controls, duration) |
15
+ | `collapsible.tsx` | shadcn base-nova `ui/collapsible.tsx` (base-ui) |
16
+ | `collapsible-root.tsx` | `elements/collapsible-root.tsx` at `assistant-ui/assistant-ui@1f41f916` (the `@assistant-ui/elements-run-activity` registry item, newer than the tag above; it uses only primitives the pinned package already has) |
17
+ | `surfaces.ts` | the `collapsePanel` class from `elements/surfaces.tsx` at the same commit |
18
+
19
+ Import paths are rewritten. Local changes:
20
+
21
+ - `tool-fallback.aui.tsx`: the argument and result blocks cap at `max-h-72`
22
+ and scroll inside the card, so a long payload does not stretch the thread;
23
+ `/view verbose` opens the cards (initial open state from
24
+ `useViewDisclosure`); the row's words and status come from the shared trace
25
+ rules (`../../../trace-grouping/tool-row.ts`), and a running call's card
26
+ shows its arguments, folding again once the call completes;
27
+ - `tool-group.aui.tsx`: `streamingOpen` (open while the group streams, folded
28
+ on completion), as in the digichat skin's tool group.
29
+
30
+ The trace itself (`../elements/assistant-trace.aui.tsx`) is shared: the base
31
+ Thread and the stock Thread (`../../../stock/thread.aui.tsx`) both render it.
32
+
33
+ The base thread (`../thread.tsx`) also uses assistant-ui's own working
34
+ indicator (the pulsing dot) and MessageError markup from the upstream
35
+ `elements/thread.aui.tsx`. The `digichat` skin keeps `../../stock/*`.
36
+
37
+ The trace follows the digichat skin's grouping exactly
38
+ (`../../../trace-grouping`, shared with `gallery-thread/thread.aui.tsx`):
39
+ `MessagePrimitive.GroupedParts` puts consecutive reasoning and tool calls
40
+ under one work chain (`../elements/work-chain.tsx`), whose header is open
41
+ while the agent works and folds shortly after the answer starts (folded it
42
+ reads as the status line: "Working — web_search", "Used 3 tools"). Inside
43
+ it, adjacent reasoning is one reasoning box that opens and streams while it
44
+ runs, and adjacent tool calls are one `N tool calls` group that opens while
45
+ the tools run. Only the look differs from the digichat skin.
@@ -0,0 +1,19 @@
1
+ "use client";
2
+
3
+ import { Collapsible } from "@base-ui/react/collapsible";
4
+ import { forwardRef } from "react";
5
+
6
+ export const CollapsibleRoot = forwardRef<
7
+ React.ComponentRef<typeof Collapsible.Root>,
8
+ React.ComponentPropsWithoutRef<typeof Collapsible.Root>
9
+ >(function CollapsibleRoot(props, ref) {
10
+ return <Collapsible.Root ref={ref} data-slot="collapsible" {...props} />;
11
+ });
12
+
13
+ export function CollapsibleTrigger({ ...props }: Collapsible.Trigger.Props) {
14
+ return <Collapsible.Trigger data-slot="collapsible-trigger" {...props} />;
15
+ }
16
+
17
+ export function CollapsibleContent({ ...props }: Collapsible.Panel.Props) {
18
+ return <Collapsible.Panel data-slot="collapsible-content" {...props} />;
19
+ }
@@ -0,0 +1,21 @@
1
+ "use client";
2
+
3
+ import { Collapsible as CollapsiblePrimitive } from "@base-ui/react/collapsible";
4
+
5
+ function Collapsible({ ...props }: CollapsiblePrimitive.Root.Props) {
6
+ return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />;
7
+ }
8
+
9
+ function CollapsibleTrigger({ ...props }: CollapsiblePrimitive.Trigger.Props) {
10
+ return (
11
+ <CollapsiblePrimitive.Trigger data-slot="collapsible-trigger" {...props} />
12
+ );
13
+ }
14
+
15
+ function CollapsibleContent({ ...props }: CollapsiblePrimitive.Panel.Props) {
16
+ return (
17
+ <CollapsiblePrimitive.Panel data-slot="collapsible-content" {...props} />
18
+ );
19
+ }
20
+
21
+ export { Collapsible, CollapsibleTrigger, CollapsibleContent };
@@ -0,0 +1,120 @@
1
+ "use client";
2
+
3
+ import { memo, useCallback, useRef } from "react";
4
+ import {
5
+ useScrollLock,
6
+ useAuiState,
7
+ type ReasoningMessagePartComponent,
8
+ type ReasoningGroupComponent,
9
+ } from "@assistant-ui/react";
10
+ import { MarkdownText } from "../markdown-text";
11
+ import {
12
+ ANIMATION_DURATION,
13
+ ReasoningRoot as ReasoningRootBase,
14
+ ReasoningTrigger,
15
+ ReasoningContent,
16
+ ReasoningText,
17
+ ReasoningFade,
18
+ reasoningVariants,
19
+ type ReasoningRootProps,
20
+ } from "./reasoning";
21
+
22
+ export type { ReasoningRootProps } from "./reasoning";
23
+
24
+ /** `ReasoningRoot` with the thread viewport scroll locked during disclosure animations. */
25
+ function ReasoningRoot({
26
+ ref,
27
+ onAnimationStart,
28
+ ...props
29
+ }: ReasoningRootProps) {
30
+ const collapsibleRef = useRef<HTMLDivElement | null>(null);
31
+ const lockScroll = useScrollLock(collapsibleRef, ANIMATION_DURATION);
32
+
33
+ const handleAnimationStart = useCallback(() => {
34
+ lockScroll();
35
+ onAnimationStart?.();
36
+ }, [lockScroll, onAnimationStart]);
37
+
38
+ const composedRef = useCallback(
39
+ (node: HTMLDivElement | null) => {
40
+ collapsibleRef.current = node;
41
+ if (typeof ref === "function") {
42
+ ref(node);
43
+ } else if (ref) {
44
+ ref.current = node;
45
+ }
46
+ },
47
+ [ref],
48
+ );
49
+
50
+ return (
51
+ <ReasoningRootBase
52
+ ref={composedRef}
53
+ onAnimationStart={handleAnimationStart}
54
+ {...props}
55
+ />
56
+ );
57
+ }
58
+
59
+ const ReasoningImpl: ReasoningMessagePartComponent = () => <MarkdownText />;
60
+
61
+ const ReasoningGroupImpl: ReasoningGroupComponent = ({
62
+ children,
63
+ startIndex,
64
+ endIndex,
65
+ }) => {
66
+ const isReasoningStreaming = useAuiState((s) => {
67
+ if (s.message.status?.type !== "running") return false;
68
+ for (let index = startIndex; index <= endIndex; index++) {
69
+ if (s.message.parts[index]?.status.type === "running") return true;
70
+ }
71
+ return false;
72
+ });
73
+
74
+ return (
75
+ <ReasoningRoot streaming={isReasoningStreaming}>
76
+ <ReasoningTrigger active={isReasoningStreaming} />
77
+ <ReasoningContent aria-busy={isReasoningStreaming}>
78
+ <ReasoningText>{children}</ReasoningText>
79
+ </ReasoningContent>
80
+ </ReasoningRoot>
81
+ );
82
+ };
83
+
84
+ const Reasoning = memo(
85
+ ReasoningImpl,
86
+ ) as unknown as ReasoningMessagePartComponent & {
87
+ Root: typeof ReasoningRoot;
88
+ Trigger: typeof ReasoningTrigger;
89
+ Content: typeof ReasoningContent;
90
+ Text: typeof ReasoningText;
91
+ Fade: typeof ReasoningFade;
92
+ };
93
+
94
+ Reasoning.displayName = "Reasoning";
95
+ Reasoning.Root = ReasoningRoot;
96
+ Reasoning.Trigger = ReasoningTrigger;
97
+ Reasoning.Content = ReasoningContent;
98
+ Reasoning.Text = ReasoningText;
99
+ Reasoning.Fade = ReasoningFade;
100
+
101
+ /**
102
+ * @deprecated This wrapper targets the legacy `components.ReasoningGroup`
103
+ * prop on `<MessagePrimitive.Parts>`. Use `<MessagePrimitive.GroupedParts>`
104
+ * with a `groupBy` returning `"group-reasoning"` and compose `ReasoningRoot`
105
+ * / `ReasoningTrigger` / `ReasoningContent` / `ReasoningText` directly.
106
+ * See `thread.aui.tsx` for an example.
107
+ */
108
+ const ReasoningGroup = memo(ReasoningGroupImpl);
109
+ ReasoningGroup.displayName = "ReasoningGroup";
110
+
111
+ export {
112
+ Reasoning,
113
+ ReasoningGroup,
114
+ ReasoningRoot,
115
+ ReasoningTrigger,
116
+ ReasoningContent,
117
+ ReasoningText,
118
+ ReasoningFade,
119
+ reasoningVariants,
120
+ };