@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,125 @@
1
+ {
2
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
3
+ "id": "booking-calendar",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "Booking Calendar",
7
+ "description": "Availability-aware booking calendar with selectable time slots, optional provider selection, timezone handling, and inline confirmation for scheduling workflows.",
8
+ "category": "scheduling",
9
+ "tags": [
10
+ "2026",
11
+ "scheduling",
12
+ "calendar",
13
+ "booking",
14
+ "availability",
15
+ "time-slots",
16
+ "appointments"
17
+ ],
18
+ "components": [
19
+ "AvailabilityGrid",
20
+ "TimeSlot",
21
+ "ProviderSelector",
22
+ "BookingConfirmation",
23
+ "DatePicker",
24
+ "TimezoneSelector"
25
+ ],
26
+ "default_preset": "week-view",
27
+ "presets": {
28
+ "week-view": {
29
+ "description": "Seven-day week grid showing available time slots as selectable chips in each day column — the primary booking view for browsing availability across a week",
30
+ "layout": {
31
+ "layout": "grid",
32
+ "atoms": "_grid _gc7 _gap2 _py4 _w-full"
33
+ }
34
+ },
35
+ "day-view": {
36
+ "description": "Single-day hourly slot list with half-hour granularity — vertical stack of time slot buttons for detailed availability on a specific date",
37
+ "layout": {
38
+ "layout": "stack",
39
+ "atoms": "_flex _col _gap2 _py4 _maxw-[400px] _mx-auto"
40
+ }
41
+ },
42
+ "provider-select": {
43
+ "description": "Provider-first flow: choose a provider from avatar cards, then see their specific availability in a day or week grid below — for multi-practitioner booking scenarios",
44
+ "layout": {
45
+ "layout": "stack",
46
+ "atoms": "_flex _col _gap6 _py4 _w-full"
47
+ }
48
+ }
49
+ },
50
+ "visual_brief": "Calendar interface with a header row containing a DatePicker (left/right arrows flanking the current week or date label, e.g. 'Mar 24 - 30, 2026'), and a small TimezoneSelector dropdown in the top-right corner showing the detected timezone with a globe icon. Below the header, the week-view preset renders a 7-column grid: each column has a day label header (Mon 24, Tue 25, etc.) with today's date highlighted in accent. Within each column, available time slots appear as small outlined rectangular buttons (e.g. '9:00 AM', '9:30 AM', '10:00 AM') stacked vertically. Available slots have an accent-outlined style with hover fill. Unavailable/past slots are grayed out with reduced opacity and no pointer cursor. The currently selected slot has a filled accent background with white text and a subtle checkmark. Days with no availability show a muted 'No availability' label. The day-view preset shows a single vertical list of slot buttons at full width, grouped by morning/afternoon/evening with subtle section dividers. The provider-select preset adds a horizontal scrollable row of provider cards at the top: each card shows a circular avatar (48px), provider name below, and a specialty/role label in muted text. The selected provider card has an accent border ring. Below the provider row, the availability grid (week or day) loads for that provider. When a time slot is selected, a BookingConfirmation card slides up from the bottom (or appears as an adjacent panel on desktop): it shows the selected provider's avatar and name, the date and time in bold, the duration (e.g. '30 min'), the timezone, and a prominent 'Confirm Booking' primary button with a secondary 'Cancel' text button. The confirmation card has a surface background with slight elevation (shadow-md).",
51
+ "default_layout": {
52
+ "layout": "stack",
53
+ "atoms": "_flex _col _gap4 _py4 _w-full",
54
+ "slots": {
55
+ "controls-bar": "A horizontal row at the top containing: the DatePicker on the left (back/forward arrow buttons flanking a week or date range label, clickable to open a mini calendar popover), a view toggle in the center (Week / Day segmented control), the ProviderSelector (only in provider-select preset, otherwise hidden) as a horizontal scrollable row of avatar cards, and the TimezoneSelector on the right as a small dropdown with globe icon showing the current timezone abbreviation.",
56
+ "availability-grid": "The main scheduling area. In week-view: a 7-column CSS grid with sticky day-name headers. Each column contains vertically stacked TimeSlot buttons for that day's available times. Columns have equal width and a subtle vertical separator between them. In day-view: a single column of TimeSlot buttons with time labels, grouped under 'Morning', 'Afternoon', 'Evening' subheadings. The grid loads availability data per provider and date range, showing a skeleton shimmer during fetch.",
57
+ "time-slot": "Individual bookable time chip. Renders as a rounded button (border-radius: 8px, padding: 8px 16px). States: available (outlined accent border, transparent background, accent text), unavailable (gray border, gray text, opacity 0.4, cursor not-allowed), selected (filled accent background, white text, checkmark icon), hovered (accent background at 10% opacity). Shows the time label (e.g. '2:30 PM'). Slots are 30-min intervals by default.",
58
+ "booking-confirmation": "Conditional panel that appears after a time slot is selected. Card with surface background and shadow-md elevation. Contains: provider avatar (40px) and name in a row, a horizontal divider, the selected date in bold (e.g. 'Wednesday, March 25, 2026'), the selected time range (e.g. '2:30 PM - 3:00 PM'), timezone label, duration badge (e.g. '30 min'), a primary 'Confirm Booking' button (full-width), and a text 'Cancel' link below it. On confirmation, the button shows a spinner then transitions to a success checkmark with 'Booked!' text."
59
+ }
60
+ },
61
+ "responsive": {
62
+ "mobile": "Week-view switches to a horizontal scrollable day strip (shows 3 days visible, swipe for more) with the selected day's slots below as a vertical list. DatePicker becomes a compact single-date selector. Provider cards scroll horizontally. Booking confirmation renders as a bottom sheet that slides up. Time slots are full-width buttons with larger tap targets (min 44px height).",
63
+ "tablet": "Week-view shows all 7 columns at comfortable width. Provider cards remain a horizontal row. Booking confirmation appears as a right-side panel or inline below the grid. Standard touch target sizes.",
64
+ "desktop": "Full 7-column week grid with generous slot spacing. Booking confirmation appears as a fixed sidebar panel on the right (30% width) alongside the grid. Provider cards display with additional detail (next available time). Hover states are fully active."
65
+ },
66
+ "motion": {
67
+ "micro": {
68
+ "slot-hover": "background-color accent/10 + border-color accent 120ms ease-out",
69
+ "slot-select": "scale(0.97→1) + background-fill 150ms ease-out",
70
+ "provider-card-hover": "translateY(-2px) + shadow-md 150ms ease-out"
71
+ },
72
+ "transitions": {
73
+ "confirmation-enter": "translateY(24px)→0 + opacity 0→1 350ms ease-out",
74
+ "confirmation-exit": "translateY(0)→24px + opacity 1→0 250ms ease-in",
75
+ "week-navigate": "translateX(±100%)→0 + opacity 0→1 300ms ease-out",
76
+ "confirm-success": "button-width shrink + checkmark-scale(0→1) 400ms ease-out"
77
+ },
78
+ "ambient": {
79
+ "skeleton-shimmer": "background-position sweep left→right 1.5s ease-in-out infinite during loading"
80
+ }
81
+ },
82
+ "interactions": [
83
+ "click-select",
84
+ "drag-reorder",
85
+ "keyboard-navigation",
86
+ "animate-on-mount"
87
+ ],
88
+ "composition": {
89
+ "BookingCalendar": "Container(d-section, flex-col, gap-4) > [ControlsBar(d-control) > [ProviderSelector?(d-control, horizontal-scroll) + DatePicker(d-control) + TimezoneSelector(d-control, dropdown)] + AvailabilityGrid(d-surface, grid: week|day) > TimeSlot(d-interactive, selectable, state: available|unavailable|selected)* + BookingConfirmation?(d-surface, elevation-md, conditional: slot-selected)]",
90
+ "ProviderSelector": "Row(d-control, horizontal-scroll) > ProviderCard(d-interactive, selectable) > [Avatar(d-annotation, circle) + Name(d-data) + Role(d-annotation, muted)]",
91
+ "AvailabilityGrid": "Grid(d-surface, columns: 7|1) > DayColumn(d-data, sticky-header) > [DayLabel(d-annotation) + TimeSlot(d-interactive)[]]",
92
+ "BookingConfirmation": "Card(d-surface, shadow-md) > [ProviderRow > [Avatar + Name] + Divider + DateLabel(d-data, bold) + TimeRange(d-data) + TimezoneLabel(d-annotation) + DurationBadge(d-annotation) + ConfirmButton(d-interactive, variant: primary, full-width) + CancelLink(d-interactive, text)]"
93
+ },
94
+ "layout_hints": {
95
+ "calendar_priority": "Availability and selection state should be clear before provider metadata or secondary controls. The user should immediately understand when they can book.",
96
+ "confirmation_attachment": "The confirmation card should feel attached to the selected slot and provider rather than like a separate checkout surface.",
97
+ "mobile_fallback": "On small screens, preserve the same sense of temporal availability even when controls collapse and the grid becomes denser."
98
+ },
99
+ "layout_hints": {
100
+ "calendar_priority": "Availability and selection state should be clear before provider metadata or secondary controls. The user should immediately understand when they can book.",
101
+ "confirmation_attachment": "The confirmation card should feel attached to the selected slot and provider rather than like a separate checkout surface.",
102
+ "mobile_fallback": "On small screens, preserve the same sense of temporal availability even when controls collapse and the grid becomes denser."
103
+ },
104
+ "accessibility": {
105
+ "role": "application",
106
+ "aria-label": "Booking calendar with time slot selection",
107
+ "keyboard": [
108
+ "Arrow Left/Right: navigate between days in week-view",
109
+ "Arrow Up/Down: navigate between time slots within a day",
110
+ "Enter/Space: select the focused time slot or confirm booking",
111
+ "Tab: move between controls (date picker, timezone, provider, grid, confirmation)",
112
+ "Escape: deselect current slot or dismiss confirmation",
113
+ "P: focus provider selector (when available)",
114
+ "T: open timezone selector"
115
+ ],
116
+ "announcements": [
117
+ "Viewing availability for {date_range}",
118
+ "Provider {name} selected, loading availability",
119
+ "Time slot {time} on {date}: {status}",
120
+ "Selected {time} on {date} with {provider}. Confirm or press Escape to cancel",
121
+ "Booking confirmed: {date} at {time} with {provider}",
122
+ "Timezone changed to {timezone}"
123
+ ]
124
+ }
125
+ }
@@ -0,0 +1,117 @@
1
+ {
2
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
3
+ "id": "bottom-tab-bar",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "Bottom Tab Bar",
7
+ "description": "Mobile-first fixed-bottom tab navigator with 4-5 icon+label items. The primary navigation affordance for mobile consumer apps. Active tab signaled via color shift, icon scale, and an underline dot. Sticky on desktop within the centered column. Pairs with the mobile-tab-bar shell.",
8
+ "category": "navigation",
9
+ "tags": [
10
+ "2026",
11
+ "mobile",
12
+ "navigation",
13
+ "tab-bar",
14
+ "bottom-nav",
15
+ "consumer"
16
+ ],
17
+ "components": [
18
+ "TabBar",
19
+ "TabItem",
20
+ "TabIcon",
21
+ "TabLabel",
22
+ "ActiveIndicator",
23
+ "BadgeDot"
24
+ ],
25
+ "default_preset": "standard",
26
+ "presets": {
27
+ "standard": {
28
+ "description": "Four-item bottom tab bar with icon above label. Active item has color-shift, icon scale, and underline dot. Sticky bottom on mobile, sticky bottom of centered column on desktop.",
29
+ "layout": {
30
+ "layout": "flex-row",
31
+ "atoms": "_sticky _bottom-0 _z-40 _flex _items-center _justify-around _w-full _h-16 _bg-background/85 _backdrop-blur _border-t _border-border"
32
+ }
33
+ },
34
+ "five-item": {
35
+ "description": "Five-item variant for apps with an additional primary tab (e.g., separate Discover, Search, and Profile tabs). Slightly tighter spacing per item.",
36
+ "layout": {
37
+ "layout": "flex-row",
38
+ "atoms": "_sticky _bottom-0 _z-40 _flex _items-center _justify-around _w-full _h-16 _bg-background/85 _backdrop-blur _border-t _border-border"
39
+ }
40
+ },
41
+ "compact-no-labels": {
42
+ "description": "Icon-only variant with no labels — used when the icons are universally known (e.g., the four signature SwipeCircle icons). Slightly shorter at 56px height.",
43
+ "layout": {
44
+ "layout": "flex-row",
45
+ "atoms": "_sticky _bottom-0 _z-40 _flex _items-center _justify-around _w-full _h-14 _bg-background/85 _backdrop-blur _border-t _border-border"
46
+ }
47
+ }
48
+ },
49
+ "visual_brief": "A bar pinned to the bottom of the viewport (or the bottom of a centered 480px column on desktop). The bar is 64px tall plus safe-area-inset-bottom on iOS. It hosts 4 evenly-distributed tap targets (5 in the five-item variant), each at minimum 56×56px for thumb-friendliness. The bar uses a translucent backdrop-blur background (85% opacity of the page background, blur 16px) so content scrolling behind subtly tints through. A 1px soft border-top in the muted border color is the only visual separator from the body — no harsh hairline. Each TabItem is a vertical flex stack: a 24×24px Lucide icon (stroke-width 2) on top with 4px gap to a 11px uppercase-ish label below (font-weight 500, tracking-tight, color: var(--d-text-muted) for inactive). The active TabItem shifts color from muted to primary (coral), the icon scales up 1.1× with a spring transition (180ms cubic-bezier(0.34, 1.56, 0.64, 1)), and a 4px circular dot in violet (the secondary/match color) appears 2px below the icon centered horizontally — a subtle but unmistakable signal of selected state. On tap, the entire item briefly scales down to 0.96 for tactile feedback, then snaps back via spring. Optional BadgeDot: a 6px circle in the violet match color positioned at top-right of the icon (translateX 8px translateY -4px) signals unread items in that tab (e.g., new matches, unread chats). The bar is z-index 40 and sits above body content but below modals/celebrations (z-50+).",
50
+ "layout_hints": {
51
+ "container": "sticky-bottom flex-row",
52
+ "tab_target": "Each tab is min 56×56px tap area; vertical flex with 4px gap between icon and label",
53
+ "active_signal": "Color shift muted→primary AND icon scale 1.1× AND violet dot 4px below icon — three redundant signals for accessibility",
54
+ "translucency": "backdrop-blur(16px) with 85% bg-opacity. Required: page bg color set as CSS var so the rgba()-with-var pattern works",
55
+ "safe_area": "Padding bottom uses calc(8px + env(safe-area-inset-bottom)) — accommodates iOS home indicator without forcing the inset on every page"
56
+ },
57
+ "default_layout": {
58
+ "layout": "flex-row",
59
+ "atoms": "_sticky _bottom-0 _z-40 _flex _items-center _justify-around _w-full _h-16 _bg-background/85 _backdrop-blur _border-t _border-border",
60
+ "slots": {
61
+ "tab-bar": "Outer container. Sticky bottom (mobile and desktop). Flex-row, items-center, justify-around. Height 64px + env(safe-area-inset-bottom). Padding 8px 12px calc(8px + env(safe-area-inset-bottom)). Background: var(--d-bg) at 85% opacity with backdrop-filter blur(16px). Border-top: 1px solid var(--d-border). Z-index 40. Width 100% inside the parent shell column.",
62
+ "tab-item": "Repeating slot — one per tab (4 in standard, 5 in five-item, 4 in compact-no-labels). Vertical flex column, items-center, gap 4px, padding 4px 8px. Min size 56×56. Cursor: pointer. Tap target satisfies WCAG 2.5.5 (44×44 minimum, exceeded). Each item carries data-active true|false and aria-current page when active. Click navigates via the route bound to that tab. On press: scale 0.96 with 80ms transition, then spring back to 1.0 with 180ms cubic-bezier(0.34, 1.56, 0.64, 1).",
63
+ "tab-icon": "24×24 icon (Lucide preferred — Heart, Users, MessageCircle, User, Search, Compass for SwipeCircle). Stroke-width 2. Color: var(--d-text-muted) when inactive, var(--d-primary) when active. Active state adds transform: scale(1.1) and translateY(-2px) lift, transitioned with 200ms cubic-bezier(0.34, 1.56, 0.64, 1).",
64
+ "tab-label": "Single-line label below icon, font-size 11px, font-weight 500 inactive / 600 active, letter-spacing 0.01em, white-space nowrap, color matches icon. In compact-no-labels preset, this slot is omitted entirely.",
65
+ "active-indicator": "4×4px circular dot in var(--d-secondary) (violet match accent), positioned absolute below the icon (transform: translateY(2px)). Visible only on the active tab. Animates in via opacity 0→1 (160ms) and scale 0→1 (160ms cubic-bezier(0.34, 1.56, 0.64, 1)) when the tab becomes active.",
66
+ "badge-dot": "Optional 6×6px circle in var(--d-secondary), positioned absolute at top-right of the icon (translateX 8px, translateY -4px). Indicates unread/new items in this tab. May contain a tiny number for counts >0 — but typically just a dot. Pulse animation on appearance: scale 0→1.2→1 over 320ms."
67
+ }
68
+ },
69
+ "accessibility": {
70
+ "role": "tablist",
71
+ "aria-label": "Primary navigation",
72
+ "keyboard": [
73
+ "Arrow Right: focus next tab",
74
+ "Arrow Left: focus previous tab",
75
+ "Home: focus first tab",
76
+ "End: focus last tab",
77
+ "Enter or Space: activate focused tab",
78
+ "Tab: move focus into the active tab's content body"
79
+ ],
80
+ "announcements": [
81
+ "Tab activated: {tab_label} — showing {page_name}",
82
+ "Unread items in {tab_label}"
83
+ ],
84
+ "focus_management": "Roving tabindex — only the active tab is in the tab order (tabindex=0); inactive tabs are tabindex=-1 and become reachable via arrow keys. On tab activation via click/Enter, focus moves to the new active tab and the page navigates."
85
+ },
86
+ "responsive": {
87
+ "mobile": "Full viewport width. Sticky bottom with safe-area-inset-bottom padding. Tap targets 56×56 minimum. Flex-row layout.",
88
+ "tablet": "Same as mobile — the mobile-tab-bar shell caps at 480px regardless of viewport. Flex-row layout.",
89
+ "desktop": "Stays sticky at the bottom of the centered 480px column. Same icon and label sizing — desktop visitors see a mobile-app-like floating column. Flex-row layout."
90
+ },
91
+ "motion": {
92
+ "micro": {
93
+ "tab-press": "scale(0.96) for 80ms then spring back to scale(1) over 180ms cubic-bezier(0.34, 1.56, 0.64, 1)",
94
+ "icon-active": "translateY(-2px) + scale(1.1) over 200ms spring on tab activation",
95
+ "indicator-appear": "opacity 0→1 + scale 0→1 over 160ms spring when tab becomes active",
96
+ "label-active": "color transition muted→primary over 200ms ease-out"
97
+ },
98
+ "transitions": {
99
+ "tab-switch": "When tab changes, the previous active tab's icon scales back to 1.0 and color fades to muted (200ms), and the new active tab's icon scales up and the violet dot appears (200ms) — overlapping for a smooth crossfade",
100
+ "badge-pulse": "On new badge appearance: scale 0→1.2→1 over 320ms, then optional gentle pulse (scale 1→1.06→1 over 1.6s ease-in-out infinite) to keep attention until viewed"
101
+ }
102
+ },
103
+ "interactions": [
104
+ "click-select",
105
+ "scale-hover",
106
+ "keyboard-navigation",
107
+ "animate-on-mount"
108
+ ],
109
+ "composition": {
110
+ "BottomTabBar": "TabBar(d-floating-bar, sticky-bottom, flex-row) > [TabItem×4 | TabItem×5]",
111
+ "TabItem": "Button(flex-col, items-center, gap-1) > [TabIcon(24px) + TabLabel(11px) + ActiveIndicator(4px-dot, conditional) + BadgeDot(6px-circle, conditional)]",
112
+ "TabIcon": "Icon(lucide, 24px, stroke-2) — Heart | Users | MessageCircle | User | Search | Compass",
113
+ "TabLabel": "Span(text-xs, font-medium, whitespace-nowrap)",
114
+ "ActiveIndicator": "Span(absolute, 4px-circle, bg-secondary, below-icon)",
115
+ "BadgeDot": "Span(absolute, 6px-circle, bg-secondary, top-right-of-icon)"
116
+ }
117
+ }
@@ -0,0 +1,111 @@
1
+ {
2
+ "id": "breadcrumb-nav",
3
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "Breadcrumb Nav",
7
+ "description": "A hierarchical path navigation component with text links, chevron separators, and smart overflow handling that collapses middle segments into a dropdown menu.",
8
+ "category": "navigation",
9
+ "tags": [
10
+ "2026",
11
+ "navigation",
12
+ "breadcrumb",
13
+ "hierarchy",
14
+ "wayfinding",
15
+ "overflow"
16
+ ],
17
+ "components": [
18
+ "BreadcrumbList",
19
+ "BreadcrumbItem",
20
+ "Separator",
21
+ "OverflowMenu"
22
+ ],
23
+ "default_preset": "standard",
24
+ "presets": {
25
+ "standard": {
26
+ "description": "Text-only breadcrumb links separated by chevron icons, with the current page displayed as bold non-interactive text — the most common navigation breadcrumb style",
27
+ "layout": {
28
+ "layout": "inline",
29
+ "atoms": "_flex _align-center _gap-1 _flex-wrap-nowrap _overflow-hidden"
30
+ }
31
+ },
32
+ "icon": {
33
+ "description": "Breadcrumb items with small folder or category icons preceding each label, adding visual context for file-system or content-hierarchy navigation",
34
+ "layout": {
35
+ "layout": "inline",
36
+ "atoms": "_flex _align-center _gap-1 _flex-wrap-nowrap _overflow-hidden"
37
+ }
38
+ },
39
+ "dropdown": {
40
+ "description": "Breadcrumb with overflow handling that collapses middle path segments into an ellipsis button which opens a dropdown listing the hidden segments — essential for deep hierarchies",
41
+ "layout": {
42
+ "layout": "inline",
43
+ "atoms": "_flex _align-center _gap-1 _flex-wrap-nowrap _overflow-hidden"
44
+ }
45
+ }
46
+ },
47
+ "visual_brief": "A single horizontal line of text links representing the navigation hierarchy, rendered as an ordered list (ol) with inline-flex items. Each breadcrumb item is a text link in text-sm (14px) with text-muted color that transitions to text-default on hover with a subtle underline (text-decoration: underline with underline-offset: 2px). Between each item sits a chevron separator: a small right-pointing angle bracket (›) rendered as a 12px SVG icon in text-muted color with 4px horizontal margin on each side. The current (last) breadcrumb item is rendered as plain text (not a link) in text-default color with font-semibold weight and no hover interaction — it represents the active page. The first item is typically 'Home' and can optionally display a home icon (16px) instead of text. When the path exceeds the available width (measured on mount and resize), the component enters overflow mode: the first item and the last two items remain visible, and all middle items collapse into a single overflow button displayed as '...' (three dots) styled as a small pill button (24px height, 32px width, bg-surface-subtle, border-radius-md, text-muted, hover: bg-surface-hover). Clicking the overflow button opens a dropdown menu (d-surface card with elevation, border-radius-md, min-width: 160px) positioned below the button, listing the hidden segments as menu items (text-sm, padding: 8px 12px, hover: bg-surface-subtle). Each menu item is a link that navigates to that hierarchy level. The dropdown closes on outside click, Escape, or selecting an item. In the icon preset, each breadcrumb item has a small 14px icon to the left of the label: a home icon for the root, a folder icon for intermediate levels, and a document/page icon for the current page. Icons are text-muted color, matching the link color behavior on hover. The entire breadcrumb component has 0 vertical padding (it inherits line-height from the parent) and sits naturally inline within a page header or toolbar.",
48
+ "layout_hints": {
49
+ "container": "inline or header",
50
+ "note": "Breadcrumbs are typically placed at the top of a page content area, below the main navigation but above the page title. They should not be wrapped in a card — render inline. The component has a max-width of 100% and uses overflow: hidden with text-overflow on individual items if a single label is too long.",
51
+ "overflow_threshold": "The overflow collapse triggers when the total rendered width of all items exceeds the container width. Measure on mount and on window resize. Always keep the first item and the last 2 items visible; collapse everything in between into the overflow menu.",
52
+ "separator_style": "Use a chevron (›) SVG icon, not a text character. The icon is 12px × 12px, color: text-muted, with 4px margin-left and 4px margin-right. Do not use slashes (/) or greater-than signs (>) as separators."
53
+ },
54
+ "default_layout": {
55
+ "layout": "inline",
56
+ "atoms": "_flex _align-center _gap-1 _overflow-hidden _text-sm",
57
+ "slots": {
58
+ "breadcrumb-list": "The outer container, rendered as an <ol> element with list-style: none and display: flex, align-items: center, gap: 4px. flex-wrap: nowrap to keep all items on a single line. overflow: hidden to clip content that exceeds the container width. The list has role='navigation' and aria-label='Breadcrumb'. Padding: 0, margin: 0. The component measures its own width on mount and on resize to determine if overflow collapse is needed. If the combined width of all items plus separators exceeds the container width, it enters overflow mode.",
59
+ "breadcrumb-item": "Repeating slot — one per hierarchy level. Each item is an <li> with display: inline-flex, align-items: center, white-space: nowrap. Non-current items render as <a> links with text-sm (14px), color: text-muted, text-decoration: none. Hover: color transitions to text-default (150ms ease), text-decoration: underline with underline-offset: 2px. Focus-visible: 2px accent outline with 2px offset, border-radius-sm. The current item (last in the list) renders as a <span> (not a link) with font-semibold, color: text-default, aria-current='page'. Max-width per item: 200px with text-overflow: ellipsis and overflow: hidden for long labels. In the icon preset, each item also contains a 14px icon (home, folder, or document) to the left of the label with a 4px gap.",
60
+ "separator": "Repeating slot — one between each pair of breadcrumb items. Renders as a 12px × 12px right-pointing chevron SVG icon (a simple > shape with 1.5px stroke, stroke-linecap: round). Color: text-muted. aria-hidden='true' since it is decorative. Flex-shrink: 0 to prevent the separator from collapsing. Margin: 0 4px. The separator is an <li> with role='presentation' to exclude it from the list semantics.",
61
+ "overflow-menu": "Conditionally rendered when the breadcrumb path is too long for the container. Replaces the collapsed middle items with a single button displaying '...' (or an ellipsis icon). The button is 24px tall, 32px wide, bg-surface-subtle, border-radius-md, border: 1px solid border-muted, text-muted color, font-semibold. Hover: bg-surface-hover. Focus-visible: 2px accent outline. Clicking opens a dropdown menu absolutely positioned below the button (top: calc(100% + 4px), left: 0). The dropdown is a d-surface card with border-radius-md, box-shadow: 0 4px 12px rgba(0,0,0,0.1), padding: 4px 0, min-width: 160px, max-height: 240px, overflow-y: auto. Each hidden segment is a menu item: an <a> link with display: block, padding: 8px 12px, text-sm, text-default, hover: bg-surface-subtle. Items are listed in hierarchy order (top = shallowest). The menu has role='menu' and each item has role='menuitem'. Closes on outside click, Escape, or item selection. Opening animation: opacity 0→1 + translateY(-4px)→0, 150ms ease-out."
62
+ }
63
+ },
64
+ "accessibility": {
65
+ "role": "navigation",
66
+ "aria-label": "Breadcrumb navigation",
67
+ "announcements": [
68
+ "You are here: {currentPage}",
69
+ "Breadcrumb path: {path segments joined by comma}",
70
+ "Overflow menu opened with {count} hidden segments",
71
+ "Navigated to {page}"
72
+ ],
73
+ "keyboard": [
74
+ "Tab: move focus between breadcrumb links and overflow button",
75
+ "Enter: activate focused breadcrumb link or open overflow menu",
76
+ "Escape: close overflow dropdown menu",
77
+ "Arrow Down: move focus to next item in overflow dropdown",
78
+ "Arrow Up: move focus to previous item in overflow dropdown",
79
+ "Home: move focus to first item in overflow dropdown",
80
+ "End: move focus to last item in overflow dropdown"
81
+ ]
82
+ },
83
+ "responsive": {
84
+ "mobile": "Breadcrumbs aggressively collapse — only the parent (one level up) and current page are shown, with all earlier levels in the overflow menu. Max item width reduces to 120px. The overflow dropdown renders full-width at the bottom of the breadcrumb row. Touch targets are 44px minimum height.",
85
+ "tablet": "Breadcrumbs show the first item, overflow, and last 2 items. Max item width 160px. Touch targets are 40px. Dropdown renders normally below the overflow button.",
86
+ "desktop": "Full breadcrumb path shown if it fits. Overflow only triggers when the path exceeds container width. Max item width 200px. Hover states active on links. Dropdown has max-height 240px with scroll for very deep hierarchies."
87
+ },
88
+ "motion": {
89
+ "micro": {
90
+ "link-hover": "color transition 150ms ease",
91
+ "overflow-button-hover": "background-color transition 120ms ease"
92
+ },
93
+ "transitions": {
94
+ "dropdown-open": "opacity 0→1 + translateY(-4px)→0, 150ms ease-out",
95
+ "dropdown-close": "opacity 1→0 + translateY(0)→(-4px), 100ms ease-in",
96
+ "overflow-collapse": "items fade out 150ms as they collapse into the overflow button on resize"
97
+ },
98
+ "ambient": {}
99
+ },
100
+ "interactions": [
101
+ "hover-reveal",
102
+ "keyboard-navigation"
103
+ ],
104
+ "composition": {
105
+ "BreadcrumbNav": "Nav(role=navigation, aria-label=Breadcrumb) > BreadcrumbList(ol)",
106
+ "BreadcrumbList": "List(ol, inline-flex, nowrap) > [BreadcrumbItem + Separator]* + BreadcrumbItem(current)",
107
+ "BreadcrumbItem": "ListItem(li) > Link(a, text-muted, hover:text-default) | Span(current, font-semibold)",
108
+ "Separator": "ListItem(li, role=presentation, aria-hidden) > ChevronIcon(12px, text-muted)",
109
+ "OverflowMenu": "Button('...', pill) + Dropdown(d-surface, elevated) > MenuItem*(a, role=menuitem)"
110
+ }
111
+ }
@@ -0,0 +1,103 @@
1
+ {
2
+ "id": "budget-sankey",
3
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "Budget Sankey",
7
+ "description": "Sankey flow diagram visualizing budget allocation from revenue sources through categories to individual line items with proportional flow widths.",
8
+ "category": "civic",
9
+ "tags": ["2026", "civic", "budget", "sankey", "allocation", "flow", "visualization"],
10
+ "components": ["SankeyCanvas", "FlowLine", "NodeBlock", "FlowLabel", "AmountTooltip"],
11
+ "default_preset": "standard",
12
+ "presets": {
13
+ "standard": {
14
+ "description": "Full left-to-right Sankey flow diagram showing sources, categories, and line items with proportional flows for complete budget visibility",
15
+ "layout": {
16
+ "layout": "stack",
17
+ "atoms": "_flex _flex-col _gap-4 _p-6 _w-full _bg-surface _min-h-[500px]"
18
+ }
19
+ },
20
+ "simplified": {
21
+ "description": "Two-column simplified flow showing only top-level sources to categories, suitable for executive summary and overview dashboards",
22
+ "layout": {
23
+ "layout": "stack",
24
+ "atoms": "_flex _flex-col _gap-4 _p-6 _w-full _bg-surface _min-h-[360px]"
25
+ }
26
+ },
27
+ "detail": {
28
+ "description": "Expanded flow with drill-down drawers showing sub-allocations for each line item, enabling exploration of budget details on demand",
29
+ "layout": {
30
+ "layout": "stack",
31
+ "atoms": "_flex _flex-col _gap-4 _p-6 _w-full _bg-surface _min-h-[600px]"
32
+ }
33
+ }
34
+ },
35
+ "visual_brief": "A horizontal flow diagram rendered as SVG with three vertical columns of nodes arranged left-to-right. Left column shows revenue sources as vertical bar blocks (e.g. Property Tax, Sales Tax, Federal Grants, Fees) sized proportionally to their contribution amount. Middle column shows spending categories (Education, Infrastructure, Public Safety, Health Services) as similar bar blocks. Right column shows specific line items (Teacher Salaries, Road Repair, Police Equipment) in more granular blocks. Flows between columns are curved bezier paths with widths proportional to the dollar amount they represent. Each flow is colored by its source column (e.g. all flows from Property Tax share a green tint, federal grants are blue). Flows have subtle gradient transitions where they enter each node. Hovering a flow brightens it while dimming others and shows an amount tooltip near cursor (e.g. '$12.4M → Education'). Node labels sit alongside each block showing name and total amount in monospace. Animation: flows fade in sequentially from left to right on initial load.",
36
+ "default_layout": {
37
+ "layout": "stack",
38
+ "atoms": "_flex _flex-col _gap-4 _p-6 _w-full _bg-surface _min-h-[500px]",
39
+ "slots": {
40
+ "sankey-canvas": "Main SVG canvas containing all nodes and flow lines. Responsive to container width. Uses viewBox for scaling.",
41
+ "node-block": "Vertical rectangle representing a source, category, or line item. Height proportional to total flow volume. Positioned in column layout. Hover highlights all connected flows.",
42
+ "flow-line": "Curved bezier path connecting source node to target node. Width proportional to flow amount. Opacity 60% default, 90% on hover, 20% on other-flow hover.",
43
+ "flow-label": "Amount label positioned at the midpoint of each major flow showing the dollar value. Visible only for significant flows (>5% of total).",
44
+ "amount-tooltip": "Floating tooltip that follows cursor showing precise flow details: source → target and exact amount.",
45
+ "column-header": "Column labels at the top of each vertical node group (Sources, Categories, Line Items)."
46
+ }
47
+ },
48
+ "responsive": {
49
+ "mobile": "Simplified to 2-column view (source to category only). Labels wrap below nodes. Tooltip becomes bottom sheet. Scrollable if labels overflow.",
50
+ "tablet": "Full 3-column layout with slightly reduced label typography. Touch tap reveals tooltip.",
51
+ "desktop": "Full flow layout with hover tooltips, highlighted flow interactions, and keyboard navigation through nodes."
52
+ },
53
+ "layout_hints": {
54
+ "flow_priority": "The user should understand how money moves before reading every label. Preserve a clear left-to-right narrative from revenue to categories to line items.",
55
+ "node_balance": "Node labels and totals should support the flow structure without crowding the paths. Let the widths and positions carry the primary meaning.",
56
+ "mobile_fallback": "Two-column mode should still feel like a real budget flow explanation, not a simplified infographic detached from the full logic."
57
+ },
58
+ "layout_hints": {
59
+ "flow_priority": "The user should understand how money moves before reading every label. Preserve a clear left-to-right narrative from revenue to categories to line items.",
60
+ "node_balance": "Node labels and totals should support the flow structure without crowding the paths. Let the widths and positions carry the primary meaning.",
61
+ "mobile_fallback": "Two-column mode should still feel like a real budget flow explanation, not a simplified infographic detached from the full logic."
62
+ },
63
+ "motion": {
64
+ "micro": {
65
+ "flow-hover": "opacity transition 150ms ease-out + dim siblings",
66
+ "node-hover": "stroke highlight + connected-flow brighten 200ms ease-out"
67
+ },
68
+ "transitions": {
69
+ "initial-load": "flows fade-in staggered left-to-right 800ms total with ease-out",
70
+ "drill-down": "node expand + child flows animate in 400ms spring"
71
+ },
72
+ "ambient": {
73
+ "flow-active": "subtle gradient animation along path 4s linear infinite suggesting money movement"
74
+ }
75
+ },
76
+ "interactions": [
77
+ "hover-tooltip",
78
+ "animate-on-mount",
79
+ "click-select"
80
+ ],
81
+ "composition": {
82
+ "BudgetSankey": "Root(d-section, stack) > [ColumnHeaders + SankeyCanvas]",
83
+ "SankeyCanvas": "SVG(viewBox) > [NodeBlock* + FlowLine* + FlowLabel*]",
84
+ "NodeBlock": "Rect(positioned, sized-by-total) + Label(alongside)",
85
+ "FlowLine": "Path(bezier-curve, width-by-amount, color-by-source)",
86
+ "AmountTooltip": "Floating(follows-cursor, d-annotation, backdrop-blur)"
87
+ },
88
+ "accessibility": {
89
+ "role": "figure",
90
+ "aria-label": "Budget allocation flow diagram",
91
+ "announcements": [
92
+ "{source} contributes {amount} to {category}",
93
+ "Total budget: {total}",
94
+ "{node} selected with {count} connections"
95
+ ],
96
+ "keyboard": [
97
+ "Tab: cycle through nodes",
98
+ "Arrow keys: navigate column and between columns",
99
+ "Enter: drill-down into focused node",
100
+ "Escape: close drill-down view"
101
+ ]
102
+ }
103
+ }
@@ -0,0 +1,143 @@
1
+ {
2
+ "$schema": "https://decantr.ai/schemas/pattern.v2.json",
3
+ "id": "calendar-view",
4
+ "version": "1.0.0",
5
+ "decantr_compat": ">=2.0.0",
6
+ "name": "Calendar View",
7
+ "description": "Multi-mode calendar with day, week, and month views, event creation via click-and-drag, and drag-to-reschedule functionality.",
8
+ "category": "scheduling",
9
+ "tags": [
10
+ "2026",
11
+ "calendar",
12
+ "scheduling",
13
+ "events",
14
+ "date-picker",
15
+ "drag-and-drop",
16
+ "time-management"
17
+ ],
18
+ "components": [
19
+ "CalendarGrid",
20
+ "DayCell",
21
+ "WeekColumn",
22
+ "TimeSlot",
23
+ "EventChip",
24
+ "EventPopover",
25
+ "ViewSwitcher",
26
+ "NavigationBar",
27
+ "MiniCalendar"
28
+ ],
29
+ "default_preset": "month",
30
+ "presets": {
31
+ "month": {
32
+ "description": "Full month grid overview showing up to 3 events per day cell with overflow count — best for high-level schedule overview and planning",
33
+ "layout": {
34
+ "layout": "grid",
35
+ "atoms": "_grid _grid-cols-7 _gap-px _bg-border _rounded _overflow-hidden"
36
+ }
37
+ },
38
+ "week": {
39
+ "description": "Seven-day column layout with 15-minute time slots, events positioned absolutely by start/end time — ideal for detailed daily scheduling",
40
+ "layout": {
41
+ "layout": "grid",
42
+ "atoms": "_grid _grid-cols-8 _h-full _overflow-y-auto _bg-surface"
43
+ }
44
+ },
45
+ "day": {
46
+ "description": "Single day detail view with full time-slot granularity and expanded event cards showing descriptions and attendees",
47
+ "layout": {
48
+ "layout": "stack",
49
+ "atoms": "_flex _col _h-full _overflow-y-auto _bg-surface"
50
+ }
51
+ },
52
+ "agenda": {
53
+ "description": "Chronological list view of upcoming events grouped by day — compact, scannable, accessible format without spatial positioning",
54
+ "layout": {
55
+ "layout": "stack",
56
+ "atoms": "_flex _col _gap-2 _p-4 _overflow-y-auto _bg-surface"
57
+ }
58
+ }
59
+ },
60
+ "visual_brief": "A clean, structured calendar interface built on hairline borders (1px, var(--d-border-subtle)) forming a precise grid. The NavigationBar spans the full width at the top: a left-aligned row with back/forward chevron buttons, a bold month+year title (e.g., 'April 2026' in text-lg font-semibold), and a 'Today' pill button that jumps to the current date. Right-aligned is the ViewSwitcher — a segmented control with four options (Month, Week, Day, Agenda) rendered as connected pill buttons with the active one filled with accent color and white text. Below the nav bar in month view, a day-of-week header row shows abbreviated day names (Mon, Tue, ...) in text-xs uppercase tracking-wide text-muted. The month grid itself has 5-6 rows of 7 cells each. Each DayCell has the date number in the top-left corner (text-sm), with today's date rendered inside a filled accent-color circle (24px diameter) with white text, creating a distinctive marker. Days outside the current month show muted text at 40% opacity. Events within each cell are rendered as small rounded pill chips (border-radius: 4px, height 20px) with a category-specific left color stripe (4px wide): blue for meetings, green for personal, purple for external, amber for deadlines. Event chip text is truncated with ellipsis at the cell boundary. When more than 3 events exist in a day, a '+N more' text link in text-xs text-muted appears below the visible chips, clickable to expand. In week view, time columns show alternating subtle background stripes (transparent and var(--d-bg-muted) at 30% opacity) for each hour block, with 15-minute subdivisions marked by dotted hairlines. Events are absolutely positioned rectangles spanning their time range, with rounded corners (6px), category-colored left border (3px), white/surface background, and a subtle left-edge shadow. Overlapping events are laid out side-by-side at reduced width. The current time is indicated by a horizontal red line (2px) with a small red circle (8px) on the left edge, extending across all columns. Click-and-drag event creation renders a translucent preview chip (40% opacity, accent-colored) that snaps to 15-minute increments. The EventPopover appears on click as a 320px-wide floating card with event title, time range, location, description, attendee avatars, and edit/delete actions. The optional MiniCalendar is a small (200px wide) month grid in the sidebar showing dots beneath days that have events.",
61
+ "layout_hints": {
62
+ "container": "bordered-grid",
63
+ "note": "Month view uses CSS Grid with 7 columns. Week view uses 8 columns (1 for time labels + 7 for days). Day cells in month view should have min-height of 100px to accommodate event chips.",
64
+ "today_marker": "Today's date number MUST be rendered inside a filled circle. Use a 24px width/height circle with background var(--d-accent), color white, border-radius 50%, display flex align-items-center justify-center. This is the most recognizable calendar convention — do not omit it.",
65
+ "event_chips": "Event chips use a compact pill style. Height 20px in month view, dynamic height in week/day view based on duration. Category colors are communicated via a left border strip, NOT full background fill — the chip background stays var(--d-bg-surface) or very light tint of the category color.",
66
+ "time_grid": "In week/day views, the time gutter on the left shows hour labels (text-xs, text-muted) aligned to the top of each hour row. The grid lines are hairline (1px solid var(--d-border-subtle)). Alternate hour blocks use a barely-visible background tint for scanability.",
67
+ "current_time_line": "A 2px-tall horizontal line in var(--d-error) red spanning the full width of the time grid, positioned at the exact current time. A small 8px filled circle sits at the left edge. This line updates its position every minute."
68
+ },
69
+ "default_layout": {
70
+ "layout": "grid",
71
+ "atoms": "_flex _col _h-full _bg-surface _rounded _border",
72
+ "slots": {
73
+ "navigation-bar": "Full-width top bar with 48px height, horizontal flex layout, items centered vertically. Left section: previous month/week chevron button (icon-only, 32px square, ghost style, rounded), next chevron button. Center or left-of-center: current period label (e.g., 'April 2026') in text-lg font-semibold. A 'Today' button as a small outlined pill (text-xs, border 1px solid var(--d-border), rounded-full, padding 4px 12px) appears beside the label and is only visible when the view is not showing the current period. Right section: the ViewSwitcher segmented control.",
74
+ "view-switcher": "A segmented button group with 4 options: Month, Week, Day, Agenda. Rendered as connected buttons with shared border (1px solid var(--d-border)), border-radius on the outer edges only. The active segment has background var(--d-accent) with white text. Inactive segments have transparent background with text-muted that strengthens on hover. Transition between active states animates a background slide (200ms ease-out).",
75
+ "day-header-row": "A row of 7 day-name labels positioned above the month grid. Each label shows the abbreviated day name (Mon, Tue, Wed, Thu, Fri, Sat, Sun) in text-xs uppercase tracking-widest text-muted font-medium. Weekend days (Sat, Sun) may use a slightly different muted tone. Height 32px, border-bottom 1px solid var(--d-border-subtle).",
76
+ "day-cell": "Repeating slot — one per day in the visible grid. Each cell is a rectangular area within the CSS grid. Padding 4px 8px. The date number sits in the top-left corner as text-sm. Today's date gets the filled accent circle treatment (24px, centered number, white text on accent background). Days outside the current month render with opacity 0.4. Below the date number, events stack vertically with 2px gaps. Each event is an EventChip. After the 3rd event, remaining events collapse into a '+N more' link (text-xs, text-accent, cursor pointer) that on click shows all events in a popover or expands the cell. Cells have a hover state: background tint with var(--d-bg-muted). Clicking an empty area of a cell initiates event creation for that date.",
77
+ "event-chip": "Repeating slot within day cells or time columns. In month view: a compact pill (height 20px, border-radius 4px, padding 0 6px, display flex align-items-center). Left edge has a 4px-wide color strip indicating category (blue=#3b82f6 meetings, green=#22c55e personal, purple=#8b5cf6 external, amber=#f59e0b deadlines). Text is the event title in text-xs, single line with text-ellipsis overflow-hidden whitespace-nowrap. In week/day view: a positioned rectangle spanning the event's time range. Min-height 20px. Shows title (text-xs font-medium) and time (text-xs text-muted) stacked vertically. Background is a very light tint of the category color (5% opacity). Draggable for rescheduling. Click opens EventPopover.",
78
+ "event-popover": "A 320px-wide floating card (d-surface, border-radius 12px, box-shadow: 0 8px 24px rgba(0,0,0,0.12)) that appears anchored to the clicked event chip. Contains: event title (text-base font-semibold), colored category dot (8px circle) beside the title, date and time range on the next line (text-sm text-muted, icon-prefixed with a clock icon), location (text-sm, icon-prefixed with a map-pin icon, if set), description paragraph (text-sm, max 3 lines, text-muted), attendee avatar row (overlapping 24px circles, max 5 visible with +N overflow), and a bottom action row with Edit (ghost button) and Delete (ghost button, text-error) options. Popover has a small caret/arrow pointing to the source chip.",
79
+ "mini-calendar": "An optional compact month grid (200px wide) for sidebar placement. Shows a small month grid with single-letter day headers (M, T, W, T, F, S, S) in text-xs. Each date is a small clickable circle (28px). Today is accent-filled. Selected date has an accent ring. Days with events show a small dot (4px) beneath the date number in accent color. Navigation arrows at the top cycle months. Used for quick date jumping."
80
+ }
81
+ },
82
+ "accessibility": {
83
+ "role": "application",
84
+ "aria-label": "Calendar view",
85
+ "announcements": [
86
+ "View changed to {month|week|day|agenda}",
87
+ "Navigated to {month year}",
88
+ "Event {title} on {date} at {time}",
89
+ "Event {title} moved to {new date/time}",
90
+ "New event created on {date}"
91
+ ],
92
+ "keyboard": [
93
+ "Tab: move focus between navigation, view switcher, and calendar grid",
94
+ "Arrow keys: navigate between days in month view, time slots in week/day view",
95
+ "Enter: open event detail popover or create event on empty day",
96
+ "Escape: close popover or cancel event creation",
97
+ "T: jump to today",
98
+ "M/W/D/A: switch to month/week/day/agenda view",
99
+ "Page Up/Down: navigate to previous/next month or week",
100
+ "Space: select/deselect date for multi-date operations"
101
+ ]
102
+ },
103
+ "responsive": {
104
+ "mobile": "Defaults to agenda view (list). Month view simplifies to a scrollable list of weeks with horizontal swipe between weeks. Week view shows 3 days at a time with horizontal scroll. Event chips show only the color dot and truncated title. EventPopover becomes a bottom sheet. Drag-to-create is replaced with a tap-to-create flow. MiniCalendar is hidden. Navigation bar stacks: period label on top, view switcher below as icon-only tabs.",
105
+ "tablet": "Month view shows full grid with event chips. Week view shows all 7 days with horizontal scroll if needed. Touch drag for event creation and rescheduling with haptic feedback. EventPopover is a centered modal on smaller tablets, anchored popover on larger ones. MiniCalendar available in a collapsible sidebar.",
106
+ "desktop": "Full month grid with generous cell heights (120px+). Week view shows all 7 day columns with scrollable time grid. Click-and-drag event creation. Hover previews on event chips showing time and first line of description. Keyboard shortcuts fully enabled. MiniCalendar in persistent sidebar when space allows. EventPopover anchored to click position."
107
+ },
108
+ "motion": {
109
+ "micro": {
110
+ "chip-hover": "translateY(-1px) + subtle shadow elevation, 100ms ease-out",
111
+ "today-pulse": "Today's accent circle has a single subtle scale pulse (1.0→1.05→1.0) on initial render, 400ms ease-out",
112
+ "view-switch": "Active segment background slides to new position, 200ms ease-out"
113
+ },
114
+ "transitions": {
115
+ "view-change": "Cross-fade between views with 250ms ease-in-out, content scales from 0.98 to 1.0",
116
+ "month-navigate": "Grid slides left/right (depending on direction) with 300ms ease-out, new month content fades in",
117
+ "event-create": "New event chip scales from 0.9 to 1.0 + fade in, 200ms ease-out",
118
+ "popover-open": "Popover scales from 0.95 to 1.0 + fade from 0 to 1, 200ms ease-out with origin at anchor point"
119
+ },
120
+ "ambient": {
121
+ "current-time-line": "The red current-time indicator line smoothly translates its Y position every minute (transition: top 60s linear)",
122
+ "drag-preview": "Translucent event preview chip during drag creation pulses opacity 0.3→0.5→0.3, 1.5s ease-in-out infinite"
123
+ }
124
+ },
125
+ "interactions": [
126
+ "click-select",
127
+ "drag-reorder",
128
+ "hover-tooltip",
129
+ "keyboard-navigation",
130
+ "animate-on-mount",
131
+ "real-time-updates"
132
+ ],
133
+ "composition": {
134
+ "CalendarView": "Container(d-section, flex-col, full-height) > [NavigationBar + ViewContent]",
135
+ "NavigationBar": "Bar(d-surface, flex-row, sticky-top) > [PrevButton + PeriodLabel + TodayButton + NextButton + ViewSwitcher]",
136
+ "ViewSwitcher": "SegmentedControl(d-interactive) > Segment[](Month|Week|Day|Agenda)",
137
+ "MonthGrid": "Grid(d-surface, 7-col) > [DayHeaderRow + DayCell*]",
138
+ "DayCell": "Cell(d-surface, clickable) > [DateNumber(today?: accent-circle) + EventChip*(max-3) + OverflowLink?]",
139
+ "WeekView": "Grid(d-surface, 8-col) > [TimeGutter + WeekColumn* > TimeSlot* > EventChip*]",
140
+ "EventChip": "Chip(d-interactive, draggable, category-colored) > [ColorStrip + Title + Time?]",
141
+ "EventPopover": "Popover(d-surface, floating, anchored) > [Title + CategoryDot + DateTime + Location? + Description? + Attendees? + Actions]"
142
+ }
143
+ }