@mavea/mavea 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +1 -7
  3. package/TERMS.md +9 -3
  4. package/dist/.vite/manifest.json +610 -540
  5. package/dist/assets/{AnnotationLayer-Bh1yiSAK.js → AnnotationLayer-HanjTRYY.js} +1 -1
  6. package/dist/assets/{AppCommandPalette-DS4sLY_K.js → AppCommandPalette-DBiuHUNL.js} +1 -1
  7. package/dist/assets/{CheckLogRail-onH7DaxW.js → CheckLogRail-CfoGgTqv.js} +1 -1
  8. package/dist/assets/{ConversationVideoStudio-adb7legp.js → ConversationVideoStudio-CEi_cgBR.js} +1 -1
  9. package/dist/assets/{CourseLessonReader-CkzViEij.js → CourseLessonReader-CaLT_Y6N.js} +2 -2
  10. package/dist/assets/{CoursesApp-B0HFM8Al.js → CoursesApp-IfWCeml5.js} +2 -2
  11. package/dist/assets/{DashPresent-BdOJ7F9D.js → DashPresent-T7I-lAng.js} +1 -1
  12. package/dist/assets/{DashboardDetail-Chrpi1Yk.js → DashboardDetail-BhRSDenD.js} +2 -2
  13. package/dist/assets/{DashboardLoopGate-B01Hpm7O.js → DashboardLoopGate-DBVAR7IS.js} +2 -2
  14. package/dist/assets/DashboardLoopRuntime-B55z8L4b.js +1 -0
  15. package/dist/assets/{DashboardsApp--jjj-GVX.js → DashboardsApp-C_awJ3hM.js} +2 -2
  16. package/dist/assets/{DeepZoomApp-BpQbKTjc.js → DeepZoomApp-C-66OasV.js} +1 -1
  17. package/dist/assets/{DelegatePanel-e4y0CJsn.js → DelegatePanel-DaJTDkYu.js} +1 -1
  18. package/dist/assets/{DemoGallery-DF1ShRG4.js → DemoGallery-B9F7SUzp.js} +1 -1
  19. package/dist/assets/{DropSelect-D3Q9Su_x.js → DropSelect-IBjV5Ol1.js} +1 -1
  20. package/dist/assets/{ExportModal-DkmyBpeN.js → ExportModal-gckBiikq.js} +1 -1
  21. package/dist/assets/{ExtractionPreview-C6F1q3qG.js → ExtractionPreview-DDOkCH9u.js} +1 -1
  22. package/dist/assets/FallbackCard-CUe6i-zT.js +1 -0
  23. package/dist/assets/{FeatureUseNotice-CCI4mM39.js → FeatureUseNotice-BfnZH8Vt.js} +1 -1
  24. package/dist/assets/{FlagshipCommandPalette-BkjvGrKT.js → FlagshipCommandPalette-CYQdl3Zu.js} +1 -1
  25. package/dist/assets/{FlagshipShowcase-Dx2noFrP.js → FlagshipShowcase-CFMmbeff.js} +1 -1
  26. package/dist/assets/{FlashcardsApp-C1TeLlkY.js → FlashcardsApp-KJ1bmlbp.js} +1 -1
  27. package/dist/assets/GalleryApp-B4KBdNyu.css +1 -0
  28. package/dist/assets/GalleryApp-Dh8Nc_So.js +2 -0
  29. package/dist/assets/{HonestByDesign-DlRrxgrO.js → HonestByDesign-C3LTj4Bx.js} +1 -1
  30. package/dist/assets/{HowItWorks-BM2yn2dq.js → HowItWorks-C5Dqqvl-.js} +1 -1
  31. package/dist/assets/{LegalApp-DPfTD0jz.js → LegalApp-DYVJIUyF.js} +1 -1
  32. package/dist/assets/{LegalMarkdownDocument-DJgwmK1q.js → LegalMarkdownDocument-CbuQ-pLN.js} +1 -1
  33. package/dist/assets/{LegalPageShell-DuIwSVSJ.js → LegalPageShell-CoEyiZGz.js} +1 -1
  34. package/dist/assets/{LibraryOverlay-DsLhiJzF.js → LibraryOverlay-TQnxY9R8.js} +1 -1
  35. package/dist/assets/LiveApp-DRnphsFA.js +79 -0
  36. package/dist/assets/{LiveApp-CEaISHEZ.css → LiveApp-Dc7Mk5oS.css} +1 -1
  37. package/dist/assets/{LiveSettings-CDHQnEtF.js → LiveSettings-Cz3XSqv8.js} +3 -3
  38. package/dist/assets/{MindMapViewerDrawer-C3BgiubE.js → MindMapViewerDrawer-AUJlLC2R.js} +1 -1
  39. package/dist/assets/{MindShape-DVlgSR1B.js → MindShape-BbuVOTaR.js} +1 -1
  40. package/dist/assets/{PinToDashboard-Dd_egidB.js → PinToDashboard-BdXI7oo9.js} +1 -1
  41. package/dist/assets/{PlanReview-wOsBpofo.js → PlanReview-CGRvSRAt.js} +1 -1
  42. package/dist/assets/{PresentationDeck-BSMzp5T9.js → PresentationDeck-CoPmOr2f.js} +1 -1
  43. package/dist/assets/{PrismApp-DbbDNVpy.js → PrismApp-DPECS285.js} +2 -2
  44. package/dist/assets/{PrismBriefingPlayer-B1_ziOwl.js → PrismBriefingPlayer-BvpG7oZs.js} +2 -2
  45. package/dist/assets/{PrismOverlay-DLxvsh9l.js → PrismOverlay-c8rcvt4V.js} +3 -3
  46. package/dist/assets/{PrismWorkbench-ZlhI7Mhw.js → PrismWorkbench-BEaD7Arj.js} +1 -1
  47. package/dist/assets/{PrivacyApp-Ki_5bM9Z.js → PrivacyApp-_O_MR088.js} +1 -1
  48. package/dist/assets/{ReplayCard-WKBKeSKc.js → ReplayCard-IN-ilb2E.js} +2 -2
  49. package/dist/assets/{ReplayOverlay-PFSJv540.js → ReplayOverlay-ZRjFP-zf.js} +1 -1
  50. package/dist/assets/{RippleApp-DqVyZYKV.js → RippleApp-D_Gd8Lw8.js} +2 -2
  51. package/dist/assets/{RippleOverlay-4McJCSV8.js → RippleOverlay-vP2KxTiI.js} +2 -2
  52. package/dist/assets/{SeeDontRead-gARjJuF7.js → SeeDontRead-BmUyUai5.js} +1 -1
  53. package/dist/assets/{ShareModal-C5HVVMtQ.js → ShareModal-_KYCohqO.js} +2 -2
  54. package/dist/assets/{ShipCourse-BUm4TKUk.js → ShipCourse--ajDej06.js} +1 -1
  55. package/dist/assets/{SignatureLoop-CYspJuij.js → SignatureLoop-DDw2gtQ_.js} +1 -1
  56. package/dist/assets/{SynthesisApp-BNhF9aJ2.js → SynthesisApp-CilzogOF.js} +2 -2
  57. package/dist/assets/{SynthesisOverlay-Bvwdc8uQ.js → SynthesisOverlay-CAK5h0hB.js} +1 -1
  58. package/dist/assets/{TemplatePicker-DBa4lkpf.js → TemplatePicker-3w18ViSc.js} +1 -1
  59. package/dist/assets/{TermsApp-BvwDtgIz.js → TermsApp-BfTGOTq6.js} +10 -4
  60. package/dist/assets/TopicCanvas-DSCNWNjv.js +2 -0
  61. package/dist/assets/TopicCanvas-sGuo7pnQ.css +1 -0
  62. package/dist/assets/{TourPrism-CCjys3-x.js → TourPrism-Y47m-KGq.js} +1 -1
  63. package/dist/assets/{TrackerTile-B4j5qtop.js → TrackerTile-LXFQXcvH.js} +2 -2
  64. package/dist/assets/{TwoSurfaces-fGm1MJrD.js → TwoSurfaces-CSpKrgfJ.js} +1 -1
  65. package/dist/assets/{WorldOverlay-JOp1rLyU.js → WorldOverlay-D5FWgYe3.js} +2 -2
  66. package/dist/assets/{WowFeatures-D5dJvp9W.js → WowFeatures-e6mkftpD.js} +1 -1
  67. package/dist/assets/{ZoomDeck-DYmkT0TA.js → ZoomDeck-CC9zXPxF.js} +1 -1
  68. package/dist/assets/{audioTrack-BJ2D_nuy.js → audioTrack-w1tZwSoU.js} +1 -1
  69. package/dist/assets/{backup-DkCsHNEE.js → backup-AymOkasb.js} +1 -1
  70. package/dist/assets/briefs-5oOobpyS.js +1 -0
  71. package/dist/assets/canvas-BRGFkCD-.js +1 -0
  72. package/dist/assets/{capture-Y6Qm8zCN.js → capture-Bomj_Egy.js} +1 -1
  73. package/dist/assets/catalog-vLsIS_Na.js +1 -0
  74. package/dist/assets/{confirmAdd-D-TTCQ31.js → confirmAdd-CUFiPNWz.js} +1 -1
  75. package/dist/assets/{dashboardEvents-MzCzak6K.js → dashboardEvents-PktCbV72.js} +1 -1
  76. package/dist/assets/{deepen-FZiVqiEc.js → deepen-Dz4yTyJs.js} +1 -1
  77. package/dist/assets/{effort-BftNJCCV.js → effort-BKGxLYoq.js} +1 -1
  78. package/dist/assets/facts-CNQz8OQz.js +1 -0
  79. package/dist/assets/{generateBeats-Dqtfd8HC.js → generateBeats-BjWC2fwl.js} +1 -1
  80. package/dist/assets/{generateLive-B7nlaqz8.js → generateLive-BLajGcNK.js} +1 -1
  81. package/dist/assets/{index-Db-FgYxX.js → index-CKRjGbeR.js} +3 -3
  82. package/dist/assets/{kokoro-yB7iU_JU.js → kokoro-B-rc224u.js} +1 -1
  83. package/dist/assets/{lens-DyGK7Owa.js → lens-Ba83fBmq.js} +1 -1
  84. package/dist/assets/liveSchema-eKgFc5D0.js +127 -0
  85. package/dist/assets/loader-BiYFMeRS.js +2 -0
  86. package/dist/assets/notes-nfocTnUv.js +1 -0
  87. package/dist/assets/overflowAudit-DQLYFrM8.js +1 -0
  88. package/dist/assets/{perfProbe-DrOeB7yd.js → perfProbe-BqMK4N56.js} +1 -1
  89. package/dist/assets/{pin-C5_s4Ju5.js → pin-IyE46GaQ.js} +1 -1
  90. package/dist/assets/{portal-TqJbr2rR.js → portal-C2b5NoMN.js} +1 -1
  91. package/dist/assets/{prewarm-Bt5X_9CM.js → prewarm-Pvdu5Jt0.js} +1 -1
  92. package/dist/assets/{quietHours-LtXDl4-v.js → quietHours-lWcjQ2Iu.js} +1 -1
  93. package/dist/assets/registry-B3HqLZyO.css +1 -0
  94. package/dist/assets/registry-BD1Zyd46.js +1 -0
  95. package/dist/assets/registry-BJFqryP_.js +1 -0
  96. package/dist/assets/registry-BTUHr4mQ.js +1 -0
  97. package/dist/assets/registry-BZsqAOnQ.css +1 -0
  98. package/dist/assets/registry-BiT0eNZb.js +2 -0
  99. package/dist/assets/registry-BoLdoGPW.js +1 -0
  100. package/dist/assets/registry-CLHP_r7X.js +1 -0
  101. package/dist/assets/registry-CT85vG1M.js +1 -0
  102. package/dist/assets/{registry-CIcGBgtK.css → registry-CnNL4jmR.css} +1 -1
  103. package/dist/assets/{registry-BHDUu15I.js → registry-CnmuVlAA.js} +1 -1
  104. package/dist/assets/registry-CyPRooIp.css +1 -0
  105. package/dist/assets/registry-D5O0Ptw_.css +1 -0
  106. package/dist/assets/registry-DOctfuxc.js +1 -0
  107. package/dist/assets/{registry-BZuT2Epw.css → registry-DhWVSz_J.css} +1 -1
  108. package/dist/assets/{registry-BPLbZIVz.js → registry-OUL5YJry.js} +1 -1
  109. package/dist/assets/registry-brX673Dg.css +1 -0
  110. package/dist/assets/{registry-C4Yh05pk.js → registry-nCDSZOmZ.js} +1 -1
  111. package/dist/assets/registry-sT9NoG1k.css +1 -0
  112. package/dist/assets/registry-yzYj0SNk.css +1 -0
  113. package/dist/assets/{relate-CCma73G9.js → relate-ZHm-ZvaR.js} +1 -1
  114. package/dist/assets/{replay-dMDmsTaD.js → replay-DBeCo_vn.js} +1 -1
  115. package/dist/assets/select-CejTsgpx.js +3 -0
  116. package/dist/assets/shapes-BwXCYTlu.js +1 -0
  117. package/dist/assets/shard001-BrI-88cO.js +1 -0
  118. package/dist/assets/shard002-CVTdbXod.js +1 -0
  119. package/dist/assets/shard003-Bilw1tcB.js +1 -0
  120. package/dist/assets/shard004-Cq0Or-2a.js +1 -0
  121. package/dist/assets/shard005-Wh3WypcW.js +1 -0
  122. package/dist/assets/shard006-BAUUhTjB.js +1 -0
  123. package/dist/assets/shard007-DYMH8Yxn.js +1 -0
  124. package/dist/assets/shard008-DsrV7tH6.js +1 -0
  125. package/dist/assets/shard009-Bsf_hKwR.js +1 -0
  126. package/dist/assets/shard010-B5P3ny1k.js +1 -0
  127. package/dist/assets/shard011-BgeG9-or.js +1 -0
  128. package/dist/assets/shard012-BDkbj6cq.js +1 -0
  129. package/dist/assets/shard013-G23LG7Fa.js +1 -0
  130. package/dist/assets/shard014-CnDxCS2j.js +1 -0
  131. package/dist/assets/shard015-JvmiIIrG.js +1 -0
  132. package/dist/assets/shard016-BVcRKptB.js +1 -0
  133. package/dist/assets/shard017-DrpF6FaE.js +1 -0
  134. package/dist/assets/shard018-Bi11C9yu.js +1 -0
  135. package/dist/assets/shard019-QyeKtIb0.js +1 -0
  136. package/dist/assets/shard020-Djc1cf5i.js +1 -0
  137. package/dist/assets/shard021-D2RM4FCA.js +1 -0
  138. package/dist/assets/shard022-DRT0Qsp3.js +1 -0
  139. package/dist/assets/shard023-COM71H0n.js +1 -0
  140. package/dist/assets/shard024-DEnCOj6l.js +1 -0
  141. package/dist/assets/shard025-DHxYqsae.js +1 -0
  142. package/dist/assets/shard026-BIgdfcha.js +1 -0
  143. package/dist/assets/shard027-CvJzY_e0.js +1 -0
  144. package/dist/assets/shard028-57qhg2sc.js +1 -0
  145. package/dist/assets/shard029-Dx2Qnz9G.js +1 -0
  146. package/dist/assets/shard030-CtC4LpQR.js +1 -0
  147. package/dist/assets/shard031-jLIDhN2C.js +1 -0
  148. package/dist/assets/shard032-BDQTeOZV.js +1 -0
  149. package/dist/assets/shard033-955G5ec6.js +1 -0
  150. package/dist/assets/shard034-Bu3aEL9i.js +1 -0
  151. package/dist/assets/shard035-B2E-tzQZ.js +1 -0
  152. package/dist/assets/shard036-BEyPFMoV.js +1 -0
  153. package/dist/assets/shard037-CFQfstFa.js +1 -0
  154. package/dist/assets/shard038-C3QlFW5S.js +1 -0
  155. package/dist/assets/shard039-DFpQvV8e.js +1 -0
  156. package/dist/assets/shard040-I3SaNaKO.js +1 -0
  157. package/dist/assets/shard041-B1UVtmcS.js +1 -0
  158. package/dist/assets/shard042-DGJ4rHUt.js +1 -0
  159. package/dist/assets/shard043-BCie8K9U.js +1 -0
  160. package/dist/assets/shard044-DeFpPsR0.js +1 -0
  161. package/dist/assets/{shard043-BKoTEB-H.js → shard045-COwX5PHB.js} +1 -1
  162. package/dist/assets/shard046-CDOiSCGB.js +1 -0
  163. package/dist/assets/shard047-CuL2iVAe.js +1 -0
  164. package/dist/assets/shard048-B7z0WHO6.js +1 -0
  165. package/dist/assets/shard049-D1yDablJ.js +1 -0
  166. package/dist/assets/shard050-DJi3AgeT.js +1 -0
  167. package/dist/assets/shard051-D_2ipfUr.js +1 -0
  168. package/dist/assets/shard052-1aGgWZdd.js +1 -0
  169. package/dist/assets/shard053-Bjwa0Og4.js +1 -0
  170. package/dist/assets/shard054-Cx_GAk3v.js +1 -0
  171. package/dist/assets/shard055-LaeOD3V5.js +1 -0
  172. package/dist/assets/shard056-CAArZwW0.js +1 -0
  173. package/dist/assets/shard057-CM8eSRQk.js +1 -0
  174. package/dist/assets/shard058-QRpDl4Vs.js +1 -0
  175. package/dist/assets/shard059-DkY7CQm3.js +1 -0
  176. package/dist/assets/shard060-BVCgf7o0.js +1 -0
  177. package/dist/assets/shard061-93aGtdrX.js +1 -0
  178. package/dist/assets/shard062-rJE9X1_I.js +1 -0
  179. package/dist/assets/shard063-Co_V_D1g.js +1 -0
  180. package/dist/assets/{shard062-BJ8OX6CJ.js → shard064-C9A8iNiq.js} +1 -1
  181. package/dist/assets/shard065-CpmX_yt1.js +1 -0
  182. package/dist/assets/shard066-C_uen3Ub.js +1 -0
  183. package/dist/assets/shard067-Dl5k0N1Z.js +1 -0
  184. package/dist/assets/shard068-DLIIO7yh.js +1 -0
  185. package/dist/assets/shard069-D15zOFva.js +1 -0
  186. package/dist/assets/shard070-BwHL1JLg.js +1 -0
  187. package/dist/assets/shard071-BFQhwU3I.js +1 -0
  188. package/dist/assets/shard072-DC9v9Ysb.js +1 -0
  189. package/dist/assets/shard073-CicaGoa8.js +1 -0
  190. package/dist/assets/shard074-BvwBlB0R.js +1 -0
  191. package/dist/assets/shard075-BDKPICyR.js +1 -0
  192. package/dist/assets/shard076-COQxCeXV.js +1 -0
  193. package/dist/assets/{shard076-DZHs0uzd.js → shard076-b5-2mnEN.js} +1 -1
  194. package/dist/assets/shard077-DGa0bRNk.js +1 -0
  195. package/dist/assets/shard077-wv2mA5w5.js +1 -0
  196. package/dist/assets/shard078-CI97pFkb.js +1 -0
  197. package/dist/assets/shard078-D64eVQuV.js +1 -0
  198. package/dist/assets/{useDashboardLoop-Cnxmf7wU.js → useDashboardLoop-SPlr1Mrm.js} +3 -3
  199. package/dist/assets/{walkSync-D6leFb_u.js → walkSync-BtO3jsqQ.js} +1 -1
  200. package/dist/index.html +1 -1
  201. package/dist/legal/TERMS.md +9 -3
  202. package/package.json +1 -1
  203. package/dist/assets/DashboardLoopRuntime-BcdZtIgH.js +0 -1
  204. package/dist/assets/FallbackCard-ap_4wOfj.js +0 -1
  205. package/dist/assets/GalleryApp-7oBldBKU.js +0 -1
  206. package/dist/assets/GalleryApp-B1CB3_81.css +0 -1
  207. package/dist/assets/LiveApp-DNYYimuo.js +0 -79
  208. package/dist/assets/TopicCanvas-Cwc6-K3q.js +0 -2
  209. package/dist/assets/TopicCanvas-DWTm611H.css +0 -1
  210. package/dist/assets/canvas-CYrbzF43.js +0 -1
  211. package/dist/assets/catalog-CRekRbKO.js +0 -1
  212. package/dist/assets/facts-BUGuVUIc.js +0 -1
  213. package/dist/assets/liveSchema-Z_39HuDI.js +0 -125
  214. package/dist/assets/loader-Ciz6XbG-.js +0 -2
  215. package/dist/assets/notes-CEloxKQ3.js +0 -1
  216. package/dist/assets/registry-B5S3brjM.css +0 -1
  217. package/dist/assets/registry-BAoRB8rd.css +0 -1
  218. package/dist/assets/registry-B_wlsfxh.js +0 -1
  219. package/dist/assets/registry-BwlvYVHq.js +0 -2
  220. package/dist/assets/registry-BxkAuBx8.js +0 -1
  221. package/dist/assets/registry-C3ezxLR3.css +0 -1
  222. package/dist/assets/registry-CfIJ9dJS.js +0 -1
  223. package/dist/assets/registry-CwRTUk0R.js +0 -1
  224. package/dist/assets/registry-Dbe9TQPw.css +0 -1
  225. package/dist/assets/registry-S3j4OpCH.js +0 -1
  226. package/dist/assets/registry-YrewlFlo.js +0 -1
  227. package/dist/assets/registry-dmR14XnY.css +0 -1
  228. package/dist/assets/registry-twSIyxJQ.css +0 -1
  229. package/dist/assets/select-BuqyXI8k.js +0 -3
  230. package/dist/assets/shapes-BwoDrn09.js +0 -1
  231. package/dist/assets/shard001-gQEQs7_F.js +0 -1
  232. package/dist/assets/shard002-DbDas-W-.js +0 -1
  233. package/dist/assets/shard003-DxMszG4_.js +0 -1
  234. package/dist/assets/shard004-DZMpLBw1.js +0 -1
  235. package/dist/assets/shard005-Dp5TM33O.js +0 -1
  236. package/dist/assets/shard006-DpJfkjmW.js +0 -1
  237. package/dist/assets/shard007-CIQN8OfZ.js +0 -1
  238. package/dist/assets/shard008-BFiyL7r6.js +0 -1
  239. package/dist/assets/shard009-0s30Tkk9.js +0 -1
  240. package/dist/assets/shard010-DPhgF5ck.js +0 -1
  241. package/dist/assets/shard011-C2jVsC25.js +0 -1
  242. package/dist/assets/shard012-DYtN5yzJ.js +0 -1
  243. package/dist/assets/shard013-1D6_Qy9C.js +0 -1
  244. package/dist/assets/shard014-D8s7GHnm.js +0 -1
  245. package/dist/assets/shard015-16W6KgnL.js +0 -1
  246. package/dist/assets/shard016-B4PpWmro.js +0 -1
  247. package/dist/assets/shard017-BO1sA5b3.js +0 -1
  248. package/dist/assets/shard018-D4gn8z25.js +0 -1
  249. package/dist/assets/shard019-vSbfaqRA.js +0 -1
  250. package/dist/assets/shard020-DwbHP8bp.js +0 -1
  251. package/dist/assets/shard021-BhEyVVAL.js +0 -1
  252. package/dist/assets/shard022-BdT7zFy3.js +0 -1
  253. package/dist/assets/shard023-Dga_NQcm.js +0 -1
  254. package/dist/assets/shard024-CXHofcxc.js +0 -1
  255. package/dist/assets/shard025-a4CQKYw1.js +0 -1
  256. package/dist/assets/shard026-0rhLKfDL.js +0 -1
  257. package/dist/assets/shard027-C9GMfOtn.js +0 -1
  258. package/dist/assets/shard028-D9__rPnw.js +0 -1
  259. package/dist/assets/shard029-BSdYKGgG.js +0 -1
  260. package/dist/assets/shard030-DceOU7pS.js +0 -1
  261. package/dist/assets/shard031-C6_p076r.js +0 -1
  262. package/dist/assets/shard032-Cah16sJi.js +0 -1
  263. package/dist/assets/shard033-D-iobGzc.js +0 -1
  264. package/dist/assets/shard034-DIyfCKl8.js +0 -1
  265. package/dist/assets/shard035-BHWs8v0a.js +0 -1
  266. package/dist/assets/shard036-AhOPHqzq.js +0 -1
  267. package/dist/assets/shard037-CuAGDOOu.js +0 -1
  268. package/dist/assets/shard038-CYdtnPjK.js +0 -1
  269. package/dist/assets/shard039-DgvXKOyi.js +0 -1
  270. package/dist/assets/shard040-DO012waT.js +0 -1
  271. package/dist/assets/shard041-BeUicA1R.js +0 -1
  272. package/dist/assets/shard042-D2zbq14A.js +0 -1
  273. package/dist/assets/shard044-bmYKfH3A.js +0 -1
  274. package/dist/assets/shard045-i_R1olD9.js +0 -1
  275. package/dist/assets/shard046-CFk2L0GQ.js +0 -1
  276. package/dist/assets/shard047-pjHCnVaT.js +0 -1
  277. package/dist/assets/shard048-Cc7tGz6R.js +0 -1
  278. package/dist/assets/shard049-C9eoD-6Z.js +0 -1
  279. package/dist/assets/shard050-V3c_ZDrB.js +0 -1
  280. package/dist/assets/shard051-D1ISwZzf.js +0 -1
  281. package/dist/assets/shard052-Dy09xx3S.js +0 -1
  282. package/dist/assets/shard053-Bi4Z4cwW.js +0 -1
  283. package/dist/assets/shard054-CNzJxw2V.js +0 -1
  284. package/dist/assets/shard055-D2NJeMN1.js +0 -1
  285. package/dist/assets/shard056-sSFMbxXN.js +0 -1
  286. package/dist/assets/shard057-DhNK5nyZ.js +0 -1
  287. package/dist/assets/shard058-Du4SjxeD.js +0 -1
  288. package/dist/assets/shard059-fGiLnJzG.js +0 -1
  289. package/dist/assets/shard060-l84MDY2t.js +0 -1
  290. package/dist/assets/shard061-B3aIa7Aa.js +0 -1
  291. package/dist/assets/shard063-CMo-7Qit.js +0 -1
  292. package/dist/assets/shard064-B0EEOnfG.js +0 -1
  293. package/dist/assets/shard065-D-StlUHp.js +0 -1
  294. package/dist/assets/shard066-C2edvdvh.js +0 -1
  295. package/dist/assets/shard067-DFcuVhZm.js +0 -1
  296. package/dist/assets/shard068-BN8DM8JZ.js +0 -1
  297. package/dist/assets/shard069-i464K77p.js +0 -1
  298. package/dist/assets/shard070-BmNyRhxw.js +0 -1
  299. package/dist/assets/shard071-BPVvR8GH.js +0 -1
  300. package/dist/assets/shard072-Bal_0d9L.js +0 -1
  301. package/dist/assets/shard073-CBQu62kt.js +0 -1
  302. package/dist/assets/shard074-D5BRae0w.js +0 -1
  303. package/dist/assets/shard075-DtFvcBnZ.js +0 -1
  304. package/docs/media/go-hub.jpg +0 -0
  305. /package/dist/assets/{registry-Ci65uThi.js → registry-C4RNoF_2.js} +0 -0
  306. /package/dist/assets/{registry-Bjf2Ggs6.js → registry-CbKXa68-.js} +0 -0
  307. /package/dist/assets/{registry-Di1fTdpi.js → registry-Cdk7NOiD.js} +0 -0
