@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,369 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
ActionBarPrimitive,
|
|
5
|
+
AuiIf,
|
|
6
|
+
AttachmentPrimitive,
|
|
7
|
+
ComposerPrimitive,
|
|
8
|
+
MessagePrimitive,
|
|
9
|
+
ThreadPrimitive,
|
|
10
|
+
useAuiState,
|
|
11
|
+
useMessageTiming,
|
|
12
|
+
} from "@assistant-ui/react";
|
|
13
|
+
import {
|
|
14
|
+
ArrowUpIcon,
|
|
15
|
+
CheckIcon,
|
|
16
|
+
ChevronDownIcon,
|
|
17
|
+
CopyIcon,
|
|
18
|
+
Download,
|
|
19
|
+
Mic,
|
|
20
|
+
Moon,
|
|
21
|
+
MoreHorizontal,
|
|
22
|
+
Paperclip,
|
|
23
|
+
PencilIcon,
|
|
24
|
+
RefreshCwIcon,
|
|
25
|
+
Square,
|
|
26
|
+
ThumbsDown,
|
|
27
|
+
ThumbsUp,
|
|
28
|
+
XIcon,
|
|
29
|
+
Zap,
|
|
30
|
+
} from "lucide-react";
|
|
31
|
+
import { useState, type FC } from "react";
|
|
32
|
+
import { useAttachmentSrc } from "../stock/use-attachment-src";
|
|
33
|
+
import { MarkdownText } from "../stock/markdown-text";
|
|
34
|
+
import { MessageExportMenu } from "../stock/message-export-menu";
|
|
35
|
+
import { GrokIcon } from "./grok-icon";
|
|
36
|
+
import { SkinCredit, useComposerCopy } from "../stock";
|
|
37
|
+
import {
|
|
38
|
+
DropdownMenu,
|
|
39
|
+
DropdownMenuContent,
|
|
40
|
+
DropdownMenuItem,
|
|
41
|
+
DropdownMenuSeparator,
|
|
42
|
+
DropdownMenuTrigger,
|
|
43
|
+
} from "./ui/dropdown-menu";
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
export const Grok: FC = () => {
|
|
47
|
+
return (
|
|
48
|
+
<ThreadPrimitive.Root data-export-thread="" className="flex h-full flex-col items-stretch bg-[#fdfdfd] px-4 dark:bg-[#141414]">
|
|
49
|
+
<AuiIf condition={(s) => s.thread.isEmpty}>
|
|
50
|
+
<div className="relative flex h-full flex-col items-center justify-center">
|
|
51
|
+
<GrokIcon className="mb-6 h-10 text-[#0d0d0d] dark:text-white" />
|
|
52
|
+
<Composer />
|
|
53
|
+
<div className="pointer-events-none absolute inset-x-0 bottom-0 px-4 pb-2">
|
|
54
|
+
<SkinCredit />
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
</AuiIf>
|
|
58
|
+
|
|
59
|
+
<AuiIf condition={(s) => s.thread.isEmpty === false}>
|
|
60
|
+
<ThreadPrimitive.Viewport className="flex grow flex-col overflow-y-scroll pt-16">
|
|
61
|
+
<ThreadPrimitive.Messages>
|
|
62
|
+
{() => <ChatMessage />}
|
|
63
|
+
</ThreadPrimitive.Messages>
|
|
64
|
+
</ThreadPrimitive.Viewport>
|
|
65
|
+
<Composer />
|
|
66
|
+
<SkinCredit />
|
|
67
|
+
</AuiIf>
|
|
68
|
+
</ThreadPrimitive.Root>
|
|
69
|
+
);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const Composer: FC = () => {
|
|
73
|
+
const isEmpty = useAuiState((s) => s.composer.isEmpty);
|
|
74
|
+
const isRunning = useAuiState((s) => s.thread.isRunning);
|
|
75
|
+
const { placeholder } = useComposerCopy(
|
|
76
|
+
"",
|
|
77
|
+
"What do you want to know?",
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
<ComposerPrimitive.Root data-export-chrome=""
|
|
82
|
+
className="group/composer mx-auto mb-1.5 w-full max-w-3xl"
|
|
83
|
+
data-empty={isEmpty}
|
|
84
|
+
data-running={isRunning}
|
|
85
|
+
>
|
|
86
|
+
<div className="overflow-hidden rounded-4xl bg-[#f8f8f8] ring-1 ring-[#e5e5e5] transition-shadow ring-inset focus-within:ring-[#d0d0d0] dark:bg-[#212121] dark:ring-[#2a2a2a] dark:focus-within:ring-[#3a3a3a]">
|
|
87
|
+
<AuiIf condition={(s) => s.composer.attachments.length > 0}>
|
|
88
|
+
<div className="flex flex-row flex-wrap gap-2 px-4 pt-3">
|
|
89
|
+
<ComposerPrimitive.Attachments>
|
|
90
|
+
{() => <GrokAttachment />}
|
|
91
|
+
</ComposerPrimitive.Attachments>
|
|
92
|
+
</div>
|
|
93
|
+
</AuiIf>
|
|
94
|
+
|
|
95
|
+
<div className="flex items-end gap-1 p-2">
|
|
96
|
+
<ComposerPrimitive.AddAttachment className="mb-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-full text-[#0d0d0d] transition-colors hover:bg-[#f0f0f0] dark:text-white dark:hover:bg-[#2a2a2a]">
|
|
97
|
+
<Paperclip width={18} height={18} />
|
|
98
|
+
</ComposerPrimitive.AddAttachment>
|
|
99
|
+
|
|
100
|
+
<ComposerPrimitive.Input
|
|
101
|
+
placeholder={placeholder}
|
|
102
|
+
minRows={1}
|
|
103
|
+
className="my-2 h-6 max-h-100 min-w-0 flex-1 resize-none bg-transparent text-base leading-6 text-[#0d0d0d] outline-none placeholder:text-[#9a9a9a] dark:text-white dark:placeholder:text-[#6b6b6b]"
|
|
104
|
+
/>
|
|
105
|
+
|
|
106
|
+
<GrokModelPicker />
|
|
107
|
+
|
|
108
|
+
<div className="relative mb-0.5 h-9 w-9 shrink-0 rounded-full bg-[#0d0d0d] text-white dark:bg-white dark:text-[#0d0d0d]">
|
|
109
|
+
<button
|
|
110
|
+
type="button"
|
|
111
|
+
className="absolute inset-0 flex items-center justify-center transition-all duration-300 ease-out group-data-[empty=false]/composer:scale-0 group-data-[empty=false]/composer:opacity-0 group-data-[running=true]/composer:scale-0 group-data-[running=true]/composer:opacity-0"
|
|
112
|
+
aria-label="Voice mode"
|
|
113
|
+
>
|
|
114
|
+
<Mic width={18} height={18} />
|
|
115
|
+
</button>
|
|
116
|
+
|
|
117
|
+
<ComposerPrimitive.Send className="absolute inset-0 flex items-center justify-center transition-all duration-300 ease-out group-data-[empty=true]/composer:scale-0 group-data-[empty=true]/composer:opacity-0 group-data-[running=true]/composer:scale-0 group-data-[running=true]/composer:opacity-0">
|
|
118
|
+
<ArrowUpIcon width={18} height={18} />
|
|
119
|
+
</ComposerPrimitive.Send>
|
|
120
|
+
|
|
121
|
+
<ComposerPrimitive.Cancel className="absolute inset-0 flex items-center justify-center transition-all duration-300 ease-out group-data-[running=false]/composer:scale-0 group-data-[running=false]/composer:opacity-0">
|
|
122
|
+
<Square width={14} height={14} fill="currentColor" />
|
|
123
|
+
</ComposerPrimitive.Cancel>
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</ComposerPrimitive.Root>
|
|
128
|
+
);
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const GROK_MODELS = [
|
|
132
|
+
{
|
|
133
|
+
id: "grok-4.1-fast",
|
|
134
|
+
name: "Fast",
|
|
135
|
+
description: "Default. Quick responses",
|
|
136
|
+
Icon: Zap,
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
id: "grok-4.1",
|
|
140
|
+
name: "Grok 4.1",
|
|
141
|
+
description: "Standard reasoning",
|
|
142
|
+
Icon: Moon,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: "grok-4.1-think",
|
|
146
|
+
name: "Think",
|
|
147
|
+
description: "Multi-step reasoning",
|
|
148
|
+
Icon: Moon,
|
|
149
|
+
},
|
|
150
|
+
];
|
|
151
|
+
|
|
152
|
+
const GrokModelPicker: FC = () => {
|
|
153
|
+
const [model, setModel] = useState(GROK_MODELS[0]!.id);
|
|
154
|
+
const current = GROK_MODELS.find((m) => m.id === model) ?? GROK_MODELS[0]!;
|
|
155
|
+
const CurrentIcon = current.Icon;
|
|
156
|
+
|
|
157
|
+
return (
|
|
158
|
+
<div data-deploy-model-picker className="contents">
|
|
159
|
+
<DropdownMenu>
|
|
160
|
+
<DropdownMenuTrigger className="mb-0.5 flex h-9 shrink-0 items-center gap-2 rounded-full px-2.5 text-[#0d0d0d] hover:bg-[#f0f0f0] dark:text-white dark:hover:bg-[#2a2a2a]">
|
|
161
|
+
<CurrentIcon width={18} height={18} className="shrink-0" />
|
|
162
|
+
<div className="flex items-center gap-1 overflow-hidden transition-[max-width,opacity] duration-300 group-data-[empty=false]/composer:max-w-0 group-data-[empty=false]/composer:opacity-0 group-data-[empty=true]/composer:max-w-32 group-data-[empty=true]/composer:opacity-100">
|
|
163
|
+
<span className="text-sm font-semibold whitespace-nowrap">
|
|
164
|
+
{current.name}
|
|
165
|
+
</span>
|
|
166
|
+
<ChevronDownIcon width={16} height={16} className="shrink-0" />
|
|
167
|
+
</div>
|
|
168
|
+
</DropdownMenuTrigger>
|
|
169
|
+
<DropdownMenuContent align="end" className="min-w-60">
|
|
170
|
+
{GROK_MODELS.map(({ id, name, description, Icon }) => (
|
|
171
|
+
<DropdownMenuItem
|
|
172
|
+
key={id}
|
|
173
|
+
onClick={() => setModel(id)}
|
|
174
|
+
className="flex items-start gap-3"
|
|
175
|
+
>
|
|
176
|
+
<span className="mt-0.5 flex size-4 items-center justify-center text-[#0d0d0d] dark:text-white">
|
|
177
|
+
{id === model ? <CheckIcon /> : <Icon width={14} height={14} />}
|
|
178
|
+
</span>
|
|
179
|
+
<span className="flex flex-1 flex-col">
|
|
180
|
+
<span className="text-foreground text-sm">{name}</span>
|
|
181
|
+
<span className="text-muted-foreground text-xs">
|
|
182
|
+
{description}
|
|
183
|
+
</span>
|
|
184
|
+
</span>
|
|
185
|
+
</DropdownMenuItem>
|
|
186
|
+
))}
|
|
187
|
+
<DropdownMenuSeparator />
|
|
188
|
+
<DropdownMenuItem className="text-muted-foreground text-sm">
|
|
189
|
+
Subscribe to SuperGrok
|
|
190
|
+
</DropdownMenuItem>
|
|
191
|
+
</DropdownMenuContent>
|
|
192
|
+
</DropdownMenu>
|
|
193
|
+
</div>
|
|
194
|
+
);
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
const ChatMessage: FC = () => {
|
|
198
|
+
const role = useAuiState((s) => s.message.role);
|
|
199
|
+
return (
|
|
200
|
+
<MessagePrimitive.Root data-role={role} className="group/message relative mx-auto mb-2 flex w-full max-w-3xl flex-col pb-0.5">
|
|
201
|
+
<AuiIf condition={(s) => s.message.role === "user"}>
|
|
202
|
+
<div className="flex flex-col items-end">
|
|
203
|
+
<div className="relative max-w-[90%] rounded-3xl rounded-br-lg border border-[#e5e5e5] bg-[#f0f0f0] px-4 py-3 text-[#0d0d0d] dark:border-[#2a2a2a] dark:bg-[#1a1a1a] dark:text-white">
|
|
204
|
+
<div className="prose prose-sm dark:prose-invert prose-p:my-0 wrap-break-word">
|
|
205
|
+
<MessagePrimitive.Parts>
|
|
206
|
+
{({ part }) => {
|
|
207
|
+
if (part.type === "text") return <MarkdownText />;
|
|
208
|
+
return null;
|
|
209
|
+
}}
|
|
210
|
+
</MessagePrimitive.Parts>
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
213
|
+
<div className="mt-1 flex h-8 items-center justify-end gap-0.5 opacity-0 transition-opacity group-focus-within/message:opacity-100 group-hover/message:opacity-100">
|
|
214
|
+
<ActionBarPrimitive.Root data-export-chrome="" className="flex items-center gap-0.5">
|
|
215
|
+
<ActionBarPrimitive.Edit className="flex h-8 w-8 items-center justify-center rounded-full text-[#6b6b6b] transition-colors hover:bg-[#e5e5e5] hover:text-[#0d0d0d] dark:text-[#9a9a9a] dark:hover:bg-[#2a2a2a] dark:hover:text-white">
|
|
216
|
+
<PencilIcon width={16} height={16} />
|
|
217
|
+
</ActionBarPrimitive.Edit>
|
|
218
|
+
<ActionBarPrimitive.Copy className="flex h-8 w-8 items-center justify-center rounded-full text-[#6b6b6b] transition-colors hover:bg-[#e5e5e5] hover:text-[#0d0d0d] dark:text-[#9a9a9a] dark:hover:bg-[#2a2a2a] dark:hover:text-white">
|
|
219
|
+
<CopyIcon width={16} height={16} />
|
|
220
|
+
</ActionBarPrimitive.Copy>
|
|
221
|
+
</ActionBarPrimitive.Root>
|
|
222
|
+
</div>
|
|
223
|
+
</div>
|
|
224
|
+
</AuiIf>
|
|
225
|
+
|
|
226
|
+
<AuiIf condition={(s) => s.message.role === "assistant"}>
|
|
227
|
+
<div className="flex flex-col items-start">
|
|
228
|
+
<div className="w-full max-w-none">
|
|
229
|
+
<div className="prose prose-sm dark:prose-invert prose-li:my-1 prose-ol:my-1 prose-p:my-2 prose-ul:my-1 wrap-break-word text-[#0d0d0d] dark:text-[#e5e5e5]">
|
|
230
|
+
<MessagePrimitive.Parts>
|
|
231
|
+
{({ part }) => {
|
|
232
|
+
if (part.type === "text") return <MarkdownText />;
|
|
233
|
+
return null;
|
|
234
|
+
}}
|
|
235
|
+
</MessagePrimitive.Parts>
|
|
236
|
+
</div>
|
|
237
|
+
</div>
|
|
238
|
+
<div className="mt-1 flex h-8 w-full items-center justify-start gap-0.5 opacity-0 transition-opacity group-focus-within/message:opacity-100 group-hover/message:opacity-100">
|
|
239
|
+
<ActionBarPrimitive.Root data-export-chrome="" className="-ml-2 flex items-center gap-0.5">
|
|
240
|
+
<ActionBarPrimitive.Reload className="flex h-8 w-8 items-center justify-center rounded-full text-[#6b6b6b] transition-colors hover:bg-[#e5e5e5] hover:text-[#0d0d0d] dark:text-[#9a9a9a] dark:hover:bg-[#2a2a2a] dark:hover:text-white">
|
|
241
|
+
<RefreshCwIcon width={16} height={16} />
|
|
242
|
+
</ActionBarPrimitive.Reload>
|
|
243
|
+
<ActionBarPrimitive.Copy className="flex h-8 w-8 items-center justify-center rounded-full text-[#6b6b6b] transition-colors hover:bg-[#e5e5e5] hover:text-[#0d0d0d] dark:text-[#9a9a9a] dark:hover:bg-[#2a2a2a] dark:hover:text-white">
|
|
244
|
+
<CopyIcon width={16} height={16} />
|
|
245
|
+
</ActionBarPrimitive.Copy>
|
|
246
|
+
<ActionBarPrimitive.FeedbackPositive className="flex h-8 w-8 items-center justify-center rounded-full text-[#6b6b6b] transition-colors hover:bg-[#e5e5e5] hover:text-[#0d0d0d] dark:text-[#9a9a9a] dark:hover:bg-[#2a2a2a] dark:hover:text-white">
|
|
247
|
+
<ThumbsUp width={16} height={16} />
|
|
248
|
+
</ActionBarPrimitive.FeedbackPositive>
|
|
249
|
+
<ActionBarPrimitive.FeedbackNegative className="flex h-8 w-8 items-center justify-center rounded-full text-[#6b6b6b] transition-colors hover:bg-[#e5e5e5] hover:text-[#0d0d0d] dark:text-[#9a9a9a] dark:hover:bg-[#2a2a2a] dark:hover:text-white">
|
|
250
|
+
<ThumbsDown width={16} height={16} />
|
|
251
|
+
</ActionBarPrimitive.FeedbackNegative>
|
|
252
|
+
<MessageExportMenu
|
|
253
|
+
trigger={
|
|
254
|
+
<button type="button" aria-label="More" className={"flex h-8 w-8 items-center justify-center rounded-full text-[#6b6b6b] transition-colors hover:bg-[#e5e5e5] hover:text-[#0d0d0d] dark:text-[#9a9a9a] dark:hover:bg-[#2a2a2a] dark:hover:text-white"}>
|
|
255
|
+
<MoreHorizontal width={16} height={16} />
|
|
256
|
+
</button>
|
|
257
|
+
}
|
|
258
|
+
icon={<Download className="size-4" />}
|
|
259
|
+
align="start"
|
|
260
|
+
contentClassName="bg-popover text-popover-foreground data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out z-50 min-w-40 overflow-hidden rounded-xl border p-1.5 shadow-md"
|
|
261
|
+
itemClassName="text-muted-foreground focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-pointer items-center gap-2.5 rounded-lg px-3 py-2 text-sm outline-none select-none"
|
|
262
|
+
/>
|
|
263
|
+
<MessageTimingDisplay />
|
|
264
|
+
</ActionBarPrimitive.Root>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
</AuiIf>
|
|
268
|
+
</MessagePrimitive.Root>
|
|
269
|
+
);
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
const formatTime = (ms: number | undefined) => {
|
|
273
|
+
if (ms === undefined) return null;
|
|
274
|
+
if (ms < 1000) return `${Math.round(ms)}ms`;
|
|
275
|
+
return `${(ms / 1000).toFixed(1)}s`;
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
const formatMs = (ms: number | undefined) => {
|
|
279
|
+
if (ms === undefined) return "\u2014";
|
|
280
|
+
if (ms < 1000) return `${Math.round(ms)}ms`;
|
|
281
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
const MessageTimingDisplay: FC = () => {
|
|
285
|
+
const timing = useMessageTiming();
|
|
286
|
+
if (!timing?.totalStreamTime) return null;
|
|
287
|
+
|
|
288
|
+
const totalTimeText = formatTime(timing.totalStreamTime);
|
|
289
|
+
if (!totalTimeText) return null;
|
|
290
|
+
|
|
291
|
+
return (
|
|
292
|
+
<div className="group/timing relative">
|
|
293
|
+
<button
|
|
294
|
+
type="button"
|
|
295
|
+
className="ml-1 flex h-auto items-center justify-center rounded-md px-1.5 py-0.5 font-mono text-xs text-[#6b6b6b] tabular-nums transition-colors hover:bg-[#e5e5e5] hover:text-[#0d0d0d] dark:text-[#9a9a9a] dark:hover:bg-[#2a2a2a] dark:hover:text-white"
|
|
296
|
+
>
|
|
297
|
+
{totalTimeText}
|
|
298
|
+
</button>
|
|
299
|
+
<div className="pointer-events-none absolute top-1/2 left-full z-10 ml-2 -translate-y-1/2 scale-95 rounded-lg border border-[#e5e5e5] bg-white px-3 py-2 opacity-0 transition-all group-hover/timing:pointer-events-auto group-hover/timing:scale-100 group-hover/timing:opacity-100 before:absolute before:top-0 before:-left-2 before:h-full before:w-2 before:content-[''] dark:border-[#2a2a2a] dark:bg-[#1a1a1a]">
|
|
300
|
+
<div className="grid min-w-[140px] gap-1.5 text-xs">
|
|
301
|
+
{timing.firstTokenTime !== undefined && (
|
|
302
|
+
<div className="flex items-center justify-between gap-4">
|
|
303
|
+
<span className="text-[#6b6b6b] dark:text-[#9a9a9a]">
|
|
304
|
+
First token
|
|
305
|
+
</span>
|
|
306
|
+
<span className="font-mono text-[#0d0d0d] tabular-nums dark:text-white">
|
|
307
|
+
{formatMs(timing.firstTokenTime)}
|
|
308
|
+
</span>
|
|
309
|
+
</div>
|
|
310
|
+
)}
|
|
311
|
+
<div className="flex items-center justify-between gap-4">
|
|
312
|
+
<span className="text-[#6b6b6b] dark:text-[#9a9a9a]">Total</span>
|
|
313
|
+
<span className="font-mono text-[#0d0d0d] tabular-nums dark:text-white">
|
|
314
|
+
{formatMs(timing.totalStreamTime)}
|
|
315
|
+
</span>
|
|
316
|
+
</div>
|
|
317
|
+
{timing.tokensPerSecond !== undefined && (
|
|
318
|
+
<div className="flex items-center justify-between gap-4">
|
|
319
|
+
<span className="text-[#6b6b6b] dark:text-[#9a9a9a]">Speed</span>
|
|
320
|
+
<span className="font-mono text-[#0d0d0d] tabular-nums dark:text-white">
|
|
321
|
+
{timing.tokensPerSecond.toFixed(1)} tok/s
|
|
322
|
+
</span>
|
|
323
|
+
</div>
|
|
324
|
+
)}
|
|
325
|
+
{timing.totalChunks > 0 && (
|
|
326
|
+
<div className="flex items-center justify-between gap-4">
|
|
327
|
+
<span className="text-[#6b6b6b] dark:text-[#9a9a9a]">Chunks</span>
|
|
328
|
+
<span className="font-mono text-[#0d0d0d] tabular-nums dark:text-white">
|
|
329
|
+
{timing.totalChunks}
|
|
330
|
+
</span>
|
|
331
|
+
</div>
|
|
332
|
+
)}
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
</div>
|
|
336
|
+
);
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
const GrokAttachment: FC = () => {
|
|
340
|
+
const src = useAttachmentSrc();
|
|
341
|
+
|
|
342
|
+
return (
|
|
343
|
+
<AttachmentPrimitive.Root className="group/attachment relative">
|
|
344
|
+
<div className="flex h-12 items-center gap-2 overflow-hidden rounded-xl border border-[#e5e5e5] bg-[#f0f0f0] p-0.5 transition-colors hover:border-[#d0d0d0] dark:border-[#2a2a2a] dark:bg-[#252525] dark:hover:border-[#3a3a3a]">
|
|
345
|
+
<AuiIf condition={(s) => s.attachment.type === "image"}>
|
|
346
|
+
{src ? (
|
|
347
|
+
<img
|
|
348
|
+
className="h-full w-12 rounded-[9px] object-cover"
|
|
349
|
+
alt="Attachment"
|
|
350
|
+
src={src}
|
|
351
|
+
/>
|
|
352
|
+
) : (
|
|
353
|
+
<div className="flex h-full w-12 items-center justify-center rounded-[9px] bg-[#e5e5e5] text-[#6b6b6b] dark:bg-[#3a3a3a] dark:text-[#9a9a9a]">
|
|
354
|
+
<AttachmentPrimitive.unstable_Thumb className="text-xs" />
|
|
355
|
+
</div>
|
|
356
|
+
)}
|
|
357
|
+
</AuiIf>
|
|
358
|
+
<AuiIf condition={(s) => s.attachment.type !== "image"}>
|
|
359
|
+
<div className="flex h-full w-12 items-center justify-center rounded-[9px] bg-[#e5e5e5] text-[#6b6b6b] dark:bg-[#3a3a3a] dark:text-[#9a9a9a]">
|
|
360
|
+
<AttachmentPrimitive.unstable_Thumb className="text-xs" />
|
|
361
|
+
</div>
|
|
362
|
+
</AuiIf>
|
|
363
|
+
</div>
|
|
364
|
+
<AttachmentPrimitive.Remove className="absolute -top-1.5 -right-1.5 flex h-6 w-6 scale-50 items-center justify-center rounded-full border border-[#e5e5e5] bg-white text-[#6b6b6b] opacity-0 transition-all group-hover/attachment:scale-100 group-hover/attachment:opacity-100 hover:bg-[#f5f5f5] hover:text-[#0d0d0d] dark:border-[#3a3a3a] dark:bg-[#1a1a1a] dark:text-[#9a9a9a] dark:hover:bg-[#252525] dark:hover:text-white">
|
|
365
|
+
<XIcon width={14} height={14} />
|
|
366
|
+
</AttachmentPrimitive.Remove>
|
|
367
|
+
</AttachmentPrimitive.Root>
|
|
368
|
+
);
|
|
369
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skin registry + host contract + ThreadSkinView dispatch (WS4). The 12
|
|
3
|
+
* skins live here; hosts mount them via ThreadSkinView and provide
|
|
4
|
+
* first-party wiring through the `digichat` prop (see DigichatSkinOptions).
|
|
5
|
+
*/
|
|
6
|
+
export { ThreadSkinView, type ThreadSkinViewProps } from "./thread-skin-view";
|
|
7
|
+
// NOTE: DigichatSkin (the component value) is intentionally NOT re-exported
|
|
8
|
+
// here — its stylesheet side-effect imports would force the chunk into every
|
|
9
|
+
// barrel importer's graph and defeat the per-skin lazy split (WS4 Step 5).
|
|
10
|
+
// Import it via the deep export `@digithings-ai/ui/chat/skins/digichat` instead.
|
|
11
|
+
export {
|
|
12
|
+
type DigichatSkinCopy,
|
|
13
|
+
type DigichatSkinOptions,
|
|
14
|
+
type DigichatSkinSlash,
|
|
15
|
+
type SkinSlashAction,
|
|
16
|
+
type SkinSlashAdapterLike,
|
|
17
|
+
type SkinSlashCommand,
|
|
18
|
+
type SkinSlashExtraDef,
|
|
19
|
+
} from "./digichat";
|
|
20
|
+
export {
|
|
21
|
+
CLONE_SKINS,
|
|
22
|
+
DEFAULT_THREAD_SKIN,
|
|
23
|
+
FIRST_PARTY_DEFAULT_SKIN_HOSTS,
|
|
24
|
+
FIRST_PARTY_DEFAULT_SKIN_SLUGS,
|
|
25
|
+
FRAMED_CHROME_MODES,
|
|
26
|
+
LAYOUT_SKINS,
|
|
27
|
+
THREAD_SKINS,
|
|
28
|
+
defaultThreadSkinForTenant,
|
|
29
|
+
isCloneSkin,
|
|
30
|
+
isFramedPresentation,
|
|
31
|
+
isThreadSkin,
|
|
32
|
+
parseThreadSkin,
|
|
33
|
+
|
|
34
|
+
skinOwnsPageChrome,
|
|
35
|
+
skinShowsSiteRails,
|
|
36
|
+
SITE_RAILS_SKINS,
|
|
37
|
+
threadSkinChoices,
|
|
38
|
+
type CloneSkin,
|
|
39
|
+
type FramedChromeMode,
|
|
40
|
+
type LayoutSkin,
|
|
41
|
+
type ThreadSkin,
|
|
42
|
+
} from "./thread-skins";
|
|
43
|
+
export {
|
|
44
|
+
DIGICHAT_SKIN_HOST_CONTRACT,
|
|
45
|
+
type SkinHostContract,
|
|
46
|
+
} from "./thread-skin-host-contract";
|