@mavea/mavea 1.0.7

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 (557) hide show
  1. package/CHANGELOG.md +159 -0
  2. package/DISCLAIMER.md +16 -0
  3. package/LICENSE +75 -0
  4. package/PRIVACY.md +127 -0
  5. package/README.md +248 -0
  6. package/SECURITY.md +72 -0
  7. package/SUPPORT.md +13 -0
  8. package/TERMS.md +122 -0
  9. package/THIRD-PARTY.txt +639 -0
  10. package/TRADEMARKS.md +15 -0
  11. package/bin/mavea.mjs +1079 -0
  12. package/dist/.vite/manifest.json +4261 -0
  13. package/dist/_headers +52 -0
  14. package/dist/assets/AppCommandPalette-DUMSp3rd.js +1 -0
  15. package/dist/assets/AtlasView-B5fkQhO6.css +1 -0
  16. package/dist/assets/AtlasView-Dl2fssaG.js +1 -0
  17. package/dist/assets/BlockEmpty-CLtVQf6c.js +1 -0
  18. package/dist/assets/BriefingPlayer-DO205Qkh.js +1 -0
  19. package/dist/assets/BriefingPlayer-TpFZB77N.css +1 -0
  20. package/dist/assets/CanvasSkeleton-BZZPCuRZ.js +2 -0
  21. package/dist/assets/CanvasSkeleton-iy6DBvde.css +1 -0
  22. package/dist/assets/CardEditor-BY1bZiV6.css +1 -0
  23. package/dist/assets/CardEditor-DzJXb0G7.js +1 -0
  24. package/dist/assets/CheckLogRail-F4AlgAcc.css +1 -0
  25. package/dist/assets/CheckLogRail-wUfby67Z.js +1 -0
  26. package/dist/assets/CodeOutput-Kh6ldxQz.js +97 -0
  27. package/dist/assets/CommandPalette-Bb-eErih.css +1 -0
  28. package/dist/assets/CommandPalette-Kl00mMZm.js +1 -0
  29. package/dist/assets/CourseLessonReader-COmTQdSK.css +1 -0
  30. package/dist/assets/CourseLessonReader-MBHoknUz.js +2 -0
  31. package/dist/assets/CourseRail-CUa7uIGG.css +1 -0
  32. package/dist/assets/CourseRail-q6x5cCpW.js +1 -0
  33. package/dist/assets/CoursesApp-v89OVJvg.js +2 -0
  34. package/dist/assets/CrossExamPanel-CZ0ShGma.css +1 -0
  35. package/dist/assets/CrossExamPanel-DH04p6VS.js +1 -0
  36. package/dist/assets/DashPresent-BYXbPuGj.js +1 -0
  37. package/dist/assets/DashPresent-DQYcgp-W.css +1 -0
  38. package/dist/assets/DashboardDetail-B50ZkeVK.js +2 -0
  39. package/dist/assets/DashboardLoopRuntime-CFXPx3v_.js +1 -0
  40. package/dist/assets/DashboardOverview-C-FdGWM5.js +1 -0
  41. package/dist/assets/DashboardSettings-Dmw6JTbI.js +1 -0
  42. package/dist/assets/DashboardsApp-Dx-EsaPW.css +1 -0
  43. package/dist/assets/DashboardsApp-JSY_bVfi.js +2 -0
  44. package/dist/assets/DeepZoomApp-BFNwli7l.js +37 -0
  45. package/dist/assets/DeepZoomApp-fRXCJHHZ.css +1 -0
  46. package/dist/assets/DelegatePanel-BK7rEhIc.js +26 -0
  47. package/dist/assets/DelegatePanel-_9RZiLHM.css +1 -0
  48. package/dist/assets/DemoGallery-BPtVG7_y.js +1 -0
  49. package/dist/assets/DropSelect-DUhdQSta.js +1 -0
  50. package/dist/assets/ExportModal-D4WpAg2c.css +1 -0
  51. package/dist/assets/ExportModal-D65cGyj_.js +2 -0
  52. package/dist/assets/ExtractionPreview-Iwfg2Ogl.js +18 -0
  53. package/dist/assets/FallbackCard-B489rTd9.js +1 -0
  54. package/dist/assets/FallbackCard-D_6ps1xA.css +1 -0
  55. package/dist/assets/FeatureUseNotice-CWt7gOwS.css +1 -0
  56. package/dist/assets/FeatureUseNotice-DPtQ0OGb.js +1 -0
  57. package/dist/assets/FlagshipCTA-BXntKhxb.js +1 -0
  58. package/dist/assets/FlagshipCommandPalette-BDJfasI-.js +1 -0
  59. package/dist/assets/FlagshipShowcase-DJ8Gxk_G.js +1 -0
  60. package/dist/assets/FlashcardsApp-CLNo4WX7.js +1 -0
  61. package/dist/assets/ForecastPanel-Da2ZBUrE.css +1 -0
  62. package/dist/assets/ForecastPanel-PBO2-dgS.js +1 -0
  63. package/dist/assets/GalleryApp-B1CB3_81.css +1 -0
  64. package/dist/assets/GalleryApp-DM03CMRy.js +1 -0
  65. package/dist/assets/HonestByDesign-Dqyth6nW.js +1 -0
  66. package/dist/assets/HowItWorks-C0zosIvq.js +1 -0
  67. package/dist/assets/LegalApp-DZBdExTy.js +1 -0
  68. package/dist/assets/LegalMarkdownDocument-CSZhRG5r.js +3 -0
  69. package/dist/assets/LegalPageShell-C_HottbD.css +1 -0
  70. package/dist/assets/LegalPageShell-DTeXqWyc.js +1 -0
  71. package/dist/assets/LeverPanel-DhpJY76O.css +1 -0
  72. package/dist/assets/LeverPanel-aZfhtVJX.js +1 -0
  73. package/dist/assets/Library-D2XGNXz7.js +1 -0
  74. package/dist/assets/Library-DmrtHjUf.css +1 -0
  75. package/dist/assets/LibraryOverlay-B2WQSgwr.js +1 -0
  76. package/dist/assets/LibraryOverlay-CnKWDMG_.css +1 -0
  77. package/dist/assets/LiveApp-B9zwXlGC.js +61 -0
  78. package/dist/assets/LiveApp-BVZGpJ1S.css +1 -0
  79. package/dist/assets/LiveSettings-CmgrMqvK.css +1 -0
  80. package/dist/assets/LiveSettings-D9OcWlm6.js +6 -0
  81. package/dist/assets/MindMapViewerDrawer-YYyZqmAd.js +1 -0
  82. package/dist/assets/MindShape-Ca3MXEgK.css +1 -0
  83. package/dist/assets/MindShape-mTlN5mPZ.js +1 -0
  84. package/dist/assets/Orb-B0NEVfqL.js +1 -0
  85. package/dist/assets/PinToDashboard-_kIOHs0k.js +1 -0
  86. package/dist/assets/PlanReview-33V8GTNB.js +1 -0
  87. package/dist/assets/Presence-CzLJIeSD.js +1 -0
  88. package/dist/assets/PresentationDeck-BDoGecxr.js +1 -0
  89. package/dist/assets/PrismApp-PfBTFhMF.js +2 -0
  90. package/dist/assets/PrismAskController-DBoxQSJR.css +1 -0
  91. package/dist/assets/PrismAskController-DbQDrlU9.js +37 -0
  92. package/dist/assets/PrismBriefingPlayer-1fvlfLR8.js +2 -0
  93. package/dist/assets/PrismOverlay-B7lEspdu.js +131 -0
  94. package/dist/assets/PrismOverlay-BTfAicBt.css +1 -0
  95. package/dist/assets/PrivacyApp-CR4lRs0L.js +128 -0
  96. package/dist/assets/Quiz-CUwtekfu.js +1 -0
  97. package/dist/assets/Recap-DCiiWNiV.css +1 -0
  98. package/dist/assets/Recap-H5fhj5Tc.js +1 -0
  99. package/dist/assets/ReelJelly-3jSVsJsy.js +1 -0
  100. package/dist/assets/RehearsalPanel-BCU615wg.css +1 -0
  101. package/dist/assets/RehearsalPanel-BVgjrOPg.js +6 -0
  102. package/dist/assets/ReplayCard-BpYO5vX-.js +2 -0
  103. package/dist/assets/ReplayOverlay-DXmVdeIr.js +1 -0
  104. package/dist/assets/RewindOverlay-BusfWeFq.js +1 -0
  105. package/dist/assets/RewindOverlay-C92qgvmi.css +1 -0
  106. package/dist/assets/RippleApp-9KrJPYgN.js +2 -0
  107. package/dist/assets/RippleAskController-BNAUoIW0.css +1 -0
  108. package/dist/assets/RippleAskController-CO9wE7hU.js +34 -0
  109. package/dist/assets/RippleOverlay-DMHLbfh8.js +6 -0
  110. package/dist/assets/RippleOverlay-_iiZsQVZ.css +1 -0
  111. package/dist/assets/SeeDontRead-C389viue.js +1 -0
  112. package/dist/assets/ShareModal-C8S7ySls.css +1 -0
  113. package/dist/assets/ShareModal-ClnEkudw.js +32 -0
  114. package/dist/assets/ShipCascade-BUtwvQoW.js +1 -0
  115. package/dist/assets/ShipCascade-CyFnrlET.css +1 -0
  116. package/dist/assets/ShipCourse-B7lG6DYW.js +1 -0
  117. package/dist/assets/ShipCourse-DcT7PUSm.css +1 -0
  118. package/dist/assets/ShipGate-BVZfCllb.css +1 -0
  119. package/dist/assets/ShipGate-BYYu9WVq.js +2 -0
  120. package/dist/assets/ShipHotspots-Bj2CovtT.js +1 -0
  121. package/dist/assets/ShipHotspots-CLOMutPv.css +1 -0
  122. package/dist/assets/ShipIncident-BUHvFFiC.css +1 -0
  123. package/dist/assets/ShipIncident-DcmindmE.js +2 -0
  124. package/dist/assets/ShipMigration-BznCskNg.css +1 -0
  125. package/dist/assets/ShipMigration-s0hVjDQl.js +1 -0
  126. package/dist/assets/ShipOnboarding-BC9Vxkpa.css +1 -0
  127. package/dist/assets/ShipOnboarding-ekbHL7OH.js +1 -0
  128. package/dist/assets/ShipRead-BVNgQT6L.js +1 -0
  129. package/dist/assets/ShipRollout-BdUQzMyP.js +1 -0
  130. package/dist/assets/ShipRollout-CqeObx5b.css +1 -0
  131. package/dist/assets/ShipSuggestions-B6fKYh8L.js +1 -0
  132. package/dist/assets/ShipSuggestions-BKRvk5Mj.css +1 -0
  133. package/dist/assets/ShipWorkspace-3D3Rrs1p.js +2 -0
  134. package/dist/assets/ShipWorkspace-D6XQpGEN.css +1 -0
  135. package/dist/assets/SignatureLoop-C60r8Wm5.js +1 -0
  136. package/dist/assets/SrsReview-BoaYb6XN.js +1 -0
  137. package/dist/assets/SrsReview-DmGdGxT0.css +1 -0
  138. package/dist/assets/SynthesisApp-vJ2Jq0Qe.js +2 -0
  139. package/dist/assets/SynthesisOverlay-CkERphvG.js +66 -0
  140. package/dist/assets/TermsApp-C70tW6m6.js +123 -0
  141. package/dist/assets/TopicCanvas-CT0eSj2M.js +2 -0
  142. package/dist/assets/TopicCanvas-D2Nax9II.css +1 -0
  143. package/dist/assets/TourPrism-BvucSkcs.js +1 -0
  144. package/dist/assets/TrackerTile-CasZNmt4.js +2 -0
  145. package/dist/assets/TwoSurfaces-C90X7Aj5.js +1 -0
  146. package/dist/assets/UnderstoodPanel-CHPD2Ttj.js +1 -0
  147. package/dist/assets/UnderstoodPanel-Q6GX1TFq.css +1 -0
  148. package/dist/assets/WhyMachineOverlay-BZk3PVTl.css +1 -0
  149. package/dist/assets/WhyMachineOverlay-CB0_n6Sy.js +1 -0
  150. package/dist/assets/WowFeatures-Ci_H5QYX.js +1 -0
  151. package/dist/assets/ZoomDeck-B2SjNwY7.css +1 -0
  152. package/dist/assets/ZoomDeck-BQHO79ZU.js +1 -0
  153. package/dist/assets/__vite-browser-external-BufR4LQa.js +1 -0
  154. package/dist/assets/ai-Ba4lZJ9Y.js +12 -0
  155. package/dist/assets/alternateFinishes-DZ-rkpkX.js +494 -0
  156. package/dist/assets/annotationAuto-B0nihA4F.js +1 -0
  157. package/dist/assets/annotationReel-BcU9Q0Sw.js +1 -0
  158. package/dist/assets/annotations-D2K9A5GB.js +1 -0
  159. package/dist/assets/backup-c-Btapzp.js +1 -0
  160. package/dist/assets/blockLabel-DAqaHKy3.js +1 -0
  161. package/dist/assets/c-DWGmR78Y.js +1 -0
  162. package/dist/assets/c-SSSlmE39.js +1 -0
  163. package/dist/assets/cache-BumECILO.js +1 -0
  164. package/dist/assets/canvas-QTEIiK23.js +1 -0
  165. package/dist/assets/catalog-BHjl-1uH.js +2 -0
  166. package/dist/assets/catalog-Dqaq2YFd.js +1 -0
  167. package/dist/assets/cfo.generated-Bjl5OGay.js +1 -0
  168. package/dist/assets/chapters-BiUsDClQ.js +1 -0
  169. package/dist/assets/charts1-EOoxU_K3.js +1 -0
  170. package/dist/assets/charts2-tyUiQPff.js +1 -0
  171. package/dist/assets/chunk-BVpWp9h4.js +1 -0
  172. package/dist/assets/citation-BcvmjKS8.js +1 -0
  173. package/dist/assets/code-CpjYCNS8.js +8 -0
  174. package/dist/assets/codeContext-0UMRSGRr.js +5 -0
  175. package/dist/assets/colors-D49Req-e.js +1 -0
  176. package/dist/assets/compose-BJ9EfcQS.js +3 -0
  177. package/dist/assets/contentVault-DzTYWcbD.js +1 -0
  178. package/dist/assets/core-DEFyprhs.js +1 -0
  179. package/dist/assets/corpus.generated-oX9uU93S.js +11 -0
  180. package/dist/assets/courseSeed-CZdNBTTs.js +1 -0
  181. package/dist/assets/courseStore-DfafnL-9.js +1 -0
  182. package/dist/assets/courses-BkH1ntDL.css +1 -0
  183. package/dist/assets/cpp-BGdv8dzs.js +1 -0
  184. package/dist/assets/cpp-CNAAXZl-.js +1 -0
  185. package/dist/assets/csharp-oqKa8noW.js +1 -0
  186. package/dist/assets/css-CdtkT07m.js +1 -0
  187. package/dist/assets/css-LbU1hoFO.js +1 -0
  188. package/dist/assets/dag-C3Xx8pOD.js +2 -0
  189. package/dist/assets/dashboardEvents-DR9d_c74.js +2 -0
  190. package/dist/assets/dashboards-rcWxdoXI.css +1 -0
  191. package/dist/assets/deckLine-NBd3MyGT.js +1 -0
  192. package/dist/assets/demoPaletteItems-NPCSaSU6.js +1 -0
  193. package/dist/assets/dev.generated-DYgVxL_4.js +73 -0
  194. package/dist/assets/diagrams-CaSfjT4I.js +1 -0
  195. package/dist/assets/diff-woXpYk--.js +1 -0
  196. package/dist/assets/display-OvC57CMc.js +9 -0
  197. package/dist/assets/dist-BFx3nZg4.js +2785 -0
  198. package/dist/assets/dist-xRGLOZwv.js +14 -0
  199. package/dist/assets/docs-B2aDtm5K.js +1 -0
  200. package/dist/assets/everyday-CoZa4kDZ.js +1 -0
  201. package/dist/assets/explode-WBykfhqW.js +13 -0
  202. package/dist/assets/extractNumbers-CuhagRkd.js +1 -0
  203. package/dist/assets/facts-BBTt3ImG.js +1 -0
  204. package/dist/assets/finance-Bxn_Q1p0.js +1 -0
  205. package/dist/assets/fit-0HxU-rtB.js +1 -0
  206. package/dist/assets/fitText-CDFmCQzl.js +1 -0
  207. package/dist/assets/flows-BL81J7yN.js +1 -0
  208. package/dist/assets/format-DlZTyeMy.js +1 -0
  209. package/dist/assets/format-hc2QOoIu.js +1 -0
  210. package/dist/assets/forms-DeoXOxdD.js +1 -0
  211. package/dist/assets/generate-8odaTyr4.js +17 -0
  212. package/dist/assets/generateBeats-b64CL54v.js +1 -0
  213. package/dist/assets/generateCourse-Cj_-vDWu.js +28 -0
  214. package/dist/assets/generateLive-D4B30fnF.js +52 -0
  215. package/dist/assets/geometry-DXAbnb0J.js +1 -0
  216. package/dist/assets/gesture-DabMpPcq.js +2 -0
  217. package/dist/assets/github-dark-C-LZuMrd.js +1 -0
  218. package/dist/assets/github-light-EUqPIrTm.js +1 -0
  219. package/dist/assets/githubBrowser-DywfDeYx.js +1 -0
  220. package/dist/assets/githubToken-DtcLYqwm.js +11 -0
  221. package/dist/assets/go-rLFTqkRN.js +1 -0
  222. package/dist/assets/homeTarget-BgWKI_E1.js +1 -0
  223. package/dist/assets/html-BcACZWSP.js +1 -0
  224. package/dist/assets/html-DDNsd9lV.js +1 -0
  225. package/dist/assets/http-CJCtjYpA.js +2 -0
  226. package/dist/assets/icons-CHVz6kv_.js +1 -0
  227. package/dist/assets/index-CepQEz75.css +1 -0
  228. package/dist/assets/index-y8GL67bB.js +22 -0
  229. package/dist/assets/index.es-CRLiWwiA.js +5 -0
  230. package/dist/assets/info-CiqHR5cs.js +1 -0
  231. package/dist/assets/java-BtIQNnN0.js +1 -0
  232. package/dist/assets/java-DxlWrXwe.js +1 -0
  233. package/dist/assets/javascript-BzbQS41l.js +1 -0
  234. package/dist/assets/javascript-Yelw-5ZN.js +1 -0
  235. package/dist/assets/json-B0N3XRZU.js +1 -0
  236. package/dist/assets/json-B88Oqtu5.js +1 -0
  237. package/dist/assets/json-CaljABEy.js +1 -0
  238. package/dist/assets/jspdf.es.min-C-Pf79px.js +79 -0
  239. package/dist/assets/jsx-D3KKoC5L.js +1 -0
  240. package/dist/assets/jsx-hEbJ82HF.js +1 -0
  241. package/dist/assets/jsx-runtime-DaSxXjOY.js +1 -0
  242. package/dist/assets/katex-BMCG0xok.js +257 -0
  243. package/dist/assets/keyVault-DEsNh9FR.js +1 -0
  244. package/dist/assets/kokoro-D4GKpSL0.js +1 -0
  245. package/dist/assets/kotlin-DhhofPvG.js +1 -0
  246. package/dist/assets/layout-BFQOzXtG.js +1 -0
  247. package/dist/assets/layout-CkO0Psde.js +1 -0
  248. package/dist/assets/lazyRetry-D50B1UMY.js +1 -0
  249. package/dist/assets/leaflet-src-C_xhOQY7.js +1 -0
  250. package/dist/assets/learn-DVfqN-nf.js +1 -0
  251. package/dist/assets/lib-DMAxsZKm.css +1 -0
  252. package/dist/assets/lib-VFqp6Y3w.js +1 -0
  253. package/dist/assets/links--u_phi0x.js +1 -0
  254. package/dist/assets/liveSchema-CJ49PX5R.js +98 -0
  255. package/dist/assets/markdown-BYOwaDjH.js +1 -0
  256. package/dist/assets/mastery-BPjxP0fN.js +4 -0
  257. package/dist/assets/media-CsrUl279.js +43 -0
  258. package/dist/assets/model-BE0UHu1w.js +27 -0
  259. package/dist/assets/motion-S0NRruNj.js +1 -0
  260. package/dist/assets/nav-Czm-NzPV.js +1 -0
  261. package/dist/assets/neighborhoods-C-1Tjr1r.js +1 -0
  262. package/dist/assets/notes-A9t4jdfx.css +1 -0
  263. package/dist/assets/notes-lROPCorS.js +1 -0
  264. package/dist/assets/notify-Bz4wuE4T.js +1 -0
  265. package/dist/assets/now-C9-UAzTC.js +1 -0
  266. package/dist/assets/number-DXgzss0v.js +1 -0
  267. package/dist/assets/officeDoc-B6nEhNp4.js +3 -0
  268. package/dist/assets/openchemlib-nMLMmg26.js +23 -0
  269. package/dist/assets/overlays-JxbHtA2o.js +1 -0
  270. package/dist/assets/owners-FXDGInVq.js +2 -0
  271. package/dist/assets/pageVisibility-BxUVsw7Z.js +1 -0
  272. package/dist/assets/pdf-Df7PCH7q.js +11 -0
  273. package/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
  274. package/dist/assets/penStrokes-9Q_l7NTt.js +1 -0
  275. package/dist/assets/perfProbe-COAp9PAa.js +1 -0
  276. package/dist/assets/php-CYrBA5iX.js +1 -0
  277. package/dist/assets/pickers-B4-3HOR8.js +1 -0
  278. package/dist/assets/pin-Bya3BL_a.css +1 -0
  279. package/dist/assets/pin-CXSuPJYL.js +1 -0
  280. package/dist/assets/planTracker-7AMCQPNx.js +1 -0
  281. package/dist/assets/portal-DMw7C32j.js +1 -0
  282. package/dist/assets/pptxgen.es-CvTILmV9.js +115 -0
  283. package/dist/assets/predictions-CYS7Vo39.js +1 -0
  284. package/dist/assets/prewarm--whjQhWJ.js +1 -0
  285. package/dist/assets/prism-app-CXYElq8-.css +1 -0
  286. package/dist/assets/prism.generated-BhbHDHR6.js +41 -0
  287. package/dist/assets/prismExtract.worker-Cws9K1NG.js +13 -0
  288. package/dist/assets/prismGround.worker-CIvKqxm2.js +1 -0
  289. package/dist/assets/prismLayout.worker-CZO2CY7B.js +1 -0
  290. package/dist/assets/providers-wzm7E8Pa.js +1 -0
  291. package/dist/assets/purify.es-adlwq8Pz.js +3 -0
  292. package/dist/assets/python-gzcpVVnB.js +1 -0
  293. package/dist/assets/queue-DHeyJ32F.css +1 -0
  294. package/dist/assets/queue-J4h7E3uc.js +1 -0
  295. package/dist/assets/quietHours-BvcsBKKK.js +1 -0
  296. package/dist/assets/react-BQSORdFI.js +1 -0
  297. package/dist/assets/reference-sJzyMiL4.js +1 -0
  298. package/dist/assets/registry-1GuPBfQK.js +1 -0
  299. package/dist/assets/registry-2GJZ46M8.css +1 -0
  300. package/dist/assets/registry-2v0jlh5Q.js +2 -0
  301. package/dist/assets/registry-B8DStMJk.js +1 -0
  302. package/dist/assets/registry-B940W2j5.js +1 -0
  303. package/dist/assets/registry-BAoRB8rd.css +1 -0
  304. package/dist/assets/registry-BPvIPLke.js +1 -0
  305. package/dist/assets/registry-BVHiKEwE.css +1 -0
  306. package/dist/assets/registry-BcZXBr3y.css +1 -0
  307. package/dist/assets/registry-BffpZK5w.js +1 -0
  308. package/dist/assets/registry-BgGeRiDA.js +2 -0
  309. package/dist/assets/registry-Buq5uuCv.js +1 -0
  310. package/dist/assets/registry-BzNLfje1.css +1 -0
  311. package/dist/assets/registry-C3ezxLR3.css +1 -0
  312. package/dist/assets/registry-CAusoyBh.js +1 -0
  313. package/dist/assets/registry-CEVrY72Z.js +1 -0
  314. package/dist/assets/registry-CKjKq6ct.js +1 -0
  315. package/dist/assets/registry-CNgybLQv.css +1 -0
  316. package/dist/assets/registry-CRM7y8QT.css +1 -0
  317. package/dist/assets/registry-CRisz4Ca.css +1 -0
  318. package/dist/assets/registry-Cg7qUZPS.js +1 -0
  319. package/dist/assets/registry-Cix-yqch.js +1 -0
  320. package/dist/assets/registry-CtbuZWYz.css +1 -0
  321. package/dist/assets/registry-DCI_BeFJ.js +5 -0
  322. package/dist/assets/registry-DDLSYDVA.js +1 -0
  323. package/dist/assets/registry-DI1wSG1Y.js +1 -0
  324. package/dist/assets/registry-DJinB5ye.js +2 -0
  325. package/dist/assets/registry-DUvXX_d0.js +1 -0
  326. package/dist/assets/registry-DVzLacl_.css +1 -0
  327. package/dist/assets/registry-DWcNVyI2.css +1 -0
  328. package/dist/assets/registry-D_URPoL4.js +1 -0
  329. package/dist/assets/registry-Dkc7hN5T.js +1 -0
  330. package/dist/assets/registry-DmQlNN3y.js +1 -0
  331. package/dist/assets/registry-DpaaVbmL.css +1 -0
  332. package/dist/assets/registry-Dpb8EXHn.js +49 -0
  333. package/dist/assets/registry-Dru0JcTa.css +1 -0
  334. package/dist/assets/registry-DujBAgn_.js +1 -0
  335. package/dist/assets/registry-Dye5m3qt.css +1 -0
  336. package/dist/assets/registry-GeSy4i7R.css +1 -0
  337. package/dist/assets/registry-QcULZpdE.js +4 -0
  338. package/dist/assets/registry-T3i2Q9SI.css +1 -0
  339. package/dist/assets/registry-UFIuwh3i.css +1 -0
  340. package/dist/assets/registry-Xzq_Rpmm.css +1 -0
  341. package/dist/assets/registry-ZOWzhOHk.css +1 -0
  342. package/dist/assets/registry-aIH-Im5Y.css +1 -0
  343. package/dist/assets/registry-aazwkBJp.js +1 -0
  344. package/dist/assets/registry-ei6fIgBT.css +1 -0
  345. package/dist/assets/registry-types-DMuK0vJ6.js +1 -0
  346. package/dist/assets/registry-upbw6pyj.css +1 -0
  347. package/dist/assets/registry-zRPjWNl5.js +1 -0
  348. package/dist/assets/relate-A9ZeaaAI.js +1 -0
  349. package/dist/assets/richText-BkxJhl9N.js +1 -0
  350. package/dist/assets/ruby-BhrksQMt.js +1 -0
  351. package/dist/assets/run-BYP2YlZT.js +23 -0
  352. package/dist/assets/run-C_0B_41W.js +21 -0
  353. package/dist/assets/run-DSVvshaB.js +21 -0
  354. package/dist/assets/rust-Cfkwpbl8.js +1 -0
  355. package/dist/assets/safeCssColor-di93BXgG.js +1 -0
  356. package/dist/assets/safeImageUrl-CUkucDUu.js +1 -0
  357. package/dist/assets/scale-Bcgfo6Hp.js +1 -0
  358. package/dist/assets/screen-DLR7p_yP.js +1 -0
  359. package/dist/assets/search-DnjHupRf.js +1 -0
  360. package/dist/assets/seed-b1xc0dj2.js +1 -0
  361. package/dist/assets/shapes-RqjqC0ay.js +1 -0
  362. package/dist/assets/shard000-DM_rqD7W.js +1 -0
  363. package/dist/assets/shard001-gQEQs7_F.js +1 -0
  364. package/dist/assets/shard002-DbDas-W-.js +1 -0
  365. package/dist/assets/shard003-DxMszG4_.js +1 -0
  366. package/dist/assets/shard004-DZMpLBw1.js +1 -0
  367. package/dist/assets/shard005-DLVkh9IH.js +1 -0
  368. package/dist/assets/shard006-B6efKHov.js +1 -0
  369. package/dist/assets/shard007-AFdZLe38.js +1 -0
  370. package/dist/assets/shard008-LbSBzwRx.js +1 -0
  371. package/dist/assets/shard009-D_6-SUDb.js +1 -0
  372. package/dist/assets/shard010-DbOj-uZW.js +1 -0
  373. package/dist/assets/shard011-BYSz7EEW.js +1 -0
  374. package/dist/assets/shard012-B5Ypj7OV.js +1 -0
  375. package/dist/assets/shard013-BtsliNIe.js +1 -0
  376. package/dist/assets/shard014-15sjmk68.js +1 -0
  377. package/dist/assets/shard015-nnXrqru_.js +1 -0
  378. package/dist/assets/shard016-BayXFE13.js +1 -0
  379. package/dist/assets/shard017-Cy4cGexs.js +1 -0
  380. package/dist/assets/shard018-aO-BYJ8H.js +1 -0
  381. package/dist/assets/shard019-gxaTeA3I.js +1 -0
  382. package/dist/assets/shard020-BibJdMI0.js +1 -0
  383. package/dist/assets/shard021-2FE-tze4.js +1 -0
  384. package/dist/assets/shard022-IXiyG-JK.js +1 -0
  385. package/dist/assets/shard023-314F6NJS.js +1 -0
  386. package/dist/assets/shard024-cN5rpQ_X.js +1 -0
  387. package/dist/assets/shard025-KKTaXOGE.js +1 -0
  388. package/dist/assets/shard026-C2Dkd1t6.js +1 -0
  389. package/dist/assets/shard027-Xy-8x9As.js +1 -0
  390. package/dist/assets/shard028-Bul-klUj.js +1 -0
  391. package/dist/assets/shard029-BbRSUcUZ.js +1 -0
  392. package/dist/assets/shard030-GYllsFVC.js +1 -0
  393. package/dist/assets/shard031-DMigeiyn.js +1 -0
  394. package/dist/assets/shard032-CcvmzK0l.js +1 -0
  395. package/dist/assets/shard033-11AU702M.js +1 -0
  396. package/dist/assets/shard034-Bx3urxjM.js +1 -0
  397. package/dist/assets/shard035-DBdEeyCt.js +1 -0
  398. package/dist/assets/shard036-vYgoRBqS.js +1 -0
  399. package/dist/assets/shard037-DP4MMw91.js +1 -0
  400. package/dist/assets/shard038-ffxsv7d6.js +1 -0
  401. package/dist/assets/shard039-C1JHHNp9.js +1 -0
  402. package/dist/assets/shard040-JbVvCSO_.js +1 -0
  403. package/dist/assets/shard041-5L_eFwGx.js +1 -0
  404. package/dist/assets/shard042-C9nsGL79.js +1 -0
  405. package/dist/assets/shard043-Dx_9HSKI.js +1 -0
  406. package/dist/assets/shard044-B3QQNC4A.js +1 -0
  407. package/dist/assets/shard045-B7z0WHO6.js +1 -0
  408. package/dist/assets/shard046-D1yDablJ.js +1 -0
  409. package/dist/assets/shard047-DJi3AgeT.js +1 -0
  410. package/dist/assets/shard048-D_2ipfUr.js +1 -0
  411. package/dist/assets/shard049-1aGgWZdd.js +1 -0
  412. package/dist/assets/shard050-Bjwa0Og4.js +1 -0
  413. package/dist/assets/shard051-Cx_GAk3v.js +1 -0
  414. package/dist/assets/shard052-LaeOD3V5.js +1 -0
  415. package/dist/assets/shard053-D-da7Foj.js +1 -0
  416. package/dist/assets/shard054-CM8eSRQk.js +1 -0
  417. package/dist/assets/shard055-QRpDl4Vs.js +1 -0
  418. package/dist/assets/shard056-DkY7CQm3.js +1 -0
  419. package/dist/assets/shard057-BVCgf7o0.js +1 -0
  420. package/dist/assets/shard058-93aGtdrX.js +1 -0
  421. package/dist/assets/shard059-rJE9X1_I.js +1 -0
  422. package/dist/assets/shard060-Lu_hfl1r.js +1 -0
  423. package/dist/assets/shard061-C9A8iNiq.js +1 -0
  424. package/dist/assets/shard062-BBIpEYZO.js +1 -0
  425. package/dist/assets/shard063-C_uen3Ub.js +1 -0
  426. package/dist/assets/shard064-DAHUsHST.js +1 -0
  427. package/dist/assets/shard065-C2edvdvh.js +1 -0
  428. package/dist/assets/shard066-DFcuVhZm.js +1 -0
  429. package/dist/assets/shard067-BN8DM8JZ.js +1 -0
  430. package/dist/assets/shard068-i464K77p.js +1 -0
  431. package/dist/assets/shard069-Dm9m2a5U.js +1 -0
  432. package/dist/assets/shard070-BPVvR8GH.js +1 -0
  433. package/dist/assets/shard071-Bal_0d9L.js +1 -0
  434. package/dist/assets/shard072-CBQu62kt.js +1 -0
  435. package/dist/assets/shard073-D5BRae0w.js +1 -0
  436. package/dist/assets/shard074-DtFvcBnZ.js +1 -0
  437. package/dist/assets/share-QHGHNDhQ.js +1 -0
  438. package/dist/assets/shellscript-BiGZg9Om.js +1 -0
  439. package/dist/assets/shellscript-CqHdAlCp.js +1 -0
  440. package/dist/assets/shikiHighlight-DUCYbsJ2.js +153 -0
  441. package/dist/assets/sourceHost-BV3t2XDb.js +1 -0
  442. package/dist/assets/speed-DwPw9KSv.js +1 -0
  443. package/dist/assets/spokenText-D4zPX9JY.js +1 -0
  444. package/dist/assets/sql-0Qcw9ht3.js +1 -0
  445. package/dist/assets/sql-CP0rg-5b.js +1 -0
  446. package/dist/assets/src-DbgF7cRH.js +2 -0
  447. package/dist/assets/stats-BeP5Bws0.js +1 -0
  448. package/dist/assets/status-BY02LIJt.js +1 -0
  449. package/dist/assets/stepDriver-DwjFet6U.js +1 -0
  450. package/dist/assets/store-4JNNn732.js +1 -0
  451. package/dist/assets/store-BFC7DZcg.js +1 -0
  452. package/dist/assets/store-BFrJaSxJ.js +1 -0
  453. package/dist/assets/store-DXmC_fP2.js +0 -0
  454. package/dist/assets/store-DgG0C1Qx.js +1 -0
  455. package/dist/assets/streamParse-DRgMHWye.js +2 -0
  456. package/dist/assets/student.generated-DS_acPaJ.js +1 -0
  457. package/dist/assets/swift-DonLKvLd.js +1 -0
  458. package/dist/assets/tables-Dzd3rTqG.js +1 -0
  459. package/dist/assets/time-BHTmJR1s.js +1 -0
  460. package/dist/assets/toast-BBNs2h3L.js +1 -0
  461. package/dist/assets/toml-CcmNWLt0.js +1 -0
  462. package/dist/assets/traveler.generated-Beun9X7y.js +1 -0
  463. package/dist/assets/tsx-5f3ulCja.js +1 -0
  464. package/dist/assets/tsx-BOvsFOI6.js +1 -0
  465. package/dist/assets/typeof-B5XbjTb1.js +1 -0
  466. package/dist/assets/typescript-Utq2Cl8c.js +1 -0
  467. package/dist/assets/typescript-j_1H8WHN.js +1 -0
  468. package/dist/assets/useDashboardLoop-B6ByHWoE.js +5 -0
  469. package/dist/assets/useFocusTrap-DbfG6zbM.js +1 -0
  470. package/dist/assets/useLiveConfig-X9Wxh90k.js +1 -0
  471. package/dist/assets/useSpatialCanvas-DogK9457.js +1 -0
  472. package/dist/assets/useSpotlightWalk-rMbmNBKK.js +1 -0
  473. package/dist/assets/useSrsCards-CagZefwX.js +1 -0
  474. package/dist/assets/useStudy-Bflreq2a.js +1 -0
  475. package/dist/assets/useTimeout-BRYvu2jQ.js +1 -0
  476. package/dist/assets/useValidatedImage-D2fhA198.js +1 -0
  477. package/dist/assets/useZoomGesture-CYc3tf2z.js +1 -0
  478. package/dist/assets/verbatim-CBMzUDlf.js +1 -0
  479. package/dist/assets/worker-BbLKfGzm.js +2 -0
  480. package/dist/assets/xml-WY0zc4PG.js +1 -0
  481. package/dist/assets/yaml-CxbubiML.js +1 -0
  482. package/dist/assets/yaml-DijMHRDA.js +1 -0
  483. package/dist/demo-assets/CREDITS.md +40 -0
  484. package/dist/demo-assets/images/basalt-cliffs.jpg +0 -0
  485. package/dist/demo-assets/images/capelinhos.jpg +0 -0
  486. package/dist/demo-assets/images/cliff-fields.jpg +0 -0
  487. package/dist/demo-assets/images/crater-panorama.jpg +0 -0
  488. package/dist/demo-assets/images/furnas-lake.jpg +0 -0
  489. package/dist/demo-assets/images/green-coast.jpg +0 -0
  490. package/dist/demo-assets/images/overcast-coast.jpg +0 -0
  491. package/dist/demo-assets/images/patchwork-fields.jpg +0 -0
  492. package/dist/demo-assets/images/ponta-delgada.jpg +0 -0
  493. package/dist/demo-assets/images/sete-cidades.jpg +0 -0
  494. package/dist/demo-assets/images/slide-placeholder-light.svg +9 -0
  495. package/dist/demo-assets/images/slide-placeholder.svg +9 -0
  496. package/dist/demo-assets/images/village-street.jpg +0 -0
  497. package/dist/demo-assets/pdf/cfd-primer.pdf +0 -0
  498. package/dist/demo-assets/video/azores-film.mp4 +0 -0
  499. package/dist/favicon.svg +19 -0
  500. package/dist/fonts/LICENSE.txt +34 -0
  501. package/dist/fonts/archivo-var-latin.woff2 +0 -0
  502. package/dist/fonts/bodoni-moda-400-italic-latin.woff2 +0 -0
  503. package/dist/fonts/bodoni-moda-var-latin.woff2 +0 -0
  504. package/dist/fonts/eb-garamond-var-italic-latin.woff2 +0 -0
  505. package/dist/fonts/eb-garamond-var-latin.woff2 +0 -0
  506. package/dist/fonts/export/families/archivo.css +12 -0
  507. package/dist/fonts/export/families/bodoni-moda.css +23 -0
  508. package/dist/fonts/export/families/eb-garamond.css +22 -0
  509. package/dist/fonts/export/families/ibm-plex-sans.css +12 -0
  510. package/dist/fonts/export/families/instrument-serif.css +22 -0
  511. package/dist/fonts/export/families/jetbrains-mono.css +12 -0
  512. package/dist/fonts/export/families/libre-franklin.css +12 -0
  513. package/dist/fonts/export/families/lora.css +22 -0
  514. package/dist/fonts/export/families/source-serif-4.css +12 -0
  515. package/dist/fonts/export/families/space-grotesk.css +12 -0
  516. package/dist/fonts/export/families/spectral.css +52 -0
  517. package/dist/fonts/fonts.css +141 -0
  518. package/dist/fonts/hanken-grotesk-var-latin.woff2 +0 -0
  519. package/dist/fonts/ibm-plex-sans-var-latin.woff2 +0 -0
  520. package/dist/fonts/instrument-serif-400-italic-latin.woff2 +0 -0
  521. package/dist/fonts/instrument-serif-400-latin.woff2 +0 -0
  522. package/dist/fonts/jetbrains-mono-var-latin.woff2 +0 -0
  523. package/dist/fonts/libre-franklin-var-latin.woff2 +0 -0
  524. package/dist/fonts/lora-var-italic-latin.woff2 +0 -0
  525. package/dist/fonts/lora-var-latin.woff2 +0 -0
  526. package/dist/fonts/newsreader-var-italic-latin.woff2 +0 -0
  527. package/dist/fonts/newsreader-var-latin.woff2 +0 -0
  528. package/dist/fonts/plex-mono-400-latin.woff2 +0 -0
  529. package/dist/fonts/plex-mono-500-latin.woff2 +0 -0
  530. package/dist/fonts/plex-mono-600-latin.woff2 +0 -0
  531. package/dist/fonts/source-serif-4-var-latin.woff2 +0 -0
  532. package/dist/fonts/space-grotesk-var-latin.woff2 +0 -0
  533. package/dist/fonts/spectral-400-italic-latin.woff2 +0 -0
  534. package/dist/fonts/spectral-400-latin.woff2 +0 -0
  535. package/dist/fonts/spectral-500-italic-latin.woff2 +0 -0
  536. package/dist/fonts/spectral-500-latin.woff2 +0 -0
  537. package/dist/fonts/spectral-600-latin.woff2 +0 -0
  538. package/dist/index.html +117 -0
  539. package/dist/legal/DISCLAIMER.md +16 -0
  540. package/dist/legal/LICENSE.txt +75 -0
  541. package/dist/legal/PRIVACY.md +127 -0
  542. package/dist/legal/SECURITY.md +72 -0
  543. package/dist/legal/SUPPORT.md +13 -0
  544. package/dist/legal/TERMS.md +122 -0
  545. package/dist/legal/THIRD-PARTY.txt +639 -0
  546. package/dist/legal/TRADEMARKS.md +15 -0
  547. package/dist/ort-wasm-simd-threaded.mjs +59 -0
  548. package/dist/sw.js +30 -0
  549. package/dist/vad.worklet.bundle.min.js +1 -0
  550. package/docker-compose.yml +33 -0
  551. package/gateway/README.md +99 -0
  552. package/gateway/actions-gateway.mjs +537 -0
  553. package/gateway/connectors.d.mts +27 -0
  554. package/gateway/connectors.mjs +463 -0
  555. package/gateway/guard.mjs +110 -0
  556. package/gateway/tokenStore.mjs +134 -0
  557. package/package.json +143 -0
