@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,53 @@
1
+ "use client";
2
+
3
+ import { type ComponentPropsWithRef, forwardRef } from "react";
4
+
5
+ import {
6
+ Tooltip,
7
+ TooltipContent,
8
+ TooltipProvider,
9
+ TooltipTrigger,
10
+ } from "./ui/tooltip";
11
+ import { Button } from "../../../ui/button";
12
+ import { cn } from "./cn";
13
+
14
+ export type TooltipIconButtonProps = ComponentPropsWithRef<typeof Button> & {
15
+ tooltip: string;
16
+ side?: "top" | "bottom" | "left" | "right";
17
+ };
18
+
19
+ export const TooltipIconButton = forwardRef<
20
+ HTMLButtonElement,
21
+ TooltipIconButtonProps
22
+ >(({ children, tooltip, side = "bottom", className, ...rest }, ref) => {
23
+ return (
24
+ <TooltipProvider delay={0}>
25
+ <Tooltip>
26
+ <TooltipTrigger
27
+ render={
28
+ <Button
29
+ dress="chat"
30
+ variant="ghost"
31
+ size="icon"
32
+ {...rest}
33
+ className={cn(
34
+ // `inline-flex` + centring keeps the glyph in the middle of the
35
+ // box; without it the button falls back to `display: block` and
36
+ // the icon drifts below the baseline of the composer row.
37
+ "aui-button-icon inline-flex size-6 items-center justify-center p-1 active:scale-90",
38
+ className,
39
+ )}
40
+ ref={ref}
41
+ />
42
+ }
43
+ >
44
+ {children}
45
+ <span className="aui-sr-only sr-only">{tooltip}</span>
46
+ </TooltipTrigger>
47
+ <TooltipContent side={side}>{tooltip}</TooltipContent>
48
+ </Tooltip>
49
+ </TooltipProvider>
50
+ );
51
+ });
52
+
53
+ TooltipIconButton.displayName = "TooltipIconButton";
@@ -0,0 +1,18 @@
1
+ "use client";
2
+
3
+ /**
4
+ * The welcomeBody lines under the headline. Rendered statically: the picked
5
+ * handoff has no typing, so the copy appears with the hero and nothing
6
+ * reflows (no caret, no ghost spans, no per-character reveal).
7
+ */
8
+ export function TypedWelcomeCopy({ lines }: { lines: readonly string[] }) {
9
+ return (
10
+ <>
11
+ {lines.map((line, index) => (
12
+ <p key={`${index}:${line}`} className="aui-thread-welcome-copy">
13
+ {line}
14
+ </p>
15
+ ))}
16
+ </>
17
+ );
18
+ }
@@ -0,0 +1,22 @@
1
+ "use client";
2
+
3
+ /**
4
+ * Product tooltip for the gallery Thread: the canonical kit Tooltip
5
+ * (`@digithings-ai/ui/ui/tooltip`, Base UI) with the chat's long-standing
6
+ * no-arrow ruling (#3818) via the kit's `hideArrow` prop, and a zero
7
+ * `sideOffset` default. Behaviour (hover + focus open, Escape dismiss, aria
8
+ * wiring) is the kit's; only the arrow is suppressed, which keeps the
9
+ * product's rendered look and `gallery-thread.source.test.ts` intact.
10
+ */
11
+ import type { ComponentProps } from "react";
12
+
13
+ import { TooltipContent as KitTooltipContent } from "../../../../ui/tooltip";
14
+
15
+ export { Tooltip, TooltipTrigger, TooltipProvider } from "../../../../ui/tooltip";
16
+
17
+ export function TooltipContent({
18
+ sideOffset = 0,
19
+ ...props
20
+ }: ComponentProps<typeof KitTooltipContent>) {
21
+ return <KitTooltipContent hideArrow sideOffset={sideOffset} {...props} />;
22
+ }
@@ -0,0 +1,48 @@
1
+ "use client";
2
+
3
+ import { useAuiState } from "@assistant-ui/react";
4
+ import { DotMatrix } from "../DotMatrix";
5
+ import { cn } from "./cn";
6
+ import { workStatusText } from "./work-status";
7
+
8
+ /**
9
+ * The one line that replaces the whole chain.
10
+ *
11
+ * This is the retired "hidden" view level: the chain collapsed into a single
12
+ * status row. The level is gone — a client folds the chain to its titles
13
+ * instead — so nothing in the product renders this any more; the thread
14
+ * renderer still holds the branch that would, and it draws from the same
15
+ * `workStatusText` the chain header uses so the two can never disagree.
16
+ */
17
+ export function WorkChainSummary({
18
+ indices,
19
+ className,
20
+ }: {
21
+ indices: readonly number[];
22
+ className?: string;
23
+ }) {
24
+ const parts = useAuiState((s) => s.message.parts);
25
+ const status = workStatusText(parts, indices);
26
+
27
+ return (
28
+ <div
29
+ data-slot="aui_work-chain-summary"
30
+ className={cn(
31
+ "aui-work-chain-summary text-ink-mute flex items-center gap-2 py-1.5 text-sm",
32
+ className,
33
+ )}
34
+ >
35
+ <DotMatrix
36
+ state={status.running ? "loading" : "success"}
37
+ decorative
38
+ className="size-4 shrink-0"
39
+ />
40
+ <span
41
+ data-slot="aui_work-chain-summary-label"
42
+ className="inline-block leading-none"
43
+ >
44
+ {status.label}
45
+ </span>
46
+ </div>
47
+ );
48
+ }
@@ -0,0 +1,110 @@
1
+ "use client";
2
+
3
+ import type { ReactNode } from "react";
4
+ import {
5
+ Collapsible,
6
+ CollapsibleContent,
7
+ CollapsibleTrigger,
8
+ } from "../../../ui/collapsible";
9
+ import { DisclosureChevron } from "../disclosure-chevron";
10
+ import { WorkStatusLead } from "../work-status-lead";
11
+ import { cn } from "./cn";
12
+ import { useWorkChain } from "../trace-grouping/use-work-chain";
13
+
14
+ /** The upstream disclosure duration. */
15
+ const ANIMATION_DURATION = 200;
16
+
17
+ /**
18
+ * The whole chain of reasoning and tool calls under one header.
19
+ *
20
+ * assistant-ui keeps the reasoning disclosure and the tool-group disclosure
21
+ * independent. We put them under a single "Working" header so the chain
22
+ * collapses as one unit, and the header stays open for the whole turn (not
23
+ * only while a group happens to be running) so the block never flickers shut
24
+ * between two tool calls.
25
+ *
26
+ * The first manual toggle wins, as it does upstream.
27
+ *
28
+ * Folded, the header is a live status line: it names the tool that is
29
+ * running, or counts what the chain did once it is done. Expanded, it goes
30
+ * back to the plain "Working" / "Worked" title, because the reasoning and the
31
+ * tool calls are right there underneath — the header no longer has to
32
+ * describe them.
33
+ */
34
+ export function WorkChain({
35
+ children,
36
+ indices,
37
+ openAtRest = false,
38
+ foldOnAnswer = false,
39
+ followedByText = false,
40
+ className,
41
+ }: {
42
+ children: ReactNode;
43
+ /**
44
+ * The message-part indices this chain holds. The folded header describes
45
+ * them ("Working — digisearch", "Used 3 tools"); without them the header
46
+ * has nothing to describe and keeps the plain title.
47
+ */
48
+ indices?: readonly number[];
49
+ /**
50
+ * The chain stays open for good: nothing ever folds (the verbose level).
51
+ * The balanced level instead opens the chain while the turn runs and folds
52
+ * it away when the turn ends.
53
+ */
54
+ openAtRest?: boolean;
55
+ /**
56
+ * Fold as soon as the answer starts streaming, rather than when the turn
57
+ * ends (the quiet level: the titles are there while the agent works, then
58
+ * they get out of the way of the answer).
59
+ */
60
+ foldOnAnswer?: boolean;
61
+ /** The chain group is running (a tool or the reasoning is streaming). */
62
+ running?: boolean;
63
+ /**
64
+ * A text part follows this chain in the message: the agent wrote
65
+ * something, so the work that came before it is finished. Only the answer
66
+ * ends a work run — a second run of tool calls and reasoning without text
67
+ * in between belongs to the same block.
68
+ */
69
+ followedByText?: boolean;
70
+ className?: string;
71
+ }) {
72
+ // The fold, the header title and the marker are the shared trace rules
73
+ // (`trace-grouping`), which the base skins render too.
74
+ const { open, onOpenChange, title, marker, outcome } = useWorkChain({
75
+ indices,
76
+ openAtRest,
77
+ foldOnAnswer,
78
+ followedByText,
79
+ });
80
+
81
+ return (
82
+ <Collapsible
83
+ data-slot="aui_work-chain"
84
+ data-outcome={outcome}
85
+ open={open}
86
+ onOpenChange={onOpenChange}
87
+ className={cn("aui-work-chain", className)}
88
+ style={{ "--animation-duration": `${ANIMATION_DURATION}ms` } as React.CSSProperties}
89
+ >
90
+ <CollapsibleTrigger
91
+ data-slot="aui_work-chain-trigger"
92
+ className="aui-work-chain-trigger aui-work-status group/trigger"
93
+ >
94
+ {/* Same lead as the pre-response loader: the marker and the label
95
+ keep their slots, so the handoff reads as the words changing. */}
96
+ <WorkStatusLead marker={marker} label={title} />
97
+ <DisclosureChevron />
98
+ </CollapsibleTrigger>
99
+ <CollapsibleContent
100
+ // Kept mounted: the rows inside keep their own state (and the DOM
101
+ // stays stable) while the chain is folded away.
102
+ keepMounted
103
+ data-slot="aui_work-chain-content"
104
+ className="aui-work-chain-content overflow-hidden ease-[cubic-bezier(0.32,0.72,0,1)] motion-reduce:animate-none data-closed:animate-collapsible-up data-open:animate-collapsible-down data-closed:fill-mode-forwards data-closed:pointer-events-none [--tw-duration:var(--animation-duration)]"
105
+ >
106
+ {children}
107
+ </CollapsibleContent>
108
+ </Collapsible>
109
+ );
110
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The live one-line status of a work chain.
3
+ *
4
+ * The same chain is described in two places: the collapsed header (which
5
+ * reads as a status line — "Working — digisearch", "Used 3 tools") and the
6
+ * retired summary row. Both must say exactly the same thing, so the sentence
7
+ * is computed once here, from the message parts and the chain's own indices.
8
+ */
9
+
10
+ /**
11
+ * The part fields the status needs. Kept structural so the function stays a
12
+ * pure module: no React, no runtime import, and callable from a test with
13
+ * plain objects.
14
+ */
15
+ type WorkStatusPart = {
16
+ readonly type: string;
17
+ readonly toolName?: string | undefined;
18
+ readonly status?: { readonly type?: string | undefined } | undefined;
19
+ };
20
+
21
+ import { EN_TRACE_T, type TraceT } from "../trace-i18n/core";
22
+
23
+ export type { WorkStatusPart };
24
+
25
+ export type WorkStatus = {
26
+ /**
27
+ * The status sentence: what is running now, or what the chain did once it
28
+ * is done.
29
+ */
30
+ label: string;
31
+ /** A tool call or the reasoning is still streaming. */
32
+ running: boolean;
33
+ };
34
+
35
+ /**
36
+ * Describe a chain of reasoning and tool calls.
37
+ *
38
+ * While something runs the line names it; once the chain is done it counts
39
+ * the tools it ran. A chain that only reasoned says so — there is no tool to
40
+ * count, so "Thought" is the honest answer.
41
+ */
42
+ export function workStatusText(
43
+ parts: readonly WorkStatusPart[],
44
+ indices: readonly number[],
45
+ tr: TraceT = EN_TRACE_T,
46
+ ): WorkStatus {
47
+ const chain = indices
48
+ .map((index) => parts[index])
49
+ .filter((part): part is WorkStatusPart => part !== undefined);
50
+
51
+ const tools = chain.filter((part) => part.type === "tool-call");
52
+ const running = tools.find((part) => part.status?.type === "running");
53
+ const thinking = chain.some(
54
+ (part) => part.type === "reasoning" && part.status?.type === "running",
55
+ );
56
+
57
+ const label = running
58
+ ? tr.t("workingOn", { tool: running.toolName ?? tr.t("toolFallbackName") })
59
+ : thinking
60
+ ? tr.t("thinking")
61
+ : tools.length > 0
62
+ ? tr.plural("usedTools", tools.length)
63
+ : tr.t("thought");
64
+
65
+ return { label, running: running !== undefined || thinking };
66
+ }
@@ -0,0 +1,86 @@
1
+ "use client";
2
+
3
+ /**
4
+ * Square overlay scrollbar for scroll containers whose native bar is hidden.
5
+ *
6
+ * Safari draws its overlay scrollbar as an OS capsule and ignores
7
+ * `::-webkit-scrollbar` shape rules, so the native bar is hidden and this
8
+ * square track/thumb is painted instead. It follows scroll position, keyboard
9
+ * scrolling and size changes, and can be dragged. `width` sets the depth tier:
10
+ * the thread viewport is widest, menus next, tool-call dumps narrowest.
11
+ */
12
+
13
+ import { useEffect, useState, type PointerEvent as ReactPointerEvent, type RefObject } from "react";
14
+
15
+ import { cn } from "../../lib/utils";
16
+
17
+ export function OverlayScrollbar({
18
+ targetRef,
19
+ width = 6,
20
+ className,
21
+ }: {
22
+ targetRef: RefObject<HTMLElement | null>;
23
+ width?: number;
24
+ className?: string;
25
+ }) {
26
+ const [thumb, setThumb] = useState<{ top: number; height: number } | null>(null);
27
+
28
+ useEffect(() => {
29
+ const el = targetRef.current;
30
+ if (!el) return;
31
+ const update = () => {
32
+ const { scrollTop, scrollHeight, clientHeight } = el;
33
+ if (scrollHeight <= clientHeight + 1) {
34
+ setThumb(null);
35
+ return;
36
+ }
37
+ const height = Math.max(12, Math.round((clientHeight / scrollHeight) * clientHeight));
38
+ const maxTop = clientHeight - height;
39
+ const maxScroll = scrollHeight - clientHeight;
40
+ setThumb({
41
+ top: maxScroll > 0 ? Math.round((scrollTop / maxScroll) * maxTop) : 0,
42
+ height,
43
+ });
44
+ };
45
+ update();
46
+ el.addEventListener("scroll", update, { passive: true });
47
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(update);
48
+ observer?.observe(el);
49
+ return () => {
50
+ el.removeEventListener("scroll", update);
51
+ observer?.disconnect();
52
+ };
53
+ }, [targetRef]);
54
+
55
+ if (!thumb) return null;
56
+
57
+ const startDrag = (event: ReactPointerEvent<HTMLDivElement>) => {
58
+ const el = targetRef.current;
59
+ if (!el) return;
60
+ event.preventDefault();
61
+ const startY = event.clientY;
62
+ const startScroll = el.scrollTop;
63
+ const maxScroll = el.scrollHeight - el.clientHeight;
64
+ const track = el.clientHeight - thumb.height;
65
+ const move = (e: PointerEvent) => {
66
+ if (track <= 0) return;
67
+ el.scrollTop = startScroll + ((e.clientY - startY) / track) * maxScroll;
68
+ };
69
+ const end = () => {
70
+ window.removeEventListener("pointermove", move);
71
+ window.removeEventListener("pointerup", end);
72
+ };
73
+ window.addEventListener("pointermove", move);
74
+ window.addEventListener("pointerup", end, { once: true });
75
+ };
76
+
77
+ return (
78
+ <div className={cn("aui-overlay-scroll", className)} style={{ width }} aria-hidden>
79
+ <div
80
+ className="aui-overlay-thumb"
81
+ style={{ top: thumb.top, height: thumb.height }}
82
+ onPointerDown={startDrag}
83
+ />
84
+ </div>
85
+ );
86
+ }
@@ -0,0 +1,38 @@
1
+ "use client";
2
+
3
+ import DOMPurify, { type Config } from "dompurify";
4
+
5
+ /**
6
+ * One sanitizer for every mermaid render path in this package.
7
+ *
8
+ * `mermaid-diagram.tsx` renders through `beautiful-mermaid`, a third-party
9
+ * renderer, and injects the returned string with `dangerouslySetInnerHTML`
10
+ * (inline diagram + zoom overlay). The diagram source is model-authored and
11
+ * therefore attacker-influenceable, so the renderer's output must not reach
12
+ * the DOM unfiltered — a future escapeXml regression upstream should not be
13
+ * able to become XSS here.
14
+ *
15
+ * The other mermaid surface, `ChatMermaidBlock`, renders through mermaid under
16
+ * `securityLevel: "strict"`, whose bundled DOMPurify copy strips scripts,
17
+ * event handlers and `javascript:` URLs before returning. This applies the
18
+ * equivalent policy to the `beautiful-mermaid` path so the two agree: DOMPurify
19
+ * restricted to the SVG namespace, plus `dominant-baseline` (which mermaid's
20
+ * strict config also lets through). The one deliberate divergence is
21
+ * `<foreignObject>`, which mermaid strict admits and this forbids — the
22
+ * HTML-integration escape hatch is not needed by `beautiful-mermaid`, which
23
+ * emits none, and this path runs without HTML labels by design.
24
+ *
25
+ * Fails closed: when there is no DOM (SSR / plain Node) DOMPurify reports
26
+ * `isSupported === false` and cannot sanitize, so this returns "" rather than
27
+ * passing the raw string through. The client render, where a DOM exists, fills
28
+ * the diagram in.
29
+ */
30
+ const SANITIZE_CONFIG: Config = {
31
+ USE_PROFILES: { svg: true, svgFilters: true },
32
+ ADD_ATTR: ["dominant-baseline"],
33
+ };
34
+
35
+ export function sanitizeMermaidSvg(svg: string): string {
36
+ if (!DOMPurify.isSupported) return "";
37
+ return DOMPurify.sanitize(svg, SANITIZE_CONFIG);
38
+ }
@@ -0,0 +1,36 @@
1
+ # Official assistant-ui templates (11) + first-party `digichat`
2
+
3
+ Ids 1–11 match assistant-ui `list_templates`. `digichat` is the first-party
4
+ Thread (`@digithings-ai/ui/chat/thread`). Client containers pick one with
5
+ `chrome.skin` / `DIGICHAT_CHROME_SKIN` (fail closed). Baked YAML for each id
6
+ lives at `apps/digichat/config/examples/skins/<id>.yaml` and is copied into
7
+ the image at `/app/config/examples/skins/`. Point `DIGICHAT_CONFIG_PATH` at
8
+ that file (or overlay `DIGICHAT_CHROME_SKIN`) and `/embed` + `POST /api/chat`
9
+ use it — `DIGICHAT_EMBED_TENANTS` is not required. Do not fetch
10
+ assistant-ui.com at request time.
11
+
12
+ | id | What mounts in the Next.js web container |
13
+ |---|---|
14
+ | `base` | Fixed Base demo Thread (`skins/base/thread.tsx`) |
15
+ | `chatgpt` | Vendored ChatGPT clone Thread |
16
+ | `claude` | Vendored Claude clone Thread |
17
+ | `grok` | Vendored Grok clone Thread |
18
+ | `gemini` | Vendored Gemini clone Thread |
19
+ | `perplexity` | Vendored Perplexity clone Thread |
20
+ | `react-ink` | Web facsimile of the Ink TTY demo. Original: `reference/.../react-ink` + `cli/` |
21
+ | `expo-react-native` | Phone-frame facsimile. Original: `reference/.../expo-react-native` |
22
+ | `base-assistant-ui` | Configurable Base: same Thread plus official `brandTheme` / labels shell |
23
+ | `webpage-assistant` | Docs layout + sidebar/modal Thread |
24
+ | `product-page-assistant` | Product dashboard + floating modal Thread |
25
+ | `digichat` | Gallery `/chatbot` Thread via `@digithings-ai/ui/chat/thread` (not a LAYOUT_SKINS owner). |
26
+
27
+ Downloads (fixed demos): `https://www.assistant-ui.com/api/xulux/demo-download?slug=<id>`
28
+ Expo: `https://github.com/assistant-ui/assistant-ui/tree/main/examples/with-expo`
29
+
30
+ Edits vs upstream for in-app mounts:
31
+
32
+ - import paths rewritten into this tree / stock markdown + tool fallback
33
+ - `CloneThreadShell` stripped (digichat owns thread-list via persistence)
34
+ - webpage / product-page use the parent `AssistantRuntimeProvider` (no nested demo runtime)
35
+ - Ink / Expo originals are not imported by Next.js
36
+ - `digichat` is the gallery `/chatbot` Thread (`@digithings-ai/ui/chat/thread`), not a downloaded catalog template