@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.
Files changed (593) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -0
  3. package/archetypes/about-hybrid.json +104 -0
  4. package/archetypes/admin-analytics.json +63 -0
  5. package/archetypes/admin-moderation.json +87 -0
  6. package/archetypes/admin-overview.json +77 -0
  7. package/archetypes/agent-orchestrator.json +178 -0
  8. package/archetypes/agent-studio.json +154 -0
  9. package/archetypes/ai-chatbot.json +121 -0
  10. package/archetypes/ai-transparency.json +140 -0
  11. package/archetypes/alert-manager-pro.json +154 -0
  12. package/archetypes/api-console.json +130 -0
  13. package/archetypes/api-reference.json +95 -0
  14. package/archetypes/appointment-center.json +113 -0
  15. package/archetypes/asset-browser.json +90 -0
  16. package/archetypes/audit-center.json +103 -0
  17. package/archetypes/auth-flow-enterprise.json +140 -0
  18. package/archetypes/auth-flow.json +101 -0
  19. package/archetypes/auth-full.json +199 -0
  20. package/archetypes/auth-gateway.json +76 -0
  21. package/archetypes/billing-portal.json +75 -0
  22. package/archetypes/billing.json +74 -0
  23. package/archetypes/budget-planner.json +63 -0
  24. package/archetypes/budget-transparency.json +117 -0
  25. package/archetypes/buyer-dashboard.json +124 -0
  26. package/archetypes/changelog-center.json +96 -0
  27. package/archetypes/character-library.json +113 -0
  28. package/archetypes/citation-tools.json +98 -0
  29. package/archetypes/cloud-infrastructure.json +253 -0
  30. package/archetypes/cloud-marketing.json +111 -0
  31. package/archetypes/collaboration-hub.json +87 -0
  32. package/archetypes/community-feed.json +131 -0
  33. package/archetypes/config-editor.json +136 -0
  34. package/archetypes/contact.json +82 -0
  35. package/archetypes/content-author.json +121 -0
  36. package/archetypes/content-editor.json +82 -0
  37. package/archetypes/content-newsletter.json +111 -0
  38. package/archetypes/content-reader.json +135 -0
  39. package/archetypes/content-site.json +112 -0
  40. package/archetypes/contract-center.json +120 -0
  41. package/archetypes/cook-mode.json +57 -0
  42. package/archetypes/copilot-settings.json +87 -0
  43. package/archetypes/copilot-workspace.json +110 -0
  44. package/archetypes/creator-content.json +128 -0
  45. package/archetypes/creator-dashboard.json +105 -0
  46. package/archetypes/creator-earnings.json +100 -0
  47. package/archetypes/creator-subscribers.json +99 -0
  48. package/archetypes/creator-tiers.json +76 -0
  49. package/archetypes/crm-dashboard.json +199 -0
  50. package/archetypes/crm-email.json +88 -0
  51. package/archetypes/crm-intelligence.json +85 -0
  52. package/archetypes/crm-meetings.json +95 -0
  53. package/archetypes/customer-loyalty.json +75 -0
  54. package/archetypes/customer-management.json +76 -0
  55. package/archetypes/daily-operations.json +62 -0
  56. package/archetypes/dashboard-core.json +87 -0
  57. package/archetypes/data-repository.json +81 -0
  58. package/archetypes/deal-workspace.json +126 -0
  59. package/archetypes/doc-browser.json +111 -0
  60. package/archetypes/document-editor.json +147 -0
  61. package/archetypes/document-vault.json +119 -0
  62. package/archetypes/ecommerce-admin.json +138 -0
  63. package/archetypes/ecommerce-checkout.json +57 -0
  64. package/archetypes/ecommerce.json +138 -0
  65. package/archetypes/emissions-dashboard.json +136 -0
  66. package/archetypes/engagement-hub.json +157 -0
  67. package/archetypes/eval-suite.json +142 -0
  68. package/archetypes/event-discovery.json +130 -0
  69. package/archetypes/experiment-tracker.json +83 -0
  70. package/archetypes/fan-checkout.json +107 -0
  71. package/archetypes/fan-library.json +99 -0
  72. package/archetypes/fan-storefront.json +106 -0
  73. package/archetypes/financial-dashboard.json +127 -0
  74. package/archetypes/game-catalog.json +120 -0
  75. package/archetypes/gaming-community.json +196 -0
  76. package/archetypes/governance-center.json +82 -0
  77. package/archetypes/health-records.json +111 -0
  78. package/archetypes/instrument-booking.json +82 -0
  79. package/archetypes/inventory-supplies.json +72 -0
  80. package/archetypes/investment-tracker.json +82 -0
  81. package/archetypes/investor-portal.json +124 -0
  82. package/archetypes/job-monitor.json +109 -0
  83. package/archetypes/kitchen-display.json +58 -0
  84. package/archetypes/lab-notebook.json +83 -0
  85. package/archetypes/landing-hero.json +145 -0
  86. package/archetypes/landing-legal.json +101 -0
  87. package/archetypes/landing-resources.json +127 -0
  88. package/archetypes/launch-campaign.json +393 -0
  89. package/archetypes/legal.json +107 -0
  90. package/archetypes/listing-browser.json +160 -0
  91. package/archetypes/log-explorer-pro.json +106 -0
  92. package/archetypes/log-viewer.json +123 -0
  93. package/archetypes/maintenance-center.json +116 -0
  94. package/archetypes/marketing-ai-studio.json +117 -0
  95. package/archetypes/marketing-civic.json +116 -0
  96. package/archetypes/marketing-climate.json +94 -0
  97. package/archetypes/marketing-content.json +109 -0
  98. package/archetypes/marketing-copilot.json +100 -0
  99. package/archetypes/marketing-creator.json +132 -0
  100. package/archetypes/marketing-crm.json +96 -0
  101. package/archetypes/marketing-deal-room.json +100 -0
  102. package/archetypes/marketing-devtool.json +139 -0
  103. package/archetypes/marketing-docs.json +92 -0
  104. package/archetypes/marketing-ecommerce.json +69 -0
  105. package/archetypes/marketing-esports.json +89 -0
  106. package/archetypes/marketing-events.json +89 -0
  107. package/archetypes/marketing-finance.json +69 -0
  108. package/archetypes/marketing-fractional.json +74 -0
  109. package/archetypes/marketing-health.json +100 -0
  110. package/archetypes/marketing-landing.json +65 -0
  111. package/archetypes/marketing-legal.json +86 -0
  112. package/archetypes/marketing-marketplace.json +121 -0
  113. package/archetypes/marketing-observability.json +95 -0
  114. package/archetypes/marketing-pipeline.json +108 -0
  115. package/archetypes/marketing-platform.json +129 -0
  116. package/archetypes/marketing-producer.json +88 -0
  117. package/archetypes/marketing-productivity.json +139 -0
  118. package/archetypes/marketing-realestate.json +101 -0
  119. package/archetypes/marketing-recipe.json +69 -0
  120. package/archetypes/marketing-research.json +72 -0
  121. package/archetypes/marketing-restaurant.json +53 -0
  122. package/archetypes/marketing-saas-v2.json +75 -0
  123. package/archetypes/marketing-saas.json +119 -0
  124. package/archetypes/marketing-swipecircle.json +185 -0
  125. package/archetypes/marketing-video-studio.json +121 -0
  126. package/archetypes/marketplace-messaging.json +106 -0
  127. package/archetypes/matter-management.json +104 -0
  128. package/archetypes/meeting-archive.json +131 -0
  129. package/archetypes/menu-management.json +73 -0
  130. package/archetypes/metrics-monitor.json +164 -0
  131. package/archetypes/metrics-overview-dashboard.json +112 -0
  132. package/archetypes/music-workspace.json +104 -0
  133. package/archetypes/notifications.json +68 -0
  134. package/archetypes/offset-marketplace.json +134 -0
  135. package/archetypes/onboarding-wizard.json +203 -0
  136. package/archetypes/order-fulfillment.json +83 -0
  137. package/archetypes/order-management.json +71 -0
  138. package/archetypes/organizer-dashboard.json +146 -0
  139. package/archetypes/owner-dashboard.json +112 -0
  140. package/archetypes/ownership-dashboard.json +97 -0
  141. package/archetypes/patient-dashboard.json +142 -0
  142. package/archetypes/pipeline-builder.json +116 -0
  143. package/archetypes/pm-financials.json +126 -0
  144. package/archetypes/portfolio-about.json +85 -0
  145. package/archetypes/portfolio-blog.json +71 -0
  146. package/archetypes/portfolio-overview.json +76 -0
  147. package/archetypes/portfolio-showcase.json +71 -0
  148. package/archetypes/portfolio.json +122 -0
  149. package/archetypes/product-management.json +84 -0
  150. package/archetypes/project-library.json +111 -0
  151. package/archetypes/prompt-director.json +118 -0
  152. package/archetypes/prompt-library.json +135 -0
  153. package/archetypes/property-manager.json +158 -0
  154. package/archetypes/qa-workflow.json +116 -0
  155. package/archetypes/recipe-browser.json +83 -0
  156. package/archetypes/recipe-community.json +126 -0
  157. package/archetypes/recipe-creator.json +71 -0
  158. package/archetypes/recipe-social.json +95 -0
  159. package/archetypes/recipefork-ai-kitchen.json +95 -0
  160. package/archetypes/recipefork-auth.json +79 -0
  161. package/archetypes/recipefork-cookbooks.json +104 -0
  162. package/archetypes/recipefork-landing.json +101 -0
  163. package/archetypes/recipefork-profile.json +180 -0
  164. package/archetypes/recipefork-recipe-authoring.json +216 -0
  165. package/archetypes/recipefork-recipe-detail.json +139 -0
  166. package/archetypes/recipefork-social.json +103 -0
  167. package/archetypes/registry-browser.json +121 -0
  168. package/archetypes/render-monitor.json +114 -0
  169. package/archetypes/reporting-center.json +107 -0
  170. package/archetypes/research-workspace.json +127 -0
  171. package/archetypes/restaurant-floor.json +74 -0
  172. package/archetypes/review-system.json +84 -0
  173. package/archetypes/saas-analytics.json +69 -0
  174. package/archetypes/saas-billing-v2.json +77 -0
  175. package/archetypes/saas-dashboard.json +127 -0
  176. package/archetypes/saas-overview.json +77 -0
  177. package/archetypes/sample-inventory.json +80 -0
  178. package/archetypes/scrim-scheduler.json +103 -0
  179. package/archetypes/search-hub.json +87 -0
  180. package/archetypes/secondary-market.json +83 -0
  181. package/archetypes/seller-dashboard.json +169 -0
  182. package/archetypes/server-station.json +61 -0
  183. package/archetypes/service-requests.json +141 -0
  184. package/archetypes/session-rooms.json +92 -0
  185. package/archetypes/settings-full.json +164 -0
  186. package/archetypes/settings.json +67 -0
  187. package/archetypes/source-catalog.json +116 -0
  188. package/archetypes/spatial-workspace.json +115 -0
  189. package/archetypes/sponsor-dashboard.json +103 -0
  190. package/archetypes/storefront-browse.json +97 -0
  191. package/archetypes/supply-chain.json +112 -0
  192. package/archetypes/swipe-feed.json +469 -0
  193. package/archetypes/team-management.json +95 -0
  194. package/archetypes/team-operations.json +131 -0
  195. package/archetypes/team-workspace.json +71 -0
  196. package/archetypes/telehealth-room.json +78 -0
  197. package/archetypes/tenant-manager.json +129 -0
  198. package/archetypes/tenant-payments.json +105 -0
  199. package/archetypes/tenant-portal.json +135 -0
  200. package/archetypes/tenant-switcher-dashboard.json +154 -0
  201. package/archetypes/terminal-home.json +127 -0
  202. package/archetypes/ticket-checkout.json +84 -0
  203. package/archetypes/tool-registry.json +111 -0
  204. package/archetypes/trace-explorer.json +113 -0
  205. package/archetypes/trace-viewer.json +112 -0
  206. package/archetypes/track-library.json +90 -0
  207. package/archetypes/transaction-history.json +77 -0
  208. package/archetypes/transformation-editor.json +117 -0
  209. package/archetypes/usage-billing.json +146 -0
  210. package/archetypes/user-dashboard.json +155 -0
  211. package/archetypes/video-editor.json +158 -0
  212. package/archetypes/vod-review.json +97 -0
  213. package/archetypes/webhook-manager.json +108 -0
  214. package/archetypes/workspace-home.json +105 -0
  215. package/archetypes/workspace-settings.json +140 -0
  216. package/blueprints/agent-marketplace.json +222 -0
  217. package/blueprints/agent-studio.json +291 -0
  218. package/blueprints/ai-copilot-shell.json +163 -0
  219. package/blueprints/ai-native-crm.json +269 -0
  220. package/blueprints/ai-video-studio.json +93 -0
  221. package/blueprints/carbon-ai-portal.json +252 -0
  222. package/blueprints/civic-platform.json +91 -0
  223. package/blueprints/climate-dashboard.json +90 -0
  224. package/blueprints/cloud-platform.json +219 -0
  225. package/blueprints/content-site.json +110 -0
  226. package/blueprints/content-studio.json +120 -0
  227. package/blueprints/creator-monetization-platform.json +373 -0
  228. package/blueprints/data-pipeline-studio.json +263 -0
  229. package/blueprints/deal-room.json +88 -0
  230. package/blueprints/ecommerce-admin.json +253 -0
  231. package/blueprints/ecommerce.json +242 -0
  232. package/blueprints/esports-hq.json +116 -0
  233. package/blueprints/event-community-hub.json +251 -0
  234. package/blueprints/financial-dashboard.json +237 -0
  235. package/blueprints/fractional-ownership.json +89 -0
  236. package/blueprints/gaming-platform.json +171 -0
  237. package/blueprints/health-wellness-portal.json +252 -0
  238. package/blueprints/knowledge-base.json +176 -0
  239. package/blueprints/legal-research.json +90 -0
  240. package/blueprints/multi-tenant-platform.json +257 -0
  241. package/blueprints/observability-platform.json +275 -0
  242. package/blueprints/portfolio.json +164 -0
  243. package/blueprints/producer-studio.json +156 -0
  244. package/blueprints/product-landing.json +112 -0
  245. package/blueprints/property-management-portal.json +384 -0
  246. package/blueprints/realtime-collaboration-workspace.json +300 -0
  247. package/blueprints/recipe-community.json +259 -0
  248. package/blueprints/recipefork.json +194 -0
  249. package/blueprints/registry-platform.json +204 -0
  250. package/blueprints/research-lab.json +92 -0
  251. package/blueprints/restaurant-ops.json +104 -0
  252. package/blueprints/retro-launch-campaign.json +205 -0
  253. package/blueprints/saas-dashboard.json +246 -0
  254. package/blueprints/spatial-collaboration.json +172 -0
  255. package/blueprints/swipecircle.json +253 -0
  256. package/blueprints/terminal-dashboard.json +282 -0
  257. package/blueprints/two-sided-marketplace.json +293 -0
  258. package/dist/index.d.ts +178 -0
  259. package/dist/index.js +582 -0
  260. package/dist/index.js.map +1 -0
  261. package/package.json +75 -0
  262. package/patterns/account-settings.json +149 -0
  263. package/patterns/activity-feed.json +154 -0
  264. package/patterns/adaptive-density-panel.json +130 -0
  265. package/patterns/agent-handoff-zone.json +97 -0
  266. package/patterns/agent-swarm-canvas.json +136 -0
  267. package/patterns/agent-timeline.json +119 -0
  268. package/patterns/alert-rule-builder.json +127 -0
  269. package/patterns/ambient-status-ring.json +125 -0
  270. package/patterns/api-explorer.json +131 -0
  271. package/patterns/api-key-row.json +119 -0
  272. package/patterns/ar-annotation.json +137 -0
  273. package/patterns/arrangement-canvas.json +72 -0
  274. package/patterns/ascii-chart.json +138 -0
  275. package/patterns/audit-trail.json +123 -0
  276. package/patterns/auth-form.json +209 -0
  277. package/patterns/avatar-grid-tile.json +118 -0
  278. package/patterns/backer-progress-console.json +137 -0
  279. package/patterns/backer-wall-ticker.json +127 -0
  280. package/patterns/before-after.json +105 -0
  281. package/patterns/block-toolbar.json +129 -0
  282. package/patterns/blueprint-anatomy.json +112 -0
  283. package/patterns/blueprint-launch-hero.json +113 -0
  284. package/patterns/booking-calendar.json +125 -0
  285. package/patterns/bottom-tab-bar.json +117 -0
  286. package/patterns/breadcrumb-nav.json +111 -0
  287. package/patterns/budget-sankey.json +103 -0
  288. package/patterns/calendar-view.json +143 -0
  289. package/patterns/campaign-marquee-hero.json +167 -0
  290. package/patterns/cap-table.json +121 -0
  291. package/patterns/card-grid.json +202 -0
  292. package/patterns/case-brief-card.json +113 -0
  293. package/patterns/character-sheet.json +102 -0
  294. package/patterns/chart-grid.json +129 -0
  295. package/patterns/chat-header.json +105 -0
  296. package/patterns/chat-input.json +106 -0
  297. package/patterns/chat-message.json +122 -0
  298. package/patterns/chat-thread.json +120 -0
  299. package/patterns/checklist-card.json +96 -0
  300. package/patterns/checkout-flow.json +148 -0
  301. package/patterns/chip-multiselect.json +118 -0
  302. package/patterns/citation-graph.json +118 -0
  303. package/patterns/command-palette.json +115 -0
  304. package/patterns/command-rail.json +123 -0
  305. package/patterns/comment-thread.json +155 -0
  306. package/patterns/comparison-table.json +121 -0
  307. package/patterns/contact-form.json +135 -0
  308. package/patterns/content-card-grid.json +151 -0
  309. package/patterns/content-detail-hero.json +129 -0
  310. package/patterns/content-feed.json +141 -0
  311. package/patterns/content-uploader.json +137 -0
  312. package/patterns/continue-screen-cta.json +135 -0
  313. package/patterns/contract-diff.json +110 -0
  314. package/patterns/contract-explorer.json +119 -0
  315. package/patterns/conversation-list.json +109 -0
  316. package/patterns/creator-profile.json +127 -0
  317. package/patterns/cta-banner.json +103 -0
  318. package/patterns/cta-section.json +122 -0
  319. package/patterns/cta.json +124 -0
  320. package/patterns/data-source-connector.json +131 -0
  321. package/patterns/data-table.json +138 -0
  322. package/patterns/dataset-card.json +127 -0
  323. package/patterns/daw-transport-bar.json +66 -0
  324. package/patterns/deal-pipeline-board.json +124 -0
  325. package/patterns/deal-stage-gates.json +102 -0
  326. package/patterns/depth-layered-canvas.json +105 -0
  327. package/patterns/detail-header.json +140 -0
  328. package/patterns/diff-view.json +122 -0
  329. package/patterns/dividend-ledger.json +120 -0
  330. package/patterns/doc-editor.json +147 -0
  331. package/patterns/document-vault.json +129 -0
  332. package/patterns/drag-sort-list.json +119 -0
  333. package/patterns/earnings-dashboard.json +132 -0
  334. package/patterns/emissions-sankey.json +113 -0
  335. package/patterns/emoji-reaction-bar.json +115 -0
  336. package/patterns/esports-matchday-command.json +132 -0
  337. package/patterns/eval-dashboard.json +131 -0
  338. package/patterns/expense-tracker.json +130 -0
  339. package/patterns/featured-launchpad-list.json +114 -0
  340. package/patterns/features.json +118 -0
  341. package/patterns/file-browser.json +148 -0
  342. package/patterns/filter-bar.json +146 -0
  343. package/patterns/footer.json +115 -0
  344. package/patterns/form-sections.json +180 -0
  345. package/patterns/form.json +190 -0
  346. package/patterns/founder-comic-strip.json +126 -0
  347. package/patterns/generative-card-grid.json +130 -0
  348. package/patterns/gesture-control-overlay.json +134 -0
  349. package/patterns/governance-ballot.json +126 -0
  350. package/patterns/help-modal.json +155 -0
  351. package/patterns/hero-split.json +125 -0
  352. package/patterns/hero.json +227 -0
  353. package/patterns/holographic-control-bar.json +114 -0
  354. package/patterns/hotkey-bar.json +97 -0
  355. package/patterns/how-it-works.json +118 -0
  356. package/patterns/identity-summary.json +115 -0
  357. package/patterns/instrument-schedule.json +131 -0
  358. package/patterns/intake-form-wizard.json +134 -0
  359. package/patterns/intent-radar.json +115 -0
  360. package/patterns/json-viewer.json +129 -0
  361. package/patterns/kanban-board.json +133 -0
  362. package/patterns/kds-ticket-rail.json +133 -0
  363. package/patterns/kpi-grid.json +123 -0
  364. package/patterns/launch-update-log.json +129 -0
  365. package/patterns/launchpad-flow.json +107 -0
  366. package/patterns/leaderboard.json +143 -0
  367. package/patterns/lease-manager.json +129 -0
  368. package/patterns/legal-prose.json +120 -0
  369. package/patterns/live-room-stage.json +63 -0
  370. package/patterns/log-stream.json +150 -0
  371. package/patterns/logo-strip.json +93 -0
  372. package/patterns/maintenance-board.json +127 -0
  373. package/patterns/maintenance-ticket.json +156 -0
  374. package/patterns/map-view.json +140 -0
  375. package/patterns/match-celebration.json +133 -0
  376. package/patterns/matter-card.json +113 -0
  377. package/patterns/mention-popup.json +85 -0
  378. package/patterns/metric-gauge.json +141 -0
  379. package/patterns/mixer-console.json +69 -0
  380. package/patterns/mobile-profile-hero.json +138 -0
  381. package/patterns/moderation-queue-item.json +129 -0
  382. package/patterns/morphing-topology.json +113 -0
  383. package/patterns/namespace-badge.json +93 -0
  384. package/patterns/nav-header.json +110 -0
  385. package/patterns/neural-feedback-loop.json +124 -0
  386. package/patterns/notebook-entry.json +129 -0
  387. package/patterns/notification-center.json +136 -0
  388. package/patterns/offset-cart.json +109 -0
  389. package/patterns/onboarding-wizard.json +130 -0
  390. package/patterns/org-governance-panel.json +101 -0
  391. package/patterns/page-tree.json +143 -0
  392. package/patterns/payment-history.json +130 -0
  393. package/patterns/payout-settings.json +130 -0
  394. package/patterns/permission-matrix.json +129 -0
  395. package/patterns/petition-card.json +106 -0
  396. package/patterns/pipeline-cards.json +99 -0
  397. package/patterns/player-form-tracker.json +111 -0
  398. package/patterns/pledge-checkout-panel.json +145 -0
  399. package/patterns/pnl-dashboard.json +116 -0
  400. package/patterns/post-list.json +147 -0
  401. package/patterns/presence-avatars.json +129 -0
  402. package/patterns/press-kit-shelf.json +132 -0
  403. package/patterns/pricing-usage.json +118 -0
  404. package/patterns/pricing.json +137 -0
  405. package/patterns/producer-split-workbench.json +57 -0
  406. package/patterns/product-box-spec-panel.json +126 -0
  407. package/patterns/product-card.json +120 -0
  408. package/patterns/product-grid.json +140 -0
  409. package/patterns/progress-bar.json +124 -0
  410. package/patterns/prompt-playground.json +129 -0
  411. package/patterns/property-card.json +112 -0
  412. package/patterns/property-detail.json +124 -0
  413. package/patterns/property-grid.json +137 -0
  414. package/patterns/prose-section.json +102 -0
  415. package/patterns/protocol-step.json +128 -0
  416. package/patterns/prototype-demo-bezel.json +137 -0
  417. package/patterns/qa-thread.json +109 -0
  418. package/patterns/quick-start.json +88 -0
  419. package/patterns/recipefork-activity-feed.json +51 -0
  420. package/patterns/recipefork-chef-ingredients-display.json +48 -0
  421. package/patterns/recipefork-chef-ingredients-editor.json +52 -0
  422. package/patterns/recipefork-chef-instruction-editor.json +59 -0
  423. package/patterns/recipefork-chef-instructions-display.json +54 -0
  424. package/patterns/recipefork-cookbook-assignment.json +51 -0
  425. package/patterns/recipefork-cooking-tips-display.json +43 -0
  426. package/patterns/recipefork-cooking-tips-editor.json +46 -0
  427. package/patterns/recipefork-fork-provenance.json +50 -0
  428. package/patterns/recipefork-kitchen-chat.json +103 -0
  429. package/patterns/recipefork-photo-generator.json +123 -0
  430. package/patterns/recipefork-presentation-display.json +45 -0
  431. package/patterns/recipefork-presentation-editor.json +52 -0
  432. package/patterns/recipefork-recipe-card.json +123 -0
  433. package/patterns/recipefork-recipe-metadata-form.json +58 -0
  434. package/patterns/recipefork-recipe-mode-switch.json +52 -0
  435. package/patterns/recipefork-recipe-story-editor.json +51 -0
  436. package/patterns/recipefork-simple-recipe-editor.json +49 -0
  437. package/patterns/redline-track-changes.json +113 -0
  438. package/patterns/registry-discovery-cta-grid.json +93 -0
  439. package/patterns/registry-link-list.json +118 -0
  440. package/patterns/relationship-graph.json +127 -0
  441. package/patterns/remote-cursor.json +103 -0
  442. package/patterns/render-queue.json +102 -0
  443. package/patterns/rent-reminder.json +140 -0
  444. package/patterns/rent-roll.json +112 -0
  445. package/patterns/reputation-badge.json +111 -0
  446. package/patterns/retro-table.json +128 -0
  447. package/patterns/reward-tier-selector.json +137 -0
  448. package/patterns/sample-tracker.json +127 -0
  449. package/patterns/scene-storyboard.json +104 -0
  450. package/patterns/scope-breakdown.json +108 -0
  451. package/patterns/scoreboard-live.json +116 -0
  452. package/patterns/scrim-calendar.json +114 -0
  453. package/patterns/search-filter-bar.json +141 -0
  454. package/patterns/secure-document-viewer.json +107 -0
  455. package/patterns/service-catalog.json +94 -0
  456. package/patterns/service-map.json +133 -0
  457. package/patterns/session-inspector.json +62 -0
  458. package/patterns/session-manager.json +89 -0
  459. package/patterns/settings-nav.json +106 -0
  460. package/patterns/share-modal.json +157 -0
  461. package/patterns/share-quest-panel.json +134 -0
  462. package/patterns/shot-grid.json +104 -0
  463. package/patterns/skeleton-loader.json +114 -0
  464. package/patterns/slash-command.json +80 -0
  465. package/patterns/sparkline-cell.json +103 -0
  466. package/patterns/spatial-card-stack.json +133 -0
  467. package/patterns/spatial-presence-ring.json +103 -0
  468. package/patterns/split-calculator.json +104 -0
  469. package/patterns/split-pane.json +112 -0
  470. package/patterns/stats-bar.json +125 -0
  471. package/patterns/stats-detail.json +102 -0
  472. package/patterns/stats-overview.json +132 -0
  473. package/patterns/stats-section.json +90 -0
  474. package/patterns/status-bar.json +101 -0
  475. package/patterns/status-board.json +92 -0
  476. package/patterns/stem-browser.json +58 -0
  477. package/patterns/stem-stack.json +101 -0
  478. package/patterns/stepper.json +115 -0
  479. package/patterns/storefront-hero.json +120 -0
  480. package/patterns/stretch-goal-ladder.json +128 -0
  481. package/patterns/subscriber-list.json +135 -0
  482. package/patterns/supply-chain-map.json +109 -0
  483. package/patterns/swipe-action-bar.json +119 -0
  484. package/patterns/swipe-card.json +126 -0
  485. package/patterns/table-map.json +134 -0
  486. package/patterns/target-progress-ring.json +103 -0
  487. package/patterns/team-member-row.json +139 -0
  488. package/patterns/tech-pills.json +69 -0
  489. package/patterns/tenant-card.json +150 -0
  490. package/patterns/tenant-directory.json +118 -0
  491. package/patterns/tenant-payment-setup.json +98 -0
  492. package/patterns/terminal-emulator.json +117 -0
  493. package/patterns/testimonials.json +133 -0
  494. package/patterns/tier-builder.json +131 -0
  495. package/patterns/tier-card.json +118 -0
  496. package/patterns/tier-upgrade-card.json +144 -0
  497. package/patterns/timeline-scrubber.json +107 -0
  498. package/patterns/timeline.json +140 -0
  499. package/patterns/toast-notification.json +123 -0
  500. package/patterns/tool-list.json +89 -0
  501. package/patterns/trace-waterfall.json +123 -0
  502. package/patterns/trade-modal.json +132 -0
  503. package/patterns/transcript-stream.json +125 -0
  504. package/patterns/tree-view.json +124 -0
  505. package/patterns/unit-detail.json +100 -0
  506. package/patterns/unit-list.json +106 -0
  507. package/patterns/unlock-gate.json +132 -0
  508. package/patterns/usage-meter.json +113 -0
  509. package/patterns/vacancy-tracker.json +106 -0
  510. package/patterns/valuation-chart.json +126 -0
  511. package/patterns/version-history.json +140 -0
  512. package/patterns/video-room.json +142 -0
  513. package/patterns/vod-annotator.json +112 -0
  514. package/patterns/voice-command-palette.json +127 -0
  515. package/patterns/voice-waveform.json +120 -0
  516. package/patterns/voting-breakdown.json +101 -0
  517. package/patterns/waveform-track.json +102 -0
  518. package/patterns/webhook-debugger.json +116 -0
  519. package/patterns/workflow-canvas.json +147 -0
  520. package/patterns/workspace-region-stack.json +74 -0
  521. package/schemas/archetype.v2.json +145 -0
  522. package/schemas/blueprint.v1.json +225 -0
  523. package/schemas/common.v1.json +337 -0
  524. package/schemas/content-health-report.v1.json +255 -0
  525. package/schemas/content-intelligence.v1.json +142 -0
  526. package/schemas/essence.v4.json +430 -0
  527. package/schemas/execution-pack.common.v1.json +207 -0
  528. package/schemas/page-pack.v1.json +106 -0
  529. package/schemas/pattern.v2.json +232 -0
  530. package/schemas/public-content-list.v1.json +28 -0
  531. package/schemas/public-content-record.v1.json +91 -0
  532. package/schemas/public-content-summary.v1.json +132 -0
  533. package/schemas/registry-intelligence-summary.v1.json +81 -0
  534. package/schemas/search-response.v1.json +28 -0
  535. package/schemas/section-pack.v1.json +128 -0
  536. package/schemas/shell.v1.json +69 -0
  537. package/schemas/showcase-manifest-entry.v1.json +92 -0
  538. package/schemas/showcase-manifest.v1.json +28 -0
  539. package/schemas/showcase-shortlist.v1.json +36 -0
  540. package/schemas/theme.v1.json +190 -0
  541. package/shells/canvas-overlay.json +94 -0
  542. package/shells/centered.json +49 -0
  543. package/shells/chat-portal.json +153 -0
  544. package/shells/copilot-overlay.json +156 -0
  545. package/shells/full-bleed.json +100 -0
  546. package/shells/immersive-stage.json +89 -0
  547. package/shells/minimal-header.json +103 -0
  548. package/shells/mobile-tab-bar.json +119 -0
  549. package/shells/recipefork-top-nav.json +74 -0
  550. package/shells/sidebar-aside.json +163 -0
  551. package/shells/sidebar-main-footer.json +158 -0
  552. package/shells/sidebar-main.json +175 -0
  553. package/shells/sidebar-right.json +128 -0
  554. package/shells/terminal-split.json +95 -0
  555. package/shells/three-column-browser.json +215 -0
  556. package/shells/top-nav-footer.json +114 -0
  557. package/shells/top-nav-main.json +103 -0
  558. package/shells/top-nav-sidebar.json +130 -0
  559. package/shells/workspace-aside.json +181 -0
  560. package/themes/auradecantism.json +601 -0
  561. package/themes/bespoke.json +433 -0
  562. package/themes/bioluminescent.json +217 -0
  563. package/themes/bistro.json +422 -0
  564. package/themes/carbon-neon.json +458 -0
  565. package/themes/carbon.json +429 -0
  566. package/themes/cinema.json +479 -0
  567. package/themes/clean.json +261 -0
  568. package/themes/counsel.json +431 -0
  569. package/themes/dopamine.json +237 -0
  570. package/themes/earth.json +453 -0
  571. package/themes/editorial.json +237 -0
  572. package/themes/estate.json +559 -0
  573. package/themes/fintech.json +472 -0
  574. package/themes/gaming-guild.json +341 -0
  575. package/themes/glassmorphism.json +309 -0
  576. package/themes/government.json +481 -0
  577. package/themes/healthcare.json +480 -0
  578. package/themes/lab.json +437 -0
  579. package/themes/launchpad.json +320 -0
  580. package/themes/liquid-glass.json +223 -0
  581. package/themes/luminarum.json +598 -0
  582. package/themes/neo-tokyo.json +451 -0
  583. package/themes/neon-cyber.json +280 -0
  584. package/themes/neon-dark.json +220 -0
  585. package/themes/paper.json +496 -0
  586. package/themes/prismatic.json +217 -0
  587. package/themes/recipefork.json +278 -0
  588. package/themes/retro-arcade.json +620 -0
  589. package/themes/retro.json +240 -0
  590. package/themes/studio-dark.json +437 -0
  591. package/themes/studio.json +488 -0
  592. package/themes/swipecircle.json +533 -0
  593. package/themes/terminal.json +549 -0