@@ -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. The card lists every marker by name beside the map, numbered to its pin, so `detail` is where a street address or a one-line note belongs — it is rendered, not hidden. 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`],itemShapes:[{prop:`swatches`,requiredFields:[`hex`]}]},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};
@@ -1 +1 @@
1
- var e={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`]}]},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`]}]}};export{e as D};
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`],itemShapes:[{prop:`roots`,requiredFields:[`form`,`lang`]},{prop:`descendants`,requiredFields:[`form`,`lang`]}],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`}},distinctioncard:{blurb:`The answer to "what's the difference between X and Y", "how is X different from Y", "is it X or Y", or "I keep confusing X and Y — which is which": two or three easily-confused terms such as affect/effect, weather/climate, HTTP/HTTPS, apartment/condo. Each term gets a panel with its gist and a concrete in-context example, and beneath them, as the card's anchor, the single discriminating rule that tells them apart, plus the mistake people actually make. Pick comparematrix instead when the answer is many attributes across many options, venn for set membership and counts, and gloss/deflist when the terms are just defined independently with nothing separating them.`,optional:[`icon`,`iconColor`,`discriminatorLabel`,`commonMistake`,`footer`],itemShapes:[{prop:`terms`,text:`term`,textAliases:[`name`,`label`,`word`],requiredFields:[`gist`]}],propHints:{discriminator:`the ONE test that tells them apart, in a single sentence, e.g. "If you can swap in 'influence', it's affect; if you can swap in 'result', it's effect."`,discriminatorLabel:`label above the rule; defaults to "The test"`,"terms[].gist":`one line on what this term actually is`,"terms[].example":`a concrete usage showing it in context, e.g. "The rain affected the crops."`,"terms[].tag":`a short classifier beside the term, e.g. "verb", "encrypted", "long-run"`,"terms[].color":`var(--presence)|var(--insight)|var(--warning)|var(--danger) — omit to use the default sequence`,commonMistake:`the mix-up people actually make, in one line`}},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`]}]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={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`]},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`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={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`}},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'`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={progressbar:{blurb:`Multi-segment milestone bar showing progress through workflow stages.`,optional:[`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`segments`,text:`label`,textAliases:[`name`,`title`]}]},stepindicator:{blurb:`Clickable step workflow showing done/active/locked progression.`,optional:[`icon`,`iconColor`,`orientation`,`color`,`footer`],itemShapes:[{prop:`steps`,text:`label`,textAliases:[`name`,`title`,`text`]}],propHints:{"steps[].state":`'done'|'active'|'locked'`}},statustimeline:{blurb:`Timeline of timestamped events with filterable status badges.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`events`,text:`label`,textAliases:[`name`,`title`,`text`]}],propHints:{"events[].status":`'pending'|'progress'|'done'|'failed' (drives the badge + filter chips)`}},healthgrid:{blurb:`Grid of system health indicators (ok/warn/down) with hover details.`,optional:[`icon`,`iconColor`,`cols`,`footer`],itemShapes:[{prop:`cells`,text:`label`,textAliases:[`name`,`title`],requiredFields:[`level`]}],propHints:{"cells[].level":`'ok'|'warn'|'down'`}},emptystate:{blurb:`Illustrated empty state with headline, copy, and optional call-to-action.`,optional:[`icon`,`iconColor`,`art`,`copy`,`action`,`actionIcon`,`secondary`,`color`,`footer`]},skeleton:{blurb:`Loading skeleton with shimmer animation and preview toggle.`,optional:[`icon`,`iconColor`,`variant`,`rows`,`loadedLabel`,`footer`]},sliderinput:{blurb:`Draggable range slider with live value and optional derived output.`,optional:[`icon`,`iconColor`,`prompt`,`step`,`value`,`prefix`,`suffix`,`marks`,`outputLabel`,`outputFactor`,`outputPrefix`,`outputSuffix`,`color`,`footer`],itemShapes:[{prop:`marks`,text:`label`,textAliases:[`name`,`title`]}]},segmented:{blurb:`Segmented radio control with animated thumb and value preview.`,optional:[`icon`,`iconColor`,`selected`,`color`,`footer`],itemShapes:[{prop:`options`,text:`label`,textAliases:[`name`,`title`,`text`]}]}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={rangefilter:{blurb:`Dual-handle range slider with live-filtered item list and count.`,optional:[`icon`,`iconColor`,`step`,`low`,`high`,`prefix`,`suffix`,`unitLabel`,`color`,`footer`],itemShapes:[{prop:`items`,text:`label`,textAliases:[`name`,`title`]}]},ratinginput:{blurb:`Interactive star/heart rating control with optional facet breakdowns.`,optional:[`icon`,`iconColor`,`shape`,`max`,`value`,`caption`,`facets`,`color`,`footer`],itemShapes:[{prop:`facets`,text:`label`,textAliases:[`name`,`title`]}]},litigationtimeline:{blurb:`Court-case docket rail: filings, motions, hearings, orders and deadlines with urgency-colored nodes and a live countdown on critical deadlines. Use for litigation status, never a generic project timeline.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`events`,text:`kind`,textAliases:[`type`,`category`,`stage`,`action`]}],propHints:{"events[].kind":`'filing'|'motion'|'hearing'|'order'|'deadline'`,"events[].urgency":`'routine'|'soon'|'critical' (drives node color + filter chips)`,"events[].court":`the court/tribunal, e.g. "D. Del."`,"events[].party":`the filing/moving party, e.g. "Plaintiff"`}},billtracker:{blurb:`Legislative bill status: a fixed Introduced → Committee → Floor Vote → Other Chamber → Signed rail, a dead-end glyph if it fails a stage, and a vote-tally chip under any stage with a recorded vote.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`stages`,text:`name`,textAliases:[`label`,`title`,`step`]}],propHints:{"stages[].name":`'Introduced'|'Committee'|'Floor Vote'|'Other Chamber'|'Signed'`,"stages[].status":`'done'|'current'|'pending'|'failed'`,"stages[].voteTally":`{ yea: number, nay: number } — only on a stage with a recorded vote`}},triageboard:{blurb:`ER waiting-room acuity board: patients sorted most-urgent-first by Emergency Severity Index (1 = resuscitation, 5 = non-urgent), a big colored ESI badge, and optional vitals. Illustrative only, never real PHI.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`patients`,text:`chiefComplaint`,textAliases:[`complaint`,`reason`,`presentation`],children:{prop:`vitals`,text:`label`,textAliases:[`name`,`vital`,`vitalSign`]}}],propHints:{"patients[].esiLevel":`1-5 Emergency Severity Index, 1 = most urgent`,"patients[].vitals[].abnormal":`true flags the reading as out of normal range`}},mentalhealthscreen:{blurb:`Scored screening instrument (PHQ-9/GAD-7 style): a 0-3 dot-tick row per item, and a horizontal severity-banded bar with a marker landing on the total. Illustrative only, never a diagnosis.`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`items`,text:`prompt`,textAliases:[`question`,`text`,`item`]},{prop:`bands`,text:`label`,textAliases:[`name`,`severity`]}],propHints:{"items[].score":`0-3, 0 = not at all, 3 = nearly every day`,"bands[].range":`[low, high] inclusive score range this severity band covers`,"bands[].tone":`'ok'|'mild'|'moderate'|'severe'`}},usabilityfindings:{blurb:`UX research test summary: task-success rate and time-on-task up top, then usability issues severity-badged critical/major/minor with affected-user counts.`,optional:[`icon`,`iconColor`,`taskSuccessRate`,`avgTimeOnTask`,`footer`],itemShapes:[{prop:`issues`,text:`label`,textAliases:[`title`,`name`,`issue`,`finding`]}],propHints:{"issues[].severity":`'critical'|'major'|'minor'`,taskSuccessRate:`0-100, percent of participants who completed the task`,avgTimeOnTask:`pre-formatted, e.g. "3m 42s"`}},roomblockdashboard:{blurb:`Event/hotel room-block occupancy grid: held vs booked vs checked-in vs open, with a legend and a "N/N rooms committed" banner. Use for a block of rooms held for an event, not a single reservation.`,optional:[`icon`,`iconColor`,`cols`,`footer`],itemShapes:[{prop:`cells`,text:`label`,textAliases:[`name`,`room`,`title`]}],propHints:{"cells[].level":`'held'|'booked'|'checked-in'|'open'`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={immigrationcase:{blurb:`Visa/petition case status rail: filing stages done/current/pending/failed, a priority-date readout, and an RFE response countdown when one is outstanding.`,optional:[`icon`,`iconColor`,`priorityDate`,`rfeDeadline`,`footer`],itemShapes:[{prop:`stages`,text:`name`,textAliases:[`label`,`title`,`step`]}],propHints:{"stages[].status":`'done'|'current'|'pending'|'failed'`,rfeDeadline:`the Request for Evidence response due date, if one is outstanding`}},painscale:{blurb:`Clinical pain rating — Wong-Baker FACES or a 0–10 visual-analog scale.`,optional:[`title`,`icon`,`iconColor`,`kind`,`anchors`,`caption`,`footer`],stringItems:[`anchors`],propHints:{value:`0..10 (0 = no pain, 10 = worst pain)`,kind:`'faces' (six Wong-Baker faces, default) | 'vas' (visual-analog 0–10 bar)`}},habittracker:{blurb:`Weekly multi-habit grid with per-habit completion rings and a week summary.`,optional:[`title`,`icon`,`iconColor`,`days`,`caption`,`footer`],itemShapes:[{prop:`habits`,text:`name`,textAliases:[`label`,`title`]}],stringItems:[`days`],propHints:{"habits[].done":"array of booleans, one per day, aligned to `days` (default Mon..Sun)"}},streakgrid:{blurb:`Habit-streak card — recent-day dots, current/best counters, don't-break-the-chain framing.`,optional:[`title`,`icon`,`iconColor`,`habit`,`current`,`best`,`caption`,`footer`],propHints:{"days[].done":`boolean — whether the habit was kept that day (oldest → newest)`}},datatable:{blurb:`Sortable, filterable table with search — annotate it (currency, totals, highlights).`,optional:[`icon`,`iconColor`,`sortKey`,`sortDir`,`searchable`,`searchPlaceholder`,`footer`,`annotations`],propHints:{"rows[]":`object keyed by each columns[].key → that cell's text. NEVER keyed by the column LABEL, and never an array`,annotations:`OPTIONAL closed-grammar adornments that turn a plain table into a receipt/ledger/scorecard. An array of {op,...}: {"op":"format","target":{"kind":"column","key":"<col>"},"as":"currency|percent|unit"}; {"op":"summary","stat":"total|mean|max|min","columns":["<col>"]} (WE compute it — never send the number); {"op":"emphasize","target":{"kind":"row","match":"<row label>"},"tone":"presence|insight|warning|danger"}; {"op":"status","target":{"kind":"column","key":"<col>"},"rules":[{"match":"<text>","tone":"danger"}]}; {"op":"bar","target":{"kind":"column","key":"<col>"}}. Reference only real column keys / row labels.`}},pivot:{blurb:`Two-way crosstab (row category × column category) of ONE metric per view; color-scaled cells, togglable measures, row/col totals.`,optional:[`icon`,`iconColor`,`measure`,`accent`,`footer`],stringItems:[`colHeaders`],propHints:{colHeaders:`category labels across the top (quarters, regions, stages…) — the column dimension, NOT metric names`,measures:`the metric(s) the toggle switches between; the active one fills every column. Different metrics (e.g. Revenue vs Margin) go HERE — never as separate colHeaders, which would just repeat a column. e.g. [{key:'rev',label:'Revenue'}]`,"rows[].cells[].values":`object keyed by each measure.key → that metric at this row × column`}},leaderboard:{blurb:`Ranked rows with medals, bars, and rank-movement indicators; toggle metrics.`,optional:[`icon`,`iconColor`,`metric`,`accent`,`footer`],itemShapes:[{prop:`rows`,text:`name`,textAliases:[`label`,`title`]}]},treetable:{blurb:`Hierarchical tree with expand/collapse rows, inline bars, and tags.`,optional:[`icon`,`iconColor`,`valueLabel`,`accent`,`footer`],itemShapes:[{prop:`nodes`,text:`label`,children:{prop:`children`,text:`label`}}],propHints:{"nodes[].value":`the row's own displayed amount, e.g. "¥1,000" — a SEPARATE field from label, never appended to it as text`,"nodes[].pct":`0..1 share of the whole for the inline bar (e.g. this row's value ÷ the total) — omit rather than guess if there's no meaningful whole to share`,valueLabel:`header for the value column, e.g. "Budget" or "Revenue" (defaults to "Value")`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={swimlane:{blurb:`Concurrent processes as horizontal lanes, each owned by an ACTOR, with time-ordered events/bars across them (UML sequence, multi-team handoffs, request flow). Never for generic multi-row data — use datatable for tabular data.`,optional:[`icon`,`iconColor`,`ticks`,`footer`],itemShapes:[{prop:`lanes`,text:`actor`,textAliases:[`label`,`name`,`title`],children:{prop:`events`,text:`label`,textAliases:[`name`,`title`,`text`]}}],stringItems:[`ticks`]},footnotetable:{blurb:`Table with clickable footnote anchors; footnotes show on hover/click.`,optional:[`icon`,`iconColor`,`footer`],stringItems:[`columns`]},sparktable:{blurb:`Rows with inline sparklines, current value, and delta indicators; hover to probe trend.`,optional:[`icon`,`iconColor`,`valueLabel`,`trendLabel`,`footer`],itemShapes:[{prop:`rows`,text:`name`,textAliases:[`label`,`title`]}]},smallmultiples:{blurb:`Grid of same-scale mini bar or line charts; shared domain across all panels.`,optional:[`icon`,`iconColor`,`cols`,`kind`,`footer`],itemShapes:[{prop:`panels`,text:`label`,textAliases:[`name`,`title`]}]},comparebars:{blurb:`Grouped horizontal bars per metric row; highlight a series to dim others.`,optional:[`icon`,`iconColor`,`highlight`,`footer`],itemShapes:[{prop:`rows`,text:`label`,textAliases:[`name`,`title`]}]},comparematrix:{blurb:`A qualitative side-by-side comparison grid: columns are the things compared, rows are attributes, cells hold a short value, a yes/no/partial verdict, or a 0–5 rating, and a row can flag its winner. Pick over matrix (a STEM value grid), comparebars (numeric bars), clearancematrix (safe/caution/avoid verdicts), or matrixgrid (a numeric heatmap) for "X vs Y vs Z", "how do these differ", or a decision across criteria — philosophies, systems, plans, candidates, characters.`,optional:[`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`rows`,text:`label`,textAliases:[`attribute`,`dimension`,`name`]}],stringItems:[`cols`],propHints:{cols:`the things being compared, one column header each (e.g. ["Stoicism","Buddhism","Existentialism"]).`,"rows[].cells":`one cell per column, in cols order; each {kind?:"text"|"yes"|"no"|"partial"|"rating", value?, note?}. "text"=a short phrase, "rating"=a 0–5 number, yes/no/partial render a verdict glyph (no value needed).`,"rows[].best":`optional 0-based index of the column that wins this attribute; omit for a tie.`}},matrixgrid:{blurb:`A 2D NUMERIC matrix rendered as a color-scaled grid (heat map, confusion matrix, correlation); optional diagonal mark and legend ramp. Never for a table of text/labels — use datatable.`,optional:[`icon`,`iconColor`,`min`,`max`,`accent`,`diagonal`,`unit`,`legend`,`footer`],stringItems:[`rowLabels`,`colLabels`]},clearancematrix:{blurb:`An item × constraint grid rating each pairing safe / caution / avoid / unknown with a one-line reason; avoid cells stand out and unrated pairs show "check a pro". Pick over ingredientmatrix (boolean overlap) or matrixgrid (heatmapped numbers) when each pairing needs a verdict plus its why — drug/supplement interactions, allergen checks, material compatibility.`,optional:[`icon`,`iconColor`,`legend`,`footer`],itemShapes:[{prop:`cells`,text:`reason`,textAliases:[`why`,`note`,`detail`]}],stringItems:[`rows`,`columns`],propHints:{"cells[].row":"must match one of `rows` (matched case/space-insensitively)","cells[].col":"must match one of `columns`","cells[].level":`'safe'|'caution'|'avoid'|'unknown'`,"cells[].reason":`one short line of why, e.g. "raises bleeding risk"`,legend:`true|false — show the verdict key below the grid`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={matrix:{blurb:`A general labeled value grid for linear algebra, truth tables, Punnett squares, or confusion matrices.`,optional:[`icon`,`iconColor`,`caption`,`corner`,`cols`,`bracket`,`footer`],stringItems:[`cols`]},sensitivitytable:{blurb:`What-if sensitivity grid; rows × columns of parameter values, cells heatmapped by output.`,optional:[`icon`,`iconColor`,`unit`,`currency`,`higherBetter`,`baseCell`,`footer`],propHints:{rowVar:`label for the row-axis variable, e.g. "Discount Rate"`,colVar:`label for the column-axis variable, e.g. "Growth Rate"`,baseCell:`[rowIndex, colIndex] of the base/expected-case cell`}},labpanel:{blurb:`Lab test results panel; each row shows test name, value, reference range, and high/low flag.`,optional:[`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`results`,text:`name`,textAliases:[`test`,`analyte`,`label`]}],propHints:{"results[].low":`lower bound of the reference interval`,"results[].high":`upper bound of the reference interval`,"results[].prior":`optional prior value for a trend arrow`}},ingredientmatrix:{blurb:`An ingredient × recipe overlap table — checkmarks where an ingredient appears in a recipe. Use for shopping list optimization, meal-prep planning, or recipe comparison.`,optional:[`icon`,`iconColor`,`quantities`,`highlight`,`footer`],stringItems:[`recipes`,`ingredients`]},conjugation:{blurb:`A verb conjugation table across persons and tenses — pronouns as row headers, tenses as column groups. Irregular forms are highlighted. Works for any language.`,optional:[`language`,`note`],propHints:{verb:`the infinitive form, e.g. "hablar"`,language:`e.g. "Spanish", "French", "Latin"`,"tenses[].name":`tense name, e.g. "Present", "Preterite"`,"tenses[].forms":`array of {pronoun, form, irregular?}`}},financialstatement:{blurb:`A multi-period financial statement (P&L / balance sheet / cash flow): a left label column indented by nesting, one right-aligned currency column per period, subtotal/total rows ruled + bold, negatives in accountant's parentheses. Pick for revenue/expense/cash breakdowns across quarters or years.`,optional:[`title`,`icon`,`iconColor`,`currency`,`caption`,`footer`],itemShapes:[{prop:`rows`,text:`label`,textAliases:[`name`,`line`,`item`]}],stringItems:[`periods`],propHints:{periods:`column headers left→right, e.g. ["Q1 FY25","Q2 FY25","Q3 FY25"]`,"rows[].values":"one number per period, same order as `periods`; use a negative for a cost/outflow","rows[].kind":`'line'|'subtotal'|'total' — subtotal/total get a top rule + bold; total is tinted`,"rows[].indent":`integer ≥0 — indent the label under a subtotal (each level ≈14px)`,currency:`ISO 4217 code, e.g. "USD", "EUR" (default USD)`}},cohortgrid:{blurb:`A cohort-retention triangle: rows are cohorts (label + size), columns are periods-since-start (0..N), each cell heat-shaded by its value and the ragged later-cohorts edge left blank, with a per-column average footer. Pick for retention / churn decay by signup month or any "how does cohort X hold up over time".`,optional:[`title`,`icon`,`iconColor`,`periods`,`unit`,`caption`,`footer`],itemShapes:[{prop:`cohorts`,text:`label`,textAliases:[`name`,`cohort`,`month`]}],stringItems:[`periods`],propHints:{"cohorts[].values":`value per period-since-start; use null for an unobserved (future) cell so the triangle stays ragged`,"cohorts[].size":`cohort size (e.g. signups), shown beside the label`,periods:`optional column headers, e.g. ["M0","M1","M2"]; defaults to M0…Mn sized to the widest cohort`,unit:`suffix on each cell, default '%'`}},riskmatrix:{blurb:`A likelihood × impact risk matrix: an N×N grid RAG-banded (green→amber→red) by likelihood×impact, each risk plotted as a labeled chip in its cell, with a register below pairing each risk to its owner + mitigation. Pick for launch/project/security risk reviews and any "what could go wrong and how bad".`,optional:[`title`,`icon`,`iconColor`,`size`,`caption`,`footer`],itemShapes:[{prop:`risks`,text:`label`,textAliases:[`name`,`risk`,`title`]}],propHints:{"risks[].likelihood":`integer 1 (rare) … 5 (almost certain)`,"risks[].impact":`integer 1 (negligible) … 5 (severe)`,"risks[].owner":`who owns the risk, e.g. "Platform", "GTM"`,"risks[].mitigation":`one-line plan to reduce or absorb it`,size:`3 | 4 | 5 — grid dimension (default 5)`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={careplan:{blurb:`A nursing care-plan board: one row per patient problem read left→right through the nursing process — Assessment/Dx → Goal → Interventions → Rationale → Evaluation — with an outcome chip (met/partial/ongoing) on each goal. For nursing care plans, clinical handoffs, and nursing-school teaching.`,optional:[`title`,`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`entries`,text:`assessment`,textAliases:[`cue`,`problem`,`data`]}],propHints:{"entries[].diagnosis":`the nursing diagnosis / problem statement`,"entries[].goal":`the expected outcome the plan works toward`,"entries[].interventions":`array of nursing interventions (one string each)`,"entries[].rationale":`why those interventions work (the evidence)`,"entries[].status":`'met'|'partial'|'ongoing' — outcome at evaluation`}},doseladder:{blurb:`A medication dosing / titration visual: an optional weight/eGFR-based starting-dose readout (input → result with the formula shown), a stepped titration ladder where the ceiling rung is marked, and a banded renal/hepatic dose-adjustment lookup. For drug titration schedules, weight-based dosing, and dose-adjustment reference.`,optional:[`title`,`icon`,`iconColor`,`route`,`computed`,`adjustments`,`caption`,`footer`],itemShapes:[{prop:`ladder`,text:`step`,textAliases:[`stage`,`phase`,`label`]}],propHints:{drug:`the medication name`,route:`route of administration, e.g. "oral", "IV"`,"computed.input":`the patient input the dose is derived from, e.g. "Weight 72 kg"`,"computed.formula":`the dosing rule applied, e.g. "0.1 mg/kg"`,"computed.result":`the resulting starting dose, e.g. "7.2 mg"`,"ladder[].dose":`the dose at this rung, e.g. "25 mg daily"`,"ladder[].ceiling":`true to mark this rung as the dosing ceiling (the max)`,"adjustments[].condition":`the organ-function band, e.g. "eGFR 30–59"`,"adjustments[].change":`the dose change for that band, e.g. "Reduce by 50%"`}},sizechart:{blurb:`An apparel/footwear size comparison chart — one row per size mapped across systems and measurements (US · UK · EU · cm), with an optional highlighted size and a how-to-measure guide. Use for shopping, fit, and size-conversion asks.`,optional:[`title`,`icon`,`iconColor`,`unit`,`highlight`,`guide`,`caption`,`footer`],stringItems:[`columns`]},pricingtable:{blurb:`A tiered plan/pricing comparison: a rich header card per plan (price, tagline, CTA, a ribbon on the highlighted tier) over a feature grid, check/dash or a short value per plan. Pick over comparematrix (attribute-vs-option, no price cards) for SaaS tiers, membership levels, service packages — "which plan should I get".`,optional:[`icon`,`iconColor`,`caption`,`footer`],itemShapes:[{prop:`plans`,text:`name`,textAliases:[`plan`,`tier`,`title`]},{prop:`features`,text:`label`,textAliases:[`feature`,`name`]}],propHints:{"plans[].price":`a short price string, e.g. "$29", "Free", "Custom" — not a bare number.`,"plans[].period":`billing cadence after the price, e.g. "/mo", "/seat/mo". Omit for one-time or "Custom" prices.`,"plans[].highlighted":`true for exactly one plan — the tier to spotlight with a "most popular" ribbon.`,"features[].values":'one entry per plan, SAME order as `plans`: true/false for included/not, or a short string like "Up to 5 seats".'}},raci:{blurb:`A RACI responsibility matrix: tasks × roles, each pairing rated Responsible/Accountable/Consulted/Informed with a colored single-letter badge. Pick over clearancematrix (safe/caution/avoid verdicts) or swimlane (a timeline) for "who owns this", project ownership, program planning.`,optional:[`icon`,`iconColor`,`legend`,`footer`],stringItems:[`tasks`,`roles`],propHints:{"cells[].task":"must match one of `tasks` (matched case/space-insensitively).","cells[].role":"must match one of `roles`.","cells[].rating":`'R' (Responsible) | 'A' (Accountable) | 'C' (Consulted) | 'I' (Informed).`,legend:`true|false — show the R/A/C/I key below the grid.`}},rubric:{blurb:`A grading rubric: criteria × performance levels, each cell the prose for what that level looks like; the level actually earned is tinted, with an optional trailing score column. Education, hiring, structured evaluation — "how is this graded", "what does a 4/5 look like here".`,optional:[`icon`,`iconColor`,`scores`,`maxScore`,`footer`],itemShapes:[{prop:`cells`,text:`descriptor`,textAliases:[`text`,`detail`,`description`]}],stringItems:[`criteria`,`levels`],propHints:{"cells[].criterion":"must match one of `criteria` (matched case/space-insensitively).","cells[].level":"must match one of `levels`.","cells[].descriptor":`one short line of what THIS level looks like for THIS criterion.`,"cells[].achieved":`true for the one level actually earned on this criterion.`,"scores[].score":"points earned for that criterion; pairs with `maxScore` for a total."}},interviewscorecard:{blurb:`An HR interview evaluation: candidates × criteria, each cell a color-scaled numeric rating with an optional note, plus a per-candidate average. Pick over comparematrix (qualitative, no numeric scale) for hiring panels — "how did each candidate score".`,optional:[`icon`,`iconColor`,`scale`,`footer`],stringItems:[`candidates`,`criteria`],propHints:{"cells[].candidate":"must match one of `candidates` (matched case/space-insensitively).","cells[].criterion":"must match one of `criteria`.","cells[].rating":"a number within `scale` (defaults 1..5); higher is better.","cells[].note":`an optional one-line note shown under the rating.`,scale:`{min:number,max:number} the rating scale every cell is drawn from.`}},gradebook:{blurb:`A class gradebook: students × assignments, each cell a score with its derived letter grade, plus a class-average readout. Education, teaching — "how is the class doing", "where does each student stand".`,optional:[`icon`,`iconColor`,`showClassAverage`,`footer`],stringItems:[`students`,`assignments`],propHints:{"cells[].student":"must match one of `students` (matched case/space-insensitively).","cells[].assignment":"must match one of `assignments`.","cells[].maxScore":`points the assignment is out of; defaults to 100.`,showClassAverage:`true|false — show a trailing class-average column (default true).`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={datadictionary:{blurb:`A dataset variable reference / codebook: a monospace name column, a colored dtype pill, unit + description, and a thin per-row missing-data bar. Data science, research — "what's in this dataset", "explain this column", a methods-section variable table.`,optional:[`icon`,`iconColor`,`source`,`nRows`,`nCols`,`footer`],itemShapes:[{prop:`variables`,text:`name`,textAliases:[`column`,`field`,`key`]}],propHints:{"variables[].dtype":`'int'|'float'|'str'|'bool'|'category'|'datetime'`,"variables[].unit":`e.g. 'ms', 'USD', 'kg' — omit for unitless fields`,"variables[].missingPct":`0–100, the share of rows missing this variable`,source:`the dataset/table this documents, e.g. 'eval_results.parquet'`}},ablationtable:{blurb:`An ML ablation-study comparison: the full model pinned at top, then one row per component removed, each diffed against it with a colored ±delta chip (danger when it regresses, presence when it improves). ML/data-science — "what does each piece actually contribute".`,optional:[`title`,`icon`,`iconColor`,`higherBetter`,`footer`],itemShapes:[{prop:`rows`,text:`removed`,textAliases:[`component`,`feature`,`name`]}],propHints:{baseline:`the full/unablated system's name, e.g. 'Transformer-v3 (full)'`,baselineValue:"the full system's score on `metric` — every row is diffed against this",metric:`what's being measured, e.g. 'Accuracy (%)'`,"rows[].delta":`change vs. baselineValue; computed as value − baselineValue when omitted`,"rows[].deltaDirection":`'better'|'worse' — inferred from the delta's sign when omitted`,higherBetter:`true|false — whether a larger metric value wins (default true)`}},spectrumtable:{blurb:`A spectroscopy peak-interpretation table (NMR/IR/MS): columns switch by technique — NMR shows shift/multiplicity/integration/assignment, IR shows wavenumber/intensity/functional-group, MS shows m/z/relative-abundance/fragment — over an optional tick-marked axis strip. Chemistry — "read this spectrum", "identify this compound".`,optional:[`title`,`icon`,`iconColor`,`compound`,`solvent`,`footer`],itemShapes:[{prop:`peaks`,text:`assignment`,textAliases:[`label`,`group`,`fragment`]}],propHints:{technique:`'nmr-1h'|'nmr-13c'|'ir'|'ms' — picks which columns render`,"peaks[].x":`δ (ppm) for NMR, wavenumber (cm⁻¹) for IR, m/z for MS`,"peaks[].multiplicity":`NMR only, e.g. 's'|'d'|'t'|'q'|'dd'|'m'`,"peaks[].integration":`NMR only, the integrated proton count at this shift`,"peaks[].intensity":`IR/MS only, 0–100 relative peak height`,solvent:`NMR only, e.g. 'CDCl3'`}},fmeatable:{blurb:`A Failure Mode and Effects Analysis: one row per failure mode, the Risk Priority Number (severity × occurrence × detection) always computed here and rows auto-sorted descending by it, with a danger rule marking the top 1–3 as "fix these first". Manufacturing, reliability/quality engineering — "what could fail, and which failure matters most".`,optional:[`title`,`icon`,`iconColor`,`footer`],itemShapes:[{prop:`items`,text:`failureMode`,textAliases:[`mode`,`failure`,`name`]}],propHints:{"items[].severity":`1 (none) … 10 (catastrophic)`,"items[].occurrence":`1 (rare) … 10 (near-certain)`,"items[].detection":`1 (certain to catch it) … 10 (no way to catch it)`,"items[].action":`the recommended fix`}},billofmaterials:{blurb:`A hierarchical parts list with cost rollup: rows nest by indent, qty × unit cost is always computed into an extended-cost column, a subassembly row rolls up every part nested under it, and a total row is the grand total across every part. Manufacturing, hardware, procurement — "what does this build cost".`,optional:[`title`,`icon`,`iconColor`,`currency`,`footer`],itemShapes:[{prop:`rows`,text:`label`,textAliases:[`name`,`part`,`item`]}],propHints:{"rows[].kind":`'part' (default)|'subassembly'|'total'`,"rows[].indent":`integer ≥0 — nesting depth (each level ≈14px); a subassembly rolls up every part nested under it`,"rows[].qty":`part rows only; defaults to 1 when omitted but unitCost is given`,"rows[].unitCost":`part rows only; extended cost (qty × unitCost) is always computed, never taken as input`,currency:`ISO 4217 code, e.g. "USD", "EUR" (default USD)`}},complexitysummary:{blurb:`A multi-approach Big-O comparison table: one row per named approach with its time/space complexity in monospace notation and a short tradeoff note. The wrap-up artifact at the end of a technical-interview walkthrough — "how do these approaches compare", "brute force vs. optimal".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`approaches`,text:`name`,textAliases:[`approach`,`algorithm`,`method`]}],propHints:{"approaches[].timeComplexity":`Big-O time complexity, e.g. "O(n log n)"`,"approaches[].spaceComplexity":`Big-O space complexity, e.g. "O(n)"`,"approaches[].notes":`a short tradeoff, or when this approach is worth picking`}},expressionheatmap:{blurb:`A gene-expression heat map: genes × samples, each cell a log2 fold-change on a diverging blue↓/red↑ scale centered at zero. Molecular biology, bioinformatics — "read this expression panel", "which genes moved between conditions".`,optional:[`icon`,`iconColor`,`clusterGenes`,`clusterSamples`,`scaleLabel`,`footer`],stringItems:[`genes`,`samples`],propHints:{genes:`row labels — gene symbols, e.g. ["TP53","MYC","EGFR"]`,samples:`column labels — sample/condition names`,values:`genes × samples log2 fold-change; values[i][j] pairs genes[i] with samples[j]. Negative = down-regulated, positive = up-regulated, 0 = unchanged.`,clusterGenes:`reserved, not yet implemented — rows always render in the given order`,clusterSamples:`reserved, not yet implemented — columns always render in the given order`,scaleLabel:`the scale caption, e.g. "log2 fold-change" (default)`}},discoverytracker:{blurb:`A legal discovery request log: a sortable table with filter chips and a colored status badge per row (outstanding/produced/objected/privileged). Litigation, legal ops — "where does discovery stand".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`requests`,text:`description`,textAliases:[`request`,`item`,`summary`]}],propHints:{"requests[].num":`the request number in the set, e.g. 4 for "RFP No. 4"`,"requests[].status":`'outstanding'|'produced'|'objected'|'privileged'`,"requests[].batesRange":`the Bates range produced, e.g. "ACME-000412–000488"`,"requests[].privilegeBasis":`the privilege ground asserted, e.g. "attorney work product" — only when status is privileged`}}};export{e as D};
@@ -1 +1 @@
1
- var e={pianoroll:{title:`Ode to Joy — opening phrase`,icon:`play`,iconColor:`var(--presence)`,notes:[{pitch:`E4`,start:0,duration:1,velocity:.8},{pitch:`E4`,start:1,duration:1,velocity:.7},{pitch:`F4`,start:2,duration:1,velocity:.7},{pitch:`G4`,start:3,duration:1,velocity:.75},{pitch:`G4`,start:4,duration:1,velocity:.75}],beatsPerBar:4,tempo:`120 BPM`,caption:`Beethoven's melody stays inside five white keys — the dotted rhythm at the end shows as a…`,footer:`Pitch runs bottom to top like a piano turned on its side; darker bars are played louder (…`},stitchchart:{title:`Eyelet chevron — 8-row repeat`,icon:`edit`,iconColor:`var(--presence)`,rows:[{number:1,side:`RS`,stitches:[`k`,`k`,`k`,`k2tog`,`yo`]},{stitches:[`k`,`k`,`k`,`k`,`k`]},{number:3,side:`RS`,stitches:[`k`,`k`,`k2tog`,`yo`,`k`]},{stitches:[`k`,`k`,`k`,`k`,`k`]},{number:5,side:`RS`,stitches:[`k`,`k2tog`,`yo`,`k`,`k`]}],legend:[{key:`yo`,meaning:`yarn over — the eyelet hole`}],gauge:`24 sts × 32 rows = 10 cm, blocked`,caption:`Read bottom-up: right-side rows right to left, wrong-side rows left to right. WS rows pur…`,footer:`Every decrease is paired with a yarn over, so the stitch count stays at 10 on every row.`},wordsearch:{title:`Night-sky word hunt`,icon:`search`,iconColor:`var(--presence)`,words:[`ORION`,`LYRA`,`VEGA`,`SIRIUS`,`NEBULA`],size:12,seed:`night-sky`,footer:`Ten astronomy terms hide in all eight directions — tap a word in the list to reveal its p…`},playingcards:{title:`Reading a royal-flush draw`,icon:`layers`,iconColor:`var(--presence)`,groups:[{label:`Your hand`,layout:`fan`,cards:[{rank:`A`,suit:`spades`},{rank:`K`,suit:`spades`}]},{label:`The flop`,layout:`row`,cards:[{rank:`Q`,suit:`spades`},{rank:`J`,suit:`spades`},{rank:`4`,suit:`hearts`}]},{label:`Deck`,layout:`stack`,cards:[{faceDown:!0},{faceDown:!0},{faceDown:!0}]}],note:`Four cards toward the royal flush after the flop: only the 10♠ completes it (1 of the 47 …`,footer:`A classic probability example: outs are counted against the 47 cards you haven't seen, no…`},statblock:{title:`Homebrew bestiary — session prep`,icon:`shield`,iconColor:`var(--presence)`,name:`Ember Drake Hatchling`,meta:`Small dragon, chaotic neutral`,ac:15,hp:44,hpFormula:`8d6+16`,speed:`30 ft., fly 60 ft.`,abilities:{str:14,dex:16,con:15,int:8,wis:12,cha:13},saves:[`Dex +5`,`Con +4`],skills:[`Perception +3`,`Stealth +5`],senses:`darkvision 60 ft., passive Perception 13`,languages:`Draconic`,challenge:`2 (450 XP)`,traits:[{name:`Kindled Scales`,text:`A creature that touches the drake or hits it with a melee attack while within 5 feet take…`},{name:`Updraft Glide`,text:`The drake doesn't provoke opportunity attacks when it flies out of an enemy's reach.`}],actions:[{name:`Bite`,text:`Melee weapon attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8+3) piercing damage p…`},{name:`Cinder Breath (Recharge 5–6)`,text:`The drake exhales a 15-foot cone of embers. Each creature in the cone must make a DC 12 D…`}],reactions:[{name:`Wing Buffet`,text:`When a creature the drake can see ends its turn within 5 feet, the drake beats its wings …`}],footer:`Balanced for a level-3 party of four — treat the breath recharge as the spotlight beat of…`}};export{e as E};
1
+ var e={pianoroll:{title:`Ode to Joy — opening phrase`,icon:`play`,iconColor:`var(--presence)`,notes:[{pitch:`E4`,start:0,duration:1,velocity:.8},{pitch:`E4`,start:1,duration:1,velocity:.7},{pitch:`F4`,start:2,duration:1,velocity:.7},{pitch:`G4`,start:3,duration:1,velocity:.75},{pitch:`G4`,start:4,duration:1,velocity:.75}],beatsPerBar:4,tempo:`120 BPM`,caption:`Beethoven's melody stays inside five white keys — the dotted rhythm at the end shows as a…`,footer:`Pitch runs bottom to top like a piano turned on its side; darker bars are played louder (…`},stitchchart:{title:`Eyelet chevron — 8-row repeat`,icon:`edit`,iconColor:`var(--presence)`,rows:[{number:1,side:`RS`,stitches:[`k`,`k`,`k`,`k2tog`,`yo`]},{stitches:[`k`,`k`,`k`,`k`,`k`]},{number:3,side:`RS`,stitches:[`k`,`k`,`k2tog`,`yo`,`k`]},{stitches:[`k`,`k`,`k`,`k`,`k`]},{number:5,side:`RS`,stitches:[`k`,`k2tog`,`yo`,`k`,`k`]}],legend:[{key:`yo`,meaning:`yarn over — the eyelet hole`}],gauge:`24 sts × 32 rows = 10 cm, blocked`,caption:`Read bottom-up: right-side rows right to left, wrong-side rows left to right. WS rows pur…`,footer:`Every decrease is paired with a yarn over, so the stitch count stays at 10 on every row.`},wordsearch:{title:`Night-sky word hunt`,icon:`search`,iconColor:`var(--presence)`,words:[`ORION`,`LYRA`,`VEGA`,`SIRIUS`,`NEBULA`],size:12,seed:`night-sky`,footer:`Ten astronomy terms hide in all eight directions — tap a word in the list to reveal its p…`},playingcards:{title:`Reading a royal-flush draw`,icon:`layers`,iconColor:`var(--presence)`,groups:[{label:`Your hand`,layout:`fan`,cards:[{rank:`A`,suit:`spades`},{rank:`K`,suit:`spades`}]},{label:`The flop`,layout:`row`,cards:[{rank:`Q`,suit:`spades`},{rank:`J`,suit:`spades`},{rank:`4`,suit:`hearts`}]},{label:`Deck`,layout:`stack`,cards:[{faceDown:!0},{faceDown:!0},{faceDown:!0}]}],note:`Four cards toward the royal flush after the flop: only the 10♠ completes it (1 of the 47 …`,footer:`A classic probability example: outs are counted against the 47 cards you haven't seen, no…`},statblock:{title:`Homebrew bestiary — session prep`,icon:`shield`,iconColor:`var(--presence)`,name:`Ember Drake Hatchling`,meta:`Small dragon, chaotic neutral`,ac:15,hp:44,hpFormula:`8d6+16`,speed:`30 ft., fly 60 ft.`,abilities:{str:14,dex:16,con:15,int:8,wis:12,cha:13},saves:[`Dex +5`,`Con +4`],skills:[`Perception +3`,`Stealth +5`],senses:`darkvision 60 ft., passive Perception 13`,languages:`Draconic`,challenge:`2 (450 XP)`,traits:[{name:`Kindled Scales`,text:`A creature that touches the drake or hits it with a melee attack while within 5 feet take…`},{name:`Updraft Glide`,text:`The drake doesn't provoke opportunity attacks when it flies out of an enemy's reach.`}],actions:[{name:`Bite`,text:`Melee weapon attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8+3) piercing damage p…`},{name:`Cinder Breath (Recharge 5–6)`,text:`The drake exhales a 15-foot cone of embers. Each creature in the cone must make a DC 12 D…`}],reactions:[{name:`Wing Buffet`,text:`When a creature the drake can see ends its turn within 5 feet, the drake beats its wings …`}],footer:`Balanced for a level-3 party of four — treat the breath recharge as the spotlight beat of…`},decisionrecord:{title:`Decision record · DR-014`,icon:`check`,iconColor:`var(--insight)`,decision:`Run a two-week pilot with one support queue before changing the full workflow.`,rationale:[`A narrow pilot exposes operational issues without moving every team at once.`,`The queue already has a stable baseline and an accountable owner.`,`Two weeks captures both weekday and weekend demand.`],status:`decided`,owner:`Support operations`,decidedAt:`August 22`,revisitWhen:`Resolution time worsens by more than 10%`},assumptionledger:{title:`Launch assumptions`,icon:`layers`,assumptions:[{assumption:`New users understand the first-run prompt without instruction.`,evidence:`Five of seven moderated participants completed it unaided.`,confidence:`medium`,test:`Run an unmoderated comprehension study.`,status:`active`},{assumption:`The existing support rotation can absorb pilot demand.`,evidence:`Current utilization averages 68%.`,confidence:`low`,status:`pending`},{assumption:`Customers value faster setup over advanced controls.`,test:`Compare activation across simplified and advanced variants.`,confidence:`untested`,status:`unknown`}]},requirementboard:{title:`Release scope`,icon:`table`,groups:[{priority:`must`,items:[{requirement:`Keyboard-complete setup`,acceptance:`All actions work without a pointer.`,owner:`Web`,status:`active`},{requirement:`Recoverable save failures`,acceptance:`Draft remains available after a failed request.`,owner:`Platform`,status:`pending`}]},{priority:`should`,items:[{requirement:`Import saved preferences`,owner:`Platform`,status:`pending`}]},{priority:`could`,items:[{requirement:`Optional compact density`,status:`unknown`}]},{priority:`wont`,items:[{requirement:`Custom themes in this release`}]}]}};export{e as E};
@@ -0,0 +1 @@
1
+ var e={experimentplan:{title:`Pilot experiment`,icon:`spark`,hypothesis:`Showing one concrete example before setup will improve successful first sessions.`,variables:[{name:`Example preview`,role:`input`,level:`Shown vs hidden`},{name:`Successful first session`,role:`outcome`,level:`Completed within 10 minutes`},{name:`Traffic source`,role:`control`,level:`Balanced by channel`}],steps:[`Randomly assign eligible new sessions.`,`Run until the agreed sample or stop condition.`,`Compare completion and support-contact rates.`],measures:[`Completion rate`,`Time to first result`,`Support contacts`],guardrail:`Stop if error rate rises materially or participants cannot exit the flow.`},negotiationplan:{title:`Renewal negotiation`,icon:`chat`,goal:`Hold the annual price while adding a 60-day cancellation window.`,walkAway:`More than a 7% increase without a shorter commitment.`,levers:[{label:`Contract length`,value:`12–24 months`,priority:`high`},{label:`Payment schedule`,value:`Annual or quarterly`,priority:`medium`},{label:`Reference participation`,value:`Case study after six months`,priority:`low`}],concessions:[`Prepay the first year`,`Name a single administrative owner`],guardrails:[`No automatic renewal`,`Usage data remains exportable`]},stakeholdermap:{title:`Migration stakeholders`,icon:`share`,stakeholders:[{name:`Executive sponsor`,role:`Budget owner`,influence:`high`,interest:`high`,strategy:`Weekly decision brief.`},{name:`Security review`,role:`Control owner`,influence:`high`,interest:`low`,strategy:`Bring evidence before each gate.`},{name:`Support team`,role:`Frontline users`,influence:`low`,interest:`high`,strategy:`Pilot early and publish changes.`},{name:`Adjacent teams`,influence:`low`,interest:`low`,strategy:`Monthly digest.`}]},serviceblueprint:{title:`Repair appointment blueprint`,icon:`layers`,stages:[{stage:`Book`,customer:`Choose a time`,frontstage:`Show availability`,backstage:`Reserve capacity`,support:`Scheduling service`},{stage:`Arrive`,customer:`Check in`,frontstage:`Confirm the request`,backstage:`Open work order`,support:`Customer record`},{stage:`Repair`,customer:`Receive updates`,frontstage:`Explain findings`,backstage:`Complete diagnosis`,support:`Parts inventory`},{stage:`Collect`,customer:`Review and pay`,frontstage:`Handoff`,backstage:`Close work order`,support:`Payments`}],evidence:[`Booking confirmation`,`Status message`,`Receipt`]},approvalflow:{title:`Campaign approval`,icon:`check`,request:`Approve the fall launch campaign for production.`,status:`active`,due:`Friday, 3:00 PM`,approvers:[{name:`Brand lead`,role:`Voice and identity`,status:`done`,decidedAt:`Tue 10:15 AM`},{name:`Legal review`,role:`Claims and usage rights`,status:`active`,note:`Waiting on the final image credits.`},{name:`Marketing director`,role:`Final sign-off`,status:`pending`}]},resourceplan:{title:`Workshop capacity`,icon:`layers`,period:`September sessions`,resources:[{name:`Facilitators`,capacity:`12 shifts`,demand:`14 shifts`,gap:`−2 shifts`,owner:`Program lead`,status:`blocked`},{name:`Training room`,capacity:`8 days`,demand:`8 days`,gap:`Balanced`,owner:`Facilities`,status:`done`},{name:`Loaner laptops`,capacity:`24`,demand:`20`,gap:`+4`,owner:`IT`,status:`active`}]},maintenanceplan:{title:`Home maintenance plan`,icon:`sliders`,assets:[{asset:`Heating and cooling`,tasks:[{task:`Replace air filter`,interval:`3 months`,lastDone:`July 5`,nextDue:`October 5`,owner:`Household`,status:`active`},{task:`Professional service`,interval:`1 year`,nextDue:`March`,owner:`Licensed technician`,status:`pending`}]},{asset:`Safety`,tasks:[{task:`Test smoke alarms`,interval:`1 month`,lastDone:`August 1`,nextDue:`September 1`,status:`active`}]}]},contactdirectory:{title:`Event contacts`,icon:`mail`,entries:[{name:`Jordan Lee`,role:`Venue lead`,organization:`Harbor Hall`,methods:[{label:`Work`,value:`(555) 010-0184`},{label:`Email`,value:`jordan@example.test`}],availability:`Event day · 8 AM–8 PM`},{name:`Sam Rivera`,role:`Catering captain`,methods:[{label:`Work`,value:`(555) 010-0168`}],note:`Call for delivery access.`},{name:`Avery Chen`,role:`Accessibility contact`,methods:[{label:`Email`,value:`avery@example.test`}]}],privacyNote:`Example data only. Share real contact information only with the intended audience.`}};export{e as E};
@@ -0,0 +1 @@
1
+ var e={dentaltreatmentplan:{blurb:`A dental treatment plan: entries grouped by visit, a priority-colored chip per row, and a running cost total that rolls up to a grand total. Dentistry, patient billing — "what's the plan, and what does it cost".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`entries`,text:`procedure`,textAliases:[`treatment`,`name`,`description`]}],propHints:{"entries[].tooth":`the tooth being worked on, e.g. "#14", "UL6"`,"entries[].priority":`'urgent'|'recommended'|'elective'`,"entries[].visit":`the visit this is scheduled for, e.g. "Visit 1" — rows group by this`,"entries[].cost":`a plain number; the per-visit and grand totals are always summed here`}},rollcall:{blurb:`A legislative roll-call vote: a header tally bar counted from the roster, party-line color banding, and a colored vote-glyph chip per legislator. Civics, legislative tracking — "how did the vote go".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`legislators`,text:`name`,textAliases:[`legislator`,`member`,`representative`]}],propHints:{"legislators[].party":`any party/caucus label, e.g. "D", "R", "Green" — rows band by it`,"legislators[].vote":`'yea'|'nay'|'present'|'absent'`,bill:`the measure being voted on, e.g. "H.R. 4521, Infrastructure Modernization Act"`}},collectiontracker:{blurb:`A hobbyist collection — stamps, coins, cards, vinyl. A summary strip (count + running value) then a responsive card grid with a condition badge per piece. Collecting, hobbies — "what's my collection worth".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`items`,text:`name`,textAliases:[`item`,`piece`,`title`]}],propHints:{"items[].condition":`'mint'|'good'|'fair'`,"items[].value":`estimated current value, a plain number; omit if untracked`}},cma:{blurb:`A real-estate comparative market analysis: a subject KPI strip, a ruled comp table with signed adjustments in accountant's-parentheses style, and a highlighted suggested-list-price banner. Real estate — "what should this list for".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`comps`,text:`address`,textAliases:[`property`,`comp`,`listing`],children:{prop:`adjustments`,text:`label`,textAliases:[`name`,`item`,`reason`]}}],propHints:{subject:`a plain object: { address, beds, baths, sqft, yearBuilt? }`,"comps[].distance":`miles from the subject property, a plain number`,"comps[].adjustments[].amount":`signed dollars toward the subject value; negative when the comp outclasses the subject on that point. The adjusted price is always computed here as soldPrice + Σ(adjustments), never taken as input.`,suggestedListPrice:`a plain object: { low, high, point? }`}},taxreturnsummary:{blurb:`A 1040-style filing summary — NOT the marginal-rate bracket chart. A single-column ledger from income lines down to the total, then a large highlighted refund/owed chip. Personal finance, tax prep — "what did the return come out to".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`rows`,text:`label`,textAliases:[`name`,`line`,`item`]}],propHints:{"rows[].kind":`'line'|'subtotal'|'total' — subtotal/total get a top rule + bold; total is tinted`,"rows[].indent":`integer ≥0 — indent the label under a subtotal (each level ≈14px)`,refundOrOwed:`a plain object: { amount, direction }, direction is 'refund'|'owed'`}},depreciationschedule:{blurb:`A rental/business asset depreciation schedule — a direct sibling of Amortization's KPI-strip-then-table shape, basis paying down toward salvage value instead of a loan balance to zero. Accounting, rental property, small business — "how does this asset's basis run off".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`rows`,text:`period`,textAliases:[`year`,`label`]}],propHints:{method:`the depreciation method, e.g. 'Straight-line', '200% declining balance'`,"rows[].endingBasis":`the basis carried into the next period, running toward salvage value`}},vendortracker:{blurb:`An event/wedding vendor tracker: a category icon and status pill per row, plus a two-segment payment bar showing the paid deposit against the balance due. Event planning, weddings — "who's booked, what's still owed".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`vendors`,text:`name`,textAliases:[`vendor`,`company`]}],propHints:{"vendors[].category":`'catering'|'venue'|'photo'|'av'|'decor'|'other'`,"vendors[].status":`'inquired'|'booked'|'confirmed'`}},sponsorshiptracker:{blurb:`A content-creator sponsorship/brand-deal tracker: a status pill per row, a right-aligned rate column, and a paid/unpaid accent bar. Creator economy, freelance — "what's owed, and by whom".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`deals`,text:`brand`,textAliases:[`sponsor`,`company`,`partner`]}],propHints:{"deals[].status":`'pitched'|'negotiating'|'contracted'|'delivered'|'paid'`,"deals[].currency":`ISO 4217 code, e.g. "USD" (default USD)`}}};export{e as D};
@@ -0,0 +1 @@
1
+ var e={tripbudget:{title:`Trip budget`,icon:`globe`,trip:`Four days in Montréal`,currency:`CAD`,lines:[{category:`Rail`,planned:`$240`,actual:`$228`,note:`Round trip`},{category:`Stay`,planned:`$720`,actual:`$704`,note:`Three nights`},{category:`Food`,planned:`$320`,actual:`$346`},{category:`Local transit`,planned:`$60`,actual:`$54`}],plannedTotal:`$1,340`,actualTotal:`$1,332`,footer:`Illustrative amounts; taxes and exchange fees can change the total.`},careinstructions:{title:`After-visit care summary`,icon:`shield`,subject:`Minor ankle sprain · clinician-supplied instructions`,do:[`Follow the provided activity limits.`,`Use the recommended support as directed.`,`Keep the follow-up appointment.`],avoid:[`Do not exceed the clinician’s return-to-activity plan.`,`Do not use medication differently from its label or instructions.`],warningSigns:[`New numbness or weakness`,`Rapidly increasing swelling or pain`,`Any symptom the care team marked urgent`],followUp:`Contact the care team if recovery is not progressing as they described.`,source:`Example after-visit instructions`},clausecompare:{title:`Clause comparison`,icon:`doc`,left:{label:`Current draft`,text:`Either party may terminate with 30 days’ written notice.`},right:{label:`Proposed draft`,text:`The customer may terminate after the initial term with 60 days’ written notice.`},differences:[{topic:`Who may terminate`,change:`The right changes from either party to the customer only.`,risk:`medium`},{topic:`Timing`,change:`Notice grows from 30 to 60 days and applies only after the initial term.`,risk:`high`},{topic:`Form`,change:`Written notice remains required.`,risk:`low`}],jurisdiction:`the relevant jurisdiction`},incidentbrief:{title:`Service incident · INC-27`,icon:`alert`,impact:`Some customers cannot complete checkout.`,severity:`high`,status:`active`,timeline:[{time:`10:02`,event:`Automated error-rate alert fired.`,status:`done`},{time:`10:09`,event:`On-call traced failures to the payment handoff.`,status:`done`},{time:`10:21`,event:`Traffic shifted to the previous stable path.`,status:`active`}],owners:[`Incident lead`,`Payments on-call`],actions:[`Confirm error-rate recovery`,`Reconcile interrupted orders`],nextUpdate:`10:45 AM`},coveragecheck:{title:`Warranty coverage check`,icon:`shield`,policy:`Example appliance protection plan`,asOf:`the supplied policy copy`,rows:[{item:`Mechanical breakdown`,status:`covered`,limit:`Up to the stated service limit`,evidence:`Coverage section 2`},{item:`Accidental damage`,status:`excluded`,evidence:`Exclusions section 4`},{item:`Food loss`,status:`conditional`,limit:`Receipt and outage duration required`,evidence:`Benefit section 6`},{item:`Pre-existing fault`,status:`unknown`,evidence:`Confirm the effective date and inspection terms`}]},offerbreakdown:{title:`Offer breakdown`,icon:`chart`,employer:`Example Studio`,role:`Senior product designer`,parts:[{label:`Base salary`,value:`$165,000`,kind:`base`},{label:`Target bonus`,value:`10%`,kind:`bonus`,note:`Performance-based; not guaranteed.`},{label:`Equity grant`,value:`4,000 units`,kind:`equity`,note:`Value depends on vesting, price, and liquidity.`},{label:`Signing bonus`,value:`$12,000`,kind:`one-time`,note:`Repayment terms may apply.`},{label:`Retirement match`,value:`Up to 4%`,kind:`benefit`}],estimatedTotal:`$193,500 first-year cash at target`,assumptions:[`Target bonus is achieved`,`Equity is excluded from the cash total`,`Verify tax and repayment terms`]}};export{e as E};
@@ -0,0 +1 @@
1
+ var e={caseload:{blurb:`A social-worker caseload: one row per client (a case reference or initials, never a full name), a risk-flag badge banded like a risk matrix, and the next scheduled contact. Social work, case management — "where does each case stand, who needs attention first".`,optional:[`icon`,`iconColor`,`footer`],itemShapes:[{prop:`cases`,text:`clientRef`,textAliases:[`client`,`ref`,`caseId`]}],propHints:{clientRef:`a case reference or initials — NEVER a full client name (confidentiality)`,"cases[].riskLevel":`'low'|'medium'|'high' — omit when a case hasn't been assessed yet`}}};export{e as D};
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/liveSchema-Z_39HuDI.js","assets/icons-gLFQTv74.js","assets/jsx-runtime-DeHZSEgm.js","assets/rolldown-runtime-DkW27tQK.js","assets/safeImageUrl-BINWXOTz.js","assets/empty-D51uhW0E.js","assets/catalog-BHjl-1uH.js","assets/sourceHost-BV3t2XDb.js","assets/spokenText-Dy-GZvZV.js","assets/annotations-CftUUB13.js","assets/catalog-CRekRbKO.js","assets/preload-helper-CiWYd9n-.js","assets/facts-BUGuVUIc.js","assets/blockTypes-DUDdP3pB.js","assets/streamParse-BX0bAppQ.js"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{t as n}from"./compiler-runtime-qQQXpJgv.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{c as a,i as o}from"./http-Bqk6nJiH.js";import{i as s}from"./number-zqlPMliA.js";import{E as c,G as l,H as u,L as d,P as f,U as p,V as m,_ as h,b as g,m as _,p as v,s as y,v as b,y as x,z as ee}from"./store-D16dGt7I.js";import{t as te}from"./providers-CPhoN8j0.js";import{n as S,u as C}from"./useLiveConfig-CvOQTr0s.js";import{t as ne}from"./json-J4Y32_i9.js";import{i as w,n as T,r as E}from"./ledger-DHS2di3l.js";import{d as re,i as D,l as O,o as k,u as A}from"./format-BkvssSOr.js";import{t as j}from"./dataPending-DGdCvY5Y.js";import{t as M}from"./now-C9-UAzTC.js";import{n as ie,t as ae}from"./predictions-CkVKHq-5.js";import{t as N}from"./notify-Bz4wuE4T.js";import{a as oe,i as se,r as ce,t as le,u as ue}from"./dashboardEvents-MzCzak6K.js";var P=t(),de=n(),fe=`mavea-dashboard-scheduler`;function pe(){if(typeof navigator>`u`)return null;let e=navigator.locks;return typeof e?.request==`function`?e:null}async function me(e){let t=pe();if(!t){await e();return}try{await t.request(fe,{ifAvailable:!0},async t=>{t&&await e()})}catch{await e()}}function he(e){return new Set(e.toLowerCase().replace(/[^a-z0-9 ]/g,` `).replace(/\s+/g,` `).trim().split(` `).filter(e=>e.length>3))}function F(e){return e.replace(/\s+/g,` `).trim().toLowerCase()}var ge={WATCHING:`watching`,CLEAR:`clear`,TRIGGERED:`triggered`,AWAITING:`awaiting`},_e={ORIGIN:`origin`,ADDED:`added`,LINKED:`linked`},ve={CLEAR:1,WATCHING:.75,TRIGGERED:0,AWAITING:0};function ye(e){let t=e.tripwires.filter(e=>e.state!==`AWAITING`);if(t.length===0)return null;let n=t.reduce((e,t)=>e+ve[t.state],0);return Math.round(100*n/t.length)}function be(e){return e===null?``:e>=80?`Tracking well`:e>=55?`Holding, with risks`:e>=30?`Slipping`:`Lines are breaking`}var xe=new Set([`thesis`,`alignmentgauge`,`standingalerts`,`sourceslineage`]);function Se(e){let t=e.block.type;return xe.has(t)?!0:!!e.metricId&&t===`insight`}function Ce(e,t){let n=t.block.type;if(!xe.has(n)){if(t.metricId&&n===`insight`){let n=e.metrics.find(e=>e.id===t.metricId);if(n){let e=n.lastValue===null?`—`:n.lastRaw??O(String(n.lastValue),n.unit),r=n.lastValue===null?`inferred`:`strong`,i=t.block.props;return{...t.block,props:{...i,stat:e,conf:r}}}}return t.block}let r=e.sources.find(e=>e.kind===`ORIGIN`);if(n===`thesis`){let n=e.tripwires[0],i={reasoning:e.thesis.text,...r?{asOf:r.title}:{},...n?{reconsiderIf:n.label,tripwireState:ge[n.state]}:{}};return{...t.block,props:i}}if(n===`alignmentgauge`){let n=ye(e),r={pct:n,band:be(n)};return{...t.block,props:r}}if(n===`standingalerts`){let n={alerts:e.tripwires.map(e=>({label:e.label,state:ge[e.state]}))};return{...t.block,props:n}}let i={rows:e.sources.map(e=>({kind:_e[e.kind],label:e.title,...e.contributed?{contributed:e.contributed}:{}}))};return{...t.block,props:i}}var we={metric:`{"kind":"metric","value":number,"raw"?:string}`,series:`{"kind":"series","points":[{"label":string,"value":number}]}`,list:`{"kind":"list","items":[string]}`,table:`{"kind":"table","columns":[string],"rows":[[string]]}`,event:`{"kind":"event","events":[{"when":string,"title":string,"detail"?:string}]}`};function I(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function L(e){return Array.isArray(e)?e:[]}function R(e){return typeof e==`string`?e.trim():typeof e==`number`&&Number.isFinite(e)?String(e):typeof e==`boolean`?e?`yes`:`no`:``}function z(e,...t){for(let n of t){let t=R(e[n]);if(t)return t}return``}function Te(e){if(!I(e))return R(e);let t=z(e,`text`,`label`,`title`,`name`,`item`);if(t){let n=Object.entries(e).filter(([e])=>![`text`,`label`,`title`,`name`,`item`].includes(e)).map(([,e])=>R(e)).filter(Boolean);return n.length?`${t} — ${n.join(` — `)}`:t}return Object.values(e).map(R).filter(Boolean).join(` — `)}function Ee(e,t){let n=I(t)?t:{};switch(e){case`metric`:{let e=s(n.value??n.number??n.amount??t);if(e===null)return null;let r=z(n,`raw`,`display`,`formatted`);return{kind:`metric`,value:e,...r?{raw:r}:{}}}case`series`:{let e=L(n.points??n.data??n.series).map(e=>{let t=I(e)?e:{},n=z(t,`label`,`name`,`x`,`when`,`date`),r=s(t.value??t.y??t.amount);return n&&r!==null?{label:n,value:r}:null}).filter(e=>e!==null);return e.length?{kind:`series`,points:e}:null}case`list`:{let e=L(n.items??n.list??n.entries??t).map(Te).filter(Boolean);return e.length?{kind:`list`,items:e}:null}case`table`:{let e=L(n.rows??n.data??t),r=L(n.columns??n.headers??n.cols).map(R).filter(Boolean);!r.length&&I(e[0])&&(r=Object.keys(e[0]).map(R));let i=e.map(e=>Array.isArray(e)?e.map(R):I(e)?r.map(t=>R(e[t])):[]).filter(e=>e.some(Boolean));return r.length&&i.length?{kind:`table`,columns:r,rows:i}:null}case`event`:{let e=L(n.events??n.items??t).map(e=>{let t=I(e)?e:{},n=z(t,`title`,`name`,`event`,`label`);if(!n)return null;let r=z(t,`when`,`date`,`time`,`at`,`start`),i=z(t,`detail`,`description`,`note`,`status`);return{when:r,title:n,...i?{detail:i}:{}}}).filter(e=>e!==null);return e.length?{kind:`event`,events:e}:null}}}var De={list:`list`,checklist:`list`,timeline:`event`,datatable:`table`,standings:`table`,chart:`series`,bars:`series`};function B(e){return De[e]??null}function V(e,t){return e.raw??O(String(e.value),t)}function Oe(e,t,n={},r){let i=typeof n.title==`string`?n.title:``,a={...i?{title:i}:{},...n.icon?{icon:n.icon}:{}};switch(e){case`insight`:return t.kind===`metric`?{...n,...a,stat:V(t,r),conf:`strong`}:null;case`kpi`:return t.kind===`metric`?{...a,items:[{label:i||`Now`,value:V(t,r)}]}:t.kind===`series`?{...a,items:t.points.slice(-4).map(e=>({label:e.label,value:String(e.value)}))}:null;case`list`:case`checklist`:{let n=t.kind===`list`?t.items:t.kind===`event`?t.events.map(e=>[e.when,e.title,e.detail].filter(Boolean).join(` — `)):t.kind===`series`?t.points.map(e=>`${e.label} — ${e.value}`):t.kind===`table`?t.rows.map(e=>e.filter(Boolean).join(` — `)):null;return n?.length?e===`checklist`?{...a,rows:n.map(e=>({t:e,st:`todo`}))}:{...a,items:n}:null}case`timeline`:return t.kind===`event`?{...a,events:t.events.map(e=>({time:e.when,title:e.title,...e.detail?{detail:e.detail}:{}}))}:null;case`datatable`:{if(t.kind!==`table`)return null;let e=t.columns.map((e,t)=>({key:`c${t}`,label:e}));return{...a,columns:e,rows:t.rows.map(e=>Object.fromEntries(e.map((e,t)=>[`c${t}`,e])))}}case`standings`:{if(t.kind!==`table`)return null;let e=t.rows.map(e=>({team:e[0]??``,rec:e[1]??``,gb:e[2]??``})).filter(e=>e.team);return e.length?{...a,rows:e}:null}case`chart`:return t.kind===`series`?{...a,labels:t.points.map(e=>e.label),series:[{name:i||`Value`,color:`var(--insight)`,data:t.points.map(e=>e.value)}],conf:`strong`}:null;case`bars`:return t.kind===`series`?{...a,bars:t.points.map(e=>({label:e.label,value:e.value})),conf:`strong`}:null;default:return null}}r();function ke(e){let t=e instanceof Error?e.message:String(e);if(/\b429\b|rate.?limit/i.test(t)){let e=Number(/(?:in|after)\s+([\d.]+)\s*s/i.exec(t)?.[1]);return Number.isFinite(e)&&e>0?{kind:`rate-limit`,retryAt:Date.now()+Math.min(e*1e3,12e4)}:{kind:`rate-limit`}}return/\b401\b|\b403\b|api key|unauthor/i.test(t)?{kind:`auth`}:/\b5\d\d\b|overloaded|unavailable|capacity/i.test(t)?{kind:`provider-unavailable`}:{kind:`network`}}function Ae(e,t,n,r){switch(e){case`gt`:return t>r;case`gte`:return t>=r;case`lt`:return t<r;case`lte`:return t<=r;case`crosses_up`:return n!==null&&n<r&&t>=r;case`crosses_down`:return n!==null&&n>r&&t<=r;case`pct_rise`:return n!==null&&n!==0&&(t-n)/Math.abs(n)*100>=r;case`pct_drop`:return n!==null&&n!==0&&(n-t)/Math.abs(n)*100>=r;default:return!1}}function je(e,t,n){if(n===0)return!0;let r=t/n;switch(e){case`gt`:case`gte`:return r>=.9;case`lt`:case`lte`:return r<=1.1;default:return!0}}function Me(e,t,n){return t===null?`AWAITING`:Ae(e.comparator,t,n,e.threshold)?`TRIGGERED`:je(e.comparator,t,e.threshold)?`WATCHING`:`CLEAR`}function H(e,t={}){let n=new Map(e.metrics.map(e=>[e.id,e])),r=[];return{tripwires:e.tripwires.map(e=>{let i=n.get(e.metricId),a=i?i.lastValue:null,o=Me(e,a,e.metricId in t?t[e.metricId]:a),s=o===`TRIGGERED`&&e.state!==`TRIGGERED`?{...e,state:o,brokenValue:a??void 0,brokenAt:i?.asOf}:{...e,state:o};return o===`TRIGGERED`&&e.state!==`TRIGGERED`&&r.push(s),s}),newlyTriggered:r}}function Ne(e,t){return e.nextDataAt<=t||e.oneShotAt!==void 0&&e.oneShotAt<=t}function U(e){return e.oneShotAt===void 0?e.nextDataAt:Math.min(e.nextDataAt,e.oneShotAt)}function Pe(e,t=Date.now(),n=4){return e.filter(e=>Ne(e,t)).sort((e,t)=>U(e)-U(t)).slice(0,n)}function Fe(e,t=Date.now()){return e.filter(e=>e.nextAiAt<=t).sort((e,t)=>e.nextAiAt-t.nextAiAt)[0]??null}function W(e,t,n=Date.now()){return e.smartTrigger&&t.length>0?{fire:!0,trigger:t[0]}:(e.cadence.ai===`daily`||e.cadence.ai===`weekly`)&&n>=e.nextAiAt?{fire:!0,trigger:`scheduled`}:{fire:!1,trigger:null}}function G(e){let t=[];for(let n of o(e.sources)){let e=a(n);typeof e.title==`string`&&typeof e.url==`string`&&t.push({title:e.title,url:e.url})}return t}function K(e,t){return(e.sources?.length??0)>0||G(t).length>0}function Ie(e){return`- VALUE "${e.label}" — ${e.query}`}function Le(e,t,n){let r=B(e.block.type);return r?`- DATA #${t} [${r}] ${e.refreshQuery}\n return EXACTLY: ${we[r]}`:`- BLOCK #${t} [${e.block.type}] ${e.refreshQuery}\n`+(n?` expected props (use EXACTLY these field names): ${n}\n`:``)+` current content: ${JSON.stringify(e.block.props??{}).slice(0,600)}`}function Re(){return{values:{},widgets:{}}}function ze(e){return{metrics:e.metrics.filter(e=>e.query.trim()!==``&&!e.blankKey),targets:e.widgets.filter(e=>!!e.refreshQuery?.trim()&&!Se(e))}}function Be(e){let t=[e.block.type];if(e.block.type===`composite`){let n=e.block.props.regions;for(let e of n??[]){let n=e?.block?.type;typeof n==`string`&&n&&t.push(n)}}return t}function Ve(e,t,n){let r=n.reduce((e,t)=>e+(B(t.block.type)?300:1200),0);return 400+t.length*120+r+(e.prediction?150:0)}var He=12e3;function q(e){let t=[],n=1200;for(let r of e){let{metrics:e,targets:i}=ze(r);if(e.length===0&&i.length===0)continue;let a=Ve(r,e,i);if(t.length>0&&n+a>He)break;n+=a,t.push({d:r,metrics:e,targets:i})}return t}function Ue(e,t){let n=Math.max(0,Math.round((t-e)/6e4));if(n<60)return`${n}m ago`;let r=Math.round(n/60);return r<24?`${r}h ago`:`${Math.round(r/24)}d ago`}function We(e,t,n){let r=[...e.metrics.map(Ie),...e.targets.map((e,t)=>Le(e,t,n(e.block.type))),...e.d.prediction?[`- PREVIOUS EXPECTATION (made ${Ue(e.d.prediction.at,t)}): "${e.d.prediction.text}" — grade it.`]:[]];return`DASHBOARD ${e.d.id} "${e.d.title}"\n${r.join(`
3
- `)}`}function Ge(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Ke(e,t){let n=e.dashboards;if(n===void 0&&t.length===1)return{[t[0].d.id]:e};let r=new Map,i=[];if(Array.isArray(n))for(let e of n){let t=a(e);i.push(t),typeof t.id==`string`&&t.id&&r.set(t.id,t)}else if(Ge(n))for(let[e,t]of Object.entries(n))r.set(e,a(t));let o={};return t.forEach((e,t)=>{o[e.d.id]=r.get(e.d.id)??i[t]??{}}),o}function qe(e){let t=a(e);if(typeof t.metricLabel!=`string`||!t.metricLabel.trim())return;let n=o(t.readings).filter(e=>typeof e==`string`&&!!e.trim());if(!(n.length<2))return{metricLabel:t.metricLabel.trim(),readings:n,note:typeof t.note==`string`?t.note.trim().slice(0,200):``}}function Je(e){let t=a(e),n=typeof t.start==`string`?Date.parse(t.start):NaN,r=typeof t.end==`string`?Date.parse(t.end):NaN;if(!(!Number.isFinite(n)||!Number.isFinite(r)||r<=n)&&!(r-n>6048e5))return{startAt:n,endAt:r,label:typeof t.label==`string`?t.label.trim().slice(0,60):``}}var Ye=` YOUR PREVIOUS ATTEMPT DID NOT ACTUALLY SEARCH (no citations came back). Before answering this time, you MUST run a real web search for every DASHBOARD section above and report only what those searches returned, listing the real URLs relied on in "sources" — this is not optional. If search is genuinely unavailable or turns up nothing, return null values and omit "sources" entirely; never invent a value or a source just to satisfy this instruction.`;async function Xe(e,t,n={}){let r=Date.now(),c={ok:!0,grounded:!1,perDashboard:{},sources:[],attempts:0};if(e.length===0&&!n.briefingContext)return c;try{let c=te(t.provider),l=e.flatMap(e=>e.targets.filter(e=>!B(e.block.type))),u=new Set(l.flatMap(Be)),d=u.size>0,f=d?await i(()=>import(`./liveSchema-Z_39HuDI.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])):null,p=e.map(e=>We(e,r,f?f.blockShapeHint:()=>null)).join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/liveSchema-eKgFc5D0.js","assets/icons-gLFQTv74.js","assets/jsx-runtime-DeHZSEgm.js","assets/rolldown-runtime-DkW27tQK.js","assets/safeImageUrl-BINWXOTz.js","assets/empty-D51uhW0E.js","assets/catalog-BHjl-1uH.js","assets/sourceHost-BV3t2XDb.js","assets/spokenText-Dy-GZvZV.js","assets/annotations-CftUUB13.js","assets/catalog-vLsIS_Na.js","assets/preload-helper-CiWYd9n-.js","assets/facts-CNQz8OQz.js","assets/blockTypes-DUDdP3pB.js","assets/streamParse-BX0bAppQ.js"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{t as n}from"./compiler-runtime-qQQXpJgv.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{c as a,i as o}from"./http-Bqk6nJiH.js";import{i as s}from"./number-zqlPMliA.js";import{E as c,G as l,H as u,L as d,P as f,U as p,V as m,_ as h,b as g,m as _,p as v,s as y,v as b,y as x,z as ee}from"./store-D16dGt7I.js";import{t as te}from"./providers-CPhoN8j0.js";import{n as S,u as C}from"./useLiveConfig-CvOQTr0s.js";import{t as ne}from"./json-J4Y32_i9.js";import{i as w,n as T,r as E}from"./ledger-DHS2di3l.js";import{d as re,i as D,l as O,o as k,u as A}from"./format-BkvssSOr.js";import{t as j}from"./dataPending-DGdCvY5Y.js";import{t as M}from"./now-C9-UAzTC.js";import{n as ie,t as ae}from"./predictions-CkVKHq-5.js";import{t as N}from"./notify-Bz4wuE4T.js";import{a as oe,i as se,r as ce,t as le,u as ue}from"./dashboardEvents-PktCbV72.js";var P=t(),de=n(),fe=`mavea-dashboard-scheduler`;function pe(){if(typeof navigator>`u`)return null;let e=navigator.locks;return typeof e?.request==`function`?e:null}async function me(e){let t=pe();if(!t){await e();return}try{await t.request(fe,{ifAvailable:!0},async t=>{t&&await e()})}catch{await e()}}function he(e){return new Set(e.toLowerCase().replace(/[^a-z0-9 ]/g,` `).replace(/\s+/g,` `).trim().split(` `).filter(e=>e.length>3))}function F(e){return e.replace(/\s+/g,` `).trim().toLowerCase()}var ge={WATCHING:`watching`,CLEAR:`clear`,TRIGGERED:`triggered`,AWAITING:`awaiting`},_e={ORIGIN:`origin`,ADDED:`added`,LINKED:`linked`},ve={CLEAR:1,WATCHING:.75,TRIGGERED:0,AWAITING:0};function ye(e){let t=e.tripwires.filter(e=>e.state!==`AWAITING`);if(t.length===0)return null;let n=t.reduce((e,t)=>e+ve[t.state],0);return Math.round(100*n/t.length)}function be(e){return e===null?``:e>=80?`Tracking well`:e>=55?`Holding, with risks`:e>=30?`Slipping`:`Lines are breaking`}var xe=new Set([`thesis`,`alignmentgauge`,`standingalerts`,`sourceslineage`]);function Se(e){let t=e.block.type;return xe.has(t)?!0:!!e.metricId&&t===`insight`}function Ce(e,t){let n=t.block.type;if(!xe.has(n)){if(t.metricId&&n===`insight`){let n=e.metrics.find(e=>e.id===t.metricId);if(n){let e=n.lastValue===null?`—`:n.lastRaw??O(String(n.lastValue),n.unit),r=n.lastValue===null?`inferred`:`strong`,i=t.block.props;return{...t.block,props:{...i,stat:e,conf:r}}}}return t.block}let r=e.sources.find(e=>e.kind===`ORIGIN`);if(n===`thesis`){let n=e.tripwires[0],i={reasoning:e.thesis.text,...r?{asOf:r.title}:{},...n?{reconsiderIf:n.label,tripwireState:ge[n.state]}:{}};return{...t.block,props:i}}if(n===`alignmentgauge`){let n=ye(e),r={pct:n,band:be(n)};return{...t.block,props:r}}if(n===`standingalerts`){let n={alerts:e.tripwires.map(e=>({label:e.label,state:ge[e.state]}))};return{...t.block,props:n}}let i={rows:e.sources.map(e=>({kind:_e[e.kind],label:e.title,...e.contributed?{contributed:e.contributed}:{}}))};return{...t.block,props:i}}var we={metric:`{"kind":"metric","value":number,"raw"?:string}`,series:`{"kind":"series","points":[{"label":string,"value":number}]}`,list:`{"kind":"list","items":[string]}`,table:`{"kind":"table","columns":[string],"rows":[[string]]}`,event:`{"kind":"event","events":[{"when":string,"title":string,"detail"?:string}]}`};function I(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function L(e){return Array.isArray(e)?e:[]}function R(e){return typeof e==`string`?e.trim():typeof e==`number`&&Number.isFinite(e)?String(e):typeof e==`boolean`?e?`yes`:`no`:``}function z(e,...t){for(let n of t){let t=R(e[n]);if(t)return t}return``}function Te(e){if(!I(e))return R(e);let t=z(e,`text`,`label`,`title`,`name`,`item`);if(t){let n=Object.entries(e).filter(([e])=>![`text`,`label`,`title`,`name`,`item`].includes(e)).map(([,e])=>R(e)).filter(Boolean);return n.length?`${t} — ${n.join(` — `)}`:t}return Object.values(e).map(R).filter(Boolean).join(` — `)}function Ee(e,t){let n=I(t)?t:{};switch(e){case`metric`:{let e=s(n.value??n.number??n.amount??t);if(e===null)return null;let r=z(n,`raw`,`display`,`formatted`);return{kind:`metric`,value:e,...r?{raw:r}:{}}}case`series`:{let e=L(n.points??n.data??n.series).map(e=>{let t=I(e)?e:{},n=z(t,`label`,`name`,`x`,`when`,`date`),r=s(t.value??t.y??t.amount);return n&&r!==null?{label:n,value:r}:null}).filter(e=>e!==null);return e.length?{kind:`series`,points:e}:null}case`list`:{let e=L(n.items??n.list??n.entries??t).map(Te).filter(Boolean);return e.length?{kind:`list`,items:e}:null}case`table`:{let e=L(n.rows??n.data??t),r=L(n.columns??n.headers??n.cols).map(R).filter(Boolean);!r.length&&I(e[0])&&(r=Object.keys(e[0]).map(R));let i=e.map(e=>Array.isArray(e)?e.map(R):I(e)?r.map(t=>R(e[t])):[]).filter(e=>e.some(Boolean));return r.length&&i.length?{kind:`table`,columns:r,rows:i}:null}case`event`:{let e=L(n.events??n.items??t).map(e=>{let t=I(e)?e:{},n=z(t,`title`,`name`,`event`,`label`);if(!n)return null;let r=z(t,`when`,`date`,`time`,`at`,`start`),i=z(t,`detail`,`description`,`note`,`status`);return{when:r,title:n,...i?{detail:i}:{}}}).filter(e=>e!==null);return e.length?{kind:`event`,events:e}:null}}}var De={list:`list`,checklist:`list`,timeline:`event`,datatable:`table`,standings:`table`,chart:`series`,bars:`series`};function B(e){return De[e]??null}function V(e,t){return e.raw??O(String(e.value),t)}function Oe(e,t,n={},r){let i=typeof n.title==`string`?n.title:``,a={...i?{title:i}:{},...n.icon?{icon:n.icon}:{}};switch(e){case`insight`:return t.kind===`metric`?{...n,...a,stat:V(t,r),conf:`strong`}:null;case`kpi`:return t.kind===`metric`?{...a,items:[{label:i||`Now`,value:V(t,r)}]}:t.kind===`series`?{...a,items:t.points.slice(-4).map(e=>({label:e.label,value:String(e.value)}))}:null;case`list`:case`checklist`:{let n=t.kind===`list`?t.items:t.kind===`event`?t.events.map(e=>[e.when,e.title,e.detail].filter(Boolean).join(` — `)):t.kind===`series`?t.points.map(e=>`${e.label} — ${e.value}`):t.kind===`table`?t.rows.map(e=>e.filter(Boolean).join(` — `)):null;return n?.length?e===`checklist`?{...a,rows:n.map(e=>({t:e,st:`todo`}))}:{...a,items:n}:null}case`timeline`:return t.kind===`event`?{...a,events:t.events.map(e=>({time:e.when,title:e.title,...e.detail?{detail:e.detail}:{}}))}:null;case`datatable`:{if(t.kind!==`table`)return null;let e=t.columns.map((e,t)=>({key:`c${t}`,label:e}));return{...a,columns:e,rows:t.rows.map(e=>Object.fromEntries(e.map((e,t)=>[`c${t}`,e])))}}case`standings`:{if(t.kind!==`table`)return null;let e=t.rows.map(e=>({team:e[0]??``,rec:e[1]??``,gb:e[2]??``})).filter(e=>e.team);return e.length?{...a,rows:e}:null}case`chart`:return t.kind===`series`?{...a,labels:t.points.map(e=>e.label),series:[{name:i||`Value`,color:`var(--insight)`,data:t.points.map(e=>e.value)}],conf:`strong`}:null;case`bars`:return t.kind===`series`?{...a,bars:t.points.map(e=>({label:e.label,value:e.value})),conf:`strong`}:null;default:return null}}r();function ke(e){let t=e instanceof Error?e.message:String(e);if(/\b429\b|rate.?limit/i.test(t)){let e=Number(/(?:in|after)\s+([\d.]+)\s*s/i.exec(t)?.[1]);return Number.isFinite(e)&&e>0?{kind:`rate-limit`,retryAt:Date.now()+Math.min(e*1e3,12e4)}:{kind:`rate-limit`}}return/\b401\b|\b403\b|api key|unauthor/i.test(t)?{kind:`auth`}:/\b5\d\d\b|overloaded|unavailable|capacity/i.test(t)?{kind:`provider-unavailable`}:{kind:`network`}}function Ae(e,t,n,r){switch(e){case`gt`:return t>r;case`gte`:return t>=r;case`lt`:return t<r;case`lte`:return t<=r;case`crosses_up`:return n!==null&&n<r&&t>=r;case`crosses_down`:return n!==null&&n>r&&t<=r;case`pct_rise`:return n!==null&&n!==0&&(t-n)/Math.abs(n)*100>=r;case`pct_drop`:return n!==null&&n!==0&&(n-t)/Math.abs(n)*100>=r;default:return!1}}function je(e,t,n){if(n===0)return!0;let r=t/n;switch(e){case`gt`:case`gte`:return r>=.9;case`lt`:case`lte`:return r<=1.1;default:return!0}}function Me(e,t,n){return t===null?`AWAITING`:Ae(e.comparator,t,n,e.threshold)?`TRIGGERED`:je(e.comparator,t,e.threshold)?`WATCHING`:`CLEAR`}function H(e,t={}){let n=new Map(e.metrics.map(e=>[e.id,e])),r=[];return{tripwires:e.tripwires.map(e=>{let i=n.get(e.metricId),a=i?i.lastValue:null,o=Me(e,a,e.metricId in t?t[e.metricId]:a),s=o===`TRIGGERED`&&e.state!==`TRIGGERED`?{...e,state:o,brokenValue:a??void 0,brokenAt:i?.asOf}:{...e,state:o};return o===`TRIGGERED`&&e.state!==`TRIGGERED`&&r.push(s),s}),newlyTriggered:r}}function Ne(e,t){return e.nextDataAt<=t||e.oneShotAt!==void 0&&e.oneShotAt<=t}function U(e){return e.oneShotAt===void 0?e.nextDataAt:Math.min(e.nextDataAt,e.oneShotAt)}function Pe(e,t=Date.now(),n=4){return e.filter(e=>Ne(e,t)).sort((e,t)=>U(e)-U(t)).slice(0,n)}function Fe(e,t=Date.now()){return e.filter(e=>e.nextAiAt<=t).sort((e,t)=>e.nextAiAt-t.nextAiAt)[0]??null}function W(e,t,n=Date.now()){return e.smartTrigger&&t.length>0?{fire:!0,trigger:t[0]}:(e.cadence.ai===`daily`||e.cadence.ai===`weekly`)&&n>=e.nextAiAt?{fire:!0,trigger:`scheduled`}:{fire:!1,trigger:null}}function G(e){let t=[];for(let n of o(e.sources)){let e=a(n);typeof e.title==`string`&&typeof e.url==`string`&&t.push({title:e.title,url:e.url})}return t}function K(e,t){return(e.sources?.length??0)>0||G(t).length>0}function Ie(e){return`- VALUE "${e.label}" — ${e.query}`}function Le(e,t,n){let r=B(e.block.type);return r?`- DATA #${t} [${r}] ${e.refreshQuery}\n return EXACTLY: ${we[r]}`:`- BLOCK #${t} [${e.block.type}] ${e.refreshQuery}\n`+(n?` expected props (use EXACTLY these field names): ${n}\n`:``)+` current content: ${JSON.stringify(e.block.props??{}).slice(0,600)}`}function Re(){return{values:{},widgets:{}}}function ze(e){return{metrics:e.metrics.filter(e=>e.query.trim()!==``&&!e.blankKey),targets:e.widgets.filter(e=>!!e.refreshQuery?.trim()&&!Se(e))}}function Be(e){let t=[e.block.type];if(e.block.type===`composite`){let n=e.block.props.regions;for(let e of n??[]){let n=e?.block?.type;typeof n==`string`&&n&&t.push(n)}}return t}function Ve(e,t,n){let r=n.reduce((e,t)=>e+(B(t.block.type)?300:1200),0);return 400+t.length*120+r+(e.prediction?150:0)}var He=12e3;function q(e){let t=[],n=1200;for(let r of e){let{metrics:e,targets:i}=ze(r);if(e.length===0&&i.length===0)continue;let a=Ve(r,e,i);if(t.length>0&&n+a>He)break;n+=a,t.push({d:r,metrics:e,targets:i})}return t}function Ue(e,t){let n=Math.max(0,Math.round((t-e)/6e4));if(n<60)return`${n}m ago`;let r=Math.round(n/60);return r<24?`${r}h ago`:`${Math.round(r/24)}d ago`}function We(e,t,n){let r=[...e.metrics.map(Ie),...e.targets.map((e,t)=>Le(e,t,n(e.block.type))),...e.d.prediction?[`- PREVIOUS EXPECTATION (made ${Ue(e.d.prediction.at,t)}): "${e.d.prediction.text}" — grade it.`]:[]];return`DASHBOARD ${e.d.id} "${e.d.title}"\n${r.join(`
3
+ `)}`}function Ge(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Ke(e,t){let n=e.dashboards;if(n===void 0&&t.length===1)return{[t[0].d.id]:e};let r=new Map,i=[];if(Array.isArray(n))for(let e of n){let t=a(e);i.push(t),typeof t.id==`string`&&t.id&&r.set(t.id,t)}else if(Ge(n))for(let[e,t]of Object.entries(n))r.set(e,a(t));let o={};return t.forEach((e,t)=>{o[e.d.id]=r.get(e.d.id)??i[t]??{}}),o}function qe(e){let t=a(e);if(typeof t.metricLabel!=`string`||!t.metricLabel.trim())return;let n=o(t.readings).filter(e=>typeof e==`string`&&!!e.trim());if(!(n.length<2))return{metricLabel:t.metricLabel.trim(),readings:n,note:typeof t.note==`string`?t.note.trim().slice(0,200):``}}function Je(e){let t=a(e),n=typeof t.start==`string`?Date.parse(t.start):NaN,r=typeof t.end==`string`?Date.parse(t.end):NaN;if(!(!Number.isFinite(n)||!Number.isFinite(r)||r<=n)&&!(r-n>6048e5))return{startAt:n,endAt:r,label:typeof t.label==`string`?t.label.trim().slice(0,60):``}}var Ye=` YOUR PREVIOUS ATTEMPT DID NOT ACTUALLY SEARCH (no citations came back). Before answering this time, you MUST run a real web search for every DASHBOARD section above and report only what those searches returned, listing the real URLs relied on in "sources" — this is not optional. If search is genuinely unavailable or turns up nothing, return null values and omit "sources" entirely; never invent a value or a source just to satisfy this instruction.`;async function Xe(e,t,n={}){let r=Date.now(),c={ok:!0,grounded:!1,perDashboard:{},sources:[],attempts:0};if(e.length===0&&!n.briefingContext)return c;try{let c=te(t.provider),l=e.flatMap(e=>e.targets.filter(e=>!B(e.block.type))),u=new Set(l.flatMap(Be)),d=u.size>0,f=d?await i(()=>import(`./liveSchema-eKgFc5D0.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14])):null,p=e.map(e=>We(e,r,f?f.blockShapeHint:()=>null)).join(`
4
4
 
5
5
  `),m={type:`object`,properties:{dashboards:{type:`array`,description:`One object per DASHBOARD section above, in the same order, each echoing its id.`,items:{type:`object`,properties:{id:{type:`string`},values:{type:`object`,description:`Map of VALUE label -> current numeric value, or null.`},observations:{type:`array`,description:`Exactly one object per DATA item for this dashboard, in the same order, each in the exact shape that DATA line specifies.`,items:{type:`object`}},blocks:{type:`array`,description:`Exactly one block per BLOCK item for this dashboard, in order.`,items:{type:`object`,properties:{type:{type:`string`},props:{type:`object`}},required:[`type`,`props`]}},expects:{type:`string`,description:`A short "by next check" expectation — omit if nothing here is genuinely predictable.`},grade:{type:`object`,description:`ONLY when this dashboard has a PREVIOUS EXPECTATION line.`,properties:{result:{type:`string`},note:{type:`string`}}},disagreement:{type:`object`,description:`ONLY when two real sources genuinely disagreed on a value.`,properties:{metricLabel:{type:`string`},readings:{type:`array`,items:{type:`string`}},note:{type:`string`}}},liveWindow:{type:`object`,description:`ONLY when search revealed a real, bounded live-event window.`,properties:{start:{type:`string`},end:{type:`string`},label:{type:`string`}}}},required:[`id`]}},...n.briefingContext?{briefing:{type:`string`,description:`2-4 sentences summarizing ALL dashboards (this batch + the given CONTEXT), real values only; use [[shown|said]] pronunciation twins for speech-risky terms.`}}:{},sources:{type:`array`,description:`OMIT unless this call used web search. Real source URLs actually relied on — never invented.`,items:{type:`object`,properties:{title:{type:`string`},url:{type:`string`}},required:[`title`,`url`]}}},required:[`dashboards`]},h=d===!1,g=Math.min(h?4e3:14e3,Math.max(h?1500:3e3,1200+e.reduce((e,t)=>e+Ve(t.d,t.metrics,t.targets),0)+(n.briefingContext?700:0))),_=M()+` You are checking several standing trackers at once. Return ONLY JSON: {"dashboards": [{"id": string, "values": {...}, "observations": [...], "blocks": [...], "expects"?: string, "grade"?: {...}, "disagreement"?: {...}, "liveWindow"?: {...}}, ...], `+(n.briefingContext?`"briefing": string, `:``)+`"sources": [...]}. Use web search for every DASHBOARD section below — never invent a value or detail. ECHO each dashboard's exact "id" so results map back correctly. For a VALUE item, give its CURRENT real number (no units) or null if unverifiable. For a BLOCK For a DATA item, return ONE object in "observations" (same order as the DATA lines) in the exact shape that line prints — plain data, no component or prop names, and omit the entry entirely rather than inventing a value you did not find. For a BLOCK item, produce exactly one block whose "type" is the EXACT bracketed type given — never substitute a different one — matching its current content for detail level (real names, numbers, dates). Where a BLOCK lists "expected props", copy that shape EXACTLY: the same field names, and an array shown as string[] takes plain strings, never objects. CRITICAL — a "current content" showing something live, in progress, or upcoming is NOT necessarily still true right now: explicitly check whether it has SINCE concluded and report the concluding outcome if so, reasoning from the date/time above which of upcoming/live/finished applies at this exact moment. If a dashboard has a PREVIOUS EXPECTATION line, grade it honestly ("hit" it came true, "miss" it did not, "unclear" if genuinely unknowable yet) — grade ONLY dashboards that have this line, never invent a grade otherwise. Offer a fresh "expects" only when something is genuinely predictable by the next check; most checks have nothing worth predicting, so omit it far more often than not. If two real sources genuinely disagree on a value, report it in "disagreement" instead of silently picking one. If search reveals a real bounded live-event window (a match's actual start/end time) for a dashboard, report it in "liveWindow" with ISO start/end — never invent a time. `+(n.briefingContext?`Also compose "briefing": 2-4 warm, concrete sentences summarizing ALL dashboards — this batch PLUS the CONTEXT lines below (already-known values — do NOT search for those, use them as given) — real values only, never memory. The briefing is displayed and spoken: preserve normal spelling on the left, but wrap a name, place, brand, or borrowed term a voice would genuinely mispronounce as [[shown|said]] (for example [[Omakase|oh-mah-kah-seh]]). The said side must be lowercase voice-safe syllables matching a native/source-language pronunciation, never IPA or an Anglicized guess. Annotate sparingly — the said side is one you invent, so a wrong one makes the voice say a word WRONG. Ordinary English words and names are never annotated. `:``)+`If search genuinely turns up nothing more specific than what is already shown, say so honestly rather than inventing new specifics or repeating the old ones as if just confirmed. CITE SOURCES — every real URL actually relied on, in "sources"; omit it entirely if you used no search.`,v=`Use web search.\n\n${p}`+(n.briefingContext?`\n\nCONTEXT (already known — do not search these):\n${n.briefingContext}`:``),y=e=>c.generate({system:e?_+Ye:_,history:[],user:v,maxTokens:g,temperature:.15,thinkingLevel:e?`high`:`low`,tools:{webSearch:!0,requireSearch:!0},format:m,...d?{blockTypes:[...u],complexity:`brief`}:{}},t).then(e=>({rr:e,grounded:K(e,a(ne(e.raw)))})),b=await y(!1),x=1;!b.grounded&&e.length>0&&(b=await y(!0),x=2);let{rr:S}=b,C=a(ne(S.raw)),w=K(S,C),T=Ke(C,e),E=S.sources&&S.sources.length?S.sources:G(C),re=[...new Set(E.map(e=>k(e.url)).filter(Boolean))],D=f?f.validateLiveResponse:null,A={};for(let t of e){let e=T[t.d.id]??{},n=Re();if(w&&t.metrics.length>0){let r=a(e.values),i=new Map(Object.entries(r).map(([e,t])=>[F(e),t]));for(let e of t.metrics){let t=s(r[e.label]??i.get(F(e.label)));t!==null&&(n.values[e.id]={value:t,raw:O(String(t),e.unit)})}}if(t.targets.length>0&&w){let i=o(e.observations??e.data);t.targets.forEach((e,a)=>{let o=B(e.block.type);if(!o)return;let s=Ee(o,i[a]);if(!s)return;let c=e.block.props??{},l=e.metricId?t.d.metrics.find(t=>t.id===e.metricId):void 0,u=Oe(e.block.type,s,c,l?.unit);u&&(n.widgets[e.id]={...e.block,props:u},ee(t.d.id,e.id,s,r,re))})}if(t.targets.length>0&&D){let r=o(e.blocks);t.targets.forEach((e,t)=>{if(B(e.block.type))return;let i=r[t];if(!i)return;let a=D({narration:``,title:`x`,sub:``,blocks:[i]},new Set(Be(e)),1,w,!0)?.blocks[0];a&&a.type===e.block.type&&(n.widgets[e.id]=a)})}if(w){let r=ae(e.expects);if(r&&(n.expects=r),t.d.prediction){let t=ie(e.grade);t&&(n.grade=t)}let i=qe(e.disagreement);i&&(n.disagreement=i);let a=Je(e.liveWindow);a&&(n.liveWindow=a)}A[t.d.id]=n}Object.values(A).every(e=>Object.keys(e.values).length===0&&Object.keys(e.widgets).length===0&&!e.expects)&&console.warn(`[dashboards] refreshDashboards got a response but nothing parsed out of it for any dashboard (${w?`empty/unparseable`:`ungrounded after ${x} attempt${x>1?`s`:``}, discarded`})`,{dashboardIds:e.map(e=>e.d.id),raw:S.raw});let j=n.briefingContext&&w&&typeof C.briefing==`string`&&C.briefing.trim()?C.briefing.trim():void 0;return{ok:!0,grounded:w,perDashboard:A,sources:E,attempts:x,...j?{briefing:j}:{}}}catch(t){console.error(`[dashboards] refreshDashboards failed`,t);let n={};for(let t of e)n[t.d.id]=Re();return{ok:!1,grounded:!1,perDashboard:n,sources:[],attempts:0,failure:ke(t)}}}function Ze(e){let t=Array.isArray(e?.sources)?e.sources:[],n=[];for(let e of t){let t=e&&typeof e==`object`?e:{};typeof t.title==`string`&&typeof t.url==`string`&&n.push({title:t.title,url:t.url})}return n}function Qe(e){try{let t=typeof e==`string`?JSON.parse($e(e)):e,n=t?.verdict;return{text:typeof n==`string`&&n.trim()?n.trim():null,sources:Ze(t)}}catch{return{text:typeof e==`string`&&e.trim()?e.trim():null,sources:[]}}}function $e(e){let t=e.indexOf(`{`),n=e.lastIndexOf(`}`);return t>=0&&n>t?e.slice(t,n+1):e}async function J(e,t,n,r=Date.now()){try{let i=te(n.provider),a=t===`scheduled`?null:t,o=a?e.metrics.find(e=>e.id===a.metricId):void 0,s=e.metrics.map(e=>`${e.label}=${e.lastRaw??`—`}`).join(`, `),c=a?`A line the user set just crossed: "${a.label}" — ${o?.label??a.label} is now ${o?.lastRaw??a.brokenValue??`past the threshold`}. Currently tracked: ${s}. Using web search, say briefly and honestly what the latest numbers show and whether this reads as a real move or just noise.`:`Currently tracked: ${s}. Using web search, give a brief, honest read: what the latest numbers show and what has materially changed since the last check.`,l=await i.generate({system:M()+` You give a brief, honest read on the latest numbers a user is tracking: what they show now, what has materially changed since the last check, and — if a specific line was crossed — whether that looks like a real move or noise. One or two plain sentences. Never invent data. CITE YOUR SOURCES — whenever you used web search, include the exact source URLs you actually relied on as a top-level "sources": [{"title": string, "url": string}] array; only real URLs from the search results — never invent one, and omit "sources" entirely if you didn’t search. Return ONLY JSON: {"verdict":"…","sources":[...]}.`,history:[],user:c,maxTokens:700,temperature:.3,thinkingLevel:`low`,tools:{webSearch:!0}},n),{text:u,sources:d}=Qe(l.raw);return u?{text:u,at:r,grounded:(l.sources?.length??0)>0||d.length>0,...l.sources&&l.sources.length?{sources:l.sources}:{},...a?{tripwireId:a.id}:{}}:null}catch(e){return console.error(`[dashboards] analyzeMove failed`,e),null}}function et(e){let t=(e??[]).slice(-3);if(t.length<3)return 0;let[n,r,i]=t;return n.value<r.value&&r.value<i.value?1:n.value>r.value&&r.value>i.value?-1:0}function tt(e){let t=e.metrics.filter(e=>(e.history?.length??0)>=3);for(let n=0;n<t.length;n++)for(let r=n+1;r<t.length;r++){let i=t[n],a=t[r],o=et(i.history);if(o!==0&&o===et(a.history))return{text:`${i.label} and ${a.label} have moved together over the last three checks.`,dashboardIds:[e.id]}}return null}function nt(e,t){let n=e.filter(e=>{let n=e.cadence.window;return!!n&&t>=n.startAt&&t<=n.endAt});if(n.length<2)return null;let[r,i]=n;return{text:`${r.title} and ${i.title} overlap right now — their checks are batched into shared searches while both are live.`,dashboardIds:[r.id,i.id]}}var rt=5;function it(e){if(e.cadence.data!==`15min`&&e.cadence.data!==`hourly`)return null;let t=e.metrics.find(e=>(e.history?.length??0)>=rt);if(!t?.history)return null;let n=t.history.slice(-5);return n.every(e=>e.value===n[0].value)?{text:`${t.label} hasn't moved across ${e.title}'s last ${rt} checks.`,dashboardIds:[e.id]}:null}function at(e,t){let n=t.note?` ${t.note}`:``;return{text:`Sources disagreed on ${t.metricLabel}: ${t.readings.join(` vs `)}.${n}`,dashboardIds:[e.id]}}var ot=432e5;function st(e,t,n){let r=n-ot;return e.some(e=>e.kind===`insight`&&e.at>=r&&e.text===t.text)}function ct(e,t,n,r=2){let i=[],a=nt(e,n);a&&i.push(a);for(let t of e){let e=tt(t);e&&i.push(e);let n=it(t);n&&i.push(n)}return i.filter(e=>!st(t,e,n)).slice(0,r)}var lt=e({checkAllDashboardsNow:()=>Ct,readDashboardNow:()=>wt,refreshDashboardNow:()=>St,runRefreshBatch:()=>$,selectTickTargets:()=>Tt,useDashboardLoop:()=>Et,useVerdictPending:()=>mt}),ut=15e3,dt=3e5;function ft(e,t){switch(e?.kind){case`rate-limit`:return e.retryAt?Math.max(15e3,e.retryAt-t):6e4;case`provider-unavailable`:return 12e4;case`auth`:return 216e5;default:return dt}}var Y=new Set,X=new Set,Z=`mavea-dashboard-verdict-pending`;function Q(e,t){t?X.add(e):X.delete(e);try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(Z,{detail:e}))}catch{}}function pt(e){return window.addEventListener(Z,e),()=>window.removeEventListener(Z,e)}function mt(e){let t=(0,de.c)(2),n;return t[0]===e?n=t[1]:(n=()=>X.has(e),t[0]=e,t[1]=n),(0,P.useSyncExternalStore)(pt,n,ht)}function ht(){return!1}function gt(e,t){return e.map(e=>{let n=t.perDashboard[e.d.id]??{values:{},widgets:{}},r=e.metrics.find(e=>n.values[e.id]);return r?`${e.d.title} at ${n.values[r.id].raw}`:e.targets.some(e=>n.widgets[e.id])?`${e.d.title} updated`:t.grounded?`${e.d.title} checked`:`${e.d.title} — couldn't verify`}).join(` · `)}var _t=`Daily search budget reached — auto-checks paused until midnight. Manual checks still work.`;function vt(e){let t=new Date(e);return t.setHours(0,0,0,0),t.getTime()}function yt(e){let t=vt(e);w().some(e=>e.kind===`savings`&&e.at>=t&&e.text===_t)||T({kind:`savings`,text:_t,dashboardIds:[],searches:0})}async function bt(e,t,n,r,i,a,o=!1){let{d:s}=e,l=Object.keys(t.values).length>0||Object.keys(t.widgets).length>0?`updated`:o?`unverified`:`no-change`,u=s.metrics.map(e=>{let n=t.values[e.id];return n?{...e,lastValue:n.value}:e}),d={...s,metrics:u},{tripwires:f,newlyTriggered:p}=H(d,n),m=s.oneShotAt!==void 0&&s.oneShotAt<=a;y(s.id,{values:Object.entries(t.values).map(([e,t])=>({metricId:e,value:t.value,raw:t.raw,origin:`search`})),blocks:Object.entries(t.widgets).map(([e,t])=>({widgetId:e,block:t})),tripwires:f,outcome:l,...t.expects?{expects:t.expects}:{},...t.grade?{grade:t.grade}:{},...m?{consumedOneShot:!0}:{}},a),p.length&&(N(d,p),T({kind:`alert`,text:`${p.map(e=>e.label).join(`, `)} crossed the line you set.`,dashboardIds:[s.id],searches:0}),d.alerts.inApp&&le({dashboardId:s.id,dashboardTitle:s.title,tripwireLabel:p[0].label})),t.disagreement&&T({kind:`insight`,text:at(s,t.disagreement).text,dashboardIds:[s.id],searches:0});let _={...s,tripwires:f},v=W(_,p,a);if(v.fire&&v.trigger&&i){Q(s.id,!0);let e=await J(_,v.trigger,r,a);Q(s.id,!1),e?c(s.id,e,a):g(s.id,a,`Mavéa couldn't get a fresh read — will try again.`),h(s.id,a),T({kind:v.trigger===`scheduled`?`check`:`alert`,text:e?e.text.slice(0,200):`Couldn't get a fresh read on ${s.title}.`,dashboardIds:[s.id],searches:1,...e?.sources?.length?{sourceCount:e.sources.length}:{}})}else v.fire&&v.trigger&&h(s.id,a);return l}async function $(e,t,n,r={}){let i=Date.now(),a={},o=q(e),s=e.filter(e=>!o.some(t=>t.d.id===e.id)),c={};for(let t of e)c[t.id]=Object.fromEntries(t.metrics.map(e=>[e.id,e.lastValue]));for(let e of s)a[e.id]=await bt({d:e,metrics:[],targets:[]},{values:{},widgets:{}},c[e.id],t,n,i);if(o.length===0)return a;let l=new Map(o.map(e=>[e.d.id,p(e.d.id,i)])),f=e=>{for(let t of l.values())e(t)};if(!n)return a;let h=o.map(e=>e.d.id);j(h,!0);try{let e=await Xe(o,t,r.briefing?{briefingContext:r.briefing.context}:{});if(!e.ok){let t=e.failure??{kind:`network`},n=ft(e.failure,i);f(n=>{u(n,`search`,!1,{detail:d(t)}),m(n,{outcome:`failed`,failure:t,attempts:e.attempts})});for(let e of o)b(e.d.id,i+n),x(e.d.id,t,i),a[e.d.id]=`failed`;return a}for(let r of o){let o=e.perDashboard[r.d.id]??{values:{},widgets:{}},s=l.get(r.d.id)??null;u(s,`search`,!0,{count:e.attempts}),u(s,`sources`,e.sources.length>0,{count:e.sources.length,...e.sources.length===0?{detail:`The model answered without citing a live source.`}:{}});let d=Object.keys(o.values).length+Object.keys(o.widgets).length;u(s,`extraction`,d>0,{count:d,...d===0?{detail:`Nothing in the reply matched this tracker’s metrics or cards.`}:{}}),u(s,`grounding`,e.grounded,{...e.grounded?{}:{detail:`Ungrounded — every value from it was discarded.`}}),a[r.d.id]=await bt(r,o,c[r.d.id],t,n,i,!e.grounded);let f=a[r.d.id];u(s,`saved`,f===`updated`||f===`no-change`),u(s,`tripwires`,!0),m(s,{outcome:f===`failed`?`failed`:f,attempts:e.attempts,...f===`unverified`?{failure:{kind:`ungrounded`}}:{}})}r.briefing&&e.briefing&&(oe(e.briefing,r.briefing.allDashboards,i),T({kind:`briefing`,text:`Morning briefing compiled — folded into this batched search.`,dashboardIds:o.map(e=>e.d.id),searches:0}));let s=[...new Set(e.sources.map(e=>k(e.url)))].filter(Boolean);return T({kind:`check`,text:gt(o,e),dashboardIds:o.map(e=>e.d.id),...s.length?{domains:s}:{},searches:1,...e.sources.length?{sourceCount:e.sources.length}:{},...r.manual?{manual:!0}:{}}),a}finally{j(h,!1)}}async function xt(e,t,n,r){let{tripwires:i,newlyTriggered:a}=H(e);f(e.id,i,r),a.length&&(N(e,a),e.alerts.inApp&&le({dashboardId:e.id,dashboardTitle:e.title,tripwireLabel:a[0].label}));let o={...e,tripwires:i},s=W(o,a,r);if(!s.fire||!s.trigger||!n)return;Q(e.id,!0);let l=await J(o,s.trigger,t,r);Q(e.id,!1),l?c(e.id,l,r):g(e.id,r,`Mavéa couldn't get a fresh read — will try again.`),h(e.id,r),T({kind:s.trigger===`scheduled`?`check`:`alert`,text:l?l.text.slice(0,200):`Couldn't get a fresh read on ${e.title}.`,dashboardIds:[e.id],searches:1,...l?.sources?.length?{sourceCount:l.sources.length}:{}})}async function St(e){if(Y.has(e))return`busy`;let t=v(e);if(!t)return`busy`;let n=C(S());if(!n.apiKey)return`no-model`;Y.add(e);try{let r=await $([t],n,!0,{manual:!0});return r[e]===`failed`?`failed`:r[e]===`unverified`?`unverified`:`done`}finally{Y.delete(e)}}async function Ct(){let e=C(S());if(!e.apiKey)return`no-model`;let t=_().filter(D),n=t.filter(e=>!Y.has(e.id));if(n.length===0)return t.length>0?`busy`:`done`;for(;n.length>0;){let t=q(n);if(t.length===0)break;let r=t.map(e=>e.d.id);r.forEach(e=>Y.add(e));let i={};try{i=await $(t.map(e=>e.d),e,!0,{manual:!0})}finally{r.forEach(e=>Y.delete(e))}if(r.length>0&&r.every(e=>i[e]===`failed`))return`failed`;n=n.filter(e=>!r.includes(e.id))}return`done`}async function wt(e){if(X.has(e))return`busy`;let t=v(e);if(!t)return`failed`;let n=C(S());if(!n.apiKey)return`no-model`;let r=Date.now(),i=t.tripwires.find(e=>e.state===`TRIGGERED`),a=i??`scheduled`;Q(e,!0);let o;try{o=await J(t,a,n,r)}finally{Q(e,!1)}return o?c(e,o,r):g(e,r,`Mavéa couldn’t get a fresh read — try again in a moment.`),h(e,r),T({kind:i?`alert`:`check`,text:o?o.text.slice(0,200):`Couldn’t get a fresh read on ${t.title}.`,dashboardIds:[e],searches:1,manual:!0,...o?.sources?.length?{sourceCount:o.sources.length}:{}}),o?`done`:`failed`}function Tt(e,t,n,r,i){let a=Pe(e,r).filter(e=>!i.has(e.id)),o=Fe(e,r);o&&i.has(o.id)&&(o=null);let s=A(t,n,r),c=!1;s.paused&&(c=a.some(D)||!!o,a=a.filter(e=>!D(e)),o=null);let l=q(a);return o&&l.some(e=>e.d.id===o.id)&&(o=null),{dueData:a,dueAi:o,pausedAndBlocked:c}}function Et(){let e=(0,P.useRef)(!1);(0,P.useEffect)(()=>{let t=!0,n=async()=>{if(e.current||!t||typeof document<`u`&&document.visibilityState!==`visible`)return;let n=C(S()),r=!!n.apiKey,i=Date.now(),a=_(),o=re(),s=w();ue(a,s,e=>E(s,e,i),e=>l(e,i-6048e5,i),i);for(let e of ct(a,s,i))T({kind:`insight`,text:e.text,dashboardIds:e.dashboardIds,searches:0});let{dueData:c,dueAi:u,pausedAndBlocked:d}=Tt(a,s,o.dailySearchBudget,i,Y);d&&yt(i);let f=r&&o.briefingEnabled&&ce(i);if(c.length===0&&!u){if(f&&!a.some(D)){let e=se(a,new Set);if(e){let t=await Xe([],n,{briefingContext:e});t.briefing&&(oe(t.briefing,a,i),T({kind:`briefing`,text:`Morning briefing compiled.`,dashboardIds:[],searches:1}))}}return}e.current=!0,c.forEach(e=>Y.add(e.id)),u&&Y.add(u.id);try{if(c.length>0){let e=f?{context:se(a,new Set(q(c).map(e=>e.d.id))),allDashboards:a}:void 0;await $(c,n,r,e?{briefing:e}:{})}u&&await xt(u,n,r,i)}finally{c.forEach(e=>Y.delete(e.id)),u&&Y.delete(u.id),e.current=!1}},r=()=>{me(n).catch(e=>{console.error(`[dashboards] scheduled tick failed`,e)})},i=window.setInterval(r,ut),a=()=>{document.visibilityState===`visible`&&r()};return document.addEventListener(`visibilitychange`,a),r(),()=>{t=!1,window.clearInterval(i),document.removeEventListener(`visibilitychange`,a)}},[])}export{mt as a,he as c,lt as i,F as l,St as n,H as o,Et as r,Ce as s,wt as t};
@@ -1 +1 @@
1
- import{T as e,j as t}from"./kokoro-yB7iU_JU.js";import{n,t as r}from"./nextFrame-12y0UrAd.js";var i=1100,a=15e3,o=1e4,s=12e3,c=8e3,l=3500,u=2500,d=3e3,f=1800;function p(e){return e*2+12e3}function m(e,t=1700){let n=e.trim();return n?Math.min(7e3,Math.max(1500,Math.round(n.split(/\s+/).length*385+500))):t}function h(e){return new Promise(t=>setTimeout(t,e))}async function g(e,t=a){return await n(e.started,t)??!1}async function _(e,t,r=i){await Promise.all([n(e.finished,p(t)),h(r)])}function v(n){let r=n.speaking??e,i=n.subscribe??t;return new Promise(e=>{let t=!1,a=!1,o=()=>{a||(a=!0,c(),clearTimeout(l),e())},s=()=>{t&&!r()&&o()},c=i(s);setTimeout(()=>{t=!0,s()},n.floorMs);let l=setTimeout(o,n.capMs)})}function y(e){let t=e;return typeof t.getAnimations==`function`&&t.getAnimations({subtree:!0}).some(e=>e.playState===`running`)}async function b(e,t=`.card`,i=f){await n((async()=>{await r(),await r();let n=e()?.querySelector(t)??null;for(;!n;)await r(),n=e()?.querySelector(t)??null;for(;y(n);)await r()})(),i)}async function x(e){try{await n((async()=>{await r(),await r(),await n(e.loadFams(),c),e.settle&&await e.settle(),e.wantVoice&&e.firstLine&&await n(e.firstLine.started,o)})(),s)}catch{}}export{b as a,p as c,g as d,v as f,d as i,m as l,u as n,x as o,l as r,h as s,i as t,_ as u};
1
+ import{T as e,j as t}from"./kokoro-B-rc224u.js";import{n,t as r}from"./nextFrame-12y0UrAd.js";var i=1100,a=15e3,o=1e4,s=12e3,c=8e3,l=3500,u=2500,d=3e3,f=1800;function p(e){return e*2+12e3}function m(e,t=1700){let n=e.trim();return n?Math.min(7e3,Math.max(1500,Math.round(n.split(/\s+/).length*385+500))):t}function h(e){return new Promise(t=>setTimeout(t,e))}async function g(e,t=a){return await n(e.started,t)??!1}async function _(e,t,r=i){await Promise.all([n(e.finished,p(t)),h(r)])}function v(n){let r=n.speaking??e,i=n.subscribe??t;return new Promise(e=>{let t=!1,a=!1,o=()=>{a||(a=!0,c(),clearTimeout(l),e())},s=()=>{t&&!r()&&o()},c=i(s);setTimeout(()=>{t=!0,s()},n.floorMs);let l=setTimeout(o,n.capMs)})}function y(e){let t=e;return typeof t.getAnimations==`function`&&t.getAnimations({subtree:!0}).some(e=>e.playState===`running`)}async function b(e,t=`.card`,i=f){await n((async()=>{await r(),await r();let n=e()?.querySelector(t)??null;for(;!n;)await r(),n=e()?.querySelector(t)??null;for(;y(n);)await r()})(),i)}async function x(e){try{await n((async()=>{await r(),await r(),await n(e.loadFams(),c),e.settle&&await e.settle(),e.wantVoice&&e.firstLine&&await n(e.firstLine.started,o)})(),s)}catch{}}export{b as a,p as c,g as d,v as f,d as i,m as l,u as n,x as o,l as r,h as s,i as t,_ as u};
package/dist/index.html CHANGED
@@ -134,7 +134,7 @@
134
134
  }
135
135
  }
136
136
  </style>
137
- <script type="module" crossorigin src="/assets/index-Db-FgYxX.js"></script>
137
+ <script type="module" crossorigin src="/assets/index-CKRjGbeR.js"></script>
138
138
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-DkW27tQK.js">
139
139
  <link rel="modulepreload" crossorigin href="/assets/react-BZJXY1be.js">
140
140
  <link rel="modulepreload" crossorigin href="/assets/compiler-runtime-qQQXpJgv.js">