@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,290 @@
1
+ "use client";
2
+
3
+ import { memo, type ComponentProps, type FC } from "react";
4
+ import type { QuoteMessagePartComponent } from "@assistant-ui/react";
5
+ import {
6
+ ComposerPrimitive,
7
+ SelectionToolbarPrimitive,
8
+ } from "@assistant-ui/react";
9
+ import { QuoteIcon, XIcon } from "lucide-react";
10
+ import { cn } from "../../../../../lib/utils";
11
+
12
+ function QuoteBlockRoot({ className, ...props }: ComponentProps<"div">) {
13
+ return (
14
+ <div
15
+ data-slot="quote-block"
16
+ className={cn("mb-2 flex items-start gap-1.5", className)}
17
+ {...props}
18
+ />
19
+ );
20
+ }
21
+
22
+ function QuoteBlockIcon({
23
+ className,
24
+ ...props
25
+ }: ComponentProps<typeof QuoteIcon>) {
26
+ return (
27
+ <QuoteIcon
28
+ data-slot="quote-block-icon"
29
+ className={cn(
30
+ "text-muted-foreground/60 mt-0.5 size-3 shrink-0",
31
+ className,
32
+ )}
33
+ {...props}
34
+ />
35
+ );
36
+ }
37
+
38
+ function QuoteBlockText({ className, ...props }: ComponentProps<"p">) {
39
+ return (
40
+ <p
41
+ data-slot="quote-block-text"
42
+ className={cn(
43
+ "text-muted-foreground/80 line-clamp-2 min-w-0 text-sm italic",
44
+ className,
45
+ )}
46
+ {...props}
47
+ />
48
+ );
49
+ }
50
+
51
+ /**
52
+ * Renders quoted text in user messages.
53
+ *
54
+ * Pass this to `MessagePrimitive.Parts` as the `Quote` renderer.
55
+ *
56
+ * @example
57
+ * ```tsx
58
+ * <MessagePrimitive.Quote>
59
+ * {(quote) => <QuoteBlock {...quote} />}
60
+ * </MessagePrimitive.Quote>
61
+ * ```
62
+ */
63
+ const QuoteBlockImpl: QuoteMessagePartComponent = ({ text }) => {
64
+ return (
65
+ <QuoteBlockRoot>
66
+ <QuoteBlockIcon />
67
+ <QuoteBlockText>{text}</QuoteBlockText>
68
+ </QuoteBlockRoot>
69
+ );
70
+ };
71
+
72
+ const QuoteBlock = memo(
73
+ QuoteBlockImpl,
74
+ ) as unknown as QuoteMessagePartComponent & {
75
+ Root: typeof QuoteBlockRoot;
76
+ Icon: typeof QuoteBlockIcon;
77
+ Text: typeof QuoteBlockText;
78
+ };
79
+
80
+ QuoteBlock.displayName = "QuoteBlock";
81
+ QuoteBlock.Root = QuoteBlockRoot;
82
+ QuoteBlock.Icon = QuoteBlockIcon;
83
+ QuoteBlock.Text = QuoteBlockText;
84
+
85
+ function SelectionToolbarRoot({
86
+ className,
87
+ ...props
88
+ }: ComponentProps<typeof SelectionToolbarPrimitive.Root>) {
89
+ return (
90
+ <SelectionToolbarPrimitive.Root
91
+ data-slot="selection-toolbar"
92
+ className={cn(
93
+ "bg-popover flex items-center gap-1 rounded-lg border px-1 py-1",
94
+ className,
95
+ )}
96
+ {...props}
97
+ />
98
+ );
99
+ }
100
+
101
+ function SelectionToolbarQuote({
102
+ className,
103
+ children,
104
+ ...props
105
+ }: ComponentProps<typeof SelectionToolbarPrimitive.Quote>) {
106
+ return (
107
+ <SelectionToolbarPrimitive.Quote
108
+ data-slot="selection-toolbar-quote"
109
+ className={cn(
110
+ "text-popover-foreground hover:bg-muted flex items-center gap-1.5 rounded-md px-2.5 py-1 text-sm transition-colors",
111
+ className,
112
+ )}
113
+ {...props}
114
+ >
115
+ {children ?? (
116
+ <>
117
+ <QuoteIcon className="size-3.5" />
118
+ Quote
119
+ </>
120
+ )}
121
+ </SelectionToolbarPrimitive.Quote>
122
+ );
123
+ }
124
+
125
+ /**
126
+ * Floating toolbar that appears when text is selected in a message.
127
+ *
128
+ * Render anywhere inside `ThreadPrimitive.Root` (or any `AssistantRuntimeProvider` scope).
129
+ *
130
+ * @example
131
+ * ```tsx
132
+ * <ThreadPrimitive.Root>
133
+ * <ThreadPrimitive.Viewport>...</ThreadPrimitive.Viewport>
134
+ * <SelectionToolbar />
135
+ * </ThreadPrimitive.Root>
136
+ * ```
137
+ */
138
+ const SelectionToolbarImpl: FC<ComponentProps<typeof SelectionToolbarRoot>> = ({
139
+ className,
140
+ ...props
141
+ }) => {
142
+ return (
143
+ <SelectionToolbarRoot className={className} {...props}>
144
+ <SelectionToolbarQuote />
145
+ </SelectionToolbarRoot>
146
+ );
147
+ };
148
+
149
+ const SelectionToolbar = memo(
150
+ SelectionToolbarImpl,
151
+ ) as unknown as typeof SelectionToolbarImpl & {
152
+ Root: typeof SelectionToolbarRoot;
153
+ Quote: typeof SelectionToolbarQuote;
154
+ };
155
+
156
+ SelectionToolbar.displayName = "SelectionToolbar";
157
+ SelectionToolbar.Root = SelectionToolbarRoot;
158
+ SelectionToolbar.Quote = SelectionToolbarQuote;
159
+
160
+ function ComposerQuotePreviewRoot({
161
+ className,
162
+ ...props
163
+ }: ComponentProps<typeof ComposerPrimitive.Quote>) {
164
+ return (
165
+ <ComposerPrimitive.Quote
166
+ data-slot="composer-quote"
167
+ className={cn(
168
+ "bg-muted/60 mx-3 mt-2 flex items-start gap-2 rounded-lg px-3 py-2",
169
+ className,
170
+ )}
171
+ {...props}
172
+ />
173
+ );
174
+ }
175
+
176
+ function ComposerQuotePreviewIcon({
177
+ className,
178
+ ...props
179
+ }: ComponentProps<typeof QuoteIcon>) {
180
+ return (
181
+ <QuoteIcon
182
+ data-slot="composer-quote-icon"
183
+ className={cn(
184
+ "text-muted-foreground/70 mt-0.5 size-3.5 shrink-0",
185
+ className,
186
+ )}
187
+ {...props}
188
+ />
189
+ );
190
+ }
191
+
192
+ function ComposerQuotePreviewText({
193
+ className,
194
+ ...props
195
+ }: ComponentProps<typeof ComposerPrimitive.QuoteText>) {
196
+ return (
197
+ <ComposerPrimitive.QuoteText
198
+ data-slot="composer-quote-text"
199
+ className={cn(
200
+ "text-muted-foreground line-clamp-2 min-w-0 flex-1 text-sm",
201
+ className,
202
+ )}
203
+ {...props}
204
+ />
205
+ );
206
+ }
207
+
208
+ function ComposerQuotePreviewDismiss({
209
+ className,
210
+ children,
211
+ ...props
212
+ }: ComponentProps<typeof ComposerPrimitive.QuoteDismiss>) {
213
+ const defaultClassName =
214
+ "shrink-0 rounded-sm p-0.5 text-muted-foreground/70 transition-colors hover:bg-muted hover:text-foreground";
215
+
216
+ return (
217
+ <ComposerPrimitive.QuoteDismiss
218
+ data-slot="composer-quote-dismiss"
219
+ asChild
220
+ className={children ? className : undefined}
221
+ {...props}
222
+ >
223
+ {children ?? (
224
+ <button
225
+ type="button"
226
+ aria-label="Dismiss quote"
227
+ className={cn(defaultClassName, className)}
228
+ >
229
+ <XIcon className="size-3.5" />
230
+ </button>
231
+ )}
232
+ </ComposerPrimitive.QuoteDismiss>
233
+ );
234
+ }
235
+
236
+ /**
237
+ * Quote preview inside the composer. Only renders when a quote is set.
238
+ *
239
+ * Place inside `ComposerPrimitive.Root`.
240
+ *
241
+ * @example
242
+ * ```tsx
243
+ * <ComposerPrimitive.Root>
244
+ * <ComposerQuotePreview />
245
+ * <ComposerPrimitive.Input />
246
+ * <ComposerPrimitive.Send />
247
+ * </ComposerPrimitive.Root>
248
+ * ```
249
+ */
250
+ const ComposerQuotePreviewImpl: FC<
251
+ ComponentProps<typeof ComposerQuotePreviewRoot>
252
+ > = ({ className, ...props }) => {
253
+ return (
254
+ <ComposerQuotePreviewRoot className={className} {...props}>
255
+ <ComposerQuotePreviewIcon />
256
+ <ComposerQuotePreviewText />
257
+ <ComposerQuotePreviewDismiss />
258
+ </ComposerQuotePreviewRoot>
259
+ );
260
+ };
261
+
262
+ const ComposerQuotePreview = memo(
263
+ ComposerQuotePreviewImpl,
264
+ ) as unknown as typeof ComposerQuotePreviewImpl & {
265
+ Root: typeof ComposerQuotePreviewRoot;
266
+ Icon: typeof ComposerQuotePreviewIcon;
267
+ Text: typeof ComposerQuotePreviewText;
268
+ Dismiss: typeof ComposerQuotePreviewDismiss;
269
+ };
270
+
271
+ ComposerQuotePreview.displayName = "ComposerQuotePreview";
272
+ ComposerQuotePreview.Root = ComposerQuotePreviewRoot;
273
+ ComposerQuotePreview.Icon = ComposerQuotePreviewIcon;
274
+ ComposerQuotePreview.Text = ComposerQuotePreviewText;
275
+ ComposerQuotePreview.Dismiss = ComposerQuotePreviewDismiss;
276
+
277
+ export {
278
+ QuoteBlock,
279
+ QuoteBlockRoot,
280
+ QuoteBlockIcon,
281
+ QuoteBlockText,
282
+ SelectionToolbar,
283
+ SelectionToolbarRoot,
284
+ SelectionToolbarQuote,
285
+ ComposerQuotePreview,
286
+ ComposerQuotePreviewRoot,
287
+ ComposerQuotePreviewIcon,
288
+ ComposerQuotePreviewText,
289
+ ComposerQuotePreviewDismiss,
290
+ };
@@ -0,0 +1,100 @@
1
+ "use client";
2
+
3
+ import { useRef, type ReactNode } from "react";
4
+ import { useScrollLock } from "@assistant-ui/react";
5
+ import {
6
+ ChevronRightIcon,
7
+ CircleAlertIcon,
8
+ CircleStopIcon,
9
+ LoaderIcon,
10
+ } from "lucide-react";
11
+ import { cn } from "../../../../../lib/utils";
12
+ import {
13
+ CollapsibleContent,
14
+ CollapsibleRoot,
15
+ CollapsibleTrigger,
16
+ } from "../aui-default/collapsible-root";
17
+ import { collapsePanel } from "../aui-default/surfaces";
18
+ import { useWorkChain, type WorkChainOptions } from "../../../trace-grouping/use-work-chain";
19
+
20
+ /** The upstream disclosure duration. */
21
+ const ANIMATION_DURATION = 200;
22
+
23
+ /**
24
+ * The whole chain of reasoning and tool calls under one header, in the base
25
+ * skin's look (assistant-ui's Run activity line on the theme tokens).
26
+ *
27
+ * When it opens and folds, and what the header says, are the digichat skin's
28
+ * rules (`useWorkChain`): open while the agent works, folded shortly after
29
+ * the answer starts; folded, the header is the status line ("Working —
30
+ * web_search", "Used 3 tools"); open, it is "Working" / "Worked". Inside, the
31
+ * reasoning box and the `N tool calls` group keep their own disclosures,
32
+ * exactly as in the digichat skin.
33
+ */
34
+ export function WorkChain({
35
+ children,
36
+ className,
37
+ ...options
38
+ }: WorkChainOptions & { children: ReactNode; className?: string }) {
39
+ const { open, onOpenChange, title, marker, outcome } = useWorkChain(options);
40
+ const rootRef = useRef<HTMLDivElement | null>(null);
41
+ // Upstream: lock the thread viewport's scroll before the panel animates.
42
+ const lockScroll = useScrollLock(rootRef, ANIMATION_DURATION);
43
+ const busy = marker === "loading";
44
+
45
+ return (
46
+ <CollapsibleRoot
47
+ ref={rootRef}
48
+ data-slot="aui_work-chain"
49
+ data-outcome={outcome}
50
+ open={open}
51
+ onOpenChange={(next) => {
52
+ lockScroll();
53
+ onOpenChange(next);
54
+ }}
55
+ className={cn("aui-work-chain my-1 flex min-w-0 flex-col", className)}
56
+ >
57
+ <CollapsibleTrigger
58
+ data-slot="aui_work-chain-trigger"
59
+ aria-busy={busy || undefined}
60
+ className="aui-work-chain-trigger group/trigger text-muted-foreground hover:text-foreground focus-visible:ring-ring/50 flex max-w-full items-center gap-1.5 rounded-md py-1 text-sm outline-none focus-visible:ring-[3px]"
61
+ >
62
+ <ChevronRightIcon
63
+ aria-hidden="true"
64
+ className="size-3.5 shrink-0 transition-transform duration-200 group-data-panel-open/trigger:rotate-90 group-data-open/trigger:rotate-90 motion-reduce:transition-none"
65
+ />
66
+ <span
67
+ data-slot="aui_work-chain-title"
68
+ className={cn(
69
+ "text-start tabular-nums wrap-anywhere",
70
+ busy && "shimmer motion-reduce:animate-none",
71
+ )}
72
+ >
73
+ {title}
74
+ </span>
75
+ {marker === "loading" && (
76
+ <LoaderIcon
77
+ aria-hidden="true"
78
+ className="size-3 shrink-0 animate-spin [animation-duration:0.6s] motion-reduce:animate-none"
79
+ />
80
+ )}
81
+ {marker === "error" && (
82
+ <CircleAlertIcon aria-hidden="true" className="text-destructive size-3.5 shrink-0" />
83
+ )}
84
+ {marker === "stop" && (
85
+ <CircleStopIcon aria-hidden="true" className="size-3.5 shrink-0" />
86
+ )}
87
+ </CollapsibleTrigger>
88
+ <CollapsibleContent
89
+ // Kept mounted: the rows inside keep their own state while folded.
90
+ keepMounted
91
+ data-slot="aui_work-chain-content"
92
+ className={collapsePanel}
93
+ >
94
+ <div className="border-border ms-1.5 flex min-w-0 flex-col gap-1 border-s ps-3.5 pt-1 text-sm wrap-anywhere">
95
+ {children}
96
+ </div>
97
+ </CollapsibleContent>
98
+ </CollapsibleRoot>
99
+ );
100
+ }
@@ -0,0 +1,294 @@
1
+ "use client";
2
+
3
+ /**
4
+ * Base skin markdown text: 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/markdown-text.tsx`; the
7
+ * stock copy keeps the digichat square look.
8
+ */
9
+
10
+ import "@assistant-ui/react-markdown/styles/dot.css";
11
+
12
+ import {
13
+ type CodeHeaderProps,
14
+ MarkdownTextPrimitive,
15
+ unstable_memoizeMarkdownComponents as memoizeMarkdownComponents,
16
+ useIsMarkdownCodeBlock,
17
+ } from "@assistant-ui/react-markdown";
18
+ import remarkGfm from "remark-gfm";
19
+ import { isFollowableHref } from "../../followable-href";
20
+ import { remarkStripModelBoilerplate } from "../../strip-model-boilerplate";
21
+ import { type FC, memo, useMemo, useRef } from "react";
22
+ import type { TextMessagePartProps } from "@assistant-ui/react";
23
+ import { CheckIcon, CopyIcon } from "lucide-react";
24
+
25
+ import { TooltipIconButton } from "./tooltip-icon-button";
26
+ import { useCopyToClipboard } from "../../stock/use-copy-to-clipboard";
27
+ import { ArtifactLink, isArtifactBlobHref } from "../../stock/artifacts-panel";
28
+ import { cn } from "../../../../lib/utils";
29
+
30
+ type MarkdownTextProps = Partial<TextMessagePartProps> & {
31
+ components?: Parameters<typeof memoizeMarkdownComponents>[0];
32
+ };
33
+
34
+ const useShallowStable = <T extends Record<string, unknown> | undefined>(
35
+ value: T,
36
+ ): T => {
37
+ const ref = useRef(value);
38
+ if (value !== ref.current) {
39
+ const prev = ref.current;
40
+ const stable =
41
+ value !== undefined &&
42
+ prev !== undefined &&
43
+ Object.keys(prev).length === Object.keys(value).length &&
44
+ Object.keys(value).every((key) => prev[key] === value[key]);
45
+ if (!stable) ref.current = value;
46
+ }
47
+ return ref.current;
48
+ };
49
+
50
+ const MarkdownTextImpl: FC<MarkdownTextProps> = ({ components }) => {
51
+ const stableComponents = useShallowStable(components);
52
+ const markdownComponents = useMemo(() => {
53
+ if (!stableComponents) return defaultComponents;
54
+ return {
55
+ ...defaultComponents,
56
+ ...memoizeMarkdownComponents(stableComponents),
57
+ };
58
+ }, [stableComponents]);
59
+
60
+ return (
61
+ <MarkdownTextPrimitive
62
+ remarkPlugins={[remarkGfm, remarkStripModelBoilerplate]}
63
+ className="aui-md"
64
+ components={markdownComponents}
65
+ defer
66
+ />
67
+ );
68
+ };
69
+
70
+ export const MarkdownText = memo(MarkdownTextImpl);
71
+
72
+ const CodeHeader: FC<CodeHeaderProps> = ({ language, code }) => {
73
+ const { isCopied, copyToClipboard } = useCopyToClipboard();
74
+ const onCopy = () => {
75
+ if (!code || isCopied) return;
76
+ copyToClipboard(code);
77
+ };
78
+
79
+ return (
80
+ <div className="aui-code-header-root border-border bg-muted/50 mt-3 flex items-center justify-between rounded-t-lg border border-b-0 px-3.5 py-1.5 text-xs">
81
+ <span className="aui-code-header-language text-muted-foreground font-medium lowercase">
82
+ {language}
83
+ </span>
84
+ <TooltipIconButton tooltip="Copy" onClick={onCopy}>
85
+ {!isCopied && (
86
+ <CopyIcon className="animate-in zoom-in-75 fade-in duration-(--dur-fast)" />
87
+ )}
88
+ {isCopied && (
89
+ <CheckIcon className="animate-in zoom-in-50 fade-in duration-(--duration-hover) ease-out" />
90
+ )}
91
+ </TooltipIconButton>
92
+ </div>
93
+ );
94
+ };
95
+
96
+ // Exported so the `a:` override's routing is testable: without a pin, a
97
+ // revert to the plain anchor would pass every suite that only exercises
98
+ // ArtifactLink directly.
99
+ export const defaultComponents = memoizeMarkdownComponents({
100
+ h1: ({ className, ...props }) => (
101
+ <h1
102
+ className={cn(
103
+ "aui-md-h1 mt-5 mb-2 scroll-m-20 text-xl font-semibold first:mt-0 last:mb-0",
104
+ className,
105
+ )}
106
+ {...props}
107
+ />
108
+ ),
109
+ h2: ({ className, ...props }) => (
110
+ <h2
111
+ className={cn(
112
+ "aui-md-h2 mt-5 mb-2 scroll-m-20 text-lg font-semibold first:mt-0 last:mb-0",
113
+ className,
114
+ )}
115
+ {...props}
116
+ />
117
+ ),
118
+ h3: ({ className, ...props }) => (
119
+ <h3
120
+ className={cn(
121
+ "aui-md-h3 mt-4 mb-1.5 scroll-m-20 text-base font-semibold first:mt-0 last:mb-0",
122
+ className,
123
+ )}
124
+ {...props}
125
+ />
126
+ ),
127
+ h4: ({ className, ...props }) => (
128
+ <h4
129
+ className={cn(
130
+ "aui-md-h4 mt-3.5 mb-1 scroll-m-20 text-base font-medium first:mt-0 last:mb-0",
131
+ className,
132
+ )}
133
+ {...props}
134
+ />
135
+ ),
136
+ h5: ({ className, ...props }) => (
137
+ <h5
138
+ className={cn(
139
+ "aui-md-h5 mt-3 mb-1 text-sm font-semibold first:mt-0 last:mb-0",
140
+ className,
141
+ )}
142
+ {...props}
143
+ />
144
+ ),
145
+ h6: ({ className, ...props }) => (
146
+ <h6
147
+ className={cn(
148
+ "aui-md-h6 mt-3 mb-1 text-sm font-medium first:mt-0 last:mb-0",
149
+ className,
150
+ )}
151
+ {...props}
152
+ />
153
+ ),
154
+ p: ({ className, ...props }) => (
155
+ <p
156
+ className={cn(
157
+ "aui-md-p my-3 leading-relaxed first:mt-0 last:mb-0",
158
+ className,
159
+ )}
160
+ {...props}
161
+ />
162
+ ),
163
+ // A citation to a non-web source (repo://, vault paths) arrives with its href
164
+ // emptied by the sanitizer; an <a href=""> would reload the embed itself
165
+ // (carrying its query string). Show the label as plain text instead.
166
+ a: ({ className, href, children, ...props }) =>
167
+ !isFollowableHref(href) ? (
168
+ <span className="aui-md-a-plain">{children}</span>
169
+ ) : isArtifactBlobHref(href) ? (
170
+ <ArtifactLink href={href as string} className={className}>
171
+ {children}
172
+ </ArtifactLink>
173
+ ) : (
174
+ <a
175
+ className={cn(
176
+ "aui-md-a text-accent hover:text-accent/80 underline underline-offset-2",
177
+ className,
178
+ )}
179
+ href={href}
180
+ {...props}
181
+ >
182
+ {children}
183
+ </a>
184
+ ),
185
+ blockquote: ({ className, ...props }) => (
186
+ <blockquote
187
+ className={cn(
188
+ "aui-md-blockquote border-border text-muted-foreground my-3 border-s-2 ps-4",
189
+ className,
190
+ )}
191
+ {...props}
192
+ />
193
+ ),
194
+ ul: ({ className, ...props }) => (
195
+ <ul
196
+ className={cn(
197
+ "aui-md-ul marker:text-muted-foreground my-3 ms-5 list-disc [&>li]:mt-1",
198
+ className,
199
+ )}
200
+ {...props}
201
+ />
202
+ ),
203
+ ol: ({ className, ...props }) => (
204
+ <ol
205
+ className={cn(
206
+ "aui-md-ol marker:text-muted-foreground my-3 ms-5 list-decimal [&>li]:mt-1",
207
+ className,
208
+ )}
209
+ {...props}
210
+ />
211
+ ),
212
+ hr: ({ className, ...props }) => (
213
+ <hr
214
+ className={cn("aui-md-hr border-border my-3", className)}
215
+ {...props}
216
+ />
217
+ ),
218
+ table: ({ className, ...props }) => (
219
+ <div className="aui-md-table-wrapper my-3 overflow-x-auto">
220
+ <table
221
+ className={cn(
222
+ "aui-md-table w-full border-separate border-spacing-0",
223
+ className,
224
+ )}
225
+ {...props}
226
+ />
227
+ </div>
228
+ ),
229
+ th: ({ className, ...props }) => (
230
+ <th
231
+ className={cn(
232
+ "aui-md-th bg-muted px-3 py-1.5 text-start font-medium first:rounded-ss-lg last:rounded-se-lg [[align=center]]:text-center [[align=right]]:text-right",
233
+ className,
234
+ )}
235
+ {...props}
236
+ />
237
+ ),
238
+ td: ({ className, ...props }) => (
239
+ <td
240
+ className={cn(
241
+ "aui-md-td border-border border-s border-b px-3 py-1.5 text-start last:border-e [[align=center]]:text-center [[align=right]]:text-right",
242
+ className,
243
+ )}
244
+ {...props}
245
+ />
246
+ ),
247
+ tr: ({ className, ...props }) => (
248
+ <tr
249
+ className={cn(
250
+ "aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-es-lg [&:last-child>td:last-child]:rounded-ee-lg",
251
+ className,
252
+ )}
253
+ {...props}
254
+ />
255
+ ),
256
+ li: ({ className, ...props }) => (
257
+ <li className={cn("aui-md-li leading-relaxed", className)} {...props} />
258
+ ),
259
+ strong: ({ className, ...props }) => (
260
+ <strong
261
+ className={cn("aui-md-strong font-semibold", className)}
262
+ {...props}
263
+ />
264
+ ),
265
+ sup: ({ className, ...props }) => (
266
+ <sup
267
+ className={cn("aui-md-sup [&>a]:text-xs [&>a]:no-underline", className)}
268
+ {...props}
269
+ />
270
+ ),
271
+ pre: ({ className, ...props }) => (
272
+ <pre
273
+ className={cn(
274
+ "aui-md-pre border-border bg-muted/30 overflow-x-auto rounded-t-none rounded-b-lg border border-t-0 p-3.5 text-[13px] leading-relaxed",
275
+ className,
276
+ )}
277
+ {...props}
278
+ />
279
+ ),
280
+ code: function Code({ className, ...props }) {
281
+ const isCodeBlock = useIsMarkdownCodeBlock();
282
+ return (
283
+ <code
284
+ className={cn(
285
+ !isCodeBlock &&
286
+ "aui-md-inline-code bg-muted rounded-md px-1.5 py-0.5 font-mono text-[0.85em]",
287
+ className,
288
+ )}
289
+ {...props}
290
+ />
291
+ );
292
+ },
293
+ CodeHeader,
294
+ });
@@ -0,0 +1 @@
1
+ export const DEFAULT_MODEL_ID = "gpt-5.6-luna";