@@ -0,0 +1,142 @@
1
+ {
2
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
3
+ "id": "video-room",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "Video Room",
7
+ "description": "Video conferencing layout with participant grid, speaker view, screen sharing, and a floating controls bar for real-time communication.",
8
+ "category": "communication",
9
+ "tags": [
10
+ "2026",
11
+ "video",
12
+ "conferencing",
13
+ "real-time",
14
+ "communication",
15
+ "webrtc",
16
+ "meeting"
17
+ ],
18
+ "components": [
19
+ "VideoGrid",
20
+ "ParticipantTile",
21
+ "SpeakerView",
22
+ "ScreenShareView",
23
+ "ControlsBar",
24
+ "ParticipantList",
25
+ "ChatSidebar",
26
+ "ReactionOverlay"
27
+ ],
28
+ "default_preset": "grid",
29
+ "presets": {
30
+ "grid": {
31
+ "description": "Equal-sized participant tiles in a responsive grid layout — scales from 1 to 49 tiles with automatic row/column calculation for balanced distribution",
32
+ "layout": {
33
+ "layout": "grid",
34
+ "atoms": "_grid _gap-2 _p-2 _h-full _bg-gray-950 _auto-rows-fr"
35
+ }
36
+ },
37
+ "speaker": {
38
+ "description": "Dominant speaker occupies 70% of the view with a filmstrip of other participants along the bottom — automatically switches based on audio activity",
39
+ "layout": {
40
+ "layout": "stack",
41
+ "atoms": "_flex _col _h-full _bg-gray-950 _gap-2 _p-2"
42
+ }
43
+ },
44
+ "screen-share": {
45
+ "description": "Shared screen content takes the dominant area with participant thumbnails arranged in a vertical sidebar — optimized for content visibility",
46
+ "layout": {
47
+ "layout": "split",
48
+ "atoms": "_flex _row _h-full _bg-gray-950 _gap-2 _p-2"
49
+ }
50
+ },
51
+ "audio-only": {
52
+ "description": "Avatar circles with speaking indicators arranged in a grid — bandwidth-efficient mode showing profile images with animated audio visualization rings",
53
+ "layout": {
54
+ "layout": "grid",
55
+ "atoms": "_grid _gap-4 _p-8 _h-full _bg-gray-950 _place-items-center"
56
+ }
57
+ }
58
+ },
59
+ "visual_brief": "A dark-themed (always dark, background: #0a0a0f) full-viewport video conferencing interface. The grid layout arranges participant tiles as rounded rectangles (border-radius: 12px) with 8px gaps between them, automatically calculating optimal grid dimensions (e.g., 2x2 for 4 participants, 3x3 for 9). Each ParticipantTile has a subtle border (1px solid rgba(255,255,255,0.08)) that transforms into a glowing accent-colored border when the participant is speaking — the glow uses box-shadow: 0 0 0 2px var(--d-accent), 0 0 12px rgba(var(--d-accent-rgb), 0.3) with a smooth pulse animation synced to audio levels. Video fills the tile with object-fit: cover. When video is off, the tile shows the participant's avatar as a large centered circle (64px in grid, 120px in speaker view) on a slightly lighter dark background (bg-gray-900). Name labels float at the bottom-left of each tile: text rendered on a frosted glass bar (backdrop-filter: blur(12px), background: rgba(0,0,0,0.5), border-radius: 6px, padding: 4px 8px). The label shows the participant name (text-sm, text-white) and a small mute icon (12px, red microphone-off icon) if muted. In speaker view, the active speaker occupies the top 70% of the viewport as a large tile, with a horizontal filmstrip of other participants (120px tall tiles) scrolling along the bottom. The transition between active speakers cross-fades over 400ms. The ControlsBar is centered at the bottom of the viewport, floating 24px above the edge. It contains circular buttons (48px diameter) arranged horizontally with 12px gaps: microphone toggle (white icon on dark bg, red bg when muted), camera toggle (same pattern), screen share (accent highlight when active), reactions (opens an emoji picker flyout), participants list toggle, chat toggle, and leave call (always red background, white phone-down icon). Buttons have a frosted glass background (backdrop-filter: blur(16px), background: rgba(30,30,30,0.8), border: 1px solid rgba(255,255,255,0.1)). The ReactionOverlay renders floating emoji that rise from the participant's tile with a float-up + fade-out animation. Screen share mode places the shared content in 75% of the width with a vertical strip of participant thumbnails (160px wide) on the right side.",
60
+ "layout_hints": {
61
+ "container": "full-viewport-dark",
62
+ "note": "This pattern ALWAYS uses a dark theme regardless of the app's light/dark mode setting. Background must be near-black (#0a0a0f or similar). All text is white/light. Do not apply light theme colors.",
63
+ "tile_sizing": "Participant tiles must maintain 16:9 aspect ratio when possible. In grid mode, calculate rows and columns to fill the viewport: cols = ceil(sqrt(n * aspectRatio)), rows = ceil(n / cols). Use CSS aspect-ratio: 16/9 with object-fit: cover on video elements.",
64
+ "speaking_indicator": "The speaking border glow is the PRIMARY visual indicator of who is talking. It must be clearly visible — use at least 2px solid accent border + 12px blur box-shadow. The glow should pulse subtly (opacity 0.6→1.0→0.6) synced to audio amplitude.",
65
+ "controls_placement": "ControlsBar must be centered horizontally, floating above the bottom edge. It should auto-hide after 5 seconds of mouse inactivity (fade out over 300ms) and reappear on mouse movement. On touch devices, tap to toggle visibility.",
66
+ "name_labels": "Name labels use frosted glass (backdrop-filter: blur(12px)). They are positioned at the bottom-left of each tile with 8px margin. Keep them compact — name only with optional mute icon. Do NOT show full details in the label."
67
+ },
68
+ "default_layout": {
69
+ "layout": "grid",
70
+ "atoms": "_grid _gap-2 _p-2 _h-full _w-full _bg-gray-950",
71
+ "slots": {
72
+ "video-grid": "The main container for participant tiles. Uses CSS Grid with auto-calculated columns and rows based on participant count. Gap of 8px between tiles. The grid fills the entire viewport minus the space reserved for the controls bar. Background is the deep dark (#0a0a0f). When only 1 participant, the tile fills the entire grid. For 2 participants, side-by-side at 50% each. For 3-4, 2x2 grid. For 5-9, 3x3. For 10-16, 4x4. And so on, always preferring wider layouts. All tiles stretch to fill available space equally using auto-rows: 1fr and auto-columns: 1fr.",
73
+ "participant-tile": "Repeating slot — one per participant. A rounded rectangle (border-radius: 12px) with overflow: hidden. Contains the video stream element (width: 100%, height: 100%, object-fit: cover) or a fallback avatar display (centered circle, 64px diameter, showing initials or profile image, on a bg-gray-900 background with a subtle radial gradient from center). Border: 1px solid rgba(255,255,255,0.08) default, transitioning to the speaking glow state (box-shadow: 0 0 0 2px var(--d-accent), 0 0 16px rgba(var(--d-accent-rgb), 0.35)) when the participant is actively speaking. The name label bar is positioned absolute at bottom: 8px, left: 8px — a frosted glass pill (backdrop-filter: blur(12px), background: rgba(0,0,0,0.55), border-radius: 6px, padding: 4px 10px) showing the name in text-sm font-medium text-white. If the participant is muted, a small red microphone-off icon (14px) appears after the name with 6px gap. If video is off, a camera-off icon (14px, text-gray-500) appears in the top-right corner of the tile. Pin indicator (small pin icon, top-left) for manually pinned participants.",
74
+ "speaker-view": "Active in speaker preset. The dominant speaker tile occupies the top area (flex: 7, approximately 70% height). Below it, a horizontal scrollable filmstrip (flex: 3, approximately 30% height, max 120px) shows other participants as smaller tiles. The active speaker tile has a subtle accent border glow at all times. Transition between speakers uses a 400ms cross-fade (the outgoing speaker tile smoothly swaps into the filmstrip while the new speaker expands to the dominant position). The filmstrip scrolls horizontally with 8px gaps between tiles, each filmstrip tile is 160px wide with 16:9 aspect ratio.",
75
+ "screen-share-view": "Active in screen-share preset. The shared screen content occupies the left 75% of the viewport as a single large tile with object-fit: contain (showing the full shared content with letterboxing if aspect ratios differ). A thin border separates it from the participant sidebar on the right (25% width, min 160px), which stacks participant tiles vertically with 8px gaps in a scrollable column. The shared content tile has a label bar at the top showing '{name} is sharing their screen' on a frosted glass background.",
76
+ "controls-bar": "A floating horizontal bar centered at the bottom of the viewport, 24px above the bottom edge. Uses position: fixed with left: 50%, transform: translateX(-50%). The bar itself has a frosted glass background (backdrop-filter: blur(16px), background: rgba(20,20,25,0.85), border: 1px solid rgba(255,255,255,0.1), border-radius: 28px, padding: 8px 16px). Contains circular control buttons (48px diameter each) spaced 12px apart: Microphone (white mic icon, toggles to red background + mic-off icon when muted), Camera (white camera icon, toggles to red bg + camera-off when off), Screen Share (monitor icon, accent background when actively sharing), Reactions (smile icon, opens an upward emoji picker flyout with 6 quick reactions), Participants (users icon, toggles ParticipantList sidebar, shows count badge), Chat (message icon, toggles ChatSidebar, shows unread count badge), Leave (red background always, phone-off white icon, slightly separated from other buttons with a 16px gap). Each button has hover: brightness(1.2) and active: scale(0.95) feedback.",
77
+ "reaction-overlay": "A visual layer rendered above participant tiles (pointer-events: none) where emoji reactions appear. When a participant reacts, the chosen emoji (32px) spawns from the bottom-center of their tile, floats upward over 2 seconds with a slight sinusoidal horizontal drift, scaling from 1.0 to 1.3 while fading from opacity 1.0 to 0. Multiple reactions can stack. Each reaction also briefly shows as a small emoji badge (20px) in the top-right corner of the participant's tile for 3 seconds.",
78
+ "chat-sidebar": "A 360px-wide panel that slides in from the right edge of the viewport when toggled. Dark background (bg-gray-900) with a subtle left border (1px solid rgba(255,255,255,0.08)). Contains a scrollable message list and a bottom-anchored input field. Messages show sender name (text-xs, text-gray-400), message text (text-sm, text-white), and timestamp. The sidebar overlays the video grid (does not resize it) with a smooth 300ms slide-in animation.",
79
+ "participant-list": "A 300px-wide panel that slides in from the right edge. Lists all participants with their avatar (32px circle), name (text-sm, text-white), and status icons (mic muted, camera off, screen sharing). Hovering a participant shows quick actions: mute, pin, spotlight. Shows participant count at the top."
80
+ }
81
+ },
82
+ "accessibility": {
83
+ "role": "application",
84
+ "aria-label": "Video conference room",
85
+ "announcements": [
86
+ "{name} joined the call",
87
+ "{name} left the call",
88
+ "{name} started sharing their screen",
89
+ "{name} stopped sharing",
90
+ "{name} is now speaking",
91
+ "You are now muted",
92
+ "You are now unmuted"
93
+ ],
94
+ "keyboard": [
95
+ "M: toggle microphone mute",
96
+ "V: toggle camera on/off",
97
+ "S: toggle screen sharing",
98
+ "C: toggle chat sidebar",
99
+ "P: toggle participant list",
100
+ "R: open reactions picker",
101
+ "Tab: cycle through participant tiles",
102
+ "Enter: pin/unpin focused participant",
103
+ "Escape: close any open sidebar or picker",
104
+ "Ctrl+D / Cmd+D: leave call (with confirmation)"
105
+ ]
106
+ },
107
+ "responsive": {
108
+ "mobile": "Grid layout switches to max 2x2 tiles with the active speaker auto-promoted to the largest tile. Controls bar simplifies to 4 essential buttons (mic, camera, chat, leave) with a '...' overflow menu for additional controls. Participant tiles show only video/avatar without name labels (name appears on tap). Screen share view goes full-screen with a floating 'back to tiles' button. Chat sidebar becomes a full-screen overlay. No hover states — all interactions are tap-based.",
109
+ "tablet": "Grid supports up to 3x3 tiles. Controls bar shows all buttons. Speaker view maintains the 70/30 split. Screen share sidebar becomes a bottom filmstrip instead of right sidebar. Chat sidebar is a half-width overlay. Touch-friendly button sizes (min 44px tap targets). Name labels always visible.",
110
+ "desktop": "Full grid up to 7x7 (49 participants). All controls visible with keyboard shortcuts. Hover-to-show name labels option. Controls bar auto-hides on mouse inactivity. Screen share uses the right sidebar layout. Chat and participant list can be open simultaneously if viewport width exceeds 1400px. Drag to rearrange participant tile positions."
111
+ },
112
+ "motion": {
113
+ "micro": {
114
+ "button-press": "scale(0.95) on active/press, 80ms ease-out, return 120ms ease-out",
115
+ "button-hover": "brightness(1.2) filter, 100ms ease-out",
116
+ "mute-toggle": "Icon cross-fades with 150ms, background-color transitions 200ms"
117
+ },
118
+ "transitions": {
119
+ "speaker-swap": "Cross-fade between active speakers, 400ms ease-in-out. Outgoing speaker tile animates to filmstrip position while incoming speaker tile expands to dominant.",
120
+ "grid-reflow": "When participant joins or leaves, tiles animate to new grid positions over 300ms spring(1, 100, 12)",
121
+ "sidebar-toggle": "Chat/participant sidebar slides in from right over 300ms ease-out with a subtle backdrop dim",
122
+ "controls-hide": "Controls bar fades out (opacity 1→0) over 300ms after 5s of mouse inactivity, fades in immediately on mouse move"
123
+ },
124
+ "ambient": {
125
+ "speaking-glow": "Active speaker border glow pulses opacity 0.5→1.0→0.5, 1.5s ease-in-out, synchronized to voice activity detection",
126
+ "audio-ring": "In audio-only mode, concentric rings expand outward from avatar when speaking, 1s ease-out infinite while voice active",
127
+ "reaction-float": "Emoji rises from tile bottom-center, drifts upward 120px with sinusoidal X offset (amplitude 20px, period 1s), scales 1.0→1.3, opacity 1.0→0, duration 2s ease-out"
128
+ }
129
+ },
130
+ "interactions": [
131
+ "animate-on-mount"
132
+ ],
133
+ "composition": {
134
+ "VideoRoom": "Room(d-section, full-viewport, dark-always) > [VideoArea + ControlsBar + ReactionOverlay + ChatSidebar? + ParticipantList?]",
135
+ "VideoArea": "Grid(d-surface[dark], responsive-grid) > ParticipantTile* | SpeakerView | ScreenShareView",
136
+ "ParticipantTile": "Tile(d-surface[dark], rounded, overflow-hidden) > [VideoStream | AvatarFallback] + NameLabel(frosted-glass) + MuteIndicator?",
137
+ "SpeakerView": "Split(flex-col) > [DominantTile(flex-7) + Filmstrip(flex-3, horizontal-scroll) > ParticipantTile*]",
138
+ "ScreenShareView": "Split(flex-row) > [SharedContent(flex-3, object-contain) + TileSidebar(flex-1, vertical-scroll) > ParticipantTile*]",
139
+ "ControlsBar": "Bar(floating, frosted-glass, bottom-center, auto-hide) > [MicButton + CameraButton + ShareButton + ReactionsButton + ParticipantsButton + ChatButton + LeaveButton(red)]",
140
+ "ReactionOverlay": "Layer(pointer-events-none, full-viewport) > FloatingEmoji*(animated, ephemeral)"
141
+ }
142
+ }
@@ -0,0 +1,112 @@
1
+ {
2
+ "id": "vod-annotator",
3
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "VOD Annotator",
7
+ "description": "A video-on-demand playback surface with timeline annotation flags, drawing overlay tools, tag filtering, and replay markers for esports coaching review.",
8
+ "category": "esports",
9
+ "tags": [
10
+ "2026",
11
+ "esports",
12
+ "video",
13
+ "vod",
14
+ "annotation",
15
+ "coaching",
16
+ "review"
17
+ ],
18
+ "components": [
19
+ "VideoPlayer",
20
+ "AnnotationTimeline",
21
+ "DrawingOverlay",
22
+ "MarkerFlag",
23
+ "TagChip",
24
+ "ReplayButton"
25
+ ],
26
+ "default_preset": "standard",
27
+ "presets": {
28
+ "standard": {
29
+ "description": "Single video player with annotation timeline beneath, drawing overlay on top of video, and tag-filtering chip rail along the bottom",
30
+ "layout": {
31
+ "layout": "stacked",
32
+ "atoms": "_flex _flex-col _gap-3 _w100 _max-w-6xl _mx-auto _p-4"
33
+ }
34
+ },
35
+ "multi-angle": {
36
+ "description": "Synchronized grid of player POV video feeds viewed simultaneously with shared timeline and aligned annotation markers across all angles",
37
+ "layout": {
38
+ "layout": "grid-2",
39
+ "atoms": "_grid _grid-cols-2 _gap-2 _w100 _p-4"
40
+ }
41
+ },
42
+ "heatmap": {
43
+ "description": "Timeline heatmap overlay showing aggregated play frequency and annotation density across the VOD duration for pattern-spotting review",
44
+ "layout": {
45
+ "layout": "stacked",
46
+ "atoms": "_flex _flex-col _gap-3 _w100 _p-4"
47
+ }
48
+ }
49
+ },
50
+ "visual_brief": "A dark-background coaching surface. Large 16:9 video player at top with standard playback controls (play/pause, scrub, time, speed, volume, fullscreen) overlaid at bottom of the video on hover. A transparent drawing overlay sits atop the video, enabled by toolbar toggle, allowing arrows, circles, rectangles, and freehand lines in brand-accent colors. Directly below the player, an annotation timeline strip spans full width with colored marker flags planted at annotation timestamps (color encodes tag type: red=mistake, green=highlight, blue=rotation, purple=teamfight, amber=objective). Hovering a flag reveals a mini-preview thumbnail and annotation text. A horizontal tag chip rail below timeline acts as filters — click a chip to hide/show flag types. Each annotation in the list has a replay button that jumps to that timestamp and loops the moment. Commenter avatars appear as small circles on each flag showing who created it.",
51
+ "layout_hints": {
52
+ "container": "d-section",
53
+ "note": "Video player must be 16:9 aspect. Drawing overlay must be toggleable to avoid interfering with scrub controls.",
54
+ "tag_colors": "Tag color semantics must stay consistent across annotations: mistake=red, highlight=green, rotation=blue, teamfight=purple, objective=amber."
55
+ },
56
+ "default_layout": {
57
+ "layout": "stacked",
58
+ "atoms": "_flex _flex-col _gap-3 _w100 _max-w-6xl _mx-auto _p-4",
59
+ "slots": {
60
+ "video-player": "16:9 HTML5 or custom video element with playback controls overlay, scrub bar, speed, volume, fullscreen.",
61
+ "drawing-overlay": "Transparent SVG canvas layered over the video supporting arrows, shapes, freehand drawing with brand-accent colors.",
62
+ "annotation-timeline": "Horizontal strip beneath video showing marker-flag planted at each annotation timestamp, synchronized with playback.",
63
+ "marker-flag": "Repeating colored flag element on timeline. Color encodes tag type. Click jumps to timestamp.",
64
+ "tag-chip": "Filter chip in bottom rail toggling visibility of a tag category across markers.",
65
+ "replay-button": "Button beside each annotation list entry that seeks and loops the annotated moment."
66
+ }
67
+ },
68
+ "accessibility": {
69
+ "role": "application",
70
+ "aria-label": "Video annotation review surface",
71
+ "announcements": [
72
+ "Annotation at {timestamp}: {tag} by {author}",
73
+ "Filter {tag} {enabled|disabled}"
74
+ ],
75
+ "keyboard": [
76
+ "Space: play/pause video",
77
+ "J / L: seek back/forward 5s",
78
+ "M: mute",
79
+ "F: fullscreen",
80
+ "N: create new annotation at current timestamp",
81
+ "D: toggle drawing overlay",
82
+ "Arrow Left/Right: previous/next annotation"
83
+ ]
84
+ },
85
+ "responsive": {
86
+ "mobile": "Tag chip rail scrolls horizontally. Drawing tools move to bottom action sheet. Multi-angle collapses to single view with tab switcher.",
87
+ "tablet": "Standard layout retained. Timeline marker size reduced."
88
+ },
89
+ "motion": {
90
+ "micro": {
91
+ "flag-hover": "marker scale(1.3) + preview thumbnail slide-up 180ms ease-out",
92
+ "chip-toggle": "chip opacity dim when disabled 150ms"
93
+ },
94
+ "transitions": {
95
+ "seek-jump": "playhead smooth-scrub 300ms ease-in-out",
96
+ "drawing-draw": "stroke path draw-in with follow-cursor immediate"
97
+ },
98
+ "ambient": {
99
+ "playhead-pulse": "timeline playhead subtle glow pulse 2s ease-in-out infinite while playing"
100
+ }
101
+ },
102
+ "interactions": [
103
+ "animate-on-mount"
104
+ ],
105
+ "composition": {
106
+ "VodAnnotator": "Section(d-section) > [VideoPlayer(16:9) > [VideoElement + DrawingOverlay + PlaybackControls] + AnnotationTimeline > MarkerFlag[] + TagChipRail > TagChip[] + AnnotationList > AnnotationEntry[] > [Timestamp + TagBadge + AuthorAvatar + NoteText + ReplayButton]]",
107
+ "VideoPlayer": "Player(aspect-16-9) > [Video + Overlays + Controls(scrub, play, speed, vol, fs)]",
108
+ "DrawingOverlay": "SVG(layered, toggleable) > DrawLayer(arrows, shapes, freehand)",
109
+ "AnnotationTimeline": "Strip(horizontal, scrub-synced) > [TimelineTrack + MarkerFlag[] + Playhead]",
110
+ "MarkerFlag": "Flag(d-interactive, tag-colored) > [FlagIcon + AuthorAvatar + PreviewOnHover]"
111
+ }
112
+ }
@@ -0,0 +1,127 @@
1
+ {
2
+ "id": "voice-command-palette",
3
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "Voice Command Palette",
7
+ "description": "Voice-activated command interface with real-time waveform visualization, live transcription, contextual suggestion chips, and processing feedback — a voice-first alternative to traditional command palettes.",
8
+ "category": "voice",
9
+ "tags": [
10
+ "2027",
11
+ "frontier",
12
+ "voice",
13
+ "command",
14
+ "palette",
15
+ "natural-language",
16
+ "AI",
17
+ "hands-free"
18
+ ],
19
+ "components": [
20
+ "CommandOverlay",
21
+ "VoiceInput",
22
+ "CommandSuggestion",
23
+ "ProcessingIndicator",
24
+ "ResultPreview",
25
+ "HotkeyHint"
26
+ ],
27
+ "default_preset": "overlay",
28
+ "presets": {
29
+ "overlay": {
30
+ "description": "Full-screen centered overlay with backdrop blur — large waveform at top, live transcript below, suggestion chips at the bottom, suitable for primary voice command invocation",
31
+ "layout": {
32
+ "layout": "stack",
33
+ "atoms": "_fixed _inset-0 _flex _items-center _justify-center _bg-black/50 _backdrop-blur-sm _z-50"
34
+ }
35
+ },
36
+ "inline": {
37
+ "description": "Embedded voice command input within a page section — compact waveform, transcript, and suggestions rendered inline without overlay or backdrop, for persistent voice interfaces",
38
+ "layout": {
39
+ "layout": "stack",
40
+ "atoms": "_flex _flex-col _gap-3 _p-4 _rounded-xl _border _bg-surface"
41
+ }
42
+ },
43
+ "floating": {
44
+ "description": "Small 48px circle near the mic button that expands into a pill shape showing transcript and suggestions — minimal footprint, ideal for always-available voice access in toolbars",
45
+ "layout": {
46
+ "layout": "flex",
47
+ "atoms": "_fixed _bottom-4 _right-4 _z-50"
48
+ }
49
+ }
50
+ },
51
+ "visual_brief": "In overlay mode: a centered modal panel (max-width 560px, rounded-2xl, bg-surface, shadow-2xl) appears over a full-screen backdrop (bg-black/50%, backdrop-blur-sm). The panel is vertically stacked. At the top (p-6): a large waveform visualization (the same bar-style as voice-waveform pattern, but wider — 48 bars spanning the full panel width) showing the user's live speech input. The bars are accent-colored during active speech and collapse to muted during silence. Below the waveform (px-6): a live transcript area (min-height 48px, max-height 120px) displaying the real-time speech-to-text result in text-lg font-medium. Text appears word-by-word with a blinking cursor at the end. A muted placeholder ('Say a command...') shows when no speech has been captured. Below the transcript (px-6, pb-4): a horizontally scrollable row of suggestion chips. Each chip is a pill (rounded-full, px-3 py-1.5, border, text-sm) showing a parsed command interpretation ('Navigate to /settings', 'Open file: main.ts', 'Run build'). The most likely suggestion has a filled background (bg-accent, text-accent-foreground). Others have outline style. Chips update in real-time as the transcript changes — they fade in/out with 150ms transitions. At the bottom of the panel: a thin separator line, then a footer row (px-6, py-3) showing a HotkeyHint on the left ('Esc to cancel') and a small microphone status icon on the right. When the system is processing a recognized command: the waveform area is replaced by a ProcessingIndicator — a horizontal pulsing bar (4px tall, bg-accent, animated width oscillation from 20% to 80% and back). A brief success state flashes the panel border green (200ms) before the overlay dismisses. In floating mode: resting state is a 48px circle (bg-accent, shadow-lg) with a microphone icon (24px, white). On activation (click or hotkey), the circle smoothly expands (300ms spring) into a pill shape (width: 320px, height: auto, rounded-2xl, bg-surface, shadow-2xl). The pill shows a compact waveform (24px tall), a single-line transcript, and up to 3 suggestion chips below. Tapping outside or pressing Escape collapses it back to the circle.",
52
+ "layout_hints": {
53
+ "container": "fixed overlay or inline block depending on preset",
54
+ "note": "The overlay preset should trap focus when open and return focus to the trigger element on close. The floating preset should not trap focus but should be keyboard-accessible.",
55
+ "dismissal": "Overlay dismisses on: Escape key, click outside the panel, or successful command execution. Floating collapses on: Escape, tap outside, or 5s of silence after last speech.",
56
+ "command_parsing": "Suggestion chips should be driven by an intent-parsing layer that matches partial transcripts against available commands. Show up to 5 suggestions in overlay mode, 3 in floating mode.",
57
+ "success_feedback": "On successful command execution: flash panel border green (var(--d-success)) for 200ms, then dismiss with a scale-down + fade-out animation (200ms ease-in)."
58
+ },
59
+ "default_layout": {
60
+ "layout": "stack",
61
+ "atoms": "_fixed _inset-0 _flex _items-center _justify-center _bg-black/50 _backdrop-blur-sm _z-50",
62
+ "slots": {
63
+ "command-overlay": "The full-screen backdrop layer. Uses position: fixed, inset: 0. Background is black at 50% opacity with backdrop-filter: blur(4px). Clicking this backdrop area (outside the panel) dismisses the voice command palette. The overlay should fade in (opacity 0→1 over 150ms) on open and fade out on close. Z-index: 50 to sit above all page content. The overlay traps focus — Tab cycles only through interactive elements within the panel.",
64
+ "voice-input": "The primary interaction zone at the top of the modal panel. Contains two sub-regions: (1) WaveformPreview — a 48-bar amplitude visualization spanning the full panel width (approximately 480px), bars 4px wide with 3px gap, 48px tall, centered. Bars animate identically to the voice-waveform bar preset but scaled to panel width. (2) Transcript — a text area below the waveform (margin-top: 16px) showing the live speech-to-text output. Text renders in text-lg, font-medium. Words appear incrementally with 80ms fade-in per word. A blinking cursor (2px wide, accent color, 1s blink) follows the last word. When no speech has been captured, a muted placeholder reads 'Say a command...' in text-muted, italic. The transcript area has min-height: 48px and max-height: 120px with overflow-y: auto for long utterances.",
65
+ "command-suggestion": "A horizontally scrollable row of suggestion chips below the transcript. Each chip is a pill-shaped button: rounded-full, px-3, py-1.5, text-sm, font-medium. The highest-confidence suggestion uses filled style (bg-accent, text-accent-foreground). Remaining suggestions use outline style (border, text-foreground). Each chip has a subtle left icon indicating command type (navigation: arrow icon, action: play icon, query: search icon). Chips enter with a staggered fade-in (50ms delay per chip, 150ms duration). When the transcript changes, chips that are no longer relevant fade out (100ms) and new ones fade in. Clicking a chip immediately executes that command. The row is horizontally scrollable with scroll-snap-type: x mandatory and hidden scrollbar. Maximum 5 chips visible in overlay mode.",
66
+ "processing-indicator": "Shown when a command has been recognized and is being executed. Replaces the waveform area. A horizontal bar (4px tall, full width, rounded-full) with an animated fill: the filled portion oscillates between 20% and 80% width, sliding left to right and back, using accent color (bg-accent). Animation: 1.5s ease-in-out infinite. Below the bar, centered text in text-sm text-muted reads 'Processing: {command_summary}...'. The indicator enters with a crossfade from the waveform (200ms).",
67
+ "result-preview": "Shown briefly after successful command execution before the overlay dismisses. A compact preview of the command result: for navigation commands, shows the destination page title; for action commands, shows a checkmark + 'Done' message; for queries, shows a brief answer snippet. Renders in a muted card style (bg-muted/10%, rounded-lg, p-3, text-sm). Visible for 800ms before the overlay auto-dismisses.",
68
+ "hotkey-hint": "A small footer row at the bottom of the panel (px-6, py-3, border-t). Left side: keyboard shortcut hints in text-xs, text-muted, font-mono ('Esc to cancel · Enter to confirm'). Right side: a small microphone status indicator (12px circle — green when listening, red when error, gray when idle). The footer is visually understated to avoid competing with the main interaction area."
69
+ }
70
+ },
71
+ "accessibility": {
72
+ "role": "dialog",
73
+ "aria-label": "Voice command palette",
74
+ "aria-modal": "true",
75
+ "announcements": [
76
+ "Voice command palette opened — listening for commands",
77
+ "Heard: {transcript}",
78
+ "Suggestion: {command_description}",
79
+ "Processing command: {command}",
80
+ "Command executed: {result}",
81
+ "Voice command palette closed"
82
+ ],
83
+ "keyboard": [
84
+ "Cmd+Shift+V / Ctrl+Shift+V: open voice command palette",
85
+ "Escape: close/cancel",
86
+ "Enter: confirm top suggestion",
87
+ "Arrow Left/Right: navigate between suggestion chips",
88
+ "Tab: cycle through suggestions and controls",
89
+ "1-5: quick-select suggestion by number"
90
+ ]
91
+ },
92
+ "responsive": {
93
+ "mobile": "Overlay panel expands to full-width (inset-x: 16px) with rounded-xl. Waveform reduces to 24 bars. Suggestion chips stack vertically instead of horizontal scroll. Floating preset circle increases to 56px for touch. Processing indicator uses full-width.",
94
+ "tablet": "Overlay panel at max-width: 560px centered. Full 48-bar waveform. Horizontal chip scroll with touch. Floating preset unchanged."
95
+ },
96
+ "motion": {
97
+ "micro": {
98
+ "chip-hover": "scale(1.03) + shadow-elevation 150ms ease-out",
99
+ "chip-press": "scale(0.97) 100ms ease-in",
100
+ "hotkey-hint-hover": "opacity 0.5→1 150ms"
101
+ },
102
+ "transitions": {
103
+ "overlay-open": "backdrop opacity 0→1 150ms ease-out, panel scale(0.95)→scale(1) + opacity 0→1 200ms spring",
104
+ "overlay-close": "panel scale(1)→scale(0.95) + opacity 1→0 150ms ease-in, backdrop opacity 1→0 150ms",
105
+ "floating-expand": "circle width 48px→320px, height 48px→auto, border-radius 24px→16px over 300ms spring",
106
+ "floating-collapse": "reverse of expand, 250ms ease-in",
107
+ "success-flash": "border-color → var(--d-success) 0ms, then back to default over 200ms ease-out"
108
+ },
109
+ "ambient": {
110
+ "waveform-listening": "continuous bar oscillation at 60fps synced to audio input",
111
+ "cursor-blink": "opacity steps(2) 1s infinite",
112
+ "processing-sweep": "width oscillation 20%→80%→20% 1.5s ease-in-out infinite"
113
+ }
114
+ },
115
+ "interactions": [
116
+ "animate-on-mount"
117
+ ],
118
+ "composition": {
119
+ "VoiceCommandPalette": "Dialog(d-surface, fixed|inline, z-50) > [VoiceInput + CommandSuggestions + ProcessingIndicator? + ResultPreview? + HotkeyHint]",
120
+ "VoiceInput": "Section(flex-col, gap-3, p-6) > [WaveformPreview(48-bar, animated) + Transcript(text-lg, live-updating)]",
121
+ "CommandSuggestions": "ScrollRow(flex, gap-2, overflow-x-auto, px-6) > CommandSuggestion*(d-interactive, pill, staggered-enter)",
122
+ "CommandSuggestion": "Button(rounded-full, px-3, py-1.5, text-sm) > [TypeIcon + Label]",
123
+ "ProcessingIndicator": "Div(flex-col, items-center, gap-2) > [AnimatedBar(4px, accent, oscillating-width) + StatusText(text-sm, text-muted)]",
124
+ "ResultPreview": "Card(bg-muted/10%, rounded-lg, p-3, text-sm) > ResultContent",
125
+ "HotkeyHint": "Footer(flex, justify-between, px-6, py-3, border-t) > [ShortcutText(text-xs, mono) + MicStatus(12px, dot)]"
126
+ }
127
+ }
@@ -0,0 +1,120 @@
1
+ {
2
+ "id": "voice-waveform",
3
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "Voice Waveform",
7
+ "description": "Live audio visualization showing speech amplitude as an animated waveform — supports bar, sine wave, circular, and minimal display modes for real-time voice feedback.",
8
+ "category": "voice",
9
+ "tags": [
10
+ "2027",
11
+ "frontier",
12
+ "voice",
13
+ "audio",
14
+ "waveform",
15
+ "visualization",
16
+ "real-time",
17
+ "animation"
18
+ ],
19
+ "components": [
20
+ "WaveformCanvas",
21
+ "AmplitudeBar",
22
+ "FrequencyDisplay",
23
+ "VoiceIndicator",
24
+ "MuteToggle"
25
+ ],
26
+ "default_preset": "bar",
27
+ "presets": {
28
+ "bar": {
29
+ "description": "Vertical bars (32 bars, width 3px, gap 2px) that oscillate with speech amplitude — center bars taller for mid-range voice frequencies, edges shorter",
30
+ "layout": {
31
+ "layout": "flex",
32
+ "atoms": "_flex _items-center _justify-center _gap-0.5 _h-12 _overflow-hidden"
33
+ }
34
+ },
35
+ "wave": {
36
+ "description": "Smooth sine wave rendered via SVG path that undulates with speech cadence — amplitude controls wave height, frequency controls wave density",
37
+ "layout": {
38
+ "layout": "flex",
39
+ "atoms": "_flex _items-center _justify-center _h-12 _overflow-hidden"
40
+ }
41
+ },
42
+ "circular": {
43
+ "description": "Waveform wrapped around a 128px diameter circle with amplitude extending radially outward — creates a pulsing orb effect during active speech",
44
+ "layout": {
45
+ "layout": "flex",
46
+ "atoms": "_flex _items-center _justify-center _w-32 _h-32"
47
+ }
48
+ },
49
+ "minimal": {
50
+ "description": "Single horizontal line that thickens and thins with volume — extremely compact, suitable for inline placement next to speaker names or mic icons",
51
+ "layout": {
52
+ "layout": "flex",
53
+ "atoms": "_flex _items-center _h-4 _w-16"
54
+ }
55
+ }
56
+ },
57
+ "visual_brief": "A horizontal strip showing real-time audio amplitude. In bar mode: 32 vertical bars, each 3px wide with 2px gap, aligned at their vertical center. Heights map to frequency bands — the center 10–12 bars are taller (representing mid-range voice frequencies at 300–3000 Hz), while edge bars are shorter (low and high frequency). During active speech, bars animate at 60fps with heights oscillating between 4px (quiet) and 100% container height (loud). Active bars use the accent color with a subtle glow (box-shadow: 0 0 6px var(--d-accent)). During silence, bars collapse to 2–4px heights in a muted/neutral color at 20% opacity, barely visible. The wave preset renders a single SVG path element using a cubic bezier approximation of a sine wave. The path's vertical displacement corresponds to amplitude (±24px from center at max volume), and the wave's horizontal frequency increases slightly with louder speech. Stroke width is 2px, accent color, with a subtle drop-shadow. The circular preset draws 64 radial lines emanating from a center point, each line's length proportional to its frequency band's amplitude. Lines extend outward from a 64px radius circle. Active speech creates a dynamic starburst/sea-urchin effect. A faint circle outline (1px, muted) marks the base radius. The minimal preset is a single horizontal line (2px default stroke) that smoothly animates stroke-width between 1px (silence) and 6px (loud speech), using accent color when active and muted color when silent.",
58
+ "layout_hints": {
59
+ "container": "inline or block",
60
+ "note": "The waveform should be placed near voice/audio controls. It works well inside a toolbar, header bar, or alongside a speaker avatar. For the circular preset, ensure the parent container allows the 128px square footprint.",
61
+ "data_binding": "Bind to a Web Audio API AnalyserNode. The component expects a Float32Array of frequency data (32 or 64 bins depending on preset) updated at 60fps via requestAnimationFrame.",
62
+ "color_states": "Active speech: var(--d-accent). Silence: var(--d-muted) at 20% opacity. Muted: var(--d-muted) at 10% opacity with a strikethrough icon overlay."
63
+ },
64
+ "default_layout": {
65
+ "layout": "flex",
66
+ "atoms": "_flex _items-center _justify-center _gap-0.5 _h-12 _overflow-hidden _rounded-md",
67
+ "slots": {
68
+ "waveform-canvas": "The primary SVG or Canvas element that renders the waveform visualization. In bar mode, this is a flex container holding 32 AmplitudeBar elements centered vertically. Each bar is a rounded rectangle (border-radius: 1.5px) with its height driven by the corresponding frequency bin value. The canvas handles the animation loop — on each frame, it reads frequency data from the audio analyser and updates bar heights with a slight easing (lerp factor 0.3) to smooth out jitter. Background is transparent. The canvas must be GPU-accelerated (will-change: transform) to maintain 60fps.",
69
+ "amplitude-bar": "Repeating slot — one per frequency bin (32 in bar preset, 64 in circular). Each bar is a thin vertical rectangle, width 3px, with dynamic height. Bars use CSS custom properties (--bar-height) updated via JavaScript for animation. Color transitions between muted (silence) and accent (speech) over 150ms. Bars have border-radius: 1.5px for softened edges. In the circular preset, bars become radial lines rotated around the center point at equal angular intervals (360°/64 = 5.625° apart).",
70
+ "frequency-display": "Optional diagnostic slot showing the dominant frequency in Hz as small monospace text (text-xs, text-muted). Positioned below the waveform canvas. Useful for debugging or advanced UIs. Hidden by default in all presets — toggled via a data attribute.",
71
+ "voice-indicator": "A small (8px) colored dot positioned to the left of the waveform canvas. Green when speech is detected (VAD active), muted/gray when silent, red when in error state (no microphone access). Includes a subtle pulse animation (scale 1→1.3→1 over 1.5s) when speech is active. Serves as a quick glanceable status indicator independent of the waveform animation.",
72
+ "mute-toggle": "An icon button (24×24px) positioned to the right of the waveform canvas. Shows a microphone icon when unmuted, a microphone-off icon with a diagonal strikethrough when muted. Clicking toggles the audio input. When muted, the entire waveform dims to 20% opacity and bars freeze at minimum height. The button has hover (background: var(--d-muted)/10%) and focus-visible (outline ring) states."
73
+ }
74
+ },
75
+ "accessibility": {
76
+ "role": "img",
77
+ "aria-label": "Voice waveform visualization",
78
+ "announcements": [
79
+ "Microphone {muted|unmuted}",
80
+ "Speech detected",
81
+ "Speech ended — silence",
82
+ "Audio input error: {reason}"
83
+ ],
84
+ "keyboard": [
85
+ "M: toggle mute",
86
+ "Space: toggle mute (when mute button focused)",
87
+ "Escape: stop audio capture"
88
+ ]
89
+ },
90
+ "responsive": {
91
+ "mobile": "Bar count reduces from 32 to 16 for performance. Circular preset scales down to 96px diameter. Minimal preset remains unchanged. MuteToggle increases to 44×44px for touch targets.",
92
+ "tablet": "Full bar count maintained. Circular preset at full 128px. Touch-friendly mute toggle at 36×36px."
93
+ },
94
+ "motion": {
95
+ "micro": {
96
+ "bar-oscillation": "height transition per frame, lerp factor 0.3, GPU-accelerated via transform: scaleY()",
97
+ "mute-toggle-hover": "background-color 150ms ease-out"
98
+ },
99
+ "transitions": {
100
+ "mute-state": "opacity 0.2→1 or 1→0.2 over 200ms ease-in-out for entire waveform",
101
+ "preset-switch": "crossfade 300ms — old preset fades out, new preset fades in"
102
+ },
103
+ "ambient": {
104
+ "voice-indicator-pulse": "scale(1) → scale(1.3) → scale(1) 1.5s ease-in-out infinite when speech active",
105
+ "silence-idle": "bars drift to random 2–4px heights with slow (2s) easing to avoid perfectly static appearance"
106
+ }
107
+ },
108
+ "interactions": [
109
+ "animate-on-mount",
110
+ "inline-edit",
111
+ "keyboard-navigation"
112
+ ],
113
+ "composition": {
114
+ "VoiceWaveform": "Section(d-section, inline-flex, items-center, gap-2) > [VoiceIndicator + WaveformCanvas(svg|canvas, animated) + MuteToggle?]",
115
+ "WaveformCanvas": "SVG(viewBox, preserveAspectRatio) > AmplitudeBar*(rect|line, animated-height) + FrequencyDisplay?",
116
+ "AmplitudeBar": "Rect(width: 3px, rx: 1.5, dynamic-height, fill: accent|muted)",
117
+ "VoiceIndicator": "Dot(8px, border-radius-full, bg: status-color, pulse-animation)",
118
+ "MuteToggle": "Button(d-interactive, icon-only, 24px) > MicIcon|MicOffIcon"
119
+ }
120
+ }
@@ -0,0 +1,101 @@
1
+ {
2
+ "id": "voting-breakdown",
3
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "Voting Breakdown",
7
+ "description": "Vote tally breakdown with demographic slicing, comment distribution, and proportional visualizations for civic decisions and polling.",
8
+ "category": "civic",
9
+ "tags": ["2026", "civic", "voting", "results", "demographics", "tally", "breakdown"],
10
+ "components": ["VoteBar", "OptionLabel", "PercentageText", "DemographicToggle", "CommentSnippet"],
11
+ "default_preset": "bars",
12
+ "presets": {
13
+ "bars": {
14
+ "description": "Horizontal bar chart displaying vote percentages per option with color-coded fills and vote counts for standard results views",
15
+ "layout": {
16
+ "layout": "stack",
17
+ "atoms": "_flex _flex-col _gap-3 _p-4 _w-full _bg-surface"
18
+ }
19
+ },
20
+ "pie": {
21
+ "description": "Proportional pie/donut chart visualization emphasizing relative share of votes across options for at-a-glance results understanding",
22
+ "layout": {
23
+ "layout": "grid",
24
+ "atoms": "_grid _grid-cols-[1fr_1fr] _gap-6 _p-4 _w-full _bg-surface"
25
+ }
26
+ },
27
+ "grouped": {
28
+ "description": "Grouped bars segmented by category (region, age, party) for comparative analysis across voter demographic slices",
29
+ "layout": {
30
+ "layout": "stack",
31
+ "atoms": "_flex _flex-col _gap-4 _p-4 _w-full _bg-surface"
32
+ }
33
+ }
34
+ },
35
+ "visual_brief": "A vertical stack of horizontal bar rows displaying voting results. Each row has a fixed-width option label on the left (approximately 120px) showing the option text (e.g. 'Yes', 'No', 'Abstain'). The bar fills the remaining horizontal space with a colored fill proportional to vote percentage: yes=green (#10b981), no=red (#ef4444), abstain=neutral gray (#9ca3af). Percentage text and raw count appear on the right edge of each row (e.g. '62% (4,218)') in monospace semibold numerals. A demographic toggle group sits above the chart as a pill-shaped segmented control with options (Age, Region, Party, All). Selecting a toggle re-renders bars grouped or colored accordingly. Below each bar, expandable comment snippet boxes show 1-2 representative voter comments per option in italic muted text with quote marks, limited to 2 lines with 'show more' affordance. Overall vote total displays at top-right with turnout percentage. Bars have a subtle shimmer during initial load.",
36
+ "default_layout": {
37
+ "layout": "stack",
38
+ "atoms": "_flex _flex-col _gap-3 _p-4 _w-full _bg-surface",
39
+ "slots": {
40
+ "demographic-toggle": "Segmented control pill at top showing demographic slice options (Age, Region, Party, All). Active state highlighted with primary color.",
41
+ "total-summary": "Top-right summary showing total votes, turnout percentage, and timestamp of last update.",
42
+ "vote-bar-row": "Repeating row (d-row) containing option label, bar fill, and percentage text. Each row represents one vote option.",
43
+ "option-label": "Fixed-width label (120px) on left of row displaying the vote option text in semibold 14px type.",
44
+ "bar-fill": "Horizontal bar with animated fill width matching percentage. Color-coded by option semantic: success/destructive/neutral.",
45
+ "percentage-text": "Right-aligned monospace numeric showing percentage and raw count (e.g. '62% (4,218)').",
46
+ "comment-snippet": "Expandable box below each bar showing 1-2 representative comments in italic with quote marks. 2-line clamp with show-more affordance."
47
+ }
48
+ },
49
+ "responsive": {
50
+ "mobile": "Option labels move above bars (stacked). Comment snippets collapse to count badge with expand-to-view. Demographic toggle scrolls horizontally. Pie preset stacks vertically.",
51
+ "tablet": "Standard horizontal layout with condensed labels. Pie preset shows side-by-side.",
52
+ "desktop": "Full layout with all elements visible and hover tooltips on bars showing detailed breakdown."
53
+ },
54
+ "layout_hints": {
55
+ "results_priority": "Option labels, percentages, and counts should be readable in one quick scan before comments or demographic slicing deepen the interpretation.",
56
+ "toggle_role": "Demographic toggles should clearly frame how the data is being sliced without overshadowing the actual vote results.",
57
+ "comment_support": "Comment snippets are contextual evidence, not the main chart. Keep them visually subordinate to the tally bars."
58
+ },
59
+ "layout_hints": {
60
+ "results_priority": "Option labels, percentages, and counts should be readable in one quick scan before comments or demographic slicing deepen the interpretation.",
61
+ "toggle_role": "Demographic toggles should clearly frame how the data is being sliced without overshadowing the actual vote results.",
62
+ "comment_support": "Comment snippets are contextual evidence, not the main chart. Keep them visually subordinate to the tally bars."
63
+ },
64
+ "motion": {
65
+ "micro": {
66
+ "bar-hover": "bar outline highlight + tooltip fade-in 150ms ease-out",
67
+ "toggle-change": "active pill slide 200ms spring"
68
+ },
69
+ "transitions": {
70
+ "bar-fill-initial": "width 0 to target 800ms ease-out staggered 100ms per bar",
71
+ "demographic-switch": "bars re-render with fade-cross 400ms ease-in-out"
72
+ },
73
+ "ambient": {
74
+ "live-update-pulse": "subtle counter tick animation when live results update"
75
+ }
76
+ },
77
+ "interactions": [
78
+ "animate-on-mount"
79
+ ],
80
+ "composition": {
81
+ "VotingBreakdown": "Root(d-data, stack) > [DemographicToggle + TotalSummary + VoteBarRow* + CommentSnippet*]",
82
+ "VoteBarRow": "Row(d-row) > [OptionLabel + BarFill(animated) + PercentageText]",
83
+ "PieVariant": "Grid > [PieChart(svg) + LegendList]",
84
+ "GroupedVariant": "Stack > GroupSection*(d-section) > [GroupHeader + VoteBarRow*]"
85
+ },
86
+ "accessibility": {
87
+ "role": "figure",
88
+ "aria-label": "Voting results breakdown",
89
+ "announcements": [
90
+ "{option}: {percent}% with {count} votes",
91
+ "Demographic filter changed to {slice}",
92
+ "Results updated: {total} total votes"
93
+ ],
94
+ "keyboard": [
95
+ "Tab: cycle through bars and toggles",
96
+ "Arrow keys: navigate between options",
97
+ "Enter: expand comment snippets for focused option",
98
+ "1-9: jump to demographic toggle"
99
+ ]
100
+ }
101
+ }