@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,149 @@
1
+ "use client";
2
+
3
+ import { useEffect, useRef } from "react";
4
+ import { useInView, useReducedMotion } from "motion/react";
5
+
6
+ /**
7
+ * Odometer — the mechanical digit-roll counter promoted from the design
8
+ * reference (data/odometer), the companion to the count-up <StatCounter/>.
9
+ * Each digit of a formatted figure is a 0–9 reel that rolls to its value the
10
+ * first time the figure scrolls into view, staggered left to right; non-digit
11
+ * characters ($ , . %) sit static between reels. The figure carries an
12
+ * aria-label so screen readers announce the value once — the reels are
13
+ * decorative.
14
+ *
15
+ * SSR ships every reel already settled on its final digit, so the number is
16
+ * readable with no JS and under reduced motion. When motion is allowed, an
17
+ * effect rewinds the strips to zero (transitions suspended), forces a reflow,
18
+ * and releases them — all imperative DOM writes, no per-frame React state.
19
+ *
20
+ * <OdometerStrip/> is the reference arrangement: a hairline-divided cell grid
21
+ * of labelled odometers (sibling-index hairlines keyed off data-cols in
22
+ * styles/data-layout.css, re-derived for the 2-up collapse below 720px).
23
+ *
24
+ * Wiring (in the consuming app):
25
+ * globals.css @import "@digithings-ai/ui/styles/data-layout.css";
26
+ * @source "<path-to>/packages/ui/src/components/data-layout";
27
+ */
28
+ export function Odometer({
29
+ value,
30
+ className,
31
+ }: {
32
+ /** Formatted figure — "$1,284,000", "2.31", "98%" … */
33
+ value: string;
34
+ className?: string;
35
+ }) {
36
+ const ref = useRef<HTMLSpanElement>(null);
37
+ const inView = useInView(ref, { amount: 0.6, once: true });
38
+ // Deliberately raw useReducedMotion(), not useMotionSafe(): `reduced` here
39
+ // is only ever read inside the effect below, never in this component's
40
+ // JSX, so it carries no hydration risk regardless of which hook computes
41
+ // it -- and useMotionSafe() layers its own extra useState+useEffect (to
42
+ // stay safe for consumers that DO read it during render), which means an
43
+ // extra post-mount re-render per Odometer instance for no behavioral
44
+ // gain here. A #2244 hardening pass swapped this to useMotionSafe() for
45
+ // "no raw useReducedMotion() call sites left" consistency; reverted after
46
+ // that additional per-instance re-render traffic measurably raised
47
+ // digithings.ai's live hydration-error rate (roughly 60% of fresh loads
48
+ // with the swap, vs. roughly 20% without it, in a 14-trial sample). That
49
+ // ~20% is itself a residual, unresolved rate under --webpack, not zero --
50
+ // this revert removes one confirmed contributing factor, not the whole
51
+ // bug. See #2244 and #2256 for the full account.
52
+ const reduced = useReducedMotion();
53
+
54
+ // SSR ships the settled reels; once in view (and motion is allowed) rewind
55
+ // every strip to zero with transitions suspended, force a reflow so the
56
+ // rewind commits, then release each reel toward its data-final target.
57
+ useEffect(() => {
58
+ const node = ref.current;
59
+ if (!node || !inView || reduced) return;
60
+ const strips = Array.from(node.querySelectorAll<HTMLElement>(".odo-strip"));
61
+ if (strips.length === 0) return;
62
+ for (const strip of strips) {
63
+ strip.style.transitionProperty = "none";
64
+ strip.style.transform = "translateY(0)";
65
+ }
66
+ void node.offsetHeight; // commit the rewind before the transition re-engages
67
+ for (const strip of strips) {
68
+ strip.style.transitionProperty = "";
69
+ strip.style.transform = strip.dataset.final ?? "";
70
+ }
71
+ }, [inView, reduced]);
72
+
73
+ return (
74
+ <span
75
+ ref={ref}
76
+ className={`odo inline-flex items-end font-mono text-[1.7rem] leading-none tabular-nums text-ink${
77
+ className ? ` ${className}` : ""
78
+ }`}
79
+ aria-label={value}
80
+ >
81
+ {value.split("").map((c, i) =>
82
+ /[0-9]/.test(c) ? (
83
+ <span className="inline-block h-[1em] overflow-hidden" key={i} aria-hidden="true">
84
+ <span
85
+ className="odo-strip"
86
+ data-final={`translateY(${-Number(c) * 10}%)`}
87
+ style={{
88
+ transform: `translateY(${-Number(c) * 10}%)`,
89
+ transitionDelay: `${i * 55}ms`,
90
+ }}
91
+ >
92
+ {Array.from({ length: 10 }, (_, n) => (
93
+ <span className="h-[1em] text-center leading-[1em]" key={n}>
94
+ {n}
95
+ </span>
96
+ ))}
97
+ </span>
98
+ </span>
99
+ ) : (
100
+ <span className="inline-block" key={i} aria-hidden="true">
101
+ {c}
102
+ </span>
103
+ ),
104
+ )}
105
+ </span>
106
+ );
107
+ }
108
+
109
+ export type OdometerStat = {
110
+ /** Formatted figure the reels land on — "$1,284,000", "2.31" … */
111
+ value: string;
112
+ /** Mono micro-caps label under the figure. */
113
+ label: string;
114
+ };
115
+
116
+ const COLS: Record<2 | 3 | 4, string> = {
117
+ 2: "grid-cols-2",
118
+ 3: "grid-cols-3",
119
+ 4: "grid-cols-4",
120
+ };
121
+
122
+ export function OdometerStrip({
123
+ stats,
124
+ columns = 4,
125
+ className,
126
+ }: {
127
+ stats: OdometerStat[];
128
+ /** Desktop stats per row (collapses to 2 below 720px). */
129
+ columns?: 2 | 3 | 4;
130
+ className?: string;
131
+ }) {
132
+ return (
133
+ <div
134
+ data-cols={columns}
135
+ className={`odo-grid grid ${COLS[columns]} overflow-hidden rounded-none border border-hair bg-surface max-[720px]:grid-cols-2${
136
+ className ? ` ${className}` : ""
137
+ }`}
138
+ >
139
+ {stats.map((s) => (
140
+ <div className="odo-cell p-[1.3rem]" key={s.label}>
141
+ <Odometer value={s.value} />
142
+ <span className="mt-[0.55rem] block font-mono text-[0.6rem] uppercase tracking-[0.1em] text-ink-mute">
143
+ {s.label}
144
+ </span>
145
+ </div>
146
+ ))}
147
+ </div>
148
+ );
149
+ }
@@ -0,0 +1,79 @@
1
+ "use client";
2
+
3
+ import { useLayoutEffect, useEffect, useRef, type ReactNode } from "react";
4
+
5
+ /**
6
+ * ProductFrame — the "real surface, cropped" technique promoted from the
7
+ * design reference (layout-patterns/product-frame): a product screenshot is
8
+ * authored once on a FIXED artboard (800×300 by default), then scaled
9
+ * proportionally to fit its container so it never reflows and stays
10
+ * pixel-faithful at any width. CSS calc() can't derive a unitless scale from
11
+ * lengths, so a ResizeObserver measures the container and writes the factor
12
+ * straight to the node (no per-frame React state). With no JS the artboard
13
+ * renders unscaled inside the overflow-hidden frame — a crop, never a break.
14
+ * An optional overlay tag labels the crop. Content is children-driven.
15
+ *
16
+ * Wiring (in the consuming app):
17
+ * globals.css @import "@digithings-ai/ui/styles/data-layout.css";
18
+ * @source "<path-to>/packages/ui/src/components/data-layout";
19
+ */
20
+
21
+ /** useLayoutEffect on the client (no paint flash); useEffect on the server
22
+ * so SSR never warns about layout effects. Initial HTML stays the overflow
23
+ * crop at scale 1 until measurement runs after hydration. */
24
+ const useIsoLayoutEffect =
25
+ typeof document !== "undefined" ? useLayoutEffect : useEffect;
26
+
27
+ export type ProductFrameProps = {
28
+ /** Mono overlay tag naming the crop — "research · research". */
29
+ tag?: string;
30
+ /** Fixed artboard width the children are authored against (px). */
31
+ artboardWidth?: number;
32
+ /** Fixed artboard height — with width, sets the frame's aspect ratio (px). */
33
+ artboardHeight?: number;
34
+ className?: string;
35
+ children: ReactNode;
36
+ };
37
+
38
+ export function ProductFrame({
39
+ tag,
40
+ artboardWidth = 800,
41
+ artboardHeight = 300,
42
+ className,
43
+ children,
44
+ }: ProductFrameProps) {
45
+ const viewportRef = useRef<HTMLDivElement | null>(null);
46
+ const artboardRef = useRef<HTMLDivElement | null>(null);
47
+
48
+ // Measuring/writing before paint removes the unscaled flash; ResizeObserver
49
+ // still owns every subsequent resize. Server path uses useEffect (above).
50
+ useIsoLayoutEffect(() => {
51
+ const vp = viewportRef.current;
52
+ const art = artboardRef.current;
53
+ if (!vp || !art) return;
54
+ const apply = (w: number) => {
55
+ art.style.scale = String(Math.min(1, w / artboardWidth));
56
+ };
57
+ apply(vp.clientWidth);
58
+ const ro = new ResizeObserver((entries) => apply(entries[0].contentRect.width));
59
+ ro.observe(vp);
60
+ return () => ro.disconnect();
61
+ }, [artboardWidth]);
62
+
63
+ return (
64
+ <div
65
+ className={`pf-viewport${className ? ` ${className}` : ""}`}
66
+ ref={viewportRef}
67
+ style={{ aspectRatio: `${artboardWidth} / ${artboardHeight}` }}
68
+ >
69
+ <div
70
+ className="pf-artboard"
71
+ ref={artboardRef}
72
+ style={{ width: artboardWidth, height: artboardHeight }}
73
+ >
74
+ {children}
75
+ </div>
76
+ {tag ? <span className="pf-tag">{tag}</span> : null}
77
+ </div>
78
+ );
79
+ }
@@ -0,0 +1,139 @@
1
+ /**
2
+ * TestimonialWall — the trust band promoted from the design reference
3
+ * (layout-patterns/testimonial-wall): a pull-quote wall over a quiet org
4
+ * lockup. Quote data comes in via props; the voice doctrine is the caller's
5
+ * contract — real numbers and real orgs only, phrased as `{Org} × {product}`,
6
+ * never invented. Attribution avatars are mono initials derived from the
7
+ * name; the optional org strip closes the band under a hairline. A quote may
8
+ * carry an `href` so a named customer's org links to its own public site, and
9
+ * `columns` drops the wall to two for a band holding two voices — or to one, to
10
+ * stack them. The quote body
11
+ * accepts a node, so a caller can hand it motion text (`<MotionReveal/>`) that
12
+ * spells the line out on scroll. Entirely
13
+ * token-backed utilities — no family CSS rules. Server component — no state.
14
+ *
15
+ * Wiring (in the consuming app):
16
+ * globals.css @source "<path-to>/packages/ui/src/components/data-layout";
17
+ */
18
+ import type { ReactNode } from "react";
19
+
20
+ export type TestimonialQuote = {
21
+ /**
22
+ * The pull-quote itself. A string for plain copy; pass an element instead
23
+ * (e.g. `<MotionReveal text="…" />`) when the quote should spell itself out
24
+ * as it rides up the page. The primitive renders it as-is, so any inline
25
+ * motion text is the caller's choice, not the wall's.
26
+ */
27
+ quote: ReactNode;
28
+ /** Attributed name — initials are derived for the avatar disc. */
29
+ name: string;
30
+ /** Role line — "Systematic PM". */
31
+ role: string;
32
+ /** Organization — pairs with `lockup` as `{org} × {lockup}`. */
33
+ org: string;
34
+ /**
35
+ * Optional public site for the org. When present the org name renders as a
36
+ * link — for a named customer whose site is public, never for a quote whose
37
+ * attribution is only a role.
38
+ */
39
+ href?: string;
40
+ };
41
+
42
+ export type TestimonialWallProps = {
43
+ quotes: TestimonialQuote[];
44
+ /**
45
+ * Columns at the widest breakpoint (collapses to one below 820px). Default
46
+ * 3; use 2 for a wall holding two voices, so the row fills instead of
47
+ * leaving an empty third cell, or 1 to stack them — a band where each voice
48
+ * should be read on its own, at its own width, rather than compared.
49
+ */
50
+ columns?: 1 | 2 | 3;
51
+ /** Product half of the `{org} × {product}` lockup; omit to drop it. */
52
+ lockup?: string;
53
+ /** Org names for the quiet strip under the wall; omit to drop the strip. */
54
+ orgs?: string[];
55
+ /** Micro-caps label opening the org strip. */
56
+ orgsLabel?: string;
57
+ /** Accessible name for the org strip — "Illustrative organizations". */
58
+ orgsAriaLabel?: string;
59
+ className?: string;
60
+ };
61
+
62
+ const initials = (name: string) =>
63
+ name
64
+ .split(/[.\s]+/)
65
+ .filter(Boolean)
66
+ .map((p) => p[0])
67
+ .join("");
68
+
69
+ export function TestimonialWall({
70
+ quotes,
71
+ columns = 3,
72
+ lockup,
73
+ orgs,
74
+ orgsLabel = "trusted by",
75
+ orgsAriaLabel = "Organizations",
76
+ className,
77
+ }: TestimonialWallProps) {
78
+ return (
79
+ <div className={className}>
80
+ <div
81
+ className={`grid gap-[0.9rem] max-[820px]:grid-cols-1 ${
82
+ columns === 1 ? "grid-cols-1" : columns === 2 ? "grid-cols-2" : "grid-cols-3"
83
+ }`}
84
+ >
85
+ {quotes.map((q) => (
86
+ <figure
87
+ key={q.name}
88
+ className="m-0 flex flex-col justify-between gap-[1.1rem] rounded-none border border-hair bg-surface p-[1.3rem]"
89
+ >
90
+ <blockquote className="m-0 font-display font-normal text-[1.02rem] leading-[1.4] text-ink">
91
+ {q.quote}
92
+ </blockquote>
93
+ <figcaption className="flex items-center gap-[0.7rem]">
94
+ <span
95
+ className="flex size-[34px] flex-shrink-0 items-center justify-center rounded-none bg-accent-weak font-mono text-[0.62rem] tracking-[0.04em] text-accent"
96
+ aria-hidden="true"
97
+ >
98
+ {initials(q.name)}
99
+ </span>
100
+ <span className="flex min-w-0 flex-col">
101
+ <span className="font-mono text-[0.76rem] text-ink">{q.name}</span>
102
+ <span className="font-mono text-[0.62rem] text-ink-mute">
103
+ {q.role} ·{" "}
104
+ {q.href ? (
105
+ <a
106
+ className="underline-offset-[3px] hover:text-ink hover:underline"
107
+ href={q.href}
108
+ target="_blank"
109
+ rel="noopener noreferrer"
110
+ >
111
+ {q.org}
112
+ </a>
113
+ ) : (
114
+ q.org
115
+ )}
116
+ {lockup ? <span className="text-accent"> × {lockup}</span> : null}
117
+ </span>
118
+ </span>
119
+ </figcaption>
120
+ </figure>
121
+ ))}
122
+ </div>
123
+
124
+ {orgs && orgs.length > 0 ? (
125
+ <div
126
+ className="mt-[1.4rem] flex flex-wrap items-center gap-x-[1.4rem] gap-y-[0.5rem] border-t border-hair pt-[1.1rem] font-mono text-[0.74rem] text-ink-soft"
127
+ aria-label={orgsAriaLabel}
128
+ >
129
+ <span className="text-[0.58rem] uppercase tracking-[0.1em] text-ink-mute">
130
+ {orgsLabel}
131
+ </span>
132
+ {orgs.map((o) => (
133
+ <span key={o}>{o}</span>
134
+ ))}
135
+ </div>
136
+ ) : null}
137
+ </div>
138
+ );
139
+ }
@@ -0,0 +1,19 @@
1
+ // data-layout family barrel (#1450) — re-exported from src/index.ts by the
2
+ // wire stage. One css sheet for the family: styles/data-layout.css. CardRail is
3
+ // utilities-only.
4
+ export { Odometer, OdometerStrip, type OdometerStat } from "./Odometer";
5
+ export { DotMatrixStat, type DotMatrixStatProps } from "./DotMatrixStat";
6
+ export { BentoGrid, BentoCell, type BentoSpan } from "./BentoGrid";
7
+ export { ProductFrame, type ProductFrameProps } from "./ProductFrame";
8
+ export { CardRail, type CardRailProps } from "./CardRail";
9
+ export { MediaFrame, type MediaFrameProps } from "./MediaFrame";
10
+ export { FeatureCell, type FeatureCellProps } from "./FeatureCell";
11
+ export { TestimonialWall, type TestimonialQuote, type TestimonialWallProps } from "./TestimonialWall";
12
+ export { ModuleGrid, type ModuleGridItem, type ModuleGridProps } from "./ModuleGrid";
13
+ export {
14
+ treemapAreas,
15
+ treemapAreasConstrained,
16
+ treemapAnchored,
17
+ type TreemapRect,
18
+ type TreemapMins,
19
+ } from "./treemap";