@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,108 @@
1
+ "use client";
2
+
3
+ import { m, useScroll, useTransform } from "motion/react";
4
+ import type { MotionValue } from "motion/react";
5
+ import { useRef } from "react";
6
+ import { useMotionSafe } from "../../motion/primitives";
7
+
8
+ /**
9
+ * MotionReveal — the mid-page motion text, sibling to <WordReveal/>.
10
+ *
11
+ * <WordReveal/> is the full-drama hero claim: a 150vh pinned track whose words
12
+ * fill from blur on the ride up, deliberately reserved for one claim per page
13
+ * (its own docblock says so, and a second one on a page stacks 150vh of dead
14
+ * scroll behind the footer). That grammar is wrong for a supporting claim —
15
+ * the testimonial wall, a quoted voice — where the copy must read the moment
16
+ * it is on screen and the page must keep moving.
17
+ *
18
+ * So this is the same idea at band scale, and NOT pinned: the words deepen in
19
+ * order from muted to full ink as the line rides up the viewport, and they are
20
+ * legible from the first frame — pure colour interpolation, no opacity or blur,
21
+ * so the reveal steers the eye and never gates the message. The finished state
22
+ * is reached by the time the line is mid-viewport; the track adds no height.
23
+ * This is the treatment the reference gallery documents for "supporting claims
24
+ * mid-page where legibility must be unconditional".
25
+ *
26
+ * Motion is scroll-linked per word; under `prefers-reduced-motion` — or with no
27
+ * JS at all — the text renders in full ink immediately. `.word` comes from
28
+ * styles/word-reveal.css and already carries both fallbacks:
29
+ *
30
+ * @media (prefers-reduced-motion: reduce) { .word { opacity/transform/filter: … } }
31
+ * html.no-js .word { … }
32
+ *
33
+ * Wiring (in the consuming app): the word-reveal sheet must be imported, which
34
+ * <WordReveal/> already requires —
35
+ * globals.css @import "@digithings-ai/ui/styles/word-reveal.css";
36
+ */
37
+ const REVEAL_END = 0.86;
38
+ const WORD_SPAN = 0.2;
39
+
40
+ function wordWindow(index: number, total: number): [number, number] {
41
+ const start = (index / Math.max(1, total - 1)) * Math.max(0, REVEAL_END - WORD_SPAN);
42
+ return [start, start + WORD_SPAN];
43
+ }
44
+
45
+ function RevealWord({
46
+ index,
47
+ total,
48
+ text,
49
+ progress,
50
+ }: {
51
+ index: number;
52
+ total: number;
53
+ text: string;
54
+ progress: MotionValue<number>;
55
+ }) {
56
+ const [start, end] = wordWindow(index, total);
57
+ const mix = useTransform(progress, [start, end], [0, 100]);
58
+ const color = useTransform(
59
+ mix,
60
+ (v) => `color-mix(in srgb, var(--ink) ${v.toFixed(1)}%, var(--ink-mute))`,
61
+ );
62
+
63
+ return (
64
+ <m.span className="word" style={{ color }}>
65
+ {text}
66
+ </m.span>
67
+ );
68
+ }
69
+
70
+ export type MotionRevealProps = {
71
+ /** The copy to spell out — split on whitespace; each word deepens in turn. */
72
+ text: string;
73
+ /** Extra classes on the inline wrapper. */
74
+ className?: string;
75
+ };
76
+
77
+ export function MotionReveal({ text, className }: MotionRevealProps) {
78
+ const trackRef = useRef<HTMLSpanElement | null>(null);
79
+ // useMotionSafe(), not a raw reduced-motion read: SSR cannot know the media
80
+ // query, so the server pass must always take the animated branch and the
81
+ // real preference resolves one effect-tick later — the same hydration-safe
82
+ // pattern <WordReveal/> uses (#2244).
83
+ const safe = useMotionSafe();
84
+ // The line's own ride: 0 when its top crosses 92% of the viewport, 1 by the
85
+ // time its bottom reaches 55% — i.e. fully spelled out around mid-viewport,
86
+ // and the element is never pinned, so the band keeps its natural height.
87
+ const { scrollYProgress } = useScroll({
88
+ target: trackRef,
89
+ offset: ["start 0.92", "end 0.55"],
90
+ });
91
+ const words = text.split(" ");
92
+
93
+ return (
94
+ <m.span ref={trackRef} className={className}>
95
+ {safe
96
+ ? words.map((word, idx) => (
97
+ <RevealWord
98
+ key={`${word}-${idx}`}
99
+ index={idx}
100
+ total={words.length}
101
+ text={word}
102
+ progress={scrollYProgress}
103
+ />
104
+ ))
105
+ : text}
106
+ </m.span>
107
+ );
108
+ }
@@ -0,0 +1,101 @@
1
+ "use client";
2
+
3
+ import { m, useMotionValueEvent, useScroll } from "motion/react";
4
+ import { useCallback, useEffect, useRef, useState } from "react";
5
+ import { useMotionSafe } from "../../motion/primitives";
6
+
7
+ /**
8
+ * TypewriterReveal — the copy types itself out as the line rides up the page.
9
+ *
10
+ * The sibling of <WordReveal/> and <MotionReveal/>, and the third answer to the
11
+ * same question: how does long copy earn attention on scroll?
12
+ *
13
+ * <WordReveal/> pinned, 150vh of track, words fill from blur. One per page.
14
+ * <MotionReveal/> unpinned, words deepen in colour in order. Supporting claims.
15
+ * <TypewriterReveal/> unpinned, characters appear in order, with a caret.
16
+ *
17
+ * Not pinned, and that is deliberate: a typed quote that held the viewport for a
18
+ * screen and a half would be a performance the reader has to wait out. This one
19
+ * types as the line travels, so the page never stops, and it finishes around
20
+ * mid-viewport.
21
+ *
22
+ * **Layout.** Revealing characters would normally reflow the paragraph on every
23
+ * tick, so the full text is laid out once in a hidden ghost and the typed copy is
24
+ * drawn over it. The box is therefore the size of the finished quote from the
25
+ * first frame — nothing on the page below ever moves.
26
+ *
27
+ * **Accessibility.** The visual layers are `aria-hidden`; the full text is
28
+ * exposed once, in a visually-hidden node. So a screen reader reads the finished
29
+ * quote, never a partial one, and the caret is decorative throughout.
30
+ *
31
+ * **Fallbacks.** Under `prefers-reduced-motion` — or with no JS — the component
32
+ * renders the whole line, untyped and without a caret. `useMotionSafe()`, not a
33
+ * raw media-query read: SSR cannot know the preference, so the server pass always
34
+ * takes the plain branch and the real one resolves a tick later (the same
35
+ * hydration-safe pattern as its siblings, #2244).
36
+ *
37
+ * Wiring (in the consuming app): the word-reveal sheet carries this component's
38
+ * few rules too —
39
+ * globals.css @import "@digithings-ai/ui/styles/word-reveal.css";
40
+ */
41
+
42
+ /** Where in the element's travel the typing runs. */
43
+ const REVEAL_START = 0.04;
44
+ const REVEAL_END = 0.72;
45
+
46
+ export type TypewriterRevealProps = {
47
+ /** The copy to type out. */
48
+ text: string;
49
+ /** Extra classes on the inline wrapper. */
50
+ className?: string;
51
+ };
52
+
53
+ export function TypewriterReveal({ text, className }: TypewriterRevealProps) {
54
+ const trackRef = useRef<HTMLSpanElement | null>(null);
55
+ const safe = useMotionSafe();
56
+ // 0 when the line's top reaches the bottom edge of the viewport, 1 once its
57
+ // bottom has climbed to the middle. Starting at the element's first pixel of
58
+ // visibility is what keeps the collapse from the full copy to an empty one
59
+ // off-screen, so a reader never sees the text vanish and retype.
60
+ const { scrollYProgress } = useScroll({
61
+ target: trackRef,
62
+ offset: ["start end", "end center"],
63
+ });
64
+ // The server — and the first client frame — render the whole line, so there is
65
+ // never a blank quote in the HTML and nothing to hydrate-mismatch against.
66
+ const [shown, setShown] = useState(text.length);
67
+
68
+ const advance = useCallback(
69
+ (progress: number) => {
70
+ const travel = Math.max(0.0001, REVEAL_END - REVEAL_START);
71
+ const t = Math.min(1, Math.max(0, (progress - REVEAL_START) / travel));
72
+ setShown(Math.round(t * text.length));
73
+ },
74
+ [text.length],
75
+ );
76
+
77
+ // Read the current position once on mount as well as on every change: a line
78
+ // that is already past its reveal window when the page loads should be whole,
79
+ // not waiting for a scroll that may never come.
80
+ useEffect(() => {
81
+ advance(scrollYProgress.get());
82
+ }, [advance, scrollYProgress]);
83
+
84
+ useMotionValueEvent(scrollYProgress, "change", advance);
85
+
86
+ const typed = safe ? text.slice(0, shown) : text;
87
+ const typing = safe && shown < text.length;
88
+
89
+ return (
90
+ <m.span ref={trackRef} className={`tw${className ? ` ${className}` : ""}`}>
91
+ <span className="tw-ghost" aria-hidden="true">
92
+ {text}
93
+ </span>
94
+ <span className="tw-live" aria-hidden="true">
95
+ {typed}
96
+ {typing ? <span className="tw-caret" /> : null}
97
+ </span>
98
+ <span className="tw-sr">{text}</span>
99
+ </m.span>
100
+ );
101
+ }
@@ -0,0 +1,143 @@
1
+ "use client";
2
+
3
+ import { m, useScroll, useTransform } from "motion/react";
4
+ import type { MotionValue } from "motion/react";
5
+ import { useRef } from "react";
6
+ import { useMotionSafe } from "../../motion/primitives";
7
+
8
+ /**
9
+ * WordReveal — the full-drama pinned-blur reveal promoted from the design
10
+ * reference (typography/word-reveal). Reserved for the one hero claim per page:
11
+ * words fill from blur as the line rides up the viewport — the reveal starts
12
+ * as soon as the line enters and completes by the time it reaches
13
+ * mid-viewport, where a short sticky hold gives the finished claim one beat
14
+ * before the page flows on. It can never scroll away half-read. Under
15
+ * `prefers-reduced-motion` — or with no JS at all (`html.no-js`) — the final
16
+ * text renders statically, fully legible, with no empty scroll gap.
17
+ *
18
+ * The pinned-track / display-line / `.word` mechanics live in
19
+ * styles/word-reveal.css (kept CSS per the migrate-vs-leave rule: the 150vh
20
+ * track, the sticky pin, and the reduced-motion + no-JS fallbacks). This
21
+ * component carries the scroll→opacity/blur mapping and the token-backed
22
+ * kicker/title utilities.
23
+ *
24
+ * Client component — scroll progress + per-word transforms. Motion via `m`
25
+ * under a MotionProvider (LazyMotion). Wiring (in the consuming app):
26
+ * globals.css @import "@digithings-ai/ui/styles/word-reveal.css";
27
+ * @source "<path-to>/packages/ui/src/components/typography";
28
+ */
29
+
30
+ /**
31
+ * Timing against ["start end", "start start"] scroll progress (0 = the track's
32
+ * top enters the viewport bottom, 1 = it reaches the viewport top, which is
33
+ * the instant the sticky pin engages with the line at mid-viewport):
34
+ * the line's own top clears the viewport bottom around ~0.4, so words start
35
+ * filling the moment the line is visible (REVEAL_START) and every word is
36
+ * fully legible by REVEAL_END ≈ the mid-viewport pin. The pinned remainder of
37
+ * the track (track height − 100vh) is a short hold, not reveal time.
38
+ */
39
+ const REVEAL_START = 0.4;
40
+ const REVEAL_END = 0.98;
41
+ const WORD_SPAN = 0.18;
42
+
43
+ function wordWindow(index: number, total: number): [number, number] {
44
+ const start =
45
+ REVEAL_START +
46
+ (index / Math.max(1, total - 1)) * (REVEAL_END - WORD_SPAN - REVEAL_START);
47
+ return [start, start + WORD_SPAN];
48
+ }
49
+
50
+ function RevealWord({
51
+ index,
52
+ total,
53
+ text,
54
+ progress,
55
+ }: {
56
+ index: number;
57
+ total: number;
58
+ text: string;
59
+ progress: MotionValue<number>;
60
+ }) {
61
+ const [start, end] = wordWindow(index, total);
62
+ // Function transforms only: a numeric range-map on opacity gets compiled by
63
+ // Motion into a native view()-timeline animation, whose enter/exit progress
64
+ // cannot express this pinned-track mapping (it rises then holds). Arbitrary
65
+ // functions are uncompilable, which pins every value to the JS scroll path.
66
+ const wordProgress = (p: number) => Math.min(1, Math.max(0, (p - start) / (end - start)));
67
+ const opacity = useTransform(progress, (p) => 0.08 + wordProgress(p) * 0.92);
68
+ const y = useTransform(progress, (p) => (1 - wordProgress(p)) * 7);
69
+ const filter = useTransform(progress, (p) => `blur(${(1 - wordProgress(p)) * 10}px)`);
70
+
71
+ return (
72
+ <m.span className="word" style={{ opacity, y, filter }}>
73
+ {text}
74
+ </m.span>
75
+ );
76
+ }
77
+
78
+ export type WordRevealProps = {
79
+ /** The claim to reveal — split on whitespace; each word animates in turn. */
80
+ text: string;
81
+ /** Optional mono kicker above the line. */
82
+ kicker?: string;
83
+ /** Optional serif title above the line. */
84
+ title?: string;
85
+ /** Anchor id on the block wrapper. */
86
+ id?: string;
87
+ /** Extra classes on the block wrapper. */
88
+ className?: string;
89
+ };
90
+
91
+ export function WordReveal({ text, kicker, title, id, className }: WordRevealProps) {
92
+ const trackRef = useRef<HTMLDivElement | null>(null);
93
+ // useMotionSafe(), not raw useReducedMotion(): SSR can't know the real media
94
+ // query, and motion/react's hook seeds its `useState` from a synchronously-
95
+ // read matchMedia value on the client's very first render -- so a real
96
+ // reduced-motion user's first hydration render (`reduced=true`, the `text`
97
+ // branch below) structurally disagreed with SSR's motion-safe default
98
+ // (`reduced=false`/null, the words.map() branch), throwing a hydration
99
+ // mismatch (#2244). useMotionSafe() reports motion-safe on that first
100
+ // render on both server and client, then resolves the real preference one
101
+ // effect-tick later -- the same hydration-safe pattern <Reveal/> already uses.
102
+ const reduced = !useMotionSafe();
103
+ // 0 = track top enters the viewport bottom; 1 = track top reaches the
104
+ // viewport top (the sticky pin engages, line at mid-viewport). The reveal
105
+ // maps onto the line's entry ride — see the timing note above.
106
+ const { scrollYProgress } = useScroll({
107
+ target: trackRef,
108
+ offset: ["start end", "start start"],
109
+ });
110
+ const words = text.split(" ");
111
+
112
+ return (
113
+ <div id={id} className={className}>
114
+ {kicker ? (
115
+ <p className="font-mono text-[0.8rem] tracking-[0.02em] text-accent">{kicker}</p>
116
+ ) : null}
117
+ {title ? (
118
+ <h2 className="mt-[0.4rem] font-display text-[clamp(1.5rem,3vw,2.3rem)] font-normal leading-[1.12] tracking-[-0.01em] text-ink">
119
+ {title}
120
+ </h2>
121
+ ) : null}
122
+ <div className={`wr-track${reduced ? " is-static" : ""}`} ref={trackRef}>
123
+ <div className="wr-sticky">
124
+ <p className="word-line" aria-label={text}>
125
+ <span aria-hidden="true">
126
+ {reduced
127
+ ? text
128
+ : words.map((word, idx) => (
129
+ <RevealWord
130
+ key={`${word}-${idx}`}
131
+ index={idx}
132
+ total={words.length}
133
+ text={word}
134
+ progress={scrollYProgress}
135
+ />
136
+ ))}
137
+ </span>
138
+ </p>
139
+ </div>
140
+ </div>
141
+ </div>
142
+ );
143
+ }