@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,287 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Base skin attachment: the stock twin re-expressed on theme tokens only
|
|
5
|
+
* (foreground, background, muted, border, destructive, ring), so the active
|
|
6
|
+
* tenant or brand theme styles it. Kept in step with `stock/attachment.aui.tsx`; the
|
|
7
|
+
* stock copy keeps the digichat square look.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
type PropsWithChildren,
|
|
12
|
+
useState,
|
|
13
|
+
type FC,
|
|
14
|
+
isValidElement,
|
|
15
|
+
} from "react";
|
|
16
|
+
import {
|
|
17
|
+
XIcon,
|
|
18
|
+
PlusIcon,
|
|
19
|
+
FileText,
|
|
20
|
+
AlertCircleIcon,
|
|
21
|
+
} from "lucide-react";
|
|
22
|
+
import {
|
|
23
|
+
AttachmentPrimitive,
|
|
24
|
+
ComposerPrimitive,
|
|
25
|
+
MessagePrimitive,
|
|
26
|
+
useAuiState,
|
|
27
|
+
useAui,
|
|
28
|
+
} from "@assistant-ui/react";
|
|
29
|
+
import {
|
|
30
|
+
Tooltip,
|
|
31
|
+
TooltipContent,
|
|
32
|
+
TooltipProvider,
|
|
33
|
+
TooltipTrigger,
|
|
34
|
+
} from "./ui/tooltip";
|
|
35
|
+
import {
|
|
36
|
+
Dialog,
|
|
37
|
+
DialogTitle,
|
|
38
|
+
DialogContent,
|
|
39
|
+
DialogTrigger,
|
|
40
|
+
} from "./ui/dialog";
|
|
41
|
+
import { Avatar, AvatarImage, AvatarFallback } from "./ui/avatar";
|
|
42
|
+
import { TooltipIconButton } from "./tooltip-icon-button";
|
|
43
|
+
import { useAttachmentSrc } from "../../stock/use-attachment-src";
|
|
44
|
+
import { useSkinChrome } from "../../stock/skin-chrome";
|
|
45
|
+
import { cn } from "../../../../lib/utils";
|
|
46
|
+
import { DotMatrix } from "../../DotMatrix";
|
|
47
|
+
|
|
48
|
+
// Protocol literal mirrored from the app's embed-page-context-messages
|
|
49
|
+
// (`PAGE_CONTEXT_ATTACHMENT_NAME = "page-context.html"`). The sending side
|
|
50
|
+
// names the page-context attachment; silent skins suppress its chip by this
|
|
51
|
+
// name. Kept as a literal so the package never imports app code (WS4).
|
|
52
|
+
const PAGE_CONTEXT_ATTACHMENT_NAME = "page-context.html";
|
|
53
|
+
|
|
54
|
+
type AttachmentPreviewProps = {
|
|
55
|
+
src: string;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const AttachmentPreview: FC<AttachmentPreviewProps> = ({ src }) => {
|
|
59
|
+
const [isLoaded, setIsLoaded] = useState(false);
|
|
60
|
+
return (
|
|
61
|
+
<img
|
|
62
|
+
src={src}
|
|
63
|
+
alt="Attachment preview"
|
|
64
|
+
className={cn(
|
|
65
|
+
"block h-auto max-h-[80vh] w-auto max-w-full rounded-md object-contain transition-opacity duration-(--dur) motion-reduce:transition-none",
|
|
66
|
+
isLoaded
|
|
67
|
+
? "aui-attachment-preview-image-loaded opacity-100"
|
|
68
|
+
: "aui-attachment-preview-image-loading opacity-0",
|
|
69
|
+
)}
|
|
70
|
+
onLoad={() => setIsLoaded(true)}
|
|
71
|
+
/>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const AttachmentPreviewDialog: FC<PropsWithChildren> = ({ children }) => {
|
|
76
|
+
const src = useAttachmentSrc();
|
|
77
|
+
|
|
78
|
+
if (!src) return children;
|
|
79
|
+
|
|
80
|
+
return (
|
|
81
|
+
<Dialog>
|
|
82
|
+
<DialogTrigger
|
|
83
|
+
nativeButton={false}
|
|
84
|
+
className="aui-attachment-preview-trigger cursor-zoom-in"
|
|
85
|
+
render={
|
|
86
|
+
isValidElement(children) ? (
|
|
87
|
+
children
|
|
88
|
+
) : (
|
|
89
|
+
<button type="button">{children}</button>
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
/>
|
|
93
|
+
<DialogContent className="aui-attachment-preview-dialog-content [&>button]:bg-foreground/60 [&>button]:hover:bg-foreground/80 [&_svg]:text-background p-2 sm:max-w-3xl [&>button]:rounded-full [&>button]:p-1 [&>button]:opacity-100 [&>button]:ring-0!">
|
|
94
|
+
<DialogTitle className="aui-sr-only sr-only">
|
|
95
|
+
Image Attachment Preview
|
|
96
|
+
</DialogTitle>
|
|
97
|
+
<div className="aui-attachment-preview bg-background relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden rounded-md">
|
|
98
|
+
<AttachmentPreview src={src} />
|
|
99
|
+
</div>
|
|
100
|
+
</DialogContent>
|
|
101
|
+
</Dialog>
|
|
102
|
+
);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
const AttachmentThumb: FC = () => {
|
|
106
|
+
const src = useAttachmentSrc();
|
|
107
|
+
|
|
108
|
+
return (
|
|
109
|
+
<Avatar className="aui-attachment-tile-avatar h-full w-full rounded-lg after:hidden">
|
|
110
|
+
<AvatarImage
|
|
111
|
+
src={src}
|
|
112
|
+
alt="Attachment preview"
|
|
113
|
+
className="aui-attachment-tile-image rounded-lg object-cover"
|
|
114
|
+
/>
|
|
115
|
+
<AvatarFallback>
|
|
116
|
+
<FileText className="aui-attachment-tile-fallback-icon text-muted-foreground size-6 stroke-[1.5]" />
|
|
117
|
+
</AvatarFallback>
|
|
118
|
+
</Avatar>
|
|
119
|
+
);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const AttachmentUI: FC = () => {
|
|
123
|
+
const aui = useAui();
|
|
124
|
+
const isComposer = aui.attachment.source !== "message";
|
|
125
|
+
|
|
126
|
+
const { pageContext } = useSkinChrome();
|
|
127
|
+
const attachmentName = useAuiState((s) => s.attachment.name);
|
|
128
|
+
|
|
129
|
+
const isImage = useAuiState((s) => s.attachment.type === "image");
|
|
130
|
+
const typeLabel = useAuiState((s) => {
|
|
131
|
+
const type = s.attachment.type;
|
|
132
|
+
switch (type) {
|
|
133
|
+
case "image":
|
|
134
|
+
return "Image";
|
|
135
|
+
case "document":
|
|
136
|
+
return "Document";
|
|
137
|
+
case "file":
|
|
138
|
+
return "File";
|
|
139
|
+
default:
|
|
140
|
+
return type;
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
const uploadState = useAuiState((s) =>
|
|
145
|
+
s.attachment.status.type === "running"
|
|
146
|
+
? "uploading"
|
|
147
|
+
: s.attachment.status.type === "incomplete" &&
|
|
148
|
+
s.attachment.status.reason === "error"
|
|
149
|
+
? "error"
|
|
150
|
+
: undefined,
|
|
151
|
+
);
|
|
152
|
+
const isUploading = uploadState === "uploading";
|
|
153
|
+
const isError = uploadState === "error";
|
|
154
|
+
|
|
155
|
+
const errorMessage = useAuiState((s) =>
|
|
156
|
+
s.attachment.status.type === "incomplete" &&
|
|
157
|
+
s.attachment.status.reason === "error"
|
|
158
|
+
? (s.attachment.status.message ?? "Upload failed")
|
|
159
|
+
: undefined,
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
// Hooks above — safe to bail. The attachment stays on the runtime so its
|
|
163
|
+
// file part still reaches the model; only the chip is suppressed.
|
|
164
|
+
if (pageContext === "silent" && attachmentName === PAGE_CONTEXT_ATTACHMENT_NAME) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return (
|
|
169
|
+
<TooltipProvider>
|
|
170
|
+
<Tooltip>
|
|
171
|
+
<AttachmentPrimitive.Root
|
|
172
|
+
className={cn(
|
|
173
|
+
"aui-attachment-root relative",
|
|
174
|
+
isComposer &&
|
|
175
|
+
"animate-in fade-in-0 zoom-in-95 duration-(--duration-hover) motion-reduce:animate-none",
|
|
176
|
+
isImage &&
|
|
177
|
+
!isComposer &&
|
|
178
|
+
"aui-attachment-root-message only:*:first:size-24",
|
|
179
|
+
)}
|
|
180
|
+
>
|
|
181
|
+
<AttachmentPreviewDialog>
|
|
182
|
+
<TooltipTrigger
|
|
183
|
+
render={
|
|
184
|
+
<div
|
|
185
|
+
className={cn(
|
|
186
|
+
"aui-attachment-tile bg-muted hover:after:bg-foreground/10 focus-visible:ring-ring/50 relative size-14 cursor-pointer overflow-hidden rounded-lg transition-transform outline-none after:pointer-events-none after:absolute after:inset-0 after:rounded-[inherit] after:ring-1 after:ring-black/10 after:transition-colors after:ring-inset focus-visible:ring-1 active:scale-[0.96] motion-reduce:transition-none dark:after:ring-white/10",
|
|
187
|
+
isError &&
|
|
188
|
+
"after:ring-destructive/60 dark:after:ring-destructive/60",
|
|
189
|
+
)}
|
|
190
|
+
role="button"
|
|
191
|
+
tabIndex={0}
|
|
192
|
+
aria-label={`${typeLabel} attachment${
|
|
193
|
+
isError
|
|
194
|
+
? ", upload failed"
|
|
195
|
+
: isUploading
|
|
196
|
+
? ", uploading"
|
|
197
|
+
: ""
|
|
198
|
+
}`}
|
|
199
|
+
/>
|
|
200
|
+
}
|
|
201
|
+
>
|
|
202
|
+
<AttachmentThumb />
|
|
203
|
+
{isUploading && (
|
|
204
|
+
<div
|
|
205
|
+
aria-hidden="true"
|
|
206
|
+
className="aui-attachment-tile-uploading bg-background/60 animate-in fade-in-0 absolute inset-0 flex items-center justify-center backdrop-blur-[2px] motion-reduce:animate-none"
|
|
207
|
+
>
|
|
208
|
+
<DotMatrix state="loading" decorative className="text-muted-foreground size-4" />
|
|
209
|
+
</div>
|
|
210
|
+
)}
|
|
211
|
+
{isError && (
|
|
212
|
+
<div
|
|
213
|
+
aria-hidden="true"
|
|
214
|
+
className="aui-attachment-tile-error bg-background/70 animate-in fade-in-0 absolute inset-0 flex items-center justify-center backdrop-blur-[2px] motion-reduce:animate-none"
|
|
215
|
+
>
|
|
216
|
+
<AlertCircleIcon className="text-destructive size-4" />
|
|
217
|
+
</div>
|
|
218
|
+
)}
|
|
219
|
+
</TooltipTrigger>
|
|
220
|
+
</AttachmentPreviewDialog>
|
|
221
|
+
{isComposer && <AttachmentRemove />}
|
|
222
|
+
</AttachmentPrimitive.Root>
|
|
223
|
+
<TooltipContent side="top">
|
|
224
|
+
<AttachmentPrimitive.Name />
|
|
225
|
+
{errorMessage && (
|
|
226
|
+
<p className="aui-attachment-error-message">{errorMessage}</p>
|
|
227
|
+
)}
|
|
228
|
+
</TooltipContent>
|
|
229
|
+
</Tooltip>
|
|
230
|
+
</TooltipProvider>
|
|
231
|
+
);
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
const AttachmentRemove: FC = () => {
|
|
235
|
+
return (
|
|
236
|
+
<AttachmentPrimitive.Remove
|
|
237
|
+
render={
|
|
238
|
+
<TooltipIconButton
|
|
239
|
+
tooltip="Remove file"
|
|
240
|
+
className="aui-attachment-tile-remove absolute end-1 top-1 size-5 rounded-full bg-foreground/60! text-background after:absolute after:-inset-1.5 hover:bg-foreground/80! hover:text-background! active:scale-[0.96] motion-reduce:transition-none"
|
|
241
|
+
side="top"
|
|
242
|
+
/>
|
|
243
|
+
}
|
|
244
|
+
>
|
|
245
|
+
<XIcon className="aui-attachment-remove-icon size-3 stroke-[2.5]" />
|
|
246
|
+
</AttachmentPrimitive.Remove>
|
|
247
|
+
);
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
export const UserMessageAttachments: FC = () => {
|
|
251
|
+
return (
|
|
252
|
+
<div className="aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2">
|
|
253
|
+
<MessagePrimitive.Attachments>
|
|
254
|
+
{() => <AttachmentUI />}
|
|
255
|
+
</MessagePrimitive.Attachments>
|
|
256
|
+
</div>
|
|
257
|
+
);
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
export const ComposerAttachments: FC = () => {
|
|
261
|
+
return (
|
|
262
|
+
<div className="aui-composer-attachments flex w-full flex-row items-center gap-2 overflow-x-auto empty:hidden">
|
|
263
|
+
<ComposerPrimitive.Attachments>
|
|
264
|
+
{() => <AttachmentUI />}
|
|
265
|
+
</ComposerPrimitive.Attachments>
|
|
266
|
+
</div>
|
|
267
|
+
);
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
export const ComposerAddAttachment: FC = () => {
|
|
271
|
+
return (
|
|
272
|
+
<ComposerPrimitive.AddAttachment
|
|
273
|
+
render={
|
|
274
|
+
<TooltipIconButton
|
|
275
|
+
tooltip="Add Attachment"
|
|
276
|
+
side="bottom"
|
|
277
|
+
variant="ghost"
|
|
278
|
+
size="icon"
|
|
279
|
+
className="aui-composer-add-attachment text-muted-foreground hover:text-foreground hover:bg-muted-foreground/15 dark:border-border dark:hover:bg-muted-foreground/30 size-7 rounded-full active:scale-[0.96] motion-reduce:transition-none"
|
|
280
|
+
aria-label="Add Attachment"
|
|
281
|
+
/>
|
|
282
|
+
}
|
|
283
|
+
>
|
|
284
|
+
<PlusIcon className="aui-attachment-add-icon size-4" />
|
|
285
|
+
</ComposerPrimitive.AddAttachment>
|
|
286
|
+
);
|
|
287
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# assistant-ui default trace parts (base skin)
|
|
2
|
+
|
|
3
|
+
Copies of assistant-ui's own Reasoning, ToolGroup and ToolFallback components
|
|
4
|
+
at the pinned `@assistant-ui/react@0.15.18` tag
|
|
5
|
+
(`assistant-ui/assistant-ui@d511ff49`, `packages/ui/src/components/react/assistant-ui/elements/`,
|
|
6
|
+
the source of the `https://r.assistant-ui.com/base/*` registry items), so the
|
|
7
|
+
`base` / `base-assistant-ui` skins render reasoning, tool calls and tool
|
|
8
|
+
groups exactly as assistant-ui ships them (no digichat trace styling).
|
|
9
|
+
|
|
10
|
+
| file | upstream file at the tag |
|
|
11
|
+
|---|---|
|
|
12
|
+
| `reasoning.tsx`, `reasoning.aui.tsx` | `elements/reasoning.tsx`, `elements/reasoning.aui.tsx` |
|
|
13
|
+
| `tool-group.aui.tsx` | `elements/tool-group.aui.tsx` |
|
|
14
|
+
| `tool-fallback.aui.tsx` | `elements/tool-fallback.aui.tsx` (name, arguments, result, approval controls, duration) |
|
|
15
|
+
| `collapsible.tsx` | shadcn base-nova `ui/collapsible.tsx` (base-ui) |
|
|
16
|
+
| `collapsible-root.tsx` | `elements/collapsible-root.tsx` at `assistant-ui/assistant-ui@1f41f916` (the `@assistant-ui/elements-run-activity` registry item, newer than the tag above; it uses only primitives the pinned package already has) |
|
|
17
|
+
| `surfaces.ts` | the `collapsePanel` class from `elements/surfaces.tsx` at the same commit |
|
|
18
|
+
|
|
19
|
+
Import paths are rewritten. Local changes:
|
|
20
|
+
|
|
21
|
+
- `tool-fallback.aui.tsx`: the argument and result blocks cap at `max-h-72`
|
|
22
|
+
and scroll inside the card, so a long payload does not stretch the thread;
|
|
23
|
+
`/view verbose` opens the cards (initial open state from
|
|
24
|
+
`useViewDisclosure`); the row's words and status come from the shared trace
|
|
25
|
+
rules (`../../../trace-grouping/tool-row.ts`), and a running call's card
|
|
26
|
+
shows its arguments, folding again once the call completes;
|
|
27
|
+
- `tool-group.aui.tsx`: `streamingOpen` (open while the group streams, folded
|
|
28
|
+
on completion), as in the digichat skin's tool group.
|
|
29
|
+
|
|
30
|
+
The trace itself (`../elements/assistant-trace.aui.tsx`) is shared: the base
|
|
31
|
+
Thread and the stock Thread (`../../../stock/thread.aui.tsx`) both render it.
|
|
32
|
+
|
|
33
|
+
The base thread (`../thread.tsx`) also uses assistant-ui's own working
|
|
34
|
+
indicator (the pulsing dot) and MessageError markup from the upstream
|
|
35
|
+
`elements/thread.aui.tsx`. The `digichat` skin keeps `../../stock/*`.
|
|
36
|
+
|
|
37
|
+
The trace follows the digichat skin's grouping exactly
|
|
38
|
+
(`../../../trace-grouping`, shared with `gallery-thread/thread.aui.tsx`):
|
|
39
|
+
`MessagePrimitive.GroupedParts` puts consecutive reasoning and tool calls
|
|
40
|
+
under one work chain (`../elements/work-chain.tsx`), whose header is open
|
|
41
|
+
while the agent works and folds shortly after the answer starts (folded it
|
|
42
|
+
reads as the status line: "Working — web_search", "Used 3 tools"). Inside
|
|
43
|
+
it, adjacent reasoning is one reasoning box that opens and streams while it
|
|
44
|
+
runs, and adjacent tool calls are one `N tool calls` group that opens while
|
|
45
|
+
the tools run. Only the look differs from the digichat skin.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Collapsible } from "@base-ui/react/collapsible";
|
|
4
|
+
import { forwardRef } from "react";
|
|
5
|
+
|
|
6
|
+
export const CollapsibleRoot = forwardRef<
|
|
7
|
+
React.ComponentRef<typeof Collapsible.Root>,
|
|
8
|
+
React.ComponentPropsWithoutRef<typeof Collapsible.Root>
|
|
9
|
+
>(function CollapsibleRoot(props, ref) {
|
|
10
|
+
return <Collapsible.Root ref={ref} data-slot="collapsible" {...props} />;
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export function CollapsibleTrigger({ ...props }: Collapsible.Trigger.Props) {
|
|
14
|
+
return <Collapsible.Trigger data-slot="collapsible-trigger" {...props} />;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function CollapsibleContent({ ...props }: Collapsible.Panel.Props) {
|
|
18
|
+
return <Collapsible.Panel data-slot="collapsible-content" {...props} />;
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Collapsible as CollapsiblePrimitive } from "@base-ui/react/collapsible";
|
|
4
|
+
|
|
5
|
+
function Collapsible({ ...props }: CollapsiblePrimitive.Root.Props) {
|
|
6
|
+
return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function CollapsibleTrigger({ ...props }: CollapsiblePrimitive.Trigger.Props) {
|
|
10
|
+
return (
|
|
11
|
+
<CollapsiblePrimitive.Trigger data-slot="collapsible-trigger" {...props} />
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function CollapsibleContent({ ...props }: CollapsiblePrimitive.Panel.Props) {
|
|
16
|
+
return (
|
|
17
|
+
<CollapsiblePrimitive.Panel data-slot="collapsible-content" {...props} />
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { Collapsible, CollapsibleTrigger, CollapsibleContent };
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { memo, useCallback, useRef } from "react";
|
|
4
|
+
import {
|
|
5
|
+
useScrollLock,
|
|
6
|
+
useAuiState,
|
|
7
|
+
type ReasoningMessagePartComponent,
|
|
8
|
+
type ReasoningGroupComponent,
|
|
9
|
+
} from "@assistant-ui/react";
|
|
10
|
+
import { MarkdownText } from "../markdown-text";
|
|
11
|
+
import {
|
|
12
|
+
ANIMATION_DURATION,
|
|
13
|
+
ReasoningRoot as ReasoningRootBase,
|
|
14
|
+
ReasoningTrigger,
|
|
15
|
+
ReasoningContent,
|
|
16
|
+
ReasoningText,
|
|
17
|
+
ReasoningFade,
|
|
18
|
+
reasoningVariants,
|
|
19
|
+
type ReasoningRootProps,
|
|
20
|
+
} from "./reasoning";
|
|
21
|
+
|
|
22
|
+
export type { ReasoningRootProps } from "./reasoning";
|
|
23
|
+
|
|
24
|
+
/** `ReasoningRoot` with the thread viewport scroll locked during disclosure animations. */
|
|
25
|
+
function ReasoningRoot({
|
|
26
|
+
ref,
|
|
27
|
+
onAnimationStart,
|
|
28
|
+
...props
|
|
29
|
+
}: ReasoningRootProps) {
|
|
30
|
+
const collapsibleRef = useRef<HTMLDivElement | null>(null);
|
|
31
|
+
const lockScroll = useScrollLock(collapsibleRef, ANIMATION_DURATION);
|
|
32
|
+
|
|
33
|
+
const handleAnimationStart = useCallback(() => {
|
|
34
|
+
lockScroll();
|
|
35
|
+
onAnimationStart?.();
|
|
36
|
+
}, [lockScroll, onAnimationStart]);
|
|
37
|
+
|
|
38
|
+
const composedRef = useCallback(
|
|
39
|
+
(node: HTMLDivElement | null) => {
|
|
40
|
+
collapsibleRef.current = node;
|
|
41
|
+
if (typeof ref === "function") {
|
|
42
|
+
ref(node);
|
|
43
|
+
} else if (ref) {
|
|
44
|
+
ref.current = node;
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
[ref],
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<ReasoningRootBase
|
|
52
|
+
ref={composedRef}
|
|
53
|
+
onAnimationStart={handleAnimationStart}
|
|
54
|
+
{...props}
|
|
55
|
+
/>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const ReasoningImpl: ReasoningMessagePartComponent = () => <MarkdownText />;
|
|
60
|
+
|
|
61
|
+
const ReasoningGroupImpl: ReasoningGroupComponent = ({
|
|
62
|
+
children,
|
|
63
|
+
startIndex,
|
|
64
|
+
endIndex,
|
|
65
|
+
}) => {
|
|
66
|
+
const isReasoningStreaming = useAuiState((s) => {
|
|
67
|
+
if (s.message.status?.type !== "running") return false;
|
|
68
|
+
for (let index = startIndex; index <= endIndex; index++) {
|
|
69
|
+
if (s.message.parts[index]?.status.type === "running") return true;
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
<ReasoningRoot streaming={isReasoningStreaming}>
|
|
76
|
+
<ReasoningTrigger active={isReasoningStreaming} />
|
|
77
|
+
<ReasoningContent aria-busy={isReasoningStreaming}>
|
|
78
|
+
<ReasoningText>{children}</ReasoningText>
|
|
79
|
+
</ReasoningContent>
|
|
80
|
+
</ReasoningRoot>
|
|
81
|
+
);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const Reasoning = memo(
|
|
85
|
+
ReasoningImpl,
|
|
86
|
+
) as unknown as ReasoningMessagePartComponent & {
|
|
87
|
+
Root: typeof ReasoningRoot;
|
|
88
|
+
Trigger: typeof ReasoningTrigger;
|
|
89
|
+
Content: typeof ReasoningContent;
|
|
90
|
+
Text: typeof ReasoningText;
|
|
91
|
+
Fade: typeof ReasoningFade;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
Reasoning.displayName = "Reasoning";
|
|
95
|
+
Reasoning.Root = ReasoningRoot;
|
|
96
|
+
Reasoning.Trigger = ReasoningTrigger;
|
|
97
|
+
Reasoning.Content = ReasoningContent;
|
|
98
|
+
Reasoning.Text = ReasoningText;
|
|
99
|
+
Reasoning.Fade = ReasoningFade;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @deprecated This wrapper targets the legacy `components.ReasoningGroup`
|
|
103
|
+
* prop on `<MessagePrimitive.Parts>`. Use `<MessagePrimitive.GroupedParts>`
|
|
104
|
+
* with a `groupBy` returning `"group-reasoning"` and compose `ReasoningRoot`
|
|
105
|
+
* / `ReasoningTrigger` / `ReasoningContent` / `ReasoningText` directly.
|
|
106
|
+
* See `thread.aui.tsx` for an example.
|
|
107
|
+
*/
|
|
108
|
+
const ReasoningGroup = memo(ReasoningGroupImpl);
|
|
109
|
+
ReasoningGroup.displayName = "ReasoningGroup";
|
|
110
|
+
|
|
111
|
+
export {
|
|
112
|
+
Reasoning,
|
|
113
|
+
ReasoningGroup,
|
|
114
|
+
ReasoningRoot,
|
|
115
|
+
ReasoningTrigger,
|
|
116
|
+
ReasoningContent,
|
|
117
|
+
ReasoningText,
|
|
118
|
+
ReasoningFade,
|
|
119
|
+
reasoningVariants,
|
|
120
|
+
};
|