@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.
- package/README.md +48 -2
- package/package.json +143 -4
- package/src/components/NavShell.tsx +776 -0
- package/src/components/SocialRow.tsx +87 -0
- package/src/components/Spinner.tsx +27 -0
- package/src/components/StackLogo.tsx +40 -0
- package/src/components/Terminal.tsx +110 -0
- package/src/components/TerminalManifest.tsx +212 -0
- package/src/components/ThemeProvider.tsx +271 -0
- package/src/components/account/AuthCard.tsx +309 -0
- package/src/components/assistant-ui/elements/mermaid-diagram.aui.tsx +63 -0
- package/src/components/assistant-ui/elements/mermaid-diagram.tsx +340 -0
- package/src/components/brand/BrandWordmark.tsx +32 -0
- package/src/components/changelog/ReleaseRail.tsx +81 -0
- package/src/components/changelog/index.ts +1 -0
- package/src/components/chat/ChatCodeBlock.tsx +67 -0
- package/src/components/chat/ChatMarkdown.tsx +66 -0
- package/src/components/chat/ChatMarkdownSource.tsx +203 -0
- package/src/components/chat/ChatMermaidBlock.tsx +202 -0
- package/src/components/chat/ChatMessage.tsx +77 -0
- package/src/components/chat/ChatPlayback.tsx +422 -0
- package/src/components/chat/ChatStreamCursor.tsx +25 -0
- package/src/components/chat/ChatThinking.tsx +113 -0
- package/src/components/chat/ChatToolCall.tsx +190 -0
- package/src/components/chat/ChatTranscript.tsx +60 -0
- package/src/components/chat/ChatWidgetFrame.tsx +107 -0
- package/src/components/chat/DigichatBootLoader.tsx +683 -0
- package/src/components/chat/DigichatLauncher.tsx +361 -0
- package/src/components/chat/DigichatThread.tsx +118 -0
- package/src/components/chat/DigichatThreadList.tsx +54 -0
- package/src/components/chat/DigichatWordmark.tsx +24 -0
- package/src/components/chat/DotMatrix.tsx +650 -0
- package/src/components/chat/boot-lab.tsx +766 -0
- package/src/components/chat/boot-signal.ts +144 -0
- package/src/components/chat/chat-surfaces.ts +52 -0
- package/src/components/chat/connection-status.ts +40 -0
- package/src/components/chat/digichat-wordmark.ts +355 -0
- package/src/components/chat/disclosure-chevron.tsx +49 -0
- package/src/components/chat/followable-href.ts +9 -0
- package/src/components/chat/gallery-thread/action-icons.tsx +25 -0
- package/src/components/chat/gallery-thread/attachment.aui.tsx +262 -0
- package/src/components/chat/gallery-thread/block-caret.tsx +439 -0
- package/src/components/chat/gallery-thread/cn.ts +1 -0
- package/src/components/chat/gallery-thread/composer-keyboard.ts +106 -0
- package/src/components/chat/gallery-thread/composer-trigger-popover.aui.tsx +235 -0
- package/src/components/chat/gallery-thread/css.d.ts +6 -0
- package/src/components/chat/gallery-thread/file.tsx +238 -0
- package/src/components/chat/gallery-thread/follow-up-suggestions.aui.tsx +92 -0
- package/src/components/chat/gallery-thread/format-json-dump.ts +112 -0
- package/src/components/chat/gallery-thread/hooks/use-attachment-src.ts +46 -0
- package/src/components/chat/gallery-thread/hooks/use-copy-to-clipboard.ts +9 -0
- package/src/components/chat/gallery-thread/image.tsx +519 -0
- package/src/components/chat/gallery-thread/markdown-text.tsx +278 -0
- package/src/components/chat/gallery-thread/message-error.aui.tsx +105 -0
- package/src/components/chat/gallery-thread/message-timing.aui.tsx +143 -0
- package/src/components/chat/gallery-thread/private-work-step.tsx +188 -0
- package/src/components/chat/gallery-thread/reasoning.tsx +332 -0
- package/src/components/chat/gallery-thread/scroll-mode.ts +174 -0
- package/src/components/chat/gallery-thread/source.tsx +76 -0
- package/src/components/chat/gallery-thread/thread.aui.tsx +1619 -0
- package/src/components/chat/gallery-thread/tooltip-icon-button.tsx +53 -0
- package/src/components/chat/gallery-thread/typed-welcome-copy.tsx +18 -0
- package/src/components/chat/gallery-thread/ui/tooltip.tsx +22 -0
- package/src/components/chat/gallery-thread/work-chain-summary.tsx +48 -0
- package/src/components/chat/gallery-thread/work-chain.tsx +110 -0
- package/src/components/chat/gallery-thread/work-status.ts +66 -0
- package/src/components/chat/overlay-scrollbar.tsx +86 -0
- package/src/components/chat/sanitize-mermaid-svg.ts +38 -0
- package/src/components/chat/skins/SOURCE.md +36 -0
- package/src/components/chat/skins/base/attachment.aui.tsx +287 -0
- package/src/components/chat/skins/base/aui-default/README.md +45 -0
- package/src/components/chat/skins/base/aui-default/collapsible-root.tsx +19 -0
- package/src/components/chat/skins/base/aui-default/collapsible.tsx +21 -0
- package/src/components/chat/skins/base/aui-default/reasoning.aui.tsx +120 -0
- package/src/components/chat/skins/base/aui-default/reasoning.tsx +331 -0
- package/src/components/chat/skins/base/aui-default/surfaces.ts +7 -0
- package/src/components/chat/skins/base/aui-default/tool-fallback.aui.tsx +772 -0
- package/src/components/chat/skins/base/aui-default/tool-group.aui.tsx +241 -0
- package/src/components/chat/skins/base/docs-model-options.ts +6 -0
- package/src/components/chat/skins/base/elements/assistant-trace.aui.tsx +169 -0
- package/src/components/chat/skins/base/elements/composer-trigger-popover.aui.tsx +271 -0
- package/src/components/chat/skins/base/elements/directive-text.aui.tsx +29 -0
- package/src/components/chat/skins/base/elements/directive-text.tsx +76 -0
- package/src/components/chat/skins/base/elements/message-timing.aui.tsx +104 -0
- package/src/components/chat/skins/base/elements/model-selector.aui.tsx +140 -0
- package/src/components/chat/skins/base/elements/model-selector.tsx +720 -0
- package/src/components/chat/skins/base/elements/quote.aui.tsx +290 -0
- package/src/components/chat/skins/base/elements/work-chain.tsx +100 -0
- package/src/components/chat/skins/base/markdown-text.tsx +294 -0
- package/src/components/chat/skins/base/model.ts +1 -0
- package/src/components/chat/skins/base/thread.tsx +1050 -0
- package/src/components/chat/skins/base/tooltip-icon-button.tsx +56 -0
- package/src/components/chat/skins/base/ui/avatar.tsx +115 -0
- package/src/components/chat/skins/base/ui/badge.tsx +51 -0
- package/src/components/chat/skins/base/ui/button.tsx +67 -0
- package/src/components/chat/skins/base/ui/command.tsx +185 -0
- package/src/components/chat/skins/base/ui/dialog.tsx +168 -0
- package/src/components/chat/skins/base/ui/dot-matrix.tsx +267 -0
- package/src/components/chat/skins/base/ui/popover.tsx +97 -0
- package/src/components/chat/skins/base/ui/skeleton.tsx +20 -0
- package/src/components/chat/skins/base/ui/textarea.tsx +24 -0
- package/src/components/chat/skins/base/ui/tooltip.tsx +73 -0
- package/src/components/chat/skins/base-assistant-ui/config-provider.tsx +90 -0
- package/src/components/chat/skins/base-assistant-ui/defaults.ts +419 -0
- package/src/components/chat/skins/base-assistant-ui/index.tsx +44 -0
- package/src/components/chat/skins/chatgpt.tsx +448 -0
- package/src/components/chat/skins/claude.tsx +380 -0
- package/src/components/chat/skins/digichat-composer-toolbar.tsx +151 -0
- package/src/components/chat/skins/digichat-context-meter-shares.ts +158 -0
- package/src/components/chat/skins/digichat-context-meter.tsx +243 -0
- package/src/components/chat/skins/digichat-meter-tone.ts +26 -0
- package/src/components/chat/skins/digichat-usage-meter.tsx +103 -0
- package/src/components/chat/skins/digichat.tsx +144 -0
- package/src/components/chat/skins/expo-react-native.tsx +29 -0
- package/src/components/chat/skins/gemini.tsx +322 -0
- package/src/components/chat/skins/grok-icon.tsx +34 -0
- package/src/components/chat/skins/grok.tsx +369 -0
- package/src/components/chat/skins/index.ts +46 -0
- package/src/components/chat/skins/perplexity.tsx +462 -0
- package/src/components/chat/skins/product-page-assistant/assistant-modal.tsx +73 -0
- package/src/components/chat/skins/product-page-assistant/index.tsx +19 -0
- package/src/components/chat/skins/product-page-assistant/product-dashboard.tsx +164 -0
- package/src/components/chat/skins/react-ink.tsx +97 -0
- package/src/components/chat/skins/thread-skin-host-contract.ts +102 -0
- package/src/components/chat/skins/thread-skin-view.tsx +156 -0
- package/src/components/chat/skins/thread-skins.ts +143 -0
- package/src/components/chat/skins/tooltip-icon-button.tsx +35 -0
- package/src/components/chat/skins/ui/dropdown-menu.tsx +272 -0
- package/src/components/chat/skins/webpage-assistant/assistant-config.ts +238 -0
- package/src/components/chat/skins/webpage-assistant/assistant-modal.tsx +78 -0
- package/src/components/chat/skins/webpage-assistant/config-provider.tsx +132 -0
- package/src/components/chat/skins/webpage-assistant/docs-app.tsx +106 -0
- package/src/components/chat/skins/webpage-assistant/docs-article.tsx +109 -0
- package/src/components/chat/skins/webpage-assistant/docs-assistant.tsx +73 -0
- package/src/components/chat/skins/webpage-assistant/docs-nav.tsx +81 -0
- package/src/components/chat/skins/webpage-assistant/host-ui.ts +79 -0
- package/src/components/chat/skins/webpage-assistant/index.tsx +12 -0
- package/src/components/chat/skins/webpage-assistant/markdown-page.tsx +11 -0
- package/src/components/chat/skins/webpage-assistant/pages.ts +9 -0
- package/src/components/chat/skins/webpage-assistant/types.ts +178 -0
- package/src/components/chat/skins/webpage-assistant/use-mobile.ts +19 -0
- package/src/components/chat/stock/SOURCE.md +90 -0
- package/src/components/chat/stock/artifacts-panel.tsx +305 -0
- package/src/components/chat/stock/attachment.aui.tsx +280 -0
- package/src/components/chat/stock/chat-notice.tsx +143 -0
- package/src/components/chat/stock/chat-private-mode.tsx +64 -0
- package/src/components/chat/stock/deploy-ui-context.tsx +89 -0
- package/src/components/chat/stock/embed-chat-prefs.tsx +471 -0
- package/src/components/chat/stock/file.tsx +265 -0
- package/src/components/chat/stock/follow-up-suggestions.aui.tsx +83 -0
- package/src/components/chat/stock/image.tsx +531 -0
- package/src/components/chat/stock/index.ts +129 -0
- package/src/components/chat/stock/json-view.tsx +140 -0
- package/src/components/chat/stock/markdown-text.tsx +319 -0
- package/src/components/chat/stock/message-error.aui.tsx +96 -0
- package/src/components/chat/stock/message-export-menu.tsx +156 -0
- package/src/components/chat/stock/palette-row-preview.tsx +26 -0
- package/src/components/chat/stock/reasoning.aui.tsx +120 -0
- package/src/components/chat/stock/reasoning.tsx +335 -0
- package/src/components/chat/stock/skin-chrome.tsx +81 -0
- package/src/components/chat/stock/skin-credit.tsx +63 -0
- package/src/components/chat/stock/skin-palette-bridge.tsx +235 -0
- package/src/components/chat/stock/skin-palette-context.ts +16 -0
- package/src/components/chat/stock/skin-runtime.tsx +52 -0
- package/src/components/chat/stock/skin-slash-palette.tsx +393 -0
- package/src/components/chat/stock/skin-types.ts +217 -0
- package/src/components/chat/stock/stock-chat-prefs-host.tsx +501 -0
- package/src/components/chat/stock/stock-send-gate.tsx +94 -0
- package/src/components/chat/stock/stock-shape.tsx +39 -0
- package/src/components/chat/stock/thread.aui.tsx +645 -0
- package/src/components/chat/stock/tool-display.ts +6 -0
- package/src/components/chat/stock/tool-fallback.aui.tsx +866 -0
- package/src/components/chat/stock/tool-group.aui.tsx +244 -0
- package/src/components/chat/stock/tool-surface.ts +120 -0
- package/src/components/chat/stock/tooltip-icon-button.tsx +49 -0
- package/src/components/chat/stock/ui/avatar.tsx +108 -0
- package/src/components/chat/stock/ui/button.tsx +81 -0
- package/src/components/chat/stock/ui/collapsible.tsx +21 -0
- package/src/components/chat/stock/ui/dialog.tsx +163 -0
- package/src/components/chat/stock/ui/skeleton.tsx +13 -0
- package/src/components/chat/stock/ui/textarea.tsx +20 -0
- package/src/components/chat/stock/ui/tooltip.tsx +68 -0
- package/src/components/chat/stock/use-attachment-src.ts +42 -0
- package/src/components/chat/stock/use-copy-to-clipboard.ts +29 -0
- package/src/components/chat/strip-model-boilerplate.ts +42 -0
- package/src/components/chat/suggestion-cycle.tsx +230 -0
- package/src/components/chat/suggestion-scroll-row.tsx +81 -0
- package/src/components/chat/trace-grouping/chain-group-by.ts +44 -0
- package/src/components/chat/trace-grouping/chain-state.ts +141 -0
- package/src/components/chat/trace-grouping/index.ts +32 -0
- package/src/components/chat/trace-grouping/tool-row.ts +74 -0
- package/src/components/chat/trace-grouping/use-deploy-work-disclosure.ts +35 -0
- package/src/components/chat/trace-grouping/use-work-chain.ts +103 -0
- package/src/components/chat/trace-i18n/core.ts +48 -0
- package/src/components/chat/trace-i18n/index.tsx +23 -0
- package/src/components/chat/trace-i18n/locales/en.ts +24 -0
- package/src/components/chat/trace-i18n/locales/fr.ts +28 -0
- package/src/components/chat/trace-i18n/types.ts +35 -0
- package/src/components/chat/trace-spacing.ts +249 -0
- package/src/components/chat/transcript/activity-view.ts +375 -0
- package/src/components/chat/transcript/chat-export.ts +133 -0
- package/src/components/chat/transcript/index.ts +10 -0
- package/src/components/chat/transcript/save-file.ts +209 -0
- package/src/components/chat/transcript/transcript-markdown.ts +428 -0
- package/src/components/chat/transcript/types.ts +81 -0
- package/src/components/chat/turn-outcome.ts +52 -0
- package/src/components/chat/use-warmup-phase.ts +18 -0
- package/src/components/chat/work-status-lead.tsx +49 -0
- package/src/components/chrome.tsx +264 -0
- package/src/components/command-palette/CommandPalette.tsx +404 -0
- package/src/components/command-palette/index.ts +6 -0
- package/src/components/contact/ContactMailto.tsx +112 -0
- package/src/components/contact/index.ts +5 -0
- package/src/components/conviction/ConvictionMeter.tsx +40 -0
- package/src/components/conviction/SignedConvictionBadge.tsx +26 -0
- package/src/components/conviction/index.ts +7 -0
- package/src/components/data-layout/BentoGrid.tsx +52 -0
- package/src/components/data-layout/CardRail.tsx +150 -0
- package/src/components/data-layout/DotMatrixStat.tsx +65 -0
- package/src/components/data-layout/FeatureCell.tsx +80 -0
- package/src/components/data-layout/MediaFrame.tsx +125 -0
- package/src/components/data-layout/ModuleGrid.tsx +735 -0
- package/src/components/data-layout/Odometer.tsx +149 -0
- package/src/components/data-layout/ProductFrame.tsx +79 -0
- package/src/components/data-layout/TestimonialWall.tsx +139 -0
- package/src/components/data-layout/index.ts +19 -0
- package/src/components/data-layout/treemap.ts +368 -0
- package/src/components/deck/DeckStack.tsx +243 -0
- package/src/components/desk/DataTable.tsx +373 -0
- package/src/components/desk/KpiGrid.tsx +80 -0
- package/src/components/desk/Sparkline.tsx +63 -0
- package/src/components/desk/StateBlock.tsx +132 -0
- package/src/components/desk/index.ts +18 -0
- package/src/components/diagrams/ArchitectureDiagram.tsx +350 -0
- package/src/components/diagrams/ArchitectureTour.tsx +912 -0
- package/src/components/diagrams/TerminalSchematic.tsx +192 -0
- package/src/components/diagrams/architecture-svg.tsx +384 -0
- package/src/components/diagrams/index.ts +30 -0
- package/src/components/diagrams/mermaid-theme.ts +115 -0
- package/src/components/diagrams/tour-camera.ts +171 -0
- package/src/components/docs/CodeTabs.tsx +90 -0
- package/src/components/docs/CopyCommand.tsx +151 -0
- package/src/components/docs/DocsLayout.tsx +197 -0
- package/src/components/docs/DocsSearch.tsx +97 -0
- package/src/components/docs/Endpoint.tsx +135 -0
- package/src/components/document/DocumentFrame.tsx +43 -0
- package/src/components/document/GlyphList.tsx +51 -0
- package/src/components/document/PageTitle.tsx +44 -0
- package/src/components/document/Prose.tsx +38 -0
- package/src/components/document/Section.tsx +55 -0
- package/src/components/document/index.ts +13 -0
- package/src/components/effects-chrome/AnnouncementBar.tsx +88 -0
- package/src/components/effects-chrome/HorizontalScrollTrack.tsx +461 -0
- package/src/components/effects-chrome/Pipeline.tsx +226 -0
- package/src/components/effects-chrome/RotatingPrompts.tsx +116 -0
- package/src/components/effects-chrome/StackingPanels.tsx +101 -0
- package/src/components/effects-chrome/TabStrip.tsx +232 -0
- package/src/components/effects-chrome/ToastStack.tsx +201 -0
- package/src/components/effects-chrome/horizontal-track-core.ts +70 -0
- package/src/components/effects-chrome/index.ts +35 -0
- package/src/components/emblems.tsx +188 -0
- package/src/components/faviconTheme.ts +23 -0
- package/src/components/figure/Figure.tsx +38 -0
- package/src/components/figure/index.ts +2 -0
- package/src/components/finance-charts/DrawdownPlot.tsx +76 -0
- package/src/components/finance-charts/EquityCurve.tsx +71 -0
- package/src/components/finance-charts/PriceChart.tsx +119 -0
- package/src/components/finance-charts/chart-host.tsx +236 -0
- package/src/components/finance-charts/chart-scale.ts +93 -0
- package/src/components/finance-charts/demo-data.ts +88 -0
- package/src/components/finance-charts/index.ts +46 -0
- package/src/components/finance-charts/lw-chart.tsx +292 -0
- package/src/components/finance-composites/MarketBar.tsx +243 -0
- package/src/components/finance-composites/OrderBook.tsx +133 -0
- package/src/components/finance-composites/PerformanceDashboard.tsx +185 -0
- package/src/components/finance-composites/SortableTable.tsx +144 -0
- package/src/components/finance-composites/StockTicker.tsx +65 -0
- package/src/components/finance-composites/SyncedTearsheet.tsx +226 -0
- package/src/components/finance-composites/index.ts +28 -0
- package/src/components/finance-tearsheet/KpiStrip.tsx +49 -0
- package/src/components/finance-tearsheet/LiveBadge.tsx +29 -0
- package/src/components/finance-tearsheet/ReturnsMatrix.tsx +321 -0
- package/src/components/finance-tearsheet/StrategyTearsheet.tsx +99 -0
- package/src/components/finance-tearsheet/TearsheetCard.tsx +54 -0
- package/src/components/finance-tearsheet/TradeLogTable.tsx +73 -0
- package/src/components/finance-tearsheet/charts.tsx +2624 -0
- package/src/components/finance-tearsheet/demo-data.ts +177 -0
- package/src/components/finance-tearsheet/format.ts +41 -0
- package/src/components/finance-tearsheet/index.ts +120 -0
- package/src/components/finance-tearsheet/print.ts +52 -0
- package/src/components/finance-tearsheet/risk-bands.ts +48 -0
- package/src/components/finance-tearsheet/stats.ts +35 -0
- package/src/components/finance-tearsheet/strategy-sheet-model.ts +238 -0
- package/src/components/finance-tearsheet/types.ts +58 -0
- package/src/components/footer/FooterCells.tsx +109 -0
- package/src/components/footer/index.ts +6 -0
- package/src/components/graph.tsx +158 -0
- package/src/components/icons.tsx +98 -0
- package/src/components/landing/PixelWordmark.tsx +36 -0
- package/src/components/logos.ts +39 -0
- package/src/components/marquee/Marquee.tsx +204 -0
- package/src/components/metrics/PerfMetrics.tsx +68 -0
- package/src/components/metrics/StatCounter.tsx +104 -0
- package/src/components/page-geometry.tsx +177 -0
- package/src/components/pricing/Pricing.tsx +174 -0
- package/src/components/pricing/PricingMatrix.tsx +219 -0
- package/src/components/prose/index.ts +2 -0
- package/src/components/prose/prose.tsx +86 -0
- package/src/components/repo-activity/RepoActivity.tsx +599 -0
- package/src/components/repo-activity/RepoHeatmap.tsx +225 -0
- package/src/components/repo-activity/demo.ts +201 -0
- package/src/components/repo-activity/fetch.ts +211 -0
- package/src/components/repo-activity/heatmap.ts +123 -0
- package/src/components/repo-activity/index.ts +28 -0
- package/src/components/repo-activity/types.ts +99 -0
- package/src/components/stages/NumberedStages.tsx +116 -0
- package/src/components/symbols/marks.tsx +116 -0
- package/src/components/symbols/terminal-lockup.tsx +136 -0
- package/src/components/symbols/terminal-marks.tsx +226 -0
- package/src/components/terminal/ChatResponseLoader.tsx +67 -0
- package/src/components/terminal/ContainerBootLoader.tsx +82 -0
- package/src/components/terminal/TerminalStepCaret.tsx +202 -0
- package/src/components/themeInit.ts +24 -0
- package/src/components/typography/MotionReveal.tsx +108 -0
- package/src/components/typography/TypewriterReveal.tsx +101 -0
- package/src/components/typography/WordReveal.tsx +143 -0
- package/src/data/modules.ts +378 -0
- package/src/data/subsystems.ts +101 -0
- package/src/index.ts +587 -0
- package/src/lib/base-path.ts +60 -0
- package/src/lib/cx.ts +25 -0
- package/src/lib/gloomberb.ts +69 -0
- package/src/lib/record.ts +19 -0
- package/src/lib/stub-payload.ts +183 -0
- package/src/lib/useBodyScrollLock.ts +44 -0
- package/src/lib/utils.ts +6 -0
- package/src/motion/primitives.tsx +105 -0
- package/src/motion/scroll-glide.ts +62 -0
- package/src/motion/scrolly-core.ts +38 -0
- package/src/motion/scrolly.tsx +95 -0
- package/src/navigation/HashScrollManager.tsx +167 -0
- package/src/navigation/hashScroll.ts +78 -0
- package/src/replay/browser.ts +280 -0
- package/src/replay/chat-export-run.ts +121 -0
- package/src/replay/export-format.ts +25 -0
- package/src/replay/export-mount.ts +32 -0
- package/src/replay/filename.ts +54 -0
- package/src/replay/index.ts +21 -0
- package/src/replay/redact-dom.ts +178 -0
- package/src/replay/redact.ts +113 -0
- package/src/replay/snapshot.ts +659 -0
- package/src/styles/account-auth.css +339 -0
- package/src/styles/brand-wordmark.css +11 -0
- package/src/styles/card-rail.css +120 -0
- package/src/styles/chat-aui.css +1143 -0
- package/src/styles/chat-core.css +469 -0
- package/src/styles/chat-digichat.css +2531 -0
- package/src/styles/chat-math.css +70 -0
- package/src/styles/chat-skin-palette.css +138 -0
- package/src/styles/chat-stock-menu.css +37 -0
- package/src/styles/chat-widgets.css +190 -0
- package/src/styles/command-palette.css +372 -0
- package/src/styles/controls-core.css +2261 -0
- package/src/styles/controls-overlay.css +603 -0
- package/src/styles/data-layout.css +288 -0
- package/src/styles/deck.css +141 -0
- package/src/styles/diagrams.css +1860 -0
- package/src/styles/digichat-app-theme.css +250 -0
- package/src/styles/digichat-boot-loader.css +487 -0
- package/src/styles/digichat-launcher.css +377 -0
- package/src/styles/docs.css +165 -0
- package/src/styles/effects-chrome.css +888 -0
- package/src/styles/finance-composites.css +214 -0
- package/src/styles/finance-tearsheet-overlay.css +90 -0
- package/src/styles/finance-tearsheet.css +945 -0
- package/src/styles/marquee.css +168 -0
- package/src/styles/metrics.css +82 -0
- package/src/styles/nav-shell.css +551 -0
- package/src/styles/pricing.css +79 -0
- package/src/styles/repo-activity.css +575 -0
- package/src/styles/stages.css +69 -0
- package/src/styles/terminal-loaders.css +122 -0
- package/src/styles/terminal-manifest.css +228 -0
- package/src/styles/web-theme.css +1007 -0
- package/src/styles/word-reveal.css +204 -0
- package/src/theme/apply-theme.ts +214 -0
- package/src/theme/index.ts +27 -0
- package/src/theme/palette-registry.ts +855 -0
- package/src/theme/tui-prefs.ts +64 -0
- package/src/ui/alert.tsx +78 -0
- package/src/ui/avatar.tsx +104 -0
- package/src/ui/badge.tsx +75 -0
- package/src/ui/breadcrumb.tsx +61 -0
- package/src/ui/button.tsx +67 -0
- package/src/ui/card.tsx +139 -0
- package/src/ui/checkbox.tsx +27 -0
- package/src/ui/collapsible.tsx +32 -0
- package/src/ui/date-pager.tsx +325 -0
- package/src/ui/dialog.tsx +157 -0
- package/src/ui/dropdown-menu.tsx +267 -0
- package/src/ui/empty-state.tsx +165 -0
- package/src/ui/field.tsx +104 -0
- package/src/ui/form.tsx +36 -0
- package/src/ui/icon-button.tsx +36 -0
- package/src/ui/index.ts +34 -0
- package/src/ui/input.tsx +33 -0
- package/src/ui/kbd.tsx +30 -0
- package/src/ui/label.tsx +32 -0
- package/src/ui/pager.tsx +119 -0
- package/src/ui/pagination.tsx +126 -0
- package/src/ui/radio-group.tsx +51 -0
- package/src/ui/search-bar.tsx +85 -0
- package/src/ui/segmented-control.tsx +76 -0
- package/src/ui/select.tsx +257 -0
- package/src/ui/separator.tsx +24 -0
- package/src/ui/sheet.tsx +141 -0
- package/src/ui/skeleton.tsx +76 -0
- package/src/ui/slider.tsx +76 -0
- package/src/ui/switch.tsx +31 -0
- package/src/ui/table.tsx +179 -0
- package/src/ui/tabs.tsx +89 -0
- package/src/ui/tags-input.tsx +168 -0
- package/src/ui/textarea.tsx +17 -0
- 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
|
+
}
|