@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,190 @@
1
+ "use client";
2
+ /**
3
+ * ChatToolCall — the collapsible tool-call block promoted from the chatbot
4
+ * reference family (#1418): one mono line — tool(args) · status mark ·
5
+ * timing — that folds its output away, the Claude Code / opencode chain
6
+ * pattern. The tool name takes the surface accent; ok/error wear the
7
+ * money-adjacent up/down reads; a running call breathes its mark. Sits on the
8
+ * terminal palette (term-* tokens), so it expects a term-bg transcript around
9
+ * it. Uncontrolled by default (`defaultOpen`) or controlled via
10
+ * `open`/`onOpenChange`. Output arrives as `lines` (string, or
11
+ * `{ text, tone }` for up/down reads) and/or arbitrary `children` rendered
12
+ * after them — enough surface for digichat’s assistant-ui tool part UI (and
13
+ * any other chat surface) to rebuild tool_call / tool_result / trace kinds. A call with no
14
+ * body renders its head as a plain row (no button). The left rail, color-mix
15
+ * borders, and the running pulse live in styles/chat-widgets.css (import it
16
+ * once app-wide; see the wiring note there). Click the head to expand —
17
+ * a caret glyph plus `aria-expanded` carry the disclosure state.
18
+ */
19
+ import { useEffect, useRef, useState, type ReactNode } from "react";
20
+
21
+ export type ChatToolCallStatus = "running" | "ok" | "error";
22
+
23
+ export type ChatToolCallLine = string | { text: string; tone?: "up" | "down" };
24
+
25
+ export type ChatToolCallProps = {
26
+ /** Tool name, e.g. `digiquant.backtest` — rendered in the accent. */
27
+ name: string;
28
+ /** Argument summary, rendered `(args)` and truncated when long. */
29
+ args?: string;
30
+ /** ok → up ✓, error → down ✕, running → pulsing ellipsis. */
31
+ status?: ChatToolCallStatus;
32
+ /** Right-aligned mono timing, e.g. `412ms`. */
33
+ duration?: string;
34
+ /** Output lines; a tone gives a line the up/down read. */
35
+ lines?: ChatToolCallLine[];
36
+ /** Custom output body (hit lists, rich results) rendered after `lines`. */
37
+ children?: ReactNode;
38
+ defaultOpen?: boolean;
39
+ /** Controlled open state; omit to let the block own it. */
40
+ open?: boolean;
41
+ onOpenChange?: (open: boolean) => void;
42
+ className?: string;
43
+ };
44
+
45
+ const MARKS: Record<ChatToolCallStatus, { glyph: string; cls: string }> = {
46
+ running: { glyph: "…", cls: "tc-run text-term-mute" },
47
+ ok: { glyph: "✓", cls: "text-up" },
48
+ error: { glyph: "✕", cls: "text-danger" },
49
+ };
50
+
51
+ const HEAD_CLS =
52
+ "tc-head flex w-full items-center gap-[0.5rem] border-0 bg-transparent px-0 py-[0.2rem] text-start font-mono text-[0.78rem] text-term-ink";
53
+
54
+ function HeadContent({
55
+ name,
56
+ args,
57
+ status,
58
+ duration,
59
+ showCaret,
60
+ isOpen,
61
+ }: {
62
+ name: string;
63
+ args?: string;
64
+ status: ChatToolCallStatus;
65
+ duration?: string;
66
+ showCaret: boolean;
67
+ isOpen: boolean;
68
+ }) {
69
+ const mark = MARKS[status];
70
+ return (
71
+ <>
72
+ {showCaret ? (
73
+ <span className={`tc-caret${isOpen ? " open" : ""}`} aria-hidden="true" />
74
+ ) : null}
75
+ {/* `shrink-0 whitespace-nowrap`: the name is the one thing on this line
76
+ that must never break. Without them a flex row under width pressure
77
+ (a narrow embed, a long args string) shrinks every item somewhat
78
+ evenly, and a shrunk name span with the default `white-space: normal`
79
+ wraps mid-word — "file_search" split "file_ / searc / h" across three
80
+ lines, observed live. `args` carries `min-w-0 flex-1 truncate` so it
81
+ is the one thing that absorbs the missing space, ellipsised, never
82
+ the name. */}
83
+ <span className="shrink-0 whitespace-nowrap text-accent">{name}</span>
84
+ {args ? (
85
+ <span className="min-w-0 flex-1 truncate text-term-mute">({args})</span>
86
+ ) : null}
87
+ <span className={`ms-auto shrink-0 ${mark.cls}`}>{mark.glyph}</span>
88
+ {duration ? (
89
+ <span className="min-w-[3rem] shrink-0 text-end text-[0.7rem] text-term-mute">
90
+ {duration}
91
+ </span>
92
+ ) : null}
93
+ </>
94
+ );
95
+ }
96
+
97
+ export function ChatToolCall({
98
+ name,
99
+ args,
100
+ status = "ok",
101
+ duration,
102
+ lines,
103
+ children,
104
+ defaultOpen = false,
105
+ open,
106
+ onOpenChange,
107
+ className,
108
+ }: ChatToolCallProps) {
109
+ const [ownOpen, setOwnOpen] = useState(defaultOpen);
110
+ // Tracks a real user toggle. Streaming rows keep a stable React key across
111
+ // tool_call → tool_result (see digichat-ui activity-view identityKey), so
112
+ // `defaultOpen` can flip true on settle without a remount — and useState
113
+ // only reads its initial argument. Adopt the new default until the reader
114
+ // has touched the control; after that, their choice wins.
115
+ const touched = useRef(false);
116
+ const isOpen = open !== undefined ? open : ownOpen;
117
+ const hasBody = Boolean(lines?.length) || (children !== undefined && children !== null);
118
+
119
+ useEffect(() => {
120
+ if (open !== undefined) return;
121
+ if (touched.current) return;
122
+ if (defaultOpen) setOwnOpen(true);
123
+ }, [defaultOpen, open]);
124
+
125
+ const toggle = () => {
126
+ const next = !isOpen;
127
+ touched.current = true;
128
+ if (open === undefined) setOwnOpen(next);
129
+ onOpenChange?.(next);
130
+ };
131
+
132
+ return (
133
+ <div
134
+ className={`tc${status === "error" ? " tc--err" : ""}${
135
+ className ? ` ${className}` : ""
136
+ }`}
137
+ >
138
+ {hasBody ? (
139
+ <button
140
+ type="button"
141
+ className={`${HEAD_CLS} cursor-pointer`}
142
+ aria-expanded={isOpen}
143
+ onClick={toggle}
144
+ >
145
+ <HeadContent
146
+ name={name}
147
+ args={args}
148
+ status={status}
149
+ duration={duration}
150
+ showCaret
151
+ isOpen={isOpen}
152
+ />
153
+ </button>
154
+ ) : (
155
+ <div className={HEAD_CLS}>
156
+ <HeadContent
157
+ name={name}
158
+ args={args}
159
+ status={status}
160
+ duration={duration}
161
+ showCaret={false}
162
+ isOpen={false}
163
+ />
164
+ </div>
165
+ )}
166
+ {hasBody && isOpen ? (
167
+ <div className="pb-[0.4rem] ps-[0.75rem] pt-[0.15rem]">
168
+ {lines?.map((l) => {
169
+ const line = typeof l === "string" ? { text: l, tone: undefined } : l;
170
+ const tone =
171
+ line.tone === "down"
172
+ ? "text-down"
173
+ : line.tone === "up"
174
+ ? "text-up"
175
+ : "text-term-mute";
176
+ return (
177
+ <p
178
+ key={line.text}
179
+ className={`my-[0.12rem] font-mono text-[0.74rem] leading-[1.5] ${tone}`}
180
+ >
181
+ {line.text}
182
+ </p>
183
+ );
184
+ })}
185
+ {children}
186
+ </div>
187
+ ) : null}
188
+ </div>
189
+ );
190
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Chat transcript — the term-surface scrollback pane behind the chatbot
3
+ * family (#1418): a rounded terminal wash (bg-term-bg / term-hair, mono)
4
+ * framing a column of <ChatMessage> turns. `session` draws the faint
5
+ * "digichat — session" header as ::before chrome; `flat` drops the floating
6
+ * shadow (the stream-transcript read); `scroll`/`live` turn the pane into a
7
+ * live thread (digichat-ui's .dc-thread rebuilds on this: overflow-y auto,
8
+ * thin scrollbar, contained overscroll, polite live region — the consumer
9
+ * owns scroll position). The pane deliberately sets no row gap, text size,
10
+ * or max-width: density is the consumer's call via className (the reference
11
+ * uses gap-[0.7rem] for turn stacks, leading-[2.1] for dense scrollback).
12
+ * Shadow, light-theme surface override, and the session ::before live in
13
+ * styles/chat-core.css (import it once app-wide).
14
+ */
15
+ import type { ReactNode } from "react";
16
+
17
+ export type ChatTranscriptProps = {
18
+ children?: ReactNode;
19
+ /** Faint session header line, e.g. `digichat — session`; omit for none. */
20
+ session?: string;
21
+ /** Drop the pane's floating shadow (flush embeds, dense scrollback). */
22
+ flat?: boolean;
23
+ /** Scrollable live-thread behavior (overflow-y auto, thin scrollbar). */
24
+ scroll?: boolean;
25
+ /** Announce streamed-in turns politely (aria-live region). */
26
+ live?: boolean;
27
+ className?: string;
28
+ "aria-label"?: string;
29
+ };
30
+
31
+ export function ChatTranscript({
32
+ children,
33
+ session,
34
+ flat,
35
+ scroll,
36
+ live,
37
+ className,
38
+ "aria-label": ariaLabel,
39
+ }: ChatTranscriptProps) {
40
+ const cls = [
41
+ "chat-transcript",
42
+ flat ? "chat-transcript--flat" : "",
43
+ scroll ? "chat-transcript--scroll min-h-0 overflow-y-auto overscroll-contain" : "",
44
+ "flex flex-col rounded-none border border-term-hair bg-term-bg px-[1.15rem] pt-[1rem] pb-[1.2rem] font-mono",
45
+ className ?? "",
46
+ ]
47
+ .filter(Boolean)
48
+ .join(" ");
49
+ return (
50
+ <div
51
+ className={cls}
52
+ data-session={session}
53
+ aria-label={ariaLabel}
54
+ aria-live={live ? "polite" : undefined}
55
+ aria-atomic={live ? false : undefined}
56
+ >
57
+ {children}
58
+ </div>
59
+ );
60
+ }
@@ -0,0 +1,107 @@
1
+ /**
2
+ * ChatWidgetFrame — the framed-embed grammar promoted from the chatbot
3
+ * reference family (#1418): the container for any object the assistant drops
4
+ * into a turn. Two variants:
5
+ * - "card" (default): a surface card — optional head row (micro-caps accent
6
+ * eyebrow, mono title, right-side badge), unpadded body (children carry
7
+ * their own padding, so grids can run edge-to-edge), and an optional
8
+ * bordered actions footer. The result cards and approval gates.
9
+ * - "embed": a bare hairline media frame (radius 0, overflow clipped) for
10
+ * inline charts/graphs — the frame is promoted, the chart/graph internals
11
+ * stay with the consumer.
12
+ * Server component — no state, no effects. Action buttons come from
13
+ * ChatWidgetButton (primary / ghost / danger tones); their transitions and
14
+ * color-mix hovers live in styles/chat-widgets.css (import it once app-wide;
15
+ * see the wiring note there). digichat 2.0 maps tool/status cards via
16
+ * assistant-ui part components onto these primitives (ChatActivities removed).
17
+ */
18
+ import type { ComponentPropsWithoutRef, ReactNode } from "react";
19
+
20
+ export type ChatWidgetFrameVariant = "card" | "embed";
21
+
22
+ export type ChatWidgetFrameProps = {
23
+ /** Micro-caps accent line above the title, e.g. `backtest complete`. */
24
+ eyebrow?: string;
25
+ /** Mono head title, e.g. `trend_xsec · ETH-USD · 8y`. */
26
+ title?: ReactNode;
27
+ /** Right side of the head row — a status badge, an icon. */
28
+ badge?: ReactNode;
29
+ /** Footer action row (compose ChatWidgetButton here). Card variant only. */
30
+ actions?: ReactNode;
31
+ variant?: ChatWidgetFrameVariant;
32
+ /** Unpadded body — children own their padding. */
33
+ children?: ReactNode;
34
+ className?: string;
35
+ "aria-label"?: string;
36
+ };
37
+
38
+ export function ChatWidgetFrame({
39
+ eyebrow,
40
+ title,
41
+ badge,
42
+ actions,
43
+ variant = "card",
44
+ children,
45
+ className,
46
+ "aria-label": ariaLabel,
47
+ }: ChatWidgetFrameProps) {
48
+ const frame =
49
+ variant === "embed"
50
+ ? "overflow-hidden rounded-none border border-hair"
51
+ : "overflow-hidden rounded-none border border-hair bg-surface";
52
+ const hasHead = Boolean(eyebrow || title || badge);
53
+
54
+ return (
55
+ <article className={`${frame}${className ? ` ${className}` : ""}`} aria-label={ariaLabel}>
56
+ {hasHead ? (
57
+ <header className="flex items-start justify-between gap-[1rem] border-b border-hair px-[1rem] py-[0.85rem]">
58
+ <div>
59
+ {eyebrow ? (
60
+ <p className="m-0 mb-[0.2rem] font-mono text-[0.58rem] uppercase tracking-[0.1em] text-accent">
61
+ {eyebrow}
62
+ </p>
63
+ ) : null}
64
+ {title ? <h3 className="m-0 font-mono text-[0.86rem] text-ink">{title}</h3> : null}
65
+ </div>
66
+ {badge ? <span className="shrink-0">{badge}</span> : null}
67
+ </header>
68
+ ) : null}
69
+ {children}
70
+ {actions ? (
71
+ <footer className="flex gap-[0.6rem] border-t border-hair px-[1rem] py-[0.8rem]">
72
+ {actions}
73
+ </footer>
74
+ ) : null}
75
+ </article>
76
+ );
77
+ }
78
+
79
+ export type ChatWidgetButtonTone = "primary" | "ghost" | "danger";
80
+
81
+ export type ChatWidgetButtonProps = ComponentPropsWithoutRef<"button"> & {
82
+ /** primary = ink/paper fill, ghost = hairline, danger = danger-toned hairline. */
83
+ tone?: ChatWidgetButtonTone;
84
+ };
85
+
86
+ const TONES: Record<ChatWidgetButtonTone, string> = {
87
+ primary: "cw-btn--primary border-transparent bg-ink text-bg",
88
+ ghost: "cw-btn--ghost border-hair bg-transparent text-ink",
89
+ danger: "cw-btn--danger bg-transparent text-danger",
90
+ };
91
+
92
+ export function ChatWidgetButton({
93
+ tone = "ghost",
94
+ className,
95
+ type,
96
+ ...rest
97
+ }: ChatWidgetButtonProps) {
98
+ return (
99
+ <button
100
+ type={type ?? "button"}
101
+ className={`cw-btn cursor-pointer rounded-none border px-[1rem] py-[0.5rem] font-mono text-[0.72rem] ${TONES[tone]}${
102
+ className ? ` ${className}` : ""
103
+ }`}
104
+ {...rest}
105
+ />
106
+ );
107
+ }