@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,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "maintenance-board",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Maintenance Board",
|
|
7
|
+
"description": "Kanban-style maintenance ticket board with drag-and-drop between columns: new, assigned, in-progress, pending-parts, completed, closed.",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"patterns": {
|
|
10
|
+
"maintenance-ticket": "^1.0.0"
|
|
11
|
+
},
|
|
12
|
+
"styles": {},
|
|
13
|
+
"requires_core": {
|
|
14
|
+
"components": [
|
|
15
|
+
"Button",
|
|
16
|
+
"icon",
|
|
17
|
+
"Badge",
|
|
18
|
+
"Select"
|
|
19
|
+
],
|
|
20
|
+
"charts": []
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"components": [
|
|
24
|
+
"Button",
|
|
25
|
+
"icon",
|
|
26
|
+
"Badge",
|
|
27
|
+
"Select"
|
|
28
|
+
],
|
|
29
|
+
"default_preset": "board",
|
|
30
|
+
"presets": {
|
|
31
|
+
"board": {
|
|
32
|
+
"description": "Full Kanban board with drag-and-drop columns for each maintenance ticket status",
|
|
33
|
+
"components": [
|
|
34
|
+
"Button",
|
|
35
|
+
"icon",
|
|
36
|
+
"Badge",
|
|
37
|
+
"Select"
|
|
38
|
+
],
|
|
39
|
+
"layout": {
|
|
40
|
+
"layout": "horizontal",
|
|
41
|
+
"atoms": "_flex _gap4 _overflow[auto] _pb4",
|
|
42
|
+
"slots": {
|
|
43
|
+
"header": "Title, filters, view toggle",
|
|
44
|
+
"filters": "Property, priority, category, date range",
|
|
45
|
+
"columns": "Kanban columns with ticket cards",
|
|
46
|
+
"summary": "Open count, avg resolution time"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"list": {
|
|
51
|
+
"description": "Flat sortable list view of maintenance tickets with status badges and priority indicators",
|
|
52
|
+
"components": [
|
|
53
|
+
"Button",
|
|
54
|
+
"icon",
|
|
55
|
+
"Badge"
|
|
56
|
+
],
|
|
57
|
+
"layout": {
|
|
58
|
+
"layout": "stack",
|
|
59
|
+
"atoms": "_flex _col _gap2",
|
|
60
|
+
"slots": {
|
|
61
|
+
"header": "Title and controls",
|
|
62
|
+
"table": "Ticket table"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"mini": {
|
|
67
|
+
"description": "Compact dashboard widget showing column counts and most recent tickets at a glance",
|
|
68
|
+
"components": [
|
|
69
|
+
"Badge"
|
|
70
|
+
],
|
|
71
|
+
"layout": {
|
|
72
|
+
"layout": "stack",
|
|
73
|
+
"atoms": "_flex _col _gap3 _p4",
|
|
74
|
+
"slots": {
|
|
75
|
+
"header": "Title",
|
|
76
|
+
"counts": "Column counts",
|
|
77
|
+
"recent": "Recent tickets"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"default_layout": {
|
|
83
|
+
"layout": "horizontal",
|
|
84
|
+
"atoms": "_flex _gap4 _overflow[auto]",
|
|
85
|
+
"slots": {
|
|
86
|
+
"header": "Title and controls",
|
|
87
|
+
"columns": "Kanban columns"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"visual_brief": "Kanban board with horizontal columns for each maintenance status: New, Assigned, In Progress, Pending Parts, Completed, Closed. Each column has a header with the status name and a ticket count badge. Ticket cards within columns show a title, priority badge (urgent/high/normal/low), property name, and assignee avatar. Cards are draggable between columns. A header bar above the board contains the title, a search input, and an 'Add Ticket' button. The list preset displays tickets as a flat filtered list. Mini preset shows a compact status summary with counts per column.",
|
|
91
|
+
"responsive": {
|
|
92
|
+
"mobile": "Columns displayed one at a time with horizontal swipe or a dropdown status selector. Cards take full width. Drag-and-drop replaced by status-change action buttons.",
|
|
93
|
+
"tablet": "Three visible columns with horizontal scroll for the rest. Cards at comfortable size for touch.",
|
|
94
|
+
"desktop": "All columns visible in horizontal scroll or fixed layout. Drag-and-drop fully functional. Cards show all metadata."
|
|
95
|
+
},
|
|
96
|
+
"layout_hints": {
|
|
97
|
+
"workflow_priority": "Status columns are the primary structure. Search, filters, and summary counts support triage but should never compete with the board itself.",
|
|
98
|
+
"card_signal": "Each ticket card should make priority, property, and current owner obvious at a glance so the board remains operationally useful under load.",
|
|
99
|
+
"mobile_translation": "When drag-and-drop collapses on mobile, preserve the same workflow semantics through explicit status actions instead of faking a tiny board."
|
|
100
|
+
},
|
|
101
|
+
"motion": {
|
|
102
|
+
"micro": "Dragged cards, hovered columns, and active filters may sharpen or lift slightly to confirm manipulation.",
|
|
103
|
+
"transitions": "Column moves and status changes should feel direct and workmanlike, reinforcing board continuity rather than playful motion."
|
|
104
|
+
},
|
|
105
|
+
"interactions": [
|
|
106
|
+
"drag-reorder",
|
|
107
|
+
"click-select",
|
|
108
|
+
"animate-on-mount"
|
|
109
|
+
],
|
|
110
|
+
"accessibility": {
|
|
111
|
+
"role": "region",
|
|
112
|
+
"aria-label": "Maintenance board",
|
|
113
|
+
"keyboard": [
|
|
114
|
+
"Column navigation, ticket focus, and non-drag status changes should remain operable by keyboard."
|
|
115
|
+
],
|
|
116
|
+
"announcements": [
|
|
117
|
+
"Ticket title, priority, property, and status should be exposed semantically so the board remains understandable without color-only column meaning."
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
"composition": {
|
|
121
|
+
"MaintenanceBoard": "Container(d-section, flex-col) > [Header + FilterBar(d-control) + KanbanColumns]",
|
|
122
|
+
"Header": "Row(d-control, space-between) > [Title + SearchInput(d-control) + AddTicketButton(d-interactive)]",
|
|
123
|
+
"KanbanColumns": "Row(d-data, horizontal-scroll) > Column[]",
|
|
124
|
+
"Column": "Panel(d-surface, flex-col) > [ColumnHeader > [StatusName + CountBadge(d-annotation)] + TicketCard(d-surface, draggable)[]]",
|
|
125
|
+
"TicketCard": "Card(d-surface, hoverable) > [Title + PriorityBadge(d-annotation) + PropertyName(text-muted) + AssigneeAvatar?]"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "maintenance-ticket",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Maintenance Ticket",
|
|
7
|
+
"description": "Repair request form and display. Supports create (tenant-facing), view, and edit modes with photo upload and status tracking.",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"patterns": {},
|
|
10
|
+
"styles": {},
|
|
11
|
+
"requires_core": {
|
|
12
|
+
"components": [
|
|
13
|
+
"Button",
|
|
14
|
+
"icon",
|
|
15
|
+
"Badge",
|
|
16
|
+
"Input",
|
|
17
|
+
"Select",
|
|
18
|
+
"Textarea"
|
|
19
|
+
],
|
|
20
|
+
"charts": []
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"components": [
|
|
24
|
+
"Button",
|
|
25
|
+
"icon",
|
|
26
|
+
"Badge",
|
|
27
|
+
"Input",
|
|
28
|
+
"Select",
|
|
29
|
+
"Textarea"
|
|
30
|
+
],
|
|
31
|
+
"default_preset": "view",
|
|
32
|
+
"presets": {
|
|
33
|
+
"create": {
|
|
34
|
+
"description": "New ticket form (tenant-facing)",
|
|
35
|
+
"components": [
|
|
36
|
+
"Button",
|
|
37
|
+
"icon",
|
|
38
|
+
"Select",
|
|
39
|
+
"Textarea"
|
|
40
|
+
],
|
|
41
|
+
"layout": {
|
|
42
|
+
"layout": "stack",
|
|
43
|
+
"atoms": "_flex _col _gap4",
|
|
44
|
+
"slots": {
|
|
45
|
+
"header": "Title",
|
|
46
|
+
"property-unit": "Auto-filled for tenant",
|
|
47
|
+
"category": "Issue category dropdown",
|
|
48
|
+
"priority": "Priority level",
|
|
49
|
+
"description": "Issue description textarea",
|
|
50
|
+
"photos": "Photo upload",
|
|
51
|
+
"availability": "Preferred access times",
|
|
52
|
+
"submit": "Submit button"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"view": {
|
|
57
|
+
"description": "Read-only ticket details view with status timeline, photo gallery, and assignment info",
|
|
58
|
+
"components": [
|
|
59
|
+
"Button",
|
|
60
|
+
"icon",
|
|
61
|
+
"Badge"
|
|
62
|
+
],
|
|
63
|
+
"layout": {
|
|
64
|
+
"layout": "stack",
|
|
65
|
+
"atoms": "_flex _col _gap4",
|
|
66
|
+
"slots": {
|
|
67
|
+
"header": "Ticket ID, status badge",
|
|
68
|
+
"details": "Category, priority, description",
|
|
69
|
+
"photos": "Attached images",
|
|
70
|
+
"timeline": "Status updates, comments",
|
|
71
|
+
"assignment": "Assigned vendor/staff",
|
|
72
|
+
"resolution": "Resolution notes, completion date",
|
|
73
|
+
"actions": "Update status, assign, close"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"edit": {
|
|
78
|
+
"description": "Owner-facing ticket edit form with vendor assignment, internal notes, and status controls",
|
|
79
|
+
"components": [
|
|
80
|
+
"Button",
|
|
81
|
+
"icon",
|
|
82
|
+
"Select",
|
|
83
|
+
"Textarea"
|
|
84
|
+
],
|
|
85
|
+
"layout": {
|
|
86
|
+
"layout": "stack",
|
|
87
|
+
"atoms": "_flex _col _gap4",
|
|
88
|
+
"slots": {
|
|
89
|
+
"form": "Edit fields",
|
|
90
|
+
"assignment": "Assign to vendor",
|
|
91
|
+
"notes": "Internal notes",
|
|
92
|
+
"actions": "Save/cancel"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"recent": {
|
|
97
|
+
"description": "Recent tickets list for dashboard",
|
|
98
|
+
"components": [
|
|
99
|
+
"Badge"
|
|
100
|
+
],
|
|
101
|
+
"layout": {
|
|
102
|
+
"layout": "stack",
|
|
103
|
+
"atoms": "_flex _col _gap2",
|
|
104
|
+
"slots": {
|
|
105
|
+
"items": "Recent ticket rows"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"default_layout": {
|
|
111
|
+
"layout": "stack",
|
|
112
|
+
"atoms": "_flex _col _gap4",
|
|
113
|
+
"slots": {
|
|
114
|
+
"header": "Ticket header",
|
|
115
|
+
"details": "Ticket details",
|
|
116
|
+
"timeline": "Status timeline",
|
|
117
|
+
"actions": "Actions"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"visual_brief": "Ticket detail view with a header showing ticket ID, title, status badge (color-coded), and priority badge. The details section displays property, unit, category (plumbing, electrical, etc.), reporter name, and description text. A photo section shows uploaded images in a small gallery grid. A status timeline tracks the ticket lifecycle with timestamped entries (submitted, assigned, in-progress, completed). The create preset shows a form with title, category select, priority select, description textarea, and photo upload area. Action buttons include Assign, Update Status, and Close.",
|
|
121
|
+
"responsive": {
|
|
122
|
+
"mobile": "Single-column stacked layout. Photo gallery uses horizontal scroll. Timeline is vertical. Action buttons are full-width at the bottom.",
|
|
123
|
+
"tablet": "Standard layout with comfortable spacing. Photo gallery shows 2-3 thumbnails per row.",
|
|
124
|
+
"desktop": "Full layout with details and timeline side by side. Photo gallery in a grid. All actions visible in a toolbar."
|
|
125
|
+
},
|
|
126
|
+
"layout_hints": {
|
|
127
|
+
"ticket_priority": "Lead with the current state of the issue first: status, priority, property context, and the reported problem. Timeline, photos, and internal actions should deepen that understanding rather than compete with it.",
|
|
128
|
+
"create_vs_view": "Creation mode should emphasize clarity and reassurance for the reporter, while view/edit modes should emphasize operational tracking and ownership.",
|
|
129
|
+
"timeline_role": "Status history is supporting evidence of progress. Keep it structurally attached to the ticket rather than letting it feel like a separate activity feed."
|
|
130
|
+
},
|
|
131
|
+
"motion": {
|
|
132
|
+
"micro": "Status actions, attachments, and timeline states may sharpen slightly on hover or focus to clarify available controls.",
|
|
133
|
+
"transitions": "State changes and timeline expansion should feel direct and service-oriented rather than lively or decorative."
|
|
134
|
+
},
|
|
135
|
+
"interactions": [
|
|
136
|
+
"animate-on-mount"
|
|
137
|
+
],
|
|
138
|
+
"accessibility": {
|
|
139
|
+
"role": "region",
|
|
140
|
+
"aria-label": "Maintenance ticket",
|
|
141
|
+
"keyboard": [
|
|
142
|
+
"Header actions, ticket fields, attachments, and timeline items should be reachable in a logical top-to-bottom order."
|
|
143
|
+
],
|
|
144
|
+
"announcements": [
|
|
145
|
+
"Ticket title, status, priority, and property context should be exposed semantically so the repair state remains understandable without badge color alone."
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
"composition": {
|
|
149
|
+
"MaintenanceTicket": "Container(d-section, flex-col, gap-4) > [Header + Details + PhotoGallery? + StatusTimeline + Assignment? + Actions]",
|
|
150
|
+
"Header": "Row(d-surface) > [TicketID(mono-data) + Title + StatusBadge(d-annotation, color-coded) + PriorityBadge(d-annotation)]",
|
|
151
|
+
"Details": "Section(d-data) > [Category + Property + Reporter + Description]",
|
|
152
|
+
"PhotoGallery": "Grid(d-data) > Thumbnail(clickable)[]",
|
|
153
|
+
"StatusTimeline": "Track(d-data, vertical) > TimelineEntry(timestamped)[]",
|
|
154
|
+
"Actions": "Row(d-interactive) > [AssignButton + UpdateStatusButton + CloseButton(variant: ghost)]"
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "map-view",
|
|
3
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Map View",
|
|
7
|
+
"description": "An interactive geospatial map with pins, cluster bubbles, search radius overlay, info cards, and a list/map toggle for exploring location-based data.",
|
|
8
|
+
"category": "geospatial",
|
|
9
|
+
"tags": [
|
|
10
|
+
"2026",
|
|
11
|
+
"geospatial",
|
|
12
|
+
"map",
|
|
13
|
+
"pins",
|
|
14
|
+
"clusters",
|
|
15
|
+
"location",
|
|
16
|
+
"interactive"
|
|
17
|
+
],
|
|
18
|
+
"components": [
|
|
19
|
+
"MapCanvas",
|
|
20
|
+
"Pin",
|
|
21
|
+
"ClusterBubble",
|
|
22
|
+
"InfoCard",
|
|
23
|
+
"SearchRadius",
|
|
24
|
+
"MapControls",
|
|
25
|
+
"ListToggle"
|
|
26
|
+
],
|
|
27
|
+
"default_preset": "pins",
|
|
28
|
+
"presets": {
|
|
29
|
+
"pins": {
|
|
30
|
+
"description": "Individual location markers on the map, each clickable to reveal an info card with details — ideal for store locators and point-of-interest maps",
|
|
31
|
+
"layout": {
|
|
32
|
+
"layout": "spatial",
|
|
33
|
+
"atoms": "_relative _w100 _h100 _overflow-hidden"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"clusters": {
|
|
37
|
+
"description": "Grouped markers that merge into count bubbles at lower zoom levels, expanding into individual pins on zoom-in — suited for large datasets with thousands of points",
|
|
38
|
+
"layout": {
|
|
39
|
+
"layout": "spatial",
|
|
40
|
+
"atoms": "_relative _w100 _h100 _overflow-hidden"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"heatmap": {
|
|
44
|
+
"description": "Density-based gradient overlay showing concentration of data points, with warm colors for high density and cool colors for low — useful for analytics and coverage views",
|
|
45
|
+
"layout": {
|
|
46
|
+
"layout": "spatial",
|
|
47
|
+
"atoms": "_relative _w100 _h100 _overflow-hidden"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"route": {
|
|
51
|
+
"description": "A connected path drawn between ordered waypoints with directional indicators, distance labels, and turn-by-turn annotations — suited for delivery tracking and trip planning",
|
|
52
|
+
"layout": {
|
|
53
|
+
"layout": "spatial",
|
|
54
|
+
"atoms": "_relative _w100 _h100 _overflow-hidden"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"visual_brief": "A full-bleed interactive map occupying the entire container with no padding or border. The map tiles render a clean, modern cartographic style with muted terrain colors. Pins are 32px-tall accent-colored teardrop shapes with a white inner circle (12px) containing an icon or dot, casting a subtle drop shadow (0 2px 6px rgba(0,0,0,0.2)). On hover, a pin scales to 1.15 and emits a gentle pulsing ring (accent color at 30% opacity, expanding from 100% to 150% radius over 1.5s, infinite). Clicking a pin on desktop opens a floating info card — a 280px-wide d-surface card with border-radius-lg, positioned 8px above the pin with a small downward-pointing triangle tail connecting card to pin. The info card contains: a thumbnail image (full-width, 120px tall, border-radius-t-lg), a title (text-base font-semibold), a subtitle line (text-sm text-muted), and an action row with a primary button and a secondary icon button. On mobile, clicking a pin slides an info card up from the bottom edge as a 50%-height sheet with a drag handle at top. ClusterBubbles are circles whose diameter scales with count (40px for 2–10, 56px for 11–50, 72px for 51+), filled with accent color at 85% opacity, showing the count number in white bold text centered inside. Clusters have a subtle white 2px border. Clicking a cluster zooms the map to show all contained points. The search radius renders as a translucent circle (accent color at 10% fill, accent border at 40% opacity, 2px dashed stroke). Map controls are stacked vertically in the top-right corner: 36px pill-shaped buttons with white background, subtle shadow, and icon-only content (zoom in +, zoom out −, compass/north, locate-me crosshair). The list toggle is a segmented control (map icon | list icon) anchored to the top-left corner, 72px wide, with the active segment filled accent and inactive segment white. Switching to list view transitions the map out (slide left + fade) and a scrollable card list in (slide right + fade).",
|
|
59
|
+
"layout_hints": {
|
|
60
|
+
"container": "borderless",
|
|
61
|
+
"note": "This is a full-bleed map view. Do NOT wrap in a d-surface card. The map canvas fills its parent container entirely. Floating controls are absolutely positioned over the map.",
|
|
62
|
+
"pin_interaction": "Pins MUST have cursor: pointer. Hover state: scale(1.15) transition 150ms. Active/selected pin: stays scaled and shows the info card. Only one info card open at a time — selecting a new pin closes the previous card.",
|
|
63
|
+
"cluster_zoom": "When a cluster is clicked, the map should animate (300ms ease-in-out) to a bounding box that contains all points within that cluster.",
|
|
64
|
+
"info_card": "The info card MUST use d-surface with elevation. On desktop it floats above the pin with a CSS triangle pointer. On mobile it renders as a bottom sheet. Info card closes on outside click or Escape key."
|
|
65
|
+
},
|
|
66
|
+
"default_layout": {
|
|
67
|
+
"layout": "spatial",
|
|
68
|
+
"atoms": "_relative _w100 _h100 _overflow-hidden",
|
|
69
|
+
"slots": {
|
|
70
|
+
"map-canvas": "The primary map tile layer filling the entire container. Handles pan (click-drag or touch-drag), zoom (scroll wheel, pinch, or button controls), and rotation (optional, via compass control). Renders vector or raster tiles with a clean cartographic style — muted grays and blues for terrain, thin road lines, minimal labels. The canvas intercepts all pointer events except those on floating UI elements (controls, cards). Supports programmatic flyTo animations (500ms ease-in-out) when centering on a pin or cluster.",
|
|
71
|
+
"pin": "Repeating slot — one per location point. Each pin is absolutely positioned on the map at its lat/lng coordinate, rendered as a 32px-tall teardrop SVG shape filled with the accent color. The inner circle (12px diameter, white fill) can contain a category icon (restaurant, hotel, etc.) or a plain dot. Drop shadow: 0 2px 6px rgba(0,0,0,0.2). Hover: scale(1.15) with 150ms ease, plus a pulsing ring animation (accent at 30% opacity, expanding outward). Selected state: scale(1.15) locked, ring solid, info card visible. Pins must stay correctly positioned during pan and zoom. z-index: selected pin above all others.",
|
|
72
|
+
"cluster-bubble": "Repeating slot — one per cluster group. Rendered as a circle whose diameter scales with the number of contained points: 40px (2–10 items), 56px (11–50), 72px (51+). Background: accent color at 85% opacity. Border: 2px solid white. Text: count number in white, font-bold, text-sm (small clusters) or text-base (large clusters), centered. Hover: slight scale(1.08) with 150ms ease. Click: zoom to cluster bounds with 300ms animation. Clusters recalculate on zoom change — as zoom increases, clusters split into smaller groups or individual pins.",
|
|
73
|
+
"info-card": "A floating detail card shown when a pin is selected. Desktop: 280px-wide d-surface card with border-radius-lg and elevation (box-shadow: 0 4px 16px rgba(0,0,0,0.12)). Positioned 8px above the selected pin, horizontally centered on the pin. Has a small 8px CSS triangle pointing down toward the pin. Content layout: thumbnail image (full-width, 120px height, object-fit cover, border-radius top corners), then 12px padding containing title (text-base, font-semibold, single line truncate), subtitle (text-sm, text-muted, single line), and an action row (flex, justify-between) with a primary small button and a secondary icon button (bookmark/share). Mobile: renders as a bottom sheet sliding up from the bottom edge, 50% viewport height, with a 4px-wide 32px-long drag handle centered at top, same content layout but full-width. Close on outside click, swipe-down (mobile), or Escape.",
|
|
74
|
+
"search-radius": "A translucent circle overlay rendered on the map canvas, centered on the user's search location or current position. Fill: accent color at 10% opacity. Stroke: accent color at 40% opacity, 2px dashed. The radius scales proportionally with map zoom level, maintaining geographic accuracy. An optional label at the top of the circle shows the distance (e.g., '5 km'). The radius can be resized by dragging its edge (desktop) or via a range slider in controls (mobile).",
|
|
75
|
+
"map-controls": "A vertical stack of control buttons anchored to the top-right corner of the map, 12px from edges. Each button is 36px × 36px, white background, border-radius-full, box-shadow: 0 1px 4px rgba(0,0,0,0.1). Icons are 18px, text-muted color, hover: text-default. Stack order top-to-bottom: zoom-in (+), zoom-out (−), compass/north-up (rotates to match map bearing), locate-me (crosshair icon, pulses accent when active GPS tracking). Gap between buttons: 8px. On mobile, buttons increase to 44px for touch targets.",
|
|
76
|
+
"list-toggle": "A segmented control anchored to the top-left corner, 12px from edges. Two segments: map icon (grid/pin icon) and list icon (horizontal lines icon). Total width: 72px, height: 36px. Active segment: accent background, white icon. Inactive segment: white background, muted icon. border-radius-full, box-shadow matching map controls. Toggling to list view transitions the map out and renders a scrollable vertical list of location cards below the toggle. Toggling back transitions the list out and map in."
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"accessibility": {
|
|
80
|
+
"role": "application",
|
|
81
|
+
"aria-label": "Interactive map view",
|
|
82
|
+
"announcements": [
|
|
83
|
+
"Map centered on {location}",
|
|
84
|
+
"Showing {count} locations",
|
|
85
|
+
"Pin selected: {name}",
|
|
86
|
+
"Cluster expanded: {count} locations",
|
|
87
|
+
"Switched to {map|list} view",
|
|
88
|
+
"Search radius set to {distance}"
|
|
89
|
+
],
|
|
90
|
+
"keyboard": [
|
|
91
|
+
"Tab: cycle through pins and controls",
|
|
92
|
+
"Enter: select focused pin to open info card",
|
|
93
|
+
"Escape: close info card or deselect pin",
|
|
94
|
+
"Arrow keys: pan map in cardinal directions",
|
|
95
|
+
"+/-: zoom in/out",
|
|
96
|
+
"L: toggle list/map view",
|
|
97
|
+
"F: fit all pins in view"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
"responsive": {
|
|
101
|
+
"mobile": "Map fills viewport. Controls enlarge to 44px touch targets. Info card renders as bottom sheet instead of floating card. List toggle moves to bottom-center above the info card area. Pinch-to-zoom and drag-to-pan. Search radius adjustable via slider instead of edge-drag. Cluster tap zooms in rather than showing a popup.",
|
|
102
|
+
"tablet": "Full map with floating controls. Info card floats on landscape, bottom-sheet on portrait. Two-finger gestures for pan and zoom. Controls remain in top-right at 40px size. List view renders as a side panel (320px wide) instead of replacing the map.",
|
|
103
|
+
"desktop": "Full interactive map with hover states on pins and clusters. Info card floats above pins. Scroll-to-zoom, click-drag-to-pan. Controls in top-right. List toggle in top-left. List view renders as a side panel (360px) with the map shrinking to accommodate."
|
|
104
|
+
},
|
|
105
|
+
"motion": {
|
|
106
|
+
"micro": {
|
|
107
|
+
"pin-hover": "scale 1→1.15, 150ms ease-out",
|
|
108
|
+
"cluster-hover": "scale 1→1.08, 150ms ease-out",
|
|
109
|
+
"control-hover": "background-color fade 120ms ease"
|
|
110
|
+
},
|
|
111
|
+
"transitions": {
|
|
112
|
+
"info-card-open": "desktop: translateY(8px)→0 + opacity 0→1, 200ms ease-out. mobile: translateY(100%)→0, 300ms ease-out",
|
|
113
|
+
"info-card-close": "reverse of open, 150ms ease-in",
|
|
114
|
+
"list-toggle": "map: slideX(0)→(-100%) + fade. list: slideX(100%)→0 + fade. 300ms ease-in-out",
|
|
115
|
+
"fly-to": "map center + zoom interpolation 500ms ease-in-out",
|
|
116
|
+
"cluster-expand": "zoom to bounds 300ms ease-in-out"
|
|
117
|
+
},
|
|
118
|
+
"ambient": {
|
|
119
|
+
"pin-pulse": "ring scale 1→1.5 + opacity 0.3→0, 1.5s ease-out infinite on hover",
|
|
120
|
+
"locate-active": "accent border-color pulse 2s ease-in-out infinite when GPS tracking"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"interactions": [
|
|
124
|
+
"drag-nodes",
|
|
125
|
+
"pan-background",
|
|
126
|
+
"zoom-scroll",
|
|
127
|
+
"click-select",
|
|
128
|
+
"hover-tooltip",
|
|
129
|
+
"animate-on-mount"
|
|
130
|
+
],
|
|
131
|
+
"composition": {
|
|
132
|
+
"MapView": "Viewport(d-section, full-bleed) > [MapCanvas + Pin*(d-interactive) + ClusterBubble* + InfoCard?(d-surface) + SearchRadius? + MapControls + ListToggle]",
|
|
133
|
+
"MapCanvas": "TileLayer(zoomable, pannable, vector|raster)",
|
|
134
|
+
"Pin": "Marker(d-interactive, positioned-latlng) > [TeardropSVG(accent) + InnerIcon + PulseRing?]",
|
|
135
|
+
"ClusterBubble": "Marker(d-interactive, positioned-latlng) > [Circle(accent, scaled) + CountLabel(white, bold)]",
|
|
136
|
+
"InfoCard": "Card(d-surface, elevated) > [Thumbnail + Title + Subtitle + ActionRow]",
|
|
137
|
+
"MapControls": "Stack(d-control, vertical, top-right) > [ZoomIn + ZoomOut + Compass + LocateMe]",
|
|
138
|
+
"ListToggle": "SegmentedControl(d-control, top-left) > [MapIcon + ListIcon]"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "match-celebration",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Match Celebration",
|
|
7
|
+
"description": "Full-screen celebratory overlay that appears when two users match. A coral-to-violet radial burst, two avatars meeting in the center with a heart pop between them, an 'It's a Match!' headline, and two CTAs (Send Message / Keep Swiping). Optional auto-dismiss after 3-4s. Designed to be a magic moment — the dopamine pop that rewards the swipe loop.",
|
|
8
|
+
"category": "overlay",
|
|
9
|
+
"tags": [
|
|
10
|
+
"2026",
|
|
11
|
+
"modal",
|
|
12
|
+
"celebration",
|
|
13
|
+
"match",
|
|
14
|
+
"overlay",
|
|
15
|
+
"consumer",
|
|
16
|
+
"social"
|
|
17
|
+
],
|
|
18
|
+
"components": [
|
|
19
|
+
"MatchOverlay",
|
|
20
|
+
"Backdrop",
|
|
21
|
+
"BurstGradient",
|
|
22
|
+
"Confetti",
|
|
23
|
+
"AvatarPair",
|
|
24
|
+
"MyAvatar",
|
|
25
|
+
"TheirAvatar",
|
|
26
|
+
"HeartPop",
|
|
27
|
+
"Headline",
|
|
28
|
+
"Subtitle",
|
|
29
|
+
"ActionPair",
|
|
30
|
+
"MessageButton",
|
|
31
|
+
"KeepSwipingButton"
|
|
32
|
+
],
|
|
33
|
+
"default_preset": "first-match",
|
|
34
|
+
"presets": {
|
|
35
|
+
"first-match": {
|
|
36
|
+
"description": "Full-impact first-match celebration with confetti, burst gradient, avatar pair animation, and a delightful 'It's a Match!' headline. Auto-dismiss after 4s unless user interacts.",
|
|
37
|
+
"layout": {
|
|
38
|
+
"layout": "spatial",
|
|
39
|
+
"atoms": "_fixed _inset-0 _z-50 _flex _items-center _justify-center _bg-black/40"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"subsequent-match": {
|
|
43
|
+
"description": "Toned-down repeat-match overlay — same composition but no confetti and shorter animations. Avoids match-fatigue.",
|
|
44
|
+
"layout": {
|
|
45
|
+
"layout": "spatial",
|
|
46
|
+
"atoms": "_fixed _inset-0 _z-50 _flex _items-center _justify-center _bg-black/40"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"compact-toast": {
|
|
50
|
+
"description": "Subtle toast variant for ambient match notifications (e.g., when matched while not on the swipe screen). A small pill toast at the top with both avatars and 'New match!' label.",
|
|
51
|
+
"layout": {
|
|
52
|
+
"layout": "flex-row",
|
|
53
|
+
"atoms": "_fixed _top-4 _left-1/2 _-translate-x-1/2 _z-50 _flex _items-center _gap-3 _px-4 _py-2 _rounded-full _bg-surface _shadow-lg"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"visual_brief": "A full-screen overlay (position fixed, inset 0, z-index 50) that appears with a soft 240ms backdrop fade-in (background rgba(0,0,0,0.4)). At the visual center, the BurstGradient occupies the entire viewport — a radial-gradient(circle at 50% 50%, rgba(255,77,109,0.4) 0%, rgba(139,92,246,0.3) 40%, transparent 70%) — pulsing to life by scaling from 0.6 to 1.0 over 600ms with cubic-bezier(0.34, 1.56, 0.64, 1) spring. The burst slowly rotates 10deg over 4s in an infinite loop while visible — magic-without-distracting. Above the burst, in the first-match preset, a Confetti emitter showers small coral, violet, and peach paper-shaped pieces from the top of the viewport, falling with subtle physics over 2.4s. Centered in the viewport: AvatarPair — two circular avatars (96×96 each) framed with the swipecircle-photo-frame decorator (coral outer ring, cream inner gap, soft shadow). MyAvatar enters from the left, sliding in from translateX(-120%) to translateX(-32%) (offset to leave room for partner) over 480ms cubic-bezier(0.34, 1.56, 0.64, 1). TheirAvatar enters from the right, sliding from translateX(120%) to translateX(32%) over 480ms with the same easing — the avatars meet near each other but don't overlap. Between them, slightly above the visual center line, a HeartPop appears: a 32px Heart Lucide icon (filled, coral with a slight white inner ring) that scales from 0 to 1.2 to 1.0 over 480ms with bouncy spring + a slight rotation of -10deg to 10deg to 0deg for liveliness. Below the avatar pair, the Headline 'It's a Match!' renders in font-display, text-4xl, font-bold, color white with a 1px text-shadow. Below the headline, a Subtitle: '{name} liked you back.' (text-base, font-medium, color rgba(255,255,255,0.9)). 24px below the subtitle, the ActionPair: two side-by-side pill buttons with 12px gap. MessageButton (left, primary) — pill-shaped (swipecircle-pill decorator), coral fill, white text, label 'Send Message', a small Send Lucide icon (16px) at the leading edge. KeepSwipingButton (right, secondary) — pill-shaped with white border + transparent fill + white text, label 'Keep Swiping'. Both buttons enter with a stagger 240ms after the avatar arrival (opacity 0→1 + translateY(8px)→0). On dismiss (tap outside, hit Escape, or tap KeepSwipingButton), the overlay fades out over 240ms ease-in. If MessageButton is tapped, navigate to the chat thread. Auto-dismiss after 4000ms unless the user interacts. Reduced-motion mode: skip the rotate, slide-in becomes fade-in (no horizontal travel), confetti is disabled.",
|
|
58
|
+
"layout_hints": {
|
|
59
|
+
"container": "fixed full-viewport overlay",
|
|
60
|
+
"z_index": "50 — above bottom-tab-bar (40) but below toast notifications (60)",
|
|
61
|
+
"auto_dismiss": "4000ms default; pauses on hover or focus",
|
|
62
|
+
"reduced_motion": "Respect prefers-reduced-motion: no rotation, no confetti, fade-only entrance"
|
|
63
|
+
},
|
|
64
|
+
"default_layout": {
|
|
65
|
+
"layout": "spatial",
|
|
66
|
+
"atoms": "_fixed _inset-0 _z-50 _flex _items-center _justify-center _bg-black/40",
|
|
67
|
+
"slots": {
|
|
68
|
+
"match-overlay": "Outer container. Position fixed, inset 0, z-index 50. Background rgba(0,0,0,0.4) for backdrop dim. Flex centered. Pointer-events: auto. Carries role='alertdialog', aria-modal='true', aria-labelledby pointing to the Headline.",
|
|
69
|
+
"backdrop": "Implicit — the bg-black/40 of match-overlay serves as the backdrop. On click outside the inner content, dismisses the overlay.",
|
|
70
|
+
"burst-gradient": "Position absolute, inset 0, pointer-events: none. Background applies the swipecircle-match-burst decorator. Animates: scale(0.6)→scale(1) over 600ms cubic-bezier(0.34, 1.56, 0.64, 1), then rotate 0→10deg infinite linear over 4s.",
|
|
71
|
+
"confetti": "Conditional slot in first-match preset only. Position absolute, top 0, left 0, right 0, height 100%. Renders 24-40 confetti particles (small rectangles 6×10px in coral, violet, peach colors). Each particle has random horizontal start position, randomized fall duration 1.6-2.4s, slight horizontal drift, and rotation 0-720deg. Uses physics-based animation library or CSS keyframes. Pointer-events: none.",
|
|
72
|
+
"avatar-pair": "Center container. Flex-row, items-center, gap 8px, position relative, z-index above burst. Width auto, height 96px. Houses MyAvatar + HeartPop + TheirAvatar.",
|
|
73
|
+
"my-avatar": "96×96 circular avatar with the swipecircle-photo-frame decorator. Img fills the inner circle. Enters with slideInFromLeft animation: translateX(-120%) opacity 0 → translateX(-32%) opacity 1 over 480ms cubic-bezier(0.34, 1.56, 0.64, 1).",
|
|
74
|
+
"their-avatar": "96×96 circular avatar (same as MyAvatar). Enters with slideInFromRight: translateX(120%) opacity 0 → translateX(32%) opacity 1 over 480ms cubic-bezier(0.34, 1.56, 0.64, 1) with a 60ms delay from MyAvatar — adds slight stagger.",
|
|
75
|
+
"heart-pop": "32px filled Heart Lucide icon in coral with a 2px white inner ring. Position absolute, centered between the two avatars, z-index above avatars. Animates: scale(0) → scale(1.3) → scale(1.0) + rotate(-10deg) → rotate(10deg) → rotate(0deg) over 480ms cubic-bezier(0.34, 1.56, 0.64, 1) with a 240ms delay (after avatars start arriving).",
|
|
76
|
+
"headline": "'It's a Match!' h2 element. Font-family: var(--d-font-display). Font-size: 36px. Font-weight: 700. Color: white. Text-shadow: 0 1px 2px rgba(0,0,0,0.3). Margin-top: 32px. Text-align: center. Enters: opacity 0 + translateY(12px) → opacity 1 + translateY(0) over 320ms ease-out with 480ms delay (after avatars arrive).",
|
|
77
|
+
"subtitle": "Subtitle text under headline. Format: '{name} liked you back.' Font-size: 16px. Font-weight: 500. Color: rgba(255,255,255,0.9). Margin-top: 8px. Text-align: center. Enters with same animation as headline plus 60ms additional delay.",
|
|
78
|
+
"action-pair": "Container for the two CTAs. Flex-row, gap 12px, margin-top: 32px, justify-center. Both buttons enter with: opacity 0 + translateY(8px) → opacity 1 + translateY(0) over 320ms ease-out with 720ms delay.",
|
|
79
|
+
"message-button": "Primary CTA. Pill button (swipecircle-pill decorator), 'Send Message' label, leading 16px Send Lucide icon. On click: emit 'open-chat-thread' event with the matched user's id, then dismiss overlay.",
|
|
80
|
+
"keep-swiping-button": "Secondary CTA. Pill button with white 1.5px border, transparent fill, white text. 'Keep Swiping' label. On click: dismiss overlay (returns user to swipe deck)."
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"accessibility": {
|
|
84
|
+
"role": "alertdialog",
|
|
85
|
+
"aria-label": "Match celebration",
|
|
86
|
+
"keyboard": [
|
|
87
|
+
"Escape: dismiss the overlay (returns to swipe screen)",
|
|
88
|
+
"Tab: cycle focus between MessageButton and KeepSwipingButton",
|
|
89
|
+
"Enter or Space: activate the focused button"
|
|
90
|
+
],
|
|
91
|
+
"announcements": [
|
|
92
|
+
"It's a match with {name}!",
|
|
93
|
+
"{name} liked you back. Send a message or keep swiping.",
|
|
94
|
+
"Match celebration dismissed."
|
|
95
|
+
],
|
|
96
|
+
"focus_management": "On overlay open, focus moves to MessageButton (the recommended primary action). Focus is trapped within the overlay (Tab cycles only between the two buttons). On overlay close, focus returns to the previously-focused element (typically the swipe deck card or action button)."
|
|
97
|
+
},
|
|
98
|
+
"responsive": {
|
|
99
|
+
"mobile": "Stack layout. Avatars 80×80 instead of 96. Headline text-3xl. Action pair stacks vertically (flex-col, gap-3) on viewports under 360px wide.",
|
|
100
|
+
"tablet": "Stack layout. Default sizes (96×96 avatars, text-4xl headline). All animations active.",
|
|
101
|
+
"desktop": "Stack layout. Default sizes. Confetti uses higher particle count (60). Burst gradient extends further from center."
|
|
102
|
+
},
|
|
103
|
+
"motion": {
|
|
104
|
+
"micro": {
|
|
105
|
+
"burst-pulse": "scale 0.6→1.0 + opacity 0→0.7 over 600ms cubic-bezier(0.34, 1.56, 0.64, 1)",
|
|
106
|
+
"burst-rotate": "rotate 0→10deg over 4s linear infinite",
|
|
107
|
+
"avatar-meet-left": "translateX(-120%) opacity 0 → translateX(-32%) opacity 1 over 480ms cubic-bezier(0.34, 1.56, 0.64, 1)",
|
|
108
|
+
"avatar-meet-right": "translateX(120%) opacity 0 → translateX(32%) opacity 1 over 480ms cubic-bezier(0.34, 1.56, 0.64, 1), delayed 60ms",
|
|
109
|
+
"heart-pop": "scale 0→1.3→1.0 + rotate -10→10→0deg over 480ms cubic-bezier(0.34, 1.56, 0.64, 1), delayed 240ms",
|
|
110
|
+
"headline-arrive": "opacity 0 + translateY(12px) → opacity 1 + translateY(0) over 320ms ease-out, delayed 480ms",
|
|
111
|
+
"actions-arrive": "opacity 0 + translateY(8px) → opacity 1 + translateY(0) over 320ms ease-out, delayed 720ms, stagger 60ms between buttons"
|
|
112
|
+
},
|
|
113
|
+
"transitions": {
|
|
114
|
+
"overlay-enter": "Backdrop opacity 0→0.4 over 240ms ease-out (synchronous with start of all child animations)",
|
|
115
|
+
"overlay-exit": "Backdrop opacity 0.4→0 + content opacity 1→0 over 240ms ease-in. All child animations skipped on exit.",
|
|
116
|
+
"confetti-fall": "Each particle: translateY 0 → 100vh + translateX(±40px drift) + rotate(0-720deg) over 1.6-2.4s ease-in-out. Particles emit from top in waves over the first 800ms."
|
|
117
|
+
},
|
|
118
|
+
"reduced_motion": "When prefers-reduced-motion is set: skip burst-rotate, confetti, avatar slide-in (use fade-in only), and heart rotate (use scale-only). All durations capped at 240ms."
|
|
119
|
+
},
|
|
120
|
+
"interactions": [
|
|
121
|
+
"animate-on-mount",
|
|
122
|
+
"stagger-children",
|
|
123
|
+
"scale-hover",
|
|
124
|
+
"focus-trap",
|
|
125
|
+
"click-select"
|
|
126
|
+
],
|
|
127
|
+
"composition": {
|
|
128
|
+
"MatchCelebration": "MatchOverlay(fixed-inset, z-50, dimmed-bg) > [BurstGradient(absolute-fill) + Confetti(absolute-fill, conditional) + ContentStack(centered, flex-col)]",
|
|
129
|
+
"ContentStack": "Flex(col, items-center, gap-8) > [AvatarPair + Headline + Subtitle + ActionPair]",
|
|
130
|
+
"AvatarPair": "Flex(row, items-center, gap-2, relative) > [MyAvatar + HeartPop(absolute-center) + TheirAvatar]",
|
|
131
|
+
"ActionPair": "Flex(row, gap-3) > [MessageButton(primary-pill) + KeepSwipingButton(secondary-pill)]"
|
|
132
|
+
}
|
|
133
|
+
}
|