@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,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "trade-modal",
|
|
3
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Trade Modal",
|
|
7
|
+
"description": "A trade execution modal for buying or selling securities with order-type selection, quantity/price inputs, live market info, estimated total calculation, fee breakdown, and order-preview confirmation before execution.",
|
|
8
|
+
"category": "finance",
|
|
9
|
+
"tags": [
|
|
10
|
+
"2026",
|
|
11
|
+
"finance",
|
|
12
|
+
"trading",
|
|
13
|
+
"modal",
|
|
14
|
+
"order-entry",
|
|
15
|
+
"execution",
|
|
16
|
+
"buy",
|
|
17
|
+
"sell"
|
|
18
|
+
],
|
|
19
|
+
"components": [
|
|
20
|
+
"OrderTypeTab",
|
|
21
|
+
"QuantityInput",
|
|
22
|
+
"PriceInput",
|
|
23
|
+
"EstimatedTotal",
|
|
24
|
+
"ConfirmButton",
|
|
25
|
+
"MarketInfo",
|
|
26
|
+
"DirectionToggle",
|
|
27
|
+
"FeeBreakdown",
|
|
28
|
+
"OrderPreview"
|
|
29
|
+
],
|
|
30
|
+
"default_preset": "buy",
|
|
31
|
+
"presets": {
|
|
32
|
+
"buy": {
|
|
33
|
+
"description": "Green-accented buy-side trade modal for market, limit, or stop purchases. Direction toggle locked to Buy. Confirm button uses success color scheme to reinforce purchase intent and prevent direction errors.",
|
|
34
|
+
"layout": {
|
|
35
|
+
"layout": "form",
|
|
36
|
+
"atoms": "_w100 _grid _gap4 _p5 _max-w-480"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"sell": {
|
|
40
|
+
"description": "Red-accented sell-side trade modal mirroring the buy preset with direction locked to Sell. Confirm button uses destructive color. Surfaces position-held indicator to ensure voluntary sale does not exceed current holdings.",
|
|
41
|
+
"layout": {
|
|
42
|
+
"layout": "form",
|
|
43
|
+
"atoms": "_w100 _grid _gap4 _p5 _max-w-480"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"limit": {
|
|
47
|
+
"description": "Order-type expanded preset showing both quantity and limit-price inputs side-by-side. Calculates estimated total live as price changes. Used when user wants explicit price control rather than market execution.",
|
|
48
|
+
"layout": {
|
|
49
|
+
"layout": "form",
|
|
50
|
+
"atoms": "_w100 _grid _gap4 _p5 _max-w-480"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"visual_brief": "A focused modal dialog rendered as a d-surface card floating centered over a backdrop-blur overlay, max-width 480px. Top of modal displays the security symbol in text-2xl bold mono-data ('AAPL') with company name in text-sm muted beneath, and a close X icon button in the top-right corner. A DirectionToggle appears as a two-segment pill (Buy/Sell) with the active side filled in accent color (success green for buy, destructive red for sell) and the inactive side ghosted. Below, OrderTypeTabs render as a three-segment underline-style tabstrip (Market / Limit / Stop) with the active tab showing a primary-colored underline and semibold label. The form body shows a QuantityInput with plus/minus steppers flanking a mono-data numeric input showing share count, labeled 'Quantity' above. When limit or stop is active, a PriceInput appears labeled 'Limit Price' or 'Stop Price' with a currency-symbol prefix and mono-data numeric field. MarketInfo sits as an inline callout row displaying 'Last: $178.42 | Bid: $178.40 | Ask: $178.44 | 24h: +1.23%' in compact d-annotation mono-data. The EstimatedTotal calculates live as 'Est. Total: $17,842.00' in text-lg semibold mono-data. A FeeBreakdown expands below as a small itemized list: 'Commission: $0.00, Exchange fee: $0.03, Total fees: $0.03'. An OrderPreview sub-card (secondary surface, subtle border) previews the complete order in human language: 'Buy 100 shares of AAPL at market, estimated $17,842.00'. Finally, a ConfirmButton spans the full width in the direction-appropriate color (success green for buy, destructive red for sell) with text like 'Place Buy Order' or 'Place Sell Order'. Button press opens a secondary confirmation dialog requiring a second explicit click. Validation warnings appear inline (insufficient balance, exceeds position) in amber or red annotation chips above the confirm button.",
|
|
55
|
+
"layout_hints": {
|
|
56
|
+
"container": "d-surface modal, centered, max-w-480, backdrop-blur",
|
|
57
|
+
"note": "Trade execution is irrevocable financial action. Two-step confirmation required. Color-code aggressively to prevent buy/sell direction errors. Always show estimated total and fees before confirm.",
|
|
58
|
+
"direction_colors": "Buy=success/emerald, Sell=destructive/red. These colors MUST be consistent across DirectionToggle, ConfirmButton, and EstimatedTotal emphasis. Color-code text and borders, not just fills.",
|
|
59
|
+
"market_info": "MarketInfo uses d-annotation with live-updating bid/ask/last. Refresh indicator (pulsing dot) shows data freshness. Stale data >5s triggers amber warning.",
|
|
60
|
+
"order_preview": "OrderPreview is a human-language restatement of the order parameters. Critical for preventing fat-finger errors. Must update live as inputs change.",
|
|
61
|
+
"fee_transparency": "FeeBreakdown MUST itemize every fee (commission, exchange, SEC, regulatory). Total fees visible before confirm. Never hide fees in footnotes."
|
|
62
|
+
},
|
|
63
|
+
"default_layout": {
|
|
64
|
+
"layout": "form",
|
|
65
|
+
"atoms": "_w100 _grid _gap4 _p5 _max-w-480",
|
|
66
|
+
"slots": {
|
|
67
|
+
"header": "Top section showing security symbol (mono-data text-2xl bold), company name (text-sm muted), and a close icon-button in the top-right corner. Optionally includes a position-held indicator showing current shares owned.",
|
|
68
|
+
"direction-toggle": "Two-segment pill toggle for Buy/Sell direction. Active side filled with direction-color (success for buy, destructive for sell). Determines color scheme of entire modal including ConfirmButton.",
|
|
69
|
+
"order-type-tabs": "Three-segment tabstrip (Market / Limit / Stop) with underline indicator on active tab. Tab selection shows/hides PriceInput and changes execution semantics.",
|
|
70
|
+
"quantity-input": "Numeric input with plus/minus steppers for share-count entry. Uses mono-data tabular-nums. Label above reads 'Quantity'. Validates against available balance (buy) or current position (sell).",
|
|
71
|
+
"price-input": "Conditional input (shown for Limit and Stop order types) with currency-symbol prefix and mono-data numeric field. Label above reads 'Limit Price' or 'Stop Price' based on active tab.",
|
|
72
|
+
"market-info": "Inline callout row displaying live market data: Last, Bid, Ask, and 24h change. Uses mono-data compact text. Pulsing indicator shows refresh freshness.",
|
|
73
|
+
"estimated-total": "Large-text calculated total (quantity × price) with fee-inclusive and fee-exclusive variants. Updates live as inputs change.",
|
|
74
|
+
"fee-breakdown": "Itemized fee list (commission, exchange, regulatory) in small d-annotation text. Expandable if fees are complex. Total fees always visible.",
|
|
75
|
+
"order-preview": "Secondary sub-card showing human-language restatement of the complete order. Updates live. Critical readback to prevent fat-finger errors.",
|
|
76
|
+
"confirm-button": "Full-width primary button in direction-appropriate color. Opens secondary confirmation dialog on first click. Only executes order after second explicit confirmation.",
|
|
77
|
+
"validation-warnings": "Inline chips above confirm button showing validation errors (insufficient balance, exceeds position, market closed). Color-coded amber (warning) or red (blocking)."
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"accessibility": {
|
|
81
|
+
"role": "dialog",
|
|
82
|
+
"aria-label": "Trade execution modal",
|
|
83
|
+
"announcements": [
|
|
84
|
+
"Order type changed to {type}",
|
|
85
|
+
"Estimated total: {total} including {fees} in fees",
|
|
86
|
+
"Warning: {message}",
|
|
87
|
+
"Order submitted — {direction} {quantity} shares of {symbol}"
|
|
88
|
+
],
|
|
89
|
+
"keyboard": [
|
|
90
|
+
"Tab: cycle through order-type tabs and inputs",
|
|
91
|
+
"Arrow Up/Down: adjust quantity stepper",
|
|
92
|
+
"Enter: advance to confirmation dialog from ConfirmButton",
|
|
93
|
+
"Escape: close modal without executing order",
|
|
94
|
+
"B/S: toggle Buy/Sell direction"
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
"responsive": {
|
|
98
|
+
"mobile": "Modal expands to full-screen sheet rising from bottom with rounded top corners. DirectionToggle and OrderTypeTabs remain at top. Inputs stack vertically with full-width. ConfirmButton sticky at bottom of sheet.",
|
|
99
|
+
"tablet": "Standard centered modal at max-w-480px. Minor padding adjustments."
|
|
100
|
+
},
|
|
101
|
+
"motion": {
|
|
102
|
+
"micro": {
|
|
103
|
+
"stepper-click": "button scale 1.0 to 0.95 to 1.0 80ms ease-out",
|
|
104
|
+
"tab-switch": "underline slide to active tab 200ms ease-out",
|
|
105
|
+
"direction-toggle": "pill-fill cross-fade 150ms ease-in-out"
|
|
106
|
+
},
|
|
107
|
+
"transitions": {
|
|
108
|
+
"modal-open": "scale 0.96 to 1.0 + fade 200ms spring",
|
|
109
|
+
"modal-close": "scale 1.0 to 0.96 + fade 150ms ease-in",
|
|
110
|
+
"preview-update": "OrderPreview text cross-fade 150ms ease-out on input change"
|
|
111
|
+
},
|
|
112
|
+
"ambient": {
|
|
113
|
+
"market-data-pulse": "MarketInfo freshness dot opacity 0.4 to 1.0 to 0.4 1s ease-in-out infinite",
|
|
114
|
+
"stale-data-warning": "MarketInfo border flash amber when data >5s stale"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"interactions": [
|
|
118
|
+
"animate-on-mount",
|
|
119
|
+
"focus-trap",
|
|
120
|
+
"keyboard-navigation"
|
|
121
|
+
],
|
|
122
|
+
"composition": {
|
|
123
|
+
"TradeModal": "Modal(d-surface, backdrop-blur, max-w-480) > [Header + DirectionToggle + OrderTypeTab[] + QuantityInput + PriceInput? + MarketInfo + EstimatedTotal + FeeBreakdown + OrderPreview + ValidationWarnings? + ConfirmButton]",
|
|
124
|
+
"DirectionToggle": "Toggle(d-control, data-direction) > [BuySegment + SellSegment]",
|
|
125
|
+
"OrderTypeTab": "Tab(d-control, data-order-type, data-active?) > [TabLabel + ActiveUnderline?]",
|
|
126
|
+
"QuantityInput": "Input(d-control, data-numeric) > [DecrementStepper + NumericField + IncrementStepper]",
|
|
127
|
+
"PriceInput": "Input(d-control, data-currency) > [CurrencySymbol + NumericField]",
|
|
128
|
+
"MarketInfo": "Row(d-annotation) > [LastPrice + BidAsk + ChangePercent + FreshnessDot]",
|
|
129
|
+
"EstimatedTotal": "Callout(d-annotation, data-total) > [TotalLabel + TotalValue]",
|
|
130
|
+
"ConfirmButton": "Button(d-control, data-direction-color, full-width) > [ButtonLabel]"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "transcript-stream",
|
|
3
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Transcript Stream",
|
|
7
|
+
"description": "Real-time speech-to-text transcription display with speaker attribution, timestamps, confidence indicators, and multiple layout modes including continuous scroll, segmented blocks, and subtitle overlay.",
|
|
8
|
+
"category": "voice",
|
|
9
|
+
"tags": [
|
|
10
|
+
"2027",
|
|
11
|
+
"frontier",
|
|
12
|
+
"voice",
|
|
13
|
+
"transcription",
|
|
14
|
+
"speech-to-text",
|
|
15
|
+
"real-time",
|
|
16
|
+
"streaming",
|
|
17
|
+
"accessibility"
|
|
18
|
+
],
|
|
19
|
+
"components": [
|
|
20
|
+
"TranscriptContainer",
|
|
21
|
+
"TranscriptSegment",
|
|
22
|
+
"SpeakerLabel",
|
|
23
|
+
"TimestampBadge",
|
|
24
|
+
"ConfidenceIndicator",
|
|
25
|
+
"LiveCursor"
|
|
26
|
+
],
|
|
27
|
+
"default_preset": "stream",
|
|
28
|
+
"presets": {
|
|
29
|
+
"stream": {
|
|
30
|
+
"description": "Continuous vertical scroll of transcription text — words appear one by one as recognized, auto-scrolling to keep latest text visible at the bottom",
|
|
31
|
+
"layout": {
|
|
32
|
+
"layout": "stack",
|
|
33
|
+
"atoms": "_flex _flex-col _gap-3 _overflow-y-auto _scroll-smooth _p-4"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"segmented": {
|
|
37
|
+
"description": "Timestamped blocks grouped by speaker turns — each block is a discrete card with speaker label, timestamp range, and full utterance text for easy scanning",
|
|
38
|
+
"layout": {
|
|
39
|
+
"layout": "stack",
|
|
40
|
+
"atoms": "_flex _flex-col _gap-4 _overflow-y-auto _scroll-smooth _p-4"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"subtitle": {
|
|
44
|
+
"description": "Bottom-centered overlay with translucent dark background — max 2 lines of text, centered alignment, auto-fades old text as new speech arrives, optimized for video/media overlays",
|
|
45
|
+
"layout": {
|
|
46
|
+
"layout": "flex",
|
|
47
|
+
"atoms": "_fixed _bottom-0 _left-0 _right-0 _flex _justify-center _p-4 _pointer-events-none"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"visual_brief": "A vertically scrolling transcript where text appears word-by-word in real time as speech is transcribed. In stream mode: the container is a full-height scrollable area with a subtle left border accent. Each segment occupies a row — on the left side, a colored dot (10px circle, unique color per speaker derived from a hash of the speaker name) followed by the speaker's name in text-xs font-medium. The transcribed text flows inline to the right of the speaker label, with words appearing one at a time with a very brief fade-in (opacity 0→1 over 100ms). On the far right, a muted timestamp (text-xs, text-muted, tabular-nums) shows HH:MM:SS. The LiveCursor is a 2px-wide vertical bar in accent color, positioned immediately after the last transcribed word, blinking with a 1s opacity animation (1→0→1). Low-confidence words (below 0.7 threshold) render with a dotted underline (text-decoration: underline dotted var(--d-warning)) and slightly reduced opacity (0.7). Hovering a low-confidence word shows a tooltip with the confidence score and alternative hypotheses. The container auto-scrolls to the bottom on each new word, but pauses auto-scroll if the user manually scrolls up (with a 'Jump to latest' pill button appearing at the bottom). In segmented mode: each speaker turn is a distinct card (d-surface, rounded-lg, p-3). The card header shows the speaker dot + name on the left and a timestamp range ('2:04 – 2:18') on the right. The card body contains the full utterance text in text-sm. Cards stack vertically with gap-4. In subtitle mode: text renders in a centered box (max-width 80%, bg-black/75%, backdrop-blur-sm, rounded-lg, px-4 py-2). Text is white, text-base, font-medium, text-center. Maximum 2 lines — older text fades out as new text pushes in. No speaker labels; no timestamps. The container is positioned fixed at the bottom of the viewport.",
|
|
52
|
+
"layout_hints": {
|
|
53
|
+
"container": "block, full-height recommended for stream/segmented; fixed overlay for subtitle",
|
|
54
|
+
"note": "For stream and segmented modes, the container should fill available height to enable scrolling. For subtitle mode, use position:fixed or position:absolute relative to a media player container.",
|
|
55
|
+
"auto_scroll": "Implement scroll-anchoring: auto-scroll to bottom on new content, but disengage when user scrolls up. Show a 'Jump to latest' button (small pill, bottom-center of container) when disengaged.",
|
|
56
|
+
"speaker_colors": "Generate deterministic colors per speaker by hashing the speaker ID through a palette of 8 distinct hues. Ensure sufficient contrast against background.",
|
|
57
|
+
"performance": "For long transcripts (>1000 segments), implement virtualized scrolling to maintain performance. Only render segments within the visible viewport plus a 200px buffer."
|
|
58
|
+
},
|
|
59
|
+
"default_layout": {
|
|
60
|
+
"layout": "stack",
|
|
61
|
+
"atoms": "_flex _flex-col _gap-3 _overflow-y-auto _scroll-smooth _p-4 _h-full",
|
|
62
|
+
"slots": {
|
|
63
|
+
"transcript-container": "The outer scrollable container holding all transcript segments. Uses overflow-y: auto with scroll-behavior: smooth. Has a subtle left border (3px solid var(--d-accent) at 20% opacity) to visually anchor the timeline. The container listens for scroll events to detect user-initiated scrolling vs programmatic auto-scroll. When the user scrolls more than 100px above the bottom, auto-scroll disengages and a floating 'Jump to latest' pill appears (position: sticky, bottom: 8px, center-aligned, bg-accent, text-accent-foreground, rounded-full, px-3 py-1, text-xs, shadow-md, cursor-pointer). Clicking the pill scrolls to bottom and re-engages auto-scroll.",
|
|
64
|
+
"transcript-segment": "Repeating slot — one per speaker utterance or continuous speech block. In stream mode: a horizontal flex row (items-start, gap-2). Left column (flex-shrink-0, w-28): SpeakerLabel. Center column (flex-1, min-w-0): the transcribed text, rendered as inline spans — each word is its own span element to enable per-word fade-in animation and per-word confidence styling. Right column (flex-shrink-0, w-16, text-right): TimestampBadge. The segment has a subtle bottom border (1px solid var(--d-border) at 30% opacity) separating it from the next segment. Padding: py-2. In segmented mode: each segment is wrapped in a d-surface card (rounded-lg, p-3, shadow-sm). The header row contains SpeakerLabel (left) and TimestampBadge showing range (right). The body row below contains the full utterance text in text-sm with normal line-height.",
|
|
65
|
+
"speaker-label": "A horizontal flex element (items-center, gap-1.5) showing a colored dot (10px circle, border-radius-full, flex-shrink-0) and the speaker's name (text-xs, font-medium, truncate, max-w-24). The dot color is deterministic per speaker, derived from hashing the speaker identifier through a curated palette of 8 high-contrast colors. When a speaker is currently speaking, the dot has a pulse animation (scale 1→1.2→1, 1.5s, infinite). The name truncates with ellipsis if longer than the allotted width.",
|
|
66
|
+
"timestamp-badge": "A small inline badge displaying the segment's timestamp in HH:MM:SS or M:SS format. Uses text-xs, font-mono, tabular-nums, text-muted styling. In segmented mode, shows a range ('2:04 – 2:18'). In stream mode, shows the start time of the segment. In subtitle mode, timestamps are hidden entirely. The badge is flex-shrink-0 to prevent wrapping.",
|
|
67
|
+
"confidence-indicator": "Applied per-word as a conditional styling modifier rather than a separate visual element. Words with confidence score below 0.7 receive: opacity 0.7, text-decoration underline dotted with var(--d-warning) color, cursor help. On hover, a small tooltip (d-annotation, positioned above the word) shows 'Confidence: 62%' and up to 3 alternative transcriptions ('Did you mean: alternative1, alternative2?'). Words above 0.7 confidence have no special styling.",
|
|
68
|
+
"live-cursor": "A blinking vertical bar (2px wide, 1em tall) in var(--d-accent) color, positioned inline immediately after the last transcribed word. Blinks with a CSS animation: opacity 1→0→1 over 1s, steps(2) timing for a classic cursor blink. When speech pauses for more than 2 seconds, the cursor fades out (opacity→0 over 500ms). When speech resumes, it fades back in. In subtitle mode, the cursor is hidden — replaced by a subtle ellipsis animation ('...') appended to the last word during active speech."
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"accessibility": {
|
|
72
|
+
"role": "log",
|
|
73
|
+
"aria-label": "Live transcription",
|
|
74
|
+
"aria-live": "polite",
|
|
75
|
+
"announcements": [
|
|
76
|
+
"New speaker: {speaker_name}",
|
|
77
|
+
"{speaker_name} said: {text}",
|
|
78
|
+
"Transcription paused",
|
|
79
|
+
"Transcription resumed",
|
|
80
|
+
"Low confidence word detected: {word}"
|
|
81
|
+
],
|
|
82
|
+
"keyboard": [
|
|
83
|
+
"Tab: move between segments",
|
|
84
|
+
"Arrow Up/Down: scroll through transcript",
|
|
85
|
+
"Home: jump to beginning of transcript",
|
|
86
|
+
"End: jump to latest transcript (re-engage auto-scroll)",
|
|
87
|
+
"Enter: expand segment to show confidence details",
|
|
88
|
+
"Escape: close confidence tooltip"
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"responsive": {
|
|
92
|
+
"mobile": "Speaker labels collapse to dot-only (name hidden) to save horizontal space. Timestamps hidden in stream mode — available on tap. Subtitle mode uses max-width: 95% and text-sm. Segments use full-width layout. Touch: tap a segment to reveal timestamp and confidence info.",
|
|
93
|
+
"tablet": "Full speaker labels shown. Segmented mode cards have comfortable padding. Subtitle mode at max-width: 70%. Timestamp always visible."
|
|
94
|
+
},
|
|
95
|
+
"motion": {
|
|
96
|
+
"micro": {
|
|
97
|
+
"word-appear": "opacity 0→1 over 100ms ease-out, per word as it is transcribed",
|
|
98
|
+
"confidence-hover": "tooltip fade-in 150ms ease-out on hover"
|
|
99
|
+
},
|
|
100
|
+
"transitions": {
|
|
101
|
+
"segment-enter": "translateY(8px) + opacity 0 → translateY(0) + opacity 1 over 200ms ease-out",
|
|
102
|
+
"auto-scroll-pill": "translateY(20px) + opacity 0 → translateY(0) + opacity 1 over 200ms ease-out",
|
|
103
|
+
"preset-switch": "crossfade 300ms ease-in-out"
|
|
104
|
+
},
|
|
105
|
+
"ambient": {
|
|
106
|
+
"live-cursor-blink": "opacity steps(2) 1s infinite",
|
|
107
|
+
"speaker-dot-pulse": "scale(1→1.2→1) 1.5s ease-in-out infinite when speaker is active",
|
|
108
|
+
"subtitle-text-cycle": "old line slides up + fades out, new line slides up from below, 250ms ease-out"
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"interactions": [
|
|
112
|
+
"animate-on-mount",
|
|
113
|
+
"stagger-children",
|
|
114
|
+
"real-time-updates",
|
|
115
|
+
"scroll-reveal"
|
|
116
|
+
],
|
|
117
|
+
"composition": {
|
|
118
|
+
"TranscriptStream": "Section(d-section, flex-col, overflow-y-auto, scroll-smooth) > TranscriptSegment*(d-surface?) > [...content] + LiveCursor",
|
|
119
|
+
"TranscriptSegment": "Row(flex, items-start, gap-2) > [SpeakerLabel + TranscriptText(inline spans) + TimestampBadge + ConfidenceIndicator?]",
|
|
120
|
+
"SpeakerLabel": "Flex(items-center, gap-1.5) > [Dot(10px, bg-speaker-color, pulse?) + Name(text-xs, font-medium, truncate)]",
|
|
121
|
+
"TimestampBadge": "Span(text-xs, font-mono, tabular-nums, text-muted) > TimeString",
|
|
122
|
+
"ConfidenceIndicator": "Tooltip(d-annotation, on-hover) > [Score + Alternatives?]",
|
|
123
|
+
"LiveCursor": "Span(inline, 2px-wide, 1em-tall, bg-accent, blink-animation)"
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "tree-view",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Tree View",
|
|
7
|
+
"description": "File/data tree with ASCII connectors for hierarchical navigation.",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"patterns": {},
|
|
10
|
+
"styles": {
|
|
11
|
+
"terminal": "^1.0.0"
|
|
12
|
+
},
|
|
13
|
+
"requires_core": {
|
|
14
|
+
"components": [
|
|
15
|
+
"icon"
|
|
16
|
+
],
|
|
17
|
+
"charts": []
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"components": [
|
|
21
|
+
"icon"
|
|
22
|
+
],
|
|
23
|
+
"default_preset": "standard",
|
|
24
|
+
"presets": {
|
|
25
|
+
"standard": {
|
|
26
|
+
"description": "Expandable tree with ASCII connectors",
|
|
27
|
+
"components": [
|
|
28
|
+
"icon"
|
|
29
|
+
],
|
|
30
|
+
"layout": {
|
|
31
|
+
"layout": "stack",
|
|
32
|
+
"atoms": "_flex _col _mono _fggreen _overflow[auto]",
|
|
33
|
+
"slots": {
|
|
34
|
+
"root": "Tree root node",
|
|
35
|
+
"nodes": "Child tree nodes"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"flat": {
|
|
40
|
+
"description": "Indented list without connectors",
|
|
41
|
+
"components": [
|
|
42
|
+
"icon"
|
|
43
|
+
],
|
|
44
|
+
"layout": {
|
|
45
|
+
"layout": "stack",
|
|
46
|
+
"atoms": "_flex _col _mono _fggreen",
|
|
47
|
+
"slots": {
|
|
48
|
+
"items": "Indented list items"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"checkbox": {
|
|
53
|
+
"description": "Tree with selection checkboxes",
|
|
54
|
+
"components": [
|
|
55
|
+
"icon"
|
|
56
|
+
],
|
|
57
|
+
"layout": {
|
|
58
|
+
"layout": "stack",
|
|
59
|
+
"atoms": "_flex _col _mono _fggreen",
|
|
60
|
+
"slots": {
|
|
61
|
+
"nodes": "Tree nodes with checkboxes"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"default_layout": {
|
|
67
|
+
"layout": "stack",
|
|
68
|
+
"atoms": "_flex _col _mono _fggreen",
|
|
69
|
+
"slots": {
|
|
70
|
+
"root": "Tree root",
|
|
71
|
+
"nodes": "Tree nodes"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"features": [
|
|
75
|
+
"expand-collapse",
|
|
76
|
+
"multi-select",
|
|
77
|
+
"drag-drop",
|
|
78
|
+
"context-menu",
|
|
79
|
+
"search-filter",
|
|
80
|
+
"keyboard-navigation"
|
|
81
|
+
],
|
|
82
|
+
"keyboard_shortcuts": {
|
|
83
|
+
"ArrowUp": "Previous node",
|
|
84
|
+
"ArrowDown": "Next node",
|
|
85
|
+
"ArrowLeft": "Collapse or go to parent",
|
|
86
|
+
"ArrowRight": "Expand or go to first child",
|
|
87
|
+
"Enter": "Select node",
|
|
88
|
+
"Space": "Toggle checkbox"
|
|
89
|
+
},
|
|
90
|
+
"ascii_connectors": {
|
|
91
|
+
"branch": "├── ",
|
|
92
|
+
"last": "└── ",
|
|
93
|
+
"vertical": "│ ",
|
|
94
|
+
"empty": " "
|
|
95
|
+
},
|
|
96
|
+
"visual_brief": "Hierarchical tree rendered with ASCII connector characters (├── for branches, └── for last items, │ for vertical lines) in monospace font. Each node shows a folder or file icon (or expand/collapse toggle for branches), the item name, and optional metadata. Indentation increases per depth level with connector lines drawn vertically. The flat preset removes ASCII connectors and uses simple indentation. The checkbox preset adds a checkbox before each node for selection. Nodes are clickable to expand/collapse or to select. The currently selected node has a highlighted background.",
|
|
97
|
+
"responsive": {
|
|
98
|
+
"mobile": "Tree takes full width. Touch targets enlarged. Deep nesting truncates with horizontal scroll. Checkbox preset uses larger checkboxes.",
|
|
99
|
+
"tablet": "Standard tree layout. Comfortable node spacing for touch.",
|
|
100
|
+
"desktop": "Full tree with all connectors rendered crisply. Keyboard navigation (arrow keys). Comfortable indentation."
|
|
101
|
+
},
|
|
102
|
+
"layout_hints": {
|
|
103
|
+
"hierarchy_priority": "Depth and parent-child relationships should remain obvious before metadata or action affordances. The structure is the primary content.",
|
|
104
|
+
"selection_clarity": "Expanded, collapsed, and selected states should stay visually distinct so users always know where they are in the tree.",
|
|
105
|
+
"dense_nesting": "When depth gets large, prefer scroll or truncation strategies that preserve hierarchy over squeezing every node into a flattened list."
|
|
106
|
+
},
|
|
107
|
+
"motion": {
|
|
108
|
+
"micro": "Expand/collapse indicators and selected nodes may sharpen or brighten subtly to confirm navigation state.",
|
|
109
|
+
"transitions": "Opening branches should feel quick and structural, preserving the user's sense of place within the hierarchy."
|
|
110
|
+
},
|
|
111
|
+
"interactions": [
|
|
112
|
+
"animate-on-mount"
|
|
113
|
+
],
|
|
114
|
+
"accessibility": {
|
|
115
|
+
"role": "tree",
|
|
116
|
+
"aria-label": "Tree view",
|
|
117
|
+
"keyboard": [
|
|
118
|
+
"Arrow-key navigation, expansion, selection, and checkbox toggling should remain consistent with standard tree interaction patterns."
|
|
119
|
+
],
|
|
120
|
+
"announcements": [
|
|
121
|
+
"Node name, depth, expanded state, and selection state should be exposed semantically so the tree remains understandable without ASCII connectors alone."
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "unit-detail",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Unit Detail",
|
|
7
|
+
"description": "Single unit details including specs, current tenant, lease info, rent history, maintenance, and documents.",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"patterns": {
|
|
10
|
+
"tenant-card": "^1.0.0",
|
|
11
|
+
"payment-history": "^1.0.0"
|
|
12
|
+
},
|
|
13
|
+
"styles": {},
|
|
14
|
+
"requires_core": {
|
|
15
|
+
"components": [
|
|
16
|
+
"Button",
|
|
17
|
+
"icon",
|
|
18
|
+
"Badge",
|
|
19
|
+
"Tabs"
|
|
20
|
+
],
|
|
21
|
+
"charts": []
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"components": [
|
|
25
|
+
"Button",
|
|
26
|
+
"icon",
|
|
27
|
+
"Badge",
|
|
28
|
+
"Tabs"
|
|
29
|
+
],
|
|
30
|
+
"default_preset": "view",
|
|
31
|
+
"presets": {
|
|
32
|
+
"view": {
|
|
33
|
+
"description": "Full unit detail view with specs, current tenant info, and tabbed rent and maintenance history",
|
|
34
|
+
"components": [
|
|
35
|
+
"Button",
|
|
36
|
+
"icon",
|
|
37
|
+
"Badge",
|
|
38
|
+
"Tabs"
|
|
39
|
+
],
|
|
40
|
+
"layout": {
|
|
41
|
+
"layout": "stack",
|
|
42
|
+
"atoms": "_flex _col _gap6",
|
|
43
|
+
"slots": {
|
|
44
|
+
"header": "Unit number, property name, status badge, edit",
|
|
45
|
+
"specs": "Beds, baths, sqft, floor, amenities",
|
|
46
|
+
"tenant": "Current tenant info (embedded tenant-card)",
|
|
47
|
+
"lease": "Current lease summary",
|
|
48
|
+
"tabs": "Rent history, maintenance, documents tabs",
|
|
49
|
+
"rent-history": "Payment history for this unit",
|
|
50
|
+
"maintenance": "Maintenance history",
|
|
51
|
+
"documents": "Unit-specific documents"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"default_layout": {
|
|
57
|
+
"layout": "stack",
|
|
58
|
+
"atoms": "_flex _col _gap6",
|
|
59
|
+
"slots": {
|
|
60
|
+
"header": "Unit header",
|
|
61
|
+
"specs": "Unit specifications",
|
|
62
|
+
"tenant": "Tenant information",
|
|
63
|
+
"tabs": "History tabs"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"visual_brief": "Detail view for a single rental unit. Header shows unit number/name, status badge (occupied, vacant, maintenance), and action buttons. A specs section displays key-value pairs: bedroom count, bathroom count, square footage, floor, rent amount. A tenant information card shows the current tenant (avatar, name, contact, lease dates) or 'Vacant' with a list-unit button. Tabbed content below shows: Rent History (payment records), Maintenance (ticket list), and Documents (lease, inspection reports). The view preset is the only preset, displaying all information.",
|
|
67
|
+
"responsive": {
|
|
68
|
+
"mobile": "Single-column stacked layout. Specs in a 2-column key-value grid. Tenant card full-width. Tabs become a dropdown or accordion.",
|
|
69
|
+
"tablet": "Standard layout. Specs and tenant info side by side. Tabs in a row.",
|
|
70
|
+
"desktop": "Full layout with specs, tenant card, and tabs all comfortably displayed."
|
|
71
|
+
},
|
|
72
|
+
"layout_hints": {
|
|
73
|
+
"header_priority": "Lead with unit identity, occupancy state, and the most important operational actions. The user should understand whether the unit is occupied and healthy before reading deep history.",
|
|
74
|
+
"tab_discipline": "Rent history, maintenance, and documents are secondary exploration surfaces. Keep the active tab state strong and the shared unit context stable above them.",
|
|
75
|
+
"vacancy_translation": "When a unit is vacant, preserve the same structural rhythm as occupied states while swapping tenant context for a clear vacancy action path."
|
|
76
|
+
},
|
|
77
|
+
"motion": {
|
|
78
|
+
"micro": "Header actions and tab states may sharpen slightly on hover and focus. Vacancy or maintenance status indicators may draw gentle emphasis when needed.",
|
|
79
|
+
"transitions": "Switching between tabs should preserve the sense of remaining on the same unit, not feeling like a full page jump."
|
|
80
|
+
},
|
|
81
|
+
"interactions": [
|
|
82
|
+
"animate-on-mount"
|
|
83
|
+
],
|
|
84
|
+
"accessibility": {
|
|
85
|
+
"role": "region",
|
|
86
|
+
"aria-label": "Unit detail",
|
|
87
|
+
"keyboard": [
|
|
88
|
+
"Header actions should precede tab controls, and tab panels should follow a predictable reading order."
|
|
89
|
+
],
|
|
90
|
+
"announcements": [
|
|
91
|
+
"Unit identity, status, tenant context, and active tab should be communicated semantically so the page remains understandable without relying on visual arrangement alone."
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"composition": {
|
|
95
|
+
"UnitDetail": "Container(d-section, flex-col, gap-6) > [Header + Specs + CurrentTenant? + TabContent]",
|
|
96
|
+
"Header": "Row(d-surface, space-between) > [UnitNumber(heading2) + StatusBadge(d-annotation) + ActionButtons(d-interactive)]",
|
|
97
|
+
"Specs": "Grid(d-data, key-value) > [Bedrooms + Bathrooms + SqFt(mono-data) + FloorPlan?]",
|
|
98
|
+
"TabContent": "Tabs(d-control) > [LeaseTab + PaymentTab + MaintenanceTab + DocumentsTab]"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://decantr.ai/schemas/pattern.v2.json",
|
|
3
|
+
"id": "unit-list",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"decantr_compat": ">=2.0.0",
|
|
6
|
+
"name": "Unit List",
|
|
7
|
+
"description": "Units within a property displayed as cards or table. Shows unit number, specs, tenant, rent, and status.",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"patterns": {},
|
|
10
|
+
"styles": {},
|
|
11
|
+
"requires_core": {
|
|
12
|
+
"components": [
|
|
13
|
+
"Button",
|
|
14
|
+
"icon",
|
|
15
|
+
"Badge"
|
|
16
|
+
],
|
|
17
|
+
"charts": []
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"components": [
|
|
21
|
+
"Button",
|
|
22
|
+
"icon",
|
|
23
|
+
"Badge"
|
|
24
|
+
],
|
|
25
|
+
"default_preset": "grid",
|
|
26
|
+
"presets": {
|
|
27
|
+
"grid": {
|
|
28
|
+
"description": "Responsive card grid of units showing unit number, specs, tenant, rent, and occupancy status",
|
|
29
|
+
"components": [
|
|
30
|
+
"Button",
|
|
31
|
+
"icon",
|
|
32
|
+
"Badge"
|
|
33
|
+
],
|
|
34
|
+
"layout": {
|
|
35
|
+
"layout": "stack",
|
|
36
|
+
"atoms": "_flex _col _gap4",
|
|
37
|
+
"slots": {
|
|
38
|
+
"header": "Title, add unit button",
|
|
39
|
+
"summary": "Total units, occupied, vacant, revenue",
|
|
40
|
+
"filters": "Status filter",
|
|
41
|
+
"items": "Unit cards"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"table": {
|
|
46
|
+
"description": "Sortable data table view of units with columns for number, specs, tenant, rent, and status",
|
|
47
|
+
"components": [
|
|
48
|
+
"Button",
|
|
49
|
+
"icon",
|
|
50
|
+
"Badge"
|
|
51
|
+
],
|
|
52
|
+
"layout": {
|
|
53
|
+
"layout": "stack",
|
|
54
|
+
"atoms": "_flex _col _gap4",
|
|
55
|
+
"slots": {
|
|
56
|
+
"header": "Title and controls",
|
|
57
|
+
"table": "Units table"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"default_layout": {
|
|
63
|
+
"layout": "stack",
|
|
64
|
+
"atoms": "_flex _col _gap4",
|
|
65
|
+
"slots": {
|
|
66
|
+
"header": "Title and add button",
|
|
67
|
+
"summary": "Unit counts",
|
|
68
|
+
"items": "Unit cards or rows"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"visual_brief": "List of units within a property. Header shows 'Units' title with a unit count and an 'Add Unit' button. A summary bar shows counts by status (occupied, vacant, maintenance). The grid preset displays units as bordered cards, each showing unit number, bedroom/bathroom count, square footage, current tenant name (or 'Vacant' in muted text), rent amount, and a status badge. The table preset renders as a data table with those same fields as columns. Cards and rows are clickable to navigate to unit detail.",
|
|
72
|
+
"responsive": {
|
|
73
|
+
"mobile": "Single-column card stack. Summary bar shows counts compactly. Add Unit button is a FAB or in the header.",
|
|
74
|
+
"tablet": "Two-column card grid or table with horizontal scroll.",
|
|
75
|
+
"desktop": "Three-column card grid or full-width table with all columns visible."
|
|
76
|
+
},
|
|
77
|
+
"layout_hints": {
|
|
78
|
+
"inventory_priority": "The user should be able to scan occupancy, rent, and tenant state for each unit quickly. Unit identity and status come first; detailed specs support that read.",
|
|
79
|
+
"grid_vs_table": "Card and table variants should preserve the same core fields so switching views does not change the mental model of the unit inventory.",
|
|
80
|
+
"summary_rhythm": "Keep the summary counts closely tied to the unit collection, not floating as a separate analytics block."
|
|
81
|
+
},
|
|
82
|
+
"motion": {
|
|
83
|
+
"micro": "Clickable cards or rows may lift or sharpen slightly on hover. Status badges may brighten subtly when filtered or selected.",
|
|
84
|
+
"transitions": "View or filter changes should maintain orientation within the unit list so users do not lose track of current inventory context."
|
|
85
|
+
},
|
|
86
|
+
"interactions": [
|
|
87
|
+
"click-select",
|
|
88
|
+
"hover-reveal",
|
|
89
|
+
"animate-on-mount",
|
|
90
|
+
"stagger-children"
|
|
91
|
+
],
|
|
92
|
+
"accessibility": {
|
|
93
|
+
"role": "region",
|
|
94
|
+
"aria-label": "Unit list",
|
|
95
|
+
"keyboard": [
|
|
96
|
+
"Header actions, summary controls, and unit items should follow a straightforward reading order."
|
|
97
|
+
],
|
|
98
|
+
"announcements": [
|
|
99
|
+
"Unit number, occupancy state, tenant context, and rent should be exposed semantically so the inventory remains understandable in both card and table modes."
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"composition": {
|
|
103
|
+
"UnitList": "Grid(d-section, responsive: 1/2/3-col) > UnitCard[]",
|
|
104
|
+
"UnitCard": "Card(d-surface, hoverable) > [UnitNumber(heading4) + SpecsRow > [Beds + Baths + SqFt(mono-data)] + TenantName?(font-medium) + Rent(mono-data) + StatusBadge(d-annotation, color: occupancy)]"
|
|
105
|
+
}
|
|
106
|
+
}
|