@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,81 @@
1
+ "use client";
2
+
3
+ /**
4
+ * Deploy chrome copy that official assistant-ui templates read at runtime.
5
+ * ProductStockShell provides it. /baseline preview has no provider — skins
6
+ * keep their catalog demo strings.
7
+ */
8
+
9
+ import { createContext, useContext } from "react";
10
+ import { DEFAULT_THREAD_SKIN, type ThreadSkin } from "../skins/thread-skins";
11
+ import type { ChromeMode, PageContextMode } from "./skin-types";
12
+
13
+ export type SkinChromeValue = {
14
+ skin: ThreadSkin;
15
+ theme: "dark" | "light";
16
+ /** Deploy `chrome.mode`. Compact composer on embed / modal / sidebar. */
17
+ mode: ChromeMode;
18
+ title?: string;
19
+ welcome?: string;
20
+ welcomeBody?: readonly string[];
21
+ placeholder?: string;
22
+ suggestions: readonly string[];
23
+ accent: { color: string; foreground: string } | null;
24
+ modelPicker: boolean;
25
+ /**
26
+ * Deploy `features.pageContext`. `silent` keeps the system
27
+ * `page-context.html` attachment out of the composer and sent-message chips.
28
+ */
29
+ pageContext: PageContextMode;
30
+ /**
31
+ * Whether the "powered by digichat" credit may render on this surface.
32
+ *
33
+ * Resolved by the host from the deployment / embed tenant
34
+ * (`chrome.attribution` / `tenantCfg.attribution`), so an explicit
35
+ * `attribution: false` opt-out suppresses the skin's credit. Without this the
36
+ * embed's opt-out was ignored (the skins mounted the credit unconditionally),
37
+ * and a titled opted-out tenant rendered two credits — the header
38
+ * parenthetical *and* the skin footer (m2502 review, M2).
39
+ */
40
+ attribution: boolean;
41
+ };
42
+
43
+ export const DEFAULT_SKIN_CHROME: SkinChromeValue = {
44
+ skin: DEFAULT_THREAD_SKIN,
45
+ theme: "light",
46
+ mode: "embed",
47
+ suggestions: [],
48
+ accent: null,
49
+ modelPicker: false,
50
+ pageContext: "visible",
51
+ attribution: true,
52
+ };
53
+
54
+ const SkinChromeContext = createContext<SkinChromeValue>(DEFAULT_SKIN_CHROME);
55
+
56
+ export const SkinChromeProvider = SkinChromeContext.Provider;
57
+
58
+ export function useSkinChrome(): SkinChromeValue {
59
+ return useContext(SkinChromeContext);
60
+ }
61
+
62
+ /**
63
+ * Whether the surface may render the credit. Defaults to `true` off the
64
+ * provider (`/baseline` preview, catalog demos) so the credit appears by
65
+ * default; a host that resolved `attribution: false` from config turns it off.
66
+ */
67
+ export function useAttribution(): boolean {
68
+ return useContext(SkinChromeContext).attribution;
69
+ }
70
+
71
+ /** Catalog fallback when deploy YAML omits welcome / placeholder. */
72
+ export function useComposerCopy(fallbackWelcome: string, fallbackPlaceholder: string) {
73
+ const chrome = useSkinChrome();
74
+ return {
75
+ title: chrome.title?.trim() || undefined,
76
+ welcome: chrome.welcome?.trim() || fallbackWelcome,
77
+ welcomeBody: chrome.welcomeBody ?? [],
78
+ placeholder: chrome.placeholder?.trim() || fallbackPlaceholder,
79
+ suggestions: chrome.suggestions,
80
+ };
81
+ }
@@ -0,0 +1,63 @@
1
+ "use client";
2
+
3
+ /**
4
+ * Shared "powered by digichat" branding line.
5
+ *
6
+ * Every skin renders this same component at the bottom of the page at all
7
+ * times — empty thread included. It is branding, not a disclaimer: the
8
+ * watermark stays visible from the very beginning. (Catalog products gate
9
+ * their own "can make mistakes" line on the first message; ours never
10
+ * gates.) Parents do the pinning: an absolute bottom wrapper in empty
11
+ * states, the sticky viewport footer once messages exist. One component
12
+ * (not per-skin copies) keeps the branding identical on every skin we
13
+ * ship.
14
+ *
15
+ * It paints no canvas of its own: tiny centered text inheriting the surface
16
+ * color at reduced opacity, no border or separator. It returns null when the
17
+ * host opted out (`chrome.attribution: false` / embed `attribution: false`),
18
+ * read from `SkinChromeProvider` (default on without a provider).
19
+ */
20
+
21
+ import type { FC } from "react";
22
+ import { cn } from "../../../lib/utils";
23
+ import { useAttribution } from "./skin-chrome";
24
+ import { useEmbedChatPrefsOptional } from "./embed-chat-prefs";
25
+
26
+ export const SKIN_CREDIT_TEXT = "powered by digichat, a digithings product.";
27
+
28
+ export const SkinCredit: FC<{
29
+ className?: string;
30
+ /**
31
+ * Explicit override for surfaces with no SkinChromeProvider — the embed's
32
+ * gate/paywall branch, which resolved placement itself. Omit everywhere
33
+ * else to read the host's resolved `attribution` from context.
34
+ */
35
+ attribution?: boolean;
36
+ }> = ({ className, attribution }) => {
37
+ const fromContext = useAttribution();
38
+ // A tenant chat language may translate the words around the link.
39
+ const credit = useEmbedChatPrefsOptional()?.credit;
40
+ if (attribution !== undefined ? !attribution : !fromContext) return null;
41
+
42
+ return (
43
+ <p
44
+ data-testid="skin-credit"
45
+ data-slot="aui_credit"
46
+ className={cn(
47
+ "aui-skin-credit pt-0.5 text-center text-[0.6875rem] leading-3.5",
48
+ className,
49
+ )}
50
+ >
51
+ {credit?.lead ?? "powered by digichat, a"}{" "}
52
+ <a
53
+ href="https://digithings.ai"
54
+ target="_blank"
55
+ rel="noreferrer noopener"
56
+ className="pointer-events-auto font-medium text-inherit underline-offset-2 hover:underline"
57
+ >
58
+ digithings
59
+ </a>
60
+ {credit ? (/^[.,;:!?]/.test(credit.tail) ? "" : " ") + credit.tail : " product."}
61
+ </p>
62
+ );
63
+ };
@@ -0,0 +1,235 @@
1
+ "use client";
2
+
3
+ import "../../../styles/chat-skin-palette.css";
4
+
5
+ import {
6
+ useEffect,
7
+ useRef,
8
+ useState,
9
+ type ReactNode,
10
+ } from "react";
11
+ import { createPortal } from "react-dom";
12
+ import { ComposerPrimitive } from "@assistant-ui/react";
13
+ import { ComposerTriggerPopover } from "../gallery-thread/composer-trigger-popover.aui";
14
+ import {
15
+ useSkinSlashPalette,
16
+ type DigichatSkinSlash,
17
+ type SkinSlashPalette,
18
+ } from "./skin-slash-palette";
19
+ import { SkinPaletteContext } from "./skin-palette-context";
20
+ import { useEmbedChatPrefsOptional } from "./embed-chat-prefs";
21
+
22
+ /** Marks the thread composer form the shared palette is anchored to. */
23
+ export const SKIN_PALETTE_COMPOSER_ATTR = "data-skin-palette-composer";
24
+
25
+ function composerForms(root: ParentNode): HTMLFormElement[] {
26
+ return Array.from(root.querySelectorAll("form")).filter(
27
+ (form) =>
28
+ !form.closest("[data-message-id]") &&
29
+ Boolean(form.querySelector('textarea, [contenteditable="true"]')),
30
+ );
31
+ }
32
+
33
+ /** Laid out (not `display: none` or inside a hidden layout branch). */
34
+ function isRendered(form: HTMLFormElement): boolean {
35
+ return form.getClientRects().length > 0;
36
+ }
37
+
38
+ /**
39
+ * The thread composer of the skin inside `scope`: a form holding a text
40
+ * input that is not an edit composer inside a message. Layout skins that
41
+ * open the thread in a popover (the assistant modal) portal it out of the
42
+ * scope, and some keep a hidden desktop thread next to the mobile popover
43
+ * one, so the pick is: the composer being typed in, else the last one on
44
+ * screen (in the scope first, then in a popover), else the last in the
45
+ * scope, else the last in a popover.
46
+ */
47
+ export function findThreadComposer(scope: HTMLElement): HTMLFormElement | null {
48
+ const inScope = composerForms(scope);
49
+ const portaled = composerForms(scope.ownerDocument).filter(
50
+ (form) =>
51
+ !scope.contains(form) &&
52
+ Boolean(form.closest("[data-radix-popper-content-wrapper]")),
53
+ );
54
+ const active = scope.ownerDocument.activeElement;
55
+ const focused = active
56
+ ? [...inScope, ...portaled].find((form) => form.contains(active))
57
+ : undefined;
58
+ return (
59
+ focused ??
60
+ inScope.filter(isRendered).at(-1) ??
61
+ portaled.filter(isRendered).at(-1) ??
62
+ inScope.at(-1) ??
63
+ portaled.at(-1) ??
64
+ null
65
+ );
66
+ }
67
+
68
+ export type SkinPaletteBridgeProps = {
69
+ /** Product slash wiring from the host. Absent = the skin renders as is. */
70
+ slash?: DigichatSkinSlash | undefined;
71
+ privateMode?: boolean | undefined;
72
+ children: ReactNode;
73
+ };
74
+
75
+ /**
76
+ * Gives any skin the product `/` palette (and `@` tools) without the skin
77
+ * knowing about it. Same commands and submit behaviour as the digichat skin,
78
+ * which wires the palette into its own composer instead.
79
+ *
80
+ * - One `Unstable_TriggerPopoverRoot` around the skin, so whichever
81
+ * `ComposerPrimitive.Input` the skin renders registers with it.
82
+ * - The popovers portal into the thread composer form, which the stylesheet
83
+ * makes the positioning box, so they sit right above it like the digichat
84
+ * palette.
85
+ * - Slash submits (block, pane, force, run) are caught in the capture phase
86
+ * and never reach the skin's own send handler.
87
+ */
88
+ /**
89
+ * The visual prefs a skin that is not digichat reads from its scope:
90
+ * `/density` respaces the messages and `/scrollbar` shows or hides the bars
91
+ * of the skin's scroll surfaces (chat-skin-palette.css). Prefs come through
92
+ * the provider overlay, so a hovered row in the `/` menu previews here too.
93
+ */
94
+ function useSkinLook(): { density: string; scrollbars: "always" | "auto" } {
95
+ const chatPrefs = useEmbedChatPrefsOptional()?.prefs;
96
+ return {
97
+ density: chatPrefs?.density ?? "default",
98
+ scrollbars: chatPrefs?.scrollbars ?? "always",
99
+ };
100
+ }
101
+
102
+ /** The look attributes alone, for a skin mounted without the palette. */
103
+ function SkinLookScope({ children }: { children: ReactNode }) {
104
+ const { density, scrollbars } = useSkinLook();
105
+ return (
106
+ <div
107
+ data-skin-look-scope=""
108
+ data-skin-density={density}
109
+ data-skin-scrollbars={scrollbars}
110
+ style={{ display: "contents" }}
111
+ >
112
+ {children}
113
+ </div>
114
+ );
115
+ }
116
+
117
+ export function SkinPaletteBridge({
118
+ slash,
119
+ privateMode,
120
+ children,
121
+ }: SkinPaletteBridgeProps) {
122
+ const palette = useSkinSlashPalette({ slash, privateMode });
123
+ if (!palette.enabled) return <SkinLookScope>{children}</SkinLookScope>;
124
+ return <SkinPaletteScope palette={palette}>{children}</SkinPaletteScope>;
125
+ }
126
+
127
+ function SkinPaletteScope({
128
+ palette,
129
+ children,
130
+ }: {
131
+ palette: SkinSlashPalette;
132
+ children: ReactNode;
133
+ }) {
134
+ const scopeRef = useRef<HTMLDivElement | null>(null);
135
+ // `/density` for skins that are not digichat: the scope carries the choice
136
+ // and chat-skin-palette.css respaces the messages under it.
137
+ const { density, scrollbars } = useSkinLook();
138
+ const [anchor, setAnchor] = useState<HTMLFormElement | null>(null);
139
+ const submitRef = useRef(palette.handleSubmit);
140
+ submitRef.current = palette.handleSubmit;
141
+ const anchorRef = useRef<HTMLFormElement | null>(null);
142
+ anchorRef.current = anchor;
143
+
144
+ // Skins mount the composer lazily and swap it (welcome vs. thread), so the
145
+ // anchor is re-found after DOM changes, at most once per frame.
146
+ useEffect(() => {
147
+ const scope = scopeRef.current;
148
+ if (!scope) return;
149
+ let frame = 0;
150
+ const find = () => {
151
+ frame = 0;
152
+ const next = findThreadComposer(scope);
153
+ setAnchor((prev) => (prev === next ? prev : next));
154
+ };
155
+ find();
156
+ const observer = new MutationObserver(() => {
157
+ if (!frame) frame = requestAnimationFrame(find);
158
+ });
159
+ // The body, not the scope: a popover-hosted thread mounts in a portal.
160
+ observer.observe(scope.ownerDocument.body, { childList: true, subtree: true });
161
+ // Focus moving between composers (or a breakpoint hiding one) changes
162
+ // which one is live without touching the DOM tree.
163
+ const refind = () => {
164
+ if (!frame) frame = requestAnimationFrame(find);
165
+ };
166
+ scope.ownerDocument.addEventListener("focusin", refind);
167
+ window.addEventListener("resize", refind);
168
+ return () => {
169
+ observer.disconnect();
170
+ scope.ownerDocument.removeEventListener("focusin", refind);
171
+ window.removeEventListener("resize", refind);
172
+ if (frame) cancelAnimationFrame(frame);
173
+ };
174
+ }, []);
175
+
176
+ useEffect(() => {
177
+ if (!anchor) return;
178
+ anchor.setAttribute(SKIN_PALETTE_COMPOSER_ATTR, "");
179
+ return () => anchor.removeAttribute(SKIN_PALETTE_COMPOSER_ATTR);
180
+ }, [anchor]);
181
+
182
+ // Capture phase on the document, so it runs before the skin's own submit
183
+ // handler (React listens at the root) even for a portaled composer.
184
+ useEffect(() => {
185
+ const onSubmit = (event: Event) => {
186
+ if (!anchorRef.current || event.target !== anchorRef.current) return;
187
+ if (submitRef.current(event)) event.stopPropagation();
188
+ };
189
+ document.addEventListener("submit", onSubmit, true);
190
+ return () => document.removeEventListener("submit", onSubmit, true);
191
+ }, []);
192
+
193
+ return (
194
+ <SkinPaletteContext.Provider value={palette}>
195
+ <ComposerPrimitive.Unstable_TriggerPopoverRoot>
196
+ <div
197
+ ref={scopeRef}
198
+ data-skin-palette-scope=""
199
+ data-skin-density={density}
200
+ data-skin-scrollbars={scrollbars}
201
+ style={{ display: "contents" }}
202
+ >
203
+ {children}
204
+ </div>
205
+ {anchor ? createPortal(<SkinPalettePopovers palette={palette} />, anchor) : null}
206
+ </ComposerPrimitive.Unstable_TriggerPopoverRoot>
207
+ </SkinPaletteContext.Provider>
208
+ );
209
+ }
210
+
211
+ function SkinPalettePopovers({ palette }: { palette: SkinSlashPalette }) {
212
+ return (
213
+ <>
214
+ {palette.slash ? (
215
+ <ComposerTriggerPopover
216
+ char="/"
217
+ className="skin-palette"
218
+ adapter={palette.slash.adapter}
219
+ action={palette.slash.action}
220
+ matcher={palette.slash.matcher}
221
+ emptyItemsLabel="No matching commands"
222
+ />
223
+ ) : null}
224
+ {palette.mention ? (
225
+ <ComposerTriggerPopover
226
+ char="@"
227
+ className="skin-palette"
228
+ adapter={palette.mention.adapter}
229
+ directive={palette.mention.directive}
230
+ emptyItemsLabel="No matching tools"
231
+ />
232
+ ) : null}
233
+ </>
234
+ );
235
+ }
@@ -0,0 +1,16 @@
1
+ "use client";
2
+
3
+ import { createContext, useContext } from "react";
4
+ import type { SkinSlashPalette } from "./skin-slash-palette";
5
+
6
+ /** Set by `SkinPaletteBridge` when the host wired the product palette. */
7
+ export const SkinPaletteContext = createContext<SkinSlashPalette | null>(null);
8
+
9
+ /**
10
+ * The shared palette, when the host wired one. A skin that mounts its own
11
+ * `Unstable_TriggerPopoverRoot` reads this to drop that root (a nested root
12
+ * shadows the shared one) and leave the `/` menu to the bridge.
13
+ */
14
+ export function useSkinPaletteOptional(): SkinSlashPalette | null {
15
+ return useContext(SkinPaletteContext);
16
+ }
@@ -0,0 +1,52 @@
1
+ "use client";
2
+
3
+ import { createContext, useContext, type ReactNode } from "react";
4
+
5
+ // Host-injected runtime for the catalog skins (WS4 Step 3).
6
+ //
7
+ // Skins render inside many hosts (product shell, /baseline catalog, embeds).
8
+ // Anything a skin needs that lives in the host app — error copy, session
9
+ // config, menu panes — enters through this context, never through an `@/`
10
+ // import (packages cannot import app code). Hosts provide values at their
11
+ // ThreadSkinView mount points; fields stay optional so a host that does not
12
+ // care keeps today's rendering.
13
+
14
+ // String-compatible mirror of the app's ParsedEmbedChatError. The app's
15
+ // parse/format fns assign directly to SkinErrorParsers.
16
+ export type ParsedSkinError = {
17
+ code?: string;
18
+ message?: string;
19
+ detail?: string;
20
+ raw: string;
21
+ };
22
+
23
+ export type SkinErrorParsers = {
24
+ parseError: (error: Error | undefined) => ParsedSkinError | null;
25
+ formatError: (error: Error | undefined) => string | null;
26
+ };
27
+
28
+ export type SkinRuntimeValue = {
29
+ errorParsers?: SkinErrorParsers;
30
+ };
31
+
32
+ const SkinRuntimeContext = createContext<SkinRuntimeValue>({});
33
+
34
+ export const SkinRuntimeProvider = SkinRuntimeContext.Provider;
35
+
36
+ export function useSkinRuntime(): SkinRuntimeValue {
37
+ return useContext(SkinRuntimeContext);
38
+ }
39
+
40
+ export function SkinRuntime({
41
+ value,
42
+ children,
43
+ }: {
44
+ value: SkinRuntimeValue;
45
+ children: ReactNode;
46
+ }) {
47
+ return (
48
+ <SkinRuntimeContext.Provider value={value}>
49
+ {children}
50
+ </SkinRuntimeContext.Provider>
51
+ );
52
+ }