@@ -0,0 +1 @@
1
+ var e={livecompute:{blurb:`A stateful what-if: drag the levers and one honest projected number updates live, from a transparent arithmetic formula over the inputs. For "what would my mortgage be", "how long does runway last", "calories for my goal". Real values only — it recomputes what you set, never invents data.`,optional:[`icon`,`iconColor`,`caveat`,`footer`],itemShapes:[{prop:`inputs`,text:`label`,textAliases:[`name`,`lever`]}],propHints:{"inputs[].key":`short variable name (letters/digits/_) used verbatim in the formula`,formula:`arithmetic over the input keys using + - * / ^ and ( ) only — e.g. "principal * (rate/1200) / (1 - (1 + rate/1200)^(-years*12))". No function calls.`,"output.decimals":`decimal places for the result (default 0)`}},countdown:{blurb:`A live ticking countdown to a real deadline — days/hours/minutes/seconds remaining, what is due, and the consequence of missing it. Only use with a real, known date.`,optional:[`icon`,`iconColor`,`label`,`dueWhat`,`consequence`,`footer`],propHints:{target:`the real date/time the countdown runs to, ISO preferred, e.g. "2026-09-01T17:00:00" or "2026-09-01"`}},livescore:{blurb:`An interactive scorekeeper — tap +/- on each side and the ranking recomputes live, leader highlighted. For game night, classroom points, or trivia; the user drives it, nothing is invented.`,optional:[`icon`,`iconColor`,`unit`,`step`,`footer`],itemShapes:[{prop:`entries`,text:`name`,textAliases:[`player`,`team`,`label`]}],propHints:{"entries[].score":`starting score as a number (0 to begin)`,step:`points added or removed per tap (default 1)`}},nutritionlabel:{blurb:`A faithful FDA-style Nutrition Facts panel — the boxed label with serving size, a big Calories number, nutrient rows with a right-aligned %DV column (major nutrients bold, sub-nutrients indented), and an allergen line. For reading or showing a food label; for a macro split use macrobreakdown.`,optional:[`title`,`icon`,`iconColor`,`servings`,`allergens`,`caption`,`footer`],itemShapes:[{prop:`nutrients`,text:`name`,textAliases:[`nutrient`,`label`]}],stringItems:[`allergens`],propHints:{servingSize:`the serving size as printed, e.g. "1 cup (55g)"`,"nutrients[].amount":`the printed amount, e.g. "8g", "230mg"`,"nutrients[].dv":`percent Daily Value as a number (0–100+); omit where the label prints none`,"nutrients[].indent":`true for a sub-nutrient (Saturated Fat under Total Fat)`,"nutrients[].bold":`true for a major nutrient line printed in bold`,allergens:`array of allergens, e.g. ["wheat", "milk", "soy"]`}},unitconvert:{blurb:`A measurement-conversion panel — a from-amount shown prominently, then aligned "= value unit" equivalent rows (1 cup = 240 ml = 16 tbsp), tagged by category (volume / weight / length / temperature). For "how many X in a Y" or "convert A to B" asks.`,optional:[`title`,`icon`,`iconColor`,`category`,`caption`,`footer`],itemShapes:[{prop:`equivalents`,text:`unit`,textAliases:[`name`,`label`]}],propHints:{quantity:`the from-amount as a number, e.g. 1`,from:`the from-unit, e.g. "cup"`,"equivalents[].value":`the equivalent amount as a string, e.g. "240", "16"`,category:`'volume'|'weight'|'length'|'temperature'`}},packlist:{blurb:`A category-grouped packing checklist — sections (Clothes, Toiletries, Tech) of counted items with a packed-vs-total meter per group and overall, headed by the trip context (duration, weather). For "what to pack for X" asks.`,optional:[`title`,`icon`,`iconColor`,`context`,`caption`,`footer`],itemShapes:[{prop:`groups`,text:`name`,textAliases:[`category`,`label`],children:{prop:`items`,text:`label`,textAliases:[`name`,`item`,`text`]}}],propHints:{context:`trip context header, e.g. "3 days · mild, light rain"`,"groups[].items[].count":`how many to bring as a number, e.g. 3`,"groups[].items[].packed":`true once the item is packed (drives the meters)`}},pregnancyweek:{blurb:`A week-by-week pregnancy card — the gestational week with a trimester progress bar (week/40), a to-scale fruit-size comparison, the baby's length/weight, and milestone bullets. For "what's happening at N weeks" / "how big is the baby now" asks.`,optional:[`title`,`icon`,`iconColor`,`trimester`,`fruitSize`,`lengthCm`,`weightG`,`milestones`,`caption`,`footer`],stringItems:[`milestones`],propHints:{week:`gestational week as a number, 1–40`,trimester:`1|2|3 (derived from the week when omitted)`,fruitSize:`the size comparison, e.g. "banana", "pomegranate"`,lengthCm:`length in cm as a number`,weightG:`estimated weight in grams as a number`}},cycletrack:{blurb:`A menstrual / fertility calendar band — one cell per cycle day, shading the period days, the fertile window, the ovulation day, and a "today" marker, all positioned by day number against the cycle length. For cycle-tracking, fertility-window, or period-calendar asks.`,optional:[`title`,`icon`,`iconColor`,`currentDay`,`fertileWindow`,`ovulationDay`,`caption`,`footer`],propHints:{cycleLength:`total days in the cycle as a number, e.g. 28`,periodDays:`number of period days from day 1, e.g. 5`,currentDay:`today's day-of-cycle (1-based) as a number`,fertileWindow:`two day numbers [start, end], e.g. [11, 16]`,ovulationDay:`the estimated ovulation day number, e.g. 14`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={contractiontimer:{blurb:`A labor-contraction interval strip — a DISPLAY of logged contractions (not a live timer): each is a bar sized by its duration and spaced by its interval, with avg duration / frequency read-outs and a "time to go in" rule hint (e.g. 5-1-1). For tracking or reviewing contraction timing.`,optional:[`title`,`icon`,`iconColor`,`rule`,`caption`,`footer`],itemShapes:[{prop:`contractions`,text:`start`,textAliases:[`time`,`label`]}],propHints:{"contractions[].start":`wall-clock start of the contraction, e.g. "2:14 PM"`,"contractions[].durationSec":`how long the contraction lasted, in seconds`,"contractions[].intervalMin":`minutes from the start of this contraction to the start of the next`,rule:`the go-in rule of thumb, e.g. '5-1-1'`}},prayertimes:{blurb:`A daily devotional-times card — the named time slots (five salah, sunrise/sunset, liturgical hours, candle-lighting) plotted along a dawn-to-dusk sun arc, each positioned by its clock time, with the next one highlighted and read out countdown-style. For prayer-times, salah-schedule, sunrise/sunset, or daily-liturgy asks.`,optional:[`title`,`icon`,`iconColor`,`date`,`location`,`next`,`sunArc`,`caption`,`footer`],itemShapes:[{prop:`slots`,text:`name`,textAliases:[`label`,`prayer`,`slot`],requiredFields:[`time`]}],propHints:{slots:`the named times in order, each { name, time } — time a clock string like "5:42 AM" or "17:03"`,next:`the name of the upcoming slot to highlight, must match one slot's name`,sunArc:`true to draw the dawn-to-dusk sun-arc strip (default), false for a plain time list`}},labprotocol:{blurb:'A lab-bench procedure/SOP — hazard-tagged reagents and equipment beside numbered steps, each with an optional duration/temperature condition and an inline caution. General enough for a chemistry synthesis prep or a molecular-biology protocol (PCR, Western blot); an optional `cycles` group renders a bracketed "repeat ×N" block for thermal-cycling steps. Use for "protocol for X", "PCR steps", "synthesis procedure", "SOP for Y". For cooking use recipecard instead.',optional:[`icon`,`iconColor`,`reagents`,`equipment`,`cycles`,`footer`],itemShapes:[{prop:`reagents`,text:`name`,textAliases:[`reagent`,`chemical`]},{prop:`steps`,text:`text`,textAliases:[`step`,`instruction`,`description`]}],stringItems:[`equipment`],propHints:{"reagents[].hazard":`'flammable'|'corrosive'|'toxic'|'oxidizer'|'irritant'`,"reagents[].amount":`e.g. "50 mL", "2.5 µL", "10 g"`,"reagents[].conc":`e.g. "1 M", "10x buffer", "0.1% w/v"`,"steps[].duration":`e.g. "5 min", "30 sec"`,"steps[].temp":`e.g. "95°C", "4°C", "room temp"`,"steps[].caution":`a short safety note specific to this step, shown in warning tone`,cycles:`a repeated sub-procedure, e.g. PCR thermal cycling: { repeat: 30, steps: [{ text, duration, temp }] }`}},caregivercoord:{blurb:`An eldercare / multi-person care-team coordination card — a named person's medications (with who administers each), appointments, and care-team contacts. The COORDINATOR's view, not the patient's own dosing view (use medicationschedule for that). Use for "coordinate mom's care", "who's handling dad's appointments", "caregiver schedule for X".`,optional:[`icon`,`iconColor`,`medications`,`appointments`,`contacts`,`footer`],itemShapes:[{prop:`medications`,text:`name`,textAliases:[`medication`,`drug`,`med`]},{prop:`appointments`,text:`purpose`,textAliases:[`reason`,`title`,`type`]},{prop:`contacts`,text:`name`,textAliases:[`contact`]}],propHints:{relation:`the caregiver's relation to the person, e.g. "Mom", "Dad", "Grandmother"`,"medications[].times":`array of dosing time strings, e.g. ["8:00 AM", "6:00 PM"]`,"medications[].takenBy":`who administers/checks the dose, e.g. "Home aide", "Priya"`,"appointments[].date":`e.g. "Jun 20, 2026", "Thu 2pm"`,"appointments[].provider":`e.g. "Dr. Alvarez", "Maple Physical Therapy"`,"contacts[].role":`e.g. "Home aide", "Primary care physician", "Son (backup)"`}},readinglist:{blurb:`A book-club or personal reading tracker — a cover swatch, author, and status (reading/queued/done) per book, an optional star rating, and expandable book-club discussion questions. Use for "my reading list", "book club picks", "what am I reading".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`books`,text:`title`,textAliases:[`name`,`book`]}],propHints:{"books[].status":`'reading'|'queued'|'done'`,"books[].rating":`a number 0–5, halves allowed (e.g. 4.5)`,"books[].discussionQuestions":`array of open-ended discussion question strings`}},cocktailcard:{blurb:`A drink recipe / tasting card — a numbered pour list (the order IS the build steps) closed by flavor notes (aroma/taste/finish) and a star rating. recipecard's sibling for cocktails and other mixed drinks; use recipecard for food. Use for "recipe for a negroni", "how do I make an old fashioned".`,optional:[`icon`,`iconColor`,`notes`,`rating`,`footer`],itemShapes:[{prop:`pours`,text:`item`,textAliases:[`ingredient`,`name`]}],propHints:{rating:`a number 0–5, halves allowed (e.g. 4.5)`,"pours[].qty":`e.g. "1.5 oz", "a dash", "1"`}},runninglog:{blurb:`A running/cycling training log — a dated entry list (distance, pace, route, elevation) plus a distance/pace trend chart built from those same entries. Distinct from workoutplan (gym sessions of sets/reps). Use for "log of my runs", "how's my training going", "my cycling mileage".`,optional:[`icon`,`iconColor`,`unit`,`footer`],itemShapes:[{prop:`entries`,text:`date`,textAliases:[`day`,`when`]}],propHints:{unit:`'mi'|'km' (default 'mi')`,"entries[].pace":`"8:32" min:sec per unit — only this exact mm:ss shape is charted`,"entries[].elevationGainM":`a number in meters`}},userpersona:{blurb:`A UX research persona card — an initials portrait and role header, goals (insight tint) and frustrations (warning tint) as two bullet columns, an italic pull-quote, and optional observed behaviors. Use for "build a persona for X", "who are we designing for", "UX research summary".`,optional:[`icon`,`iconColor`,`role`,`quote`,`behaviors`,`footer`],stringItems:[`goals`,`frustrations`,`behaviors`],propHints:{role:`a short role/descriptor line, e.g. "Integrating partner engineer", "Busy parent, 34"`,quote:`a short first-person line that captures their attitude, shown as a pull-quote`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={runofshow:{blurb:`An event-production timeline / cue sheet — a vertical cue list with the live cue pinned and glowing, each tagged with an initials chip for its owner. Use for "run of show for the shoot", "cue sheet for the show", "production timeline for the launch event".`,optional:[`icon`,`iconColor`,`eventDate`,`footer`],itemShapes:[{prop:`cues`,text:`cue`,textAliases:[`title`,`action`,`description`]}],propHints:{"cues[].state":`'done'|'live'|'next'|'pending'`,"cues[].owner":`a person's name — shown as an initials chip`}},podcastplanner:{blurb:`An episode-planning card — a guest header atop a numbered topic outline, each topic tagged with its chapter timecode when one lines up. Use for "plan next week's episode", "outline for the podcast", "episode with X".`,optional:[`icon`,`iconColor`,`guest`,`topics`,`chapters`,`footer`],stringItems:[`topics`],propHints:{chapters:"array of { timecode, label } paired to `topics` BY POSITION (chapters[i] tags topics[i]) — omit an index rather than guess a timecode"}},vaxschedule:{blurb:`A vaccination schedule, generalized for a pet OR a person — dose chips plotted along a horizontal age/date axis by due date, colored by status (done/due/overdue). Use for "vaccine schedule for X", "when's the next booster due", "puppy shot schedule".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`doses`,text:`vaccine`,textAliases:[`name`,`shot`]}],propHints:{"doses[].dueAt":`a real date ("2026-08-01") OR a relative age ("8 weeks", "6 months") — keep one style across the whole list`,"doses[].status":`'done'|'due'|'overdue'`}},claimagecompare:{blurb:`The Social Security claim-age tradeoff — KPI chips for each claiming age (62/67/70) and a cumulative-payout line chart computed from the given monthly benefit at each age, with an optional marked breakeven point. Use for "when should I claim Social Security", "62 vs 67 vs 70", "claim-age tradeoff".`,optional:[`icon`,`iconColor`,`breakeven`,`footer`],propHints:{"ages[].age":`62|67|70 — exactly one of these three`,"ages[].monthlyBenefit":`the monthly dollar amount at that claiming age, a number`,breakeven:`only include this if you can name a specific crossover age — never guessed`}},weathernow:{blurb:`Present-moment weather — big current reading, an hourly scroll strip, and small stat tiles (UV, air quality, wind). Distinct from forecast (a multi-day grid); always give a real asOf timestamp.`,optional:[`icon`,`iconColor`,`location`,`feelsLikeF`,`hi`,`lo`,`hourly`,`tiles`,`footer`],itemShapes:[{prop:`hourly`,text:`time`},{prop:`tiles`,text:`label`,textAliases:[`name`]}],propHints:{"hourly[].icon":`'sun'|'cloud'|'rain'|'snow'|'storm'|'wind'`,"hourly[].precipPct":`chance of precipitation, 0-100`,asOf:`REQUIRED — a real freshness timestamp, e.g. "2:14 PM"`}},tierlist:{blurb:`An S/A/B/C tier-list ranking — a colored tier rail per row with ranked items as chips. Use for "tier list of X", "rank these S to C". An intentionally empty tier still renders as its own row.`,optional:[`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`rows`,text:`tier`,textAliases:[`label`,`name`,`rank`]}],propHints:{"rows[].color":`'var(--danger)'|'var(--warning)'|'var(--insight)'|'var(--presence)'`,"rows[].items":`plain array of item names in this tier, e.g. ["Item A","Item B"]`}},paystub:{blurb:`A payslip: gross pay, itemized earnings, itemized deductions (shown subtracted), and a net-pay total. Use for "explain my paycheck", "what got deducted", "breakdown of this payslip".`,optional:[`icon`,`iconColor`,`employer`,`payDate`,`ytdNet`,`footer`],itemShapes:[{prop:`earnings`,text:`label`,textAliases:[`name`,`description`]},{prop:`deductions`,text:`label`,textAliases:[`name`,`description`]}]},taxbracket:{blurb:`A progressive income-tax bracket bar — segments sized to each bracket's real dollar span, a needle marking where the given income lands, and effective-vs-marginal rate readouts computed from the bands. Use for "what tax bracket am I in", "explain marginal vs effective rate".`,optional:[`icon`,`iconColor`,`filingStatus`,`effectiveRate`,`marginalRate`,`currency`,`footer`],propHints:{"bands[].rate":`this band's rate as a percent, e.g. 22 for 22% (not a 0-1 fraction)`,"bands[].max":`omit on the last band for an open-ended top bracket`,currency:`prefix, default '$'`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={menucard:{blurb:`A restaurant or event menu — named sections, each item priced with a dotted leader and tagged with dietary chips. Use for "make a menu for X", "dinner party menu", "coffee shop menu board".`,optional:[`icon`,`iconColor`,`venue`,`subtitle`,`footer`],itemShapes:[{prop:`sections`,text:`name`,textAliases:[`category`,`title`],children:{prop:`items`,text:`name`,textAliases:[`label`,`dish`]}}],propHints:{"sections[].items[].tags":`dietary/allergen tags, e.g. ["vegan","gluten-free","spicy"]`}},familytree:{blurb:`A genealogy chart — name/date cards laid out by generation with mating lines and sibship bars. No photos. Use for "draw my family tree", "who are my grandparents", "family tree for X".`,optional:[`icon`,`iconColor`,`rootId`,`footer`],itemShapes:[{prop:`people`,text:`name`}],propHints:{"people[].parents":`one or two parent ids, e.g. ["mom-id","dad-id"] or ["mom-id"]`,"people[].partner":`a spouse/partner id, only needed if they share no child of record`,"people[].death":`a year or date; its presence alone marks the person deceased`,rootId:`the id of the person the tree is centered on — highlights their card`}},seatingchart:{blurb:`An event floor plan — round or rectangular tables auto-arranged on a grid, each seat plotted around its table and filled with the assigned guest's initials. Use for "seat my wedding guests", "table plan for the gala", "who's sitting where".`,optional:[`icon`,`iconColor`,`venue`,`footer`],itemShapes:[{prop:`tables`,text:`label`,textAliases:[`name`]},{prop:`assignments`,text:`guest`,textAliases:[`name`]}],propHints:{"tables[].shape":`'round'|'rect', default 'round'`,"tables[].x":`omit on EVERY table to auto-arrange the whole floor on a grid`,"assignments[].seatIndex":`0-based, must be less than that table's seats`}},relationshipmap:{blurb:`A typed people graph — who's connected to whom and how (family/ally/rival/romance/colleague), with a kind-keyed legend below. Use for "map the relationships in this story", "who's connected to who", "family/rivalry web".`,optional:[`icon`,`iconColor`,`layout`,`footer`],itemShapes:[{prop:`people`,text:`name`,textAliases:[`label`]}],propHints:{"ties[].kind":`'family'|'ally'|'rival'|'romance'|'colleague'|'other'`,layout:`'circle'|'grid', default 'circle'`}},meetingnotes:{blurb:`A post-meeting recap — attendees, what was discussed, what got decided, and a checklist of action items with owners and due dates. Distinct from agenda (PRE-meeting scheduling only). Use for "summarize this meeting", "what did we decide and who owns what".`,optional:[`icon`,`iconColor`,`meetingDate`,`attendees`,`discussionPoints`,`decisions`,`footer`],itemShapes:[{prop:`actionItems`,text:`task`,textAliases:[`title`,`label`]}],stringItems:[`attendees`,`discussionPoints`,`decisions`],propHints:{attendees:`plain array of names, e.g. ["Sam","Priya"]`,discussionPoints:`plain array of short prose points, no sub-objects`,decisions:`plain array of short prose decisions, no sub-objects`,"actionItems[].dueDate":`"Fri", "Jun 20" — a short date/day string`}},stickerchart:{blurb:`A behavior/reward chart — one row per person (or a single shared row), a star for each earned day, and progress toward a reward threshold. Use for "sticker chart for brushing teeth", "reward chart for the kids", "chore streak with a reward".`,optional:[`icon`,`iconColor`,`behavior`,`people`,`rewardAt`,`footer`],stringItems:[`days`,`people`],propHints:{days:`plain array of column labels, e.g. ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]`,people:`plain array of names; omit entirely for a single shared row`,"marks[].person":"must match a `people` entry when `people` is given; omit otherwise","marks[].day":"must match a `days` entry",rewardAt:`total stickers needed across the WHOLE chart to earn the reward`}},statblock:{blurb:'A tabletop-RPG creature/character stat block, D&D / Pathfinder shaped — name and italic type line, Armor Class / Hit Points / Speed, the six-ability table with modifiers computed from the raw scores, then bold-lead-in traits, actions, and reactions between tapered rules. `abilities` is an object of the six raw scores { str, dex, con, int, wis, cha }. Use for "stat block for X", homebrew monsters, or campaign NPC sheets. Never for real-person profiles — use userpersona.',optional:[`title`,`icon`,`iconColor`,`meta`,`hpFormula`,`speed`,`saves`,`skills`,`senses`,`languages`,`challenge`,`traits`,`actions`,`reactions`,`footer`],itemShapes:[{prop:`traits`,text:`text`,textAliases:[`description`,`desc`,`detail`],requiredFields:[`name`]},{prop:`actions`,text:`text`,textAliases:[`description`,`desc`,`detail`],requiredFields:[`name`]},{prop:`reactions`,text:`text`,textAliases:[`description`,`desc`,`detail`],requiredFields:[`name`]}],stringItems:[`saves`,`skills`],propHints:{abilities:`object of the six raw scores, e.g. { "str": 14, "dex": 16, "con": 15, "int": 8, "wis": 12, "cha": 13 } — modifiers are computed from these, never supplied`,meta:`the type line, e.g. "Medium humanoid, neutral good"`,hpFormula:`the hit-dice formula printed beside the hit points, e.g. "8d8+16"`,speed:`e.g. "30 ft., fly 60 ft."`,saves:`plain array of save bonuses, e.g. ["Dex +5", "Con +4"]`,skills:`plain array of skill bonuses, e.g. ["Stealth +5", "Perception +3"]`,challenge:`challenge rating with XP, e.g. "3 (700 XP)"`}},vestingschedule:{blurb:`Equity vesting timeline: one bar per grant on a shared calendar, flat through the cliff then a computed linear ramp to fully vested, with a "today" needle and a live % vested per holder. Use for founder/employee equity, option grants, RSU schedules.`,optional:[`icon`,`iconColor`,`asOf`,`footer`],itemShapes:[{prop:`grants`,text:`holder`,textAliases:[`name`,`who`,`person`,`employee`]}],propHints:{"grants[].grantDate":`ISO date the grant started, e.g. "2023-03-01"`,"grants[].cliffMonths":`months from grantDate before anything vests (0 for no cliff)`,"grants[].vestMonths":`months from grantDate to fully vested (100%)`,asOf:`ISO date the "today" needle marks; omit to use the real current date`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={termsheet:{blurb:`Investment term sheet summary: a company/round/date header over a two-column list of deal terms (valuation, board seats, liquidation preference, pro-rata…). Use to summarize a term sheet or offer letter's key clauses.`,optional:[`icon`,`iconColor`,`company`,`round`,`date`,`footer`],itemShapes:[{prop:`terms`,text:`label`,textAliases:[`term`,`name`,`key`]}],propHints:{round:`e.g. 'Series A', 'Seed', 'Series B extension'`,date:`ISO date the term sheet is dated`}},fundraisingrounds:{blurb:`Round-by-round fundraising history: one stacked column per round (pre-money base + raised segment reaching post-money), left-to-right in round order, with lead investor and step-up multiple as captions. Use for "how has the company raised over time".`,optional:[`icon`,`iconColor`,`currency`,`footer`],itemShapes:[{prop:`rounds`,text:`name`,textAliases:[`round`,`label`]}],propHints:{currency:`ISO 4217 code, e.g. "USD" (default USD)`,"rounds[].stepUp":`valuation step-up vs. the prior round's post-money, e.g. 2.4 for a '2.4x' caption — only include when you can compute it from the prior round`}},saferterms:{blurb:`A SAFE or convertible note's headline terms: valuation cap, discount, and MFN as stat tiles, plus an interest-rate/maturity row for a note. Set instrument to 'safe' or 'note' — the rate/maturity row only shows for a note.`,optional:[`icon`,`iconColor`,`investor`,`valuationCap`,`discountPct`,`mfn`,`interestRate`,`maturityDate`,`conversionNote`,`footer`],propHints:{instrument:`'safe'|'note'`,principal:`the investment amount`,valuationCap:`the SAFE/note valuation cap; omit if the round has none`,discountPct:`conversion discount, 0-100 (e.g. 20 for 20% off the next round's price)`,mfn:`true if this holder gets the best terms of any later SAFE/note before it converts`,interestRate:`note-only: annual interest rate, 0-100. Don't set for a SAFE.`,maturityDate:`note-only: ISO date the note matures. Don't set for a SAFE.`,conversionNote:`one plain-language sentence on how/when this converts to equity`}},dilutionwaterfall:{blurb:`Ownership dilution across financing rounds: a 100%-stacked column per round, each holder keeping one consistent color with a thin ribbon connecting its segment to the next round. Use for "how did dilution play out across our rounds", cap-table evolution over time.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`rounds`,text:`round`,textAliases:[`name`,`label`],children:{prop:`holders`,text:`holder`,textAliases:[`name`,`who`,`investor`]}}],propHints:{"rounds[].holders[].pct":`ownership % this round, 0-100; need not sum to exactly 100`}},threestatementlink:{blurb:"The three linked financial statements side by side (income statement, balance sheet, cash flow) with 2-3 curved connectors showing where a line on one feeds another (net income → retained earnings, net income → cash flow's own net income). `statements` is EXACTLY 3 entries in that order.",optional:[`icon`,`iconColor`,`links`,`currency`,`footer`],itemShapes:[{prop:`statements`,text:`name`,children:{prop:`rows`,text:`label`,textAliases:[`line`,`item`]}},{prop:`links`,text:`label`}],propHints:{"statements[]":`exactly 3 objects, name in order: 'Income Statement','Balance Sheet','Cash Flow'`,"statements[].rows[].value":`use a negative for a cost/outflow — rendered in parentheses`,"statements[].rows[].indent":`integer ≥0 — indent the label under a subtotal`,"statements[].rows[].bold":`true for a subtotal/total row (rule + tint)`,"links[].from":`a row label to connect from, e.g. 'Net income'`,"links[].to":`a row label in a LATER statement to connect to`,currency:`ISO 4217 code, e.g. "USD" (default USD)`}},yieldcurve:{blurb:`Interest rate by tenor (1M through 30Y) on a categorical axis, with any inverted stretch — a longer tenor paying less than a shorter one — auto-shaded. Optional second curve for comparison (e.g. a year ago). Use for "is the yield curve inverted", rate-environment questions.`,optional:[`icon`,`iconColor`,`compareCurve`,`footer`],itemShapes:[{prop:`curve`,text:`tenor`},{prop:`compareCurve`,text:`tenor`}],propHints:{"curve[].tenor":`a short maturity label in increasing order, e.g. "1M","3M","1Y","10Y"`,"curve[].rate":`the yield, in percent (7 for 7%, not 0.07)`}},efficientfrontier:{blurb:`Risk/return scatter of individual assets with the efficient frontier drawn as a curve — the frontier is drawn exactly as given, never fitted or computed here, so only pass points you actually believe trace it. Use for portfolio-construction and risk/return comparison questions.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`assets`,text:`label`}],propHints:{"assets[].risk":`volatility, in percent (15 for 15%)`,"assets[].return":`expected return, in percent`,"assets[].highlight":`true for the one asset/portfolio you're calling out with a ring`,frontier:`points ALREADY ordered along the curve — this block draws them, never fits a line`}},bondladder:{blurb:`A bond ladder: one leader-style bar per rung, ordered by maturity (earliest first, never resorted by yield), with a face-value figure trailing each row. Use for laddered fixed-income holdings, CD/Treasury ladders.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`rungs`,text:`label`,textAliases:[`name`,`bond`]}],propHints:{"rungs[].maturity":`an ISO date or short label like '3Y' — sets the row order, not authored order`,"rungs[].yieldPct":`yield to maturity, in percent`,"rungs[].faceValue":`par/face value of this rung`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={cashflowtimeline:{blurb:`The engineering-economics cash-flow diagram: a horizontal period axis (0..N) with an upward arrow per inflow and a downward arrow per outflow, arrow length scaled to the amount on one shared scale, plus a computed NPV row when a discount rate is given. flows is [{period, amount, label?}] with SIGNED amounts (+ in, − out). Never for a running balance over time — use plot. Never for loan amortization schedules — use amortization.`,optional:[`icon`,`iconColor`,`periodLabel`,`discountRate`,`currency`,`footer`],itemShapes:[{prop:`flows`,requiredFields:[`period`,`amount`]}],propHints:{"flows[].period":`integer period index ≥ 0 (0 = now); repeats allowed — same-period flows stack side by side`,"flows[].amount":`signed: positive = inflow (arrow up), negative = outflow (arrow down)`,"flows[].label":`short name shown on hover, e.g. "Salvage value"`,periodLabel:`the unit of one period, e.g. 'Year' (default), 'Month', 'Quarter'`,discountRate:`per-period rate as a FRACTION, e.g. 0.08 for 8% — adds the computed NPV row`,currency:`currency symbol prefixed to amounts, default "$"`}},trustmap:{blurb:`Privacy map of where each kind of data is stored and who can see it, with an optional security checklist.`,optional:[`icon`,`iconColor`,`checklist`,`note`,`footer`],itemShapes:[{prop:`flows`,text:`data`,textAliases:[`what`,`kind`,`label`]},{prop:`checklist`,text:`label`,textAliases:[`text`,`item`,`name`]}],propHints:{"flows[]":`{ data, location, access, retention? } — data=what it is, location=where stored, access=who can see it`,"checklist[].ok":`true (satisfied, green check) | false (a gap, amber alert)`}},kanban:{blurb:`Multi-stage workflow board with cards, assignees, and progress tags.`,optional:[`icon`,`iconColor`,`footer`]},wizard:{blurb:`Step-by-step guide or onboarding flow with status indicators.`,optional:[`icon`,`iconColor`,`activeStep`,`footer`],propHints:{"steps[].status":`'done'|'active'|'todo'|'blocked'|'risk'`}},decisiontree:{blurb:`Branching yes/no decision logic tree leading to outcomes. Optionally an ML classifier tree: a node's splitFeature+threshold renders as a learned split ('feature ≤ threshold') instead of a plain question, and classDistribution (className+count per class) renders as a class-count bar + legend at that node, the way a trained decision-tree classifier is diagrammed.`,optional:[`icon`,`iconColor`,`footer`],propHints:{"nodes[].impurityMetric":`'gini'|'entropy'`}},goaltree:{blurb:`OKR tree: objectives with key results and progress tracking.`,optional:[`icon`,`iconColor`,`footer`]},plandag:{blurb:`Directed acyclic graph: dependencies, tasks, and x/y layout.`,optional:[`icon`,`iconColor`,`footer`],propHints:{"nodes[].status":`'done'|'active'|'todo'|'blocked'|'risk'`}},milestones:{blurb:`Chronological timeline of events with dates and status.`,optional:[`icon`,`iconColor`,`footer`]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={processflow:{blurb:`Linear process steps with branching notes and details.`,optional:[`icon`,`iconColor`,`footer`]},journeymap:{blurb:`Customer/user journey with emotions, actions, and touchpoints.`,optional:[`icon`,`iconColor`,`persona`,`footer`]},logicmodel:{blurb:`Program logic model: five locked columns (inputs, activities, outputs, outcomes, impact), each a short bullet list, read left to right as a causal chain.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`columns`,text:`stage`,textAliases:[`label`,`name`,`phase`],closedVocab:!0}],propHints:{"columns[].stage":`'inputs'|'activities'|'outputs'|'outcomes'|'impact', exactly 5 entries`}},orgchart:{blurb:`Recursive org structure with parent-child relationships.`,optional:[`icon`,`iconColor`,`footer`]},issuetree:{blurb:`McKinsey-style MECE issue tree: rootQuestion broken left-to-right into mutually exclusive branches down to leaf boxes carrying a finding. nodes:[{id,label,children?(ids),isLeaf?,finding?}] — a node's top-level branches are inferred as whichever ids no other node claims as a child.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`nodes`,text:`label`,textAliases:[`name`,`question`,`title`]}]},roadmap:{blurb:`Multi-lane quarterly roadmap with item spans and statuses.`,optional:[`icon`,`iconColor`,`footer`],stringItems:[`quarters`],propHints:{"lanes[].items[].status":`'done'|'active'|'todo'|'blocked'|'risk'`}},contentcalendar:{blurb:`Creator/marketing content calendar: platforms × weeks grid of status-colored post tiles. cells:[{platform,week,status,title?,format?}] — one entry per planned post; an unlisted (platform, week) pair renders as an empty slot.`,optional:[`icon`,`iconColor`,`footer`],stringItems:[`platforms`,`weeks`],propHints:{"cells[].status":`'idea'|'drafted'|'scheduled'|'posted'`}},headcountplan:{blurb:`HR headcount plan: a filled-vs-budgeted meter per department, open reqs, and a totals row.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`depts`,text:`name`,textAliases:[`dept`,`department`,`team`,`group`]}]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={chronologicaltimeline:{blurb:`Vertical or horizontal timeline of dated events with icons, descriptions, and status.`,optional:[`icon`,`iconColor`,`startLabel`,`endLabel`,`eras`,`footer`],itemShapes:[{prop:`events`,text:`title`,textAliases:[`label`,`name`,`heading`]}],propHints:{"events[].at":`position 0..100 along the axis`}},skilltree:{blurb:`Tiered progression / tech tree: skills in tier bands with prerequisite edges, point costs, and locked/unlocked states.`,optional:[`title`,`icon`,`iconColor`,`caption`,`footer`],propHints:{"nodes[].state":`'locked'|'available'|'unlocked'|'maxed'`,"nodes[].tier":`integer band, 0-based (0 = foundation row at top)`,"nodes[].requires":`array of node ids that must be unlocked first`}},businesscanvas:{blurb:`Business Model Canvas / Lean Canvas: the canonical nine-box strategy grid — partners | activities over resources | value proposition (center) | relationships over channels | segments, with cost structure and revenue streams splitting the bottom row. Each region is a short bullet list (string array); unfilled regions stay visible but dimmed. Never for a value chain or process sequence — use processflow. Never for org structure — use orgchart.`,optional:[`title`,`icon`,`iconColor`,`variant`,`keyPartners`,`keyActivities`,`keyResources`,`customerRelationships`,`channels`,`customerSegments`,`costStructure`,`revenueStreams`,`footer`],stringItems:[`keyPartners`,`keyActivities`,`keyResources`,`valueProposition`,`customerRelationships`,`channels`,`customerSegments`,`costStructure`,`revenueStreams`],propHints:{variant:`'bmc' | 'lean' — 'lean' relabels the same nine props onto Lean Canvas slots: keyPartners→Problem, keyActivities→Solution, keyResources→Key Metrics, valueProposition→Unique Value Proposition, customerRelationships→Unfair Advantage; channels, customerSegments, costStructure, revenueStreams keep their labels`}},blanks:{blurb:`Leave glowing holes for the 1–3 values only the user can give (a real deadline, their energy, what would make it a no) instead of guessing them.`,optional:[`icon`,`iconColor`,`intro`,`footer`],propHints:{"slots[].label":`the hole label shown to the user`,"slots[].kind":`'date'|'number'|'text'|'choice'`,"slots[].key":`lowercase slug, unique, e.g. 'deadline'`,"slots[].prompt":`the one question this hole replaces`,"slots[].accent":`var(--presence)|var(--insight)|var(--warning)`}},buttonbar:{blurb:`Gallery of button variants with ripple feedback and state tracking.`,optional:[`icon`,`iconColor`,`hint`,`color`,`footer`],itemShapes:[{prop:`buttons`,text:`label`,textAliases:[`name`,`title`,`text`]}]},textfield:{blurb:`Labeled text inputs with validation states and helper text.`,optional:[`icon`,`iconColor`,`color`,`footer`],itemShapes:[{prop:`fields`,text:`label`,textAliases:[`name`,`title`]}],propHints:{"fields[].state":`'default'|'error'|'success'`}},textarea:{blurb:`Auto-growing textarea with live character counter.`,optional:[`icon`,`iconColor`,`label`,`placeholder`,`value`,`max`,`minRows`,`color`,`footer`]},select:{blurb:`Styled single-select dropdown with optional icons and captions.`,optional:[`icon`,`iconColor`,`label`,`placeholder`,`selected`,`color`,`footer`],itemShapes:[{prop:`options`,text:`label`,textAliases:[`name`,`title`,`text`]}]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={combobox:{blurb:`Searchable autocomplete with metadata hints and live filtering.`,optional:[`icon`,`iconColor`,`label`,`placeholder`,`selected`,`noun`,`color`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`title`,`text`]}]},checkboxgroup:{blurb:`Multi-select checkboxes with indeterminate select-all toggle.`,optional:[`icon`,`iconColor`,`allLabel`,`color`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`title`,`text`]}]},actionchecklist:{blurb:`Checkable next-steps the user ticks off — a plan or 30-day checklist with priority + due tags.`,optional:[`icon`,`iconColor`,`subtitle`,`color`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`task`,`step`,`text`,`name`]}],propHints:{"items[].priority":`'high'|'medium'|'low'`}},radiogroup:{blurb:`Radio cards or rows with icons, captions, and value badges.`,optional:[`icon`,`iconColor`,`layout`,`selected`,`color`,`footer`],itemShapes:[{prop:`options`,text:`label`,textAliases:[`name`,`title`,`text`]}]},switchset:{blurb:`Rows of labeled toggle switches with descriptions.`,optional:[`icon`,`iconColor`,`color`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`title`,`text`]}]},togglegroup:{blurb:`Multi or single-mode button toggle group (text formatting, alignment).`,optional:[`icon`,`iconColor`,`mode`,`hint`,`color`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`title`,`text`]}]},otp:{blurb:`Segmented one-time-passcode input with verification and resend.`,optional:[`icon`,`iconColor`,`prompt`,`length`,`code`,`resendLabel`,`color`,`footer`]},preflightchecklist:{blurb:`Aviation preflight walk-around ticked off by phase (Before Start, Before Takeoff, Shutdown…), critical items flagged.`,optional:[`icon`,`iconColor`,`aircraft`,`footer`],itemShapes:[{prop:`sections`,text:`name`,textAliases:[`title`,`phase`,`label`],children:{prop:`items`,text:`label`,textAliases:[`task`,`step`,`text`,`name`]}}]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={estateplanchecklist:{blurb:`Estate-planning status board — Will, POA, Healthcare Proxy, Beneficiary designations, Digital assets — grouped, each flagged done/missing/needs-update.`,optional:[`icon`,`iconColor`,`color`,`footer`],itemShapes:[{prop:`documents`,text:`category`,textAliases:[`type`,`document`,`name`,`label`]}],propHints:{"documents[].category":`'Will'|'POA'|'Healthcare Proxy'|'Beneficiary designations'|'Digital assets'`,"documents[].status":`'done'|'missing'|'needs-update'`,"documents[].lastReviewed":`when it was last reviewed, e.g. "March 2023" (omit if never)`}},visachecklist:{blurb:`Immigration filing checklist for a specific case type (H-1B, I-485…) — required documents set apart from optional ones, each flagged done/pending/missing.`,optional:[`icon`,`iconColor`,`caseType`,`color`,`footer`],itemShapes:[{prop:`documents`,text:`name`,textAliases:[`document`,`label`,`title`]}],propHints:{caseType:`the filing this is for, e.g. "H-1B change of status", "I-485 adjustment"`,"documents[].required":`true unless the document is genuinely optional for this filing`,"documents[].status":`'done'|'pending'|'missing'`}},callout:{blurb:`Emphasized aside with optional collapsible body and tone-based accent bar.`,optional:[`icon`,`iconColor`,`tone`,`kicker`,`points`,`collapsed`,`footer`],propHints:{tone:`'info'|'success'|'warn'|'danger'|'neutral'`}},verdictcard:{blurb:`Opening verdict — a yes/no/maybe stance badge, a bold one-line call, the reason, and an honest caveat.`,optional:[`icon`,`iconColor`,`stance`,`label`,`reason`,`caveat`,`confidence`,`footer`],propHints:{stance:`'yes'|'no'|'maybe'|'caution' (drives the badge word, icon, and accent)`,confidence:`'high'|'medium'|'low' — qualitative only, never a fabricated percentage`}},scenarioset:{blurb:`Best / likely / worst outcome panels — a decision’s range without faking one precise number.`,optional:[`icon`,`iconColor`,`metric`,`highlight`,`footer`],itemShapes:[{prop:`scenarios`,text:`value`,textAliases:[`outcome`,`result`,`label`]}],propHints:{"scenarios[].kind":`'best'|'likely'|'worst'`}},worthit:{blurb:`A single-product "is it worth it for YOU" verdict — a worth-it/skip/depends call with honest price-vs-typical, a worth-it-IF / skip-IF fit split, the one deal-breaker, and who it is for. For ONE option; use compare for several, verdictcard for a generic yes/no.`,optional:[`icon`,`iconColor`,`product`,`price`,`priceNote`,`worthItIf`,`skipIf`,`dealBreaker`,`forWho`,`bottomLine`,`footer`],stringItems:[`worthItIf`,`skipIf`],propHints:{verdict:`'worth-it'|'skip'|'depends'`,priceNote:`honest price context, e.g. "vs ~$180 typical" — or say plainly if no reliable price was found`,worthItIf:`array of conditions where buying is the right call`,skipIf:`array of conditions where they should pass`}},companionnote:{blurb:`A low-chrome "I'm here with you" reflection that mirrors the feeling in the user's words — one warm line, no advice, metrics, icons, or bullets. For emotional moments where being heard matters more than information; reframecard offers a cognitive move instead, and an acute crisis needs a dedicated safety surface, not this.`,optional:[`follow`,`chip`],propHints:{reflection:`one warm second-person reflection of what the user is feeling, drawn ONLY from their words — never advice or invented facts`,chip:`optional soft cue, e.g. "I'm here" or "take your time"`}},positioncard:{blurb:`A calibrated normal→concerning scale placing a situation on a low→high continuum with the current level marked, an honest read, and concrete escalation triggers. Merges triage / normal-spectrum / reassure-watch — shows a RANGE, never a fake verdict. For "how worried should I be / is this normal / how bad is this".`,optional:[`icon`,`iconColor`,`atLevel`,`marker`,`reason`,`watchFor`,`caveat`,`footer`],itemShapes:[{prop:`levels`,text:`label`,textAliases:[`name`,`level`]}],stringItems:[`watchFor`],propHints:{"levels[].tone":`'good'|'caution'|'bad' (low→high)`,atLevel:`0-based index of the level where the situation currently falls`,watchFor:`concrete escalation triggers, e.g. ["pain spreads to your arm","fever over 39°C"]`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={differential:{blurb:`Ranked plausible explanations for a symptom, fault, or result — each with an honest likelihood band (common / less-common / rare), the tell-tale that fits, what points elsewhere, and a can't-miss-serious flag. For "what could be causing X"; shows possibilities with honest odds, never one confident answer.`,optional:[`icon`,`iconColor`,`prompt`,`caveat`,`footer`],itemShapes:[{prop:`causes`,text:`name`,textAliases:[`cause`,`label`,`explanation`]}],propHints:{"causes[].likelihood":`'common'|'less-common'|'rare'`,"causes[].serious":`true to flag a must-not-miss serious possibility even if rare`,prompt:`one concrete way to narrow it down, e.g. "check whether it worsens when you breathe in"`}},reframecard:{blurb:`A cognitive reframe of ONE stuck thought: the harsh thought shown VERBATIM, a gently-named distortion, then a warmer, truer counter-thought — the visual weight is on the shift, not a scoreboard. Offers a cognitive MOVE; companionnote only mirrors the feeling with no move, and verdictcard answers a yes/no decision.`,optional:[`title`,`icon`,`iconColor`,`distortion`,`footer`],propHints:{thought:`the harsh thought in the user’s OWN words, verbatim — never paraphrased or invented`,distortion:`gentle name for the thinking pattern, e.g. ‘catastrophizing’ | ‘mind-reading’ | ‘all-or-nothing’ | ‘fortune-telling’ | ‘overgeneralizing’`,reframe:`the warmer, truer counter-thought — kinder but honest, grounded in what is also true, not toxic positivity`}},breathpacer:{blurb:`A paced breathing exercise the user does WITH the canvas: a soft orb expands on the inhale, holds, and settles on the exhale in a continuous pure-CSS loop, with a phase caption. For acute stress or overwhelm where a moment of regulation helps more than words; companionnote reflects the feeling, this gives the body something calming to do. Set a named pattern or explicit inhale/hold/exhale seconds.`,optional:[`title`,`icon`,`iconColor`,`pattern`,`inhale`,`hold`,`exhale`,`note`],propHints:{pattern:`'478' (4-7-8 relaxing breath) | 'box' (4-4-4 even square) | 'calm' (gentle 4 in / 6 out, default)`,inhale:`inhale seconds (overrides the pattern); kept within a calm 2–12s range`,hold:`hold seconds, 0 for no hold (overrides the pattern)`,exhale:`exhale seconds (overrides the pattern); kept within a calm 2–14s range`}},copingmenu:{blurb:`A permission-giving menu of doable-now coping options, each tagged by CAPACITY (effort + time) so an overwhelmed person can pick what feels possible — no pressure to do all of them. For comfort/overwhelm moments; use a plain checklist for neutral to-dos, companionnote when being heard matters more than doing anything.`,optional:[`title`,`icon`,`iconColor`,`intro`,`footer`],itemShapes:[{prop:`options`,text:`label`,textAliases:[`name`,`action`,`title`]}],propHints:{"options[].effort":`'low'|'medium'|'high'`,"options[].time":`a small honest commitment, e.g. "2 min" or "10 min"`,intro:`a gentle permission line, e.g. “Pick whatever feels possible — you don’t have to do all of them.”`}},subtextdecode:{blurb:`Decodes a received message the user is unsure about: the verbatim message pinned at top, then 2–3 ranked interpretations each with an honest likelihood band and the exact textual cue it rests on, a "you can't know for sure" line, and one clarifying reply to send. The caution flavor reframes the readings as red flags for a scam/manipulation screen. For "what did they mean by this / is this a scam"; differential is for causes of a fault or symptom, not tone in someone's words.`,optional:[`icon`,`iconColor`,`flavor`,`cantKnow`,`reply`,`footer`],itemShapes:[{prop:`readings`,text:`interpretation`,textAliases:[`meaning`,`reading`,`label`]}],propHints:{flavor:`'tone' (decode intent/feeling) | 'caution' (reframe readings as red flags / scam screen)`,"readings[].likelihood":`'most likely'|'possible'|'less likely'`,message:`the received message reproduced VERBATIM — never paraphrased or invented`,"readings[].cue":`the exact word or phrasing in the message this reading rests on (or, with flavor:caution, the red flag)`,cantKnow:`an honest line that you cannot be certain of intent from text alone`,reply:`one short clarifying message the user could send to find out`}},rehearsal:{blurb:`A branching playbook for a hard conversation: a quotable opener, then 2-3 likely reactions as branches (each with a coached reply and why it works) and a graceful exit line. Framed as rehearsal, not prediction. For "how do I bring this up / what do I say if they react badly"; dialogue gives a fixed scripted exchange and decisiontree a logic flowchart instead.`,optional:[`icon`,`iconColor`,`exit`,`footer`],itemShapes:[{prop:`branches`,text:`reaction`,textAliases:[`response`,`objection`]}],propHints:{opener:`the quotable line to START the conversation, in the user’s own voice`,"branches[].reaction":`how the other person might react, completing "If they …" (e.g. "get defensive", "go quiet", "say it is not a big deal")`,"branches[].say":`the coached, quotable response to THAT reaction`,"branches[].why":`optional one line on why that response works`,exit:`a graceful line to wrap up if it stalls, e.g. "Let us pick this up after dinner"`}},messagescriptset:{blurb:`A bundle of ready-to-send messages aimed at SEVERAL targets at once — each a card with a channel chip, the exact copy-friendly line to send, and an optional "if they push back" rebuttal. For "write me what to say to cancel / dispute / ask X across these N places"; use compose’s messagedraft for ONE polished message to ONE recipient.`,optional:[`icon`,`iconColor`,`intro`,`footer`],itemShapes:[{prop:`scripts`,text:`message`,textAliases:[`line`,`script`,`text`]}],propHints:{"scripts[].channel":`'email'|'phone'|'in-app'|'chat'`,"scripts[].target":`who the line is for: the recipient, vendor, or service`,"scripts[].message":`the exact line to send, in the user’s own words — never an invented fact`,"scripts[].rebuttal":`what to say if they push back or counter-offer`}},talktrack:{blurb:`A speakable, word-for-word talk-track / teleprompter — the literal sentences to SAY, in order, each large and calm, with a small delivery beat ("pause here", "~15s") beside it. For a toast, pitch, interview answer, or hard phone call. Distinct from takeaways (bullets to remember): these are spoken lines to read aloud.`,optional:[`icon`,`iconColor`,`totalTime`,`footer`],itemShapes:[{prop:`lines`,text:`say`,textAliases:[`line`,`text`,`words`]}],propHints:{"lines[].say":`the literal words to say for this line — one sentence or beat at a time`,"lines[].beat":`a short delivery/timing note, e.g. "pause here", "slow down", or "~15s"`,totalTime:`honest overall length, e.g. "~90s" — never invented precision`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={lifeline:{blurb:`A calm crisis-support surface: a warm opener, REAL verified helplines (region-appropriate) made prominent and tappable, an honest note that Mavéa is not a substitute for a person, and an optional grounding offer. Mavéa leads with this on an acute self-harm / abuse / emergency turn — never a chart or a reflection.`,optional:[`title`,`message`,`safetyQuestion`,`grounding`,`reassurance`],itemShapes:[{prop:`resources`,text:`name`,textAliases:[`service`,`line`,`label`]}],propHints:{"resources[].contact":`how to reach them, e.g. "Call or text 988"`,"resources[].href":`a tel: or sms: link, e.g. "tel:988" or "sms:741741"`,message:`a warm, validating opener for the user's situation — never clinical or alarming`,resources:`REAL, verified crisis helplines for the user's region — never invented numbers`}},proscons:{blurb:`A decision weighed as two opposing columns — PROS vs CONS — with weight indicators and an optional verdict tally. Never for a neutral side-by-side feature comparison — use compare or datatable.`,optional:[`icon`,`iconColor`,`prosLabel`,`consLabel`,`verdict`,`footer`],itemShapes:[{prop:`pros`,text:`text`,textAliases:[`label`,`name`,`title`]},{prop:`cons`,text:`text`,textAliases:[`label`,`name`,`title`]}]},takeaways:{blurb:`Numbered key takeaway list with optional detail per item; click to mark done.`,optional:[`icon`,`iconColor`,`heading`,`footer`],itemShapes:[{prop:`items`,text:`text`,textAliases:[`label`,`name`,`title`,`point`]}]},faq:{blurb:`Accordion of Q&A pairs; click to expand/collapse, optionally multi-open.`,optional:[`icon`,`iconColor`,`defaultOpen`,`multi`,`footer`],itemShapes:[{prop:`items`,text:`q`,textAliases:[`question`,`title`,`label`]}]},tabs:{blurb:`Tabbed panel switcher with labeled tabs, optional icons and count badges.`,optional:[`icon`,`iconColor`,`defaultTab`,`accent`,`footer`],itemShapes:[{prop:`tabs`,text:`label`,textAliases:[`name`,`title`,`text`]}]},divider:{blurb:`Section divider with heading, optional eyebrow, count badge, and jump chips.`,optional:[`icon`,`iconColor`,`eyebrow`,`sub`,`badge`,`badgeColor`,`chips`,`footer`],itemShapes:[{prop:`chips`,text:`label`,textAliases:[`name`,`text`,`title`]}]},pullquote:{blurb:`Large attributed quote with tone accent bar; cycle through variant quotes.`,optional:[`icon`,`iconColor`,`author`,`role`,`tone`,`variants`,`footer`],itemShapes:[{prop:`variants`,text:`quote`,textAliases:[`text`,`quote`,`body`]}],propHints:{tone:`'info'|'success'|'warn'|'danger'|'neutral'`}},storystrip:{blurb:`Sequential narrative panels (comic-strip style); stepper advances through story.`,optional:[`icon`,`iconColor`,`start`,`footer`],itemShapes:[{prop:`panels`,text:`heading`,textAliases:[`title`,`label`,`name`]}]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={casestudy:{blurb:`Case study with setup→action→result→lesson sections; expand each to drill in.`,optional:[`icon`,`iconColor`,`defaultStage`,`footer`],propHints:{defaultStage:`'setup'|'action'|'result'|'lesson'`}},deflist:{blurb:`Definition/glossary list with live search box to filter terms.`,optional:[`icon`,`iconColor`,`placeholder`,`footer`],itemShapes:[{prop:`items`,text:`term`,textAliases:[`label`,`name`,`title`,`word`]}]},accordion:{blurb:`Expandable content sections; click to open and close each one.`,optional:[`icon`,`iconColor`,`defaultOpen`,`multi`,`footer`],itemShapes:[{prop:`sections`,text:`label`,textAliases:[`title`,`name`,`heading`]}]},scansionmark:{blurb:`Poetry scansion / prosody markup — stress marks (´/˘) above each syllable, foot-divider bars, rhyme letters in the margin under a named meter.`,optional:[`title`,`icon`,`iconColor`,`meter`,`caption`,`footer`],propHints:{meter:`the named metre, e.g. 'iambic pentameter' | 'trochaic tetrameter'`,"lines[].syllables[].stress":`'stressed'|'unstressed'`,"lines[].feet":`syllable indices where a foot boundary falls, e.g. [2,4,6,8]`,"lines[].rhyme":`the rhyme-scheme letter, e.g. 'a' | 'b'`}},typespec:{blurb:`Typography specimen / type-scale sheet — each role rendered at its real size beside spec chips (typeface, weight, size, line-height, tracking), plus an optional font-pairing showcase.`,optional:[`title`,`icon`,`iconColor`,`pairing`,`caption`,`footer`],itemShapes:[{prop:`styles`,text:`name`,textAliases:[`role`,`label`,`title`]}],propHints:{"styles[].sizePx":`the font size in px the row renders at, e.g. 40 (display) down to 12 (caption)`,"styles[].weight":`CSS font-weight, e.g. 400 | 600 | 700`,"styles[].tracking":`letter-spacing as a CSS length, e.g. '-0.02em'`,pairing:`{ heading, body } — two font-family names to showcase together`}},shotlist:{blurb:`Film / video shot breakdown — one row per shot with a framed thumbnail showing the shot size, plus movement / lens / duration and the action + dialogue line.`,optional:[`title`,`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`shots`,text:`action`,textAliases:[`description`,`desc`,`text`]}],propHints:{"shots[].n":`the shot number, in sequence`,"shots[].size":`'WS'|'MS'|'CU'|'ECU'|'OTS' (wide / medium / close-up / extreme close-up / over-the-shoulder)`,"shots[].movement":`camera move, e.g. 'Slow push-in' | 'Static' | 'Handheld pan'`,"shots[].lens":`the lens, e.g. '24mm' | '85mm'`,"shots[].duration":`on-screen length, e.g. '4s'`}},beatsheet:{blurb:`Narrative-structure beat sheet — beats laid along the story with name, position, and a one-liner, under an optional dramatic-tension curve.`,optional:[`title`,`icon`,`iconColor`,`framework`,`tension`,`caption`,`footer`],itemShapes:[{prop:`beats`,text:`name`,textAliases:[`beat`,`label`,`title`]}],propHints:{framework:`the structure model, e.g. 'Save the Cat' | '3-act' | 'hero journey'`,"beats[].at":`where the beat falls — a page or percent, e.g. '12' | '50%' | 'p.45'`,"beats[].line":`a one-line description of the beat`,tension:`one number per beat (any scale) — plotted as the tension curve, e.g. [1,2,3,5,4,6,8,5]`}},promptset:{blurb:`A calm, low-chrome set of open reflection / journaling prompts — each an open question with a gentle one-line guidance, grouped under an optional theme. An invitation to think, not a checklist or a quiz (no checkboxes, no scores). For gratitude, evening wind-down, or working through a feeling on paper.`,optional:[`title`,`icon`,`iconColor`,`theme`,`caption`,`footer`],itemShapes:[{prop:`prompts`,text:`question`,textAliases:[`prompt`,`q`,`text`]}],propHints:{theme:`an optional theme the prompts gather under, e.g. 'Evening wind-down'`,"prompts[].question":`the open question to sit with — never yes/no, never a task`,"prompts[].guidance":`a gentle line on how to approach it, e.g. 'no need to be profound'`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={zoneladder:{blurb:`A training intensity-zone ladder — stacked bands from Zone 1 (easy, bottom) to the hardest (top) on a cool→hot ramp, each with its range, felt-effort, and what it trains, plus a computed "you are here" marker on the current zone. For explaining HR / pace / RPE zones.`,optional:[`title`,`icon`,`iconColor`,`metric`,`current`,`caption`,`footer`],itemShapes:[{prop:`zones`,text:`name`,textAliases:[`zone`,`label`]}],propHints:{metric:`'HR'|'pace'|'RPE' — what the ranges are measured in`,"zones[].range":`the measured range for the metric, e.g. '133–151 bpm' | '5:30–6:00 /km' | 'RPE 4–5'`,"zones[].effort":`the felt effort, e.g. 'Comfortable, can hold a conversation'`,"zones[].purpose":`what training in this zone builds, e.g. 'Aerobic base & fat metabolism'`,current:`0-based index of the zone the athlete is currently in (drives the marker)`}},picturesequence:{blurb:`An order-the-events picture strip — 3–6 illustrated panels left→right with first / then / next / last markers and arrows between them, each a small placeholder with a caption. For early-language sequencing and simple how-to steps; the marker word is derived from position when omitted.`,optional:[`title`,`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`panels`,text:`label`,textAliases:[`step`,`text`,`title`]}],propHints:{"panels[].label":`the short step label, e.g. 'Get the bread'`,"panels[].marker":`'first'|'then'|'next'|'last' — derived from position if omitted`,"panels[].caption":`an optional one-line caption under the panel`}},storyarc:{blurb:`Renders a named narrative framework as its canonical visual shape with labeled stages and optional beat pins: Freytag pyramid (exposition→rising→climax→falling→dénouement), three-act, Hero's Journey (12 stages), Save the Cat (15 beats). Supplied beats are pinned to their stage.`,optional:[`title`,`icon`,`iconColor`,`beats`,`caption`,`footer`],propHints:{framework:`"freytag" | "threeact" | "herojourney" | "savethecat"`,"beats[].stage":`stage name matching a canonical stage in the chosen framework`,"beats[].label":`short label for this beat pin (a scene title, plot event, etc.)`,"beats[].note":`optional one-line note about this beat`}},devicemark:{blurb:`A text passage with rhetorical/literary device spans highlighted and colour-coded by device class (metaphor, simile, alliteration, irony, anaphora, hyperbole, personification, allusion, parallelism, antithesis, oxymoron, …), with a legend. Use for AP-English/IB analysis, debate rhetoric, speechwriting tuition.`,optional:[`title`,`icon`,`iconColor`,`caption`,`footer`],propHints:{text:`the full passage text to annotate`,"marks[].phrase":`exact phrase in the passage to highlight (case-insensitive match)`,"marks[].device":`"metaphor"|"simile"|"alliteration"|"irony"|"anaphora"|"hyperbole"|"personification"|"allusion"|"parallelism"|"antithesis"|"oxymoron"|"repetition"|"chiasmus"|"assonance"|"other"`,"marks[].note":`optional explanation of why this phrase exemplifies the device`}},thoughtrecord:{blurb:`A full CBT thought record: the triggering situation, the automatic thought and how it felt, evidence weighed for and against it, then the balanced thought and how the feeling shifted. For working through ONE stuck thought step by step; reframecard is the lighter single-shift version with no evidence-weighing, and proscons weighs a decision, not a belief.`,optional:[`title`,`icon`,`iconColor`,`emotionIntensity`,`evidenceFor`,`evidenceAgainst`,`alternativeThought`,`outcomeEmotion`,`outcomeIntensity`,`footer`],propHints:{situation:`the trigger, in plain words — where/when the thought showed up`,automaticThought:`the thought as close to verbatim as possible`,emotion:`the felt emotion in one or two words, e.g. "Anxious", "Ashamed"`,emotionIntensity:`0–100, how strong it felt at the time (the standard CBT scale)`,evidenceFor:`a few facts that seem to support the automatic thought`,evidenceAgainst:`a few facts that complicate or contradict it`,alternativeThought:`the balanced thought that weighs both columns honestly`,outcomeEmotion:"the emotion after weighing the evidence, if it shifted from `emotion`",outcomeIntensity:`0–100, the intensity after the reframe`}},equationblock:{blurb:`Rendered math equation (LaTeX or MathML) with an optional caption.`,optional:[`icon`,`iconColor`,`tex`,`number`,`caption`,`inline`,`footer`],propHints:{math:`a LaTeX string is preferred for anything beyond a single symbol — e.g. "\\\\frac{a}{b}", "\\\\int_0^1 x^2\\\\,dx", or a matrix "\\\\begin{bmatrix}1&0\\\\\\\\0&1\\\\end{bmatrix}". A declarative MathNode tree ({t:"frac",num:"a",den:"b"}) also works.`,tex:"optional explicit LaTeX string (same effect as putting LaTeX in `math`); wins if both set"}},numberline:{blurb:`Horizontal number line with marked points, ranges, and directional arrows.`,optional:[`icon`,`iconColor`,`step`,`unit`,`points`,`intervals`,`footer`],itemShapes:[{prop:`points`,text:`label`,textAliases:[`name`,`text`,`annotation`]}],propHints:{"points[].open":`true for an open/excluded endpoint (hollow dot)`}},workedexample:{blurb:`Numbered steps walking through a solved problem, each with formula, value, and explanation.`,optional:[`icon`,`iconColor`,`problem`,`result`,`progressive`,`footer`],itemShapes:[{prop:`steps`,text:`label`,textAliases:[`title`,`heading`,`name`]}],propHints:{"steps[].math":`optional MathNode tree for the expression at this step`,"steps[].why":`plain-English explanation (HTML)`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={quiz:{blurb:`Interactive multiple-choice question with selectable options and optional explanation.`,optional:[`icon`,`iconColor`,`explanation`,`footer`],itemShapes:[{prop:`options`,text:`text`,textAliases:[`label`,`choice`,`answer`]}],propHints:{"options[].correct":`true on exactly one option`}},flashcard:{blurb:`Flip card: question on the front, answer on the back; works for vocab, facts, formulas.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`cards`,text:`front`,textAliases:[`term`,`question`,`prompt`]}]},molecularstructure:{blurb:`Accurate skeletal molecular structure. Give it a SMILES string and it computes correct 2-D geometry (atoms, bonds, formula) — the right way to show any real molecule or drug.`,optional:[`icon`,`iconColor`,`smiles`,`atoms`,`bonds`,`formula`,`footer`],itemShapes:[{prop:`atoms`,text:`el`,textAliases:[`element`,`symbol`,`label`]}],propHints:{smiles:`PREFERRED. The compound as a SMILES string (e.g. aspirin = "CC(=O)Oc1ccccc1C(=O)O", caffeine = "Cn1cnc2c1c(=O)n(C)c(=O)n2C"). The component computes the exact 2-D structure and formula from it — supply this for ANY real molecule rather than placing atoms yourself.`,atoms:"Only for a tiny hand-authored example when no SMILES applies; otherwise use `smiles`. Each atom: { el, x (0..100), y (0..100), implicit?: true for a bare carbon vertex }.","bonds[].order":`1 (single), 2 (double), or 3 (triple)`}},periodictable:{blurb:`Full 118-element periodic table with element cells highlighted or focused by category or property.`,optional:[`icon`,`iconColor`,`categories`,`footer`],itemShapes:[{prop:`elements`,text:`name`,textAliases:[`symbol`,`element`,`label`]}],propHints:{"elements[].z":`atomic number (also drives canonical grid placement)`,"elements[].on":`true to emphasise/highlight this element`}},bodymap:{blurb:`Human body figure with named regions highlighted — anatomy, injury, muscle groups, health focus areas. Front or back view; omit regions for a fully-labelled body.`,optional:[`icon`,`iconColor`,`regions`,`side`,`footer`],itemShapes:[{prop:`regions`,text:`label`,textAliases:[`name`,`area`,`region`]}],propHints:{"regions[].id":`front: 'head'|'neck'|'leftShoulder'|'rightShoulder'|'chest'|'abdomen'|'hips'|'leftUpperArm'|'rightUpperArm'|'leftForearm'|'rightForearm'|'leftHand'|'rightHand'|'leftThigh'|'rightThigh'|'leftKnee'|'rightKnee'|'leftShin'|'rightShin'|'leftFoot'|'rightFoot'; back (side:'posterior') adds 'upperBack'|'lowerBack'|'glutes'|'leftHamstring'|'rightHamstring'|'leftCalf'|'rightCalf'; coarse: 'leftArm'|'rightArm'|'leftLeg'|'rightLeg'|'torso'`,side:`'anterior' (front) | 'posterior' (back)`}},geometrycanvas:{blurb:`A 2-D Cartesian canvas for geometry and math: points, line segments, polygons, circles, labeled vectors (arrows), and angle markers. Auto-fits the axis range from the data.`,optional:[`icon`,`iconColor`,`xRange`,`yRange`,`xLabel`,`yLabel`,`showGrid`,`points`,`segments`,`polygons`,`circles`,`vectors`,`angles`,`annotations`,`footer`],propHints:{"points[].x":`x-coordinate in data units`,"points[].y":`y-coordinate in data units`,"segments[].extend":`'none' (a plain segment), 'ray' (extend from x2,y2 outward), or 'line' (extend both ways)`,"vectors[].dx":`horizontal component — (x+dx, y+dy) is the tip of the arrow`,"vectors[].dy":`vertical component (positive = up)`,"angles[].rightAngle":`true to draw a square corner marker instead of an arc`,xRange:`auto-computed from data when omitted; supply to override, e.g. [-3, 3]`,yRange:`auto-computed from data when omitted`}},freebodydiagram:{blurb:`A physics free-body diagram: a labeled object with named force arrows radiating from it at specified angles and optional magnitudes.`,optional:[`icon`,`iconColor`,`object`,`footer`],itemShapes:[{prop:`forces`,text:`label`,textAliases:[`name`,`force`,`description`]}],propHints:{"forces[].angle":`degrees CCW from the right: 0=→, 90=↑, 180=←, 270=↓. Use 90 for normal force (up), 270 for gravity (down).`,"forces[].magnitude":`optional magnitude in Newtons, shown in parentheses on the label`,object:`label on the central box, e.g. "Block", "Car", "Person"`}},musicstaff:{blurb:`A 5-line music staff with notes: treble or bass clef, note heads, stems, flags, accidentals (♯ ♭), ledger lines, time signature, and optional tempo. Use for music theory, scales, melodies.`,optional:[`icon`,`iconColor`,`clef`,`timeSignature`,`tempo`,`footer`],itemShapes:[{prop:`notes`,text:`pitch`,textAliases:[`note`,`name`]}],propHints:{"notes[].pitch":`Scientific notation: letter + optional accidental + octave. E.g. "C4" (middle C), "G4", "F#4", "Bb3". Treble clef comfortable range: C4–F5; bass clef: E2–A3.`,"notes[].duration":`"whole" | "half" | "quarter" | "eighth". Default "quarter".`,clef:`"treble" (default) or "bass"`,timeSignature:`e.g. "4/4", "3/4", "6/8"`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={vectorspace:{blurb:`A linear-algebra vector canvas: 2-D vectors from the origin as colored arrows, optional post-transformation dashed arrows, and optional span shading. For eigenvectors, basis vectors, and linear-transformation topics.`,optional:[`icon`,`iconColor`,`transformed`,`showSpan`,`xRange`,`yRange`,`footer`],itemShapes:[{prop:`vectors`,text:`label`,textAliases:[`name`,`vector`]}],propHints:{"vectors[].x":`tip x-coordinate (tail is always at the origin)`,"vectors[].y":`tip y-coordinate (positive = up)`,transformed:`the same vectors after a linear transformation — shown dashed`,showSpan:`shade the parallelogram spanned by the first two vectors`}},reactionmechanism:{blurb:`A chemistry reaction mechanism: compounds/intermediates connected by reaction arrows with optional conditions (temperature, reagents) above each arrow. Use for SN1/SN2, addition, substitution, and multi-step organic reactions.`,optional:[`icon`,`iconColor`,`reactionType`,`conditions`,`footer`],itemShapes:[{prop:`steps`,text:`label`,textAliases:[`formula`,`compound`,`name`]}],stringItems:[`conditions`],propHints:{"steps[].label":`compound name or formula as HTML — use <sub> for subscripts, e.g. "CH<sub>3</sub>OH"`,"steps[].tag":`role label: "reactant", "intermediate", or "product"`,"steps[].color":`use "var(--warning)" for unstable intermediates`,conditions:`array of condition strings, one per arrow: ["NaOH, H₂O", "Δ, 2h"]`,reactionType:`reaction class shown as a badge, e.g. "SN2", "Aldol", "E2"`}},chorddiagram:{blurb:`A guitar/ukulele chord diagram — fretboard grid with finger positions, open/muted markers, and optional note names. Use for any "how do I play X chord" or music theory ask.`,optional:[`icon`,`iconColor`,`fingers`,`capoFret`,`notes`,`instrument`,`footer`],stringItems:[`notes`],propHints:{frets:`array of 6 (guitar) or 4 (ukulele) values: 0=open, "x"=muted, 1–12=fret number`,instrument:`"Guitar"|"Ukulele"|"Bass"`}},developmentmilestone:{blurb:`Child developmental milestones by age and domain (motor, language, social, cognitive). Use for parenting, pediatric, or child development asks.`,optional:[`icon`,`iconColor`,`footer`],propHints:{"domains[].domain":`"motor"|"language"|"social"|"cognitive"`}},teachdiagram:{blurb:`An animated step-by-step figure that builds up on screen — geometry proofs, free-body diagrams, anatomy, circuits, chemical structures: any concept with REAL spatial geometry, understood by watching it get assembled stroke by stroke. Each step adds vector shapes + labels and auto-plays paced to speaking time. Never for an abstract business/process sequence with no literal shape to draw — a funding lifecycle, a hiring pipeline, a sales funnel — the model ends up inventing meaningless disconnected lines; use processflow, journeymap, or milestones.`,optional:[`icon`,`iconColor`,`baseShapes`,`baseLabels`,`ratio`,`footer`],propHints:{"steps[].add":`array of DiagShape: {kind:"circle"|"rect"|"line"|"polygon"|"path", coords per kind, color?:"var(--presence)|var(--insight)|var(--warning)|var(--text-muted)", fill?, arrow?}`,"steps[].labels":`optional callout labels: [{x, y, text, side:"left"|"right"|"top"|"bottom"}]`}},gridmatrix:{blurb:`A 2-D grid table with optional row/column headers. Supports Punnett squares, truth tables, multiplication tables, ten-frames, or a general labeled matrix.`,optional:[`icon`,`iconColor`,`variant`,`rowHeaders`,`colHeaders`,`highlight`,`note`,`footer`],stringItems:[`rowHeaders`,`colHeaders`],propHints:{variant:`"punnett" | "truth" | "multiplication" | "tenframe" | "grid"`,cells:`2-D array of cell values, e.g. [["TT","Tt"],["Tt","tt"]]`,highlight:`array of [rowIndex, colIndex] to accent`}},fractionbar:{blurb:`Segmented fraction bars (with optional pies) for one or more fractions. Ideal for teaching fractions, probability, ratios, and part-whole relationships.`,optional:[`icon`,`iconColor`,`showPie`,`note`,`footer`],propHints:{"fractions[].numerator":`filled segments`,"fractions[].denominator":`total segments`,"fractions[].label":`row label, e.g. "Class A" or "3/8 chance"`}},wave:{blurb:`A labelled sine wave for physics, sound, and signals: one or two sine waves over an equilibrium axis with measurement annotations — wavelength (λ, crest-to-crest), amplitude (A, centre-to-crest), and an optional period (T) marker. Computes the curve from amplitude, wavelength, and phase. Use for waves/oscillations, NOT an audio player.`,optional:[`icon`,`iconColor`,`xUnit`,`showWavelength`,`showAmplitude`,`showPeriod`,`footer`],itemShapes:[{prop:`waves`,text:`label`,textAliases:[`name`,`wave`]}],propHints:{"waves[].amplitude":`peak displacement from the centre line (y-axis units)`,"waves[].wavelength":`distance over which the wave repeats, crest to crest (must be > 0)`,"waves[].phase":`phase shift in RADIANS (horizontal shift); default 0`,xUnit:`horizontal-axis label, e.g. "x (m)", "time (ms)", "distance"`,showPeriod:`true to mark the period T along the axis — use when the x-axis is time`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={energydiagram:{blurb:`A reaction-coordinate energy-profile diagram: energy vs reaction progress, a curve from reactants over the transition-state peak(s) to products, with the activation energy (Ea) and overall ΔH computed and marked with labelled arrows. Use for reaction kinetics/thermodynamics (endo/exothermic, catalysis lowering Ea) and multi-step mechanisms with intermediate wells.`,optional:[`icon`,`iconColor`,`steps`,`reactants`,`ts`,`products`,`reactantLabel`,`tsLabel`,`productLabel`,`yLabel`,`yUnit`,`xLabel`,`showEa`,`showDelta`,`footer`],itemShapes:[{prop:`steps`,text:`label`,textAliases:[`name`,`stage`]}],propHints:{"steps[].energy":`energy of this point on the y-axis, in the chosen unit (e.g. kJ/mol)`,"steps[].kind":`'reactant' | 'ts' (a transition-state peak) | 'intermediate' (a well between peaks) | 'product'`,reactants:"endpoint form: reactant energy (used when `steps` is omitted)",ts:`endpoint form: transition-state (peak) energy; omit for a barrierless profile`,products:`endpoint form: product energy`,yUnit:`energy unit, e.g. "kJ/mol" or "eV" — shown on the axis and the Ea/ΔH readouts`,showEa:`draw the activation-energy arrow (reactant level → first peak). Default true`,showDelta:`draw the ΔH arrow (reactant level → product level). Default true`}},phylotree:{blurb:`A phylogenetic / evolutionary tree (cladogram): taxa at the tips, branches joining at shared common ancestors, read left to right. Computes a tidy layout from a nested {name, children} tree — tips evenly spaced, ancestors at branch points. Optional clade brackets and trait marks. For evolution, taxonomy, "how are these species related".`,optional:[`icon`,`iconColor`,`clades`,`traits`,`distanceLabel`,`footer`],itemShapes:[{prop:`clades`,text:`label`},{prop:`traits`,text:`label`}],propHints:{root:`A nested tree: { name?, children?: [...] }. A node with no children is a tip (a species). Internal nodes are common ancestors and usually have no name.`,"root.children[].length":`optional branch length (time or substitutions). Supplying lengths anywhere draws a scaled phylogram with a distance axis; omit everywhere for a plain cladogram (topology only).`,"root.children[].support":`optional branch support, e.g. a bootstrap percentage, drawn at the node`,"clades[].tips":`array of tip names (must match name in the tree) the bracket groups`,"traits[].on":`the tip or ancestor name whose incoming branch the trait mark sits on`,distanceLabel:`axis label for a phylogram, e.g. "Millions of years ago" — only shown with branch lengths`}},parsetree:{blurb:`A sentence syntax / constituency parse tree for grammar: the literal words at the leaves, phrase nodes (S, NP, VP, PP, …) above joining down to them, drawn top-down with a tidy auto-computed layout. Use for grammar lessons, sentence diagramming, and any constituency/expression tree.`,optional:[`icon`,`iconColor`,`colorPos`,`sentence`,`footer`],propHints:{"root.label":`the constituent tag, e.g. 'S' for the whole sentence`,"root.children":"nested constituents; a phrase has its own children, a word leaf has a `word` instead","children[].word":"the literal word at a leaf; when set, `label` is the part-of-speech tag drawn above it (e.g. { label: 'N', word: 'fox' })",colorPos:`true to colour the part-of-speech leaves instead of muting them`,sentence:`optional plain-text sentence shown above the tree for context`}},celldiagram:{blurb:`A labelled schematic biological cell: membrane outline with organelles (nucleus, mitochondria, ER, Golgi, ribosomes…), each a recognisable glyph with a leader line to its label. Animal or plant (plant adds cell wall, chloroplast, vacuole). List which organelles to show + highlight — the component owns the layout. Pick it for cell-biology explainers.`,optional:[`icon`,`iconColor`,`cellType`,`parts`,`footer`],itemShapes:[{prop:`parts`,text:`key`,textAliases:[`name`,`organelle`]}],propHints:{cellType:`'animal' (default) | 'plant' (adds the cell wall, chloroplast, and central vacuole)`,"parts[].key":`the organelle to draw: 'nucleus'|'nucleolus'|'mitochondria'|'er'|'golgi'|'ribosomes'|'vacuole'|'cytoplasm'|'membrane'; animal-only: 'lysosome'|'centrosome'; plant-only: 'chloroplast'|'cell wall'. Synonyms like 'ribosome','rough ER','central vacuole','plasma membrane' resolve too. Organelles that don't fit the cellType are skipped.`,"parts[].highlight":`true to emphasise this organelle (its glyph + label take the accent colour)`,"parts[].note":`a short fact shown beside the cell in the legend`,"parts[].color":`highlight colour, e.g. var(--presence) | var(--insight) | var(--warning)`}},raydiagram:{blurb:`An optics ray diagram: a lens (convex/concave) or mirror (concave/convex) on a principal axis with an object arrow, the standard construction rays, marked focal points F, and the image it forms. The thin-lens/mirror equation is solved from the data, so image position, size and nature (real/virtual, upright/inverted) are computed correctly. Pick it for image formation, magnifiers, focal length, and magnification questions.`,optional:[`icon`,`iconColor`,`element`,`objectHeight`,`footer`],propHints:{element:`'convex-lens' (converging) | 'concave-lens' (diverging) | 'concave-mirror' (converging) | 'convex-mirror' (diverging). Default 'convex-lens'.`,objectDistance:`distance from the element in axis units (object is drawn to the left), e.g. 30`,focalLength:`focal length magnitude in the same units, e.g. 10 — the type sets its sign`,objectHeight:`object arrow height in axis units (default 1); only its ratio to the image matters`}},vectorfield:{blurb:`A 2-D vector / slope field on a lattice: a short glyph at each sampled grid point showing the field direction (and magnitude by colour/length) — arrows for a vector field {x,y,u,v}, headless tangent dashes for a slope field {x,y,slope}. Overlay solution curves / streamlines. Glyph lengths are normalised from the lattice spacing; axes auto-fit. Pick it for differential-equation slope fields, gradient (∇f) fields, and physics E/B/gravitational/fluid-flow fields.`,optional:[`icon`,`iconColor`,`curves`,`xRange`,`yRange`,`xLabel`,`yLabel`,`mode`,`normalize`,`colorByMagnitude`,`footer`],itemShapes:[{prop:`curves`,text:`label`,textAliases:[`name`,`curve`]}],propHints:{"samples[].x":`sample location, x in data units (best on a regular grid of points)`,"samples[].y":`sample location, y in data units`,"samples[].u":`vector field: horizontal component at (x,y); positive = right`,"samples[].v":`vector field: vertical component at (x,y); positive = up`,"samples[].slope":`slope field: tangent dy/dx at (x,y), drawn as a headless dash — use for y'=f(x,y) ODEs (give EITHER u,v OR slope, not both)`,"curves[].points":`a solution curve / streamline as an ordered array of {x,y} points`,mode:`'vector' (arrows from u,v) | 'slope' (dashes from slope). Auto-detected when omitted.`,normalize:`true (default) draws every arrow the same length (direction-only); false scales length by magnitude`,colorByMagnitude:`true (default) ramps glyph colour from low to high field magnitude`,xRange:`auto-fit from the data when omitted; supply to override, e.g. [-2, 2]`,yRange:`auto-fit from the data when omitted`}},pedigree:{blurb:`A genetics pedigree chart for tracing inheritance: squares = male, circles = female, diamonds = unknown sex; a filled symbol is affected, a centre dot marks an unaffected carrier. People are linked by mating lines and descend to their children through a sibship bar. Generation rows (I, II, III…) and child centring are computed from the parent graph. Pick it for autosomal / X-linked inheritance, genetic counseling, "trace the trait through the family".`,optional:[`icon`,`iconColor`,`affectedLabel`,`carrierLabel`,`showLegend`,`footer`],itemShapes:[{prop:`people`,text:`label`,textAliases:[`name`,`id`]}],propHints:{"people[].id":`a stable unique id, referenced by other people's parents/partner`,"people[].sex":`'male' (square) | 'female' (circle) | 'unknown' (diamond)`,"people[].affected":`true to fill the symbol (the person expresses the trait)`,"people[].carrier":`true to draw a centre dot (unaffected carrier); ignored when affected`,"people[].deceased":`true to draw a diagonal slash through the symbol`,"people[].proband":`true to mark the index case with a small arrow`,"people[].parents":`the two parents as [motherId, fatherId] (ids in this same people array); omit for founders`,"people[].partner":`id of a partner with no shared child of record — draws a bare mating line (a married-in spouse)`,"people[].gen":`optional 0-based generation row; usually inferred from parents, set only to pin a founder`,"people[].label":`short identifier under the symbol, e.g. "II-3" or "Maria"`,"people[].genotype":`optional genotype under the name, e.g. "Aa", "XAY"`,affectedLabel:`legend wording for the filled symbol (default "Affected")`,carrierLabel:`legend wording for the centre-dot symbol (default "Carrier")`,showLegend:`false to hide the symbol-key legend (default true)`}},bohrmodel:{blurb:`A Bohr model of an atom: a central nucleus showing the proton (and neutron) count, ringed by concentric electron shells, each carrying exactly the given number of electrons drawn as evenly-spaced dots. Ring radii and dot placement are computed from the data; the element, per-shell occupancy, mass number and any net charge are labelled. For atomic structure and electron-configuration intros — "draw the Bohr model of sodium", "show oxygen’s shells".`,optional:[`icon`,`iconColor`,`neutrons`,`symbol`,`name`,`footer`],propHints:{protons:`number of protons = the atomic number (e.g. 11 for sodium)`,neutrons:`number of neutrons; omit if unknown. mass number = protons + neutrons`,shells:`electrons per shell, innermost first, e.g. [2,8,1] = sodium, [2,8,8] = argon, [2,4] = carbon. Each ring draws exactly this many dots; their sum is the electron total. For a neutral atom the sum equals protons; a mismatch is rendered as an ion charge.`,symbol:`element symbol shown above the atom, e.g. "Na", "O", "C"`,name:`element name shown beneath the atom, e.g. "Sodium"`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={equationbalancer:{blurb:`A chemical-equation balancer: reactants → products as coefficient·formula (digits subscripted) with a per-element atom-conservation tally (matched rows read insight, mismatched read danger) and a balanced/not-balanced badge. Use for combustion, stoichiometry, conservation of mass.`,optional:[`icon`,`iconColor`,`elementTally`,`balanced`,`caption`,`footer`],itemShapes:[{prop:`reactants`,text:`formula`,textAliases:[`compound`,`species`,`name`]},{prop:`products`,text:`formula`,textAliases:[`compound`,`species`,`name`]},{prop:`elementTally`,text:`element`,textAliases:[`symbol`,`atom`]}],propHints:{"reactants[].formula":`chemical formula WITHOUT subscript markup, e.g. "CH4", "O2", "H2O" — the digits are lowered to subscripts automatically. A trailing charge is written like "SO4^2-" or "Na^+".`,"reactants[].coeff":`stoichiometric coefficient (integer ≥ 1); a leading 1 is hidden`,"products[].coeff":`stoichiometric coefficient (integer ≥ 1)`,"elementTally[].left":`total atoms of this element on the REACTANT (left) side`,"elementTally[].right":`total atoms of this element on the PRODUCT (right) side`,balanced:`optional; derived from the tally (all left===right) when omitted`}},yieldcalc:{blurb:`A stoichiometry / percent-yield calculator: a headline percent-yield readout (actual ÷ theoretical × 100, computed client-side from the real numbers given) with an optional reagent-moles reference table, the limiting reagent badged. With no yield numbers it still shows the reaction and limiting reagent — never a fabricated percent. Use for percent-yield problems, limiting-reagent identification, and stoichiometry.`,optional:[`icon`,`iconColor`,`reaction`,`limitingReagent`,`molesAvailable`,`theoreticalYield`,`actualYield`,`unit`,`footer`],itemShapes:[{prop:`molesAvailable`,text:`reagent`,textAliases:[`compound`,`species`,`name`]}],propHints:{reaction:`the balanced equation as typed, e.g. "2 H2 + O2 -> 2 H2O"; shown verbatim`,limitingReagent:`name/formula of the limiting reagent, matched to a molesAvailable row`,"molesAvailable[].reagent":`chemical formula or name, e.g. "H2", "O2"`,"molesAvailable[].moles":`moles on hand of this reagent`,theoreticalYield:"the maximum possible yield from stoichiometry, in `unit`",actualYield:"the yield actually obtained, in `unit` — percent yield needs BOTH figures",unit:`unit for the yield figures, e.g. "g", "mol" (default "g")`}},vseprmolecule:{blurb:`A 3-D molecular-geometry (VSEPR) figure: a central atom with bonds drawn to its substituents at the geometry implied by the shape (wedge/dash bonds for depth), lone pairs as dot-pairs, and the shape name + ideal bond angle. For molecular shape and bond-angle questions.`,optional:[`icon`,`iconColor`,`lonePairs`,`shape`,`bondAngle`,`caption`,`footer`],itemShapes:[{prop:`bonds`,text:`atom`,textAliases:[`element`,`symbol`,`name`]}],propHints:{central:`central-atom symbol, e.g. "O", "C", "N", "S"`,"bonds[].atom":`bonded-atom symbol, e.g. "H", "Cl", "O"`,"bonds[].order":`1 (single, default), 2 (double), or 3 (triple)`,lonePairs:`number of lone pairs on the central atom (drawn as dot-pairs)`,shape:`VSEPR geometry: 'linear' | 'trigonal' | 'tetrahedral' | 'bent' | 'pyramidal' | 'octahedral'. Inferred from the bond + lone-pair count when omitted.`,bondAngle:`ideal bond angle label, e.g. "104.5°", "109.5°", "120°", "180°"`}},unitcircle:{blurb:`A trigonometry unit circle: the swept angle arc, the terminal radius to (cosθ, sinθ), the dropped reference triangle (sin/cos legs), the angle in degrees AND radians, and the exact coordinate — all computed from one angle. For trig fundamentals and reference angles.`,optional:[`icon`,`iconColor`,`showSpecial`,`caption`,`footer`],propHints:{angleDeg:`the angle in DEGREES, measured counter-clockwise from the +x axis (e.g. 30, 45, 135, 210). Radians, cosθ, sinθ and the point are all computed from it.`,showSpecial:`true (default) to tick the standard angles (0/30/45/60/90…) around the rim`}},solidfigure:{blurb:`A 3-D solid in oblique projection (front face + depth offset) with dashed hidden edges, optional labelled vertex/edge/face counts (with an Euler V−E+F check), and surface-area / volume call-outs. For solid geometry, surface area & volume, and Euler-formula lessons.`,optional:[`icon`,`iconColor`,`dims`,`labels`,`surfaceArea`,`volume`,`caption`,`footer`],propHints:{solid:`which solid to draw: 'cube' | 'rectprism' | 'cylinder' | 'cone' | 'sphere' | 'pyramid' | 'prism'`,dims:`relative proportions only (shape the drawing, not measured to scale): { w?, h?, d?, r? }`,labels:`counts shown as chips: { v?: vertices, e?: edges, f?: faces }`,surfaceArea:`computed surface-area read-out WITH unit, e.g. "94 cm²"`,volume:`computed volume read-out WITH unit, e.g. "60 cm³"`}},crosssection:{blurb:`A labelled stratified cross-section: stacked bands sized by thickness (Earth strata, tissue layers, ocean zones) with leader labels and an optional depth axis — or concentric rings (a planet interior) when orientation is "concentric". For geology, anatomy, oceanography.`,optional:[`icon`,`iconColor`,`orientation`,`depthUnit`,`caption`,`footer`],itemShapes:[{prop:`layers`,text:`name`,textAliases:[`label`,`layer`,`zone`]}],propHints:{"layers[].thickness":`layer thickness in depthUnit-s (> 0); drives the band’s relative size`,"layers[].color":`design-token tint, e.g. 'var(--warning)' | 'var(--danger)' | 'var(--presence)' | 'var(--insight)'; cycles the accents when omitted`,"layers[].note":`short note shown beside the layer (a depth range or composition)`,orientation:`'horizontal' (default, stacked bands) | 'concentric' (nested rings, e.g. a planet interior)`,depthUnit:`unit on the cumulative depth axis, e.g. "km", "mm", "m"`}},pianokeys:{blurb:`A piano keyboard with a chord, scale, or set of notes lit up — keys coloured by role/finger, with note labels and the chord name. Use for chords, scales, intervals, and "what notes are in X".`,optional:[`title`,`icon`,`iconColor`,`octaves`,`startNote`,`chordName`,`showLabels`,`caption`,`footer`],itemShapes:[{prop:`highlight`,text:`note`,textAliases:[`pitch`,`key`,`name`]}],propHints:{"highlight[].note":`scientific pitch to light up, e.g. "C4", "E4", "G#4", "Bb3" — must fall in the rendered range`,"highlight[].role":`harmonic role: 'root'|'3rd'|'5th'|'7th' — sets the key colour and badge`,"highlight[].finger":`fingering 1–5 shown on the key (used to colour when no role is given)`,startNote:`leftmost key, a natural/white note in scientific pitch, e.g. "C3", "C4"`,octaves:`how many octaves to draw (1–4, default 2)`,chordName:`name shown beside the keyboard, e.g. "Cmaj7", "A minor pentatonic"`}},fretboardmap:{blurb:`A full-neck guitar/bass fretboard map: nut, frets, strings, inlay markers, with coloured dots at string/fret positions (roots emphasised) and interval labels. Use for scales, arpeggios, and chord shapes across the neck.`,optional:[`title`,`icon`,`iconColor`,`strings`,`frets`,`tuning`,`scaleName`,`caption`,`footer`],itemShapes:[{prop:`dots`,text:`label`,textAliases:[`interval`,`note`,`name`]}],stringItems:[`tuning`],propHints:{"dots[].string":"string index, 1 = thickest/lowest string (low E on a guitar) up to `strings`","dots[].fret":"fret number, 0 = open (drawn on the nut) up to `frets`","dots[].label":`interval/note shown on the dot, e.g. "R", "b3", "5", "A"`,"dots[].role":`'root'|'third'|'fifth'|'other' — drives the dot colour; roots are emphasised`,tuning:`open-string notes thickest→thinnest, e.g. ["E","A","D","G","B","E"]`,strings:`number of strings (4–7, default 6)`,frets:`frets drawn from the nut (4–24, default 12)`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={circleoffifths:{blurb:`The circle of fifths: twelve major keys around an outer ring, their relative minors inside, and each key signature on the rim. Highlights the queried key and spokes to related keys (IV/V/relative). Use for key signatures, relative keys, and the IV–I–V relationship.`,optional:[`icon`,`iconColor`,`highlightKey`,`showMinors`,`related`,`caption`,`footer`],stringItems:[`related`],propHints:{highlightKey:`the major key to centre on, e.g. "C", "G", "Bb", "F#"`,related:`other keys to spoke to (its IV, V, and relative minor make sense), e.g. ["C","D","Em"]; minor keys carry an "m" suffix`,showMinors:`draw the relative-minor inner ring (default true)`}},odontogram:{blurb:`A dental chart (odontogram): the upper and lower arches tooth-by-tooth, each numbered per the system and colour-coded by status (caries, filling, crown, missing, implant, root canal), with a legend. Use for charting, treatment plans, and "show me which teeth X".`,optional:[`title`,`icon`,`iconColor`,`system`,`caption`,`footer`],propHints:{"teeth[].n":`tooth number in the chosen system — Universal 1–32 or FDI two-digit (e.g. 11, 26, 36)`,"teeth[].status":`'healthy'|'caries'|'filling'|'crown'|'missing'|'implant'|'rootcanal'`,"teeth[].surface":`affected surface(s), e.g. "MOD", "occlusal", "buccal"`,system:`'universal' (1–32, default) | 'fdi' (two-digit quadrant notation)`}},clockface:{blurb:`An analog teaching clock: a full dial (numerals, hour ticks, minute marks) with the hour, minute and optional second hands computed from the time, an optional digital read-out, and an optional shaded elapsed-time arc. For telling time, elapsed-time problems, and clock reading.`,optional:[`title`,`icon`,`iconColor`,`showSecond`,`second`,`digital`,`elapsedTo`,`caption`,`footer`],propHints:{time:`the time as 'HH:MM' (24h) or 'H:MM', e.g. '3:40' or '15:40' — the hands are computed from it`,showSecond:"true to draw a sweeping second hand (pair with `second`)",second:`seconds past the minute (0–59) for the second hand`,digital:`true to show a 12-hour digital read-out (e.g. 3:40 PM) beneath the dial`,elapsedTo:"a later time as 'HH:MM' — shades the elapsed arc from `time` to here and reads the span"}},moneytray:{blurb:`A coins-and-bills tray: denomination stacks (coins as circles, bills as rectangles) with counts, a running total computed from denom×count, and — in change mode — the gap to a target plus the fewest-tokens suggestion. For counting money, making change, and money-sense lessons.`,optional:[`title`,`icon`,`iconColor`,`currency`,`target`,`mode`,`caption`,`footer`],itemShapes:[{prop:`tokens`,text:`label`,textAliases:[`name`,`denomination`]}],propHints:{"tokens[].denom":`face value of one token in the base unit (0.25 = a quarter, 5 = a $5 bill)`,"tokens[].count":`how many of this denomination sit on the tray`,"tokens[].label":`name under the stack, e.g. "Quarter", "$5" (defaults to the formatted denom)`,currency:`currency symbol prefixed to totals, default '$'`,mode:"'count' (default) tallies the tray; 'change' reads the gap to `target` + a fewest-tokens hint",target:`goal amount in change mode — the gap to here is read out`}},placevaluechart:{blurb:`A base-ten place-value chart: a labelled column per place (thousands/hundreds/tens/ones) showing the digit, its base-ten block glyphs (hundred-flats, ten-rods, unit-cubes), and the expanded form — all computed from one value. For place value, base ten, and expanded-form lessons.`,optional:[`title`,`icon`,`iconColor`,`columns`,`showBlocks`,`expanded`,`caption`,`footer`],propHints:{value:`the whole number to chart — the digits and block glyphs are computed from it`,columns:`which places to show, left→right: any of 'thousands' | 'hundreds' | 'tens' | 'ones' (auto-fits the value when omitted)`,showBlocks:`true (default) to draw the base-ten block glyphs (flats/rods/cubes) under each digit`,expanded:`true (default) to show the expanded form, e.g. 300 + 40 + 7`}},shapecard:{blurb:`An illustrated 2-D/3-D shape gallery: each shape drawn as a clean filled figure (polygons built from their side count, solids in oblique projection) with attribute call-outs (sides/vertices/faces/edges) and a real-world example. For shape recognition and polygon/solid attributes.`,optional:[`title`,`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`shapes`,text:`name`,textAliases:[`shape`,`label`]}],propHints:{"shapes[].kind":`which figure to draw: 'triangle' | 'square' | 'rectangle' | 'pentagon' | 'hexagon' | 'octagon' | 'circle' | 'cube' | 'sphere' | 'cylinder' | 'cone' | 'pyramid'`,"shapes[].sides":`number of sides (2-D) — shown as an attribute chip`,"shapes[].vertices":`number of vertices (corners) — shown as a chip`,"shapes[].faces":`number of faces (3-D) — shown as a chip`,"shapes[].edges":`number of edges (3-D) — shown as a chip`,"shapes[].example":`a real-world example, e.g. "Honeycomb cell", "Dice"`}},letterform:{blurb:`A handwriting letter-formation card: the large letter seated on baseline/midline/cap guidelines with a faint trace ghost, numbered stroke-order indices, and the ordered stroke hints. For handwriting, letter formation, and stroke-order practice.`,optional:[`title`,`icon`,`iconColor`,`case`,`showGuides`,`caption`,`footer`],itemShapes:[{prop:`strokes`,text:`hint`,textAliases:[`text`,`description`]}],propHints:{letter:`the single character to form, e.g. "a", "B"`,case:`'upper' or 'lower' (default) — which form of the letter to draw`,"strokes[].order":`stroke sequence number (1, 2, 3…)`,"strokes[].hint":`what the stroke does, e.g. "Curve left and down", "Straight line down"`,showGuides:`true (default) to draw the baseline / midline / cap-height guidelines`}},toolscale:{blurb:`Reading a measuring instrument: a ruler with fraction ticks, a protractor arc, a caliper jaw, or a thermometer column, with a movable indicator at the value and a read-out — every tick and the indicator computed from value/max. For measurement, fractions of an inch, angles, temperature.`,optional:[`title`,`icon`,`iconColor`,`unit`,`fractional`,`reading`,`caption`,`footer`],propHints:{instrument:`which instrument to draw: 'ruler' | 'protractor' | 'caliper' | 'thermometer'`,value:`the measured value the indicator points to`,max:`full-scale value (the instrument's max reading) — drives tick spacing and the indicator`,unit:`unit shown on the read-out, e.g. 'in', '°', 'mm', '°C'`,fractional:`true to tick the scale in fractions (½ ¼ ⅛) rather than decimals — for an inch ruler`,reading:`override the read-out string, e.g. '2 3/8 in' (computed from value/unit when omitted)`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={craftchart:{blurb:`A gridded craft pattern chart — the literal chart a maker follows stitch by stitch: a rows×cols grid where each filled cell carries a colour and/or a stitch symbol, with numbered stitch/row rulers on the margins and a symbol/colour legend. For cross-stitch, knitting, pixel-art, beading, and weaving charts.`,optional:[`title`,`icon`,`iconColor`,`legend`,`craft`,`caption`,`footer`],itemShapes:[{prop:`legend`,text:`meaning`,textAliases:[`label`,`name`,`description`]}],propHints:{rows:`number of rows in the chart`,cols:`number of columns (stitches per row)`,craft:`re-skins each cell: 'crossstitch' (default) and 'knit' show the stitch glyph, 'pixel' a flat block, 'bead' a round bead, 'weave' a solid square`,"cells[].r":`row index of a filled cell, 0-based top→bottom`,"cells[].c":`column index of a filled cell, 0-based left→right`,"cells[].color":`cell fill — a CSS color or design-token, e.g. 'var(--danger)', 'var(--insight)', '#c0392b' (a thread shade)`,"cells[].symbol":`stitch symbol drawn in the cell, e.g. "×", "♥", "▲", "k", "p"`,"legend[].symbol":`the symbol this key row matches (a cell's symbol)`,"legend[].color":`the colour this key row matches (a cell's color), drawn as a swatch`,"legend[].meaning":`what the symbol/colour means, e.g. 'DMC 321 — red', 'knit', 'purl'`}},areamodel:{blurb:`Proportional-rectangle multiplication model: a rectangle partitioned into sub-rectangles whose area equals the partial product of the corresponding factorA (width) × factorB (height) slice. Partial products are labelled inside each cell; the total appears below. Use for distributive property (23×14 → 20×10 + 20×4 + 3×10 + 3×4), polynomial expansion ((a+b)(c+d)), fraction of a fraction, and area-addition postulate. Custom string labels via labelsA/labelsB let it handle algebra (e.g. "x", "3").`,optional:[`labelsA`,`labelsB`,`showProducts`,`showSum`,`caption`],stringItems:[`labelsA`,`labelsB`],propHints:{factorA:`width-axis decomposition as number[], e.g. [20, 3] for factor 23`,factorB:`height-axis decomposition as number[], e.g. [10, 4] for factor 14`,labelsA:`string labels overriding factorA values (e.g. ["a", "b"] for algebra)`,labelsB:`string labels overriding factorB values`}},gridtransform:{blurb:`Linear transformation visualiser: shows a 2-D Cartesian grid before and after applying a 2×2 matrix transformation, with animated morphing between states. Illustrates shear, rotation, reflection, scaling, and projection. The model supplies the 2×2 matrix (or named transform) and optional sample vectors to track through the transformation. Use for linear algebra (matrix multiplication intuition), computer graphics (basis vectors, coordinate changes), and data augmentation.`,optional:[`showEigens`,`animated`,`caption`],propHints:{matrix:`2×2 transformation matrix as [[a,b],[c,d]] — applied to the unit grid`,showEigens:`draw dashed eigenvector rays through the origin, default true`,animated:`morphs from identity to transformed grid on mount, default true`}},polarplot:{blurb:`Polar coordinate plot: renders parametric or r=f(θ) curves on a polar grid with concentric rings and radial spokes. Supports rose curves, spirals, limaçons, cardioids, and arbitrary parametric paths. Use for polar coordinate systems, complex number arguments, antenna radiation patterns, and physics (orbit shapes). The model supplies the curve definition (function name or a list of (theta, r) points); the component draws the grid and curves.`,optional:[`type`,`curves`,`domain`,`caption`],propHints:{type:`'polar' (r=f(θ) curves) | 'parametric' (x and y each as f(t)) — default 'polar'`,curves:`array of polar curves — each has a name and either a formula string or points[]`,domain:`[tMin, tMax] parameter range; defaults to [0, 2π]`}},twocolumnproof:{blurb:`Two-column geometric proof: statements on the left, justifications (theorems, postulates, definitions) on the right, numbered row by row. Given conditions and the "prove" statement appear at the top; an optional diagram note describes the figure. Perfect for high-school geometry — triangle congruence, parallel lines, circle theorems. The final row auto-bolds to highlight QED.`,optional:[`diagram`,`caption`],propHints:{steps:`array of {statement, reason} objects — one per proof row`,given:`what is assumed true (e.g. "AB ∥ CD, ∠1 ≅ ∠2")`,prove:`what must be proven (e.g. "△ABC ≅ △DEF")`,diagram:`short text describing the reference figure`}},pyramidtiers:{blurb:`Hierarchical pyramid diagram: each tier is a coloured trapezoid that tapers toward the top, ideal for ranking structures with the largest/most-foundational level at the base. Perfect for Bloom's Taxonomy (education), Maslow's Hierarchy of Needs (psychology/sociology), an energy pyramid by biomass (ecology), or any layered classification where relative size conveys importance or quantity. For the actual who-eats-whom graph of individual organisms and predator-prey links, use foodweb instead.`,optional:[`caption`],propHints:{tiers:`array of {label, value?, note?, color?} — bottom tier first, top tier last`,"tiers[].label":`tier name (e.g. "Remember", "Physiological Needs")`,"tiers[].value":`optional numeric annotation (e.g. percentage or count)`,"tiers[].note":`short italicised note shown inside the tier`,"tiers[].color":`CSS color or var(--token) — defaults to a semantic palette`}},linespectrum:{blurb:`Atomic emission or absorption spectrum: a horizontal strip spanning the visible wavelength range (380–780 nm), with sharp coloured lines at each measured wavelength. Emission mode shows bright lines on a dark background; absorption mode shows dark cutout lines on the rainbow continuum. Optional labels identify each line (e.g. "Hα 656 nm"). Use for hydrogen series, helium, sodium doublet, or any spectroscopic data in chemistry and physics.`,optional:[`mode`,`range`,`elementLabel`,`caption`],propHints:{lines:`array of {wavelength, intensity?, label?} — wavelength in nm (380–780)`,mode:`"emission" (default, bright lines on dark) or "absorption" (dark lines on rainbow)`,range:`[minNm, maxNm] — default [380, 780]`,elementLabel:`element name shown on axis label (e.g. "Hydrogen")`}},dnahelix:{blurb:`DNA double helix or ladder diagram: two backbone strands connected by A–T (yellow) and G–C (blue-green) base-pair rungs. Helix mode renders the classic 3-D twisted view with depth cues; ladder mode shows the "unzipped" flat ladder. Base labels (A, T, G, C) are shown by default; direction labels (5′ → 3′) mark both strands. Highlights a specific base pair by setting highlight:true. Use for DNA replication, complementary base pairing, and molecular biology lessons.`,optional:[`bases`,`count`,`mode`,`showLabels`,`caption`],propHints:{bases:`array of {pair, highlight?} — pair is "AT"|"TA"|"GC"|"CG"; omit for random sequence`,count:`number of base pairs when bases not supplied (default 10, max 16)`,mode:`"helix" (default 3-D twist) or "ladder" (flat unzipped view)`,showLabels:`true (default) shows A/T/G/C labels on each rung`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={taylorseries:{blurb:`Taylor series approximation visualizer: plots the true function f(x) and its polynomial approximation, showing how adding more terms narrows the error. Supports sin, cos, exp, ln, and arctan. The expansion centre a is marked; a term-count slider (default interactive at 3, up to maxTerms) lets you step through more terms, with an optional shaded error band. Use for calculus courses on power series, convergence radius, and numerical approximation.`,optional:[`center`,`maxTerms`,`showTerms`,`xDomain`,`showError`,`footer`],propHints:{fn:`"sin" | "cos" | "exp" | "ln" | "arctan" — function to approximate`,center:`expansion point a (default 0; ignored for ln, which always expands around 1)`,maxTerms:`highest term count the slider can reach (default 7)`,showTerms:`pin a fixed term count and disable the slider (omit for an interactive default of 3)`,xDomain:`[xMin, xMax] display window (default depends on function)`,showError:`true to shade the error band between the true function and the approximation`}},phaseportrait:{blurb:`ODE system phase portrait: vector field arrows, x/y-nullclines (where dx/dt=0 or dy/dt=0), equilibrium classification by Jacobian trace/det (stable/unstable node, spiral, saddle), and optional RK4 trajectories. fx and gy are JS expressions in x and y.`,optional:[`title`,`icon`,`iconColor`,`xDomain`,`yDomain`,`trajectories`,`showNullclines`,`xlabel`,`ylabel`,`footer`],propHints:{fx:`dx/dt as a JS math expression in x,y — e.g. "y"`,gy:`dy/dt as a JS math expression in x,y — e.g. "-x - 0.5*y"`,"trajectories[].x0":`initial x for a trajectory`,"trajectories[].y0":`initial y for a trajectory`,showNullclines:`draw nullclines, default true`}},sightwordlist:{blurb:`K-2 sight-word practice list (Dolch/Fry style): tap-to-hear word chips colored by mastery — new, practicing, or mastered — with tallies. Use for sight-word drills, word walls, and early-reading fluency checks.`,optional:[`icon`,`iconColor`,`listName`,`footer`],itemShapes:[{prop:`words`,text:`word`,textAliases:[`text`,`term`]}],propHints:{listName:`the list's name/source, e.g. "Dolch Pre-Primer", "Fry's First 100"`,"words[].mastery":`'new'|'practicing'|'mastered' — defaults to 'new'`}},alphabetchart:{blurb:`A-Z reference grid — one cell per letter with its upper+lowercase glyph and a keyword ("Aa is for Apple"). Renders a complete default alphabet when letters are omitted. Use for alphabet recognition, letter-sound association, and A-Z reference walls.`,optional:[`icon`,`iconColor`,`letters`,`footer`],itemShapes:[{prop:`letters`,text:`letter`,textAliases:[`char`,`value`,`name`]}],propHints:{"letters[].letter":`the letter, e.g. "A" — only the first character is used`,"letters[].keyword":`the mnemonic word, e.g. "Apple" for "Aa is for Apple" (optional — falls back to a default keyword when omitted)`}},columnarithmetic:{blurb:`A worked column-arithmetic figure: digits stacked by place value with the real carry (addition) or borrow (subtraction) marks worked out, or — for long division — the classic bracket-and-bring-down layout. Every mark and step is computed from the operands, never authored. Use for "show your work" multi-digit addition/subtraction/division.`,optional:[`icon`,`iconColor`,`showCarries`,`caption`,`footer`],propHints:{op:`'add'|'sub'|'longdiv'`,operands:`the whole numbers to work through, in order — 'add' sums any count, 'sub' subtracts every later row from the first, 'longdiv' reads only the first two as [dividend, divisor]`,showCarries:`show the worked carry/borrow marks. Default true`}},titrationcurve:{blurb:`A pH-vs-titrant-volume curve for acid/base titrations, plotted strictly from sampled points on a 0-14 pH axis, with an optional dashed equivalence-point marker, a shaded buffer-region band, and a pKa label at half-equivalence. Use for titration, buffer capacity, and equivalence-point questions.`,optional:[`icon`,`iconColor`,`equivalenceVolumeMl`,`pKa`,`bufferBand`,`footer`],propHints:{"points[].volumeMl":`titrant volume added, in mL`,"points[].pH":`measured pH at that volume`,equivalenceVolumeMl:`volume at the equivalence point, in mL — drawn as a dashed marker`,pKa:`the acid's pKa, labelled at half the equivalence volume`,bufferBand:`[startMl, endMl] of the buffering plateau, shaded as a band`}},interferencepattern:{blurb:`Single- or double-slit diffraction: a barrier/slit schematic with Huygens wavelets up top, and the fringe intensity below plotted strictly from the caller's sampled points — the interference pattern itself is never computed here. Use for wave-optics lessons on single vs. double slit diffraction.`,optional:[`icon`,`iconColor`,`wavelengthNm`,`slitSeparationUm`,`footer`],propHints:{slits:`1 (single slit) or 2 (double slit)`,"intensity[].position":`position along the screen (any consistent unit)`,"intensity[].value":`measured/relative intensity at that position (0 at the dark fringes)`,wavelengthNm:`illustrative only — labels the schematic, e.g. 550 for green light`,slitSeparationUm:`illustrative only — labels the schematic slit spacing`}},orbitaldiagram:{blurb:`Aufbau electron-configuration boxes: one row per subshell, in filling order, each with its canonical box count (s=1, p=3, d=5, f=7) and an up/down spin-arrow per electron. Use for electron-configuration and Hund's-rule/Pauli-exclusion teaching.`,optional:[`icon`,`iconColor`,`element`,`configString`,`footer`],itemShapes:[{prop:`orbitals`,text:`subshell`}],propHints:{"orbitals[].subshell":`e.g. "1s", "2p", "3d" — filling order matters, list earliest first`,"orbitals[].boxes":`orbital count for this subshell; omit to use the canonical count`,"orbitals[].electrons":`one entry per box, left to right: 0 (empty), 1 (spin-up only), or 2 (paired)`,configString:`the condensed configuration, e.g. "1s² 2s² 2p⁶ 3s² 3p⁶ 4s² 3d⁶"`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={pictograph:{blurb:`A repeated-icon tally chart: each row tiles as whole icons plus a proportionally clipped partial icon for the remainder, at unitValue per icon, with a "each icon = N" key line. Use for "each icon represents N" style counts: population, votes, units sold.`,optional:[`icon`,`iconColor`,`icon2`,`footer`],itemShapes:[{prop:`rows`,text:`label`,textAliases:[`name`,`category`]}],propHints:{unitValue:`how much ONE full icon represents, e.g. 1000 for "each icon = 1,000 people"`,"rows[].count":`the real count for this row, in the same unit as unitValue`}},particlemodel:{blurb:`Side-by-side solid/liquid/gas particle diagrams: a solid draws a tight lattice with small vibration arcs, a liquid a loose cluster with short drift lines, a gas scattered particles with longer motion trails. Use for states-of-matter and kinetic-theory lessons.`,optional:[`icon`,`iconColor`,`footer`],propHints:{"panels[].phase":`'solid'|'liquid'|'gas'`,"panels[].particleCount":`how many particles to draw in this panel. Default 12`}},morphemebreakdown:{blurb:`Synchronic single-word decomposition: a word's prefix/root/suffix segments, underlined and colour-coded by role, with a gloss legend below. Distinct from etymtree (cross-language ancestry) — this is what the word breaks into right now. Use for morphology teaching and vocabulary word-part drills.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`morphemes`,text:`text`}],propHints:{word:`the whole word being decomposed, e.g. "unbreakable"`,"morphemes[].text":`the morpheme spelling, e.g. "un", "break", "able", left to right`,"morphemes[].role":`'prefix'|'root'|'suffix'`,"morphemes[].meaning":`short gloss, e.g. "not, opposite of" for "un-"`}},practicelog:{blurb:`An instrument practice tracker: a calendar-heat strip of real minutes-per-day above a session list, with per-piece cumulative-minute tags. Totals, day buckets, and streak are computed from the sessions, never invented. Use for "log my piano practice", "how much have I practiced this month", "show my violin streak".`,optional:[`icon`,`iconColor`,`streak`,`footer`],itemShapes:[{prop:`sessions`}],propHints:{"sessions[].date":`the session date, any string Date can parse, e.g. "2026-06-24"`,"sessions[].minutes":`minutes practiced in this session`,"sessions[].piece":`the piece worked on, e.g. "Clair de Lune" — omit for technique drills`,"sessions[].focus":`what the session focused on, e.g. "scales", "sight-reading", "tempo"`,streak:`current consecutive-day streak in days — omit to let the component compute it from the sessions themselves`}},taxonrank:{blurb:`A single organism's taxonomic classification ladder — Kingdom down to Species (or any subset) — as a vertical stack of rank pills joined by a connector, widening as it descends. Distinct from phylotree (a multi-species evolutionary tree): this is one organism's own classification, no tree layout involved. For "classify a red fox", "taxonomy of T. rex", "kingdom through species for a housecat".`,optional:[`icon`,`iconColor`,`scientificName`,`footer`],itemShapes:[{prop:`ranks`,text:`name`}],propHints:{"ranks[].level":`'Kingdom'|'Phylum'|'Class'|'Order'|'Family'|'Genus'|'Species'`,"ranks[].name":`the taxon at this level, e.g. "Animalia", "Chordata", "Tyrannosaurus"`,"ranks[].highlight":`true to emphasise this one rung — the level the answer is about`,scientificName:`the full binomial name, e.g. "Tyrannosaurus rex" — shown italicized`}},numbersequence:{blurb:`A Fibonacci / prime / triangular / square number visualizer for general curiosity — a row of size-scaled dots, one per term, with the real gap between adjacent terms annotated on the connector. Distinct from a classroom sequences-and-series lesson. For "show me the Fibonacci sequence", "what are triangular numbers", "visualize the first 10 primes".`,optional:[`icon`,`iconColor`,`rule`,`highlightPattern`,`footer`],propHints:{kind:`'fibonacci' | 'prime' | 'triangular' | 'square'`,terms:`the actual terms in order, e.g. [1, 1, 2, 3, 5, 8, 13] for Fibonacci`,rule:`plain-language generating rule, e.g. "each term is the sum of the two before it"`,highlightPattern:`true (default) to annotate the gap between adjacent terms`}},constantcard:{blurb:`A mathematical constant fact card (pi, e, phi, a googol, …): headline symbol + value, a short significance paragraph, and an optional illustrative diagram (a golden-ratio spiral for phi, a circle-and-diameter for pi). For "tell me about pi", "what is the golden ratio", "how big is a googol".`,optional:[`icon`,`iconColor`,`digitsShown`,`visual`,`footer`],propHints:{symbol:`the constant's symbol or short name, e.g. "π", "e", "φ", "Googol"`,value:`the decimal expansion AS A STRING, e.g. "3.14159265358979323846" — never a number`,digitsShown:`how many digits after the decimal point to display; omit to show value as-is`,visual:`'spiral' (for φ) | 'circle' (for π) | 'none' (default)`}},elementcard:{blurb:`A single periodic-table element deep-dive: a classic textbook tile (large symbol, Z top-left, mass bottom-left) plus category, electron configuration, melting/boiling points, and real uses, with a compact electron-shell ring diagram when shells is given. Distinct from periodictable (the full 118-cell grid) and bohrmodel (a full per-electron diagram). For "tell me about iron", "element deep dive on oxygen".`,optional:[`icon`,`iconColor`,`mass`,`category`,`electronConfig`,`shells`,`discovered`,`meltingPoint`,`boilingPoint`,`uses`,`footer`],stringItems:[`uses`],propHints:{z:`the atomic number`,mass:`standard atomic mass in u/amu, e.g. 55.845 for iron`,category:`e.g. "Transition metal", "Noble gas", "Alkali metal" — colors the tile`,electronConfig:`condensed configuration, e.g. "[Ar] 3d⁶ 4s²"`,shells:`electrons per shell, innermost first, e.g. [2, 8, 14, 2] for iron`,discovered:`e.g. "1669" or "Known since antiquity"`,meltingPoint:`in °C`,boilingPoint:`in °C`,uses:`real-world uses, e.g. ["Steelmaking", "Magnets"]`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={energybarchart:{blurb:"A physics energy-bar ('LOL') chart: one bar group per snapshot in a scenario, all sharing ONE y-scale so the stores are directly comparable and conservation is checkable. `snapshots` is an array of {label, bars:[{kind, value}]} where kind is an open store token ('KE','Ug','Us','Eth','W'…) and a NEGATIVE value draws below the zero line; `system` lists the objects in the system and `unit` defaults to 'J'. The running total under each group makes energy-in = energy-out obvious. For conservation-of-energy problems, pendulums, springs, and inclines. Never for a reaction-coordinate energy profile — use energydiagram.",optional:[`icon`,`iconColor`,`system`,`unit`,`footer`],itemShapes:[{prop:`snapshots`,text:`label`,textAliases:[`name`,`state`,`title`],requiredFields:[`bars`],children:{prop:`bars`,text:`kind`,textAliases:[`store`,`type`,`label`],requiredFields:[`value`]}}],stringItems:[`system`],propHints:{"snapshots[].label":`the state name, e.g. "Initial", "At the bottom", "Final"`,"bars[].kind":`energy store shown as the bar label — an open token, e.g. "KE", "Ug", "Us", "Eth", "W"`,"bars[].value":`amount of energy in this store; a NEGATIVE value draws below the zero line`,system:`objects inside the chosen system, e.g. ["ball", "Earth"]`,unit:`energy unit for the axis and totals; default "J"`}},guitartab:{blurb:"Guitar/bass tablature: a 6-line TAB staff split into measures and wrapped to rows, with fret numbers on the string lines at proportional beat positions and hammer-on/pull-off/bend/slide glyphs between notes. `notes` is an array of {measure, beat, string (1 = high e … 6 = low E), fret, technique?}; `tuning` (default 'EADGBE'), `beatsPerMeasure` (4), `measuresPerRow` (4) and `tempo` set the staff. For riffs, licks, and tab transcriptions. Never for standard staff notation — use musicstaff; for a scale or chord shape mapped across the neck use fretboardmap.",optional:[`icon`,`iconColor`,`tuning`,`beatsPerMeasure`,`measuresPerRow`,`tempo`,`footer`],itemShapes:[{prop:`notes`,requiredFields:[`measure`,`beat`,`string`,`fret`]}],propHints:{"notes[].measure":`1-based measure number`,"notes[].beat":`beat position within the measure, 1‥beatsPerMeasure (fractions allowed)`,"notes[].string":`string number, 1 = highest (high e) up to 6 = lowest (low E)`,"notes[].fret":`fret number, 0 = open, up to 24`,"notes[].technique":`'h' (hammer-on) | 'p' (pull-off) | 'b' (bend) | 's' (slide up) | '/' (slide down) | 'x' (mute)`,tuning:`open-string notes low→high as a string, e.g. "EADGBE" (standard) or "DADGAD"`,beatsPerMeasure:`time-signature numerator; default 4`,measuresPerRow:`measures before wrapping to the next row; default 4`,tempo:`tempo in BPM, shown as "♩ = n"`}},karyotype:{blurb:"A human karyogram: the 22 autosome pairs on a real decreasing length scale plus the sex pair, each chromosome an SVG shape with a centromere pinch (metacentric→acrocentric) and deterministic G-bands. `sex` is 'XX' or 'XY'; `anomalies` is an array of {pair (1–22 or 'X'/'Y'), kind, note?} that redraws a slot — trisomy adds a third copy, monosomy leaves one, deletion/duplication marks a band — and `highlightPairs` rings pairs for emphasis. Educational genetics only. For \"draw a karyotype\", trisomy 21, and sex-chromosome teaching. Never for a family inheritance chart — use pedigree; for the DNA double helix use dnahelix.",optional:[`title`,`icon`,`iconColor`,`sex`,`anomalies`,`highlightPairs`,`footer`],itemShapes:[{prop:`anomalies`,requiredFields:[`pair`,`kind`]}],stringItems:[`highlightPairs`],propHints:{sex:`'XX' | 'XY' — the sex-chromosome pair to draw; default 'XX'`,"anomalies[].pair":`affected pair, "1"–"22" or "X"/"Y"`,"anomalies[].kind":`'trisomy' | 'monosomy' | 'deletion' | 'duplication'`,"anomalies[].note":`optional short caption under the slot, e.g. "Down syndrome"`,highlightPairs:`pair ids to ring for emphasis, e.g. ["21", "X"]`}},frayermodel:{blurb:"A Frayer vocabulary model: the `term` (with optional `pronunciation`) over a 2×2 panel grid — `definition` (prose), `characteristics`, `examples`, and `nonexamples` (each a string array) — the classic graphic organiser for deep word knowledge, with equal-height, bounded-scroll panels. For vocabulary instruction and concept-building across any subject. Never for plotting items on two axes — use quadrant.",optional:[`icon`,`iconColor`,`pronunciation`,`title`,`footer`],stringItems:[`characteristics`,`examples`,`nonexamples`],propHints:{term:`the vocabulary term / concept being defined`,definition:`the definition in the learner's own words (prose)`,characteristics:`essential attributes, e.g. ["Has four equal sides", "Four right angles"]`,examples:`things that fit the term`,nonexamples:`things that do NOT fit — they sharpen the boundary`,pronunciation:`respelling or IPA, e.g. "/ˌfoʊtoʊˈsɪnθəsɪs/"`}},numberbond:{blurb:"A K–2 part-part-whole number bond: the `whole` in a large circle above its `parts` (2–4 smaller circles) joined by connectors. Any value may be null to render a '?' the learner fills in; with `factFamily` on and the whole plus two parts known, the four related addition/subtraction equations are shown. `label` captions the bond. For number sense, making 10, and fact-family practice. Never for column/standard-algorithm arithmetic — use columnarithmetic.",optional:[`title`,`icon`,`iconColor`,`whole`,`factFamily`,`label`,`footer`],propHints:{whole:`the total as a number, or null to make the WHOLE the unknown "?"`,parts:`the 2–4 parts as numbers; use null for an unknown to fill in, e.g. [6, 4] or [6, null]`,factFamily:`true shows the four related equations when the whole and exactly two parts are known`,label:`short caption under the bond, e.g. "Ways to make 10"`}},beforeafter:{blurb:`Draggable wipe between two REAL before/after photos (renovation, edit, repair, restoration, seasonal or satellite imagery). Each side needs a real image src — gradients alone are not an answer. Do NOT use for abstract concepts, data, or math: use a chart, labeled diagram, or vectorspace instead.`,optional:[`icon`,`iconColor`,`position`,`footer`],propHints:{"before.src":`URL of the real BEFORE photo (required — without a real image this block is meaningless)`,"after.src":`URL of the real AFTER photo (required)`}},carousel:{blurb:`Tap-through gallery of REAL images/slides with captions. Each slide needs a real image src; not a placeholder for abstract or data content.`,optional:[`icon`,`iconColor`,`start`,`footer`]},imagecallouts:{blurb:`Annotated image with tappable hotspots revealing labels and details.`,optional:[`icon`,`iconColor`,`footer`]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={waveform:{blurb:`Interactive audio timeline with bar amplitudes, scrubber, and markers.`,optional:[`icon`,`iconColor`,`durationLabel`,`color`,`position`,`markers`,`footer`]},videoembed:{blurb:`Video player with chapter markers and chapter-list navigation.`,optional:[`icon`,`iconColor`,`durationLabel`,`active`,`footer`]},geomap:{blurb:`A REAL interactive map (OpenStreetMap tiles) for actual places. Give each marker real {lat, lng} coordinates (decimal degrees), a name, and an optional detail. When the answer spans several places or segments (a multi-day trip, a multi-stop route), emit ONE map PER segment — each plotting that segment’s own stops — not a single overview, unless an overview is what was asked. This is the only map type — always use it for any real-world location. For a zoning/land-use ask specifically, prefer zoningmap, which teaches the zone-polygon shape more directly.`,optional:[`icon`,`iconColor`,`zoom`,`zones`,`footer`],itemShapes:[{prop:`zones`,text:`label`,textAliases:[`name`,`title`]}],propHints:{"zones[].coords":`the zone boundary as real [lat, lng] pairs (decimal degrees), at least 3 points`,"zones[].category":`'residential'|'commercial'|'industrial'|'mixed'|'open-space'`}},lightbox:{blurb:`Inline gallery grid with full-screen lightbox on tap.`,optional:[`icon`,`iconColor`,`footer`]},moodboard:{blurb:`Masonry layout of images, color swatches, and text blocks.`,optional:[`icon`,`iconColor`,`footer`],propHints:{"tiles[].kind":`'image'|'color'|'text'`}},palette:{blurb:`An actual COLOR palette — swatches with hex codes and WCAG contrast verdicts (brand/design palettes). Never as a generic category, tag, or option list — use chipset or badgeset.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`swatches`,text:`name`,textAliases:[`label`,`title`]}]},mediacard:{blurb:`A poster-forward detail card for ONE recommended title (film/show/book/game): cover art, year/runtime/rating chips, a 0–100 score badge, a spoiler-safe logline, genre tags, and "where to watch" provider chips. Give a real cover.src when you have one; otherwise it falls back to the cover.from/to gradient. Pick this for a single "what should I watch/read next" pick — use carousel or lightbox for a gallery of several.`,optional:[`icon`,`iconColor`,`year`,`runtime`,`rating`,`score`,`genres`,`logline`,`providers`,`footer`],stringItems:[`genres`,`providers`],propHints:{score:`a number 0–100 (aggregate/critic score); omit if unknown rather than guessing`,"cover.src":`real poster/cover image URL; omit to show the from/to gradient placeholder`,"cover.from":`gradient start, e.g. var(--presence-deep)`,"cover.to":`gradient end, e.g. var(--presence-soft)`}},diagram:{blurb:`Labeled vector diagram with shapes (circles, rects, lines, polygons, paths) and annotated callout labels—for anatomy, physics, geography, engineering schematics.`,optional:[`icon`,`iconColor`,`ratio`,`footer`],propHints:{"shapes[].kind":`'circle'|'rect'|'line'|'polygon'|'path'`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={svgblock:{blurb:`Tier-3 escape hatch: model-drawn SVG for a visual no native component covers (a molecule, a circuit, a geometric figure, a custom infographic). Strictly sanitized on render; design tokens (var(--presence) etc.) work via CSS inheritance, so it is light/dark-aware. Use ONLY when diagram/geometrycanvas/vectorspace/reactionmechanism/molecularstructure/etc. do not apply.`,optional:[`icon`,`iconColor`,`caption`,`footer`],propHints:{svg:`Complete <svg> with a viewBox (e.g. viewBox="0 0 400 300") and NO width/height attributes. Colors: ONLY var(--presence/--insight/--warning/--danger/--text-primary/--text-secondary/--text-muted/--surface-card) — never hex. Allowed elements: path, rect, circle, ellipse, line, polyline, polygon, text, tspan, g, defs, linearGradient/radialGradient/stop, clipPath, mask, pattern, marker, use(#id). Forbidden: script, style, foreignObject, image, a, event handlers, animation, and any external/javascript:/data: URL — all are stripped on render.`,caption:`Optional plain-text label shown below the SVG.`}},sportspitch:{blurb:`A REAL sports field/court (soccer, basketball, football, tennis, baseball) with player positions and play arrows — for formations, tactics, and play diagrams ONLY. Never for anatomy, muscle groups, exercises, or abstract "zones": use bodymap for muscles/anatomy and diagram for a labeled figure.`,optional:[`icon`,`iconColor`,`positions`,`plays`,`footer`],propHints:{sport:`"soccer"|"basketball"|"football"|"tennis"|"baseball"`,"positions[].x":`0=left, 100=right`,"positions[].y":`0=top, 100=bottom`,"plays[].kind":`"pass"|"run"|"shot"`}},floorplan:{blurb:`A top-down floor plan from declarative room data — each room as a labeled rectangle. Use for apartment layouts, office design, or space-planning asks.`,optional:[`icon`,`iconColor`,`scale`,`footer`],itemShapes:[{prop:`rooms`,text:`name`,textAliases:[`room`,`space`,`area`]}],propHints:{"rooms[].x":`0..100 canvas units from left`,"rooms[].y":`0..100 canvas units from top`,"rooms[].w":`width in canvas units (total 100)`,"rooms[].h":`height in canvas units (total 100)`}},dimensiondrawing:{blurb:`A technical/shop drawing: a part profile drawn to scale with proper dimension lines (extension lines, arrowheads, measurement text), an optional tolerance note, and a small title block. For mechanical parts, machining callouts, and engineering drawings.`,optional:[`title`,`icon`,`iconColor`,`tolerance`,`titleBlock`,`caption`,`footer`],itemShapes:[{prop:`dimensions`,text:`label`}],propHints:{"outline[]":`{ x, y } points of the closed part profile, in arbitrary drawing units (auto-fit to the frame)`,"dimensions[].from":`[x, y] start of the measured span (drawing units)`,"dimensions[].to":`[x, y] end of the measured span (drawing units)`,"dimensions[].label":`the measurement text, e.g. "60" or "Ø12"`,"dimensions[].offset":`how far the dimension line sits off the part (drawing units, default 10)`,titleBlock:`{ part?, scale?, units? } small title-block fields`}},explodedview:{blurb:`An exploded assembly diagram: part shapes separated along an axis with dashed centerlines and numbered balloon callouts, beside a numbered parts list (n · name · ×qty). For assembly steps, parts breakdowns, and how-it-fits-together asks.`,optional:[`title`,`icon`,`iconColor`,`axis`,`caption`,`footer`],itemShapes:[{prop:`parts`,text:`name`,textAliases:[`part`,`label`,`component`]}],propHints:{"parts[].n":`callout number (1-based), matching the balloon on the figure`,"parts[].name":`part name shown in the list`,"parts[].qty":`quantity in the assembly (default 1)`,axis:`'vertical'|'diagonal'`}},weldsymbol:{blurb:`A welding callout: the joint cross-section AND the AWS weld symbol (reference line, arrow, weld-type glyph, size + length-pitch, process tail), with a legend explaining each part of the symbol. For weld specs and fabrication drawings.`,optional:[`title`,`icon`,`iconColor`,`side`,`size`,`length`,`pitch`,`process`,`caption`,`footer`],propHints:{joint:`'fillet'|'groove'|'lap'|'butt'|'tee'`,side:`'arrow'|'other'|'both' (which side of the reference line the weld sits on)`,size:`weld size, e.g. "6" (mm leg/throat)`,length:`weld length, e.g. "50"`,pitch:`centre-to-centre pitch for intermittent welds, e.g. "100"`,process:`welding process in the tail, e.g. "GMAW"`}},cutlist:{blurb:`A material cut list + nesting layout: a parts table beside a to-scale stock sheet with the parts packed as labeled rectangles, the leftover offcut highlighted, and a computed yield %. For sheet goods (plywood, sheet metal, glass) and woodworking/fabrication cuts.`,optional:[`title`,`icon`,`iconColor`,`unit`,`caption`,`footer`],itemShapes:[{prop:`parts`,text:`label`,textAliases:[`name`,`part`]}],propHints:{stock:"{ w, h, label? } raw stock sheet size in `unit`","parts[].label":`part name shown in the table + on the rectangle`,"parts[].w":"part width in `unit`","parts[].h":"part height in `unit`","parts[].qty":`how many of this part to cut`,"parts[].x":`optional explicit placement from the sheet top-left (give x AND y, else it shelf-packs)`,"parts[].y":`optional explicit placement from the sheet top-left`,unit:`length unit shown in the table + scale, e.g. "mm" (default "mm")`}},spacefit:{blurb:`A to-scale top-down room layout with furniture: the room drawn to scale with furniture rectangles placed and rotated inside, a scale ruler, and called-out walkway/clearance gaps (a gap below a comfortable threshold is flagged). For room planning, furniture fit, and “will it fit” asks.`,optional:[`title`,`icon`,`iconColor`,`clearances`,`caption`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`item`]},{prop:`clearances`,text:`label`}],propHints:{room:'{ w, d, unit? } room footprint (width × depth) in `unit` (default "m")',"items[].label":`furniture name shown on the piece`,"items[].w":"footprint width in `unit` (before rotation)","items[].d":"footprint depth in `unit` (before rotation)","items[].x":"left edge in `unit` from the room top-left","items[].y":"top edge in `unit` from the room top-left","items[].rot":`rotation in degrees clockwise (default 0; 90 swaps width/depth)`,"clearances[].label":`name of the walkway/gap, e.g. "Sofa to table"`,"clearances[].gap":"the gap distance in `unit` (a gap ≤ 0.9 is flagged as tight)"}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={anatomyfigure:{blurb:`A labeled anatomy figure: a clean built-in illustration of a named organ with numbered callout pins placed at 0–100 x/y points, each pin revealing a label + note. For "label the parts of …" anatomy/physiology asks — no image needed.`,optional:[`title`,`icon`,`iconColor`,`view`,`caption`,`footer`],itemShapes:[{prop:`pins`,text:`label`,textAliases:[`name`,`part`]}],propHints:{organ:`'heart'|'kidney'|'nephron'|'brain'|'lung'|'eye'|'ear'|'neuron'|'skeleton'|'stomach'|'liver'`,"pins[].x":`horizontal anchor on the figure, 0–100 of the viewBox`,"pins[].y":`vertical anchor on the figure, 0–100 of the viewBox`,"pins[].label":`the part name shown in the numbered list`,"pins[].note":`a short clarifying detail revealed when the pin is active`,view:`a short view descriptor, e.g. "anterior" / "coronal section"`}},exposuretriangle:{blurb:`The photography exposure triangle: aperture, shutter, and ISO wired on a triangle with the resulting exposure in the centre and the trade-off each setting makes (depth of field / motion / noise). For camera-settings explanations and exposure decisions.`,optional:[`title`,`icon`,`iconColor`,`ev`,`effects`,`caption`,`footer`],propHints:{aperture:`aperture setting, e.g. "f/2.8"`,shutter:`shutter speed, e.g. "1/250"`,iso:`ISO sensitivity as a number, e.g. 200`,ev:`the resulting exposure value, e.g. "EV 12"`,"effects[].axis":`'aperture'|'shutter'|'iso'`,"effects[].note":`the side-effect cue for that corner, e.g. "shallow depth of field"`}},colorwheel:{blurb:`A color-theory wheel: a hue ring with the harmony geometry (complementary / analogous / triad / split / tetrad) drawn from a base hue, beside a swatch row of the resulting colors + hex. Related hues are derived from baseHue + harmony when swatches are omitted. For color schemes and palette theory.`,optional:[`title`,`icon`,`iconColor`,`harmony`,`swatches`,`caption`,`footer`],itemShapes:[{prop:`swatches`,text:`role`}],propHints:{baseHue:`the base hue angle, 0–360`,harmony:`'complementary'|'analogous'|'triad'|'split'|'tetrad'`,"swatches[].hue":`hue angle 0–360 on the wheel`,"swatches[].hex":`the rendered color as a hex string, e.g. "#3b82f6"`,"swatches[].role":`role label, e.g. "base" / "accent"`}},artanalysis:{blurb:`A composition / art-technique breakdown over an abstract canvas (no image): the chosen compositional overlay (rule-of-thirds grid / leading lines / golden spiral / symmetry), labeled focal regions, a dominant-palette row, and technique/light/style notes. For analysing composition and visual technique.`,optional:[`title`,`icon`,`iconColor`,`regions`,`palette`,`notes`,`caption`,`footer`],itemShapes:[{prop:`regions`,text:`label`},{prop:`notes`,text:`text`}],propHints:{overlay:`'thirds'|'leadinglines'|'goldenratio'|'symmetry'`,"regions[].x":`left edge 0–100 of the canvas`,"regions[].y":`top edge 0–100 of the canvas`,"regions[].w":`width 0–100 of the canvas`,"regions[].h":`height 0–100 of the canvas`,"regions[].label":`focal-region label, e.g. "subject"`,"palette[].hex":`dominant color as a hex string`,"palette[].role":`role label, e.g. "highlight" / "shadow"`,"notes[].label":`note heading, e.g. "Light" / "Composition"`,"notes[].text":`the technique observation`}},mixerboard:{blurb:`A multitrack DAW / mixer view: stacked labeled track lanes on a shared bar timeline, with clip blocks positioned by start + length, plus a per-lane volume bar, pan indicator, and mute/solo state. For song arrangements, mixing sessions, and "how the tracks are laid out" asks.`,optional:[`title`,`icon`,`iconColor`,`bars`,`caption`,`footer`],itemShapes:[{prop:`tracks`,text:`name`}],propHints:{"tracks[].name":`the track name, e.g. "Drums"`,"tracks[].clips":`[{ start, len, label? }] clips positioned along the bar timeline`,"tracks[].volume":`fader level 0–100 (default 80)`,"tracks[].pan":`stereo pan -100 (L) .. 100 (R), 0 = centre`,"tracks[].mute":`true → the lane is muted (dimmed, M badge)`,"tracks[].solo":`true → the lane is soloed (accented, S badge)`,"tracks[].color":`var(--presence)|var(--insight)|var(--warning)`,bars:`total bars on the timeline; defaults to the furthest clip end (min 4)`}},wireframe:{blurb:`A low-fidelity single-page wireframe — placeholder regions (header, hero, cards, CTA, footer) sketched on a column grid.`,optional:[`title`,`icon`,`iconColor`,`cols`,`caption`,`footer`],itemShapes:[{prop:`regions`,text:`label`,textAliases:[`name`,`title`]}],propHints:{"regions[].kind":`'header'|'hero'|'nav'|'image'|'text'|'button'|'card'|'list'|'footer'|'input'`,"regions[].col":`1..12 columns this region spans (defaults per kind)`,"regions[].rows":`1..6 grid rows tall (defaults per kind)`,cols:`columns in the layout grid (default 12)`,iconColor:`var(--presence-soft)|var(--insight)|var(--text-muted)`}},maproute:{blurb:`A REAL interactive map (OpenStreetMap tiles) with an ORDERED route: the waypoints connect into a numbered polyline, beside a stop-by-stop itinerary and a distance/elevation summary. Give each waypoint real {lat, lng} (decimal degrees) + a label, in travel order, plus an optional {leg} string (e.g. "1.2 km · 15 min") for the leg into that stop. Use for a walking tour, a hike, or one driving leg — when the answer is a single connected path between stops, not scattered pins (use geomap for unordered places).`,optional:[`title`,`icon`,`iconColor`,`center`,`zoom`,`distanceKm`,`elevationGainM`,`caption`,`footer`],itemShapes:[{prop:`waypoints`,text:`label`,textAliases:[`name`,`stop`,`place`]}],propHints:{"waypoints[].lat":`real latitude in decimal degrees (-90..90)`,"waypoints[].lng":`real longitude in decimal degrees (-180..180)`,"waypoints[].label":`the stop name shown on the marker + itinerary`,"waypoints[].leg":`the leg INTO this stop, e.g. "1.2 km · 15 min"`,center:`optional map centre [lat, lng] (the route auto-fits regardless)`,distanceKm:`total route distance in kilometres (a number)`,elevationGainM:`total elevation gain in metres (a number)`}},moonphase:{blurb:`A lunar-phase disk: an SVG Moon whose lit shape (the terminator) is COMPUTED from the illuminated fraction, beside the phase name, % illuminated, and an optional strip of upcoming nights. Give illumination as 0..1 and waxing true (lit on the right, growing) / false (lit on the left, shrinking). Use for tonight's phase, a stargazing plan, or a moon-phase explainer.`,optional:[`title`,`icon`,`iconColor`,`waxing`,`phaseName`,`date`,`upcoming`,`caption`,`footer`],propHints:{illumination:`illuminated fraction of the disk, 0..1 (0.72 = 72%)`,waxing:`true = waxing (lit on the right, growing); false = waning (lit on the left)`,phaseName:`the phase name, e.g. 'Waxing Gibbous'`,date:`the date this phase is for, e.g. "Jun 20, 2026"`,"upcoming[].date":`a short night label, e.g. "Fri 21"`,"upcoming[].illumination":`that night's illuminated fraction, 0..1`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={skychart:{blurb:`A circular planisphere night-sky chart: a sky dome (the horizon ring) with stars plotted at x/y (each 0..1 within the dome) and sized by magnitude, constellation connect-the-dots over them, and labeled planets. Use for "what's in the sky tonight", a constellation guide, or a star-chart explainer. Place stars by their relative position in the field, not RA/Dec.`,optional:[`title`,`icon`,`iconColor`,`constellations`,`planets`,`caption`,`footer`],itemShapes:[{prop:`planets`,text:`name`}],propHints:{"stars[].x":`horizontal position within the dome, 0..1 (0 = west, 1 = east)`,"stars[].y":`vertical position within the dome, 0..1 (0 = north, 1 = south)`,"stars[].mag":`apparent magnitude — LOWER is brighter (drives dot size); e.g. 0 bright, 4 faint`,"stars[].name":`star name, shown as a label when notable`,"constellations[].name":`the constellation/asterism name`,"constellations[].lines":`connect-the-dots segments as [fromStarIndex, toStarIndex] into stars[]`,"planets[].x":`horizontal position within the dome, 0..1`,"planets[].y":`vertical position within the dome, 0..1`}},orbitdiagram:{blurb:`A scaled orbital/celestial-system diagram: a central body with concentric labeled orbit rings, a sized body on each ring, and distance/period annotations. The ring radii + body positions are computed from orbitRadius (sqrt-compressed so inner + outer both fit, unless toScale). Use for a planetary system, moons around a planet, or a star system — give each body its orbitRadius in consistent units (e.g. AU).`,optional:[`title`,`icon`,`iconColor`,`toScale`,`caption`,`footer`],itemShapes:[{prop:`bodies`,text:`name`,textAliases:[`body`,`planet`,`moon`]}],propHints:{center:`the central body name, e.g. 'Sun'`,"bodies[].orbitRadius":`orbit radius in consistent units (e.g. AU); normalized across all bodies`,"bodies[].size":`relative body draw size, 1..5 (optional)`,"bodies[].color":`body accent, e.g. var(--insight)`,"bodies[].period":`orbital period annotation, e.g. '365 days'`,"bodies[].distance":`distance annotation, e.g. '1.0 AU'`,toScale:`true = keep orbit radii linearly to scale; default false (sqrt-compressed to fit)`}},gameboard:{blurb:`A configurable abstract game board: an 8×8 chess/checkers grid (alternating squares), a 19×19 Go board (stones on intersections), a hex grid, or a plain grid — with pieces placed on cells (a glyph or short label, tinted by side), highlighted squares, and move arrows. For openings, puzzles, tactics, and positional asks.`,optional:[`title`,`icon`,`iconColor`,`size`,`highlights`,`moves`,`caption`,`footer`],propHints:{board:`'chess'|'checkers'|'go'|'hex'|'grid' (default 'chess')`,size:`grid dimension per side (default: chess/checkers 8, go 19, hex/grid 8)`,"pieces[].row":`0-based row index from the top`,"pieces[].col":`0-based column index from the left`,"pieces[].glyph":`a single glyph drawn on the piece (a chess figurine ♞, a stone) — wins over label`,"pieces[].label":`a short text label on the piece (e.g. "X")`,"pieces[].side":`'a' (light) | 'b' (dark) — tints the piece`,"highlights[]":`{ row, col } squares to highlight`,"moves[].from":`[row, col] origin cell`,"moves[].to":`[row, col] destination cell (drawn as an arrow)`}},patternpiece:{blurb:`A sewing-pattern / fabric cutting layout: the fabric rectangle drawn to scale (folded fabric marked) with pattern pieces placed as labeled rectangles, each carrying a grainline arrow and an "on fold" mark, plus a computed yield %. For sewing layouts, fabric estimation, and "how to cut it" asks.`,optional:[`title`,`icon`,`iconColor`,`unit`,`caption`,`footer`],itemShapes:[{prop:`pieces`,text:`label`,textAliases:[`name`,`piece`,`part`]}],propHints:{fabric:"{ w, h, label? } the fabric size in `unit` (the fold runs down the left edge)","pieces[].label":`piece name shown in the centre, e.g. "Front panel"`,"pieces[].w":"piece width in `unit`","pieces[].h":"piece height in `unit`","pieces[].x":"left edge in `unit` from the fabric top-left","pieces[].y":"top edge in `unit` from the fabric top-left","pieces[].fold":`true → the piece’s left edge sits on the fold (drawn as a fold line, cut 1 on fold)`,"pieces[].qty":`how many to cut (default 1)`,unit:`length unit shown in the scale + yield, e.g. "cm" (default "cm")`}},emotionwheel:{blurb:`Plutchik's feeling wheel: named emotions as donut wedges, one ring per intensity tier (primary/secondary/tertiary), with a chosen feeling ring-marked. Defaults to the 8 core emotions (joy, trust, fear, surprise, sadness, disgust, anger, anticipation) when segments are omitted. For naming/mapping feelings, mood check-ins, and emotional-granularity teaching.`,optional:[`title`,`icon`,`iconColor`,`segments`,`highlight`,`caption`,`footer`],itemShapes:[{prop:`segments`,text:`label`}],propHints:{"segments[].label":`the feeling name, e.g. "joy" or "optimism"`,"segments[].angle":`optional explicit centre angle 0–360; auto-spaced within its tier when omitted`,"segments[].intensity":`'primary'|'secondary'|'tertiary' — which ring it sits on (default 'primary')`,"segments[].color":`accent token, e.g. var(--warning)`,highlight:`label of the segment to ring-mark, e.g. "trust"`}},creativetest:{blurb:`A marketing A/B creative comparison — real ad/post images side by side, each with a metric row (CTR, conversions, spend…) and the winner ribboned. Each variant needs a real image src. Use for testing ad creative, not a generic product/feature comparison — use compare or comparematrix for that.`,optional:[`icon`,`iconColor`,`winner`,`footer`],itemShapes:[{prop:`variants`,text:`label`,textAliases:[`name`,`title`,`variant`],children:{prop:`metrics`,text:`label`,textAliases:[`name`,`metric`,`key`]}}],propHints:{"variants[].src":`URL of the real creative image (required — without it the block is meaningless)`,"variants[].metrics[].deltaDir":`'good'|'bad' — which way the delta favors this variant`,winner:`index into variants of the winning creative, once the test has concluded`}},brandguide:{blurb:`A brand identity reference — the color palette, a live type-specimen row per typeface, and short voice/tone notes. Use for a brand/style-guide ask; for a plain color palette alone use palette instead.`,optional:[`icon`,`iconColor`,`typography`,`voiceNotes`,`footer`],itemShapes:[{prop:`colors`,text:`name`,textAliases:[`label`,`title`]},{prop:`typography`,text:`name`,textAliases:[`role`,`label`]}],stringItems:[`voiceNotes`],propHints:{"typography[].sample":`the font-family CSS stack to preview in, e.g. "'Georgia', serif" — a real installed/system font, never a URL`,"typography[].weight":`e.g. '400' or 'Bold'`}},siteplan:{blurb:`A property boundary plan — the parcel outline, an optional building footprint, dashed setback lines with distance callouts, and hatched easement strips. Distinct from floorplan (interior rooms): use this for a lot/parcel, permit, or zoning-setback ask.`,optional:[`icon`,`iconColor`,`structureFootprint`,`setbackLines`,`easements`,`footer`],itemShapes:[{prop:`setbackLines`,text:`label`,textAliases:[`name`,`type`,`zone`]},{prop:`easements`,text:`label`,textAliases:[`name`,`type`]}],propHints:{boundary:`the parcel outline as [x,y] pairs in any consistent site unit — auto-fit to the frame`,"setbackLines[].offset":`distance inward from the property line, in the same site units as boundary`,"easements[].path":`the easement strip outline as [x,y] pairs, same site units as boundary`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={zoningmap:{blurb:`A REAL interactive map with a zoning/land-use overlay: color-filled parcel polygons by category (residential/commercial/industrial/mixed/open-space) plus a legend. Give each zone real {coords: [[lat,lng],…], category, label} and at least one marker for reference. Use for 'is this lot zoned for…' or land-use questions; for a plain location map without zoning use geomap.`,optional:[`icon`,`iconColor`,`zoom`,`zones`,`footer`],itemShapes:[{prop:`zones`,text:`label`,textAliases:[`name`,`title`]}],propHints:{"zones[].coords":`the zone boundary as real [lat, lng] pairs (decimal degrees), at least 3 points`,"zones[].category":`'residential'|'commercial'|'industrial'|'mixed'|'open-space'`}},wordsearch:{blurb:`A word-search puzzle the component GENERATES itself: supply ONLY the hidden words (plain strings) and it deterministically places them in 8 directions and fills the rest with weighted random letters — never supply a letter grid, it would not contain the words. Clicking a word in the list reveals its placement; a reveal-all shows every answer. Never for arbitrary game boards — use gameboard.`,optional:[`title`,`icon`,`iconColor`,`size`,`seed`,`footer`],stringItems:[`words`],propHints:{words:`the hidden words as plain strings (normalized to A–Z uppercase, duplicates dropped)`,size:`optional grid side 8–15; default fits the longest word`,seed:`optional short string; the same seed + words always builds the same grid`}},playingcards:{blurb:`Standard playing cards drawn as crisp SVG — true pip arrangements on number cards, letter + large pip on courts and aces, a patterned back for face-down cards — grouped into labeled hands ("Your hand", "Flop") laid out as a fan, row, or stack. For poker/bridge/blackjack examples, card-game rules, and probability illustrations. Never for board-game positions — use gameboard.`,optional:[`title`,`icon`,`iconColor`,`note`,`footer`],itemShapes:[{prop:`groups`,children:{prop:`cards`,requiredFields:[`rank`,`suit`]}}],propHints:{"groups[].label":`optional group caption, e.g. "Your hand" or "Dealer shows"`,"groups[].layout":`'fan' | 'row' | 'stack' (default 'row')`,"groups[].cards[].rank":`'A'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'10'|'J'|'Q'|'K'`,"groups[].cards[].suit":`'spades'|'hearts'|'diamonds'|'clubs'`,"groups[].cards[].faceDown":`true → draws the patterned card back instead of the face`,note:`optional short annotation under the groups, e.g. the odds being illustrated`}},stitchchart:{blurb:`A knitting symbol chart read like a real one — bottom-up, RS rows right-to-left with row numbers alternating sides — where each cell draws the standard symbol for its stitch key and an auto-legend explains only the symbols in use. Give rows in knitting order (rows[0] = row 1), each with a stitches array of keys. Never for sewing pattern pieces — use patternpiece.`,optional:[`title`,`icon`,`iconColor`,`legend`,`gauge`,`caption`,`footer`],itemShapes:[{prop:`legend`,text:`meaning`,requiredFields:[`key`]}],propHints:{"rows[].side":`'RS' | 'WS' — defaults RS for odd row numbers, WS for even`,"rows[].number":`optional row number; defaults to the bottom-up position`,"rows[].stitches":`stitch keys in knitting order: 'k' knit, 'p' purl, 'yo' yarn over, 'k2tog' right-leaning decrease, 'ssk' left-leaning decrease, 'c4f' cable 4 front, 'c4b' cable 4 back, 'sl' slip, 'bo' bind off, 'co' cast on, 'mb' make bobble`,"legend[].key":`the stitch key the meaning belongs to, e.g. "mb"`,"legend[].meaning":`optional override/extension of the built-in legend text`,gauge:`optional gauge note, e.g. "22 sts × 30 rows = 10 cm in stockinette"`}},pianoroll:{blurb:`A MIDI-style piano roll: a mini keyboard gutter (black-key rows tinted, octave labels), a beat grid with heavier bar lines, and one bar per note placed by start beat, sized by duration, and tinted by velocity. Give each note a pitch ("C4", "F#3", or a MIDI number), a start in beats, and a duration in beats — both axes auto-range from the notes. Never for sheet-music notation — use musicstaff.`,optional:[`title`,`icon`,`iconColor`,`beatsPerBar`,`tempo`,`caption`,`footer`],itemShapes:[{prop:`notes`,requiredFields:[`pitch`]}],propHints:{"notes[].pitch":`scientific pitch like "C4" / "F#3" / "Bb2", or a MIDI number 0–127`,"notes[].start":`start position in beats, ≥ 0 (0 = the first beat of bar 1)`,"notes[].duration":`length in beats, > 0 (0.5 = an eighth note at 4 beats/bar)`,"notes[].velocity":`optional 0–1 — drives the bar tint intensity`,"notes[].label":`optional text on the bar when it fits; defaults to the note name`,beatsPerBar:`beats per bar for the heavy grid lines (default 4)`,tempo:`optional tempo label chip, e.g. "96 BPM"`}},navbar:{blurb:`Top app bar with brand, navigational links, search, and user avatar.`,optional:[`icon`,`iconColor`,`active`,`searchPlaceholder`,`avatar`,`color`,`footer`],itemShapes:[{prop:`links`,text:`label`,textAliases:[`name`,`title`,`text`]}]},sidenav:{blurb:`Grouped sidebar navigation with icons, badges, and active state.`,optional:[`icon`,`iconColor`,`brand`,`brandIcon`,`active`,`color`,`footer`],itemShapes:[{prop:`groups`,children:{prop:`items`,text:`label`,textAliases:[`name`,`title`,`text`]}}]},breadcrumb:{blurb:`Hierarchical trail with overflow collapse to ellipsis menu.`,optional:[`icon`,`iconColor`,`maxVisible`,`color`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`title`,`text`]}]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={pagination:{blurb:`Numbered page selector with first/prev/next/last controls and item summary.`,optional:[`icon`,`iconColor`,`page`,`siblings`,`unitLabel`,`perPage`,`color`,`footer`]},menubar:{blurb:`Application menu bar (File/Edit/View) with multi-column dropdowns.`,optional:[`icon`,`iconColor`,`color`,`footer`],itemShapes:[{prop:`menus`,text:`label`,textAliases:[`name`,`title`],children:{prop:`entries`,text:`label`,textAliases:[`name`,`title`,`text`]}}]},megamenu:{blurb:`Navigation item opening a multi-column mega-panel on hover with optional promo.`,optional:[`icon`,`iconColor`,`trigger`,`promoTitle`,`promoCopy`,`color`,`footer`],itemShapes:[{prop:`columns`,text:`heading`,textAliases:[`title`,`label`,`name`],children:{prop:`links`,text:`label`,textAliases:[`name`,`title`,`text`]}}],stringItems:[`tabs`]},toolbar:{blurb:`Formatting toolbar with grouped icon buttons, dividers, and toggle states.`,optional:[`icon`,`iconColor`,`color`,`footer`]},commandbar:{blurb:`Contextual action bar for bulk operations on selected items with live count.`,optional:[`icon`,`iconColor`,`noun`,`totalItems`,`selected`,`rows`,`color`,`footer`],itemShapes:[{prop:`rows`,text:`label`,textAliases:[`name`,`title`,`text`]},{prop:`actions`,text:`label`,textAliases:[`name`,`title`,`text`]}]},treeview:{blurb:`File/folder tree with expand/collapse, selection, and recursive nesting.`,optional:[`icon`,`iconColor`,`selected`,`color`,`footer`]},bottomnav:{blurb:`Mobile bottom navigation bar with icons, labels, and active indicator.`,optional:[`icon`,`iconColor`,`active`,`screens`,`color`,`footer`],itemShapes:[{prop:`tabs`,text:`label`,textAliases:[`name`,`title`,`text`]}],stringItems:[`screens`]},modal:{blurb:`Centered dialog with title, body, and action buttons; opens on trigger click.`,optional:[`icon`,`iconColor`,`trigger`,`triggerIcon`,`description`,`heading`,`body`,`confirm`,`cancel`,`color`]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={confirmdialog:{blurb:`Destructive confirmation dialog with alert styling and danger-colored action.`,optional:[`icon`,`iconColor`,`trigger`,`triggerIcon`,`description`,`heading`,`body`,`alertIcon`,`confirm`,`cancel`,`color`]},drawer:{blurb:`Right-side drawer with scrollable rows; triggers from button or card.`,optional:[`icon`,`iconColor`,`trigger`,`triggerIcon`,`description`,`heading`,`subhead`,`rows`,`confirm`,`cancel`,`color`],itemShapes:[{prop:`rows`,text:`label`,textAliases:[`name`,`title`,`text`]}]},sheet:{blurb:`Bottom sheet with options and selection; mobile-native interaction pattern.`,optional:[`icon`,`iconColor`,`trigger`,`triggerIcon`,`description`,`heading`,`subhead`,`options`,`color`],itemShapes:[{prop:`options`,text:`label`,textAliases:[`name`,`title`,`text`]}]},popover:{blurb:`Anchored popover with arrow and contextual content; highlights a key stat.`,optional:[`icon`,`iconColor`,`trigger`,`triggerIcon`,`description`,`heading`,`body`,`stat`,`statLabel`,`action`,`color`]},hovercard:{blurb:`Rich preview card on mention hover; shows profile name, bio, and stats.`,optional:[`icon`,`iconColor`,`mention`,`lead`,`name`,`handle`,`bio`,`avatar`,`stats`,`action`,`color`],itemShapes:[{prop:`stats`,text:`value`,textAliases:[`val`,`number`,`stat`]}]},tooltip:{blurb:`Multiple labeled elements with styled tooltips in configurable placements.`,optional:[`icon`,`iconColor`,`prompt`,`targets`,`color`],itemShapes:[{prop:`targets`,text:`label`,textAliases:[`name`,`title`,`text`]}]},menu:{blurb:`Dropdown menu with icons, shortcuts, and separators; standard desktop pattern.`,optional:[`icon`,`iconColor`,`trigger`,`triggerIcon`,`description`,`menuLabel`,`items`,`color`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`title`,`text`]}]},contextmenu:{blurb:`Right-click context menu on a target; shows actions for the selected element.`,optional:[`icon`,`iconColor`,`target`,`targetIcon`,`description`,`items`,`color`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`title`,`text`]}]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={commandk:{blurb:`Command palette with grouped commands, search, and keyboard navigation.`,optional:[`icon`,`iconColor`,`trigger`,`triggerIcon`,`description`,`placeholder`,`groups`,`color`],itemShapes:[{prop:`groups`,text:`label`,textAliases:[`name`,`title`,`heading`],children:{prop:`commands`,text:`label`,textAliases:[`name`,`title`,`text`]}}]},datepicker:{blurb:`Field with popover calendar to select a single date.`,optional:[`label`,`placeholder`,`month`,`icon`,`iconColor`,`footer`,`color`]},calendarpick:{blurb:`Inline month calendar with event dots and navigation.`,optional:[`month`,`value`,`events`,`icon`,`iconColor`,`footer`,`color`]},daterange:{blurb:`Two-month calendar picker for selecting start and end dates.`,optional:[`month`,`start`,`end`,`presets`,`icon`,`iconColor`,`footer`,`color`],stringItems:[`presets`]},timepicker:{blurb:`Hours and minutes input with steppers and AM/PM toggle.`,optional:[`label`,`format`,`hour`,`minute`,`meridiem`,`step`,`icon`,`iconColor`,`footer`,`color`]},colorpicker:{blurb:`Swatch grid and hue strip with hex preview.`,optional:[`label`,`value`,`swatches`,`icon`,`iconColor`,`footer`,`color`]},fileupload:{blurb:`Drag-drop zone with file list showing name, size, and upload progress.`,optional:[`prompt`,`hint`,`files`,`icon`,`iconColor`,`footer`,`color`],itemShapes:[{prop:`files`,text:`name`,textAliases:[`label`,`filename`,`title`]}],propHints:{"files[].kind":`'doc'|'image'|'slides'|'table'|'pdf'|'file'`}},tagsinput:{blurb:`Chip input with keyboard entry, suggestions, and removal.`,optional:[`label`,`tags`,`placeholder`,`suggestions`,`max`,`icon`,`iconColor`,`footer`,`color`],stringItems:[`tags`,`suggestions`]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={numberstepper:{blurb:`Numeric input with minus/plus buttons and min/max bounds.`,optional:[`label`,`value`,`min`,`max`,`step`,`prefix`,`suffix`,`caption`,`icon`,`iconColor`,`footer`,`color`]},searchselect:{blurb:`Searchable dropdown with keyboard navigation and live filtering.`,optional:[`label`,`placeholder`,`selected`,`icon`,`iconColor`,`footer`,`color`],itemShapes:[{prop:`options`,text:`label`,textAliases:[`name`,`title`,`text`]}]},formpanel:{blurb:`Multi-field form with validation, types (text/email/select/textarea), and submit.`,optional:[`heading`,`submitLabel`,`success`,`icon`,`iconColor`,`footer`,`color`],propHints:{"fields[].type":`'text'|'email'|'select'|'textarea'`}},scalefelt:{blurb:`Makes an abstract magnitude tangible — the raw figure shown big, then relatable equivalences ("as tall as ~12 double-decker buses", "the drive would take ~177 years") with a proportional cue. For "how big/far/loud/old is X".`,optional:[`icon`,`iconColor`,`unit`,`footer`],itemShapes:[{prop:`comparisons`,text:`to`,textAliases:[`thing`,`item`,`label`]}],propHints:{value:`the raw quantity as a string, e.g. "330" or "13.8 billion"`,unit:`unit for the figure, e.g. "metres", "years", "decibels"`,"comparisons[].howMany":`a number for a proportional bar (e.g. 12, 177) or descriptive text when no count fits (e.g. "a lifetime")`,"comparisons[].to":`the relatable thing, e.g. "double-decker buses", "trips around Earth"`}},hearit:{blurb:`A tap-to-play sound list — each row sounds a spoken word, a musical note, or a raw tone. For pronunciation, ear-training intervals, and tuning references.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`title`,`term`]}],propHints:{"items[].kind":`'word'|'note'|'tone'`,"items[].value":`for 'word' the text to speak; for 'note'/'tone' a frequency in Hz (e.g. 440) or a note name (e.g. "A4", "C#5", "Bb3")`}},factsheet:{blurb:`A structured fact sheet about a person, place, or thing — labeled key/value rows with an optional prose section.`,optional:[`icon`,`iconColor`,`tagline`,`body`,`footer`],itemShapes:[{prop:`facts`,text:`label`,textAliases:[`key`,`name`,`field`]}],propHints:{"facts[].label":`short field name, e.g. "Founded", "Population", "HQ"`}},newsdigest:{blurb:`A curated news digest — headlines, sources, timestamps, and summaries — always timestamped with "as of" for real data.`,optional:[`icon`,`iconColor`,`topic`,`footer`],itemShapes:[{prop:`items`,text:`headline`,textAliases:[`title`,`header`]}],propHints:{asOf:`ISO date or human-readable, e.g. "June 9, 2026"`,"items[].recency":`"X hours ago"|"X days ago"|date string`}},dictionary:{blurb:`A full dictionary card for a single word — phonetic, part-of-speech, numbered definitions with examples, synonyms, and etymology. Use whenever the ask is "define X", "what does X mean", or "etymology of X".`,optional:[`icon`,`iconColor`,`phonetic`,`etymology`,`footer`],itemShapes:[{prop:`senses`,text:`definition`,textAliases:[`meaning`,`explanation`]}]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={translation:{blurb:`Source text alongside its translation — language pair, full result, optional sentence-by-sentence breakdown with notes.`,optional:[`icon`,`iconColor`,`pairs`,`footer`],itemShapes:[{prop:`pairs`,text:`original`,textAliases:[`source`,`text`,`from`]}]},pronunciation:{blurb:`A pronunciation guide — IPA, syllable breakdown, and phoneme tips to help someone say a word correctly.`,optional:[`icon`,`iconColor`,`ipa`,`syllables`,`tips`,`footer`],stringItems:[`tips`]},gloss:{blurb:`A domain glossary — terms with definitions, cross-references, and an optional domain label.`,optional:[`icon`,`iconColor`,`domain`,`footer`],itemShapes:[{prop:`entries`,text:`definition`,textAliases:[`meaning`,`explanation`,`desc`],requiredFields:[`term`]}]},ipachart:{blurb:`An IPA phonetics reference with a built-in symbol layout — the vowel quadrilateral (tongue height × backness) or the pulmonic consonant grid (place × manner) — with chosen symbols emphasised and a symbol→example-word legend. For "IPA chart", "English vowel sounds", "how this phoneme is articulated".`,optional:[`icon`,`iconColor`,`kind`,`highlight`,`examples`,`caption`,`footer`],itemShapes:[{prop:`examples`,text:`word`,textAliases:[`example`,`sample`],requiredFields:[`symbol`]}],stringItems:[`highlight`],propHints:{kind:`'vowels'|'consonants' — which built-in chart to draw (default 'vowels')`,highlight:`array of IPA symbols to emphasise, e.g. ["iː","ɪ","æ"]; length marks and slashes are ignored when matching`,"examples[].symbol":`the IPA symbol the word demonstrates, e.g. "iː"`,"examples[].word":`an example word containing the sound, e.g. "beat"`}},scriptstroke:{blurb:`A foreign-character writing guide — the glyph on a calligraphy practice grid (米字格/田字格), numbered stroke order, romanization and meaning. When strokes carry SVG paths they draw in sequence with numbered start badges; otherwise the glyph is shown big with an ordered stroke-hint list. For "stroke order of X", "how to write this kanji/hanzi".`,optional:[`icon`,`iconColor`,`grid`,`romanization`,`meaning`,`caption`,`footer`],itemShapes:[{prop:`strokes`,text:`hint`,textAliases:[`description`,`desc`,`step`]}],propHints:{glyph:`the single character being taught, e.g. "木"`,grid:`'tian'|'mi'|'none' — the guide grid (mi = eight lines, tian = centre cross; default 'mi')`,"strokes[].order":`1-based stroke number — the order it is written`,"strokes[].path":`optional SVG path string in a 0..100 grid space (e.g. "M20 35 H80"); the stroke is drawn and its number badge pinned to the path start`,"strokes[].hint":`a short description of the stroke, e.g. "horizontal, left to right"`,romanization:`phonetic reading, e.g. "mù" (pinyin) or "き / モク" (kana)`,meaning:`the character’s meaning, e.g. "tree, wood"`}},phonicsword:{blurb:`A phonics word-decoding card — the word split into tap-to-hear sound chunks (per-grapheme boxes, digraphs/blends as one unit, silent letters greyed), with an optional rhyming-words row.`,optional:[`title`,`icon`,`iconColor`,`rhymes`,`caption`,`footer`],itemShapes:[{prop:`chunks`,text:`text`,textAliases:[`letters`,`grapheme`,`part`]}],stringItems:[`rhymes`],propHints:{"chunks[].kind":`'onset'|'rime'|'grapheme'|'digraph'|'blend'|'silent'`,"chunks[].text":"the letters in this chunk — joined left-to-right, the chunks spell `word`","chunks[].sound":`how the chunk sounds, e.g. '/ʃ/', '/ɪ/'`}},speciescard:{blurb:`A nature field-ID card for a plant or animal — a photo/illustration banner, common + scientific name, an ID field-marks band (size · colour · habitat · range · song · season), a confusion-species strip, and conservation status. For "what bird/flower is this", a field-guide entry.`,optional:[`title`,`icon`,`iconColor`,`scientificName`,`image`,`lookalikes`,`status`,`caption`,`footer`],itemShapes:[{prop:`marks`,text:`label`,textAliases:[`key`,`name`,`field`]}],stringItems:[`lookalikes`],propHints:{commonName:`the everyday name, e.g. "American Robin"`,scientificName:`the Latin binomial, e.g. "Turdus migratorius" (shown italic)`,"marks[].label":`ID dimension, e.g. "Size", "Colour", "Habitat", "Range", "Song", "Season"`,"marks[].value":`the field value, e.g. "23–28 cm", "rusty-orange breast, grey back"`,lookalikes:`array of species it is easily confused with`,status:`conservation status, e.g. "Least concern", "Endangered"`,image:"banner gradient { from, to } with accent vars; add a real photo `src` when available"}},etymtree:{blurb:`Word-origin tree: roots flow in from the left, the focus word sits centre, descendants/cognates branch out to the right. Each entry carries a language-of-origin badge and optional gloss. Use for vocabulary tuition, historical linguistics, GMAT/GRE word-roots prep.`,optional:[`descendants`,`note`,`footer`],propHints:{word:`the focus word whose etymology is shown`,"roots[].form":`ancestral form, e.g. "*pṓds", "lūna"`,"roots[].lang":`language of origin, e.g. "Proto-Indo-European", "Latin", "Old French"`,"roots[].gloss":`short English meaning, e.g. "foot", "moon"`,"descendants[].form":`descendant or cognate form`,"descendants[].lang":`language of this descendant`,"descendants[].gloss":`optional gloss or usage note`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={hazardcard:{blurb:`A GHS chemical hazard / safety-data summary — signal word, hazard pictograms, and the full H-code (hazard) and P-code (precautionary) statement lists. For "is X dangerous", "safety data for X", SDS-style chemical hazard summaries.`,optional:[`icon`,`iconColor`,`cas`,`footer`],itemShapes:[{prop:`hazards`,text:`text`,textAliases:[`statement`,`description`,`desc`]},{prop:`precautions`,text:`text`,textAliases:[`statement`,`description`,`desc`]}],propHints:{cas:`CAS registry number, e.g. "67-64-1"`,signalWord:`'Danger' (most severe) or 'Warning' (less severe) — the single GHS signal word`,pictograms:`GHS pictogram keys that apply: flammable, corrosive, toxic, irritant, oxidizer, healthHazard, environment, explosive, compressedGas`,"hazards[].code":`the H-code, e.g. "H225"`,"hazards[].text":`the hazard statement, e.g. "Highly flammable liquid and vapour"`,"precautions[].code":`the P-code, e.g. "P210"`,"precautions[].text":`the precautionary statement, e.g. "Keep away from heat/sparks/open flames"`}},termbase:{blurb:`A multi-language term-consistency table for translators/localizers — one row per source term, one column per target language, cells flagged preferred/deprecated/avoid. Use for localization QA, terminology glossaries, "how do we say X consistently across languages".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`terms`,text:`term`,textAliases:[`word`,`source`,`label`],children:{prop:`translations`,text:`text`,textAliases:[`translation`,`value`]}}],propHints:{"terms[].translations[].lang":`target language name or code, e.g. "French", "de-DE"`,"terms[].translations[].status":`'preferred'|'deprecated'|'avoid' — omit for a plain, unflagged entry`}},sizecompare:{blurb:`A silhouette-based scale comparison — recognisable body/vehicle/building shapes drawn to real proportion on a shared ground baseline, honest across mixed orientations (a whale's length next to a building's height). For "how big/long/tall is X compared to Y", size-showdown questions.`,optional:[`icon`,`iconColor`,`unit`,`footer`],itemShapes:[{prop:`subjects`,text:`label`,textAliases:[`name`,`item`]}],propHints:{unit:`the unit every length is measured in, e.g. "m", "ft"`,"subjects[].length":"real-world size as a plain number, in `unit`","subjects[].shape":`'whale'|'bus'|'human'|'building'|'generic' — which silhouette to draw`}},baseconversion:{blurb:`A number-system / radix conversion card — one value written out in several bases side by side, digits grouped in fours from the right for readability. For "convert X to binary/hex", number-systems teaching.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`bases`,text:`label`,textAliases:[`name`,`system`,`base`]}],propHints:{value:`the number being converted, shown as the headline figure, e.g. "210"`,"bases[].label":`the number system's name, e.g. "Binary", "Octal", "Decimal", "Hexadecimal"`,"bases[].radix":`the base as a number: 2, 8, 10, 16, …`,"bases[].digits":`the value written in this base, digits only (no "0x"/"0b" prefix), e.g. "11010010" or "D2"`}},historicalperson:{blurb:`A biography profile card — monogram medallion, name + era headline, birth/death dates, a compact life-events strip, and a short legacy paragraph. For "who was X", biography lookups, history-class figure profiles.`,optional:[`icon`,`iconColor`,`era`,`born`,`died`,`knownFor`,`facts`,`lifeEvents`,`legacy`,`footer`],itemShapes:[{prop:`facts`,text:`label`,textAliases:[`key`,`name`,`field`]},{prop:`lifeEvents`,text:`label`,textAliases:[`event`,`title`,`desc`]}],propHints:{era:`the period they're associated with, e.g. "Renaissance", "19th century"`,born:`birth date/place, e.g. "April 15, 1452 — Vinci, Republic of Florence"`,died:`death date/place, e.g. "May 2, 1519 — Amboise, France"`,"lifeEvents[].year":`a year or short date, shown verbatim — never parsed, so "384 BCE" or "c. 1500" work`}},onthisday:{blurb:`A "what happened on this date" fact card — dated events with a bare-year chip, plus a compact Born/Died footer strip. For "what happened on this day", "on this date in history".`,optional:[`icon`,`iconColor`,`born`,`died`,`footer`],itemShapes:[{prop:`events`,text:`label`,textAliases:[`description`,`text`,`headline`]},{prop:`born`,text:`name`,textAliases:[`label`,`person`]},{prop:`died`,text:`name`,textAliases:[`label`,`person`]}],propHints:{date:`the calendar date being covered, e.g. "July 3"`,"events[].year":`the year it happened, shown verbatim (e.g. 1969, "384 BCE")`,"events[].category":`"War"|"Science"|"Culture"|… — a short free-text label`}},countrycard:{blurb:`A single-country deep-dive — flag banner, a capital/population/area/currency field-marks row, official languages, and a short fact list. For "tell me about X country", geography lookups.`,optional:[`icon`,`iconColor`,`flag`,`capital`,`population`,`area`,`officialLanguages`,`currency`,`facts`,`footer`],itemShapes:[{prop:`facts`,text:`label`,textAliases:[`key`,`name`,`field`]}],stringItems:[`officialLanguages`],propHints:{flag:`the flag emoji for the country, e.g. "🇯🇵" — rendered directly, no image needed`,population:`pre-formatted, e.g. "125.7 million"`,area:`pre-formatted, e.g. "377,975 km²"`}},worldgrid:{blurb:`A compact multi-country comparison grid — one tile per country with a flag glyph and a couple of micro capital/currency/language rows. For "compare these countries", regional overviews. Distinct from countrycard's single-country deep-dive.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`countries`,text:`name`,textAliases:[`label`,`country`]}],propHints:{"countries[].flag":`the flag emoji, e.g. "🇧🇷" — rendered directly, no image needed`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={warconflict:{blurb:`A historical conflict overview — color-coded side columns with their leaders, a compact key-battles strip, and an outcome paragraph. For "tell me about this war/conflict", history-class overviews.`,optional:[`icon`,`iconColor`,`dates`,`keyBattles`,`casualties`,`outcome`,`footer`],itemShapes:[{prop:`sides`,text:`name`,textAliases:[`label`,`faction`,`party`]},{prop:`keyBattles`,text:`label`,textAliases:[`name`,`battle`]}],propHints:{dates:`the conflict's date span, e.g. "1861–1865"`,"sides[].color":`var(--presence)|var(--danger)|var(--warning)|var(--text-muted) — tints that side's column; omit to use the default sequence`,"keyBattles[].at":`when/where it happened, e.g. "1863, Gettysburg, PA"`}},posbreakdown:{blurb:`A color-coded parts-of-speech sentence breakdown — the sentence flows as word chips, each underlined and tinted by its word class with a tiny abbreviation (n., v., adj.) beneath, plus a tap-to-spotlight legend of only the classes present. For grammar lessons, ESL teaching, and foreign-language sentence study. Never for phrase-structure syntax trees — use parsetree. Never for word-internal morphology — use morphemebreakdown.`,optional:[`icon`,`iconColor`,`sentence`,`translation`,`footer`],itemShapes:[{prop:`tokens`,text:`word`,textAliases:[`text`,`token`]}],propHints:{"tokens[].word":`the word (or punctuation mark) exactly as it appears in the sentence`,"tokens[].pos":`'noun'|'verb'|'adjective'|'adverb'|'pronoun'|'preposition'|'conjunction'|'determiner'|'interjection'|'punctuation'`,"tokens[].note":`short grammatical gloss, e.g. "past tense", "subject" — footnoted below the sentence`,sentence:`the plain sentence, used as a fallback when tokens are missing`,translation:`the sentence's meaning in another language, shown quietly beneath the flow`}},sparkstat:{blurb:`Big number with inline sparkline showing trend over time.`,optional:[`icon`,`iconColor`,`unit`,`delta`,`deltaDir`,`color`,`footer`]},counter:{blurb:`Animated count-up to a number with label and delta.`,optional:[`icon`,`iconColor`,`prefix`,`suffix`,`decimals`,`delta`,`deltaDir`,`color`,`footer`]},herostat:{blurb:`Extra-large stat with narrative and hoverable trend detail.`,optional:[`icon`,`iconColor`,`unit`,`narrative`,`trend`,`trendDir`,`detail`,`color`,`footer`]},trendtile:{blurb:`Number with arrow, percent delta, and mini sparkbar.`,optional:[`icon`,`iconColor`,`deltaDir`,`color`,`footer`]},scorebadge:{blurb:`A single graded score 0–100 as a circular badge with a letter/grade ring (credit score, health score, quality grade). Never for a plain metric or count — use kpi.`,optional:[`icon`,`iconColor`,`grade`,`caption`,`color`,`components`,`footer`],itemShapes:[{prop:`components`,text:`label`,textAliases:[`name`,`title`]}]},percentilebar:{blurb:`A value placed on a distribution by its PERCENTILE RANK — "you are in the top X%" (test scores, benchmarks, growth charts). Never as a plain progress or completion bar — use progressbar or gauge.`,optional:[`icon`,`iconColor`,`unit`,`lowLabel`,`highLabel`,`color`,`footer`]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={statpair:{blurb:`Two related numbers with connector and computed ratio.`,optional:[`icon`,`iconColor`,`connector`,`ratioLabel`,`footer`]},scorecard:{blurb:`Grid of mini stats (icon, value, trend) that lift on hover.`,optional:[`icon`,`iconColor`,`cols`,`footer`],itemShapes:[{prop:`tiles`,text:`value`,textAliases:[`val`,`stat`,`number`]}]},deltacascade:{blurb:`Sequential value changes flowing to a total with hoverable step detail.`,optional:[`icon`,`iconColor`,`prefix`,`suffix`,`footer`],itemShapes:[{prop:`steps`,text:`label`,textAliases:[`name`,`title`]}]},bulletkpi:{blurb:`Stacked bullet KPIs showing value vs target mini-bars.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`rows`,text:`label`,textAliases:[`name`,`title`]}]},confusionmatrix:{blurb:`An N×N confusion matrix: rows are the actual class, columns the predicted class, and each cell a count heat-shaded by its value (the diagonal = correct predictions, off-diagonal = errors). Class labels sit on both axes, with optional row/column totals and a derived read-out (overall accuracy, or a per-class precision/recall table). The standard classifier-evaluation visual; also fits medical test results (TP/FP/FN/TN) and A/B outcome grids. Keeps cells legible from 2×2 up to ~8×8.`,optional:[`icon`,`iconColor`,`correctColor`,`errorColor`,`showTotals`,`readout`,`actualLabel`,`predictedLabel`,`countLabel`,`footer`],stringItems:[`classes`],propHints:{classes:`class labels in order; row i = actual class[i], column j = predicted class[j]`,matrix:`square N×N integer counts where matrix[i][j] = samples whose ACTUAL class is i and PREDICTED class is j; the diagonal matrix[i][i] is the correct predictions. Real counts only.`,correctColor:`heat color for diagonal (correct) cells, e.g. 'var(--presence)' (default)`,errorColor:`heat color for off-diagonal (error) cells, e.g. 'var(--danger)' (default)`,readout:`'accuracy' (overall % headline) | 'perclass' (precision/recall table) | 'none'`,showTotals:`true to draw a row/column totals strip on the right and bottom edges`,actualLabel:`y-axis (truth) title, default 'Actual'`,predictedLabel:`x-axis (model guess) title, default 'Predicted'`,countLabel:`noun for the accuracy read-out, e.g. 'samples' (default), 'cases', 'emails'`}},kpidashboard:{blurb:`A grid of executive KPI tiles, each a big value with delta and its own inline sparkline — a one-glance metrics board (MRR, churn, NRR, CAC, runway).`,optional:[`title`,`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`tiles`,text:`label`,textAliases:[`name`,`metric`,`title`]}],propHints:{"tiles[].deltaDir":`'up'|'down'|'good' — up/good color positive, down colors negative; use 'good' when a falling value is desirable (e.g. churn down)`,"tiles[].spark":`number[] of raw magnitudes oldest→newest (6–12 points) for the tile sparkline`}},abtestresult:{blurb:`An A/B experiment readout: control vs. variant conversion rate, computed lift, and — only when supplied — a p-value/CI significance read. Use for a launched test result, never a hypothetical comparison.`,optional:[`icon`,`iconColor`,`pValue`,`confidenceInterval`,`significant`,`footer`],propHints:{"control.conversionRate":`fraction 0..1, e.g. 0.084 = 8.4% — never a 0..100 percentage`,"variant.conversionRate":`fraction 0..1, e.g. 0.084 = 8.4% — never a 0..100 percentage`,confidenceInterval:`[low, high] real 95% CI bounds on the relative lift %, same scale as the shown lift (e.g. [9.1, 26.8] for a +18.0% lift) — only pass this when a real interval was computed, never invent one`,significant:`explicit true/false call on statistical significance; omit to let the badge fall back to pValue < 0.05, or omit both for no badge`}},powersample:{blurb:`Statistical power / sample-size calculator: a headline "n per group for X% power" solved from whichever of effect size, alpha, power, or a caller-given n is missing, plus an optional power-vs-n line (only drawn from real supplied points). Use before an experiment ("how many do we need") or after ("was this adequately powered").`,optional:[`title`,`icon`,`iconColor`,`alpha`,`power`,`requiredN`,`curve`,`footer`],propHints:{effectSize:`standardized effect size (Cohen's d) the test should detect, e.g. 0.5 for a "medium" effect — magnitude only, sign is cosmetic`,alpha:`two-sided significance level, 0..1 (default 0.05)`,power:`target power to design for, 0..1 (default 0.8) — omit requiredN to have this solved into a sample size`,requiredN:`a caller-already-computed sample size per group; when given it is trusted, and power is read off it instead of solved for`,curve:`real (n, power) points from an actual power analysis, e.g. [{n:200,power:0.42},{n:800,power:0.91}] — plotted verbatim as a line with the resolved (n, power) marked; omit entirely rather than invent points`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={inventoryreorder:{blurb:`A supply-chain reorder dashboard: one row per SKU, a stock-level bar over a red/amber/green safety-stock/reorder-point track with a reorder tick — use for inventory health, never a plain progress bar.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`item`,`title`]}],propHints:{"items[].sku":`the stock-keeping unit code, e.g. "SKU-4471"`,"items[].level":`current stock on hand — a real count, never a percentage`,"items[].reorderPoint":`the stock level that should trigger a purchase order`,"items[].safetyStock":`the minimum buffer never to dip below; omit to default to 0`,"items[].max":`the track's full-scale ceiling (warehouse capacity or a comfortable max)`,"items[].leadTimeDays":`supplier lead time in days; omit when unknown`}},boardgamescore:{blurb:`A tabletop scorepad: players × rounds grid like a physical score sheet, running total highlighted, current leader called out. Use for a game night or tournament tally, never a generic leaderboard.`,optional:[`icon`,`iconColor`,`game`,`rounds`,`footer`],itemShapes:[{prop:`players`,text:`name`,textAliases:[`player`,`label`]}],propHints:{"players[].roundScores":`number[], one entry per round played so far, oldest first — real scores only`,"players[].total":`the running total; when omitted it is summed from roundScores instead`,rounds:`total rounds to show; omit to size the grid to the longest roundScores`}},cvssscorecard:{blurb:`A CVSS vulnerability severity scorecard: a radial 0–10 base-score gauge colored by severity band, beside a compact chip row for the vector components (AV, AC, PR, UI, S, C, I, A). Use for a specific reported vulnerability, never a generic risk score.`,optional:[`icon`,`iconColor`,`vector`,`cve`,`footer`],itemShapes:[{prop:`vector`,text:`label`,textAliases:[`metric`,`name`,`component`]}],propHints:{baseScore:`the CVSS base score, 0.0–10.0 — a real reported score, never estimated`,severity:`'none'|'low'|'medium'|'high'|'critical' — the CVSS qualitative rating band`,"vector[].label":`the metric abbreviation, e.g. "AV" (Attack Vector), "PR" (Privileges Required)`,"vector[].value":`the metric's value, e.g. "Network", "Low", "None"`,cve:`the CVE identifier, e.g. "CVE-2024-21306"; omit when unknown`}},ridgeplot:{blurb:`A ridge plot (joyplot): one density curve per category, stacked with a slight vertical overlap so shapes are easy to compare. Use to compare distribution SHAPE across 3+ groups, never a single distribution — use distributioncurve for that.`,optional:[`icon`,`iconColor`,`overlap`,`footer`],itemShapes:[{prop:`categories`,text:`label`,textAliases:[`name`,`series`,`group`]}],propHints:{"categories[].curve":`number[], ≥2 real, non-negative density/frequency samples evenly spaced along a shared x-axis — plotted verbatim, never smoothed or fit`,overlap:`0..1, how far each ridge's peak rises into the row above (default 0.55); 0 keeps ridges flush, 1 gives heavy overlap`}},ecdf:{blurb:`An empirical CDF: sorts real sample values and draws the actual stepped 0→1 cumulative-probability function. Use for a real, honest look at a distribution's spread (percentiles, tails) — never a smoothed density; use distributioncurve for that.`,optional:[`icon`,`iconColor`,`unit`,`color`,`footer`],propHints:{values:`number[], the raw real sample values — sorted client-side into the real step function, never fit or smoothed`}},forestplot:{blurb:`A meta-analysis forest plot: one row per study (square marker sized by weight over its 95% CI whisker) on a shared axis with a dashed null line, plus a pooled summary diamond whose width is the pooled CI — computed as a fixed-effect inverse-variance pool when not supplied. For evidence synthesis across studies/experiments in an educational or research-methods frame. Never for simple group means with error bars — use errorbars.`,optional:[`title`,`icon`,`iconColor`,`measure`,`pooled`,`heterogeneity`,`favorsLeft`,`favorsRight`,`footer`],itemShapes:[{prop:`studies`,text:`label`,textAliases:[`name`,`study`,`trial`],requiredFields:[`effect`,`ciLow`,`ciHigh`]}],propHints:{measure:`'OR' | 'RR' | 'HR' | 'MD' | 'SMD' — ratio measures (OR/RR/HR) plot on a log axis with the null line at 1; difference measures (MD/SMD) plot linearly with the null at 0. Default 'OR'.`,"studies[].effect":`the point estimate on the measure's natural scale (an OR of 0.82, an MD of −3.1) — real reported values only`,"studies[].ciLow":`lower 95% interval bound, same scale as effect`,"studies[].ciHigh":`upper 95% interval bound, same scale as effect`,"studies[].weight":`percent weight 0..100 (sizes the square marker); omit to size by the inverse-variance weight recovered from the CI`,"studies[].year":`publication year, shown after the label`,pooled:`{ effect, ciLow, ciHigh, label? } — a caller-computed summary diamond; omit to have a fixed-effect inverse-variance pool computed from the study CIs`,heterogeneity:`a real reported heterogeneity readout, e.g. 'I² = 34%' — never invented`,favorsLeft:`left axis-end reading, e.g. 'Favors treatment'`,favorsRight:`right axis-end reading, e.g. 'Favors control'`}},a11yaudit:{blurb:`Accessibility audit: a11y checks each marked pass/warn/fail with notes and an optional score.`,optional:[`icon`,`iconColor`,`score`,`footer`],itemShapes:[{prop:`checks`,text:`label`,textAliases:[`name`,`title`,`check`]}],propHints:{"checks[].status":`'pass'|'warn'|'fail' (drives the coloured badge: pass=green, warn=amber, fail=red)`,score:`optional overall score string, e.g. '82/100' or 'AA'`}},progressbar:{blurb:`Multi-segment milestone bar showing progress through workflow stages.`,optional:[`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`segments`,text:`label`,textAliases:[`name`,`title`]}]}};export{e as D};