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