@decantr/content 3.8.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/LICENSE +21 -0
- package/README.md +58 -0
- package/archetypes/about-hybrid.json +104 -0
- package/archetypes/admin-analytics.json +63 -0
- package/archetypes/admin-moderation.json +87 -0
- package/archetypes/admin-overview.json +77 -0
- package/archetypes/agent-orchestrator.json +178 -0
- package/archetypes/agent-studio.json +154 -0
- package/archetypes/ai-chatbot.json +121 -0
- package/archetypes/ai-transparency.json +140 -0
- package/archetypes/alert-manager-pro.json +154 -0
- package/archetypes/api-console.json +130 -0
- package/archetypes/api-reference.json +95 -0
- package/archetypes/appointment-center.json +113 -0
- package/archetypes/asset-browser.json +90 -0
- package/archetypes/audit-center.json +103 -0
- package/archetypes/auth-flow-enterprise.json +140 -0
- package/archetypes/auth-flow.json +101 -0
- package/archetypes/auth-full.json +199 -0
- package/archetypes/auth-gateway.json +76 -0
- package/archetypes/billing-portal.json +75 -0
- package/archetypes/billing.json +74 -0
- package/archetypes/budget-planner.json +63 -0
- package/archetypes/budget-transparency.json +117 -0
- package/archetypes/buyer-dashboard.json +124 -0
- package/archetypes/changelog-center.json +96 -0
- package/archetypes/character-library.json +113 -0
- package/archetypes/citation-tools.json +98 -0
- package/archetypes/cloud-infrastructure.json +253 -0
- package/archetypes/cloud-marketing.json +111 -0
- package/archetypes/collaboration-hub.json +87 -0
- package/archetypes/community-feed.json +131 -0
- package/archetypes/config-editor.json +136 -0
- package/archetypes/contact.json +82 -0
- package/archetypes/content-author.json +121 -0
- package/archetypes/content-editor.json +82 -0
- package/archetypes/content-newsletter.json +111 -0
- package/archetypes/content-reader.json +135 -0
- package/archetypes/content-site.json +112 -0
- package/archetypes/contract-center.json +120 -0
- package/archetypes/cook-mode.json +57 -0
- package/archetypes/copilot-settings.json +87 -0
- package/archetypes/copilot-workspace.json +110 -0
- package/archetypes/creator-content.json +128 -0
- package/archetypes/creator-dashboard.json +105 -0
- package/archetypes/creator-earnings.json +100 -0
- package/archetypes/creator-subscribers.json +99 -0
- package/archetypes/creator-tiers.json +76 -0
- package/archetypes/crm-dashboard.json +199 -0
- package/archetypes/crm-email.json +88 -0
- package/archetypes/crm-intelligence.json +85 -0
- package/archetypes/crm-meetings.json +95 -0
- package/archetypes/customer-loyalty.json +75 -0
- package/archetypes/customer-management.json +76 -0
- package/archetypes/daily-operations.json +62 -0
- package/archetypes/dashboard-core.json +87 -0
- package/archetypes/data-repository.json +81 -0
- package/archetypes/deal-workspace.json +126 -0
- package/archetypes/doc-browser.json +111 -0
- package/archetypes/document-editor.json +147 -0
- package/archetypes/document-vault.json +119 -0
- package/archetypes/ecommerce-admin.json +138 -0
- package/archetypes/ecommerce-checkout.json +57 -0
- package/archetypes/ecommerce.json +138 -0
- package/archetypes/emissions-dashboard.json +136 -0
- package/archetypes/engagement-hub.json +157 -0
- package/archetypes/eval-suite.json +142 -0
- package/archetypes/event-discovery.json +130 -0
- package/archetypes/experiment-tracker.json +83 -0
- package/archetypes/fan-checkout.json +107 -0
- package/archetypes/fan-library.json +99 -0
- package/archetypes/fan-storefront.json +106 -0
- package/archetypes/financial-dashboard.json +127 -0
- package/archetypes/game-catalog.json +120 -0
- package/archetypes/gaming-community.json +196 -0
- package/archetypes/governance-center.json +82 -0
- package/archetypes/health-records.json +111 -0
- package/archetypes/instrument-booking.json +82 -0
- package/archetypes/inventory-supplies.json +72 -0
- package/archetypes/investment-tracker.json +82 -0
- package/archetypes/investor-portal.json +124 -0
- package/archetypes/job-monitor.json +109 -0
- package/archetypes/kitchen-display.json +58 -0
- package/archetypes/lab-notebook.json +83 -0
- package/archetypes/landing-hero.json +145 -0
- package/archetypes/landing-legal.json +101 -0
- package/archetypes/landing-resources.json +127 -0
- package/archetypes/launch-campaign.json +393 -0
- package/archetypes/legal.json +107 -0
- package/archetypes/listing-browser.json +160 -0
- package/archetypes/log-explorer-pro.json +106 -0
- package/archetypes/log-viewer.json +123 -0
- package/archetypes/maintenance-center.json +116 -0
- package/archetypes/marketing-ai-studio.json +117 -0
- package/archetypes/marketing-civic.json +116 -0
- package/archetypes/marketing-climate.json +94 -0
- package/archetypes/marketing-content.json +109 -0
- package/archetypes/marketing-copilot.json +100 -0
- package/archetypes/marketing-creator.json +132 -0
- package/archetypes/marketing-crm.json +96 -0
- package/archetypes/marketing-deal-room.json +100 -0
- package/archetypes/marketing-devtool.json +139 -0
- package/archetypes/marketing-docs.json +92 -0
- package/archetypes/marketing-ecommerce.json +69 -0
- package/archetypes/marketing-esports.json +89 -0
- package/archetypes/marketing-events.json +89 -0
- package/archetypes/marketing-finance.json +69 -0
- package/archetypes/marketing-fractional.json +74 -0
- package/archetypes/marketing-health.json +100 -0
- package/archetypes/marketing-landing.json +65 -0
- package/archetypes/marketing-legal.json +86 -0
- package/archetypes/marketing-marketplace.json +121 -0
- package/archetypes/marketing-observability.json +95 -0
- package/archetypes/marketing-pipeline.json +108 -0
- package/archetypes/marketing-platform.json +129 -0
- package/archetypes/marketing-producer.json +88 -0
- package/archetypes/marketing-productivity.json +139 -0
- package/archetypes/marketing-realestate.json +101 -0
- package/archetypes/marketing-recipe.json +69 -0
- package/archetypes/marketing-research.json +72 -0
- package/archetypes/marketing-restaurant.json +53 -0
- package/archetypes/marketing-saas-v2.json +75 -0
- package/archetypes/marketing-saas.json +119 -0
- package/archetypes/marketing-swipecircle.json +185 -0
- package/archetypes/marketing-video-studio.json +121 -0
- package/archetypes/marketplace-messaging.json +106 -0
- package/archetypes/matter-management.json +104 -0
- package/archetypes/meeting-archive.json +131 -0
- package/archetypes/menu-management.json +73 -0
- package/archetypes/metrics-monitor.json +164 -0
- package/archetypes/metrics-overview-dashboard.json +112 -0
- package/archetypes/music-workspace.json +104 -0
- package/archetypes/notifications.json +68 -0
- package/archetypes/offset-marketplace.json +134 -0
- package/archetypes/onboarding-wizard.json +203 -0
- package/archetypes/order-fulfillment.json +83 -0
- package/archetypes/order-management.json +71 -0
- package/archetypes/organizer-dashboard.json +146 -0
- package/archetypes/owner-dashboard.json +112 -0
- package/archetypes/ownership-dashboard.json +97 -0
- package/archetypes/patient-dashboard.json +142 -0
- package/archetypes/pipeline-builder.json +116 -0
- package/archetypes/pm-financials.json +126 -0
- package/archetypes/portfolio-about.json +85 -0
- package/archetypes/portfolio-blog.json +71 -0
- package/archetypes/portfolio-overview.json +76 -0
- package/archetypes/portfolio-showcase.json +71 -0
- package/archetypes/portfolio.json +122 -0
- package/archetypes/product-management.json +84 -0
- package/archetypes/project-library.json +111 -0
- package/archetypes/prompt-director.json +118 -0
- package/archetypes/prompt-library.json +135 -0
- package/archetypes/property-manager.json +158 -0
- package/archetypes/qa-workflow.json +116 -0
- package/archetypes/recipe-browser.json +83 -0
- package/archetypes/recipe-community.json +126 -0
- package/archetypes/recipe-creator.json +71 -0
- package/archetypes/recipe-social.json +95 -0
- package/archetypes/recipefork-ai-kitchen.json +95 -0
- package/archetypes/recipefork-auth.json +79 -0
- package/archetypes/recipefork-cookbooks.json +104 -0
- package/archetypes/recipefork-landing.json +101 -0
- package/archetypes/recipefork-profile.json +180 -0
- package/archetypes/recipefork-recipe-authoring.json +216 -0
- package/archetypes/recipefork-recipe-detail.json +139 -0
- package/archetypes/recipefork-social.json +103 -0
- package/archetypes/registry-browser.json +121 -0
- package/archetypes/render-monitor.json +114 -0
- package/archetypes/reporting-center.json +107 -0
- package/archetypes/research-workspace.json +127 -0
- package/archetypes/restaurant-floor.json +74 -0
- package/archetypes/review-system.json +84 -0
- package/archetypes/saas-analytics.json +69 -0
- package/archetypes/saas-billing-v2.json +77 -0
- package/archetypes/saas-dashboard.json +127 -0
- package/archetypes/saas-overview.json +77 -0
- package/archetypes/sample-inventory.json +80 -0
- package/archetypes/scrim-scheduler.json +103 -0
- package/archetypes/search-hub.json +87 -0
- package/archetypes/secondary-market.json +83 -0
- package/archetypes/seller-dashboard.json +169 -0
- package/archetypes/server-station.json +61 -0
- package/archetypes/service-requests.json +141 -0
- package/archetypes/session-rooms.json +92 -0
- package/archetypes/settings-full.json +164 -0
- package/archetypes/settings.json +67 -0
- package/archetypes/source-catalog.json +116 -0
- package/archetypes/spatial-workspace.json +115 -0
- package/archetypes/sponsor-dashboard.json +103 -0
- package/archetypes/storefront-browse.json +97 -0
- package/archetypes/supply-chain.json +112 -0
- package/archetypes/swipe-feed.json +469 -0
- package/archetypes/team-management.json +95 -0
- package/archetypes/team-operations.json +131 -0
- package/archetypes/team-workspace.json +71 -0
- package/archetypes/telehealth-room.json +78 -0
- package/archetypes/tenant-manager.json +129 -0
- package/archetypes/tenant-payments.json +105 -0
- package/archetypes/tenant-portal.json +135 -0
- package/archetypes/tenant-switcher-dashboard.json +154 -0
- package/archetypes/terminal-home.json +127 -0
- package/archetypes/ticket-checkout.json +84 -0
- package/archetypes/tool-registry.json +111 -0
- package/archetypes/trace-explorer.json +113 -0
- package/archetypes/trace-viewer.json +112 -0
- package/archetypes/track-library.json +90 -0
- package/archetypes/transaction-history.json +77 -0
- package/archetypes/transformation-editor.json +117 -0
- package/archetypes/usage-billing.json +146 -0
- package/archetypes/user-dashboard.json +155 -0
- package/archetypes/video-editor.json +158 -0
- package/archetypes/vod-review.json +97 -0
- package/archetypes/webhook-manager.json +108 -0
- package/archetypes/workspace-home.json +105 -0
- package/archetypes/workspace-settings.json +140 -0
- package/blueprints/agent-marketplace.json +222 -0
- package/blueprints/agent-studio.json +291 -0
- package/blueprints/ai-copilot-shell.json +163 -0
- package/blueprints/ai-native-crm.json +269 -0
- package/blueprints/ai-video-studio.json +93 -0
- package/blueprints/carbon-ai-portal.json +252 -0
- package/blueprints/civic-platform.json +91 -0
- package/blueprints/climate-dashboard.json +90 -0
- package/blueprints/cloud-platform.json +219 -0
- package/blueprints/content-site.json +110 -0
- package/blueprints/content-studio.json +120 -0
- package/blueprints/creator-monetization-platform.json +373 -0
- package/blueprints/data-pipeline-studio.json +263 -0
- package/blueprints/deal-room.json +88 -0
- package/blueprints/ecommerce-admin.json +253 -0
- package/blueprints/ecommerce.json +242 -0
- package/blueprints/esports-hq.json +116 -0
- package/blueprints/event-community-hub.json +251 -0
- package/blueprints/financial-dashboard.json +237 -0
- package/blueprints/fractional-ownership.json +89 -0
- package/blueprints/gaming-platform.json +171 -0
- package/blueprints/health-wellness-portal.json +252 -0
- package/blueprints/knowledge-base.json +176 -0
- package/blueprints/legal-research.json +90 -0
- package/blueprints/multi-tenant-platform.json +257 -0
- package/blueprints/observability-platform.json +275 -0
- package/blueprints/portfolio.json +164 -0
- package/blueprints/producer-studio.json +156 -0
- package/blueprints/product-landing.json +112 -0
- package/blueprints/property-management-portal.json +384 -0
- package/blueprints/realtime-collaboration-workspace.json +300 -0
- package/blueprints/recipe-community.json +259 -0
- package/blueprints/recipefork.json +194 -0
- package/blueprints/registry-platform.json +204 -0
- package/blueprints/research-lab.json +92 -0
- package/blueprints/restaurant-ops.json +104 -0
- package/blueprints/retro-launch-campaign.json +205 -0
- package/blueprints/saas-dashboard.json +246 -0
- package/blueprints/spatial-collaboration.json +172 -0
- package/blueprints/swipecircle.json +253 -0
- package/blueprints/terminal-dashboard.json +282 -0
- package/blueprints/two-sided-marketplace.json +293 -0
- package/dist/index.d.ts +178 -0
- package/dist/index.js +582 -0
- package/dist/index.js.map +1 -0
- package/package.json +75 -0
- package/patterns/account-settings.json +149 -0
- package/patterns/activity-feed.json +154 -0
- package/patterns/adaptive-density-panel.json +130 -0
- package/patterns/agent-handoff-zone.json +97 -0
- package/patterns/agent-swarm-canvas.json +136 -0
- package/patterns/agent-timeline.json +119 -0
- package/patterns/alert-rule-builder.json +127 -0
- package/patterns/ambient-status-ring.json +125 -0
- package/patterns/api-explorer.json +131 -0
- package/patterns/api-key-row.json +119 -0
- package/patterns/ar-annotation.json +137 -0
- package/patterns/arrangement-canvas.json +72 -0
- package/patterns/ascii-chart.json +138 -0
- package/patterns/audit-trail.json +123 -0
- package/patterns/auth-form.json +209 -0
- package/patterns/avatar-grid-tile.json +118 -0
- package/patterns/backer-progress-console.json +137 -0
- package/patterns/backer-wall-ticker.json +127 -0
- package/patterns/before-after.json +105 -0
- package/patterns/block-toolbar.json +129 -0
- package/patterns/blueprint-anatomy.json +112 -0
- package/patterns/blueprint-launch-hero.json +113 -0
- package/patterns/booking-calendar.json +125 -0
- package/patterns/bottom-tab-bar.json +117 -0
- package/patterns/breadcrumb-nav.json +111 -0
- package/patterns/budget-sankey.json +103 -0
- package/patterns/calendar-view.json +143 -0
- package/patterns/campaign-marquee-hero.json +167 -0
- package/patterns/cap-table.json +121 -0
- package/patterns/card-grid.json +202 -0
- package/patterns/case-brief-card.json +113 -0
- package/patterns/character-sheet.json +102 -0
- package/patterns/chart-grid.json +129 -0
- package/patterns/chat-header.json +105 -0
- package/patterns/chat-input.json +106 -0
- package/patterns/chat-message.json +122 -0
- package/patterns/chat-thread.json +120 -0
- package/patterns/checklist-card.json +96 -0
- package/patterns/checkout-flow.json +148 -0
- package/patterns/chip-multiselect.json +118 -0
- package/patterns/citation-graph.json +118 -0
- package/patterns/command-palette.json +115 -0
- package/patterns/command-rail.json +123 -0
- package/patterns/comment-thread.json +155 -0
- package/patterns/comparison-table.json +121 -0
- package/patterns/contact-form.json +135 -0
- package/patterns/content-card-grid.json +151 -0
- package/patterns/content-detail-hero.json +129 -0
- package/patterns/content-feed.json +141 -0
- package/patterns/content-uploader.json +137 -0
- package/patterns/continue-screen-cta.json +135 -0
- package/patterns/contract-diff.json +110 -0
- package/patterns/contract-explorer.json +119 -0
- package/patterns/conversation-list.json +109 -0
- package/patterns/creator-profile.json +127 -0
- package/patterns/cta-banner.json +103 -0
- package/patterns/cta-section.json +122 -0
- package/patterns/cta.json +124 -0
- package/patterns/data-source-connector.json +131 -0
- package/patterns/data-table.json +138 -0
- package/patterns/dataset-card.json +127 -0
- package/patterns/daw-transport-bar.json +66 -0
- package/patterns/deal-pipeline-board.json +124 -0
- package/patterns/deal-stage-gates.json +102 -0
- package/patterns/depth-layered-canvas.json +105 -0
- package/patterns/detail-header.json +140 -0
- package/patterns/diff-view.json +122 -0
- package/patterns/dividend-ledger.json +120 -0
- package/patterns/doc-editor.json +147 -0
- package/patterns/document-vault.json +129 -0
- package/patterns/drag-sort-list.json +119 -0
- package/patterns/earnings-dashboard.json +132 -0
- package/patterns/emissions-sankey.json +113 -0
- package/patterns/emoji-reaction-bar.json +115 -0
- package/patterns/esports-matchday-command.json +132 -0
- package/patterns/eval-dashboard.json +131 -0
- package/patterns/expense-tracker.json +130 -0
- package/patterns/featured-launchpad-list.json +114 -0
- package/patterns/features.json +118 -0
- package/patterns/file-browser.json +148 -0
- package/patterns/filter-bar.json +146 -0
- package/patterns/footer.json +115 -0
- package/patterns/form-sections.json +180 -0
- package/patterns/form.json +190 -0
- package/patterns/founder-comic-strip.json +126 -0
- package/patterns/generative-card-grid.json +130 -0
- package/patterns/gesture-control-overlay.json +134 -0
- package/patterns/governance-ballot.json +126 -0
- package/patterns/help-modal.json +155 -0
- package/patterns/hero-split.json +125 -0
- package/patterns/hero.json +227 -0
- package/patterns/holographic-control-bar.json +114 -0
- package/patterns/hotkey-bar.json +97 -0
- package/patterns/how-it-works.json +118 -0
- package/patterns/identity-summary.json +115 -0
- package/patterns/instrument-schedule.json +131 -0
- package/patterns/intake-form-wizard.json +134 -0
- package/patterns/intent-radar.json +115 -0
- package/patterns/json-viewer.json +129 -0
- package/patterns/kanban-board.json +133 -0
- package/patterns/kds-ticket-rail.json +133 -0
- package/patterns/kpi-grid.json +123 -0
- package/patterns/launch-update-log.json +129 -0
- package/patterns/launchpad-flow.json +107 -0
- package/patterns/leaderboard.json +143 -0
- package/patterns/lease-manager.json +129 -0
- package/patterns/legal-prose.json +120 -0
- package/patterns/live-room-stage.json +63 -0
- package/patterns/log-stream.json +150 -0
- package/patterns/logo-strip.json +93 -0
- package/patterns/maintenance-board.json +127 -0
- package/patterns/maintenance-ticket.json +156 -0
- package/patterns/map-view.json +140 -0
- package/patterns/match-celebration.json +133 -0
- package/patterns/matter-card.json +113 -0
- package/patterns/mention-popup.json +85 -0
- package/patterns/metric-gauge.json +141 -0
- package/patterns/mixer-console.json +69 -0
- package/patterns/mobile-profile-hero.json +138 -0
- package/patterns/moderation-queue-item.json +129 -0
- package/patterns/morphing-topology.json +113 -0
- package/patterns/namespace-badge.json +93 -0
- package/patterns/nav-header.json +110 -0
- package/patterns/neural-feedback-loop.json +124 -0
- package/patterns/notebook-entry.json +129 -0
- package/patterns/notification-center.json +136 -0
- package/patterns/offset-cart.json +109 -0
- package/patterns/onboarding-wizard.json +130 -0
- package/patterns/org-governance-panel.json +101 -0
- package/patterns/page-tree.json +143 -0
- package/patterns/payment-history.json +130 -0
- package/patterns/payout-settings.json +130 -0
- package/patterns/permission-matrix.json +129 -0
- package/patterns/petition-card.json +106 -0
- package/patterns/pipeline-cards.json +99 -0
- package/patterns/player-form-tracker.json +111 -0
- package/patterns/pledge-checkout-panel.json +145 -0
- package/patterns/pnl-dashboard.json +116 -0
- package/patterns/post-list.json +147 -0
- package/patterns/presence-avatars.json +129 -0
- package/patterns/press-kit-shelf.json +132 -0
- package/patterns/pricing-usage.json +118 -0
- package/patterns/pricing.json +137 -0
- package/patterns/producer-split-workbench.json +57 -0
- package/patterns/product-box-spec-panel.json +126 -0
- package/patterns/product-card.json +120 -0
- package/patterns/product-grid.json +140 -0
- package/patterns/progress-bar.json +124 -0
- package/patterns/prompt-playground.json +129 -0
- package/patterns/property-card.json +112 -0
- package/patterns/property-detail.json +124 -0
- package/patterns/property-grid.json +137 -0
- package/patterns/prose-section.json +102 -0
- package/patterns/protocol-step.json +128 -0
- package/patterns/prototype-demo-bezel.json +137 -0
- package/patterns/qa-thread.json +109 -0
- package/patterns/quick-start.json +88 -0
- package/patterns/recipefork-activity-feed.json +51 -0
- package/patterns/recipefork-chef-ingredients-display.json +48 -0
- package/patterns/recipefork-chef-ingredients-editor.json +52 -0
- package/patterns/recipefork-chef-instruction-editor.json +59 -0
- package/patterns/recipefork-chef-instructions-display.json +54 -0
- package/patterns/recipefork-cookbook-assignment.json +51 -0
- package/patterns/recipefork-cooking-tips-display.json +43 -0
- package/patterns/recipefork-cooking-tips-editor.json +46 -0
- package/patterns/recipefork-fork-provenance.json +50 -0
- package/patterns/recipefork-kitchen-chat.json +103 -0
- package/patterns/recipefork-photo-generator.json +123 -0
- package/patterns/recipefork-presentation-display.json +45 -0
- package/patterns/recipefork-presentation-editor.json +52 -0
- package/patterns/recipefork-recipe-card.json +123 -0
- package/patterns/recipefork-recipe-metadata-form.json +58 -0
- package/patterns/recipefork-recipe-mode-switch.json +52 -0
- package/patterns/recipefork-recipe-story-editor.json +51 -0
- package/patterns/recipefork-simple-recipe-editor.json +49 -0
- package/patterns/redline-track-changes.json +113 -0
- package/patterns/registry-discovery-cta-grid.json +93 -0
- package/patterns/registry-link-list.json +118 -0
- package/patterns/relationship-graph.json +127 -0
- package/patterns/remote-cursor.json +103 -0
- package/patterns/render-queue.json +102 -0
- package/patterns/rent-reminder.json +140 -0
- package/patterns/rent-roll.json +112 -0
- package/patterns/reputation-badge.json +111 -0
- package/patterns/retro-table.json +128 -0
- package/patterns/reward-tier-selector.json +137 -0
- package/patterns/sample-tracker.json +127 -0
- package/patterns/scene-storyboard.json +104 -0
- package/patterns/scope-breakdown.json +108 -0
- package/patterns/scoreboard-live.json +116 -0
- package/patterns/scrim-calendar.json +114 -0
- package/patterns/search-filter-bar.json +141 -0
- package/patterns/secure-document-viewer.json +107 -0
- package/patterns/service-catalog.json +94 -0
- package/patterns/service-map.json +133 -0
- package/patterns/session-inspector.json +62 -0
- package/patterns/session-manager.json +89 -0
- package/patterns/settings-nav.json +106 -0
- package/patterns/share-modal.json +157 -0
- package/patterns/share-quest-panel.json +134 -0
- package/patterns/shot-grid.json +104 -0
- package/patterns/skeleton-loader.json +114 -0
- package/patterns/slash-command.json +80 -0
- package/patterns/sparkline-cell.json +103 -0
- package/patterns/spatial-card-stack.json +133 -0
- package/patterns/spatial-presence-ring.json +103 -0
- package/patterns/split-calculator.json +104 -0
- package/patterns/split-pane.json +112 -0
- package/patterns/stats-bar.json +125 -0
- package/patterns/stats-detail.json +102 -0
- package/patterns/stats-overview.json +132 -0
- package/patterns/stats-section.json +90 -0
- package/patterns/status-bar.json +101 -0
- package/patterns/status-board.json +92 -0
- package/patterns/stem-browser.json +58 -0
- package/patterns/stem-stack.json +101 -0
- package/patterns/stepper.json +115 -0
- package/patterns/storefront-hero.json +120 -0
- package/patterns/stretch-goal-ladder.json +128 -0
- package/patterns/subscriber-list.json +135 -0
- package/patterns/supply-chain-map.json +109 -0
- package/patterns/swipe-action-bar.json +119 -0
- package/patterns/swipe-card.json +126 -0
- package/patterns/table-map.json +134 -0
- package/patterns/target-progress-ring.json +103 -0
- package/patterns/team-member-row.json +139 -0
- package/patterns/tech-pills.json +69 -0
- package/patterns/tenant-card.json +150 -0
- package/patterns/tenant-directory.json +118 -0
- package/patterns/tenant-payment-setup.json +98 -0
- package/patterns/terminal-emulator.json +117 -0
- package/patterns/testimonials.json +133 -0
- package/patterns/tier-builder.json +131 -0
- package/patterns/tier-card.json +118 -0
- package/patterns/tier-upgrade-card.json +144 -0
- package/patterns/timeline-scrubber.json +107 -0
- package/patterns/timeline.json +140 -0
- package/patterns/toast-notification.json +123 -0
- package/patterns/tool-list.json +89 -0
- package/patterns/trace-waterfall.json +123 -0
- package/patterns/trade-modal.json +132 -0
- package/patterns/transcript-stream.json +125 -0
- package/patterns/tree-view.json +124 -0
- package/patterns/unit-detail.json +100 -0
- package/patterns/unit-list.json +106 -0
- package/patterns/unlock-gate.json +132 -0
- package/patterns/usage-meter.json +113 -0
- package/patterns/vacancy-tracker.json +106 -0
- package/patterns/valuation-chart.json +126 -0
- package/patterns/version-history.json +140 -0
- package/patterns/video-room.json +142 -0
- package/patterns/vod-annotator.json +112 -0
- package/patterns/voice-command-palette.json +127 -0
- package/patterns/voice-waveform.json +120 -0
- package/patterns/voting-breakdown.json +101 -0
- package/patterns/waveform-track.json +102 -0
- package/patterns/webhook-debugger.json +116 -0
- package/patterns/workflow-canvas.json +147 -0
- package/patterns/workspace-region-stack.json +74 -0
- package/schemas/archetype.v2.json +145 -0
- package/schemas/blueprint.v1.json +225 -0
- package/schemas/common.v1.json +337 -0
- package/schemas/content-health-report.v1.json +255 -0
- package/schemas/content-intelligence.v1.json +142 -0
- package/schemas/essence.v4.json +430 -0
- package/schemas/execution-pack.common.v1.json +207 -0
- package/schemas/page-pack.v1.json +106 -0
- package/schemas/pattern.v2.json +232 -0
- package/schemas/public-content-list.v1.json +28 -0
- package/schemas/public-content-record.v1.json +91 -0
- package/schemas/public-content-summary.v1.json +132 -0
- package/schemas/registry-intelligence-summary.v1.json +81 -0
- package/schemas/search-response.v1.json +28 -0
- package/schemas/section-pack.v1.json +128 -0
- package/schemas/shell.v1.json +69 -0
- package/schemas/showcase-manifest-entry.v1.json +92 -0
- package/schemas/showcase-manifest.v1.json +28 -0
- package/schemas/showcase-shortlist.v1.json +36 -0
- package/schemas/theme.v1.json +190 -0
- package/shells/canvas-overlay.json +94 -0
- package/shells/centered.json +49 -0
- package/shells/chat-portal.json +153 -0
- package/shells/copilot-overlay.json +156 -0
- package/shells/full-bleed.json +100 -0
- package/shells/immersive-stage.json +89 -0
- package/shells/minimal-header.json +103 -0
- package/shells/mobile-tab-bar.json +119 -0
- package/shells/recipefork-top-nav.json +74 -0
- package/shells/sidebar-aside.json +163 -0
- package/shells/sidebar-main-footer.json +158 -0
- package/shells/sidebar-main.json +175 -0
- package/shells/sidebar-right.json +128 -0
- package/shells/terminal-split.json +95 -0
- package/shells/three-column-browser.json +215 -0
- package/shells/top-nav-footer.json +114 -0
- package/shells/top-nav-main.json +103 -0
- package/shells/top-nav-sidebar.json +130 -0
- package/shells/workspace-aside.json +181 -0
- package/themes/auradecantism.json +601 -0
- package/themes/bespoke.json +433 -0
- package/themes/bioluminescent.json +217 -0
- package/themes/bistro.json +422 -0
- package/themes/carbon-neon.json +458 -0
- package/themes/carbon.json +429 -0
- package/themes/cinema.json +479 -0
- package/themes/clean.json +261 -0
- package/themes/counsel.json +431 -0
- package/themes/dopamine.json +237 -0
- package/themes/earth.json +453 -0
- package/themes/editorial.json +237 -0
- package/themes/estate.json +559 -0
- package/themes/fintech.json +472 -0
- package/themes/gaming-guild.json +341 -0
- package/themes/glassmorphism.json +309 -0
- package/themes/government.json +481 -0
- package/themes/healthcare.json +480 -0
- package/themes/lab.json +437 -0
- package/themes/launchpad.json +320 -0
- package/themes/liquid-glass.json +223 -0
- package/themes/luminarum.json +598 -0
- package/themes/neo-tokyo.json +451 -0
- package/themes/neon-cyber.json +280 -0
- package/themes/neon-dark.json +220 -0
- package/themes/paper.json +496 -0
- package/themes/prismatic.json +217 -0
- package/themes/recipefork.json +278 -0
- package/themes/retro-arcade.json +620 -0
- package/themes/retro.json +240 -0
- package/themes/studio-dark.json +437 -0
- package/themes/studio.json +488 -0
- package/themes/swipecircle.json +533 -0
- package/themes/terminal.json +549 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "spatial-card-stack",
|
|
3
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Spatial Card Stack",
|
|
7
|
+
"description": "Z-axis stacked cards with depth parallax and gesture-based navigation — supports swipeable deck, fanned arc, 3D carousel, and chronological timeline stack layouts.",
|
|
8
|
+
"category": "spatial",
|
|
9
|
+
"tags": [
|
|
10
|
+
"2027",
|
|
11
|
+
"frontier",
|
|
12
|
+
"spatial",
|
|
13
|
+
"3D",
|
|
14
|
+
"cards",
|
|
15
|
+
"gesture",
|
|
16
|
+
"parallax",
|
|
17
|
+
"depth",
|
|
18
|
+
"carousel"
|
|
19
|
+
],
|
|
20
|
+
"components": [
|
|
21
|
+
"CardStack",
|
|
22
|
+
"DepthCard",
|
|
23
|
+
"StackControls",
|
|
24
|
+
"DepthIndicator",
|
|
25
|
+
"GestureZone"
|
|
26
|
+
],
|
|
27
|
+
"default_preset": "deck",
|
|
28
|
+
"presets": {
|
|
29
|
+
"deck": {
|
|
30
|
+
"description": "Swipeable card stack where cards are layered along the Z-axis — front card is full-size and interactive, cards behind progressively scale down, dim, and offset upward",
|
|
31
|
+
"layout": {
|
|
32
|
+
"layout": "spatial",
|
|
33
|
+
"atoms": "_relative _w-full _flex _items-center _justify-center _perspective-1000"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"fan": {
|
|
37
|
+
"description": "Cards spread in a horizontal arc like a hand of playing cards — each card rotated at increasing angles from center, hovering a card raises it from the fan for preview",
|
|
38
|
+
"layout": {
|
|
39
|
+
"layout": "spatial",
|
|
40
|
+
"atoms": "_relative _w-full _flex _items-end _justify-center _perspective-1200 _pb-16"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"carousel3d": {
|
|
44
|
+
"description": "Cards arranged in a circular 3D orbit around a vertical axis — the front-facing card is fully visible, flanking cards foreshorten with perspective, navigation rotates the entire ring",
|
|
45
|
+
"layout": {
|
|
46
|
+
"layout": "spatial",
|
|
47
|
+
"atoms": "_relative _w-full _flex _items-center _justify-center _perspective-800"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"timeline-stack": {
|
|
51
|
+
"description": "Chronologically ordered cards stacked with the newest on top — cards behind offset downward and to the right creating a cascading paper stack effect with visible timestamps on edges",
|
|
52
|
+
"layout": {
|
|
53
|
+
"layout": "spatial",
|
|
54
|
+
"atoms": "_relative _w-full _flex _items-start _justify-center _perspective-1000 _p-8"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"visual_brief": "In deck mode: a stack of cards centered in the container. The container has CSS perspective: 1000px applied to enable 3D transforms. The front (active) card renders at full size (width: 320px, aspect-ratio: 3/4 by default, rounded-xl, shadow-xl, bg-surface). It sits at translateZ(0) and is fully interactive — clickable, scrollable content inside. Behind it, up to 4 additional cards are visible. The second card: transform: translateZ(-30px) translateY(-12px) scale(0.95), opacity: 0.85. Third card: translateZ(-60px) translateY(-24px) scale(0.90), opacity: 0.7. Fourth card: translateZ(-90px) translateY(-36px) scale(0.85), opacity: 0.55. Fifth card: translateZ(-120px) translateY(-48px) scale(0.80), opacity: 0.4. Cards beyond the fifth are hidden (display: none). Each card has a subtle border (1px solid var(--d-border)). Swiping left on the front card (via touch drag or mouse drag) causes it to rotate slightly (rotateY -5deg) and translate left, then once past a 30% threshold, it flies off-screen (translateX -120%, rotateY -15deg, opacity 0, 300ms spring) and the next card springs forward to the front position. Swiping right brings the previous card back. Arrow controls (left/right chevron buttons, 36px circle, bg-surface, shadow-md) sit on either side of the stack. A DepthIndicator below the stack shows the current position as small dots (8px circles, gap-2) — the active dot is filled (bg-accent), others are outline (border, bg-transparent). In fan mode: cards are arranged in a semicircular arc. Each card is rotated around its bottom-center origin. The center card is at rotate(0deg), cards to the left at -8deg, -16deg, -24deg and cards to the right at +8deg, +16deg, +24deg. Cards overlap slightly. Hovering a card raises it: translateY(-20px) + scale(1.05) with a 200ms ease-out transition, bringing it above the fan. Clicking selects it and centers it. In carousel3d mode: cards are arranged in a 3D ring. Each card is positioned using rotateY(N * 360/total deg) translateZ(300px). The container has a preserve-3d transform-style. Navigation rotates the entire ring by one card increment (300ms ease-out). The front-facing card has full opacity and no perspective distortion. Cards at 90deg are edge-on and nearly invisible. In timeline-stack mode: cards cascade down-right. Each successive card offsets by translateX(8px) translateY(12px). The top card is fully visible; cards below show just their right and bottom edges. A small timestamp label (text-xs, font-mono, bg-muted, rounded, px-1) peeks out from the right edge of each stacked card.",
|
|
59
|
+
"layout_hints": {
|
|
60
|
+
"container": "block with perspective",
|
|
61
|
+
"note": "The container MUST have CSS perspective set (1000px default) for 3D effects. Cards should use transform-style: preserve-3d for nested 3D content. Ensure the container has enough padding to accommodate card offsets and shadows.",
|
|
62
|
+
"card_sizing": "Default card size: 320px wide, auto height. Override with CSS custom properties --card-width and --card-height. Maintain consistent aspect ratio across all cards in a stack.",
|
|
63
|
+
"gesture_thresholds": "Swipe threshold: 30% of card width to trigger navigation. Below threshold, card springs back. Velocity-based: fast swipes (>500px/s) trigger regardless of distance.",
|
|
64
|
+
"performance": "Only render the active card + 4 surrounding cards. Use will-change: transform, opacity on visible cards. Remove will-change from hidden cards."
|
|
65
|
+
},
|
|
66
|
+
"default_layout": {
|
|
67
|
+
"layout": "spatial",
|
|
68
|
+
"atoms": "_relative _w-full _flex _flex-col _items-center _justify-center _perspective-1000 _gap-4 _py-8",
|
|
69
|
+
"slots": {
|
|
70
|
+
"card-stack": "The 3D container holding all DepthCard elements. Uses transform-style: preserve-3d. Dimensions match the front card size plus padding for depth offset (add 48px padding on each side for the cascade effect). Position: relative. All child DepthCards are position: absolute, centered within this container via left: 50%, top: 50%, translate(-50%, -50%) as the base transform, with each card's depth transform layered on top. The container handles pointer events for swipe/drag gestures via a GestureZone overlay. In carousel3d mode, the container additionally applies a rotateY transform that animates when navigating between cards.",
|
|
71
|
+
"depth-card": "Repeating slot — one per item in the stack. Each card is a d-surface element (rounded-xl, shadow-lg, overflow-hidden, bg-surface). Position: absolute, centered in the card-stack container. The card's visual depth is controlled by CSS transforms: translateZ (depth), translateY (vertical offset), and scale (size reduction). These three properties are interpolated based on the card's position relative to the active index. The active (front) card: translateZ(0) scale(1) opacity(1), pointer-events: auto, z-index: highest. Cards behind: pointer-events: none, progressively reduced z-index. Each card has transition: transform 400ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 300ms ease-out — the spring-like bezier gives a satisfying physical feel when cards move forward. Card content is projected inside via a slot: the card accepts arbitrary children (images, text, interactive elements). In fan mode, the transform changes to rotateZ(angle) with transform-origin: bottom center.",
|
|
72
|
+
"stack-controls": "Navigation buttons flanking the card stack. Two circular buttons (36px diameter, bg-surface, border, shadow-md, rounded-full) positioned absolutely: left button at left: -48px, top: 50%, translateY(-50%); right button at right: -48px, top: 50%, translateY(-50%). Each contains a chevron icon (16px, stroke-width: 2). Left button: chevron-left icon, navigates to previous card. Right button: chevron-right icon, navigates to next card. Buttons have hover state (bg-accent/10%, scale 1.05) and active state (scale 0.95). Disabled state (at start/end of stack): opacity 0.3, pointer-events: none. In carousel3d mode, buttons rotate the ring. In fan mode, buttons shift the highlighted card.",
|
|
73
|
+
"depth-indicator": "A row of small dots below the card stack showing the current position within the stack. Uses flex layout (gap-2, items-center, justify-center). Each dot is an 8px circle. The active card's dot: bg-accent, scale(1). Other dots: border 1.5px solid var(--d-border), bg-transparent, scale(0.85). Dots transition between states with: background-color 200ms, transform 200ms. If there are more than 7 items, the indicator collapses: shows the active dot, 2 dots on each side, and small ellipsis dots (...) at the edges. Clicking a dot navigates directly to that card.",
|
|
74
|
+
"gesture-zone": "An invisible overlay covering the card-stack area that captures touch/mouse drag events for swipe navigation. Position: absolute, inset: 0, z-index above cards. Captures pointerdown → pointermove → pointerup sequences. During drag: the front card follows the pointer horizontally with a slight rotateY tilt (max ±8deg at card edges). Visual feedback: the card tilts in the drag direction, the next card in the swipe direction begins scaling up (scale 0.95→0.98) as a preview. On release: if past threshold (30% card width or velocity >500px/s), commit the navigation with a spring animation (300ms). Below threshold, spring back to center (250ms ease-out). The gesture zone also handles keyboard arrow events bubbled from child focus."
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"accessibility": {
|
|
78
|
+
"role": "group",
|
|
79
|
+
"aria-label": "Card stack navigation",
|
|
80
|
+
"aria-roledescription": "carousel",
|
|
81
|
+
"announcements": [
|
|
82
|
+
"Showing card {current} of {total}",
|
|
83
|
+
"Navigated to card {current}: {card_title}",
|
|
84
|
+
"Card stack: swipe left or right to navigate, or use arrow keys"
|
|
85
|
+
],
|
|
86
|
+
"keyboard": [
|
|
87
|
+
"Arrow Left: navigate to previous card",
|
|
88
|
+
"Arrow Right: navigate to next card",
|
|
89
|
+
"Home: navigate to first card",
|
|
90
|
+
"End: navigate to last card",
|
|
91
|
+
"Enter: activate/click the front card",
|
|
92
|
+
"Tab: move focus into the front card's content",
|
|
93
|
+
"Escape: return focus to the card stack from card content"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
"responsive": {
|
|
97
|
+
"mobile": "Card width reduces to min(280px, 90vw). Only 3 depth cards rendered behind active (instead of 4). Stack controls hidden — swipe gestures only. Depth indicator dots reduce to 6px. Fan mode disabled — falls back to deck mode. Carousel3d simplified to 2D horizontal scroll.",
|
|
98
|
+
"tablet": "Full card width (320px). All 4 depth cards rendered. Stack controls visible at 32px. Touch gestures + button navigation both active. All presets functional."
|
|
99
|
+
},
|
|
100
|
+
"motion": {
|
|
101
|
+
"micro": {
|
|
102
|
+
"card-hover": "translateY(-4px) + shadow-elevation over 200ms ease-out (deck mode, front card only)",
|
|
103
|
+
"control-hover": "scale(1.05) + bg-accent/10% over 150ms ease-out",
|
|
104
|
+
"dot-hover": "scale(1.1) over 150ms"
|
|
105
|
+
},
|
|
106
|
+
"transitions": {
|
|
107
|
+
"card-forward": "translateZ + scale + opacity to front position, 400ms cubic-bezier(0.34, 1.56, 0.64, 1) — spring feel",
|
|
108
|
+
"card-backward": "translateZ + scale + opacity to depth position, 350ms ease-out",
|
|
109
|
+
"card-swipe-away": "translateX(±120%) + rotateY(±15deg) + opacity 0, 300ms spring",
|
|
110
|
+
"card-spring-back": "translateX(0) + rotateY(0), 250ms ease-out",
|
|
111
|
+
"carousel-rotate": "parent rotateY by card-increment degrees, 400ms ease-out",
|
|
112
|
+
"fan-highlight": "translateY(-20px) + scale(1.05), 200ms ease-out"
|
|
113
|
+
},
|
|
114
|
+
"ambient": {
|
|
115
|
+
"depth-parallax": "subtle translateX/Y offset on depth cards in response to mouse position (max ±4px), 100ms ease-out — creates a parallax depth illusion",
|
|
116
|
+
"idle-float": "front card subtle translateY oscillation (±2px) over 4s ease-in-out infinite — gentle floating effect when not interacting"
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"interactions": [
|
|
120
|
+
"lift-hover",
|
|
121
|
+
"click-select",
|
|
122
|
+
"animate-on-mount",
|
|
123
|
+
"stagger-children"
|
|
124
|
+
],
|
|
125
|
+
"composition": {
|
|
126
|
+
"SpatialCardStack": "Section(d-section, perspective-1000, flex-col, items-center) > [CardStackContainer + StackControls + DepthIndicator]",
|
|
127
|
+
"CardStackContainer": "Div(relative, preserve-3d) > [DepthCard*(d-surface, absolute, depth-transformed) + GestureZone(invisible-overlay)]",
|
|
128
|
+
"DepthCard": "Surface(d-surface, rounded-xl, shadow-lg, positioned) > [CardContent(slot)]",
|
|
129
|
+
"StackControls": "Div(absolute, flanking) > [PrevButton(circle, chevron-left) + NextButton(circle, chevron-right)]",
|
|
130
|
+
"DepthIndicator": "Flex(gap-2, items-center) > Dot*(8px, circle, active: filled, inactive: outline)",
|
|
131
|
+
"GestureZone": "Div(absolute, inset-0, pointer-capture) > SwipeHandler(threshold: 30%, velocity: 500px/s)"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "spatial-presence-ring",
|
|
3
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Spatial Presence Ring",
|
|
7
|
+
"description": "A circular or arc display showing nearby agents and users with live status indicators. Ring segments represent participants, expanding on hover or focus to reveal details. Segments are distributed evenly around the ring with smooth reflow when participants join or leave. For collaborative workspaces, multiplayer agent UIs, and real-time presence-aware interfaces.",
|
|
8
|
+
"category": "spatial",
|
|
9
|
+
"tags": [
|
|
10
|
+
"2026",
|
|
11
|
+
"spatial",
|
|
12
|
+
"presence",
|
|
13
|
+
"collaboration",
|
|
14
|
+
"ring",
|
|
15
|
+
"multiplayer",
|
|
16
|
+
"agents",
|
|
17
|
+
"real-time"
|
|
18
|
+
],
|
|
19
|
+
"components": [
|
|
20
|
+
"PresenceRing",
|
|
21
|
+
"PresenceSegment",
|
|
22
|
+
"StatusDot",
|
|
23
|
+
"DetailPopover",
|
|
24
|
+
"UserAvatar"
|
|
25
|
+
],
|
|
26
|
+
"default_preset": "full-ring",
|
|
27
|
+
"presets": {
|
|
28
|
+
"full-ring": {
|
|
29
|
+
"description": "Complete 360-degree ring. Segments distributed evenly using CSS conic-gradient for the track and positioned elements for each participant. Ring surrounds center-content. Scales from 2 to 24 participants before switching to overflow indicator.",
|
|
30
|
+
"layout": {
|
|
31
|
+
"layout": "stack",
|
|
32
|
+
"atoms": "_relative _flex _aic _jcc"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"half-arc": {
|
|
36
|
+
"description": "180-degree arc across the top or bottom of the container. Useful when the ring shares space with other content. Segments are larger since they span a half-circle. Good for 2-12 participants.",
|
|
37
|
+
"layout": {
|
|
38
|
+
"layout": "stack",
|
|
39
|
+
"atoms": "_relative _flex _col _aic"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"linear-fallback": {
|
|
43
|
+
"description": "Horizontal row of avatars with status dots. Used when container is too narrow for a ring or on mobile. Overflow scrolls horizontally. Detail popover appears above/below on tap.",
|
|
44
|
+
"layout": {
|
|
45
|
+
"layout": "row",
|
|
46
|
+
"atoms": "_flex _row _aic _gap2 _overflow-x-auto"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"default_layout": {
|
|
51
|
+
"layout": "stack",
|
|
52
|
+
"atoms": "_relative _flex _aic _jcc",
|
|
53
|
+
"slots": {
|
|
54
|
+
"ring-container": "The circular track that holds all presence segments. Rendered as a CSS conic-gradient ring or SVG circle. Track shows segment boundaries with subtle dividers. Ring diameter should be responsive to container size with a minimum of 200px.",
|
|
55
|
+
"presence-segment": "A single participant slice of the ring. Contains UserAvatar and StatusDot. Default state shows avatar thumbnail on the ring edge. Expanded state (hover/focus) grows the segment to show name, role, and activity. Segments reflow smoothly when participants change.",
|
|
56
|
+
"detail-popover": "Expanded information panel that appears when a segment is activated. Shows full user name, role label, current activity description, connection quality indicator, and action buttons (message, call, follow). Positioned radially outward from the segment.",
|
|
57
|
+
"status-indicator": "StatusDot showing participant state: active (green pulse), idle (amber static), away (gray), busy (red), AI agent (blue pulse). Dot is positioned at the outer edge of each segment. Pulse animation indicates real-time activity.",
|
|
58
|
+
"center-content": "The content area inside the ring. Typically shows aggregate information: participant count, shared context label, or a collaborative focus element. In full-ring preset, this is the primary content area surrounded by the presence display."
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"accessibility": {
|
|
62
|
+
"role": "group",
|
|
63
|
+
"aria_label": "Active participants",
|
|
64
|
+
"announcements": [
|
|
65
|
+
"Announce when a participant joins: '[Name] joined, [N] participants active'",
|
|
66
|
+
"Announce when a participant leaves: '[Name] left'",
|
|
67
|
+
"Announce status changes: '[Name] is now [status]'",
|
|
68
|
+
"Announce segment expansion: 'Viewing details for [Name], [role]'"
|
|
69
|
+
],
|
|
70
|
+
"keyboard": [
|
|
71
|
+
"Tab enters the ring, then Arrow Left/Right cycles between segments",
|
|
72
|
+
"Enter or Space expands the focused segment's detail popover",
|
|
73
|
+
"Escape closes the detail popover and returns focus to the segment",
|
|
74
|
+
"Home/End jumps to first/last segment in ring order"
|
|
75
|
+
],
|
|
76
|
+
"reduce_motion": "Disable ring rotation animations and segment reflow transitions. StatusDot pulse replaced with static color. Segment expansion is instant rather than animated. Ring layout preserved (not decorative motion)."
|
|
77
|
+
},
|
|
78
|
+
"responsive": {
|
|
79
|
+
"mobile": "Switch to linear-fallback preset. Horizontal scrollable avatar row with status dots. Tap to expand detail popover as a bottom sheet. Maximum 8 visible before overflow count badge.",
|
|
80
|
+
"tablet": "Half-arc preset by default to save vertical space. Segments are touch-sized (48px minimum). Detail popover appears as a card overlay rather than radial popup."
|
|
81
|
+
},
|
|
82
|
+
"visual_brief": "Circular ring display where each participant occupies an arc segment proportional to their activity level. Segments distribute evenly around the ring with subtle dividers. Each segment shows a small avatar and a status dot (green/yellow/red). Expanding a segment on hover reveals a detail popover with name, role, and activity details. The ring track itself is rendered as a conic gradient or SVG circle. The half-arc preset shows only the top semicircle. The linear-fallback preset arranges participants in a horizontal row for simpler layouts. Smooth reflow animation when participants join or leave.",
|
|
83
|
+
"layout_hints": {
|
|
84
|
+
"segment_balance": "Ring segments should remain readable and evenly distributed. Avoid crowding the arc with too much text in the default state.",
|
|
85
|
+
"detail_reveal": "Expanded participant details should feel like contextual overlays, not detached popovers that obscure the whole ring.",
|
|
86
|
+
"fallback_consistency": "The linear fallback should preserve status, identity, and shared-context meaning rather than becoming a generic avatar strip."
|
|
87
|
+
},
|
|
88
|
+
"motion": {
|
|
89
|
+
"micro": "Status dots and active participant states may pulse subtly to show presence without turning the ring into a constant animation source.",
|
|
90
|
+
"transitions": "Segment reflow and detail reveal should animate smoothly over 180-260ms while preserving the ring's overall stability."
|
|
91
|
+
},
|
|
92
|
+
"interactions": [
|
|
93
|
+
"animate-on-mount",
|
|
94
|
+
"hover-reveal"
|
|
95
|
+
],
|
|
96
|
+
"composition": {
|
|
97
|
+
"SpatialPresenceRing": "Container(d-section, centered) > [RingTrack + CenterContent]",
|
|
98
|
+
"RingTrack": "Ring(d-data, circular) > PresenceSegment[]",
|
|
99
|
+
"PresenceSegment": "Segment(d-interactive, expandable) > [UserAvatar(small) + StatusDot(d-annotation, color: state, pulse?: active)]",
|
|
100
|
+
"DetailPopover": "Popover(d-surface, radial-position) > [FullName + RoleLabel(d-annotation) + Activity(text-muted) + ActionButtons(d-interactive)]",
|
|
101
|
+
"CenterContent": "Panel(d-surface, inner) > [ParticipantCount + SharedContext?]"
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "split-calculator",
|
|
3
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Split Calculator",
|
|
7
|
+
"description": "Royalty split calculator for music collaborators with percentage allocation, role tagging, preset splits, and validation that totals equal 100%.",
|
|
8
|
+
"category": "music",
|
|
9
|
+
"tags": ["2026", "music", "royalties", "splits", "collaborators", "calculator", "rights"],
|
|
10
|
+
"components": ["SplitRow", "PercentageInput", "CollaboratorAvatar", "RoleTag", "TotalBadge", "PresetButton"],
|
|
11
|
+
"default_preset": "standard",
|
|
12
|
+
"presets": {
|
|
13
|
+
"standard": {
|
|
14
|
+
"description": "Full split calculator with collaborator rows, percentage inputs with sliders, role tags, total validation, and preset buttons for common splits",
|
|
15
|
+
"layout": {
|
|
16
|
+
"layout": "stack",
|
|
17
|
+
"atoms": "_flex _flex-col _gap-4 _p-6 _bg-surface _rounded-xl _border _w-full _max-w-2xl"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"simple": {
|
|
21
|
+
"description": "Two-party simplified split with just percentage inputs and names, suitable for quick agreements between duo collaborators",
|
|
22
|
+
"layout": {
|
|
23
|
+
"layout": "stack",
|
|
24
|
+
"atoms": "_flex _flex-col _gap-3 _p-4 _bg-surface _rounded-lg _border _w-full _max-w-md"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"advanced": {
|
|
28
|
+
"description": "Advanced variant with role-specific sub-splits, writer vs publisher breakdown, and master vs publishing separation for complex rights arrangements",
|
|
29
|
+
"layout": {
|
|
30
|
+
"layout": "stack",
|
|
31
|
+
"atoms": "_flex _flex-col _gap-6 _p-6 _bg-surface _rounded-xl _border _w-full _max-w-3xl"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"visual_brief": "A vertical list of collaborator rows inside a rounded card. Each collaborator row has a drag handle on the far left (6-dot grip icon, visible on hover), a 40px circular avatar with initials fallback, a name text in semibold 14px with role tag beneath as a small colored pill (Producer=purple, Songwriter=blue, Performer=amber, Engineer=gray), and on the right a percentage input combining a horizontal slider (flex-grow, 0-100%) with a coupled numeric spinbox (60px wide) showing the exact percentage with % suffix. A visible remove-row X button appears on hover at far right. Below the rows sits a total badge showing the sum of all percentages (e.g. '100.0%') as a prominent pill: green background if exactly 100%, red background with warning icon if over or under. Preset buttons row below the total shows common allocations ('50/50', '70/30', 'Equal shares', 'Custom') as outlined buttons that apply instantly. Add-collaborator button at bottom spans full width as a dashed-border outlined button with plus icon.",
|
|
36
|
+
"default_layout": {
|
|
37
|
+
"layout": "stack",
|
|
38
|
+
"atoms": "_flex _flex-col _gap-4 _p-6 _bg-surface _rounded-xl _border _w-full _max-w-2xl",
|
|
39
|
+
"slots": {
|
|
40
|
+
"split-row": "Repeating row (d-interactive) per collaborator with drag handle, avatar, name+role, percentage input, and remove button.",
|
|
41
|
+
"drag-handle": "6-dot grip icon at far left, visible on hover. Enables drag-reorder of rows.",
|
|
42
|
+
"collaborator-avatar": "40px circular avatar with profile image or initials fallback on colored background.",
|
|
43
|
+
"name-and-role": "Stack showing collaborator name in semibold and role tag pill beneath with category-specific color.",
|
|
44
|
+
"role-tag": "Small colored pill displaying role (Producer/Songwriter/Performer/Engineer). Category-coded colors.",
|
|
45
|
+
"percentage-input": "Compound input combining horizontal slider (0-100) and numeric spinbox (0.0-100.0 with % suffix). Coupled bidirectionally.",
|
|
46
|
+
"remove-button": "X icon button at far right, visible on row hover, removes that collaborator row.",
|
|
47
|
+
"total-badge": "Prominent pill showing sum of all percentages. Green if = 100%, red with warning icon if not.",
|
|
48
|
+
"preset-buttons": "Horizontal row of quick-apply preset buttons (50/50, 70/30, Equal, Custom).",
|
|
49
|
+
"add-row-button": "Full-width dashed-border button at bottom with plus icon to add new collaborator."
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"responsive": {
|
|
53
|
+
"mobile": "Rows wrap: avatar + name on top, slider + spinbox on bottom. Remove button moves next to drag handle. Preset buttons scroll horizontally.",
|
|
54
|
+
"tablet": "Standard layout with slightly condensed spacing.",
|
|
55
|
+
"desktop": "Full inline layout with all controls and hover states visible."
|
|
56
|
+
},
|
|
57
|
+
"motion": {
|
|
58
|
+
"micro": {
|
|
59
|
+
"slider-drag": "slider fill follows pointer at 60fps with spinbox number update",
|
|
60
|
+
"total-change": "total badge color transitions 200ms ease-out when crossing 100%"
|
|
61
|
+
},
|
|
62
|
+
"transitions": {
|
|
63
|
+
"row-add": "scale-in + fade 250ms spring at bottom of list",
|
|
64
|
+
"row-remove": "slide-out + fade + collapse 200ms ease-in",
|
|
65
|
+
"preset-apply": "all percentages animate simultaneously to new values 400ms ease-out"
|
|
66
|
+
},
|
|
67
|
+
"ambient": {
|
|
68
|
+
"invalid-total-pulse": "total badge red pulse 1.5s ease-in-out infinite when sum ≠ 100%"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"interactions": [
|
|
72
|
+
"animate-on-mount"
|
|
73
|
+
],
|
|
74
|
+
"composition": {
|
|
75
|
+
"SplitCalculator": "Root(d-surface, stack) > [SplitRow* + TotalBadge + PresetButtons + AddRowButton]",
|
|
76
|
+
"SplitRow": "Row(d-interactive) > [DragHandle + CollaboratorAvatar + NameAndRole + PercentageInput + RemoveButton?]",
|
|
77
|
+
"PercentageInput": "Compound > [Slider(0-100) + Spinbox(numeric, %)]",
|
|
78
|
+
"PresetButtons": "FlexRow > PresetButton*(d-control, outlined)",
|
|
79
|
+
"TotalBadge": "Pill(d-annotation, state-colored) > [SumText + WarningIcon?]"
|
|
80
|
+
},
|
|
81
|
+
"layout_hints": {
|
|
82
|
+
"allocation_priority": "Collaborator identity, role, and percentage share should read as one unit so users can audit ownership splits without scanning in multiple passes.",
|
|
83
|
+
"validation_prominence": "The running total and invalid-state warning should stay visible as supporting guidance without overpowering the row-by-row editing flow.",
|
|
84
|
+
"preset_behavior": "Preset actions should feel like quick starting points attached to the current split list, not a detached settings mode."
|
|
85
|
+
},
|
|
86
|
+
"accessibility": {
|
|
87
|
+
"role": "form",
|
|
88
|
+
"aria-label": "Royalty split calculator",
|
|
89
|
+
"announcements": [
|
|
90
|
+
"{collaborator} set to {percent}%",
|
|
91
|
+
"Total is now {total}%",
|
|
92
|
+
"Warning: total does not equal 100%",
|
|
93
|
+
"Preset {name} applied"
|
|
94
|
+
],
|
|
95
|
+
"keyboard": [
|
|
96
|
+
"Tab: cycle through collaborator inputs",
|
|
97
|
+
"Arrow keys: adjust focused percentage by 1%",
|
|
98
|
+
"Shift+Arrow: fine adjust by 0.1%",
|
|
99
|
+
"Enter: confirm value",
|
|
100
|
+
"Delete: remove focused collaborator",
|
|
101
|
+
"Ctrl+A: add new collaborator"
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "split-pane",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Split Pane",
|
|
7
|
+
"description": "Resizable terminal panes with keyboard and mouse controls for multi-panel layouts.",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"patterns": {},
|
|
10
|
+
"styles": {},
|
|
11
|
+
"requires_core": {
|
|
12
|
+
"components": [],
|
|
13
|
+
"charts": []
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"components": ["Container"],
|
|
17
|
+
"default_preset": "horizontal",
|
|
18
|
+
"presets": {
|
|
19
|
+
"horizontal": {
|
|
20
|
+
"description": "Side by side panes with vertical divider",
|
|
21
|
+
"components": [],
|
|
22
|
+
"layout": {
|
|
23
|
+
"layout": "flex",
|
|
24
|
+
"atoms": "_flex _hfull _mono _bgblack",
|
|
25
|
+
"slots": {
|
|
26
|
+
"pane-left": "Left content pane",
|
|
27
|
+
"divider": "Resizable vertical divider",
|
|
28
|
+
"pane-right": "Right content pane"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"vertical": {
|
|
33
|
+
"description": "Stacked panes with horizontal divider",
|
|
34
|
+
"components": [],
|
|
35
|
+
"layout": {
|
|
36
|
+
"layout": "flex",
|
|
37
|
+
"atoms": "_flex _col _hfull _mono _bgblack",
|
|
38
|
+
"slots": {
|
|
39
|
+
"pane-top": "Top content pane",
|
|
40
|
+
"divider": "Resizable horizontal divider",
|
|
41
|
+
"pane-bottom": "Bottom content pane"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"quad": {
|
|
46
|
+
"description": "Four-pane 2x2 grid layout with cross-shaped drag handles at the center intersection",
|
|
47
|
+
"components": [],
|
|
48
|
+
"layout": {
|
|
49
|
+
"layout": "grid",
|
|
50
|
+
"atoms": "_grid _hfull _mono _bgblack",
|
|
51
|
+
"slots": {
|
|
52
|
+
"pane-tl": "Top-left pane",
|
|
53
|
+
"pane-tr": "Top-right pane",
|
|
54
|
+
"pane-bl": "Bottom-left pane",
|
|
55
|
+
"pane-br": "Bottom-right pane"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"default_layout": {
|
|
61
|
+
"layout": "flex",
|
|
62
|
+
"atoms": "_flex _hfull _mono",
|
|
63
|
+
"slots": {
|
|
64
|
+
"panes": "Content panes",
|
|
65
|
+
"handles": "Resize handles"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"features": [
|
|
69
|
+
"drag-resize",
|
|
70
|
+
"double-click-reset",
|
|
71
|
+
"keyboard-resize",
|
|
72
|
+
"min-max-constraints",
|
|
73
|
+
"collapse-rail",
|
|
74
|
+
"focus-indicator"
|
|
75
|
+
],
|
|
76
|
+
"keyboard_shortcuts": {
|
|
77
|
+
"Ctrl+Shift+Left": "Shrink left pane",
|
|
78
|
+
"Ctrl+Shift+Right": "Expand left pane",
|
|
79
|
+
"Ctrl+Shift+Up": "Shrink top pane",
|
|
80
|
+
"Ctrl+Shift+Down": "Expand top pane",
|
|
81
|
+
"Ctrl+\\": "Toggle pane focus"
|
|
82
|
+
},
|
|
83
|
+
"visual_brief": "Multi-panel layout with resizable dividers between panes. The horizontal preset splits the viewport into left and right panels with a vertical drag handle between them. The vertical preset splits into top and bottom with a horizontal drag handle. The quad preset creates four panels in a 2x2 grid with cross-shaped drag handles at the center. Each pane has a monospace terminal aesthetic with a dark background. Drag handles render as a thin line with a grip indicator (three dots or lines). Double-clicking a handle resets to equal sizing.",
|
|
84
|
+
"responsive": {
|
|
85
|
+
"mobile": "Panes stack vertically (no side-by-side splitting). Tab-based switching between panes instead of simultaneous view. No drag handles.",
|
|
86
|
+
"tablet": "Horizontal split available. Drag handles have larger touch targets (24px hit area). Quad preset unavailable.",
|
|
87
|
+
"desktop": "Full split pane with all presets. Keyboard shortcuts for resizing. Drag handles at standard size."
|
|
88
|
+
},
|
|
89
|
+
"layout_hints": {
|
|
90
|
+
"pane_ownership": "The pattern owns pane boundaries, dividers, and resize affordances. Child pages or viewers should not add their own competing split structures unless explicitly nested by the contract.",
|
|
91
|
+
"focus_hierarchy": "One pane should always feel primary and the others supportive. Resize handles should reinforce that relationship rather than turning the layout into an undifferentiated grid.",
|
|
92
|
+
"mobile_fallback": "When the split collapses on mobile, preserve pane semantics through tabs or stacked sections rather than pretending simultaneous multi-pane editing is still available."
|
|
93
|
+
},
|
|
94
|
+
"motion": {
|
|
95
|
+
"micro": "Resize handles may brighten or thicken slightly on hover and focus so the drag affordance is obvious.",
|
|
96
|
+
"transitions": "Pane resizing should feel direct and continuous. Collapsing or resetting panes should animate just enough to preserve orientation without adding theatrical motion."
|
|
97
|
+
},
|
|
98
|
+
"interactions": [
|
|
99
|
+
"animate-on-mount"
|
|
100
|
+
],
|
|
101
|
+
"accessibility": {
|
|
102
|
+
"role": "group",
|
|
103
|
+
"aria-label": "Split pane layout",
|
|
104
|
+
"keyboard": [
|
|
105
|
+
"Focusable resize handles should expose arrow-key resizing in addition to pointer drag.",
|
|
106
|
+
"Pane order and active pane state should remain clear when navigating by keyboard."
|
|
107
|
+
],
|
|
108
|
+
"announcements": [
|
|
109
|
+
"Resize handles and pane labels should communicate orientation and current size changes to assistive technology when adjusted."
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "stats-bar",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Stats Bar",
|
|
7
|
+
"description": "Horizontal bar of key statistics or metrics. Compact summary row.",
|
|
8
|
+
"tags": [
|
|
9
|
+
"metrics",
|
|
10
|
+
"stats",
|
|
11
|
+
"summary",
|
|
12
|
+
"kpi",
|
|
13
|
+
"dashboard"
|
|
14
|
+
],
|
|
15
|
+
"classification": {
|
|
16
|
+
"triggers": [
|
|
17
|
+
"stats summary",
|
|
18
|
+
"metrics bar",
|
|
19
|
+
"key numbers",
|
|
20
|
+
"totals"
|
|
21
|
+
],
|
|
22
|
+
"tier": "recommended"
|
|
23
|
+
},
|
|
24
|
+
"components": ["Text", "icon", "Container"],
|
|
25
|
+
"default_preset": "default",
|
|
26
|
+
"presets": {
|
|
27
|
+
"default": {
|
|
28
|
+
"description": "Equal-width stat items in a row",
|
|
29
|
+
"layout": {
|
|
30
|
+
"layout": "row",
|
|
31
|
+
"atoms": "_grid _gap4 _sm:gc2 _lg:gc4",
|
|
32
|
+
"slots": {
|
|
33
|
+
"items": "Equal-width stat cells with label, value, optional unit, and optional trend"
|
|
34
|
+
},
|
|
35
|
+
"distribution": "equal"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"compact": {
|
|
39
|
+
"description": "Minimal padding, inline separators",
|
|
40
|
+
"layout": {
|
|
41
|
+
"layout": "row",
|
|
42
|
+
"atoms": "_flex _aic _gap3 _wrap",
|
|
43
|
+
"slots": {
|
|
44
|
+
"items": "Inline stat cells with divider separators and reduced padding"
|
|
45
|
+
},
|
|
46
|
+
"distribution": "auto",
|
|
47
|
+
"separator": "divider"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"highlighted": {
|
|
51
|
+
"description": "First stat emphasized, rest secondary",
|
|
52
|
+
"layout": {
|
|
53
|
+
"layout": "row",
|
|
54
|
+
"atoms": "_grid _gap4 _sm:gc2 _lg:gc4",
|
|
55
|
+
"slots": {
|
|
56
|
+
"items": "Stat cells with the first metric visually emphasized and remaining metrics secondary"
|
|
57
|
+
},
|
|
58
|
+
"distribution": "featured-first"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"slots": {
|
|
63
|
+
"items": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"item": {
|
|
66
|
+
"label": {
|
|
67
|
+
"type": "text",
|
|
68
|
+
"required": true
|
|
69
|
+
},
|
|
70
|
+
"value": {
|
|
71
|
+
"type": "number",
|
|
72
|
+
"required": true
|
|
73
|
+
},
|
|
74
|
+
"unit": {
|
|
75
|
+
"type": "text",
|
|
76
|
+
"required": false
|
|
77
|
+
},
|
|
78
|
+
"trend": {
|
|
79
|
+
"type": "delta",
|
|
80
|
+
"required": false
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"layout": {
|
|
86
|
+
"container": "div",
|
|
87
|
+
"direction": "horizontal",
|
|
88
|
+
"alignment": "center"
|
|
89
|
+
},
|
|
90
|
+
"visual_brief": "Compact horizontal row of key statistics separated by subtle vertical dividers. Each stat shows a label in muted uppercase small text above a large bold value. The compact preset reduces vertical padding and font sizes. The highlighted preset adds a colored accent underline or background to the most important metric. Stats are evenly distributed across the bar width. Optional trend arrows (up/down) appear beside values with green/red coloring.",
|
|
91
|
+
"default_layout": {
|
|
92
|
+
"layout": "row",
|
|
93
|
+
"atoms": "_grid _gap4 _sm:gc2 _lg:gc4",
|
|
94
|
+
"slots": {
|
|
95
|
+
"items": "Equal-width stat cells with label, value, optional unit, and optional trend"
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"responsive": {
|
|
99
|
+
"mobile": "Stats wrap to a 2x2 grid or become horizontally scrollable. Values remain large. Labels may abbreviate.",
|
|
100
|
+
"tablet": "Single horizontal row with all stats visible. Comfortable spacing.",
|
|
101
|
+
"desktop": "Full horizontal bar with generous spacing between stats. All labels fully spelled out."
|
|
102
|
+
},
|
|
103
|
+
"layout_hints": {
|
|
104
|
+
"summary_priority": "The value is the first read, then the label, then any trend. Keep that hierarchy stable across compact and highlighted variants.",
|
|
105
|
+
"bar_role": "This pattern is a concise summary surface. It should feel like one horizontal instrumentation band, not a row of unrelated mini-cards.",
|
|
106
|
+
"highlighted_variant": "When one metric is emphasized, it should still remain visually tied to the rest of the stats bar rather than breaking the row into separate modules."
|
|
107
|
+
},
|
|
108
|
+
"motion": {
|
|
109
|
+
"micro": "Trend arrows or highlighted metrics may sharpen subtly on hover or focus.",
|
|
110
|
+
"transitions": "Value or trend updates should remain crisp and low-noise so the stats bar continues to feel stable."
|
|
111
|
+
},
|
|
112
|
+
"interactions": [
|
|
113
|
+
"animate-on-mount"
|
|
114
|
+
],
|
|
115
|
+
"accessibility": {
|
|
116
|
+
"role": "region",
|
|
117
|
+
"aria-label": "Statistics bar",
|
|
118
|
+
"keyboard": [
|
|
119
|
+
"If stats are interactive, focus should move through them in the same left-to-right order as the visual bar."
|
|
120
|
+
],
|
|
121
|
+
"announcements": [
|
|
122
|
+
"Each stat's label, value, and trend should be exposed together so the summary remains understandable without divider lines or color cues."
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
}
|