@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,131 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "api-explorer",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "API Explorer",
|
|
7
|
+
"description": "Interactive API documentation with a browsable endpoint list, parameter tables, a try-it-out request builder with editable JSON bodies, live response viewer, and multi-language code snippet generation.",
|
|
8
|
+
"category": "developer",
|
|
9
|
+
"tags": [
|
|
10
|
+
"2026",
|
|
11
|
+
"developer",
|
|
12
|
+
"api",
|
|
13
|
+
"documentation",
|
|
14
|
+
"rest",
|
|
15
|
+
"request-builder",
|
|
16
|
+
"explorer"
|
|
17
|
+
],
|
|
18
|
+
"components": [
|
|
19
|
+
"EndpointList",
|
|
20
|
+
"EndpointDetail",
|
|
21
|
+
"RequestBuilder",
|
|
22
|
+
"ResponseViewer",
|
|
23
|
+
"AuthConfig",
|
|
24
|
+
"ParameterTable",
|
|
25
|
+
"CodeSnippet"
|
|
26
|
+
],
|
|
27
|
+
"default_preset": "standard",
|
|
28
|
+
"presets": {
|
|
29
|
+
"standard": {
|
|
30
|
+
"description": "Two-panel layout with a left sidebar listing all endpoints and a right detail area showing the selected endpoint's documentation, request builder, and response viewer",
|
|
31
|
+
"layout": {
|
|
32
|
+
"layout": "row",
|
|
33
|
+
"atoms": "_flex _row _hfull _wfull _overflow-hidden"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"grouped": {
|
|
37
|
+
"description": "Endpoints organized by API resource with collapsible groups in the sidebar — each group shows the resource name and endpoint count, expanding to reveal individual endpoints within that resource",
|
|
38
|
+
"layout": {
|
|
39
|
+
"layout": "row",
|
|
40
|
+
"atoms": "_flex _row _hfull _wfull _overflow-hidden"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"minimal": {
|
|
44
|
+
"description": "Compact single-column reference layout without the sidebar — endpoints render as collapsible accordion sections in a scrollable list, each expanding to show method, path, parameters, and a condensed request/response example",
|
|
45
|
+
"layout": {
|
|
46
|
+
"layout": "stack",
|
|
47
|
+
"atoms": "_flex _col _wfull _overflow-y-auto _p4"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"visual_brief": "Two-panel layout with a left sidebar (280px wide) listing API endpoints and a right detail area filling the remaining width. The sidebar has a search input at the top and below it a scrollable list of endpoints grouped by resource (e.g., 'Users', 'Products', 'Orders'). Each resource group has a heading with the resource name and a count badge. Under each group, individual endpoints display as rows showing an HTTP method badge (GET as a green rounded pill, POST as a blue pill, PUT as an orange pill, DELETE as a red pill, PATCH as a purple pill) followed by the URL path in monospace text (e.g., '/users/{id}'). The currently selected endpoint row has an active background highlight. The right detail area shows the selected endpoint's documentation: a title with the HTTP method badge and full path, a description paragraph, a ParameterTable with columns for name, type (as a code-styled badge), required (red asterisk or green optional badge), and description. Below the parameter table is the RequestBuilder section: an editable JSON body area with syntax highlighting (for POST/PUT/PATCH methods), an auth configuration dropdown (None, Bearer Token, API Key, Basic Auth) with a token/key input field, and header key-value rows. A prominent 'Send' button with a play icon triggers the request. The ResponseViewer below shows: a status code badge (2xx green, 4xx amber, 5xx red) with the status text, a collapsible headers section showing response headers as key-value pairs, and the response body in a syntax-highlighted JSON viewer with line numbers. At the bottom, CodeSnippet tabs allow switching between curl, JavaScript (fetch), and Python (requests) with a copy-to-clipboard button on each tab. The minimal preset renders everything as a single scrollable page with accordion sections per endpoint.",
|
|
52
|
+
"layout_hints": {
|
|
53
|
+
"panel_balance": "Keep the endpoint index, request builder, and response viewer in a clear operational hierarchy. Do not let the request builder overpower the endpoint documentation itself.",
|
|
54
|
+
"response_focus": "The response viewer should feel like a trustworthy debugging surface, not a generic textarea dump. Keep status, headers, and body in a stable order.",
|
|
55
|
+
"mobile_fallback": "When the sidebar collapses on small screens, preserve the mental model of endpoint selection before request construction."
|
|
56
|
+
},
|
|
57
|
+
"default_layout": {
|
|
58
|
+
"layout": "row",
|
|
59
|
+
"atoms": "_flex _row _hfull _wfull _overflow-hidden",
|
|
60
|
+
"slots": {
|
|
61
|
+
"endpoint-list": "Left sidebar panel (280px fixed width) with a top search input for filtering endpoints by path or method, followed by a scrollable list of endpoint items. In grouped preset, items are nested under collapsible resource group headings. Each endpoint item shows an HTTP method badge (colored pill: GET=green, POST=blue, PUT=orange, DELETE=red, PATCH=purple) and the path in monospace. The active endpoint has a highlighted background. The sidebar has a subtle right border.",
|
|
62
|
+
"endpoint-detail": "Right content area filling the remaining width, scrollable vertically. Contains all documentation and interactive sections for the selected endpoint stacked vertically with comfortable spacing.",
|
|
63
|
+
"description-section": "Top of the detail area. Shows the endpoint title as a large heading with the HTTP method badge and full URL path. Below it, a description paragraph explaining what the endpoint does, followed by any notes or warnings as callout boxes.",
|
|
64
|
+
"parameter-table": "A data table listing all parameters (path, query, header, body). Columns: parameter name (monospace), location badge (path/query/header/body as small pills), type (code-styled, e.g., 'string', 'integer', 'object'), required indicator (red 'required' badge or gray 'optional'), default value if any, and a description. Rows alternate with subtle background striping. Nested object parameters indent with a tree-line guide.",
|
|
65
|
+
"request-builder": "Interactive section for constructing and sending requests. Contains: a URL bar showing the full resolved URL with editable path parameters highlighted in a distinct color, an AuthConfig dropdown and credential input, optional header rows (key-value pairs with add/remove), a JSON body editor with syntax highlighting and line numbers (visible for POST/PUT/PATCH), and a prominent 'Send' button (primary color, play icon) at the right. A loading spinner replaces the button while the request is in flight.",
|
|
66
|
+
"response-viewer": "Section showing the API response after sending a request. Header row: status code as a large colored badge (200 green, 201 green, 400 amber, 401 amber, 404 amber, 500 red) with status text. A toggle to show/hide response headers as a key-value list. The response body displayed in a syntax-highlighted JSON code block with line numbers, word-wrap toggle, and a copy button. If the response is an error, the viewer has a subtle red background tint.",
|
|
67
|
+
"code-snippet": "Tabbed section at the bottom showing auto-generated code examples for the current request configuration. Tabs: curl, JavaScript (using fetch API), Python (using requests library). Each tab shows a syntax-highlighted code block matching the current request parameters, headers, auth, and body. A copy-to-clipboard button in the top-right of each tab. Code updates live as the request builder configuration changes."
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"responsive": {
|
|
71
|
+
"mobile": "Single-column layout. Endpoint list renders as a top dropdown selector instead of a sidebar. Detail sections stack vertically with full width. JSON editor uses a compact height. Code snippets show one language at a time with a selector dropdown. Send button is sticky at the bottom of the viewport.",
|
|
72
|
+
"tablet": "Sidebar collapses to an icon-only mode (showing just method badges) that expands on tap. Detail area takes most of the width. Parameter table horizontally scrolls if needed. Response viewer and code snippets at full width.",
|
|
73
|
+
"desktop": "Full two-panel layout with 280px sidebar and spacious detail area. Parameter table displays all columns without truncation. JSON editor has generous height. Code snippet tabs are all visible. Hover effects on endpoint list items."
|
|
74
|
+
},
|
|
75
|
+
"motion": {
|
|
76
|
+
"micro": {
|
|
77
|
+
"endpoint-hover": "background-tint 100ms ease-out on sidebar items",
|
|
78
|
+
"method-badge": "subtle scale pulse on hover 150ms ease-out",
|
|
79
|
+
"send-button-hover": "background-lighten + scale(1.02) 150ms ease-out",
|
|
80
|
+
"copy-flash": "background flash green 300ms ease-out on successful clipboard copy"
|
|
81
|
+
},
|
|
82
|
+
"transitions": {
|
|
83
|
+
"endpoint-switch": "detail area crossfade 200ms ease-out when selecting a different endpoint",
|
|
84
|
+
"response-appear": "fade + slide-up 300ms ease-out when response arrives",
|
|
85
|
+
"group-expand": "max-height 0→auto + fade 250ms ease-out for resource group toggle",
|
|
86
|
+
"sidebar-collapse": "width 280px→60px 300ms ease-in-out on tablet sidebar toggle"
|
|
87
|
+
},
|
|
88
|
+
"ambient": {
|
|
89
|
+
"request-loading": "send button spinner rotation continuous while request is in flight"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"interactions": [
|
|
93
|
+
"animate-on-mount",
|
|
94
|
+
"click-select",
|
|
95
|
+
"inline-edit",
|
|
96
|
+
"hover-reveal",
|
|
97
|
+
"keyboard-navigation"
|
|
98
|
+
],
|
|
99
|
+
"composition": {
|
|
100
|
+
"APIExplorer": "Container(d-section, flex-row) > [EndpointList(d-surface) > EndpointItem*(d-interactive)] + EndpointDetail(d-surface) > [DescriptionSection + ParameterTable(d-data) + RequestBuilder(d-interactive) + ResponseViewer(d-data) + CodeSnippet(d-data)]",
|
|
101
|
+
"EndpointList": "Sidebar(d-surface, fixed-width, scrollable) > [SearchInput(d-control) + ResourceGroup* > EndpointItem*]",
|
|
102
|
+
"EndpointItem": "Row(d-interactive) > [MethodBadge(d-annotation, color: method) + PathLabel(mono)]",
|
|
103
|
+
"RequestBuilder": "Section(d-interactive) > [URLBar + AuthConfig(d-control) + HeaderRows? + BodyEditor?(d-data, syntax-highlighted) + SendButton(d-interactive)]",
|
|
104
|
+
"ResponseViewer": "Section(d-data) > [StatusBadge(d-annotation, color: statusCode) + HeadersToggle? + ResponseBody(d-data, syntax-highlighted, line-numbers)]",
|
|
105
|
+
"CodeSnippet": "Tabs(d-data) > [CurlTab + JavaScriptTab + PythonTab] > CodeBlock(syntax-highlighted, copyable)"
|
|
106
|
+
},
|
|
107
|
+
"accessibility": {
|
|
108
|
+
"role": "application",
|
|
109
|
+
"aria-label": "Interactive API documentation explorer with request builder",
|
|
110
|
+
"keyboard": [
|
|
111
|
+
"Arrow Up/Down: navigate endpoint list in sidebar",
|
|
112
|
+
"Enter: select focused endpoint and show its detail",
|
|
113
|
+
"Tab: move between interactive elements (search, parameters, body editor, send button)",
|
|
114
|
+
"Ctrl+Enter: send the current request",
|
|
115
|
+
"Ctrl+C: copy the current code snippet to clipboard",
|
|
116
|
+
"1-3: switch between code snippet tabs (curl, JS, Python)",
|
|
117
|
+
"Escape: close expanded response headers or resource groups",
|
|
118
|
+
"S: focus the endpoint search input",
|
|
119
|
+
"F: toggle fullscreen on the body editor or response viewer"
|
|
120
|
+
],
|
|
121
|
+
"announcements": [
|
|
122
|
+
"Endpoint selected: {method} {path}",
|
|
123
|
+
"Request sent to {method} {path}",
|
|
124
|
+
"Response received: {statusCode} {statusText}, {bodySize} bytes",
|
|
125
|
+
"Code snippet copied to clipboard: {language}",
|
|
126
|
+
"Parameter {name} is required, type {type}",
|
|
127
|
+
"Auth configured: {authType}",
|
|
128
|
+
"Showing {count} endpoints matching '{query}'"
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "api-key-row",
|
|
4
|
+
"version": "1.1.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "API Key Row",
|
|
7
|
+
"description": "API key management surface with responsive key rows/cards, masked key metadata, create-key workflow, copy/revoke actions, and a save-once creation banner.",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"patterns": {},
|
|
10
|
+
"styles": {},
|
|
11
|
+
"requires_core": {
|
|
12
|
+
"components": [
|
|
13
|
+
"Badge",
|
|
14
|
+
"Button",
|
|
15
|
+
"icon"
|
|
16
|
+
],
|
|
17
|
+
"charts": []
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"contained": false,
|
|
21
|
+
"components": [
|
|
22
|
+
"Badge",
|
|
23
|
+
"Button",
|
|
24
|
+
"icon"
|
|
25
|
+
],
|
|
26
|
+
"default_preset": "standard",
|
|
27
|
+
"presets": {
|
|
28
|
+
"standard": {
|
|
29
|
+
"description": "Full API key row with name, masked key, scope badges, dates, and copy/revoke actions.",
|
|
30
|
+
"components": [
|
|
31
|
+
"Badge",
|
|
32
|
+
"Button",
|
|
33
|
+
"icon"
|
|
34
|
+
],
|
|
35
|
+
"layout": {
|
|
36
|
+
"layout": "row",
|
|
37
|
+
"atoms": "_flex _aic _gap4 _px4 _py4 _borderb _bordermuted/10",
|
|
38
|
+
"slots": {
|
|
39
|
+
"key-icon": "Key icon indicator on the left",
|
|
40
|
+
"key-info": "Key name (_textsm _fontmedium) and masked key value (_textxs _mono _fgmuted) stacked vertically",
|
|
41
|
+
"scopes": "Horizontal row of scope Badge elements (read, write, org:read, org:write)",
|
|
42
|
+
"dates": "Created and last-used timestamps",
|
|
43
|
+
"actions": "Copy key Button and Revoke Button (destructive variant)"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"card": {
|
|
48
|
+
"description": "Card-style API key display for mobile-friendly layouts. Stacked vertically.",
|
|
49
|
+
"components": [
|
|
50
|
+
"Badge",
|
|
51
|
+
"Button",
|
|
52
|
+
"icon"
|
|
53
|
+
],
|
|
54
|
+
"layout": {
|
|
55
|
+
"layout": "stack",
|
|
56
|
+
"atoms": "_flex _col _gap3 _p4 _border _bordermuted/20 _r3",
|
|
57
|
+
"slots": {
|
|
58
|
+
"header": "Key name and masked value",
|
|
59
|
+
"scopes": "Scope badges row",
|
|
60
|
+
"meta": "Created and last-used dates",
|
|
61
|
+
"actions": "Copy and revoke buttons, full width"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"default_layout": {
|
|
67
|
+
"layout": "row",
|
|
68
|
+
"atoms": "_flex _aic _gap4 _px4 _py4 _borderb _bordermuted/10",
|
|
69
|
+
"slots": {
|
|
70
|
+
"key-icon": "Key icon",
|
|
71
|
+
"key-info": "Name and masked key",
|
|
72
|
+
"scopes": "Scope badges",
|
|
73
|
+
"dates": "Created and last-used",
|
|
74
|
+
"actions": "Copy and revoke buttons"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"visual_brief": "Single horizontal row with a key icon on the far left, followed by the key name in medium-weight text and a masked key value (e.g. 'sk-****...3f2a') in monospace below it. Scope badges (read, write) appear as small colored pills in the middle. Created and last-used dates render in muted small text. Copy and revoke action buttons sit on the far right, with revoke styled as a destructive variant. Rows are separated by bottom borders. The card preset stacks everything vertically inside a bordered card for mobile use.",
|
|
78
|
+
"responsive": {
|
|
79
|
+
"mobile": "Prefer the card preset — stacked vertical layout with wrapped scope badges and actions that sit beneath the key metadata instead of forcing a rigid table.",
|
|
80
|
+
"tablet": "Standard row or card-list layout is acceptable, but metadata should wrap before the key row overflows.",
|
|
81
|
+
"desktop": "Full row layout with clear separation between key info, scopes, dates, and actions."
|
|
82
|
+
},
|
|
83
|
+
"motion": {
|
|
84
|
+
"micro": "Copy and revoke controls may brighten or lift subtly on hover and focus, but the row itself should remain operational and stable.",
|
|
85
|
+
"transitions": "Reveal, creation-banner, and revoked-state changes should animate softly over 150-220ms without shifting the table rhythm."
|
|
86
|
+
},
|
|
87
|
+
"interactions": [
|
|
88
|
+
"inline-edit",
|
|
89
|
+
"click-select",
|
|
90
|
+
"hover-reveal"
|
|
91
|
+
],
|
|
92
|
+
"layout_hints": {
|
|
93
|
+
"row_layout": "Key icon (16px, muted) + key name + masked value + scope badges + date metadata + actions. On narrow widths, collapse into stacked cards before the metadata starts crowding.",
|
|
94
|
+
"reveal": "Click masked value to reveal for 5 seconds, then re-mask. Copy button copies full key.",
|
|
95
|
+
"create_form": "Inline form at top: text input for key name + scope controls + Create button (primary). Appears on 'New API Key' click.",
|
|
96
|
+
"creation_banner": "After key creation, surface a prominent one-time reveal banner with copy action and dismissal control. This banner should feel like a temporary alert card, not just a paragraph."
|
|
97
|
+
},
|
|
98
|
+
"accessibility": {
|
|
99
|
+
"role": "row",
|
|
100
|
+
"aria-label": "API key entry",
|
|
101
|
+
"keyboard": [
|
|
102
|
+
"Tab moves through reveal, copy, revoke, and scope controls in row order.",
|
|
103
|
+
"Keyboard users should be able to reveal and copy keys without relying on hover-only UI."
|
|
104
|
+
],
|
|
105
|
+
"announcements": [
|
|
106
|
+
"One-time key creation and reveal states should be announced clearly.",
|
|
107
|
+
"Revocation outcomes should be announced explicitly."
|
|
108
|
+
],
|
|
109
|
+
"focus_management": "Keep focus on the row or invoked action after copy or reveal events so the user does not lose context."
|
|
110
|
+
},
|
|
111
|
+
"composition": {
|
|
112
|
+
"ApiKeyWorkspace": "Stack > [WorkspaceHeader + CreatePanel? + CreationBanner? + ApiKeyRow[]]",
|
|
113
|
+
"ApiKeyRow": "Row(d-data-row, hoverable) > [KeyIcon + KeyInfo + ScopeBadges + DateInfo + Actions]",
|
|
114
|
+
"KeyInfo": "Stack(flex-col) > [KeyName(font-medium) + MaskedKey(mono-data, text-muted)]",
|
|
115
|
+
"ScopeBadges": "Row(gap-2) > Badge(d-annotation)[]",
|
|
116
|
+
"Actions": "Row(d-interactive) > [CopyButton(variant: ghost) + RevokeButton(variant: destructive)]",
|
|
117
|
+
"CreationBanner": "AlertCard(d-surface, success-tint) > [BannerTitle + FullKey(mono-data) + CopyAction + DismissAction]"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "ar-annotation",
|
|
3
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "AR Annotation",
|
|
7
|
+
"description": "Annotation overlay for marking up images, scenes, and spatial content with positioned hotspots, text labels, measurement lines, and A/B comparison sliders.",
|
|
8
|
+
"category": "spatial",
|
|
9
|
+
"tags": [
|
|
10
|
+
"2027",
|
|
11
|
+
"frontier",
|
|
12
|
+
"spatial",
|
|
13
|
+
"annotation",
|
|
14
|
+
"AR",
|
|
15
|
+
"overlay",
|
|
16
|
+
"measurement",
|
|
17
|
+
"comparison",
|
|
18
|
+
"interactive"
|
|
19
|
+
],
|
|
20
|
+
"components": [
|
|
21
|
+
"AnnotationCanvas",
|
|
22
|
+
"Hotspot",
|
|
23
|
+
"AnnotationLabel",
|
|
24
|
+
"MeasurementLine",
|
|
25
|
+
"CompareSlider",
|
|
26
|
+
"ZoomControls"
|
|
27
|
+
],
|
|
28
|
+
"default_preset": "hotspot",
|
|
29
|
+
"presets": {
|
|
30
|
+
"hotspot": {
|
|
31
|
+
"description": "Clickable pulsing circles positioned on an image or scene — each hotspot expands on hover/click to reveal a label card with title, description, and optional media",
|
|
32
|
+
"layout": {
|
|
33
|
+
"layout": "spatial",
|
|
34
|
+
"atoms": "_relative _w-full _overflow-hidden _rounded-lg"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"label": {
|
|
38
|
+
"description": "Positioned text labels with speech-bubble tails pointing to annotated elements — labels are always visible and can be dragged to reposition in edit mode",
|
|
39
|
+
"layout": {
|
|
40
|
+
"layout": "spatial",
|
|
41
|
+
"atoms": "_relative _w-full _overflow-hidden _rounded-lg"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"measurement": {
|
|
45
|
+
"description": "SVG line overlays with distance and area annotations — endpoints are draggable, measurement text updates in real-time as lines are adjusted",
|
|
46
|
+
"layout": {
|
|
47
|
+
"layout": "spatial",
|
|
48
|
+
"atoms": "_relative _w-full _overflow-hidden _rounded-lg"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"compare": {
|
|
52
|
+
"description": "A/B comparison slider splitting the view with a draggable vertical divider — shows before image on the left and after image on the right, with a handle for scrubbing",
|
|
53
|
+
"layout": {
|
|
54
|
+
"layout": "spatial",
|
|
55
|
+
"atoms": "_relative _w-full _overflow-hidden _rounded-lg"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"visual_brief": "A full-bleed container holding an image or scene as the base layer, with interactive annotation elements positioned absolutely on top using percentage-based coordinates (so annotations scale with the image). In hotspot mode: each hotspot is a 24px circle with a 2px solid accent-colored border and a translucent accent fill (10% opacity). A pulsing ring animation radiates outward (scale 1→2, opacity 1→0, 2s infinite) creating a radar-ping effect that draws attention. On hover, the hotspot scales to 1.2x with a 150ms ease-out transition. On click, a label card expands from the hotspot position: a rounded-lg surface (d-surface, shadow-lg, min-w-48, max-w-72, p-3) with a small 8px triangular tail/caret pointing from the card toward the hotspot center. The card contains: a title (text-sm, font-semibold), a description (text-xs, text-muted, line-clamp-3), and an optional thumbnail image (rounded-md, w-full, aspect-video, object-cover). The card enters with scale(0.8)→scale(1) + opacity 0→1 over 200ms spring. Clicking elsewhere or pressing Escape closes the card. Multiple hotspots can exist simultaneously; only one card is open at a time. In label mode: each annotation is a positioned speech-bubble card (d-surface, rounded-lg, shadow-md, p-2, text-xs). The card has a triangular tail (8px CSS triangle) pointing toward the annotated point. A thin line (1px, muted color) connects the tail tip to the exact annotated coordinate on the image. Labels are always visible (not hidden behind hotspots). In edit mode, labels can be dragged to reposition — a drag handle icon appears on hover. In measurement mode: SVG lines overlay the image. Each measurement consists of two endpoint circles (8px, filled accent) connected by a solid line (2px, accent color). At the midpoint of the line, a text element shows the measurement value ('142px', '3.2m', etc.) in a small pill (bg-surface, rounded-full, px-2, text-xs, font-mono, shadow-sm). Endpoints are draggable — as they move, the measurement text updates in real-time. Lines can be straight (distance) or form closed polygons (area). In compare mode: the container is split vertically. Left side shows the 'before' image, right side shows the 'after' image. A vertical divider line (2px, bg-accent) separates them, with a circular handle (32px, bg-surface, shadow-lg, border-2 border-accent) at its center. The handle is draggable left/right, clipping each image accordingly using clip-path. Two small labels ('Before' / 'After') appear at the top of each side in muted text. The divider defaults to 50% and can be scrubbed from 0% to 100%. ZoomControls appear in the bottom-right: a vertical stack of icon buttons (zoom-in, zoom-out, fit-to-view, each 32px circle, bg-surface, shadow-md). Pinch-to-zoom and scroll-to-zoom are also supported. The zoom applies a CSS transform: scale() to the entire annotation canvas, with transform-origin at the pinch/scroll center point.",
|
|
60
|
+
"layout_hints": {
|
|
61
|
+
"container": "block, aspect-ratio matches source image",
|
|
62
|
+
"note": "The AnnotationCanvas should match the source image's aspect ratio. All annotation positions use percentage coordinates (x: 0-100, y: 0-100) so they scale correctly when the container resizes. In responsive layouts, ensure the container width is fluid but the aspect ratio is preserved.",
|
|
63
|
+
"positioning": "Annotations use position: absolute with left/top as percentages. Transform: translate(-50%, -50%) centers the annotation on its coordinate point.",
|
|
64
|
+
"z_ordering": "Image layer: z-index 0. Measurement lines: z-index 1. Hotspots: z-index 2. Labels/Cards: z-index 3. ZoomControls: z-index 4. Compare divider: z-index 5.",
|
|
65
|
+
"zoom_bounds": "Zoom range: 0.5x to 4x. Default: 1x (fit to container). When zoomed in, the canvas becomes pannable via drag."
|
|
66
|
+
},
|
|
67
|
+
"default_layout": {
|
|
68
|
+
"layout": "spatial",
|
|
69
|
+
"atoms": "_relative _w-full _overflow-hidden _rounded-lg _bg-muted",
|
|
70
|
+
"slots": {
|
|
71
|
+
"annotation-canvas": "The root container wrapping the image and all annotation layers. Position: relative. Overflow: hidden. Border-radius: rounded-lg. The canvas applies CSS transform: scale(var(--zoom-level, 1)) with transition: transform 200ms ease-out for smooth zoom. Transform-origin dynamically set to the last zoom interaction point. The canvas contains three layers in order: (1) ImageLayer — the base image as an <img> or background-image, width: 100%, height: auto, object-fit: contain, pointer-events: none. (2) SVG overlay — a full-size SVG (position: absolute, inset: 0, width: 100%, height: 100%) containing measurement lines and hotspot pulse animations. (3) HTML annotation layer — position: absolute, inset: 0, containing Hotspot and AnnotationLabel elements positioned via percentage-based left/top.",
|
|
72
|
+
"hotspot": "Repeating slot — one per annotation point. A 24px circle (position: absolute, left/top as percentage, transform: translate(-50%, -50%)). The circle has: background: var(--d-accent) at 10% opacity, border: 2px solid var(--d-accent), border-radius: 50%, cursor: pointer. A ::after pseudo-element creates the pulse ring animation (position: absolute, inset: -4px, border: 2px solid var(--d-accent), border-radius: 50%, animation: pulse-ring 2s ease-out infinite). On hover: scale(1.2), background opacity increases to 20%, transition 150ms. On click: the hotspot triggers the opening of its associated AnnotationLabel card. The hotspot has a data-annotation-id attribute linking it to its label content. Active (expanded) hotspot: background opacity 30%, border-width 3px.",
|
|
73
|
+
"annotation-label": "A floating card that appears when a hotspot is clicked or always visible in label mode. Structure: d-surface container (position: absolute, rounded-lg, shadow-lg, p-3, min-w-48, max-w-72, z-index: 3). The card has a triangular tail (8×8px CSS border-triangle) on the edge closest to the associated hotspot. Tail direction is computed dynamically — if the hotspot is near the top of the canvas, the tail points up and the card appears below, and vice versa for all four directions. Card content: title (text-sm, font-semibold, mb-1), description (text-xs, text-muted, line-clamp-3), optional image (rounded-md, w-full, aspect-video, object-cover, mt-2). A small close button (16px, X icon, absolute top-right) dismisses the card in hotspot mode. In label mode, the card is always visible and has a thin connector line (1px, dashed, muted) from the tail tip to the annotation coordinate.",
|
|
74
|
+
"measurement-line": "Repeating slot — one per measurement. Rendered in the SVG overlay layer. Each measurement consists of: two circle endpoints (r: 4, fill: var(--d-accent), cursor: grab), a connecting line (stroke: var(--d-accent), stroke-width: 2, stroke-linecap: round), and a midpoint text label. The text label is a foreignObject containing a small pill (bg-surface, rounded-full, px-2 py-0.5, text-xs, font-mono, shadow-sm) showing the measurement value. Endpoints have hover state (r: 6, fill-opacity: 0.8) and are draggable — on drag, the line and label update in real-time. For polygon measurements (area), endpoints connect in sequence and the final endpoint connects back to the first, with a filled polygon (accent color at 5% opacity) showing the enclosed area. Area measurement displayed at the polygon centroid.",
|
|
75
|
+
"compare-slider": "A full-size overlay for A/B comparison. Two images (before and after) are stacked, each position: absolute, inset: 0, width: 100%, height: 100%, object-fit: contain. The 'after' image uses clip-path: inset(0 0 0 var(--split-position)) to reveal only the right portion. A vertical divider line (position: absolute, top: 0, bottom: 0, left: var(--split-position), width: 2px, bg-accent) marks the split. Centered on the divider: a circular handle (32px diameter, bg-surface, border: 2px solid var(--d-accent), shadow-lg, rounded-full, cursor: ew-resize, z-index: 5). The handle contains a left-right arrow icon (16px). Dragging the handle updates --split-position (0% to 100%) in real-time. Two labels ('Before' / 'After') in text-xs, font-medium, text-muted, bg-surface/80%, px-2 py-0.5, rounded sit at the top-left and top-right of their respective sides.",
|
|
76
|
+
"zoom-controls": "A vertical stack of icon buttons anchored to the bottom-right of the canvas (position: absolute, bottom: 12px, right: 12px, z-index: 4). Three buttons stacked vertically with gap-1: zoom-in (+ icon), zoom-out (- icon), fit-to-view (expand icon). Each button: 32px circle, bg-surface, border, shadow-md, rounded-full, cursor: pointer. Hover: bg-accent/10%, scale(1.05). Active: scale(0.95). Zoom-in increases scale by 0.25 (max 4x). Zoom-out decreases by 0.25 (min 0.5x). Fit-to-view resets to scale(1). A small zoom level badge (text-xs, font-mono, bg-surface, rounded, px-1) appears above the buttons showing current zoom ('1.5x') — visible only when zoom is not 1x."
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"accessibility": {
|
|
80
|
+
"role": "img",
|
|
81
|
+
"aria-label": "Annotated image with interactive markers",
|
|
82
|
+
"announcements": [
|
|
83
|
+
"Annotation: {title} at position {x}%, {y}%",
|
|
84
|
+
"Opened annotation: {title} — {description}",
|
|
85
|
+
"Closed annotation: {title}",
|
|
86
|
+
"Measurement: {value} between point A and point B",
|
|
87
|
+
"Zoom level: {level}x",
|
|
88
|
+
"Comparison slider at {position}%"
|
|
89
|
+
],
|
|
90
|
+
"keyboard": [
|
|
91
|
+
"Tab: cycle through hotspots/annotations in DOM order",
|
|
92
|
+
"Enter/Space: open annotation card for focused hotspot",
|
|
93
|
+
"Escape: close open annotation card",
|
|
94
|
+
"Arrow keys: nudge annotation position in edit mode (1% per keypress)",
|
|
95
|
+
"+/-: zoom in/out",
|
|
96
|
+
"0: reset zoom to fit",
|
|
97
|
+
"Left/Right arrows: move compare slider (when focused) by 5% increments"
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
"responsive": {
|
|
101
|
+
"mobile": "Hotspot size increases to 32px for touch targets. Label cards render full-width at the bottom of the canvas (sheet-style) instead of positioned near the hotspot. Measurement endpoints increase to 12px radius for touch. Compare slider handle increases to 44px. Zoom controls stack horizontally at bottom-center. Pinch-to-zoom supported natively.",
|
|
102
|
+
"tablet": "Hotspots at 28px. Label cards positioned near hotspots with dynamic tail direction. Full measurement interactivity with touch. Compare slider at standard 32px handle. Zoom via pinch and button controls."
|
|
103
|
+
},
|
|
104
|
+
"motion": {
|
|
105
|
+
"micro": {
|
|
106
|
+
"hotspot-hover": "scale(1.2) + bg-opacity increase, 150ms ease-out",
|
|
107
|
+
"zoom-button-hover": "scale(1.05) + bg-accent/10%, 150ms ease-out",
|
|
108
|
+
"compare-handle-hover": "scale(1.1) + shadow-elevation, 150ms"
|
|
109
|
+
},
|
|
110
|
+
"transitions": {
|
|
111
|
+
"label-open": "scale(0.8→1) + opacity(0→1), 200ms cubic-bezier(0.34, 1.56, 0.64, 1)",
|
|
112
|
+
"label-close": "scale(1→0.9) + opacity(1→0), 150ms ease-in",
|
|
113
|
+
"zoom-change": "transform: scale() 200ms ease-out",
|
|
114
|
+
"compare-slide": "clip-path update at 60fps (no transition — immediate for responsiveness)"
|
|
115
|
+
},
|
|
116
|
+
"ambient": {
|
|
117
|
+
"hotspot-pulse": "ring scale(1→2) + opacity(1→0), 2s ease-out infinite — radar ping effect",
|
|
118
|
+
"measurement-endpoint-idle": "subtle opacity oscillation (0.7→1→0.7) 3s ease-in-out infinite when not being dragged"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"interactions": [
|
|
122
|
+
"hover-tooltip",
|
|
123
|
+
"animate-on-mount",
|
|
124
|
+
"pan-background"
|
|
125
|
+
],
|
|
126
|
+
"composition": {
|
|
127
|
+
"ARAnnotation": "Canvas(d-section, relative, overflow-hidden, rounded-lg) > [ImageLayer + SVGOverlay + AnnotationLayer + ZoomControls]",
|
|
128
|
+
"ImageLayer": "Img(absolute, inset-0, w-full, h-full, object-contain, pointer-events-none)",
|
|
129
|
+
"SVGOverlay": "SVG(absolute, inset-0, w-full, h-full) > [MeasurementLine* + HotspotPulseRing*]",
|
|
130
|
+
"AnnotationLayer": "Div(absolute, inset-0) > [Hotspot*(d-interactive, positioned-%) + AnnotationLabel*(d-surface, positioned)]",
|
|
131
|
+
"Hotspot": "Div(absolute, 24px, circle, accent-border, pulsing) > ClickHandler → AnnotationLabel",
|
|
132
|
+
"AnnotationLabel": "Surface(d-surface, rounded-lg, shadow-lg, p-3) > [Title + Description + Image? + CloseButton?]",
|
|
133
|
+
"MeasurementLine": "SVG-Group > [Endpoint*(circle, draggable) + Line(stroke) + MidpointLabel(foreignObject, pill)]",
|
|
134
|
+
"CompareSlider": "Div(absolute, inset-0) > [BeforeImg + AfterImg(clipped) + Divider(vertical, accent) + Handle(circle, draggable)]",
|
|
135
|
+
"ZoomControls": "Stack(absolute, bottom-right, gap-1) > [ZoomIn + ZoomOut + FitToView] + ZoomBadge?"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "arrangement-canvas",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Arrangement Canvas",
|
|
7
|
+
"description": "Multi-track audio arrangement canvas with stem rows, waveform regions, automation lanes, beat grid, markers, collaborator cursors, and a moving playhead.",
|
|
8
|
+
"category": "music",
|
|
9
|
+
"tags": ["2026", "music", "daw", "arrangement", "waveform", "automation", "timeline"],
|
|
10
|
+
"components": ["TimeRuler", "StemTrackRow", "WaveformRegion", "AutomationLane", "BeatGrid", "MarkerFlag", "Playhead", "CollaboratorCursor"],
|
|
11
|
+
"default_preset": "session",
|
|
12
|
+
"presets": {
|
|
13
|
+
"session": {
|
|
14
|
+
"description": "Full arrangement editor for active production sessions with timeline ruler, stem rows, regions, automation lanes, and collaborator cursors",
|
|
15
|
+
"layout": { "layout": "stack", "atoms": "_relative _w-full _bg-surface _border _overflow-hidden" }
|
|
16
|
+
},
|
|
17
|
+
"preview": {
|
|
18
|
+
"description": "Read-only public preview of the arrangement canvas, suitable for marketing and showcase first viewports",
|
|
19
|
+
"layout": { "layout": "stack", "atoms": "_relative _w-full _bg-surface _border" }
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"visual_brief": "A serious commercial DAW arrangement view. A sticky time ruler spans the top with bar numbers, beat subdivisions, and section markers. Each track row has a compact fixed left header with stem color, name, mute/solo/arm controls, gain readout, and selected state. Timeline regions are clipped waveform blocks aligned to the beat grid, with subtle depth and no decorative glow overload. Automation lanes use fine amber/cyan curves with node points under selected rows. Marker flags identify Intro, Verse, Hook, Drop, and Bridge. The playhead is precise and spans every track. Collaborator cursors appear as named flags with thin vertical guides. The canvas must feel like the main product, not a placeholder chart.",
|
|
23
|
+
"default_layout": {
|
|
24
|
+
"layout": "stack",
|
|
25
|
+
"atoms": "_relative _w-full _bg-surface _border _overflow-hidden",
|
|
26
|
+
"slots": {
|
|
27
|
+
"time-ruler": "Top ruler with bar numbers, beat ticks, loop range, and marker flags.",
|
|
28
|
+
"track-stack": "Stack of stem rows. Each row preserves a fixed header plus horizontally scrollable timeline region.",
|
|
29
|
+
"waveform-region": "Colored clip blocks with waveform bars, trim handles, fade handles, and clip names.",
|
|
30
|
+
"automation-lane": "Attached lane showing parameter curve and draggable node points.",
|
|
31
|
+
"collaboration-layer": "Playhead and named collaborator cursors share the same time coordinate system."
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"composition": {
|
|
35
|
+
"ArrangementCanvas": "Root(application) > [TimeRuler + TrackStack + CollaborationLayer]",
|
|
36
|
+
"TrackStack": "Stack > StemTrackRow*",
|
|
37
|
+
"StemTrackRow": "Grid(track-header timeline) > [StemHeader + TimelineArea]",
|
|
38
|
+
"TimelineArea": "Relative > [BeatGrid + WaveformRegion* + AutomationLane? + Playhead + CollaboratorCursor*]"
|
|
39
|
+
},
|
|
40
|
+
"motion": {
|
|
41
|
+
"micro": {
|
|
42
|
+
"region-select": "selected region gains border glow and subtle lift in 120ms",
|
|
43
|
+
"automation-node-drag": "curve updates at pointer speed"
|
|
44
|
+
},
|
|
45
|
+
"ambient": {
|
|
46
|
+
"playhead": "playhead advances smoothly during playback",
|
|
47
|
+
"collaborator-cursors": "remote cursors ease to new positions within 160ms"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"interactions": ["click-select", "drag-nodes", "hover-tooltip", "real-time-updates", "keyboard-navigation", "pan-background", "zoom-scroll"],
|
|
51
|
+
"responsive": {
|
|
52
|
+
"mobile": {
|
|
53
|
+
"layout": "alternate-pattern",
|
|
54
|
+
"alternate_pattern_id": "arrangement-canvas",
|
|
55
|
+
"horizontal_scroll": true,
|
|
56
|
+
"hide_components": ["automation-lane-expanded", "secondary-markers"],
|
|
57
|
+
"notes": "Use horizontal timeline scroll with stable track row heights and fixed headers where possible. Keep transport and selected stem inspector available. Do not compress waveform regions until labels become unreadable."
|
|
58
|
+
},
|
|
59
|
+
"desktop": "Render full time ruler, fixed stem headers, visible automation lanes, markers, and collaborator cursors."
|
|
60
|
+
},
|
|
61
|
+
"accessibility": {
|
|
62
|
+
"role": "application",
|
|
63
|
+
"aria-label": "Audio arrangement canvas",
|
|
64
|
+
"keyboard": ["Space: play or pause", "Left/Right: nudge playhead", "M/S/R: mute, solo, or arm focused stem", "Delete: remove selected region", "A: toggle automation lane"],
|
|
65
|
+
"announcements": ["Selected region {name}", "Playhead at bar {bar}", "Automation node moved to {value}"]
|
|
66
|
+
},
|
|
67
|
+
"layout_hints": {
|
|
68
|
+
"temporal_alignment": "Every visual layer must align to one shared time grid.",
|
|
69
|
+
"mobile_survival": "Do not collapse the DAW into unreadable columns; allow intentional horizontal scroll and panel switching.",
|
|
70
|
+
"producer_signal": "The canvas should immediately read as an audio production tool, not a generic kanban or table."
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "ascii-chart",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "ASCII Chart",
|
|
7
|
+
"description": "ASCII and braille character-based charts for terminal-style data visualization.",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"patterns": {},
|
|
10
|
+
"styles": {
|
|
11
|
+
"terminal": "^1.0.0"
|
|
12
|
+
},
|
|
13
|
+
"requires_core": {
|
|
14
|
+
"components": [],
|
|
15
|
+
"charts": []
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"components": ["Text", "Container"],
|
|
19
|
+
"default_preset": "line",
|
|
20
|
+
"presets": {
|
|
21
|
+
"line": {
|
|
22
|
+
"description": "ASCII line chart with labeled axes, dot-and-dash data points, and optional series legend",
|
|
23
|
+
"components": [],
|
|
24
|
+
"layout": {
|
|
25
|
+
"layout": "stack",
|
|
26
|
+
"atoms": "_flex _col _mono _fggreen",
|
|
27
|
+
"slots": {
|
|
28
|
+
"title": "Chart title",
|
|
29
|
+
"chart": "ASCII line visualization",
|
|
30
|
+
"legend": "Series legend",
|
|
31
|
+
"axes": "X/Y axis labels"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"bar": {
|
|
36
|
+
"description": "Horizontal ASCII bar chart using block fill characters with value labels and color legend",
|
|
37
|
+
"components": [],
|
|
38
|
+
"layout": {
|
|
39
|
+
"layout": "stack",
|
|
40
|
+
"atoms": "_flex _col _mono _fggreen",
|
|
41
|
+
"slots": {
|
|
42
|
+
"title": "Chart title",
|
|
43
|
+
"bars": "Horizontal bar entries",
|
|
44
|
+
"legend": "Color/pattern legend"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"sparkline": {
|
|
49
|
+
"description": "Inline sparkline using braille characters",
|
|
50
|
+
"components": [],
|
|
51
|
+
"layout": {
|
|
52
|
+
"layout": "inline",
|
|
53
|
+
"atoms": "_inline _mono _fggreen",
|
|
54
|
+
"slots": {
|
|
55
|
+
"sparkline": "Braille character visualization"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"braille": {
|
|
60
|
+
"description": "High-resolution braille dot matrix chart",
|
|
61
|
+
"components": [],
|
|
62
|
+
"layout": {
|
|
63
|
+
"layout": "stack",
|
|
64
|
+
"atoms": "_flex _col _mono _fggreen",
|
|
65
|
+
"slots": {
|
|
66
|
+
"title": "Chart title",
|
|
67
|
+
"chart": "Braille dot visualization",
|
|
68
|
+
"axes": "Axis labels"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"default_layout": {
|
|
74
|
+
"layout": "stack",
|
|
75
|
+
"atoms": "_flex _col _mono _fggreen",
|
|
76
|
+
"slots": {
|
|
77
|
+
"title": "Chart title",
|
|
78
|
+
"chart": "ASCII visualization",
|
|
79
|
+
"legend": "Color/symbol legend",
|
|
80
|
+
"axes": "X/Y axis labels"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"features": [
|
|
84
|
+
"realtime-updates",
|
|
85
|
+
"multiple-series",
|
|
86
|
+
"configurable-dimensions",
|
|
87
|
+
"time-based-axis",
|
|
88
|
+
"value-labels"
|
|
89
|
+
],
|
|
90
|
+
"character_sets": {
|
|
91
|
+
"blocks": [
|
|
92
|
+
"█",
|
|
93
|
+
"▓",
|
|
94
|
+
"▒",
|
|
95
|
+
"░",
|
|
96
|
+
" "
|
|
97
|
+
],
|
|
98
|
+
"braille": "U+2800 to U+28FF",
|
|
99
|
+
"lines": [
|
|
100
|
+
"_",
|
|
101
|
+
".",
|
|
102
|
+
"-",
|
|
103
|
+
"~",
|
|
104
|
+
"^",
|
|
105
|
+
"*",
|
|
106
|
+
"|"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
"visual_brief": "Monospace terminal-style chart rendered entirely with ASCII and braille characters on a dark or transparent background. Green-on-dark color scheme by default. Line preset draws axes with pipe and dash characters, data points with dots and asterisks connected by line-drawing characters. Bar preset renders horizontal bars using block characters (full, three-quarter, half, quarter fills). Sparkline preset is a single inline row of braille dots. All presets include a chart title at top and axis labels along edges.",
|
|
110
|
+
"responsive": {
|
|
111
|
+
"mobile": "Chart width scales to container. Character count per row reduces. Sparkline preset preferred for inline metrics. Legend moves below chart.",
|
|
112
|
+
"tablet": "Standard chart dimensions. Side legend if space allows.",
|
|
113
|
+
"desktop": "Full-width charts with generous character grids. Legend renders beside the chart area."
|
|
114
|
+
},
|
|
115
|
+
"layout_hints": {
|
|
116
|
+
"chart_role": "This pattern is a terminal-native data summary. Keep labels, legend, and plot tightly coupled so the user reads it as one instrument rather than as styled text blocks.",
|
|
117
|
+
"character_density": "Preserve legibility of the character grid before adding extra annotations. On smaller widths, reduce series density rather than cramming more glyphs.",
|
|
118
|
+
"sparkline_use": "Sparkline mode should act as supportive inline telemetry, not as the primary analytical surface."
|
|
119
|
+
},
|
|
120
|
+
"motion": {
|
|
121
|
+
"micro": "Realtime updates may redraw or pulse subtly to indicate fresh data, but the chart should remain readable and stable.",
|
|
122
|
+
"transitions": "Data changes should feel like continuous terminal output rather than animated infographic motion."
|
|
123
|
+
},
|
|
124
|
+
"interactions": [
|
|
125
|
+
"animate-on-mount",
|
|
126
|
+
"real-time-updates"
|
|
127
|
+
],
|
|
128
|
+
"accessibility": {
|
|
129
|
+
"role": "img",
|
|
130
|
+
"aria-label": "ASCII chart",
|
|
131
|
+
"keyboard": [
|
|
132
|
+
"If the chart is interactive, keyboard focus should move to the chart summary or legend rather than each individual glyph."
|
|
133
|
+
],
|
|
134
|
+
"announcements": [
|
|
135
|
+
"Expose chart title, series names, and key value summaries semantically so the visualization is not dependent on character art alone."
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
}
|