@happyvertical/smrt-planner 0.57.17 → 0.57.19

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 (549) hide show
  1. package/README.md +25 -0
  2. package/agents/commands.md +3 -0
  3. package/agents/cookbook.md +4 -1
  4. package/app/404.html +21 -21
  5. package/app/_app/immutable/assets/0.BwSv64V0.css +1 -0
  6. package/app/_app/immutable/assets/{2.D3Ee82Nk.css → 2.BSQtjEJf.css} +1 -1
  7. package/app/_app/immutable/chunks/{DiDXEaeE.js → 0GttNSaG.js} +2 -2
  8. package/app/_app/immutable/chunks/{BEfnNZ_r.js → 1Uq1awDD.js} +1 -1
  9. package/app/_app/immutable/chunks/{BF1b-PyI.js → 3nInxoCv.js} +1 -1
  10. package/app/_app/immutable/chunks/B2aomX_k.js +1 -0
  11. package/app/_app/immutable/chunks/{eI3Mmq4z.js → B3xHH6q-.js} +1 -1
  12. package/app/_app/immutable/chunks/{xfjCb9hA.js → B58ycq6u.js} +1 -1
  13. package/app/_app/immutable/chunks/{DtyQVtuI.js → B81CeftJ.js} +21 -21
  14. package/app/_app/immutable/chunks/BBYjYdwL.js +1 -0
  15. package/app/_app/immutable/chunks/{CMr90D2v.js → BL-j01wI.js} +1 -1
  16. package/app/_app/immutable/chunks/{BEQ1toJ7.js → BQbkHzk8.js} +1 -1
  17. package/app/_app/immutable/chunks/{DkYxX008.js → BgDByODt.js} +1 -1
  18. package/app/_app/immutable/chunks/BoTniyTY.js +1 -0
  19. package/app/_app/immutable/chunks/{BXYF4p6C.js → CF-iy4N9.js} +1 -1
  20. package/app/_app/immutable/chunks/{jGR6M6GD.js → CGILVblc.js} +1 -1
  21. package/app/_app/immutable/chunks/{BPtTI21R.js → CSvhNT33.js} +1 -1
  22. package/app/_app/immutable/chunks/{cGI232sj.js → CTz6b8sX.js} +1 -1
  23. package/app/_app/immutable/chunks/{Dbk0PTBM.js → Cn8IkTI5.js} +1 -1
  24. package/app/_app/immutable/chunks/{CWmRZDhs.js → Cne67d4c.js} +1 -1
  25. package/app/_app/immutable/chunks/{BkEeNbLN.js → Cptq9dTD.js} +1 -1
  26. package/app/_app/immutable/chunks/{H-AOqvBm.js → Cv3FXeyB.js} +2 -2
  27. package/app/_app/immutable/chunks/D95Ltrhv.js +1 -0
  28. package/app/_app/immutable/chunks/{Dij7Mzy3.js → DBfU27Yr.js} +1 -1
  29. package/app/_app/immutable/chunks/{LqlI_3J_.js → DV8QsFnv.js} +3 -3
  30. package/app/_app/immutable/chunks/{47rG5f1n.js → D_tBQk4S.js} +1 -1
  31. package/app/_app/immutable/chunks/{JHAQM1Si.js → DbPr-Y_R.js} +1 -1
  32. package/app/_app/immutable/chunks/DjWoxxBo.js +1 -0
  33. package/app/_app/immutable/chunks/{DdiQBZrC.js → DmWCr2ul.js} +1 -1
  34. package/app/_app/immutable/chunks/{BRb3XNWx.js → G8JeRda5.js} +1 -1
  35. package/app/_app/immutable/chunks/{Cp6EyiHL.js → K9O-e-XY.js} +1 -1
  36. package/app/_app/immutable/chunks/{CHp1-Djt.js → OH7CqE-U.js} +1 -1
  37. package/app/_app/immutable/chunks/{Bs5WxZDd.js → Qxx7HWld.js} +1 -1
  38. package/app/_app/immutable/chunks/{ca0lfv12.js → glUGUrBl.js} +1 -1
  39. package/app/_app/immutable/entry/{app.DBMyUqvv.js → app.CtiuMMEF.js} +2 -2
  40. package/app/_app/immutable/entry/start.DZqoRv5o.js +1 -0
  41. package/app/_app/immutable/nodes/0.CoxJIO4G.js +7 -0
  42. package/app/_app/immutable/nodes/{1.D-mIIzUL.js → 1.BvqpKwaf.js} +1 -1
  43. package/app/_app/immutable/nodes/{10.BFt6ON7M.js → 10.CEltwRBa.js} +1 -1
  44. package/app/_app/immutable/nodes/{11.Cxs1R6fC.js → 11.DJ3womq-.js} +1 -1
  45. package/app/_app/immutable/nodes/{12.BCudMLPz.js → 12.1DKCRq9W.js} +1 -1
  46. package/app/_app/immutable/nodes/{13.DAt_b1gK.js → 13.Bm9LIH2r.js} +1 -1
  47. package/app/_app/immutable/nodes/{14.CQQuhb60.js → 14.B0zmE2Ph.js} +1 -1
  48. package/app/_app/immutable/nodes/2.BlDb4AmE.js +26 -0
  49. package/app/_app/immutable/nodes/{3.BNTsN4bw.js → 3.ct99VOlW.js} +1 -1
  50. package/app/_app/immutable/nodes/{4.eKv786mR.js → 4.C-cw-lFZ.js} +1 -1
  51. package/app/_app/immutable/nodes/{5.k0okSbWb.js → 5.DY71Ssxa.js} +1 -1
  52. package/app/_app/immutable/nodes/{6.RSsmFdBk.js → 6.Dy6iU6zE.js} +1 -1
  53. package/app/_app/immutable/nodes/{7.BZAahN28.js → 7.69phJC5H.js} +1 -1
  54. package/app/_app/immutable/nodes/{8.B9PW4VE1.js → 8.CjTHnpj3.js} +1 -1
  55. package/app/_app/immutable/nodes/{9.DYbPqDvx.js → 9.uRTCr8p2.js} +1 -1
  56. package/app/_app/version.json +1 -1
  57. package/app/advanced-styles/index.html +25 -25
  58. package/app/ai/index.html +28 -28
  59. package/app/blueprint/index.html +23 -23
  60. package/app/cookbook/index.html +23 -23
  61. package/app/index.html +40 -36
  62. package/app/m/ads/AdDeliveryTier/index.html +27 -27
  63. package/app/m/ads/AdEvent/index.html +27 -27
  64. package/app/m/ads/AdFormat/index.html +27 -27
  65. package/app/m/ads/AdGroup/index.html +27 -27
  66. package/app/m/ads/AdVariation/index.html +27 -27
  67. package/app/m/analytics/AnalyticsDataStream/index.html +27 -27
  68. package/app/m/analytics/AnalyticsEvent/index.html +27 -27
  69. package/app/m/analytics/AnalyticsProperty/index.html +27 -27
  70. package/app/m/analytics/AnalyticsReport/index.html +27 -27
  71. package/app/m/approvals/ApprovalEvent/index.html +27 -27
  72. package/app/m/approvals/ApprovalPolicy/index.html +27 -27
  73. package/app/m/approvals/ApprovalRequest/index.html +27 -27
  74. package/app/m/assets/Asset/attachments/index.html +28 -28
  75. package/app/m/assets/Asset/index.html +27 -27
  76. package/app/m/assets/AssetAssociation/index.html +27 -27
  77. package/app/m/assets/AssetMetafield/index.html +27 -27
  78. package/app/m/assets/AssetStatus/index.html +27 -27
  79. package/app/m/assets/AssetType/index.html +27 -27
  80. package/app/m/assets/Folder/index.html +27 -27
  81. package/app/m/chat/AgentSession/index.html +27 -27
  82. package/app/m/chat/ChatMessage/index.html +27 -27
  83. package/app/m/chat/ChatParticipant/index.html +27 -27
  84. package/app/m/chat/ChatReaction/index.html +27 -27
  85. package/app/m/chat/ChatRoom/index.html +27 -27
  86. package/app/m/chat/ChatThread/index.html +27 -27
  87. package/app/m/chat/VoiceGatewayTurn/index.html +27 -27
  88. package/app/m/chat/VoiceSession/index.html +27 -27
  89. package/app/m/commerce/Agreement/index.html +27 -27
  90. package/app/m/commerce/Cart/index.html +27 -27
  91. package/app/m/commerce/Contract/index.html +27 -27
  92. package/app/m/commerce/ContractLineItem/index.html +27 -27
  93. package/app/m/commerce/Customer/index.html +27 -27
  94. package/app/m/commerce/DocumentTax/index.html +27 -27
  95. package/app/m/commerce/Estimate/index.html +27 -27
  96. package/app/m/commerce/Fulfillment/index.html +27 -27
  97. package/app/m/commerce/FulfillmentLineItem/index.html +27 -27
  98. package/app/m/commerce/HistoricalCustomerFunds/index.html +27 -27
  99. package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +27 -27
  100. package/app/m/commerce/HistoricalSalesLine/index.html +27 -27
  101. package/app/m/commerce/Invoice/index.html +27 -27
  102. package/app/m/commerce/InvoiceLineItem/index.html +27 -27
  103. package/app/m/commerce/Lease/index.html +27 -27
  104. package/app/m/commerce/LicenseSale/index.html +27 -27
  105. package/app/m/commerce/Order/index.html +27 -27
  106. package/app/m/commerce/Payment/index.html +27 -27
  107. package/app/m/commerce/PaymentAllocation/index.html +27 -27
  108. package/app/m/commerce/PaymentInstrument/index.html +27 -27
  109. package/app/m/commerce/PaymentIntent/index.html +27 -27
  110. package/app/m/commerce/Payout/index.html +27 -27
  111. package/app/m/commerce/ProductionOrder/index.html +27 -27
  112. package/app/m/commerce/PurchaseContract/index.html +27 -27
  113. package/app/m/commerce/PurchaseOrder/index.html +27 -27
  114. package/app/m/commerce/SalesContract/index.html +27 -27
  115. package/app/m/commerce/SupplierQuote/index.html +27 -27
  116. package/app/m/commerce/TaxCode/index.html +27 -27
  117. package/app/m/commerce/TaxComponent/index.html +27 -27
  118. package/app/m/commerce/TaxSettings/index.html +27 -27
  119. package/app/m/commerce/TaxSummaryReport/index.html +27 -27
  120. package/app/m/commerce/TenantPaymentAccount/index.html +27 -27
  121. package/app/m/commerce/Vendor/index.html +27 -27
  122. package/app/m/commerce/WholesaleOrder/index.html +27 -27
  123. package/app/m/content/Content/index.html +27 -27
  124. package/app/m/content/ContentContribution/index.html +27 -27
  125. package/app/m/content/ContentContributionAttachment/index.html +27 -27
  126. package/app/m/content/ContentContributionRevision/index.html +27 -27
  127. package/app/m/content/ContentContributionType/index.html +27 -27
  128. package/app/m/content/ContentContributor/index.html +27 -27
  129. package/app/m/content/ContentCorrection/index.html +27 -27
  130. package/app/m/content/ContentFeedSource/index.html +27 -27
  131. package/app/m/content/ContentGovernanceAssignment/index.html +27 -27
  132. package/app/m/content/ContentGovernancePolicy/index.html +27 -27
  133. package/app/m/content/ContentGovernanceProfile/index.html +27 -27
  134. package/app/m/content/ContentReference/index.html +27 -27
  135. package/app/m/content/ContentReview/index.html +27 -27
  136. package/app/m/content/ContentVersion/index.html +27 -27
  137. package/app/m/events/Event/index.html +27 -27
  138. package/app/m/events/EventParticipant/index.html +27 -27
  139. package/app/m/events/EventSeries/index.html +27 -27
  140. package/app/m/events/EventType/index.html +27 -27
  141. package/app/m/expenses/Expense/index.html +27 -27
  142. package/app/m/facts/Fact/index.html +27 -27
  143. package/app/m/facts/FactContent/index.html +27 -27
  144. package/app/m/facts/FactEvidence/index.html +27 -27
  145. package/app/m/facts/FactSource/index.html +27 -27
  146. package/app/m/facts/FactSubject/index.html +27 -27
  147. package/app/m/facts/FactTag/index.html +27 -27
  148. package/app/m/fields/FieldPolicy/index.html +27 -27
  149. package/app/m/fields/FieldPolicySuggestion/index.html +27 -27
  150. package/app/m/fields/FieldUsageCounter/index.html +27 -27
  151. package/app/m/images/Image/index.html +27 -27
  152. package/app/m/inventory/InventoryLocation/index.html +27 -27
  153. package/app/m/inventory/Lot/index.html +88 -0
  154. package/app/m/inventory/LotCorrection/index.html +88 -0
  155. package/app/m/inventory/LotDocument/index.html +88 -0
  156. package/app/m/inventory/LotStockLevel/index.html +88 -0
  157. package/app/m/inventory/LotUsage/index.html +88 -0
  158. package/app/m/inventory/StockLevel/index.html +27 -27
  159. package/app/m/inventory/StockMovement/index.html +27 -27
  160. package/app/m/ledgers/Account/index.html +27 -27
  161. package/app/m/ledgers/Journal/index.html +27 -27
  162. package/app/m/ledgers/JournalEntry/index.html +27 -27
  163. package/app/m/ledgers/Ledger/index.html +27 -27
  164. package/app/m/manufacturing/Assembly/index.html +27 -27
  165. package/app/m/manufacturing/BillOfMaterials/index.html +27 -27
  166. package/app/m/manufacturing/BomLine/index.html +27 -27
  167. package/app/m/manufacturing/Operation/index.html +27 -27
  168. package/app/m/manufacturing/ProductionRun/index.html +27 -27
  169. package/app/m/manufacturing/ProductionRunCompletion/index.html +27 -27
  170. package/app/m/manufacturing/RoutingStep/index.html +27 -27
  171. package/app/m/marketing/Campaign/index.html +27 -27
  172. package/app/m/marketing/CampaignChannel/index.html +27 -27
  173. package/app/m/marketing/CampaignMetricSnapshot/index.html +27 -27
  174. package/app/m/messages/Account/index.html +27 -27
  175. package/app/m/messages/Attachment/index.html +27 -27
  176. package/app/m/messages/Blacklist/index.html +27 -27
  177. package/app/m/messages/Email/failed-sends/index.html +28 -28
  178. package/app/m/messages/Email/index.html +27 -27
  179. package/app/m/messages/Email/mailbox/index.html +28 -28
  180. package/app/m/messages/EmailAccount/index.html +27 -27
  181. package/app/m/messages/EmailAttachment/index.html +27 -27
  182. package/app/m/messages/EmailFolder/index.html +27 -27
  183. package/app/m/messages/Message/index.html +27 -27
  184. package/app/m/messages/MessagingEndpoint/index.html +27 -27
  185. package/app/m/messages/PersonaMessageRoute/index.html +27 -27
  186. package/app/m/messages/SlackAccount/index.html +27 -27
  187. package/app/m/messages/SlackMessage/index.html +27 -27
  188. package/app/m/messages/TelegramAccount/index.html +27 -27
  189. package/app/m/messages/Tweet/index.html +27 -27
  190. package/app/m/messages/TwitterAccount/index.html +27 -27
  191. package/app/m/messages/Whitelist/index.html +27 -27
  192. package/app/m/messages/ZulipAccount/index.html +27 -27
  193. package/app/m/places/Place/index.html +27 -27
  194. package/app/m/places/PlaceType/index.html +27 -27
  195. package/app/m/products/Category/index.html +27 -27
  196. package/app/m/products/Material/index.html +27 -27
  197. package/app/m/products/Product/index.html +27 -27
  198. package/app/m/products/Product/ingredients/index.html +28 -28
  199. package/app/m/products/ProductVariant/index.html +27 -27
  200. package/app/m/products/Sku/index.html +27 -27
  201. package/app/m/profiles/ApiKey/index.html +27 -27
  202. package/app/m/profiles/Bot/index.html +27 -27
  203. package/app/m/profiles/MagicLinkToken/index.html +27 -27
  204. package/app/m/profiles/NostrIdentity/index.html +27 -27
  205. package/app/m/profiles/OidcIdentity/index.html +27 -27
  206. package/app/m/profiles/Organization/index.html +27 -27
  207. package/app/m/profiles/Person/index.html +27 -27
  208. package/app/m/profiles/Profile/index.html +27 -27
  209. package/app/m/profiles/ProfileMetadata/index.html +27 -27
  210. package/app/m/profiles/ProfileMetafield/index.html +27 -27
  211. package/app/m/profiles/ProfileRelationship/index.html +27 -27
  212. package/app/m/profiles/ProfileRelationshipTerm/index.html +27 -27
  213. package/app/m/profiles/ProfileRelationshipType/index.html +27 -27
  214. package/app/m/profiles/ProfileType/index.html +27 -27
  215. package/app/m/projects/Comment/index.html +27 -27
  216. package/app/m/projects/Issue/index.html +27 -27
  217. package/app/m/projects/Label/index.html +27 -27
  218. package/app/m/projects/Project/index.html +27 -27
  219. package/app/m/projects/ProjectIntegration/index.html +27 -27
  220. package/app/m/projects/PullRequest/index.html +27 -27
  221. package/app/m/projects/Repository/index.html +27 -27
  222. package/app/m/properties/Property/index.html +27 -27
  223. package/app/m/properties/Zone/index.html +27 -27
  224. package/app/m/reports/RuntimeReport/index.html +27 -27
  225. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +27 -27
  226. package/app/m/reports/SmrtReportLock/index.html +27 -27
  227. package/app/m/reports/SmrtReportRefreshTask/index.html +27 -27
  228. package/app/m/reports/SmrtReportRun/index.html +27 -27
  229. package/app/m/reports/SmrtReportSchedule/index.html +27 -27
  230. package/app/m/reports/SmrtReportWatermark/index.html +27 -27
  231. package/app/m/sales/Agreement/index.html +27 -27
  232. package/app/m/sales/AttributionException/index.html +27 -27
  233. package/app/m/sales/AttributionPolicy/index.html +27 -27
  234. package/app/m/sales/Commission/index.html +27 -27
  235. package/app/m/sales/CommissionAdjustment/index.html +27 -27
  236. package/app/m/sales/CommissionPayout/index.html +27 -27
  237. package/app/m/sales/CommissionPlan/index.html +27 -27
  238. package/app/m/sales/Earner/index.html +27 -27
  239. package/app/m/sales/EarnerSourceAttribution/index.html +27 -27
  240. package/app/m/sales/EarningEvent/index.html +27 -27
  241. package/app/m/sales/ExecutedAgreement/index.html +27 -27
  242. package/app/m/sales/Lead/index.html +27 -27
  243. package/app/m/sales/Opportunity/index.html +27 -27
  244. package/app/m/sales/OpportunityConversion/index.html +27 -27
  245. package/app/m/sales/PipelineDefinition/index.html +27 -27
  246. package/app/m/sales/PipelineStage/index.html +27 -27
  247. package/app/m/sales/Referral/index.html +27 -27
  248. package/app/m/sales/ReferralAgreement/index.html +27 -27
  249. package/app/m/sales/ReferralLink/index.html +27 -27
  250. package/app/m/sales/ReferralProgram/index.html +27 -27
  251. package/app/m/sales/ReferralTermSnapshot/index.html +27 -27
  252. package/app/m/sales/ReferralTouch/index.html +27 -27
  253. package/app/m/sales/Referrer/index.html +27 -27
  254. package/app/m/sales/SalesActivity/index.html +27 -27
  255. package/app/m/sales/SalesRepresentative/index.html +27 -27
  256. package/app/m/sites/Site/index.html +27 -27
  257. package/app/m/sites/SiteAgentBinding/index.html +27 -27
  258. package/app/m/social/OAuthState/index.html +27 -27
  259. package/app/m/social/SocialAccount/index.html +27 -27
  260. package/app/m/social/SocialPost/index.html +27 -27
  261. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +27 -27
  262. package/app/m/subscriptions/BillingAdjustment/index.html +27 -27
  263. package/app/m/subscriptions/ClientCharge/index.html +27 -27
  264. package/app/m/subscriptions/CreditGrant/index.html +27 -27
  265. package/app/m/subscriptions/PricingRule/index.html +27 -27
  266. package/app/m/subscriptions/RetailCharge/index.html +27 -27
  267. package/app/m/subscriptions/SpendingPolicy/index.html +27 -27
  268. package/app/m/subscriptions/SubscriptionPlan/index.html +27 -27
  269. package/app/m/subscriptions/SubscriptionPlanVersion/index.html +27 -27
  270. package/app/m/subscriptions/TenantSubscription/index.html +27 -27
  271. package/app/m/subscriptions/TenantUsageMetric/index.html +27 -27
  272. package/app/m/support/ServiceTimeEntry/index.html +27 -27
  273. package/app/m/support/SupportAiRun/index.html +27 -27
  274. package/app/m/support/SupportAvailability/index.html +27 -27
  275. package/app/m/support/SupportCase/index.html +27 -27
  276. package/app/m/support/SupportCaseEvent/index.html +27 -27
  277. package/app/m/support/SupportChannelBinding/index.html +27 -27
  278. package/app/m/support/SupportCharge/index.html +27 -27
  279. package/app/m/support/SupportCompensation/index.html +27 -27
  280. package/app/m/support/SupportCompensationPlan/index.html +27 -27
  281. package/app/m/support/SupportEscalation/index.html +27 -27
  282. package/app/m/support/SupportInteraction/index.html +27 -27
  283. package/app/m/support/SupportPlan/index.html +27 -27
  284. package/app/m/support/SupportPolicy/index.html +27 -27
  285. package/app/m/support/SupportQualification/index.html +27 -27
  286. package/app/m/support/SupportServiceTarget/index.html +27 -27
  287. package/app/m/support/SupportSpecialist/index.html +27 -27
  288. package/app/m/support/SupportWorkLink/index.html +27 -27
  289. package/app/m/tags/Tag/index.html +27 -27
  290. package/app/m/tags/TagAlias/index.html +27 -27
  291. package/app/m/timesheets/AttendanceBreak/index.html +27 -27
  292. package/app/m/timesheets/AttendancePunch/index.html +27 -27
  293. package/app/m/timesheets/AttendanceSegment/index.html +27 -27
  294. package/app/m/timesheets/ServiceChargeSnapshot/index.html +27 -27
  295. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +27 -27
  296. package/app/m/timesheets/ServiceTimeEntry/index.html +27 -27
  297. package/app/m/users/Group/index.html +27 -27
  298. package/app/m/users/GroupMember/index.html +27 -27
  299. package/app/m/users/GroupRole/index.html +27 -27
  300. package/app/m/users/Membership/index.html +27 -27
  301. package/app/m/users/MembershipOverride/index.html +27 -27
  302. package/app/m/users/Permission/index.html +27 -27
  303. package/app/m/users/Role/index.html +27 -27
  304. package/app/m/users/RolePermission/index.html +27 -27
  305. package/app/m/users/Session/index.html +27 -27
  306. package/app/m/users/Tenant/index.html +27 -27
  307. package/app/m/users/TenantIntegration/index.html +27 -27
  308. package/app/m/users/TenantPermissionOverride/index.html +27 -27
  309. package/app/m/users/User/index.html +27 -27
  310. package/app/m/video/Character/index.html +27 -27
  311. package/app/m/video/CharacterAsset/index.html +27 -27
  312. package/app/m/video/CompositeJob/index.html +27 -27
  313. package/app/m/video/Performer/index.html +27 -27
  314. package/app/m/video/PerformerAsset/index.html +27 -27
  315. package/app/m/video/Scene/index.html +27 -27
  316. package/app/m/video/SceneAsset/index.html +27 -27
  317. package/app/m/video/VideoComposition/index.html +27 -27
  318. package/app/m/video/VideoCompositionAsset/index.html +27 -27
  319. package/app/m/video/VideoSequence/index.html +27 -27
  320. package/app/m/video/VideoSequenceAsset/index.html +27 -27
  321. package/app/m/video/VideoShot/index.html +27 -27
  322. package/app/m/video/VideoShotAsset/index.html +27 -27
  323. package/app/m/video/VideoShotCharacter/index.html +27 -27
  324. package/app/m/video/VideoWorkflow/index.html +27 -27
  325. package/app/m/voice/VoiceOutput/index.html +27 -27
  326. package/app/m/voice/VoiceProfile/index.html +27 -27
  327. package/app/m/voice/VoiceSample/index.html +27 -27
  328. package/app/mcp.html +2 -2
  329. package/app/packages/ads/index.html +24 -24
  330. package/app/packages/analytics/index.html +24 -24
  331. package/app/packages/approvals/index.html +24 -24
  332. package/app/packages/assets/index.html +24 -24
  333. package/app/packages/chat/index.html +24 -24
  334. package/app/packages/comments/index.html +24 -24
  335. package/app/packages/commerce/index.html +24 -24
  336. package/app/packages/content/index.html +24 -24
  337. package/app/packages/events/index.html +24 -24
  338. package/app/packages/expenses/index.html +24 -24
  339. package/app/packages/facts/index.html +24 -24
  340. package/app/packages/fields/index.html +24 -24
  341. package/app/packages/human-resources/index.html +24 -24
  342. package/app/packages/images/index.html +24 -24
  343. package/app/packages/index.html +25 -25
  344. package/app/packages/ingestion/index.html +24 -24
  345. package/app/packages/inventory/index.html +25 -25
  346. package/app/packages/ledgers/index.html +24 -24
  347. package/app/packages/manufacturing/index.html +24 -24
  348. package/app/packages/marketing/index.html +24 -24
  349. package/app/packages/messages/index.html +24 -24
  350. package/app/packages/places/index.html +24 -24
  351. package/app/packages/preferences/index.html +24 -24
  352. package/app/packages/products/index.html +24 -24
  353. package/app/packages/profiles/index.html +24 -24
  354. package/app/packages/projects/index.html +24 -24
  355. package/app/packages/properties/index.html +24 -24
  356. package/app/packages/reports/index.html +24 -24
  357. package/app/packages/sales/index.html +24 -24
  358. package/app/packages/sites/index.html +24 -24
  359. package/app/packages/social/index.html +24 -24
  360. package/app/packages/subscriptions/index.html +24 -24
  361. package/app/packages/support/index.html +24 -24
  362. package/app/packages/tags/index.html +24 -24
  363. package/app/packages/timesheets/index.html +24 -24
  364. package/app/packages/users/index.html +25 -25
  365. package/app/packages/video/index.html +24 -24
  366. package/app/packages/voice/index.html +24 -24
  367. package/app/packages/webhooks/index.html +24 -24
  368. package/app/recipes/account-access/help/index.html +26 -26
  369. package/app/recipes/account-access/index.html +27 -27
  370. package/app/recipes/activity/help/index.html +25 -25
  371. package/app/recipes/activity/index.html +27 -27
  372. package/app/recipes/agreements/help/index.html +25 -25
  373. package/app/recipes/agreements/index.html +27 -27
  374. package/app/recipes/analytics.reports/help/index.html +25 -25
  375. package/app/recipes/analytics.reports/index.html +27 -27
  376. package/app/recipes/assets/help/index.html +25 -25
  377. package/app/recipes/assets/index.html +27 -27
  378. package/app/recipes/billing/help/index.html +25 -25
  379. package/app/recipes/billing/index.html +27 -27
  380. package/app/recipes/chat.assistant/help/index.html +25 -25
  381. package/app/recipes/chat.assistant/index.html +27 -27
  382. package/app/recipes/comments/help/index.html +25 -25
  383. package/app/recipes/comments/index.html +27 -27
  384. package/app/recipes/commerce.customers/help/index.html +25 -25
  385. package/app/recipes/commerce.customers/index.html +27 -27
  386. package/app/recipes/commerce.estimates/help/index.html +25 -25
  387. package/app/recipes/commerce.estimates/index.html +27 -27
  388. package/app/recipes/commerce.purchases/help/index.html +25 -25
  389. package/app/recipes/commerce.purchases/index.html +27 -27
  390. package/app/recipes/commerce.sales/help/index.html +25 -25
  391. package/app/recipes/commerce.sales/index.html +27 -27
  392. package/app/recipes/commerce.vendors/help/index.html +25 -25
  393. package/app/recipes/commerce.vendors/index.html +27 -27
  394. package/app/recipes/commerce.wholesale/help/index.html +25 -25
  395. package/app/recipes/commerce.wholesale/index.html +27 -27
  396. package/app/recipes/events.calendar/help/index.html +25 -25
  397. package/app/recipes/events.calendar/index.html +27 -27
  398. package/app/recipes/expenses.tracking/help/index.html +25 -25
  399. package/app/recipes/expenses.tracking/index.html +27 -27
  400. package/app/recipes/fields.form-customization/help/index.html +25 -25
  401. package/app/recipes/fields.form-customization/index.html +27 -27
  402. package/app/recipes/ingestion/help/index.html +25 -25
  403. package/app/recipes/ingestion/index.html +27 -27
  404. package/app/recipes/integrations/help/index.html +25 -25
  405. package/app/recipes/integrations/index.html +27 -27
  406. package/app/recipes/inventory.stock/help/index.html +25 -25
  407. package/app/recipes/inventory.stock/index.html +27 -27
  408. package/app/recipes/ledgers.bookkeeping/help/index.html +25 -25
  409. package/app/recipes/ledgers.bookkeeping/index.html +27 -27
  410. package/app/recipes/messages/help/index.html +25 -25
  411. package/app/recipes/messages/index.html +27 -27
  412. package/app/recipes/products/help/index.html +25 -25
  413. package/app/recipes/products/index.html +27 -27
  414. package/app/recipes/projects.tracker/help/index.html +25 -25
  415. package/app/recipes/projects.tracker/index.html +27 -27
  416. package/app/recipes/reports.materialized/help/index.html +25 -25
  417. package/app/recipes/reports.materialized/index.html +27 -27
  418. package/app/recipes/reports.runtime/help/index.html +25 -25
  419. package/app/recipes/reports.runtime/index.html +27 -27
  420. package/app/recipes/sales.pipeline/help/index.html +25 -25
  421. package/app/recipes/sales.pipeline/index.html +27 -27
  422. package/app/recipes/tags.taxonomy/help/index.html +25 -25
  423. package/app/recipes/tags.taxonomy/index.html +27 -27
  424. package/app/recipes/team-collaboration/help/index.html +25 -25
  425. package/app/recipes/team-collaboration/index.html +27 -27
  426. package/app/recipes/timesheets.time-entries/help/index.html +25 -25
  427. package/app/recipes/timesheets.time-entries/index.html +27 -27
  428. package/app/s/custom-accounts/index.html +23 -23
  429. package/app/s/custom-appointments/index.html +23 -23
  430. package/app/s/custom-billing/index.html +23 -23
  431. package/app/s/custom-bookings/index.html +23 -23
  432. package/app/s/custom-buying/index.html +23 -23
  433. package/app/s/custom-checkout/index.html +23 -23
  434. package/app/s/custom-classes/index.html +23 -23
  435. package/app/s/custom-clients/index.html +23 -23
  436. package/app/s/custom-events/index.html +23 -23
  437. package/app/s/custom-fleet/index.html +23 -23
  438. package/app/s/custom-gigs/index.html +23 -23
  439. package/app/s/custom-giving/index.html +23 -23
  440. package/app/s/custom-instruments/index.html +23 -23
  441. package/app/s/custom-jobs/index.html +23 -23
  442. package/app/s/custom-kitchen/index.html +23 -23
  443. package/app/s/custom-lessons/index.html +23 -23
  444. package/app/s/custom-material/index.html +23 -23
  445. package/app/s/custom-meetings/index.html +23 -23
  446. package/app/s/custom-members/index.html +23 -23
  447. package/app/s/custom-merch/index.html +23 -23
  448. package/app/s/custom-money/index.html +23 -23
  449. package/app/s/custom-paint/index.html +23 -23
  450. package/app/s/custom-parts/index.html +23 -23
  451. package/app/s/custom-rentals/index.html +23 -23
  452. package/app/s/custom-roastery/index.html +23 -23
  453. package/app/s/custom-schedule/index.html +23 -23
  454. package/app/s/custom-shelf/index.html +23 -23
  455. package/app/s/custom-shop/index.html +23 -23
  456. package/app/s/custom-students/index.html +23 -23
  457. package/app/s/custom-wholesale/index.html +23 -23
  458. package/app/s/custom-work/index.html +23 -23
  459. package/app/s/custom-yard/index.html +23 -23
  460. package/app/s/section-access-control/index.html +23 -23
  461. package/app/s/section-account-security/index.html +23 -23
  462. package/app/s/section-accounting/index.html +23 -23
  463. package/app/s/section-activity/index.html +23 -23
  464. package/app/s/section-agreements/index.html +23 -23
  465. package/app/s/section-analytics/index.html +23 -23
  466. package/app/s/section-assets/index.html +23 -23
  467. package/app/s/section-billing/index.html +23 -23
  468. package/app/s/section-calendar/index.html +23 -23
  469. package/app/s/section-catalog/index.html +23 -23
  470. package/app/s/section-chat.assistant/index.html +23 -23
  471. package/app/s/section-comments/index.html +23 -23
  472. package/app/s/section-fields.form-customization/index.html +23 -23
  473. package/app/s/section-ingestion/index.html +23 -23
  474. package/app/s/section-integrations/index.html +23 -23
  475. package/app/s/section-messages/index.html +23 -23
  476. package/app/s/section-more/index.html +23 -23
  477. package/app/s/section-operations/index.html +23 -23
  478. package/app/s/section-projects/index.html +23 -23
  479. package/app/s/section-purchasing/index.html +23 -23
  480. package/app/s/section-reports.materialized/index.html +23 -23
  481. package/app/s/section-reports.runtime/index.html +23 -23
  482. package/app/s/section-sales/index.html +23 -23
  483. package/app/s/section-taxonomy/index.html +23 -23
  484. package/app/s/section-team/index.html +23 -23
  485. package/app/s/section-work/index.html +23 -23
  486. package/dist/catalog/catalog.json +937 -39
  487. package/dist/components/HeaderIconLink.svelte +106 -2
  488. package/dist/components/HeaderIconLink.svelte.d.ts +4 -0
  489. package/dist/components/HeaderIconLink.svelte.d.ts.map +1 -1
  490. package/dist/components/SpecsPanel.svelte +54 -0
  491. package/dist/components/SpecsPanel.svelte.d.ts +4 -0
  492. package/dist/components/SpecsPanel.svelte.d.ts.map +1 -0
  493. package/dist/cookbook/assemble.d.ts +1 -0
  494. package/dist/cookbook/assemble.d.ts.map +1 -1
  495. package/dist/cookbook/assemble.js +2 -0
  496. package/dist/cookbook/parse.d.ts.map +1 -1
  497. package/dist/cookbook/parse.js +8 -0
  498. package/dist/cookbook/prompt.d.ts.map +1 -1
  499. package/dist/cookbook/prompt.js +6 -0
  500. package/dist/cookbook/store.svelte.d.ts +4 -1
  501. package/dist/cookbook/store.svelte.d.ts.map +1 -1
  502. package/dist/cookbook/store.svelte.js +10 -1
  503. package/dist/cookbook/types.d.ts +2 -0
  504. package/dist/cookbook/types.d.ts.map +1 -1
  505. package/dist/core/index.d.ts +1 -0
  506. package/dist/core/index.d.ts.map +1 -1
  507. package/dist/core/index.js +1 -0
  508. package/dist/index.d.ts +1 -0
  509. package/dist/index.d.ts.map +1 -1
  510. package/dist/index.js +1 -0
  511. package/dist/planner/Planner.svelte +87 -16
  512. package/dist/planner/Planner.svelte.d.ts.map +1 -1
  513. package/dist/planner/PlannerControls.svelte +35 -3
  514. package/dist/planner/PlannerControls.svelte.d.ts.map +1 -1
  515. package/dist/planner/PlannerLifecycle.svelte +10 -0
  516. package/dist/planner/PlannerLifecycle.svelte.d.ts +1 -1
  517. package/dist/planner/PlannerLifecycle.svelte.d.ts.map +1 -1
  518. package/dist/planner/bridge.d.ts +2 -0
  519. package/dist/planner/bridge.d.ts.map +1 -1
  520. package/dist/planner/bridge.js +17 -3
  521. package/dist/planner/commands/types.d.ts +1 -1
  522. package/dist/planner/commands/types.d.ts.map +1 -1
  523. package/dist/planner/commands/types.js +1 -0
  524. package/dist/planner/guide.d.ts +21 -1
  525. package/dist/planner/guide.d.ts.map +1 -1
  526. package/dist/planner/guide.js +21 -2
  527. package/dist/planner/header-icons.d.ts +6 -0
  528. package/dist/planner/header-icons.d.ts.map +1 -1
  529. package/dist/planner/header-icons.js +6 -0
  530. package/dist/planner/header-nav.d.ts +17 -0
  531. package/dist/planner/header-nav.d.ts.map +1 -0
  532. package/dist/planner/header-nav.js +41 -0
  533. package/dist/planner/tab.svelte.d.ts +2 -2
  534. package/dist/planner/tab.svelte.d.ts.map +1 -1
  535. package/dist/planner/tab.svelte.js +1 -0
  536. package/dist/planner/types.d.ts +21 -0
  537. package/dist/planner/types.d.ts.map +1 -1
  538. package/dist/smrt-version.d.ts +1 -1
  539. package/dist/smrt-version.js +1 -1
  540. package/package.json +56 -56
  541. package/app/_app/immutable/assets/0.BaRFeYGU.css +0 -1
  542. package/app/_app/immutable/chunks/BDBI1GHG.js +0 -1
  543. package/app/_app/immutable/chunks/BRphH2sp.js +0 -1
  544. package/app/_app/immutable/chunks/By9nPosf.js +0 -1
  545. package/app/_app/immutable/chunks/Die26Dpp.js +0 -1
  546. package/app/_app/immutable/chunks/pwK8zqRY.js +0 -1
  547. package/app/_app/immutable/entry/start.wMO3ZYuE.js +0 -1
  548. package/app/_app/immutable/nodes/0.DiMcia2m.js +0 -7
  549. package/app/_app/immutable/nodes/2.U2UZdfCQ.js +0 -22
package/README.md CHANGED
@@ -305,6 +305,31 @@ sends. Supply `initialConversation` before opening the native dock; seeding is
305
305
  not a way to replace an active conversation. The host retains the original
306
306
  transcript separately when original message identities/provenance matter.
307
307
 
308
+ `exportLabel="Build"` labels the existing native Export shortcut and shows that
309
+ text beside its icon. Its accessible name, tooltip and shell slot/menu title use
310
+ the same label. Omitted or blank values retain the icon-only "Export the app"
311
+ default. The action still opens the native Export page; it does not create a
312
+ second action or change downloads.
313
+
314
+ `headerNav="labelled"` replaces the header's chef's-hat and export icons with four
315
+ bordered, coloured buttons with visible text: Specs (`#/configure/specs/`),
316
+ Features (`#/configure/recipes/`, target `planner-customize`), Styles
317
+ (`#/configure/theme/`) and Build (`#/configure/export/`, target `planner-export`,
318
+ labelled by `exportLabel` when set). The open button is `aria-current`, and the
319
+ configure tab strip shows only its group (Specs; Cookbooks, Recipes, Features;
320
+ Theme, Settings; Export). Their accents are the theme's info (Specs), success (Features), tertiary (Styles)
321
+ and warning (Build) colours; a host recolours one by setting
322
+ `--smrt-header-icon-link-accent` on `[data-tone='specs']` and so on. The Specs tab is
323
+ a free-text box saved with the cookbook (`specs`). The default, `"icons"`, is
324
+ unchanged.
325
+
326
+ `buildAgentPrompt(cookbook, options?)` is available from the package root and
327
+ `@happyvertical/smrt-planner/core`. It is the same pure builder used by the native
328
+ Export page and returns `AgentPrompt` (`text`, UTF-8 `bytes`, `appName`, `version`,
329
+ `delimiter`). `AgentPromptOptions` accepts `fallbackName` and `version`. A host
330
+ callback returning prompt text should use `buildAgentPrompt(data.cookbook).text`.
331
+ The core entry works in plain Node without a Svelte compiler.
332
+
308
333
  `headerAction={{ label, run }}` adds a primary button to the complete Planner header.
309
334
  It uses the same capture and busy/error safeguards as `exportAction`; hosts may
310
335
  pass the same callback to both entry points. The Export shortcut and native
@@ -66,3 +66,6 @@ Part of the [planner guidance](../AGENTS.md). Paths are relative to `packages/pl
66
66
  `tests/core-package.test.ts` packages with svelte-package and runs it under bare `node`.
67
67
  `theme/theme.ts` reads the preset list from smrt-ui's Node-safe `@happyvertical/smrt-ui/themes/presets`
68
68
  (no copy, no drift test).
69
+
70
+ - Header navigation: `PlannerProps.headerNav` (`'icons'` default | `'labelled'`). Labelled shows Specs/Features/Styles/Build as `HeaderIconLink tone=...` buttons (`planner/header-nav.ts` maps button -> tab group -> href; Features keeps item id `planner-customize`, Build keeps `planner-export`), and `PlannerControls` limits the tab strip to the active tab's group. `'specs'` is a tab id (`SpecsPanel`, `cookbookStore.specs` / `setSpecs`), unlisted in the default icons strip. Forced-colors rules live in `HeaderIconLink`.
71
+ - Host export integration: `PlannerProps.exportLabel` optionally gives the native export shortcut visible text and the same accessible/slot label; omitted/blank preserves its icon-only default. `HeaderIconLink.showLabel` is internal and defaults false. Root and Node-safe core barrels re-export the existing `buildAgentPrompt`, `AgentPrompt` and `AgentPromptOptions` from `cookbook/prompt.ts`; no second prompt implementation. Hosts needing a string use the returned `.text`.
@@ -6,7 +6,10 @@ Part of the [planner guidance](../AGENTS.md). Paths are relative to `packages/pl
6
6
  was called a blueprint): one `Cookbook`
7
7
  (`{ $schema, version: 1, recipes, features, policies, exposure?, layout?, theme?, overviews? }`, schema
8
8
  `https://s-m-r-t.dev/schemas/cookbook/v1.json`; import also accepts the old `.../blueprint/v1.json`)
9
- holding recipes, options, layout and theme. `store.svelte.ts` is the single
9
+ holding recipes, options, layout and theme. Optional `name`, `description` and `specs` (free-text
10
+ product requirements beyond the recipes and features, up to 20,000 characters; `store.setSpecs`,
11
+ the `set_name` command and the Specs tab write it, and the agent prompt adds a step telling the
12
+ agent to build them). `store.svelte.ts` is the single
10
13
  source of truth (hydrate, debounced save, import/reset), `storage.ts` the
11
14
  try/catch document wrapper, using `planner/workspace-storage.ts` for tab-scoped session storage by default and explicit Remember opt-in local storage (key `smrt-planner:cookbook-doc:v1`; a value under the old
12
15
  `smrt-planner:blueprint:v1` is read once, written to the new key and kept as a backup until the
package/app/404.html CHANGED
@@ -3,35 +3,35 @@
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <link href="/_app/immutable/entry/start.wMO3ZYuE.js" rel="modulepreload">
7
- <link href="/_app/immutable/chunks/BRphH2sp.js" rel="modulepreload">
6
+ <link href="/_app/immutable/entry/start.DZqoRv5o.js" rel="modulepreload">
7
+ <link href="/_app/immutable/chunks/BBYjYdwL.js" rel="modulepreload">
8
8
  <link href="/_app/immutable/chunks/DG3qFFTE.js" rel="modulepreload">
9
9
  <link href="/_app/immutable/chunks/COiEfhsA.js" rel="modulepreload">
10
10
  <link href="/_app/immutable/chunks/Dt-HX3Vu.js" rel="modulepreload">
11
- <link href="/_app/immutable/entry/app.DBMyUqvv.js" rel="modulepreload">
11
+ <link href="/_app/immutable/entry/app.CtiuMMEF.js" rel="modulepreload">
12
12
  <link href="/_app/immutable/chunks/BaNbYf_w.js" rel="modulepreload">
13
13
  <link href="/_app/immutable/chunks/xihTtKlq.js" rel="modulepreload">
14
- <link href="/_app/immutable/nodes/0.DiMcia2m.js" rel="modulepreload">
15
- <link href="/_app/immutable/chunks/DtyQVtuI.js" rel="modulepreload">
14
+ <link href="/_app/immutable/nodes/0.CoxJIO4G.js" rel="modulepreload">
15
+ <link href="/_app/immutable/chunks/B81CeftJ.js" rel="modulepreload">
16
16
  <link href="/_app/immutable/chunks/YUSKx8_q.js" rel="modulepreload">
17
17
  <link href="/_app/immutable/chunks/DK8Blf1Y.js" rel="modulepreload">
18
- <link href="/_app/immutable/chunks/LqlI_3J_.js" rel="modulepreload">
18
+ <link href="/_app/immutable/chunks/DV8QsFnv.js" rel="modulepreload">
19
19
  <link href="/_app/immutable/chunks/Bv5jGtB8.js" rel="modulepreload">
20
- <link href="/_app/immutable/chunks/By9nPosf.js" rel="modulepreload">
20
+ <link href="/_app/immutable/chunks/B2aomX_k.js" rel="modulepreload">
21
21
  <link href="/_app/immutable/chunks/DIE02RSm.js" rel="modulepreload">
22
- <link href="/_app/immutable/chunks/Dij7Mzy3.js" rel="modulepreload">
22
+ <link href="/_app/immutable/chunks/DBfU27Yr.js" rel="modulepreload">
23
23
  <link href="/_app/immutable/chunks/CUyVrfsu.js" rel="modulepreload">
24
- <link href="/_app/immutable/chunks/Bs5WxZDd.js" rel="modulepreload">
24
+ <link href="/_app/immutable/chunks/Qxx7HWld.js" rel="modulepreload">
25
25
  <link href="/_app/immutable/chunks/BYcBM-fh.js" rel="modulepreload">
26
- <link href="/_app/immutable/chunks/BDBI1GHG.js" rel="modulepreload">
27
- <link href="/_app/immutable/chunks/Die26Dpp.js" rel="modulepreload">
28
- <link href="/_app/immutable/chunks/Cp6EyiHL.js" rel="modulepreload">
26
+ <link href="/_app/immutable/chunks/DjWoxxBo.js" rel="modulepreload">
27
+ <link href="/_app/immutable/chunks/BoTniyTY.js" rel="modulepreload">
28
+ <link href="/_app/immutable/chunks/K9O-e-XY.js" rel="modulepreload">
29
29
  <link href="/_app/immutable/chunks/d934w91N.js" rel="modulepreload">
30
- <link href="/_app/immutable/chunks/BEQ1toJ7.js" rel="modulepreload">
31
- <link href="/_app/immutable/chunks/BRb3XNWx.js" rel="modulepreload">
32
- <link href="/_app/immutable/chunks/CWmRZDhs.js" rel="modulepreload">
33
- <link href="/_app/immutable/chunks/Dbk0PTBM.js" rel="modulepreload">
34
- <link href="/_app/immutable/chunks/DkYxX008.js" rel="modulepreload">
30
+ <link href="/_app/immutable/chunks/BQbkHzk8.js" rel="modulepreload">
31
+ <link href="/_app/immutable/chunks/G8JeRda5.js" rel="modulepreload">
32
+ <link href="/_app/immutable/chunks/Cne67d4c.js" rel="modulepreload">
33
+ <link href="/_app/immutable/chunks/Cn8IkTI5.js" rel="modulepreload">
34
+ <link href="/_app/immutable/chunks/BgDByODt.js" rel="modulepreload">
35
35
  <link href="/_app/immutable/chunks/BMgzWMdF.js" rel="modulepreload">
36
36
  <link href="/_app/immutable/chunks/CgAkqYsL.js" rel="modulepreload">
37
37
 
@@ -45,21 +45,21 @@
45
45
  <link href="/_app/immutable/assets/AppShell.Y0ysizZK.css" rel="stylesheet">
46
46
  <link href="/_app/immutable/assets/SectionIcons.BGFcFuOf.css" rel="stylesheet">
47
47
  <link href="/_app/immutable/assets/SectionActions.BE1CPmxk.css" rel="stylesheet">
48
- <link href="/_app/immutable/assets/0.BaRFeYGU.css" rel="stylesheet">
48
+ <link href="/_app/immutable/assets/0.BwSv64V0.css" rel="stylesheet">
49
49
  </head>
50
50
  <body data-sveltekit-preload-data="hover">
51
51
  <div style="display: contents">
52
52
  <script>
53
53
  {
54
- __sveltekit_n33icd = {
54
+ __sveltekit_1z0xjtm = {
55
55
  base: ""
56
56
  };
57
57
 
58
58
  const element = document.currentScript.parentElement;
59
59
 
60
60
  Promise.all([
61
- import("/_app/immutable/entry/start.wMO3ZYuE.js"),
62
- import("/_app/immutable/entry/app.DBMyUqvv.js")
61
+ import("/_app/immutable/entry/start.DZqoRv5o.js"),
62
+ import("/_app/immutable/entry/app.CtiuMMEF.js")
63
63
  ]).then(([kit, app]) => {
64
64
  kit.start(app, element);
65
65
  });
@@ -0,0 +1 @@
1
+ @layer smrt.reset,smrt.structure;@layer smrt.theme{.ai-status.svelte-nioco2{gap:var(--smrt-spacing-2);padding:var(--smrt-spacing-2);display:flex}.cap.svelte-nioco2{border:var(--smrt-hairline);width:2.25rem;height:2.25rem;color:var(--smrt-color-on-surface);border-color:#0000;border-radius:50%;place-items:center;text-decoration:none;display:inline-grid}.cap.svelte-nioco2:hover{background:color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent)}.cap.svelte-nioco2:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}.cap[data-state=ready].svelte-nioco2{background:var(--smrt-color-success-container);color:var(--smrt-color-on-success-container)}.cap[data-state=available].svelte-nioco2{border:var(--smrt-hairline-strong);color:var(--smrt-color-on-surface-variant);border-style:dashed}.cap[data-state=off].svelte-nioco2{border:var(--smrt-hairline);color:var(--smrt-color-on-surface-variant);opacity:.5;border-style:dashed;position:relative}.cap[data-state=off].svelte-nioco2:after{content:"";border-top:2px solid;width:70%;height:0;position:absolute;transform:rotate(-45deg)}.voice.svelte-w5gfst{align-items:center;gap:var(--smrt-spacing-2);padding:var(--smrt-spacing-2) var(--smrt-spacing-4);min-width:0;color:var(--smrt-color-on-surface-variant);overflow-wrap:anywhere;flex-wrap:wrap;display:flex}.icon.svelte-w5gfst{fill:currentColor;flex:none;width:1.25rem;height:1.25rem}.text.svelte-w5gfst{gap:var(--smrt-spacing-1);flex:14rem;min-width:0;display:grid}.actions.svelte-w5gfst{gap:var(--smrt-spacing-2);display:flex}progress.svelte-w5gfst{width:100%}.error.svelte-w5gfst{color:var(--smrt-color-error)}.assistant.svelte-12q53fs{grid-template-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr);min-width:0;height:100%;min-height:0;display:grid}.top.svelte-12q53fs{min-width:0}.dock.svelte-12q53fs{min-width:0;min-height:0;overflow:hidden}.panel.svelte-12q53fs{gap:var(--smrt-spacing-3);padding:var(--smrt-spacing-4);overflow-wrap:anywhere;grid-template-columns:minmax(0,1fr);align-content:start;min-width:0;display:grid}.bar.svelte-12q53fs{justify-content:space-between;align-items:center;gap:var(--smrt-spacing-2);padding:var(--smrt-spacing-2) var(--smrt-spacing-4);min-width:0;color:var(--smrt-color-on-surface-variant);display:flex}.model-name.svelte-12q53fs{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:var(--smrt-typography-body-small-size,.8125rem);overflow:hidden}.model-link.svelte-12q53fs{border-radius:var(--smrt-radius-full);width:32px;height:32px;color:var(--smrt-color-on-surface-variant);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.model-link.svelte-12q53fs:hover{background:color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent)}.model-link.svelte-12q53fs:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}.offer.svelte-12q53fs{align-items:center;gap:var(--smrt-spacing-2);margin-top:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.offer-text.svelte-12q53fs{gap:var(--smrt-spacing-1);flex-basis:100%;display:grid}.offer-text.svelte-12q53fs span:where(.svelte-12q53fs),.offer-menu.svelte-12q53fs{color:var(--smrt-color-on-surface-variant)}.offer-menu.svelte-12q53fs{margin:0;padding-inline-start:var(--smrt-spacing-4)}.offer.svelte-12q53fs small:where(.svelte-12q53fs),.offer-note.svelte-12q53fs{color:var(--smrt-color-on-surface-variant)}.offer-note.svelte-12q53fs{margin:var(--smrt-spacing-2) 0 0}h2.svelte-12q53fs,p.svelte-12q53fs{margin:0}p.svelte-12q53fs{color:var(--smrt-color-on-surface-variant)}.header-link.svelte-d0fjw8{block-size:2rem;inline-size:2rem;color:inherit;border-radius:var(--smrt-radius-medium,.5rem);flex:none;place-items:center;display:inline-grid}.header-link--labelled.svelte-d0fjw8{gap:var(--smrt-spacing-1);inline-size:auto;padding-inline:var(--smrt-spacing-2);white-space:nowrap;display:inline-flex}.header-link.svelte-d0fjw8:hover{background:color-mix(in srgb, currentColor calc(var(--smrt-state-hover) * 100%), transparent)}.header-link.svelte-d0fjw8:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}.header-link[aria-current=page].svelte-d0fjw8{background:var(--smrt-color-secondary-container,#0000001f);color:var(--smrt-color-primary)}.header-link--nav.svelte-d0fjw8{--smrt-header-icon-link-accent:var(--smrt-color-info);--smrt-header-icon-link-ink:color-mix(in srgb, var(--smrt-header-icon-link-accent) 60%, var(--smrt-color-on-surface,CanvasText));gap:var(--smrt-spacing-2);block-size:2.25rem;padding-inline:var(--smrt-spacing-3);border:.125rem solid var(--smrt-header-icon-link-ink);border-radius:var(--smrt-radius-medium,.5rem);background:color-mix(in srgb, var(--smrt-header-icon-link-accent) 14%, var(--smrt-color-surface,Canvas));color:var(--smrt-color-on-surface,CanvasText);font-weight:600;text-decoration:none}.header-link--nav[data-tone=features].svelte-d0fjw8{--smrt-header-icon-link-accent:var(--smrt-color-success)}.header-link--nav[data-tone=styles].svelte-d0fjw8{--smrt-header-icon-link-accent:var(--smrt-color-tertiary)}.header-link--nav[data-tone=build].svelte-d0fjw8{--smrt-header-icon-link-accent:var(--smrt-color-warning)}.header-link--nav.svelte-d0fjw8 svg{color:var(--smrt-header-icon-link-ink)}.header-link--nav.svelte-d0fjw8:hover{background:color-mix(in srgb, var(--smrt-header-icon-link-accent) 28%, var(--smrt-color-surface,Canvas))}.header-link--nav[aria-current=page].svelte-d0fjw8{background:color-mix(in srgb, var(--smrt-header-icon-link-accent) 32%, var(--smrt-color-surface,Canvas));color:var(--smrt-color-on-surface,CanvasText);box-shadow:inset 0 -.25rem 0 var(--smrt-header-icon-link-ink)}@media (width<=30rem){.header-link--nav.svelte-d0fjw8{block-size:auto;min-inline-size:0;padding:var(--smrt-spacing-1);flex-direction:column;flex:1 1 0;gap:0;font-size:.6875rem;line-height:1.2}.header-link--nav.svelte-d0fjw8 span{text-overflow:ellipsis;max-inline-size:100%;overflow:hidden}}@media (width<=20rem){.header-link--nav.svelte-d0fjw8{border-width:.0625rem;font-size:.625rem}}[data-smrt-view-transition] .header-link.svelte-d0fjw8{view-transition-name:var(--smrt-header-icon-link-transition-name)}@media (forced-colors:active){.header-link[aria-current=page].svelte-d0fjw8{color:highlighttext;background:highlight}.header-link--nav.svelte-d0fjw8{color:buttontext;background:buttonface;border-color:buttontext}.header-link--nav.svelte-d0fjw8 svg{color:buttontext}.header-link--nav.svelte-d0fjw8:hover{border-color:highlight}.header-link--nav[aria-current=page].svelte-d0fjw8{color:highlighttext;box-shadow:none;background:highlight;border-color:highlight}.header-link--nav[aria-current=page].svelte-d0fjw8 svg{color:highlighttext}}.bridge-error.svelte-38390f{padding:var(--smrt-spacing-2,.5rem) var(--smrt-spacing-4,1rem);color:var(--smrt-color-on-error-container);background:var(--smrt-color-error-container);margin:0}.bridge-backdrop.svelte-38390f{z-index:9998;background:#00000073;position:fixed;inset:0}.bridge-recovery.svelte-38390f{z-index:9999;inset-inline:max(1rem,50vw - 16rem);border-radius:var(--smrt-radius-large,.75rem);background:var(--smrt-surface-raised,white);color:var(--smrt-color-on-surface,black);box-shadow:var(--smrt-elevation-4);gap:.75rem;padding:1.5rem;display:grid;position:fixed;top:15vh}.bridge-recovery.svelte-38390f h2:where(.svelte-38390f),.bridge-recovery.svelte-38390f p:where(.svelte-38390f){margin:0}.bridge-preserved.svelte-38390f{padding:var(--smrt-spacing-2,.5rem) var(--smrt-spacing-4,1rem);color:var(--smrt-color-on-error-container);background:var(--smrt-color-error-container)}.bridge-preserved.svelte-38390f textarea:where(.svelte-38390f){width:100%;min-height:8rem}.bridge-recovery.svelte-38390f textarea:where(.svelte-38390f){width:100%;min-height:10rem;max-height:35vh}.shell-host.svelte-12qhfyh{display:contents}.smrt-admin-shell__slot--leftSidebar-footer{align-items:stretch;gap:var(--smrt-spacing-2);flex-direction:column}.smrt-admin-shell__slot--leftSidebar-footer>*{inline-size:100%}.storage-notice.svelte-12qhfyh{padding:var(--smrt-spacing-2) var(--smrt-spacing-6);background:var(--smrt-color-surface-container);color:var(--smrt-color-on-surface-variant);margin:0}}
@@ -1 +1 @@
1
- @layer smrt.reset,smrt.structure;@layer smrt.theme{.settings.svelte-1adyoey{gap:var(--smrt-spacing-4);grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));align-items:end;display:grid}.field.svelte-1adyoey{gap:var(--smrt-spacing-1);display:grid}.percent.svelte-1adyoey{align-items:flex-end;gap:var(--smrt-spacing-2);display:flex}.percent.svelte-1adyoey .smrt-number{flex:1}.percent-sign.svelte-1adyoey{padding-bottom:var(--smrt-spacing-2);color:var(--smrt-color-on-surface-variant)}.switch.svelte-1adyoey small:where(.svelte-1adyoey),.meta.svelte-1adyoey{color:var(--smrt-color-on-surface-variant)}.tax-codes.svelte-1adyoey{gap:var(--smrt-spacing-2);margin-top:var(--smrt-spacing-4);display:grid}.tax-codes.svelte-1adyoey h3:where(.svelte-1adyoey),.tax-codes.svelte-1adyoey p:where(.svelte-1adyoey){margin:0}.tax-codes.svelte-1adyoey ul:where(.svelte-1adyoey){gap:var(--smrt-spacing-1) var(--smrt-spacing-4);grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));margin:0;padding:0;list-style:none;display:grid}.tax-codes.svelte-1adyoey li:where(.svelte-1adyoey){display:grid}.tax-codes.svelte-1adyoey .rates:where(.svelte-1adyoey){color:var(--smrt-color-on-surface-variant);font-size:.875rem}.cookbooks.svelte-mzas8k{gap:var(--smrt-spacing-4);display:grid}h2.svelte-mzas8k,h3.svelte-mzas8k,h4.svelte-mzas8k,p.svelte-mzas8k{margin:0}h3.svelte-mzas8k,h4.svelte-mzas8k{font:var(--smrt-typography-title-medium-font);letter-spacing:var(--smrt-typography-title-medium-tracking)}.meta.svelte-mzas8k,.summary.svelte-mzas8k{color:var(--smrt-color-on-surface-variant)}.grid.svelte-mzas8k{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));margin:0;padding:0;list-style:none;display:grid}.card.svelte-mzas8k{gap:var(--smrt-spacing-2);width:100%;height:100%;padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-lg,.75rem);background:var(--smrt-surface-panel);color:inherit;font:inherit;text-align:start;cursor:pointer;justify-items:start;display:grid;position:relative}.card.svelte-mzas8k:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}.icon.svelte-mzas8k{color:var(--smrt-color-primary);flex:none}.heading.svelte-mzas8k{align-items:center;gap:var(--smrt-spacing-2);min-inline-size:0;padding-inline-end:4rem;display:flex}.name.svelte-mzas8k{font-weight:var(--smrt-typography-weight-semibold)}.badge.svelte-mzas8k{top:var(--smrt-spacing-3);right:var(--smrt-spacing-3);padding:0 var(--smrt-spacing-2);border-radius:var(--smrt-radius-full);background:var(--smrt-color-primary);color:var(--smrt-color-on-primary);font-size:.75rem;position:absolute}.preview.svelte-mzas8k{gap:var(--smrt-spacing-4);padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-lg,.75rem);display:grid}.block.svelte-mzas8k{gap:var(--smrt-spacing-2);display:grid}.chips.svelte-mzas8k,.menu.svelte-mzas8k ul:where(.svelte-mzas8k){margin:0;padding:0;list-style:none}.chips.svelte-mzas8k{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.chips.svelte-mzas8k li:where(.svelte-mzas8k){padding:0 var(--smrt-spacing-3);border-radius:var(--smrt-radius-full);background:var(--smrt-color-surface-container)}.menu.svelte-mzas8k{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(11rem,1fr));display:grid}.menu.svelte-mzas8k ul:where(.svelte-mzas8k){gap:var(--smrt-spacing-1);margin-top:var(--smrt-spacing-1);display:grid}.actions.svelte-mzas8k{align-items:center;gap:var(--smrt-spacing-3);flex-wrap:wrap;display:flex}.back.svelte-mzas8k{justify-self:start;margin-inline-start:calc(-1 * var(--smrt-spacing-2))}.preview.svelte-mzas8k h2:where(.svelte-mzas8k):focus{outline:none}.preview.svelte-mzas8k h2:where(.svelte-mzas8k):focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}[data-smrt-view-transition] .swap.svelte-mzas8k{view-transition-name:planner-cookbooks}::view-transition-group(planner-cookbooks){animation-duration:var(--smrt-duration-short4);animation-timing-function:var(--smrt-easing-standard)}::view-transition-old(planner-cookbooks){animation-duration:var(--smrt-duration-short4);animation-timing-function:var(--smrt-easing-standard)}::view-transition-new(planner-cookbooks){animation-duration:var(--smrt-duration-short4);animation-timing-function:var(--smrt-easing-standard)}.project.svelte-1ij12un{gap:var(--smrt-spacing-3);display:grid}h2.svelte-1ij12un,p.svelte-1ij12un{margin:0}.meta.svelte-1ij12un{color:var(--smrt-color-on-surface-variant)}.actions.svelte-1ij12un{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.export.svelte-17nkvtk{gap:var(--smrt-spacing-5);min-inline-size:0;display:grid}h2.svelte-17nkvtk,h3.svelte-17nkvtk,p.svelte-17nkvtk,dl.svelte-17nkvtk,dd.svelte-17nkvtk,pre.svelte-17nkvtk{margin:0}h2.svelte-17nkvtk{font:var(--smrt-typography-title-medium-font)}h3.svelte-17nkvtk{font:var(--smrt-typography-title-small-font)}.eyebrow.svelte-17nkvtk{color:var(--smrt-color-on-surface-variant);font:var(--smrt-typography-label-large-font)}.export-intro.svelte-17nkvtk,.build-step.svelte-17nkvtk,.copy-step.svelte-17nkvtk{gap:var(--smrt-spacing-3);min-inline-size:0;display:grid}.next-steps.svelte-17nkvtk{gap:var(--smrt-spacing-4);display:grid}.build-step.svelte-17nkvtk{padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-control-radius);background:var(--smrt-surface-sunken)}.block.svelte-17nkvtk{gap:var(--smrt-spacing-3);min-inline-size:0;display:grid}.meta.svelte-17nkvtk,.notice.svelte-17nkvtk,.quiet.svelte-17nkvtk{color:var(--smrt-color-on-surface-variant)}.notice.svelte-17nkvtk:empty{display:none}.summary.svelte-17nkvtk{gap:var(--smrt-spacing-2) var(--smrt-spacing-4);grid-template-columns:max-content minmax(0,1fr);align-items:baseline;display:grid}dt.svelte-17nkvtk{font-weight:var(--smrt-typography-weight-semibold);white-space:nowrap}.chips.svelte-17nkvtk{gap:var(--smrt-spacing-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.actions.svelte-17nkvtk{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.export.svelte-17nkvtk .prompt{font-family:var(--smrt-font-family-mono,ui-monospace, monospace);white-space:pre-wrap;overflow-wrap:anywhere;resize:none;max-block-size:20rem;overflow:auto}code.svelte-17nkvtk{font-family:var(--smrt-font-family-mono,ui-monospace, monospace);overflow-wrap:anywhere}.command.svelte-17nkvtk{align-items:center;gap:var(--smrt-spacing-2) var(--smrt-spacing-3);flex-wrap:wrap;display:flex}.command.svelte-17nkvtk code:where(.svelte-17nkvtk){min-inline-size:0;padding:var(--smrt-spacing-2) var(--smrt-spacing-3);border:var(--smrt-hairline);border-radius:var(--smrt-control-radius);background:var(--smrt-surface-sunken);flex:16rem}.json.svelte-17nkvtk{max-block-size:20rem;padding:var(--smrt-spacing-3);border:var(--smrt-hairline);border-radius:var(--smrt-control-radius);background:var(--smrt-surface-sunken);font-family:var(--smrt-font-family-mono,ui-monospace, monospace);font-size:var(--smrt-typography-body-small-size);white-space:pre-wrap;overflow-wrap:anywhere;overflow:auto}.replace.svelte-17nkvtk{border-block-start:var(--smrt-hairline);padding-block-start:var(--smrt-spacing-4)}@media (width<=30rem){.summary.svelte-17nkvtk{grid-template-columns:minmax(0,1fr)}.actions.svelte-17nkvtk,.command.svelte-17nkvtk{flex-direction:column;align-items:stretch}.actions.svelte-17nkvtk>[data-smrt-component=Button],.command.svelte-17nkvtk>[data-smrt-component=Button]{inline-size:100%}}@media (forced-colors:active){.build-step.svelte-17nkvtk,.command.svelte-17nkvtk code:where(.svelte-17nkvtk),.json.svelte-17nkvtk{border-color:canvastext}}h3.svelte-1tvhds4,h4.svelte-1tvhds4,p.svelte-1tvhds4{margin:0}.card.svelte-1tvhds4{align-content:start;gap:var(--smrt-spacing-2);padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);display:grid}.card.selected.svelte-1tvhds4{border-color:var(--smrt-color-primary)}.head.svelte-1tvhds4{justify-content:space-between;align-items:center;gap:var(--smrt-spacing-2);display:flex}h3.svelte-1tvhds4{font:var(--smrt-typography-title-medium-font);letter-spacing:var(--smrt-typography-title-medium-tracking)}h4.svelte-1tvhds4{color:var(--smrt-color-on-surface-variant);font:var(--smrt-typography-label-medium-font);letter-spacing:var(--smrt-typography-label-medium-tracking);font-weight:var(--smrt-typography-weight-semibold);text-transform:uppercase}.meta.svelte-1tvhds4{color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-body-small-size)}.plain.svelte-1tvhds4{gap:var(--smrt-spacing-1);font-size:var(--smrt-typography-body-medium-size);margin:0;padding:0;list-style:none;display:grid}.kind.svelte-1tvhds4{padding:0 var(--smrt-spacing-2);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-label-small-size);margin-inline-end:var(--smrt-spacing-1)}.reasons.svelte-1tvhds4{margin-block-end:var(--smrt-spacing-2)}.foot.svelte-1tvhds4{gap:var(--smrt-spacing-1);margin-top:var(--smrt-spacing-2);display:grid}code.svelte-1tvhds4{font-family:var(--smrt-font-family-mono,ui-monospace, monospace);font-size:.85em}.where.svelte-1tvhds4{margin-inline-start:.35em}.summary.svelte-1tvhds4{font-size:var(--smrt-typography-body-medium-size)}@media (forced-colors:active){.card.selected.svelte-1tvhds4{border-color:highlight;outline:.125rem solid highlight}}.features.svelte-7kphei{gap:var(--smrt-spacing-3);display:grid}h2.svelte-7kphei,p.svelte-7kphei{margin:0}.meta.svelte-7kphei,.notice.svelte-7kphei,.empty.svelte-7kphei,.count.svelte-7kphei{color:var(--smrt-color-on-surface-variant)}.count.svelte-7kphei{font-size:var(--smrt-typography-body-medium-size);font-weight:400}.notice.svelte-7kphei:empty{display:none}.chips.svelte-7kphei{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.rows.svelte-7kphei{border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);margin:0;padding:0;list-style:none;display:grid;overflow:hidden}.rows.svelte-7kphei li:where(.svelte-7kphei){align-items:center;gap:var(--smrt-spacing-3);padding:var(--smrt-spacing-3) var(--smrt-spacing-4);display:flex}.rows.svelte-7kphei li:where(.svelte-7kphei)+li:where(.svelte-7kphei){border-top:var(--smrt-hairline)}.rows.svelte-7kphei li.selected:where(.svelte-7kphei){background:color-mix(in srgb, currentColor calc(var(--smrt-state-selected) * 100%), transparent)}.includes.svelte-7kphei{color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-body-small-size)}.icon.svelte-7kphei{color:var(--smrt-color-on-surface-variant);display:inline-flex}.text.svelte-7kphei{flex:1;min-width:0;display:grid}.bar.svelte-7kphei{justify-content:space-between;align-items:center;gap:var(--smrt-spacing-3);display:flex}.name.svelte-7kphei{align-items:baseline;gap:var(--smrt-spacing-2);display:flex}.tag.svelte-7kphei{padding:0 var(--smrt-spacing-2);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-label-small-size)}.text.svelte-7kphei a:where(.svelte-7kphei){width:fit-content;color:var(--smrt-color-on-surface);font-weight:500}.text.svelte-7kphei .meta:where(.svelte-7kphei){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@media (forced-colors:active){.rows.svelte-7kphei li.selected:where(.svelte-7kphei){outline-offset:-.125rem;outline:.125rem solid highlight}}.features.svelte-q9yl1j{gap:var(--smrt-spacing-3);display:grid}h2.svelte-q9yl1j,p.svelte-q9yl1j{margin:0}section.svelte-q9yl1j{gap:var(--smrt-spacing-2);display:grid}.meta.svelte-q9yl1j,.count.svelte-q9yl1j{color:var(--smrt-color-on-surface-variant)}.count.svelte-q9yl1j{font-size:var(--smrt-typography-body-medium-size)}.notice.svelte-q9yl1j:empty{display:none}.chips.svelte-q9yl1j{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.cards.svelte-q9yl1j{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(19rem,1fr));margin:0;padding:0;list-style:none;display:grid}h2.svelte-1d5gge1,p.svelte-1d5gge1{margin:0}.meta.svelte-1d5gge1,.description.svelte-1d5gge1,.notice.svelte-1d5gge1{color:var(--smrt-color-on-surface-variant)}.notice.svelte-1d5gge1:empty{display:none}.cards.svelte-1d5gge1{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(18rem,1fr));margin:0;padding:0;list-style:none;display:grid}.cards.svelte-1d5gge1 li:where(.svelte-1d5gge1){align-content:start;gap:var(--smrt-spacing-2);padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);display:grid}.cards.svelte-1d5gge1 li.selected:where(.svelte-1d5gge1){border-color:var(--smrt-color-primary)}.sub.svelte-1d5gge1{gap:var(--smrt-spacing-1);display:grid}@media (forced-colors:active){.cards.svelte-1d5gge1 li.selected:where(.svelte-1d5gge1){border-color:highlight;outline:.125rem solid highlight}}.pane.svelte-d580bl{gap:var(--smrt-spacing-4);display:grid}.meta.svelte-d580bl{color:var(--smrt-color-on-surface-variant);margin:0}.theme.svelte-18m8le4{gap:1.25rem;max-inline-size:72rem;display:grid}.cards.svelte-18m8le4{grid-template-columns:repeat(auto-fill,minmax(min(10rem,100%),1fr));gap:.75rem;display:grid}.choice.svelte-18m8le4{border:var(--smrt-hairline);border-radius:var(--smrt-radius-large,.75rem);background:var(--smrt-surface-panel);min-block-size:8.5rem;color:var(--smrt-color-on-surface);text-align:start;cursor:pointer;transition:border-color var(--smrt-duration-short3,.15s) var(--smrt-easing-standard,ease), background var(--smrt-duration-short3,.15s) var(--smrt-easing-standard,ease), transform var(--smrt-duration-short3,.15s) var(--smrt-easing-standard,ease);align-content:start;gap:.8rem;padding:.85rem;display:grid}.choice.svelte-18m8le4:hover{border-color:var(--smrt-color-primary);background:var(--smrt-surface-raised);transform:translateY(-2px)}.choice.selected.svelte-18m8le4{border:2px solid var(--smrt-color-primary);background:var(--smrt-color-primary-container);color:var(--smrt-color-on-primary-container);padding:calc(.85rem - 1px)}.choice.svelte-18m8le4:focus-visible,.advanced.svelte-18m8le4:focus-visible,.wheel.svelte-18m8le4:focus-within,select.svelte-18m8le4:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}.choice-name.svelte-18m8le4{align-items:center;gap:.55rem;font-size:1rem;font-weight:700;line-height:1.2;display:inline-flex}.choice-icon.svelte-18m8le4{block-size:1.5rem;inline-size:1.5rem;color:var(--smrt-color-primary);flex:none;place-items:center;font-size:1.35rem;display:inline-grid}.preview.svelte-18m8le4{border:1px solid color-mix(in srgb, var(--smrt-planner-preview-ink) 20%, transparent);background:var(--smrt-planner-preview-bg);border-radius:.4rem;block-size:4.5rem;inline-size:100%;display:flex;overflow:hidden}.preview-sidebar.svelte-18m8le4{background:var(--smrt-planner-preview-primary);align-content:start;gap:.35rem;inline-size:23%;padding:.5rem .3rem;display:grid}.preview-sidebar.svelte-18m8le4 span:where(.svelte-18m8le4){background:var(--smrt-planner-preview-surface);opacity:.8;border-radius:1rem;block-size:.22rem}.preview-main.svelte-18m8le4{flex:1;align-content:start;gap:.4rem;padding:.6rem;display:grid}.preview-title.svelte-18m8le4{background:var(--smrt-planner-preview-ink);opacity:.7;border-radius:1rem;block-size:.32rem;inline-size:55%}.preview-body.svelte-18m8le4{background:var(--smrt-planner-preview-surface);border-radius:.2rem;gap:.25rem;padding:.35rem;display:grid}.preview-body.svelte-18m8le4 span:where(.svelte-18m8le4){background:var(--smrt-planner-preview-primary);opacity:.7;border-radius:1rem;block-size:.2rem}.preview-body.svelte-18m8le4 span:where(.svelte-18m8le4):last-child{opacity:.35;inline-size:70%}.scheme.svelte-18m8le4{min-block-size:8.5rem}.choice-hint.svelte-18m8le4{color:var(--smrt-color-on-surface-variant);font-size:.85rem}.brand.svelte-18m8le4,.shape.svelte-18m8le4{flex-wrap:wrap;align-items:end;gap:1rem;display:flex}.shape.svelte-18m8le4 .field:where(.svelte-18m8le4){min-inline-size:min(10rem,100%)}.field.svelte-18m8le4{gap:.4rem;display:grid}.pick.svelte-18m8le4{align-items:center;gap:.65rem;display:flex}.wheel.svelte-18m8le4{block-size:3rem;inline-size:3rem;box-shadow:0 0 0 1px var(--smrt-hairline-color);cursor:pointer;background:conic-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red);border-radius:50%;flex:none;place-items:center;display:inline-grid;position:relative}.wheel.svelte-18m8le4:after{content:"";background:var(--smrt-planner-picked-color);block-size:1.7rem;inline-size:1.7rem;box-shadow:var(--smrt-elevation-1);pointer-events:none;border:2px solid #fff;border-radius:50%}.wheel.svelte-18m8le4 input:where(.svelte-18m8le4){opacity:0;cursor:pointer;block-size:100%;inline-size:100%;position:absolute;inset:0}.font-field.svelte-18m8le4{min-inline-size:min(14rem,100%)}select.svelte-18m8le4{border:var(--smrt-control-border);border-radius:var(--smrt-radius-medium,.5rem);background:var(--smrt-surface-control);min-block-size:3rem;color:var(--smrt-color-on-surface);font:inherit;cursor:pointer;padding:.6rem 2rem .6rem .8rem}.error.svelte-18m8le4{color:var(--smrt-color-error);margin:0}.advanced.svelte-18m8le4{border:var(--smrt-hairline);border-radius:var(--smrt-radius-large,.75rem);background:var(--smrt-surface-panel);color:var(--smrt-color-on-surface);align-items:center;gap:.8rem;padding:1rem;text-decoration:none;display:flex}.advanced.svelte-18m8le4:hover{border-color:var(--smrt-color-primary)}.advanced-icon.svelte-18m8le4{background:var(--smrt-color-primary-container);block-size:2.8rem;inline-size:2.8rem;color:var(--smrt-color-on-primary-container);border-radius:.65rem;flex:none;place-items:center;font:700 1rem ui-monospace,monospace;display:grid}.advanced.svelte-18m8le4 strong:where(.svelte-18m8le4),.advanced.svelte-18m8le4 small:where(.svelte-18m8le4){display:block}.advanced.svelte-18m8le4 small:where(.svelte-18m8le4){color:var(--smrt-color-on-surface-variant);margin-top:.15rem}.arrow.svelte-18m8le4{margin-inline-start:auto;font-size:1.3rem}@media (forced-colors:active){.choice.selected.svelte-18m8le4{outline-offset:.125rem;border-color:highlight;outline:.125rem solid highlight}.preview.svelte-18m8le4,.wheel.svelte-18m8le4{forced-color-adjust:none}}.planner.svelte-zuxcuo .tab-panel{padding-top:var(--smrt-spacing-4)}[data-smrt-view-transition] .planner.svelte-zuxcuo .tabs-nav,[data-smrt-view-transition] .planner.svelte-zuxcuo .tabs-links{view-transition-name:planner-tabs}.planner.svelte-zuxcuo .smrt-tabs__nav{scroll-snap-type:x proximity;overscroll-behavior-x:contain}.planner.svelte-zuxcuo .smrt-tabs__tab-button{scroll-snap-align:start}@property --smrt-planner-controls-tabs-fade{syntax:"<length>";inherits:false;initial-value:0}@supports (animation-timeline:scroll()){.planner.svelte-zuxcuo .smrt-tabs__nav{-webkit-mask-image:linear-gradient(to right, black calc(100% - var(--smrt-planner-controls-tabs-fade)), transparent);mask-image:linear-gradient(to right, black calc(100% - var(--smrt-planner-controls-tabs-fade)), transparent);animation:linear both svelte-zuxcuo-planner-tabs-fade;animation-timeline:scroll(self inline)}@keyframes svelte-zuxcuo-planner-tabs-fade{0%{--smrt-planner-controls-tabs-fade:3rem}to{--smrt-planner-controls-tabs-fade:0rem}}}.pane.svelte-zuxcuo{gap:var(--smrt-spacing-3);display:grid}.pane[hidden].svelte-zuxcuo{display:none}.meta.svelte-zuxcuo{color:var(--smrt-color-on-surface-variant);margin:0}main.svelte-1uha8ag{width:min(100%,72rem);padding:var(--smrt-spacing-6);margin-inline:auto}.first-run.svelte-1uha8ag{gap:var(--smrt-spacing-4);display:grid}.first-run.svelte-1uha8ag h1:where(.svelte-1uha8ag),.first-run.svelte-1uha8ag p:where(.svelte-1uha8ag){margin:0}.actions.svelte-1uha8ag{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}}
1
+ @layer smrt.reset,smrt.structure;@layer smrt.theme{.settings.svelte-1adyoey{gap:var(--smrt-spacing-4);grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));align-items:end;display:grid}.field.svelte-1adyoey{gap:var(--smrt-spacing-1);display:grid}.percent.svelte-1adyoey{align-items:flex-end;gap:var(--smrt-spacing-2);display:flex}.percent.svelte-1adyoey .smrt-number{flex:1}.percent-sign.svelte-1adyoey{padding-bottom:var(--smrt-spacing-2);color:var(--smrt-color-on-surface-variant)}.switch.svelte-1adyoey small:where(.svelte-1adyoey),.meta.svelte-1adyoey{color:var(--smrt-color-on-surface-variant)}.tax-codes.svelte-1adyoey{gap:var(--smrt-spacing-2);margin-top:var(--smrt-spacing-4);display:grid}.tax-codes.svelte-1adyoey h3:where(.svelte-1adyoey),.tax-codes.svelte-1adyoey p:where(.svelte-1adyoey){margin:0}.tax-codes.svelte-1adyoey ul:where(.svelte-1adyoey){gap:var(--smrt-spacing-1) var(--smrt-spacing-4);grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));margin:0;padding:0;list-style:none;display:grid}.tax-codes.svelte-1adyoey li:where(.svelte-1adyoey){display:grid}.tax-codes.svelte-1adyoey .rates:where(.svelte-1adyoey){color:var(--smrt-color-on-surface-variant);font-size:.875rem}.cookbooks.svelte-mzas8k{gap:var(--smrt-spacing-4);display:grid}h2.svelte-mzas8k,h3.svelte-mzas8k,h4.svelte-mzas8k,p.svelte-mzas8k{margin:0}h3.svelte-mzas8k,h4.svelte-mzas8k{font:var(--smrt-typography-title-medium-font);letter-spacing:var(--smrt-typography-title-medium-tracking)}.meta.svelte-mzas8k,.summary.svelte-mzas8k{color:var(--smrt-color-on-surface-variant)}.grid.svelte-mzas8k{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));margin:0;padding:0;list-style:none;display:grid}.card.svelte-mzas8k{gap:var(--smrt-spacing-2);width:100%;height:100%;padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-lg,.75rem);background:var(--smrt-surface-panel);color:inherit;font:inherit;text-align:start;cursor:pointer;justify-items:start;display:grid;position:relative}.card.svelte-mzas8k:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}.icon.svelte-mzas8k{color:var(--smrt-color-primary);flex:none}.heading.svelte-mzas8k{align-items:center;gap:var(--smrt-spacing-2);min-inline-size:0;padding-inline-end:4rem;display:flex}.name.svelte-mzas8k{font-weight:var(--smrt-typography-weight-semibold)}.badge.svelte-mzas8k{top:var(--smrt-spacing-3);right:var(--smrt-spacing-3);padding:0 var(--smrt-spacing-2);border-radius:var(--smrt-radius-full);background:var(--smrt-color-primary);color:var(--smrt-color-on-primary);font-size:.75rem;position:absolute}.preview.svelte-mzas8k{gap:var(--smrt-spacing-4);padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-lg,.75rem);display:grid}.block.svelte-mzas8k{gap:var(--smrt-spacing-2);display:grid}.chips.svelte-mzas8k,.menu.svelte-mzas8k ul:where(.svelte-mzas8k){margin:0;padding:0;list-style:none}.chips.svelte-mzas8k{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.chips.svelte-mzas8k li:where(.svelte-mzas8k){padding:0 var(--smrt-spacing-3);border-radius:var(--smrt-radius-full);background:var(--smrt-color-surface-container)}.menu.svelte-mzas8k{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(11rem,1fr));display:grid}.menu.svelte-mzas8k ul:where(.svelte-mzas8k){gap:var(--smrt-spacing-1);margin-top:var(--smrt-spacing-1);display:grid}.actions.svelte-mzas8k{align-items:center;gap:var(--smrt-spacing-3);flex-wrap:wrap;display:flex}.back.svelte-mzas8k{justify-self:start;margin-inline-start:calc(-1 * var(--smrt-spacing-2))}.preview.svelte-mzas8k h2:where(.svelte-mzas8k):focus{outline:none}.preview.svelte-mzas8k h2:where(.svelte-mzas8k):focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}[data-smrt-view-transition] .swap.svelte-mzas8k{view-transition-name:planner-cookbooks}::view-transition-group(planner-cookbooks){animation-duration:var(--smrt-duration-short4);animation-timing-function:var(--smrt-easing-standard)}::view-transition-old(planner-cookbooks){animation-duration:var(--smrt-duration-short4);animation-timing-function:var(--smrt-easing-standard)}::view-transition-new(planner-cookbooks){animation-duration:var(--smrt-duration-short4);animation-timing-function:var(--smrt-easing-standard)}.project.svelte-1ij12un{gap:var(--smrt-spacing-3);display:grid}h2.svelte-1ij12un,p.svelte-1ij12un{margin:0}.meta.svelte-1ij12un{color:var(--smrt-color-on-surface-variant)}.actions.svelte-1ij12un{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.export.svelte-17nkvtk{gap:var(--smrt-spacing-5);min-inline-size:0;display:grid}h2.svelte-17nkvtk,h3.svelte-17nkvtk,p.svelte-17nkvtk,dl.svelte-17nkvtk,dd.svelte-17nkvtk,pre.svelte-17nkvtk{margin:0}h2.svelte-17nkvtk{font:var(--smrt-typography-title-medium-font)}h3.svelte-17nkvtk{font:var(--smrt-typography-title-small-font)}.eyebrow.svelte-17nkvtk{color:var(--smrt-color-on-surface-variant);font:var(--smrt-typography-label-large-font)}.export-intro.svelte-17nkvtk,.build-step.svelte-17nkvtk,.copy-step.svelte-17nkvtk{gap:var(--smrt-spacing-3);min-inline-size:0;display:grid}.next-steps.svelte-17nkvtk{gap:var(--smrt-spacing-4);display:grid}.build-step.svelte-17nkvtk{padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-control-radius);background:var(--smrt-surface-sunken)}.block.svelte-17nkvtk{gap:var(--smrt-spacing-3);min-inline-size:0;display:grid}.meta.svelte-17nkvtk,.notice.svelte-17nkvtk,.quiet.svelte-17nkvtk{color:var(--smrt-color-on-surface-variant)}.notice.svelte-17nkvtk:empty{display:none}.summary.svelte-17nkvtk{gap:var(--smrt-spacing-2) var(--smrt-spacing-4);grid-template-columns:max-content minmax(0,1fr);align-items:baseline;display:grid}dt.svelte-17nkvtk{font-weight:var(--smrt-typography-weight-semibold);white-space:nowrap}.chips.svelte-17nkvtk{gap:var(--smrt-spacing-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.actions.svelte-17nkvtk{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.export.svelte-17nkvtk .prompt{font-family:var(--smrt-font-family-mono,ui-monospace, monospace);white-space:pre-wrap;overflow-wrap:anywhere;resize:none;max-block-size:20rem;overflow:auto}code.svelte-17nkvtk{font-family:var(--smrt-font-family-mono,ui-monospace, monospace);overflow-wrap:anywhere}.command.svelte-17nkvtk{align-items:center;gap:var(--smrt-spacing-2) var(--smrt-spacing-3);flex-wrap:wrap;display:flex}.command.svelte-17nkvtk code:where(.svelte-17nkvtk){min-inline-size:0;padding:var(--smrt-spacing-2) var(--smrt-spacing-3);border:var(--smrt-hairline);border-radius:var(--smrt-control-radius);background:var(--smrt-surface-sunken);flex:16rem}.json.svelte-17nkvtk{max-block-size:20rem;padding:var(--smrt-spacing-3);border:var(--smrt-hairline);border-radius:var(--smrt-control-radius);background:var(--smrt-surface-sunken);font-family:var(--smrt-font-family-mono,ui-monospace, monospace);font-size:var(--smrt-typography-body-small-size);white-space:pre-wrap;overflow-wrap:anywhere;overflow:auto}.replace.svelte-17nkvtk{border-block-start:var(--smrt-hairline);padding-block-start:var(--smrt-spacing-4)}@media (width<=30rem){.summary.svelte-17nkvtk{grid-template-columns:minmax(0,1fr)}.actions.svelte-17nkvtk,.command.svelte-17nkvtk{flex-direction:column;align-items:stretch}.actions.svelte-17nkvtk>[data-smrt-component=Button],.command.svelte-17nkvtk>[data-smrt-component=Button]{inline-size:100%}}@media (forced-colors:active){.build-step.svelte-17nkvtk,.command.svelte-17nkvtk code:where(.svelte-17nkvtk),.json.svelte-17nkvtk{border-color:canvastext}}h3.svelte-1tvhds4,h4.svelte-1tvhds4,p.svelte-1tvhds4{margin:0}.card.svelte-1tvhds4{align-content:start;gap:var(--smrt-spacing-2);padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);display:grid}.card.selected.svelte-1tvhds4{border-color:var(--smrt-color-primary)}.head.svelte-1tvhds4{justify-content:space-between;align-items:center;gap:var(--smrt-spacing-2);display:flex}h3.svelte-1tvhds4{font:var(--smrt-typography-title-medium-font);letter-spacing:var(--smrt-typography-title-medium-tracking)}h4.svelte-1tvhds4{color:var(--smrt-color-on-surface-variant);font:var(--smrt-typography-label-medium-font);letter-spacing:var(--smrt-typography-label-medium-tracking);font-weight:var(--smrt-typography-weight-semibold);text-transform:uppercase}.meta.svelte-1tvhds4{color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-body-small-size)}.plain.svelte-1tvhds4{gap:var(--smrt-spacing-1);font-size:var(--smrt-typography-body-medium-size);margin:0;padding:0;list-style:none;display:grid}.kind.svelte-1tvhds4{padding:0 var(--smrt-spacing-2);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-label-small-size);margin-inline-end:var(--smrt-spacing-1)}.reasons.svelte-1tvhds4{margin-block-end:var(--smrt-spacing-2)}.foot.svelte-1tvhds4{gap:var(--smrt-spacing-1);margin-top:var(--smrt-spacing-2);display:grid}code.svelte-1tvhds4{font-family:var(--smrt-font-family-mono,ui-monospace, monospace);font-size:.85em}.where.svelte-1tvhds4{margin-inline-start:.35em}.summary.svelte-1tvhds4{font-size:var(--smrt-typography-body-medium-size)}@media (forced-colors:active){.card.selected.svelte-1tvhds4{border-color:highlight;outline:.125rem solid highlight}}.features.svelte-7kphei{gap:var(--smrt-spacing-3);display:grid}h2.svelte-7kphei,p.svelte-7kphei{margin:0}.meta.svelte-7kphei,.notice.svelte-7kphei,.empty.svelte-7kphei,.count.svelte-7kphei{color:var(--smrt-color-on-surface-variant)}.count.svelte-7kphei{font-size:var(--smrt-typography-body-medium-size);font-weight:400}.notice.svelte-7kphei:empty{display:none}.chips.svelte-7kphei{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.rows.svelte-7kphei{border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);margin:0;padding:0;list-style:none;display:grid;overflow:hidden}.rows.svelte-7kphei li:where(.svelte-7kphei){align-items:center;gap:var(--smrt-spacing-3);padding:var(--smrt-spacing-3) var(--smrt-spacing-4);display:flex}.rows.svelte-7kphei li:where(.svelte-7kphei)+li:where(.svelte-7kphei){border-top:var(--smrt-hairline)}.rows.svelte-7kphei li.selected:where(.svelte-7kphei){background:color-mix(in srgb, currentColor calc(var(--smrt-state-selected) * 100%), transparent)}.includes.svelte-7kphei{color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-body-small-size)}.icon.svelte-7kphei{color:var(--smrt-color-on-surface-variant);display:inline-flex}.text.svelte-7kphei{flex:1;min-width:0;display:grid}.bar.svelte-7kphei{justify-content:space-between;align-items:center;gap:var(--smrt-spacing-3);display:flex}.name.svelte-7kphei{align-items:baseline;gap:var(--smrt-spacing-2);display:flex}.tag.svelte-7kphei{padding:0 var(--smrt-spacing-2);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);color:var(--smrt-color-on-surface-variant);font-size:var(--smrt-typography-label-small-size)}.text.svelte-7kphei a:where(.svelte-7kphei){width:fit-content;color:var(--smrt-color-on-surface);font-weight:500}.text.svelte-7kphei .meta:where(.svelte-7kphei){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@media (forced-colors:active){.rows.svelte-7kphei li.selected:where(.svelte-7kphei){outline-offset:-.125rem;outline:.125rem solid highlight}}.features.svelte-q9yl1j{gap:var(--smrt-spacing-3);display:grid}h2.svelte-q9yl1j,p.svelte-q9yl1j{margin:0}section.svelte-q9yl1j{gap:var(--smrt-spacing-2);display:grid}.meta.svelte-q9yl1j,.count.svelte-q9yl1j{color:var(--smrt-color-on-surface-variant)}.count.svelte-q9yl1j{font-size:var(--smrt-typography-body-medium-size)}.notice.svelte-q9yl1j:empty{display:none}.chips.svelte-q9yl1j{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}.cards.svelte-q9yl1j{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(19rem,1fr));margin:0;padding:0;list-style:none;display:grid}h2.svelte-1d5gge1,p.svelte-1d5gge1{margin:0}.meta.svelte-1d5gge1,.description.svelte-1d5gge1,.notice.svelte-1d5gge1{color:var(--smrt-color-on-surface-variant)}.notice.svelte-1d5gge1:empty{display:none}.cards.svelte-1d5gge1{gap:var(--smrt-spacing-3);grid-template-columns:repeat(auto-fill,minmax(18rem,1fr));margin:0;padding:0;list-style:none;display:grid}.cards.svelte-1d5gge1 li:where(.svelte-1d5gge1){align-content:start;gap:var(--smrt-spacing-2);padding:var(--smrt-spacing-4);border:var(--smrt-hairline);border-radius:var(--smrt-radius-large);display:grid}.cards.svelte-1d5gge1 li.selected:where(.svelte-1d5gge1){border-color:var(--smrt-color-primary)}.sub.svelte-1d5gge1{gap:var(--smrt-spacing-1);display:grid}@media (forced-colors:active){.cards.svelte-1d5gge1 li.selected:where(.svelte-1d5gge1){border-color:highlight;outline:.125rem solid highlight}}.pane.svelte-d580bl{gap:var(--smrt-spacing-4);display:grid}.meta.svelte-d580bl{color:var(--smrt-color-on-surface-variant);margin:0}.specs.svelte-164gdbq{gap:var(--smrt-spacing-3);max-inline-size:48rem;display:grid}h2.svelte-164gdbq,.help.svelte-164gdbq,.count.svelte-164gdbq{margin:0}.help.svelte-164gdbq{color:var(--smrt-color-on-surface-variant)}textarea.svelte-164gdbq{box-sizing:border-box;min-block-size:16rem;inline-size:100%;padding:var(--smrt-spacing-3);border:var(--smrt-control-border);border-radius:var(--smrt-radius-large,.75rem);background:var(--smrt-surface-control);color:var(--smrt-color-on-surface);font:inherit;resize:vertical;line-height:1.5}textarea.svelte-164gdbq:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}textarea.svelte-164gdbq::placeholder{color:var(--smrt-color-on-surface-variant)}.count.svelte-164gdbq{color:var(--smrt-color-on-surface-variant);justify-self:end;font-size:.875rem}.theme.svelte-18m8le4{gap:1.25rem;max-inline-size:72rem;display:grid}.cards.svelte-18m8le4{grid-template-columns:repeat(auto-fill,minmax(min(10rem,100%),1fr));gap:.75rem;display:grid}.choice.svelte-18m8le4{border:var(--smrt-hairline);border-radius:var(--smrt-radius-large,.75rem);background:var(--smrt-surface-panel);min-block-size:8.5rem;color:var(--smrt-color-on-surface);text-align:start;cursor:pointer;transition:border-color var(--smrt-duration-short3,.15s) var(--smrt-easing-standard,ease), background var(--smrt-duration-short3,.15s) var(--smrt-easing-standard,ease), transform var(--smrt-duration-short3,.15s) var(--smrt-easing-standard,ease);align-content:start;gap:.8rem;padding:.85rem;display:grid}.choice.svelte-18m8le4:hover{border-color:var(--smrt-color-primary);background:var(--smrt-surface-raised);transform:translateY(-2px)}.choice.selected.svelte-18m8le4{border:2px solid var(--smrt-color-primary);background:var(--smrt-color-primary-container);color:var(--smrt-color-on-primary-container);padding:calc(.85rem - 1px)}.choice.svelte-18m8le4:focus-visible,.advanced.svelte-18m8le4:focus-visible,.wheel.svelte-18m8le4:focus-within,select.svelte-18m8le4:focus-visible{outline:var(--smrt-focus-ring-width) solid var(--smrt-focus-ring-color);outline-offset:var(--smrt-focus-ring-offset)}.choice-name.svelte-18m8le4{align-items:center;gap:.55rem;font-size:1rem;font-weight:700;line-height:1.2;display:inline-flex}.choice-icon.svelte-18m8le4{block-size:1.5rem;inline-size:1.5rem;color:var(--smrt-color-primary);flex:none;place-items:center;font-size:1.35rem;display:inline-grid}.preview.svelte-18m8le4{border:1px solid color-mix(in srgb, var(--smrt-planner-preview-ink) 20%, transparent);background:var(--smrt-planner-preview-bg);border-radius:.4rem;block-size:4.5rem;inline-size:100%;display:flex;overflow:hidden}.preview-sidebar.svelte-18m8le4{background:var(--smrt-planner-preview-primary);align-content:start;gap:.35rem;inline-size:23%;padding:.5rem .3rem;display:grid}.preview-sidebar.svelte-18m8le4 span:where(.svelte-18m8le4){background:var(--smrt-planner-preview-surface);opacity:.8;border-radius:1rem;block-size:.22rem}.preview-main.svelte-18m8le4{flex:1;align-content:start;gap:.4rem;padding:.6rem;display:grid}.preview-title.svelte-18m8le4{background:var(--smrt-planner-preview-ink);opacity:.7;border-radius:1rem;block-size:.32rem;inline-size:55%}.preview-body.svelte-18m8le4{background:var(--smrt-planner-preview-surface);border-radius:.2rem;gap:.25rem;padding:.35rem;display:grid}.preview-body.svelte-18m8le4 span:where(.svelte-18m8le4){background:var(--smrt-planner-preview-primary);opacity:.7;border-radius:1rem;block-size:.2rem}.preview-body.svelte-18m8le4 span:where(.svelte-18m8le4):last-child{opacity:.35;inline-size:70%}.scheme.svelte-18m8le4{min-block-size:8.5rem}.choice-hint.svelte-18m8le4{color:var(--smrt-color-on-surface-variant);font-size:.85rem}.brand.svelte-18m8le4,.shape.svelte-18m8le4{flex-wrap:wrap;align-items:end;gap:1rem;display:flex}.shape.svelte-18m8le4 .field:where(.svelte-18m8le4){min-inline-size:min(10rem,100%)}.field.svelte-18m8le4{gap:.4rem;display:grid}.pick.svelte-18m8le4{align-items:center;gap:.65rem;display:flex}.wheel.svelte-18m8le4{block-size:3rem;inline-size:3rem;box-shadow:0 0 0 1px var(--smrt-hairline-color);cursor:pointer;background:conic-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red);border-radius:50%;flex:none;place-items:center;display:inline-grid;position:relative}.wheel.svelte-18m8le4:after{content:"";background:var(--smrt-planner-picked-color);block-size:1.7rem;inline-size:1.7rem;box-shadow:var(--smrt-elevation-1);pointer-events:none;border:2px solid #fff;border-radius:50%}.wheel.svelte-18m8le4 input:where(.svelte-18m8le4){opacity:0;cursor:pointer;block-size:100%;inline-size:100%;position:absolute;inset:0}.font-field.svelte-18m8le4{min-inline-size:min(14rem,100%)}select.svelte-18m8le4{border:var(--smrt-control-border);border-radius:var(--smrt-radius-medium,.5rem);background:var(--smrt-surface-control);min-block-size:3rem;color:var(--smrt-color-on-surface);font:inherit;cursor:pointer;padding:.6rem 2rem .6rem .8rem}.error.svelte-18m8le4{color:var(--smrt-color-error);margin:0}.advanced.svelte-18m8le4{border:var(--smrt-hairline);border-radius:var(--smrt-radius-large,.75rem);background:var(--smrt-surface-panel);color:var(--smrt-color-on-surface);align-items:center;gap:.8rem;padding:1rem;text-decoration:none;display:flex}.advanced.svelte-18m8le4:hover{border-color:var(--smrt-color-primary)}.advanced-icon.svelte-18m8le4{background:var(--smrt-color-primary-container);block-size:2.8rem;inline-size:2.8rem;color:var(--smrt-color-on-primary-container);border-radius:.65rem;flex:none;place-items:center;font:700 1rem ui-monospace,monospace;display:grid}.advanced.svelte-18m8le4 strong:where(.svelte-18m8le4),.advanced.svelte-18m8le4 small:where(.svelte-18m8le4){display:block}.advanced.svelte-18m8le4 small:where(.svelte-18m8le4){color:var(--smrt-color-on-surface-variant);margin-top:.15rem}.arrow.svelte-18m8le4{margin-inline-start:auto;font-size:1.3rem}@media (forced-colors:active){.choice.selected.svelte-18m8le4{outline-offset:.125rem;border-color:highlight;outline:.125rem solid highlight}.preview.svelte-18m8le4,.wheel.svelte-18m8le4{forced-color-adjust:none}}.planner.svelte-zuxcuo .tab-panel{padding-top:var(--smrt-spacing-4)}[data-smrt-view-transition] .planner.svelte-zuxcuo .tabs-nav,[data-smrt-view-transition] .planner.svelte-zuxcuo .tabs-links{view-transition-name:planner-tabs}.planner.svelte-zuxcuo .smrt-tabs__nav{scroll-snap-type:x proximity;overscroll-behavior-x:contain}.planner.svelte-zuxcuo .smrt-tabs__tab-button{scroll-snap-align:start}@property --smrt-planner-controls-tabs-fade{syntax:"<length>";inherits:false;initial-value:0}@supports (animation-timeline:scroll()){.planner.svelte-zuxcuo .smrt-tabs__nav{-webkit-mask-image:linear-gradient(to right, black calc(100% - var(--smrt-planner-controls-tabs-fade)), transparent);mask-image:linear-gradient(to right, black calc(100% - var(--smrt-planner-controls-tabs-fade)), transparent);animation:linear both svelte-zuxcuo-planner-tabs-fade;animation-timeline:scroll(self inline)}@keyframes svelte-zuxcuo-planner-tabs-fade{0%{--smrt-planner-controls-tabs-fade:3rem}to{--smrt-planner-controls-tabs-fade:0rem}}}.pane.svelte-zuxcuo{gap:var(--smrt-spacing-3);display:grid}.pane[hidden].svelte-zuxcuo{display:none}.meta.svelte-zuxcuo{color:var(--smrt-color-on-surface-variant);margin:0}main.svelte-1uha8ag{width:min(100%,72rem);padding:var(--smrt-spacing-6);margin-inline:auto}.first-run.svelte-1uha8ag{gap:var(--smrt-spacing-4);display:grid}.first-run.svelte-1uha8ag h1:where(.svelte-1uha8ag),.first-run.svelte-1uha8ag p:where(.svelte-1uha8ag){margin:0}.actions.svelte-1uha8ag{gap:var(--smrt-spacing-2);flex-wrap:wrap;display:flex}}
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./BPtTI21R.js","./DG3qFFTE.js","./COiEfhsA.js","./xihTtKlq.js","./DtyQVtuI.js","./YUSKx8_q.js","./DK8Blf1Y.js","../assets/currency-metadata.ksbBA8-C.css","../assets/app.BHwMQ9Zv.css","./BF1b-PyI.js","./Bv5jGtB8.js","../assets/feedback.qFktqYFY.css","./LqlI_3J_.js","./BaNbYf_w.js","./By9nPosf.js","../assets/SegmentedControl.DMqHG5fn.css","./DIE02RSm.js","../assets/webmcp-ui-context.hO24Ni5w.css","./Dij7Mzy3.js","../assets/data.CVlX_W0i.css","./CUyVrfsu.js","./Bs5WxZDd.js","../assets/forms.BRdbPdvs.css","./BYcBM-fh.js","../assets/AppShell.Y0ysizZK.css","./CHp1-Djt.js","../assets/workspace.C40zM0Mb.css","./cGI232sj.js","./jGR6M6GD.js","../assets/state.C0UZEhxS.css","../assets/labels.Dxa6EyRI.css","./pwK8zqRY.js","./xfjCb9hA.js","./ca0lfv12.js","../assets/planner.DOQVfcOi.css","./D_U_DYjx.js"])))=>i.map(i=>d[i]);
2
- import{$ as e,Et as t,Mt as n,bt as r,vt as i}from"./DG3qFFTE.js";import{t as a}from"./BaNbYf_w.js";import"./xihTtKlq.js";import{I as o,L as s,O as c,Q as l,W as u,Z as d,_ as f,_t as p,bt as m,et as h,h as g,ht as _,p as v,x as y,yt as b}from"./DtyQVtuI.js";import{v as x}from"./LqlI_3J_.js";import"./By9nPosf.js";import"./DIE02RSm.js";import{u as S}from"./Dij7Mzy3.js";import{A as ee,C,E as te,F as ne,G as re,I as ie,M as ae,N as oe,O as se,P as ce,T as le,U as ue,V as de,W as w,b as fe,h as pe,j as me,k as he,n as ge,q as _e,r as ve,w as ye}from"./cGI232sj.js";import{B as be,D as xe,G as Se,H as Ce,J as we,K as Te,M as Ee,V as De,X as Oe,Y as ke,Z as Ae,a as je,b as T,c as Me,d as Ne,l as Pe,n as Fe,r as Ie,s as Le,t as E,v as Re,x as D,z as ze}from"./jGR6M6GD.js";function Be(e){let t=e?.surfaces?.find(e=>e.kind===`widget`&&e.sectionDefault===!0);return t?{id:t.type,type:t.type,span:4,options:{}}:void 0}function Ve(e){let t=e.lastIndexOf(`#`);if(t<=0||t===e.length-1)return null;let n=e.slice(0,t),r=e.slice(t+1);return n.startsWith(`.`)||n.startsWith(`/`)||/\s/.test(n)||!/^[A-Za-z_$][\w$]*$/.test(r)?null:{specifier:n,exportName:r}}function O(e,t){let n=Ve(e);return n?Promise.resolve(t(n.specifier,n.exportName)).then(t=>{if(t==null)throw Error(`export "${e}" was not found`);return t}):Promise.reject(Error(`invalid export ref "${e}"`))}function k(e){let t;return()=>(t??=e(),t)}function He(e){return typeof e==`object`&&!!e&&`default`in e&&!!e.default}function Ue(e,t,n){let r=k(()=>O(e.export,t)),i=e.optionsEditor?k(()=>O(e.optionsEditor,t)):void 0,a=e.data?.load?k(()=>O(e.data?.load,t)):void 0,o={type:e.type,title:e.label,options:e.options??[],loadComponent:async()=>{let e=await r();return He(e)?e.default:e}};return e.description!==void 0&&(o.description=e.description),e.icon!==void 0&&(o.icon=e.icon),e.version!==void 0&&(o.version=e.version),e.allowedIn&&(o.allowedIn=e.allowedIn),e.defaultSpan!==void 0&&(o.defaultSpan=e.defaultSpan),e.minSpan!==void 0&&(o.minSpan=e.minSpan),e.maxSpan!==void 0&&(o.maxSpan=e.maxSpan),n&&(o.migrate=n),i&&(o.loadOptionsEditor=async()=>{let e=await i();return He(e)?e.default:e}),a&&(o.load=async(t,n)=>{let r=await a();if(typeof r!=`function`)throw Error(`loader "${e.data?.load}" is not a function`);return r(t,n)}),o}async function We(e,t,n,r={}){let i=[],a=[],o=[];for(let s of t)if(!r.enabled||r.enabled(s.id))for(let t of s.surfaces??[]){if(t.kind!==`widget`)continue;let c=(e,n)=>a.push({recipeId:s.id,type:t.type,reason:e,message:n});if(e.has(t.type)&&!r.replace){c(`duplicate_type`,`"${t.type}" is already registered`);continue}let l;if(t.migrate)try{let e=await O(t.migrate,n);if(typeof e!=`function`)throw Error(`not a function`);l=e}catch(e){c(`unresolved`,`migrate "${t.migrate}": ${e instanceof Error?e.message:String(e)}`);continue}try{o.push(e.register(Ue(t,n,l),{replace:r.replace})),i.push(t.type)}catch(e){c(`invalid`,e instanceof Error?e.message:String(e))}}return{registered:i,skipped:a,dispose:()=>{for(let e of o.splice(0))e()}}}var Ge=[`identifier`,`status`,`date`,`party`,`total`,`money`];function Ke(e){for(let t of[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`])if(e.includes(t))return t}function qe(e,t,n={}){let r=new Set(n.exclude??[]),i=n.max??4,a=Object.keys(t).filter(t=>!r.has(t)&&t in e.fields),o=e=>a.find(n=>t[n]?.includes(e)),s=[],c=e=>{e&&!s.includes(e)&&s.push(e)};c(o(`identifier`)??o(`title`));for(let e of Ge)e!==`identifier`&&(e===`money`&&s.some(e=>t[e]?.includes(`money`))||c(e===`date`?a.find(e=>t[e]?.includes(`date`)&&e!==`createdAt`&&e!==`updatedAt`)??o(`date`):o(e)));return s.slice(0,i).map(n=>({key:n,label:A(n,e),...Ke(t[n]??[])?{role:Ke(t[n]??[])}:{}}))}function Je(e,t,n={}){let r=new Set(n.exclude??[]),i=Object.keys(t).filter(t=>!r.has(t)&&t in e.fields),a=i.filter(t=>e.fields[t]?.type===`text`),o=a.find(e=>/^(?:description|title|name|label)$/.test(e))??a.find(e=>t[e]?.includes(`title`))??a.find(e=>!t[e]?.includes(`identifier`)),s=i.find(e=>t[e]?.includes(`quantity`)),c=i.filter(e=>t[e]?.includes(`money`)),l=c.find(e=>/unit|price|rate/i.test(e)),u=c.find(e=>/^(?:amount|lineTotal|total|lineAmount)$/.test(e))??[...c].reverse().find(e=>e!==l),d=[];return o&&d.push({key:o,label:A(o,e)}),s&&d.push({key:s,label:A(s,e),role:`quantity`}),l&&d.push({key:l,label:A(l,e),role:`money`,summarize:!1}),u&&u!==l&&d.push({key:u,label:A(u,e),role:`money`}),d}function A(e,t){let n=t.fields[e];return n&&(n.type===`foreignKey`||n.type===`crossPackageRef`)&&/.[a-z]Id$/.test(e)?ce(e.slice(0,-2)):ce(e)}function Ye(e){if(e.dataWidgets&&e.page)return[e.page];let t=[{id:`shortcuts`,type:`shortcuts`,span:4,options:{}}];if(e.dataWidgets&&e.lead){let n=e.lead,r=e.override,i=r&&typeof r==`object`&&!Array.isArray(r)?r:void 0,a=i?.changed;a&&typeof a==`object`&&!Array.isArray(a)&&Object.hasOwn(a,`count`)&&!(Array.isArray(i?.removed)&&i.removed.includes(`count`))&&t.push({id:`count`,type:`metric`,span:1,options:{title:n.plural,model:n.id,measure:`count`}}),t.push({id:`latest`,type:`records`,span:4,options:{title:`${n.name} records`,model:n.id,limit:5,summaries:!1}})}return t}var Xe=[`text`,`integer`,`decimal`,`boolean`,`datetime`,`json`,`foreignKey`,`crossPackageRef`];function Ze(e){return Xe.includes(e)?e:`text`}var Qe=/(Date|^date|period(Start|End))$/;function $e(e,t){return t.type===`datetime`&&!t.system&&Qe.test(t.name)&&!e.fields.some(e=>e.name===`allDay`)?`date`:void 0}function et(e){return fe(e)[0]}function tt(e,t){let n=t.ui?{...t.ui}:void 0,r=c(t)?`money`:$e(e,t);return{type:Ze(t.type),required:t.required,nullable:!t.required,...t.default===void 0?{}:{default:t.default},...t.description?{description:t.description}:{},...n?{ui:n}:{},...t.enum?.length?{enum:[...t.enum]}:{},...r?{format:r}:{},...et(e)===t.name?{display:!0}:{}}}function nt(e,t){return e.includes(`:`)?e:`${t.slice(0,t.lastIndexOf(`:`))}:${e}`}function rt(e,t){if(!t.related)return!1;let n=nt(t.related,e.id);return ke(p,n,h).some(t=>t.id===e.id)}function it(e){return e.fields.flatMap(t=>{if(t.type!==`foreignKey`&&t.type!==`crossPackageRef`||!t.related)return[];let n=m(nt(t.related,e.id));return n?[{field:t.name,kind:t.type===`crossPackageRef`?`crossPackageRef`:`foreignKey`,relatedCollection:n.model.collection,...rt(e,t)?{role:`items`}:{}}]:[]})}function j(e){let t=it(e);return{name:e.collection,objectRef:e.id,className:e.name,idField:`id`,fields:Object.fromEntries(e.fields.map(t=>[t.name,tt(e,t)])),...t.length?{relationships:t}:{}}}function at(e,t){return{objectRef:e.id,fields:Object.fromEntries(t.map((e,t)=>[e.name,{visibility:`basic`,label:e.label,help:e.help??null,order:t,required:e.required}]))}}function ot(e,t){let n=new Set(t);for(let t of e)for(let e of t.models)n.add(e);return n}function st(e){return v(e.replace(/_?id$/i,``)||e)}function M(e,t,n){let r=Oe(e,t),i=Ae(e,t).filter(e=>e.model.exposed&&n.has(e.model.id)),a=new Set(ke(e,t,h).map(e=>e.id)),o=new Map;for(let e of i)o.set(e.model.id,(o.get(e.model.id)??0)+1);let s=i.map(e=>{let t=a.has(e.model.id)?`items`:`children`,n=j(e.model),i=ie(n),s=[e.fk];return{model:e.model.id,field:e.fk,label:(o.get(e.model.id)??0)>1?`${Se(e.model.name,r)} (${st(e.fk).toLowerCase()})`:Se(e.model.name,r),kind:t,columns:t===`items`?Je(n,i,{exclude:s}):qe(n,i,{exclude:s,max:5}),...t===`items`&&`sortOrder`in n.fields?{sort:`sortOrder`}:{}}});for(let n of Te(e,t))s.push({model:n.model.id,field:n.fk,label:st(n.fk),kind:`reference`});return s}var ct=Symbol(`smrt-cookbook`);function lt(){return t(ct)}function ut(e,t){let{sections:n}=t;if(!n)throw Error(`the cookbook widget context is missing`);let r=typeof e.section==`string`?e.section:``,i=r?n.find(e=>e.id===`section:${r}`||e.id===`custom:${r}`)?.id:t.overviewId;if(!i)throw Error(`unknown section ${r}`);return oe(n,i)}function dt(e){return e?async(t,n)=>{let r=ut(t,n);try{let t=await e(n,r.items.map(e=>({...e})));if(!Array.isArray(t))return r;let i=new Set,a=[];for(let e of t){if(!e||typeof e.href!=`string`)continue;let t=typeof e.id==`string`&&e.id?e.id:e.href;i.has(t)&&(t=`${t}#${a.length}`),i.add(t),a.push({...e,id:t})}return{items:a}}catch(e){if(n.signal?.aborted)throw e;return r}}:ut}var ft=new Set([`foreignKey`,`crossPackageRef`]);function N(e,t){return`/m/${e}/${t}/`}function pt(e,t,n,r=`view`){let i=`${N(e,t)}${encodeURIComponent(n)}/`;return r===`edit`?`${i}edit/`:i}function mt(e,t,n,r){return`${N(e,t)}?${encodeURIComponent(n)}=${encodeURIComponent(r)}`}function ht(e,t){let n=new URLSearchParams(e);for(let e of t.fields){if(!ft.has(e.type))continue;let t=n.get(e.name);if(t)return{field:e.name,equals:t}}}function gt(e){return e?.equals===void 0?``:`${encodeURIComponent(e.field)}=${encodeURIComponent(e.equals)}`}var P=e=>typeof e==`number`&&Number.isSafeInteger(e)?e:null,_t=(e,t)=>e.fields.some(e=>e.name===t);function vt(e,t){let n=ie(j(e)),r=C(t,n);return Object.values(r).some(e=>P(e)!==null)?r:void 0}function yt(e,t){return!!e.fields.find(e=>e.name===`status`)?.enum?.includes(`draft`)&&typeof t.status==`string`&&t.status!==``&&t.status!==`draft`}function bt(e,t,n){if(!yt(e,t)||![`subtotal`,`taxAmount`,`totalAmount`,`discountTotal`].every(t=>_t(e,t)))return;let r=P(t.subtotal),i=P(t.taxAmount),a=P(t.totalAmount),o=P(t.discountTotal)??0;if(r===null||i===null||a===null)return;let s=d(t,`exclusive`);return{subtotal:r,discount:o,tax:i,total:a,lineAmountType:s,roundingScope:l(t,`line`),showNetSubtotal:s===`inclusive`,taxes:_(n,s).flatMap(e=>e.taxComponentId?[{taxComponentId:e.taxComponentId,name:e.name,percent:e.percent,taxable:e.taxable,tax:e.tax}]:[])}}var F=de();function I(e){let{source:t,href:n}=e;if(!t||!n)throw Error(`the planner widget context is missing`);return{source:t,href:n}}function L(e){let t=typeof e==`string`?m(e):void 0;if(!t)throw Error(`unknown model ${String(e)}`);return{model:t.model,packageId:t.pkg.id,path:N(t.pkg.id,t.model.name)}}var R=new Set([`foreignKey`,`crossPackageRef`]);function z(e,t,n){let r=e.filter;if(typeof r!=`string`||r===``)return;if(r!==`parent`)throw Error(`unknown filter ${r}`);let{record:i}=t;if(!i?.id)throw Error(`the parent filter needs a record`);let a=typeof e.parentField==`string`&&e.parentField?e.parentField:e.field,o=typeof a==`string`?a:``,s=n.fields.find(e=>e.name===o);if(!s||!R.has(s.type))throw Error(`${n.name} has no reference field ${o}`);return{field:o,id:i.id}}async function B(e,t,n){return n?e.listWhere(t,n.field,n.id):e.list(t)}function V(e,t,n){return e(n?mt(t.packageId,t.model.name,n.field,n.id):t.path)}var H=e=>typeof e==`number`&&Number.isFinite(e);async function xt(e,t){let{source:n,href:r}=I(t),i=L(e.model),{model:a}=i,o=z(e,t,a),s=await B(n,a,o),l=V(r,i,o),u=typeof e.measure==`string`?e.measure:``;if(u===`count`||u===``)return{value:s.length,format:`integer`,href:l};let d=a.fields.find(t=>t.name===e.field);if(!d||d.type!==`integer`&&d.type!==`decimal`)throw Error(`${u} needs a numeric field of ${a.name}`);let f=s.map(e=>e[d.name]).filter(H),p=0;if(f.length){if(u===`sum`||u===`avg`)p=f.reduce((e,t)=>e+t,0),u===`avg`&&(p/=f.length);else if(u===`min`)p=Math.min(...f);else if(u===`max`)p=Math.max(...f);else throw Error(`unknown measure ${u}`)}let m=c(d);return{value:m?Math.round(p):p,format:m?`money`:d.type===`integer`?`integer`:`decimal`,...m?{currency:`USD`}:{},href:l}}function St(e,t){return H(e)&&H(t)?e-t:String(e??``).localeCompare(String(t??``))}var Ct=new Set([`createdAt`,`updatedAt`]),wt=[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`];function Tt(e=[]){return wt.find(t=>e.includes(t))}function Et(e,t,n,r){let i=j(e),a=r?[r]:[],o=ae(n),s=o.length?[]:pe(E.apply(e).fields.filter(t=>!a.includes(t.name)&&!xe(e,t))).filter(e=>!e.derive),c=o.length?o:s.map(e=>e.name),l=[...Je(i,t,{exclude:a}),...qe(i,t,{exclude:a,max:c.length+8})];return c.map(n=>{let r=e.fields.find(e=>e.name===n);if(!r)throw Error(`${e.name} has no field ${n}`);let i=l.find(e=>e.key===n),a=s.find(e=>e.name===n)?.label;if(i)return a?{...i,label:a}:i;let o=Tt(t[n]);return{key:n,label:a??(R.has(r.type)?v(n.replace(/Id$/,``)):v(n)),...o?{role:o}:{}}})}var Dt=new Set([`money`,`quantity`]);function Ot(e,t){let n={};for(let r of e)(r.summarize??Dt.has(r.role))&&(n[r.key]=t.reduce((e,t)=>{let n=t[r.key];return H(n)?e+n:e},0));return n}function kt(e,t){let n=ne(j(e)),r=new Set(t.map(e=>n?e[n]:void 0).filter(e=>typeof e==`string`&&e!==``));return r.size===1?[...r][0]??`USD`:`USD`}async function At(e,t){let{source:n,href:r}=I(t),i=L(e.model),{model:a}=i,o=z(e,t,a),s=await B(n,a,o);if(typeof e.sort==`string`&&e.sort){if(!a.fields.find(t=>t.name===e.sort)&&!Ct.has(e.sort))throw Error(`${a.name} has no field ${e.sort}`);let t=s.some(t=>t[e.sort]!==void 0)?e.sort:W(a)?.name;if(t){let n=e.direction===`asc`?1:-1;s=[...s].sort((e,r)=>n*St(e[t],r[t]))}}let c=Et(a,ie(j(a)),e.columns,o?.field),l=H(e.limit)?e.limit:5,u=s.slice(0,l),d=a.fields.filter(e=>R.has(e.type)&&c.some(t=>t.key===e.name)),f=await ve(n,d,u),p=e=>Object.fromEntries(c.map(t=>{let n=e[t.key],r=d.find(e=>e.name===t.key);return r?.related&&typeof n==`string`&&n?[t.key,f.get(g(r.related,n))??``]:[t.key,n??null]})),m=Ot(c,s),h=!we(a);return{rows:await Promise.all(u.map(async e=>({id:String(e.id),title:await ge(n,a,e,0,o?.field),...h?{href:r(pt(i.packageId,a.name,String(e.id)))}:{},cells:p(e)}))),...e.summaries===!1?{}:{total:s.length},...h?{href:V(r,i,o)}:{},columns:c,currency:kt(a,s),...Object.keys(m).length?{summaries:m}:{}}}var jt={"7d":7,"30d":30,"90d":90,"12m":365,all:null},U=864e5;function Mt(e){return e===`7d`||e===`30d`?`day`:e===`90d`?`week`:`month`}function Nt(e,t){let n=new Date(e);if(t===`month`)return Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),1);let r=Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate());return t===`week`?r-(n.getUTCDay()+6)%7*U:r}function Pt(e,t){if(t===`month`){let t=new Date(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth()+1,1)}return e+(t===`week`?7:1)*U}function Ft(e,t){let n=new Date(e).toISOString();return t===`month`?n.slice(0,7):n.slice(0,10)}var It=e=>e.type===`datetime`&&!e.system;function W(e){let t=e.fields.filter(It);return t.find(e=>/^(issue|order|start|created)/i.test(e.name))??t[0]}function Lt(e){if(typeof e!=`string`&&typeof e!=`number`)return;let t=new Date(e).getTime();return Number.isFinite(t)?t:void 0}async function Rt(e,t){let{source:n,href:r}=I(t),i=L(e.model),{model:a}=i,o=z(e,t,a),s=typeof e.groupBy==`string`?e.groupBy:``,l=s?a.fields.find(e=>e.name===s):W(a);if(!l)throw Error(s?`${a.name} has no field ${s}`:`${a.name} has no date field to chart; choose a group-by field`);let u=typeof e.measure==`string`?e.measure:``,d;if(u&&u!==`count`){if(u!==`sum`&&u!==`avg`)throw Error(`unknown measure ${u}`);if(d=a.fields.find(t=>t.name===e.field),!d||d.type!==`integer`&&d.type!==`decimal`)throw Error(`${u} needs a numeric field of ${a.name}`)}let f=typeof e.period==`string`?e.period:`30d`;if(!Object.hasOwn(jt,f))throw Error(`unknown period ${f}`);let p=jt[f],m=It(l),h=m?l:W(a),g=p!==null&&h?y-p*U:-1/0,_=await B(n,a,o);h&&g!==-1/0&&(_=_.filter(e=>{let t=Lt(e[h.name]);return t!==void 0&&t>=g&&t<=y}));let v=new Map,b=(e,t,n)=>{let r=v.get(e)??{key:t,sum:0,n:0};if(d){let e=n[d.name];if(!H(e))return;r.sum+=e}r.n+=1,v.set(e,r)},x=Mt(f);if(m){let e=g===-1/0?Math.min(..._.map(e=>Lt(e[l.name])??y),y):g;for(let t=Nt(e,x);t<=y;t=Pt(t,x))v.set(Ft(t,x),{key:t,sum:0,n:0});for(let e of _){let t=Lt(e[l.name]);if(t===void 0)continue;let n=Nt(t,x);b(Ft(n,x),n,e)}}else for(let e of _){let t=e[l.name],n=t==null||t===``?`(none)`:String(t);b(n,n,e)}let S=d?c(d):!1,ee=e=>{if(!d)return e.n;let t=u===`avg`&&e.n?e.sum/e.n:e.sum;return S?Math.round(t):t},C=[...v.entries()].map(([e,t])=>({label:e,value:ee(t),key:t.key}));return C=m?C.sort((e,t)=>Number(e.key)-Number(t.key)):C.sort((e,t)=>t.value-e.value||e.label.localeCompare(t.label)),{points:C.map(({label:e,value:t})=>({label:e,value:t})),format:d?S?`money`:d.type===`integer`?`integer`:`decimal`:`integer`,...S?{currency:`USD`}:{},href:V(r,i,o)}}te(F,{metric:xt,records:At,chart:Rt,shortcuts:async(e,t)=>t,shortcuts:dt()});function zt(e){let{relations:t,viewAllHref:n}=e;if(!t)throw Error(`the record page context is missing`);return{relations:t,records:At,viewAllHref:n}}async function Bt(e,t){let{source:n}=I(e),r=e.record;if(!r?.id)throw Error(`line items need a record`);let{model:i}=L(r.model),a=await n.get(i,r.id);if(!a)return{};let o=t.find(e=>e.kind===`items`),s=o?m(o.model)?.model:void 0,c=bt(i,a,o&&s?await n.listWhere(s,o.field,r.id):[]),l=c?void 0:vt(i,a),u=ne(j(i)),d=u?a[u]:void 0;return{...c?{storedTotals:c}:{},...l?{totals:l}:{},...typeof d==`string`&&d?{currency:d}:{}}}F.register(le((e,t)=>he(zt(t))(e,t))),F.register(ye(async(e,t)=>{let n=zt(t),{totals:r,storedTotals:i,currency:a}=await Bt(t,n.relations);return se({...n,totals:()=>r,storedTotals:()=>i,currency:()=>a})(e,t)}));var Vt=[`shortcuts`,`metric`,`records`,`chart`,`note`],Ht={"@happyvertical/smrt-reports/svelte":async()=>({SavedReportsWidget:(await a(async()=>{let{default:e}=await import(`./BPtTI21R.js`);return{default:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]),import.meta.url)).default})},Ut=async(e,t)=>{let n=Ht[e];if(n)return(await n())[t]},Wt=T.filter(e=>e.surfaces?.some(e=>e.kind===`widget`)),Gt=Wt.flatMap(e=>(e.surfaces??[]).flatMap(e=>e.kind===`widget`?[e.type]:[]));We(F,Wt,Ut);var Kt=new Map(ze(T).map(e=>[`section:${e.id}`,e])),qt=p.packages.flatMap(e=>e.models.map(e=>e.id)),Jt=[...Vt,...Gt];function Yt(e){let t=Kt.get(e);for(let e of t?.recipes??[]){let t=Re(e)[0];if(t)return{id:t.model.id,name:v(t.model.name)}}}function Xt(e,t){let n=Be(Kt.get(e)?.recipes[0]),r=Yt(e);return Ye({lead:r?{...r,plural:f(r.name)}:void 0,dataWidgets:!0,page:n&&Gt.includes(n.type)?n:void 0,override:t})}var Zt=new Map;function Qt(e,t){if(!_e.test(e))return;let n=Zt.get(e);return n||(n=w({id:e,allowed:Jt,models:qt,defaults:Xt(e)}),Zt.set(e,n)),t===void 0?n:w({...n,defaults:Xt(e,t)})}function $t(e,t){return`detail:${e}.${t}`}var en=new Map(p.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(t=>[me(t.id),{packageId:e.id,model:t}])));function tn(e){let[,t,n]=/^detail:([A-Za-z0-9_-]+)\.([A-Za-z0-9_]+)$/.exec(e)??[],r=t&&n?b(t,n):void 0;return t&&r?.exposed?{packageId:t,model:r}:en.get(e)}var nn=new Set(p.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(e=>e.id))),rn=new Map;function an(e){let t=rn.get(e);if(t)return t;let n=tn(e);if(!n)return;let r=M(p,n.model.id,nn),i=ee(j(n.model),r,{id:e,maxMetrics:2*r.length});return t=w({...i,maxWidgets:Math.max(i.maxWidgets??24,i.defaults.length+24)}),rn.set(e,t),t}function on(e,t){let n=an(e),r=tn(e);if(!n||!r)return;let i=M(p,r.model.id,t),a=0,o=n.defaults.filter(e=>e.type===`line-items`?i.some(e=>e.kind===`items`):e.type===`related`?i.some(e=>e.kind===`children`):t.has(String(e.options.model))?e.type!==`metric`||(a+=1,a<=4):!1);return w({...n,defaults:o})}function sn(e,t){return e.startsWith(`detail:`)?an(e):Qt(e,t)}function cn(e,t){return Kt.has(e)||e===`section:${Ee.id}`?!0:e.startsWith(`detail:`)?tn(e)!==void 0:e.startsWith(`custom:`)&&_e.test(e)&&(t?.customSections??[]).some(t=>t.id===e)}var ln=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function un(e,t){let n=t.widgetId?`widget ${t.widgetId}${t.type?` (${t.type})`:``}`:`an entry`,r=t.options?.length?`: ${t.options.map(e=>`${e.key} ${e.code}`).join(`, `)}`:``;return`Overview ${e}: ${n} was dropped (${t.code}${r}).`}function dn(e,t){let n={...e};return e.added&&(n.added=e.added.filter(e=>!t.has(e.id))),e.changed&&(n.changed=Object.fromEntries(Object.entries(e.changed).filter(([e])=>!t.has(e)))),n}function fn(e,t){let n=sn(e,t);if(!n)return{override:null,issues:[{widgetId:null,type:null,code:`malformed`,message:`not an overview id`}]};let r=ue(n,t,F);if(r.ok){let e=re(t).override?.changed?.count;return e&&n.defaults.some(e=>e.id===`count`)?{override:{...r.override??{version:1},changed:{...r.override?.changed,count:e}},issues:[]}:{override:r.override,issues:[]}}let i=re(t),a=new Set(r.issues.flatMap(e=>e.widgetId?[e.widgetId]:[]));if(!i.override)return{override:null,issues:r.issues};let o=ue(n,dn(i.override,a),F);return o.ok?{override:o.override,issues:r.issues}:{override:null,issues:[...r.issues,...o.issues]}}function pn(e,t){if(!ln(e))return null;let n=[],r=[];for(let i of Object.keys(e).sort()){if(!cn(i,t)){r.push(`Overview ${i} is not a page in this app and was dropped.`);continue}let{override:a,issues:o}=fn(i,e[i]);for(let e of o)r.push(un(i,e));a&&n.push([i,a])}return{overviews:Object.fromEntries(n),dropped:r}}var mn=S,hn=`glass`,gn=`system`,_n=[`light`,`dark`,`system`],vn=[`none`,`sm`,`md`,`lg`,`xl`,`full`],yn=[`comfortable`,`touch`],bn=[`auto`,`standard`,`more`],G={"system-ui":`system-ui, -apple-system, "Segoe UI", sans-serif`,Inter:`Inter, system-ui, sans-serif`,Georgia:`Georgia, "Times New Roman", serif`,"ui-rounded":`ui-rounded, "SF Pro Rounded", system-ui, sans-serif`,"ui-monospace":`ui-monospace, "SF Mono", Menlo, monospace`},xn=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;function Sn(e){if(typeof e!=`string`)return null;let t=xn.exec(e.trim());if(!t)return null;let n=t[1].toLowerCase();return n.length===3&&(n=[...n].map(e=>e+e).join(``)),`#${n}`}var Cn=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function wn(e){if(e===void 0)return{ok:!0,theme:void 0};if(!Cn(e))return{ok:!1,error:`The cookbook "theme" must be an object.`};let t={};if(e.preset!==void 0){if(typeof e.preset!=`string`||!mn.includes(e.preset))return{ok:!1,error:`The theme preset must be one of ${mn.join(`, `)}.`};t.preset=e.preset}if(e.colorScheme!==void 0){if(!_n.includes(e.colorScheme))return{ok:!1,error:`The theme colorScheme must be light, dark or system.`};t.colorScheme=e.colorScheme}for(let[n,r]of[[`borderRadius`,vn],[`density`,yn],[`contrast`,bn]]){let i=e[n];if(i!==void 0){if(!r.includes(i))return{ok:!1,error:`The theme ${n} must be one of ${r.join(`, `)}.`};t[n]=i}}if(e.fontFamily!==void 0){if(typeof e.fontFamily!=`string`||!Object.hasOwn(G,e.fontFamily))return{ok:!1,error:`The theme font must be one of ${Object.keys(G).join(`, `)}.`};t.fontFamily=e.fontFamily}if(e.custom!==void 0){if(!Cn(e.custom))return{ok:!1,error:`The theme "custom" must be an object.`};let n=Sn(e.custom.primary);if(!n)return{ok:!1,error:`The theme custom primary must be a hex colour like #c2410c.`};let r={primary:n};if(e.custom.fontFamily!==void 0){let t=e.custom.fontFamily;if(typeof t!=`string`||!Object.hasOwn(G,t))return{ok:!1,error:`The theme font must be one of ${Object.keys(G).join(`, `)}.`};r.fontFamily=t}t.custom=r}if(e.customCss!==void 0){if(typeof e.customCss!=`string`)return{ok:!1,error:`The theme customCss must be a string.`};if(Array.from(e.customCss).length>65536)return{ok:!1,error:`The theme customCss is too long (65,536 characters maximum).`};e.customCss&&(t.customCss=e.customCss)}return{ok:!0,theme:Object.keys(t).length?t:void 0}}function Tn(e){if(!e)return;let t={};return e.preset&&(t.preset=e.preset),e.colorScheme&&(t.colorScheme=e.colorScheme),e.borderRadius&&(t.borderRadius=e.borderRadius),e.density&&(t.density=e.density),e.contrast&&(t.contrast=e.contrast),e.fontFamily&&(t.fontFamily=e.fontFamily),e.custom&&(t.custom={...e.custom}),e.customCss&&(t.customCss=e.customCss),Object.keys(t).length?t:void 0}function En(e){let t=e?.colorScheme??`system`,n=e?.custom?`brand colour ${e.custom.primary}`:e?.preset??`glass`;return t===`system`?n:`${n}, ${t}`}var K=`section:`;function Dn(e,t=be(T)){let n=Object.keys(t).sort((e,t)=>t.length-e.length);if(!n.length)return e;let r=e=>{if(!e.startsWith(K))return e;let r=e.slice(8);for(let e of n){if(r===e)return`${K}${t[e]}`;if(r.startsWith(`${e}:`))return`${K}${t[e]}${r.slice(e.length)}`}return e},i=e=>e.startsWith(K)&&n.includes(e.slice(8)),a=e=>[...new Set(e)],o={...e};if(e.sectionOrder&&(o.sectionOrder=a(e.sectionOrder.map(r))),e.hidden&&(o.hidden=a(e.hidden.filter(e=>!i(e)).map(r))),e.itemOrder){let t={};for(let[n,i]of Object.entries(e.itemOrder)){let e=r(n);t[e]=a([...t[e]??[],...i.map(r)])}o.itemOrder=t}return e.moved&&(o.moved=Object.fromEntries(Object.entries(e.moved).map(([e,t])=>[r(e),r(t)]))),o}function On(e,t=T){let n=new Map;for(let e of t){let t=Ce(e).id;for(let r of Re(e))r.key&&n.set(`${K}${t}:${r.packageId}:${r.model.name}:${r.label}`,De(r.packageId,r.model.name,r.key))}let r=e=>{let t=n.get(e);if(t)return t;if(!e.startsWith(K))return e;let r=e.slice(8).split(`:`);return r.length<3||!r[1]||!r[2]?e:De(r[1],r[2])},i=e=>[...new Set(e)],a=(e,t)=>{let n={};for(let[i,a]of Object.entries(e)){let e=r(i);e in n||(n[e]=t(a))}return n},o={...e};return e.hidden&&(o.hidden=i(e.hidden.map(r))),e.itemOrder&&(o.itemOrder=a(e.itemOrder,e=>i(e.map(r)))),e.moved&&(o.moved=a(e.moved,r)),e.items&&(o.items=a(e.items,e=>e)),o}var q=`https://s-m-r-t.dev/schemas/cookbook/v1.json`,kn=new Set([`basic`,`advanced`,`hidden`]),An=new Set([`api`,`mcp`,`cli`]),J=e=>({ok:!1,error:e}),Y=e=>typeof e==`object`&&!!e&&!Array.isArray(e),X=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function jn(e,t){if(!Y(e))return`${t} is not an object`;let{objectRef:n,fieldName:r}=e;if(typeof n!=`string`||!n)return`${t} has no objectRef`;if(typeof r!=`string`||!r)return`${t} has no fieldName`;if(e.scopeType!==`app`)return`${t} must have scopeType "app"`;let i={objectRef:n,fieldName:r,scopeType:`app`};for(let n of[`defaultValue`,`help`,`label`]){let r=e[n];if(r!==void 0){if(typeof r!=`string`&&r!==null)return`${t}.${n} is invalid`;i[n]=r}}if(e.visibility!==void 0){let n=e.visibility;if(n!==null&&!(typeof n==`string`&&kn.has(n)))return`${t}.visibility is invalid`;i.visibility=n}if(e.displayOrder!==void 0){let n=e.displayOrder;if(n!==null&&!(typeof n==`number`&&Number.isFinite(n)))return`${t}.displayOrder is invalid`;i.displayOrder=n}if(e.locked!==void 0){if(e.locked!==null&&typeof e.locked!=`boolean`)return`${t}.locked is invalid`;i.locked=e.locked}return i}function Mn(e){if(!Y(e)||e.version!==1)return`layout must be an object with version 1`;for(let t of[`sectionOrder`,`hidden`])if(e[t]!==void 0&&!X(e[t]))return`layout.${t} must be a list of strings`;for(let t of[`itemOrder`,`moved`,`panels`])if(e[t]!==void 0&&!Y(e[t]))return`layout.${t} must be an object`;let t=e.itemOrder;if(Y(t)){for(let[e,n]of Object.entries(t))if(e===`__proto__`||!X(n))return`layout.itemOrder.${e} must be a list of strings`}let n=e.moved;if(Y(n)){for(let[e,t]of Object.entries(n))if(e===`__proto__`||typeof t!=`string`)return`layout.moved.${e} must be a string`}return e}function Nn(e,t={}){if(!Y(e))return J(`This is not a cookbook: expected a JSON object.`);if(e.$schema!==void 0&&e.$schema!==`https://s-m-r-t.dev/schemas/cookbook/v1.json`&&e.$schema!==`https://s-m-r-t.dev/schemas/blueprint/v1.json`)return J(`This is not a cookbook: its "$schema" is not a cookbook schema this planner knows.`);let{version:n}=e;if(n===void 0)return J(`This is not a cookbook: it has no "version".`);if(typeof n!=`number`||!Number.isInteger(n))return J(`The cookbook "version" must be a whole number.`);if(n>1)return J(`This cookbook is version ${n}, newer than this planner understands (1). Update the planner or re-export it.`);if(n!==1)return J(`Cookbook version ${n} is not supported (this planner reads version 1).`);if(!X(e.recipes))return J(`The cookbook "recipes" must be a list of recipe ids.`);let r=e.recipes.filter(e=>!D.has(e)),i=[...new Set([...je(e.recipes.filter(e=>D.has(e)),D),...r])].sort(),a=[];if(e.features!==void 0){if(!X(e.features))return J(`The cookbook "features" must be a list of model names.`);let t=new Set;for(let n of e.features){if(t.has(n))return J(`The cookbook lists the feature ${n} more than once.`);t.add(n)}a=[...e.features].sort()}let o=new Set([...i.flatMap(e=>D.get(e)?.models??[]),...a]);if(!Array.isArray(e.policies))return J(`The cookbook "policies" must be a list.`);let s=[];for(let[t,n]of e.policies.entries()){let e=jn(n,`policies[${t}]`);if(typeof e==`string`)return J(`Invalid cookbook: ${e}.`);(o.has(e.objectRef)||Me(e))&&s.push(e)}let c;if(e.exposure!==void 0){if(!Y(e.exposure))return J(`The cookbook "exposure" must be an object.`);let t=[];for(let[n,r]of Object.entries(e.exposure)){if(!X(r)||!r.every(e=>An.has(e)))return J(`Invalid cookbook: exposure for ${n} must list api, mcp or cli.`);r.length&&o.has(n)&&t.push([n,[...r]])}c=Object.fromEntries(t)}let l;if(e.layout!==void 0){let t=Mn(e.layout);if(typeof t==`string`)return J(`Invalid cookbook: ${t}.`);l=On(Dn(t))}let u;if(e.theme!==void 0){let n=wn(e.theme);if(n.ok)u=n.theme;else if(!t.dropUnknownRecipes)return J(n.error)}let d,f=[];if(e.overviews!==void 0){if(t.overviews){let n=t.overviews(e.overviews,l);if(!n)return J(`The cookbook "overviews" must be an object.`);d=n.overviews,f=n.dropped}else{if(!Y(e.overviews))return J(`The cookbook "overviews" must be an object.`);Object.keys(e.overviews).length&&(f=[`Page customisations (overviews) are not kept by this host and were dropped.`])}}let p={$schema:q,version:1,recipes:i,features:a,policies:s};for(let t of[`name`,`description`]){let n=e[t];if(n!==void 0){if(typeof n!=`string`)return J(`The cookbook "${t}" must be a string.`);n.trim()&&(p[t]=n.trim())}}return c&&Object.keys(c).length&&(p.exposure=c),l&&(p.layout=l),u&&(p.theme=u),d&&Object.keys(d).length&&(p.overviews=d),f.length?{ok:!0,cookbook:p,dropped:f}:{ok:!0,cookbook:p}}var Pn=e=>({ok:!1,error:e});function Fn(e,t={}){return Nn(e,{...t,overviews:pn})}function In(e,t={}){let n;try{n=JSON.parse(e)}catch{return Pn(`This file is not valid JSON.`)}try{return Fn(n,t)}catch{return Pn(`This file is not a valid cookbook.`)}}var Z=`smrt-planner:cookbook-doc:v1`,Ln=`smrt-planner:blueprint:v1`,Rn=`smrt-planner:cookbook-doc:unreadable`;function zn(){try{return globalThis.localStorage??null}catch{return null}}function Bn(e){if(!e)return{status:`unavailable`};let t;try{t=e.getItem(Z)}catch{return{status:`unavailable`}}let n=null;try{n=e.getItem(Ln)}catch{}let r=t===null&&n!==null,i=r?n:t;if(i===null)return{status:`empty`};let a=In(i,{dropUnknownRecipes:!0});if(a.ok)return r&&Q(e,Z,JSON.stringify(a.cookbook)),{status:`loaded`,cookbook:a.cookbook,previousKept:n!==null,...a.dropped?{dropped:a.dropped}:{}};t=i;let o=Q(e,Rn,t);return{status:`unreadable`,reason:a.error,keptAside:o}}function Q(e,t,n){if(!e)return!1;try{return e.setItem(t,n),!0}catch{return!1}}function Vn(e,t){if(!e)return!1;try{return e.removeItem(t),!0}catch{return!1}}function Hn(e,t){return Q(e,Z,JSON.stringify(t))}function Un(e,t={}){let n={$schema:q,version:1,...Fe(e)};t.name&&(n.name=t.name),t.description&&(n.description=t.description),t.layout&&(n.layout=t.layout);let r=Tn(t.theme);r&&(n.theme=r);let i=t.overviews??{},a=Object.keys(i).sort();return a.length&&(n.overviews=Object.fromEntries(a.map(e=>[e,i[e]]))),n}var Wn=new Set([`basic`,`advanced`,`hidden`]),Gn=new Set([`api`,`mcp`,`cli`]);function Kn(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`),n=atob(t+`=`.repeat((4-t.length%4)%4));return new TextDecoder().decode(Uint8Array.from(n,e=>e.charCodeAt(0)))}function qn(e){let t=new URLSearchParams(e);return t.has(`r`)||t.has(`o`)}function Jn(e){let t={rows:[],narrowed:{}};if(!e)return t;let n;try{n=JSON.parse(Kn(e))}catch{return t}if(!n||typeof n!=`object`)return t;let r=[];for(let[e,t]of Object.entries(n.r??{}))if(t&&typeof t==`object`)for(let[n,i]of Object.entries(t)){if(!i||typeof i!=`object`)continue;let t={objectRef:e,fieldName:n,scopeType:`app`};typeof i.v==`string`&&Wn.has(i.v)&&(t.visibility=i.v),typeof i.l==`string`&&(t.label=i.l),(typeof i.h==`string`||i.h===null)&&(t.help=i.h),(typeof i.d==`string`||i.d===null)&&(t.defaultValue=i.d),typeof i.o==`number`&&Number.isFinite(i.o)&&(t.displayOrder=i.o),typeof i.k==`boolean`&&(t.locked=i.k),r.push(t)}let i={};for(let[e,t]of Object.entries(n.x??{})){if(!Array.isArray(t))continue;let n=t.filter(e=>Gn.has(e));n.length&&(i[e]=n)}return{rows:r,narrowed:i}}function Yn(e){let t=new URLSearchParams(e),n=(t.get(`r`)??``).split(`,`).filter(Boolean),r=je(Ie(n,D),D),i=new Set(r.flatMap(e=>D.get(e)?.models??[])),{rows:a,narrowed:o}=Jn(t.get(`o`)??``),s={$schema:q,version:1,recipes:r,features:[],policies:a.filter(e=>i.has(e.objectRef))},c=Object.fromEntries(Object.entries(o).filter(([e])=>i.has(e)));return Object.keys(c).length&&(s.exposure=c),s}var Xn=`smrt-planner:shell`;function $(e){let t=Pe(e),n=e.policies.some(e=>e.defaultValue!==void 0&&Me(e));s(Le(e)||n?t.taxRate:void 0),o({pricesIncludeTax:t.pricesIncludeTax,taxRounding:t.taxRounding,currency:t.currency})}var Zn=new class{#e=r(0);get replacementGeneration(){return e(this.#e)}set replacementGeneration(e){i(this.#e,e,!0)}#t=r();get layout(){return e(this.#t)}set layout(e){i(this.#t,e,!0)}#n=r();get name(){return e(this.#n)}set name(e){i(this.#n,e,!0)}#r=r();get description(){return e(this.#r)}set description(e){i(this.#r,e,!0)}#i=r();get theme(){return e(this.#i)}set theme(e){i(this.#i,e,!0)}#a=r({});get overviews(){return e(this.#a)}set overviews(e){i(this.#a,e)}#o=r(`unknown`);get persist(){return e(this.#o)}set persist(e){i(this.#o,e,!0)}#s=r(!1);get loaded(){return e(this.#s)}set loaded(e){i(this.#s,e,!0)}hostManaged=!1;#c=r(``);get loadNotice(){return e(this.#c)}set loadNotice(e){i(this.#c,e,!0)}saveBlocked=!1;#l=r(!1);get keepLegacyUrl(){return e(this.#l)}set keepLegacyUrl(e){i(this.#l,e,!0)}replacedBeforeLoad=!1;previousKept=!1;storage=null;timer;snapshot(){return Un(n(E.data),{layout:n(this.layout),theme:n(this.theme),overviews:n(this.overviews),name:this.name,description:this.description})}overview(e){return Object.hasOwn(this.overviews,e)?this.overviews[e]:null}setOverview(e,t){let n=Object.fromEntries(Object.entries(this.overviews).filter(([t])=>t!==e));t&&(n[e]=t),this.overviews=n}setLayout(e){this.layout=x(e)?void 0:e}apply(e){E.load(e),this.layout=e.layout,this.theme=e.theme,this.name=e.name,this.description=e.description,this.overviews={...e.overviews??{}},$(e)}get unavailableNotice(){let e=[...E.unavailableRecipes,...E.unavailableFeatures];if(!e.length)return``;let t=e.length;return`${t} ${t===1?`recipe`:`recipes`} in this cookbook ${t===1?`isn't`:`aren't`} available in this version: ${e.join(`, `)}. They are kept when you save or export.`}removeUnavailable(){E.removeUnavailable(),this.scheduleSave()}setTheme(e){this.theme=Tn(e)}settings(){return Pe(this.snapshot())}setSettings(e){let t=Ne(this.snapshot(),e);E.rows=t.policies.map(e=>({...e})),$(t)}replace(e){this.replacementGeneration++,this.apply(e),this.loaded||(this.replacedBeforeLoad=!0),this.saveBlocked=!1,this.keepLegacyUrl=!1}reset(e={}){this.replacementGeneration++,E.clear(),$({policies:[]}),this.layout=void 0,e.preserveTheme||(this.theme=void 0),this.name=void 0,this.description=void 0,this.overviews={},this.saveBlocked=!1,this.keepLegacyUrl=!1}importText(e){let t=In(e);return t.ok&&this.replace(t.cookbook),t}hydrate(e,t=u()){this.storage=t;let n=Bn(t);n.status===`loaded`&&(this.previousKept=n.previousKept),n.status===`loaded`&&!this.replacedBeforeLoad?(this.apply(n.cookbook),n.dropped?.length&&(this.loadNotice=`Some saved page customisations could not be used and were removed: ${n.dropped.join(` `)}`)):n.status===`unreadable`&&(this.saveBlocked=!n.keptAside,this.loadNotice=n.keptAside?`The saved cookbook could not be read (${n.reason}) and was kept aside; starting empty.`:`The saved cookbook could not be read (${n.reason}). Starting empty without overwriting it; import or reset to save again.`);let r=!1;if(qn(e)&&(n.status===`loaded`&&!Q(t,`smrt-planner:cookbook-doc:backup`,JSON.stringify(n.cookbook))&&(this.saveBlocked=!0),this.apply(Yn(e)),r=!0),this.persist=n.status===`unavailable`?`memory`:`unknown`,this.loaded=!0,r){let e=this.save();this.keepLegacyUrl=!e}return r}save(){if(clearTimeout(this.timer),this.timer=void 0,!this.loaded)return!1;if(this.hostManaged)return!0;if(this.saveBlocked)return this.persist=`memory`,!1;let e=Hn(this.storage,this.snapshot());return this.persist=e?`ok`:`memory`,e&&this.previousKept&&(this.previousKept=!Vn(this.storage,Ln)),e&&(this.keepLegacyUrl=!1),e}scheduleSave(){this.loaded&&!this.hostManaged&&(clearTimeout(this.timer),this.timer=setTimeout(()=>this.save(),300))}flush(){this.timer!==void 0&&this.save()}};export{j as A,N as C,lt as D,pt as E,ot as O,mt as S,gt as T,Sn as _,zn as a,Qt as b,q as c,gn as d,hn as f,En as g,mn as h,Z as i,at as j,M as k,vn as l,G as m,Zn as n,Fn as o,yn as p,$ as r,In as s,Xn as t,bn as u,on as v,ht as w,F as x,$t as y};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./CSvhNT33.js","./DG3qFFTE.js","./COiEfhsA.js","./xihTtKlq.js","./B81CeftJ.js","./YUSKx8_q.js","./DK8Blf1Y.js","../assets/currency-metadata.ksbBA8-C.css","../assets/app.BHwMQ9Zv.css","./3nInxoCv.js","./Bv5jGtB8.js","../assets/feedback.qFktqYFY.css","./DV8QsFnv.js","./BaNbYf_w.js","./B2aomX_k.js","../assets/SegmentedControl.DMqHG5fn.css","./DIE02RSm.js","../assets/webmcp-ui-context.hO24Ni5w.css","./DBfU27Yr.js","../assets/data.CVlX_W0i.css","./CUyVrfsu.js","./Qxx7HWld.js","../assets/forms.BRdbPdvs.css","./BYcBM-fh.js","../assets/AppShell.Y0ysizZK.css","./OH7CqE-U.js","../assets/workspace.C40zM0Mb.css","./CTz6b8sX.js","./CGILVblc.js","../assets/state.C0UZEhxS.css","../assets/labels.Dxa6EyRI.css","./D95Ltrhv.js","./B58ycq6u.js","./glUGUrBl.js","../assets/planner.DOQVfcOi.css","./D_U_DYjx.js"])))=>i.map(i=>d[i]);
2
+ import{$ as e,Et as t,Mt as n,bt as r,vt as i}from"./DG3qFFTE.js";import{t as a}from"./BaNbYf_w.js";import"./xihTtKlq.js";import{I as o,L as s,O as c,Q as l,W as u,Z as d,_ as f,_t as p,bt as m,et as h,h as g,ht as _,p as v,x as y,yt as b}from"./B81CeftJ.js";import{v as x}from"./DV8QsFnv.js";import"./B2aomX_k.js";import"./DIE02RSm.js";import{u as S}from"./DBfU27Yr.js";import{A as ee,C,E as te,F as ne,G as re,I as ie,M as ae,N as oe,O as se,P as ce,T as le,U as ue,V as de,W as w,b as fe,h as pe,j as me,k as he,n as ge,q as _e,r as ve,w as ye}from"./CTz6b8sX.js";import{B as be,D as xe,G as Se,H as Ce,J as we,K as Te,M as Ee,V as De,X as Oe,Y as ke,Z as Ae,a as je,b as T,c as Me,d as Ne,l as Pe,n as Fe,r as Ie,s as Le,t as E,v as Re,x as D,z as ze}from"./CGILVblc.js";function Be(e){let t=e?.surfaces?.find(e=>e.kind===`widget`&&e.sectionDefault===!0);return t?{id:t.type,type:t.type,span:4,options:{}}:void 0}function Ve(e){let t=e.lastIndexOf(`#`);if(t<=0||t===e.length-1)return null;let n=e.slice(0,t),r=e.slice(t+1);return n.startsWith(`.`)||n.startsWith(`/`)||/\s/.test(n)||!/^[A-Za-z_$][\w$]*$/.test(r)?null:{specifier:n,exportName:r}}function O(e,t){let n=Ve(e);return n?Promise.resolve(t(n.specifier,n.exportName)).then(t=>{if(t==null)throw Error(`export "${e}" was not found`);return t}):Promise.reject(Error(`invalid export ref "${e}"`))}function k(e){let t;return()=>(t??=e(),t)}function He(e){return typeof e==`object`&&!!e&&`default`in e&&!!e.default}function Ue(e,t,n){let r=k(()=>O(e.export,t)),i=e.optionsEditor?k(()=>O(e.optionsEditor,t)):void 0,a=e.data?.load?k(()=>O(e.data?.load,t)):void 0,o={type:e.type,title:e.label,options:e.options??[],loadComponent:async()=>{let e=await r();return He(e)?e.default:e}};return e.description!==void 0&&(o.description=e.description),e.icon!==void 0&&(o.icon=e.icon),e.version!==void 0&&(o.version=e.version),e.allowedIn&&(o.allowedIn=e.allowedIn),e.defaultSpan!==void 0&&(o.defaultSpan=e.defaultSpan),e.minSpan!==void 0&&(o.minSpan=e.minSpan),e.maxSpan!==void 0&&(o.maxSpan=e.maxSpan),n&&(o.migrate=n),i&&(o.loadOptionsEditor=async()=>{let e=await i();return He(e)?e.default:e}),a&&(o.load=async(t,n)=>{let r=await a();if(typeof r!=`function`)throw Error(`loader "${e.data?.load}" is not a function`);return r(t,n)}),o}async function We(e,t,n,r={}){let i=[],a=[],o=[];for(let s of t)if(!r.enabled||r.enabled(s.id))for(let t of s.surfaces??[]){if(t.kind!==`widget`)continue;let c=(e,n)=>a.push({recipeId:s.id,type:t.type,reason:e,message:n});if(e.has(t.type)&&!r.replace){c(`duplicate_type`,`"${t.type}" is already registered`);continue}let l;if(t.migrate)try{let e=await O(t.migrate,n);if(typeof e!=`function`)throw Error(`not a function`);l=e}catch(e){c(`unresolved`,`migrate "${t.migrate}": ${e instanceof Error?e.message:String(e)}`);continue}try{o.push(e.register(Ue(t,n,l),{replace:r.replace})),i.push(t.type)}catch(e){c(`invalid`,e instanceof Error?e.message:String(e))}}return{registered:i,skipped:a,dispose:()=>{for(let e of o.splice(0))e()}}}var Ge=[`identifier`,`status`,`date`,`party`,`total`,`money`];function Ke(e){for(let t of[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`])if(e.includes(t))return t}function qe(e,t,n={}){let r=new Set(n.exclude??[]),i=n.max??4,a=Object.keys(t).filter(t=>!r.has(t)&&t in e.fields),o=e=>a.find(n=>t[n]?.includes(e)),s=[],c=e=>{e&&!s.includes(e)&&s.push(e)};c(o(`identifier`)??o(`title`));for(let e of Ge)e!==`identifier`&&(e===`money`&&s.some(e=>t[e]?.includes(`money`))||c(e===`date`?a.find(e=>t[e]?.includes(`date`)&&e!==`createdAt`&&e!==`updatedAt`)??o(`date`):o(e)));return s.slice(0,i).map(n=>({key:n,label:A(n,e),...Ke(t[n]??[])?{role:Ke(t[n]??[])}:{}}))}function Je(e,t,n={}){let r=new Set(n.exclude??[]),i=Object.keys(t).filter(t=>!r.has(t)&&t in e.fields),a=i.filter(t=>e.fields[t]?.type===`text`),o=a.find(e=>/^(?:description|title|name|label)$/.test(e))??a.find(e=>t[e]?.includes(`title`))??a.find(e=>!t[e]?.includes(`identifier`)),s=i.find(e=>t[e]?.includes(`quantity`)),c=i.filter(e=>t[e]?.includes(`money`)),l=c.find(e=>/unit|price|rate/i.test(e)),u=c.find(e=>/^(?:amount|lineTotal|total|lineAmount)$/.test(e))??[...c].reverse().find(e=>e!==l),d=[];return o&&d.push({key:o,label:A(o,e)}),s&&d.push({key:s,label:A(s,e),role:`quantity`}),l&&d.push({key:l,label:A(l,e),role:`money`,summarize:!1}),u&&u!==l&&d.push({key:u,label:A(u,e),role:`money`}),d}function A(e,t){let n=t.fields[e];return n&&(n.type===`foreignKey`||n.type===`crossPackageRef`)&&/.[a-z]Id$/.test(e)?ce(e.slice(0,-2)):ce(e)}function Ye(e){if(e.dataWidgets&&e.page)return[e.page];let t=[{id:`shortcuts`,type:`shortcuts`,span:4,options:{}}];if(e.dataWidgets&&e.lead){let n=e.lead,r=e.override,i=r&&typeof r==`object`&&!Array.isArray(r)?r:void 0,a=i?.changed;a&&typeof a==`object`&&!Array.isArray(a)&&Object.hasOwn(a,`count`)&&!(Array.isArray(i?.removed)&&i.removed.includes(`count`))&&t.push({id:`count`,type:`metric`,span:1,options:{title:n.plural,model:n.id,measure:`count`}}),t.push({id:`latest`,type:`records`,span:4,options:{title:`${n.name} records`,model:n.id,limit:5,summaries:!1}})}return t}var Xe=[`text`,`integer`,`decimal`,`boolean`,`datetime`,`json`,`foreignKey`,`crossPackageRef`];function Ze(e){return Xe.includes(e)?e:`text`}var Qe=/(Date|^date|period(Start|End))$/;function $e(e,t){return t.type===`datetime`&&!t.system&&Qe.test(t.name)&&!e.fields.some(e=>e.name===`allDay`)?`date`:void 0}function et(e){return fe(e)[0]}function tt(e,t){let n=t.ui?{...t.ui}:void 0,r=c(t)?`money`:$e(e,t);return{type:Ze(t.type),required:t.required,nullable:!t.required,...t.default===void 0?{}:{default:t.default},...t.description?{description:t.description}:{},...n?{ui:n}:{},...t.enum?.length?{enum:[...t.enum]}:{},...r?{format:r}:{},...et(e)===t.name?{display:!0}:{}}}function nt(e,t){return e.includes(`:`)?e:`${t.slice(0,t.lastIndexOf(`:`))}:${e}`}function rt(e,t){if(!t.related)return!1;let n=nt(t.related,e.id);return ke(p,n,h).some(t=>t.id===e.id)}function it(e){return e.fields.flatMap(t=>{if(t.type!==`foreignKey`&&t.type!==`crossPackageRef`||!t.related)return[];let n=m(nt(t.related,e.id));return n?[{field:t.name,kind:t.type===`crossPackageRef`?`crossPackageRef`:`foreignKey`,relatedCollection:n.model.collection,...rt(e,t)?{role:`items`}:{}}]:[]})}function j(e){let t=it(e);return{name:e.collection,objectRef:e.id,className:e.name,idField:`id`,fields:Object.fromEntries(e.fields.map(t=>[t.name,tt(e,t)])),...t.length?{relationships:t}:{}}}function at(e,t){return{objectRef:e.id,fields:Object.fromEntries(t.map((e,t)=>[e.name,{visibility:`basic`,label:e.label,help:e.help??null,order:t,required:e.required}]))}}function ot(e,t){let n=new Set(t);for(let t of e)for(let e of t.models)n.add(e);return n}function st(e){return v(e.replace(/_?id$/i,``)||e)}function M(e,t,n){let r=Oe(e,t),i=Ae(e,t).filter(e=>e.model.exposed&&n.has(e.model.id)),a=new Set(ke(e,t,h).map(e=>e.id)),o=new Map;for(let e of i)o.set(e.model.id,(o.get(e.model.id)??0)+1);let s=i.map(e=>{let t=a.has(e.model.id)?`items`:`children`,n=j(e.model),i=ie(n),s=[e.fk];return{model:e.model.id,field:e.fk,label:(o.get(e.model.id)??0)>1?`${Se(e.model.name,r)} (${st(e.fk).toLowerCase()})`:Se(e.model.name,r),kind:t,columns:t===`items`?Je(n,i,{exclude:s}):qe(n,i,{exclude:s,max:5}),...t===`items`&&`sortOrder`in n.fields?{sort:`sortOrder`}:{}}});for(let n of Te(e,t))s.push({model:n.model.id,field:n.fk,label:st(n.fk),kind:`reference`});return s}var ct=Symbol(`smrt-cookbook`);function lt(){return t(ct)}function ut(e,t){let{sections:n}=t;if(!n)throw Error(`the cookbook widget context is missing`);let r=typeof e.section==`string`?e.section:``,i=r?n.find(e=>e.id===`section:${r}`||e.id===`custom:${r}`)?.id:t.overviewId;if(!i)throw Error(`unknown section ${r}`);return oe(n,i)}function dt(e){return e?async(t,n)=>{let r=ut(t,n);try{let t=await e(n,r.items.map(e=>({...e})));if(!Array.isArray(t))return r;let i=new Set,a=[];for(let e of t){if(!e||typeof e.href!=`string`)continue;let t=typeof e.id==`string`&&e.id?e.id:e.href;i.has(t)&&(t=`${t}#${a.length}`),i.add(t),a.push({...e,id:t})}return{items:a}}catch(e){if(n.signal?.aborted)throw e;return r}}:ut}var ft=new Set([`foreignKey`,`crossPackageRef`]);function N(e,t){return`/m/${e}/${t}/`}function pt(e,t,n,r=`view`){let i=`${N(e,t)}${encodeURIComponent(n)}/`;return r===`edit`?`${i}edit/`:i}function mt(e,t,n,r){return`${N(e,t)}?${encodeURIComponent(n)}=${encodeURIComponent(r)}`}function ht(e,t){let n=new URLSearchParams(e);for(let e of t.fields){if(!ft.has(e.type))continue;let t=n.get(e.name);if(t)return{field:e.name,equals:t}}}function gt(e){return e?.equals===void 0?``:`${encodeURIComponent(e.field)}=${encodeURIComponent(e.equals)}`}var P=e=>typeof e==`number`&&Number.isSafeInteger(e)?e:null,_t=(e,t)=>e.fields.some(e=>e.name===t);function vt(e,t){let n=ie(j(e)),r=C(t,n);return Object.values(r).some(e=>P(e)!==null)?r:void 0}function yt(e,t){return!!e.fields.find(e=>e.name===`status`)?.enum?.includes(`draft`)&&typeof t.status==`string`&&t.status!==``&&t.status!==`draft`}function bt(e,t,n){if(!yt(e,t)||![`subtotal`,`taxAmount`,`totalAmount`,`discountTotal`].every(t=>_t(e,t)))return;let r=P(t.subtotal),i=P(t.taxAmount),a=P(t.totalAmount),o=P(t.discountTotal)??0;if(r===null||i===null||a===null)return;let s=d(t,`exclusive`);return{subtotal:r,discount:o,tax:i,total:a,lineAmountType:s,roundingScope:l(t,`line`),showNetSubtotal:s===`inclusive`,taxes:_(n,s).flatMap(e=>e.taxComponentId?[{taxComponentId:e.taxComponentId,name:e.name,percent:e.percent,taxable:e.taxable,tax:e.tax}]:[])}}var F=de();function I(e){let{source:t,href:n}=e;if(!t||!n)throw Error(`the planner widget context is missing`);return{source:t,href:n}}function L(e){let t=typeof e==`string`?m(e):void 0;if(!t)throw Error(`unknown model ${String(e)}`);return{model:t.model,packageId:t.pkg.id,path:N(t.pkg.id,t.model.name)}}var R=new Set([`foreignKey`,`crossPackageRef`]);function z(e,t,n){let r=e.filter;if(typeof r!=`string`||r===``)return;if(r!==`parent`)throw Error(`unknown filter ${r}`);let{record:i}=t;if(!i?.id)throw Error(`the parent filter needs a record`);let a=typeof e.parentField==`string`&&e.parentField?e.parentField:e.field,o=typeof a==`string`?a:``,s=n.fields.find(e=>e.name===o);if(!s||!R.has(s.type))throw Error(`${n.name} has no reference field ${o}`);return{field:o,id:i.id}}async function B(e,t,n){return n?e.listWhere(t,n.field,n.id):e.list(t)}function V(e,t,n){return e(n?mt(t.packageId,t.model.name,n.field,n.id):t.path)}var H=e=>typeof e==`number`&&Number.isFinite(e);async function xt(e,t){let{source:n,href:r}=I(t),i=L(e.model),{model:a}=i,o=z(e,t,a),s=await B(n,a,o),l=V(r,i,o),u=typeof e.measure==`string`?e.measure:``;if(u===`count`||u===``)return{value:s.length,format:`integer`,href:l};let d=a.fields.find(t=>t.name===e.field);if(!d||d.type!==`integer`&&d.type!==`decimal`)throw Error(`${u} needs a numeric field of ${a.name}`);let f=s.map(e=>e[d.name]).filter(H),p=0;if(f.length){if(u===`sum`||u===`avg`)p=f.reduce((e,t)=>e+t,0),u===`avg`&&(p/=f.length);else if(u===`min`)p=Math.min(...f);else if(u===`max`)p=Math.max(...f);else throw Error(`unknown measure ${u}`)}let m=c(d);return{value:m?Math.round(p):p,format:m?`money`:d.type===`integer`?`integer`:`decimal`,...m?{currency:`USD`}:{},href:l}}function St(e,t){return H(e)&&H(t)?e-t:String(e??``).localeCompare(String(t??``))}var Ct=new Set([`createdAt`,`updatedAt`]),wt=[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`];function Tt(e=[]){return wt.find(t=>e.includes(t))}function Et(e,t,n,r){let i=j(e),a=r?[r]:[],o=ae(n),s=o.length?[]:pe(E.apply(e).fields.filter(t=>!a.includes(t.name)&&!xe(e,t))).filter(e=>!e.derive),c=o.length?o:s.map(e=>e.name),l=[...Je(i,t,{exclude:a}),...qe(i,t,{exclude:a,max:c.length+8})];return c.map(n=>{let r=e.fields.find(e=>e.name===n);if(!r)throw Error(`${e.name} has no field ${n}`);let i=l.find(e=>e.key===n),a=s.find(e=>e.name===n)?.label;if(i)return a?{...i,label:a}:i;let o=Tt(t[n]);return{key:n,label:a??(R.has(r.type)?v(n.replace(/Id$/,``)):v(n)),...o?{role:o}:{}}})}var Dt=new Set([`money`,`quantity`]);function Ot(e,t){let n={};for(let r of e)(r.summarize??Dt.has(r.role))&&(n[r.key]=t.reduce((e,t)=>{let n=t[r.key];return H(n)?e+n:e},0));return n}function kt(e,t){let n=ne(j(e)),r=new Set(t.map(e=>n?e[n]:void 0).filter(e=>typeof e==`string`&&e!==``));return r.size===1?[...r][0]??`USD`:`USD`}async function At(e,t){let{source:n,href:r}=I(t),i=L(e.model),{model:a}=i,o=z(e,t,a),s=await B(n,a,o);if(typeof e.sort==`string`&&e.sort){if(!a.fields.find(t=>t.name===e.sort)&&!Ct.has(e.sort))throw Error(`${a.name} has no field ${e.sort}`);let t=s.some(t=>t[e.sort]!==void 0)?e.sort:W(a)?.name;if(t){let n=e.direction===`asc`?1:-1;s=[...s].sort((e,r)=>n*St(e[t],r[t]))}}let c=Et(a,ie(j(a)),e.columns,o?.field),l=H(e.limit)?e.limit:5,u=s.slice(0,l),d=a.fields.filter(e=>R.has(e.type)&&c.some(t=>t.key===e.name)),f=await ve(n,d,u),p=e=>Object.fromEntries(c.map(t=>{let n=e[t.key],r=d.find(e=>e.name===t.key);return r?.related&&typeof n==`string`&&n?[t.key,f.get(g(r.related,n))??``]:[t.key,n??null]})),m=Ot(c,s),h=!we(a);return{rows:await Promise.all(u.map(async e=>({id:String(e.id),title:await ge(n,a,e,0,o?.field),...h?{href:r(pt(i.packageId,a.name,String(e.id)))}:{},cells:p(e)}))),...e.summaries===!1?{}:{total:s.length},...h?{href:V(r,i,o)}:{},columns:c,currency:kt(a,s),...Object.keys(m).length?{summaries:m}:{}}}var jt={"7d":7,"30d":30,"90d":90,"12m":365,all:null},U=864e5;function Mt(e){return e===`7d`||e===`30d`?`day`:e===`90d`?`week`:`month`}function Nt(e,t){let n=new Date(e);if(t===`month`)return Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),1);let r=Date.UTC(n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate());return t===`week`?r-(n.getUTCDay()+6)%7*U:r}function Pt(e,t){if(t===`month`){let t=new Date(e);return Date.UTC(t.getUTCFullYear(),t.getUTCMonth()+1,1)}return e+(t===`week`?7:1)*U}function Ft(e,t){let n=new Date(e).toISOString();return t===`month`?n.slice(0,7):n.slice(0,10)}var It=e=>e.type===`datetime`&&!e.system;function W(e){let t=e.fields.filter(It);return t.find(e=>/^(issue|order|start|created)/i.test(e.name))??t[0]}function Lt(e){if(typeof e!=`string`&&typeof e!=`number`)return;let t=new Date(e).getTime();return Number.isFinite(t)?t:void 0}async function Rt(e,t){let{source:n,href:r}=I(t),i=L(e.model),{model:a}=i,o=z(e,t,a),s=typeof e.groupBy==`string`?e.groupBy:``,l=s?a.fields.find(e=>e.name===s):W(a);if(!l)throw Error(s?`${a.name} has no field ${s}`:`${a.name} has no date field to chart; choose a group-by field`);let u=typeof e.measure==`string`?e.measure:``,d;if(u&&u!==`count`){if(u!==`sum`&&u!==`avg`)throw Error(`unknown measure ${u}`);if(d=a.fields.find(t=>t.name===e.field),!d||d.type!==`integer`&&d.type!==`decimal`)throw Error(`${u} needs a numeric field of ${a.name}`)}let f=typeof e.period==`string`?e.period:`30d`;if(!Object.hasOwn(jt,f))throw Error(`unknown period ${f}`);let p=jt[f],m=It(l),h=m?l:W(a),g=p!==null&&h?y-p*U:-1/0,_=await B(n,a,o);h&&g!==-1/0&&(_=_.filter(e=>{let t=Lt(e[h.name]);return t!==void 0&&t>=g&&t<=y}));let v=new Map,b=(e,t,n)=>{let r=v.get(e)??{key:t,sum:0,n:0};if(d){let e=n[d.name];if(!H(e))return;r.sum+=e}r.n+=1,v.set(e,r)},x=Mt(f);if(m){let e=g===-1/0?Math.min(..._.map(e=>Lt(e[l.name])??y),y):g;for(let t=Nt(e,x);t<=y;t=Pt(t,x))v.set(Ft(t,x),{key:t,sum:0,n:0});for(let e of _){let t=Lt(e[l.name]);if(t===void 0)continue;let n=Nt(t,x);b(Ft(n,x),n,e)}}else for(let e of _){let t=e[l.name],n=t==null||t===``?`(none)`:String(t);b(n,n,e)}let S=d?c(d):!1,ee=e=>{if(!d)return e.n;let t=u===`avg`&&e.n?e.sum/e.n:e.sum;return S?Math.round(t):t},C=[...v.entries()].map(([e,t])=>({label:e,value:ee(t),key:t.key}));return C=m?C.sort((e,t)=>Number(e.key)-Number(t.key)):C.sort((e,t)=>t.value-e.value||e.label.localeCompare(t.label)),{points:C.map(({label:e,value:t})=>({label:e,value:t})),format:d?S?`money`:d.type===`integer`?`integer`:`decimal`:`integer`,...S?{currency:`USD`}:{},href:V(r,i,o)}}te(F,{metric:xt,records:At,chart:Rt,shortcuts:async(e,t)=>t,shortcuts:dt()});function zt(e){let{relations:t,viewAllHref:n}=e;if(!t)throw Error(`the record page context is missing`);return{relations:t,records:At,viewAllHref:n}}async function Bt(e,t){let{source:n}=I(e),r=e.record;if(!r?.id)throw Error(`line items need a record`);let{model:i}=L(r.model),a=await n.get(i,r.id);if(!a)return{};let o=t.find(e=>e.kind===`items`),s=o?m(o.model)?.model:void 0,c=bt(i,a,o&&s?await n.listWhere(s,o.field,r.id):[]),l=c?void 0:vt(i,a),u=ne(j(i)),d=u?a[u]:void 0;return{...c?{storedTotals:c}:{},...l?{totals:l}:{},...typeof d==`string`&&d?{currency:d}:{}}}F.register(le((e,t)=>he(zt(t))(e,t))),F.register(ye(async(e,t)=>{let n=zt(t),{totals:r,storedTotals:i,currency:a}=await Bt(t,n.relations);return se({...n,totals:()=>r,storedTotals:()=>i,currency:()=>a})(e,t)}));var Vt=[`shortcuts`,`metric`,`records`,`chart`,`note`],Ht={"@happyvertical/smrt-reports/svelte":async()=>({SavedReportsWidget:(await a(async()=>{let{default:e}=await import(`./CSvhNT33.js`);return{default:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]),import.meta.url)).default})},Ut=async(e,t)=>{let n=Ht[e];if(n)return(await n())[t]},Wt=T.filter(e=>e.surfaces?.some(e=>e.kind===`widget`)),Gt=Wt.flatMap(e=>(e.surfaces??[]).flatMap(e=>e.kind===`widget`?[e.type]:[]));We(F,Wt,Ut);var Kt=new Map(ze(T).map(e=>[`section:${e.id}`,e])),qt=p.packages.flatMap(e=>e.models.map(e=>e.id)),Jt=[...Vt,...Gt];function Yt(e){let t=Kt.get(e);for(let e of t?.recipes??[]){let t=Re(e)[0];if(t)return{id:t.model.id,name:v(t.model.name)}}}function Xt(e,t){let n=Be(Kt.get(e)?.recipes[0]),r=Yt(e);return Ye({lead:r?{...r,plural:f(r.name)}:void 0,dataWidgets:!0,page:n&&Gt.includes(n.type)?n:void 0,override:t})}var Zt=new Map;function Qt(e,t){if(!_e.test(e))return;let n=Zt.get(e);return n||(n=w({id:e,allowed:Jt,models:qt,defaults:Xt(e)}),Zt.set(e,n)),t===void 0?n:w({...n,defaults:Xt(e,t)})}function $t(e,t){return`detail:${e}.${t}`}var en=new Map(p.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(t=>[me(t.id),{packageId:e.id,model:t}])));function tn(e){let[,t,n]=/^detail:([A-Za-z0-9_-]+)\.([A-Za-z0-9_]+)$/.exec(e)??[],r=t&&n?b(t,n):void 0;return t&&r?.exposed?{packageId:t,model:r}:en.get(e)}var nn=new Set(p.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(e=>e.id))),rn=new Map;function an(e){let t=rn.get(e);if(t)return t;let n=tn(e);if(!n)return;let r=M(p,n.model.id,nn),i=ee(j(n.model),r,{id:e,maxMetrics:2*r.length});return t=w({...i,maxWidgets:Math.max(i.maxWidgets??24,i.defaults.length+24)}),rn.set(e,t),t}function on(e,t){let n=an(e),r=tn(e);if(!n||!r)return;let i=M(p,r.model.id,t),a=0,o=n.defaults.filter(e=>e.type===`line-items`?i.some(e=>e.kind===`items`):e.type===`related`?i.some(e=>e.kind===`children`):t.has(String(e.options.model))?e.type!==`metric`||(a+=1,a<=4):!1);return w({...n,defaults:o})}function sn(e,t){return e.startsWith(`detail:`)?an(e):Qt(e,t)}function cn(e,t){return Kt.has(e)||e===`section:${Ee.id}`?!0:e.startsWith(`detail:`)?tn(e)!==void 0:e.startsWith(`custom:`)&&_e.test(e)&&(t?.customSections??[]).some(t=>t.id===e)}var ln=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function un(e,t){let n=t.widgetId?`widget ${t.widgetId}${t.type?` (${t.type})`:``}`:`an entry`,r=t.options?.length?`: ${t.options.map(e=>`${e.key} ${e.code}`).join(`, `)}`:``;return`Overview ${e}: ${n} was dropped (${t.code}${r}).`}function dn(e,t){let n={...e};return e.added&&(n.added=e.added.filter(e=>!t.has(e.id))),e.changed&&(n.changed=Object.fromEntries(Object.entries(e.changed).filter(([e])=>!t.has(e)))),n}function fn(e,t){let n=sn(e,t);if(!n)return{override:null,issues:[{widgetId:null,type:null,code:`malformed`,message:`not an overview id`}]};let r=ue(n,t,F);if(r.ok){let e=re(t).override?.changed?.count;return e&&n.defaults.some(e=>e.id===`count`)?{override:{...r.override??{version:1},changed:{...r.override?.changed,count:e}},issues:[]}:{override:r.override,issues:[]}}let i=re(t),a=new Set(r.issues.flatMap(e=>e.widgetId?[e.widgetId]:[]));if(!i.override)return{override:null,issues:r.issues};let o=ue(n,dn(i.override,a),F);return o.ok?{override:o.override,issues:r.issues}:{override:null,issues:[...r.issues,...o.issues]}}function pn(e,t){if(!ln(e))return null;let n=[],r=[];for(let i of Object.keys(e).sort()){if(!cn(i,t)){r.push(`Overview ${i} is not a page in this app and was dropped.`);continue}let{override:a,issues:o}=fn(i,e[i]);for(let e of o)r.push(un(i,e));a&&n.push([i,a])}return{overviews:Object.fromEntries(n),dropped:r}}var mn=S,hn=`glass`,gn=`system`,_n=[`light`,`dark`,`system`],vn=[`none`,`sm`,`md`,`lg`,`xl`,`full`],yn=[`comfortable`,`touch`],bn=[`auto`,`standard`,`more`],G={"system-ui":`system-ui, -apple-system, "Segoe UI", sans-serif`,Inter:`Inter, system-ui, sans-serif`,Georgia:`Georgia, "Times New Roman", serif`,"ui-rounded":`ui-rounded, "SF Pro Rounded", system-ui, sans-serif`,"ui-monospace":`ui-monospace, "SF Mono", Menlo, monospace`},xn=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;function Sn(e){if(typeof e!=`string`)return null;let t=xn.exec(e.trim());if(!t)return null;let n=t[1].toLowerCase();return n.length===3&&(n=[...n].map(e=>e+e).join(``)),`#${n}`}var Cn=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function wn(e){if(e===void 0)return{ok:!0,theme:void 0};if(!Cn(e))return{ok:!1,error:`The cookbook "theme" must be an object.`};let t={};if(e.preset!==void 0){if(typeof e.preset!=`string`||!mn.includes(e.preset))return{ok:!1,error:`The theme preset must be one of ${mn.join(`, `)}.`};t.preset=e.preset}if(e.colorScheme!==void 0){if(!_n.includes(e.colorScheme))return{ok:!1,error:`The theme colorScheme must be light, dark or system.`};t.colorScheme=e.colorScheme}for(let[n,r]of[[`borderRadius`,vn],[`density`,yn],[`contrast`,bn]]){let i=e[n];if(i!==void 0){if(!r.includes(i))return{ok:!1,error:`The theme ${n} must be one of ${r.join(`, `)}.`};t[n]=i}}if(e.fontFamily!==void 0){if(typeof e.fontFamily!=`string`||!Object.hasOwn(G,e.fontFamily))return{ok:!1,error:`The theme font must be one of ${Object.keys(G).join(`, `)}.`};t.fontFamily=e.fontFamily}if(e.custom!==void 0){if(!Cn(e.custom))return{ok:!1,error:`The theme "custom" must be an object.`};let n=Sn(e.custom.primary);if(!n)return{ok:!1,error:`The theme custom primary must be a hex colour like #c2410c.`};let r={primary:n};if(e.custom.fontFamily!==void 0){let t=e.custom.fontFamily;if(typeof t!=`string`||!Object.hasOwn(G,t))return{ok:!1,error:`The theme font must be one of ${Object.keys(G).join(`, `)}.`};r.fontFamily=t}t.custom=r}if(e.customCss!==void 0){if(typeof e.customCss!=`string`)return{ok:!1,error:`The theme customCss must be a string.`};if(Array.from(e.customCss).length>65536)return{ok:!1,error:`The theme customCss is too long (65,536 characters maximum).`};e.customCss&&(t.customCss=e.customCss)}return{ok:!0,theme:Object.keys(t).length?t:void 0}}function Tn(e){if(!e)return;let t={};return e.preset&&(t.preset=e.preset),e.colorScheme&&(t.colorScheme=e.colorScheme),e.borderRadius&&(t.borderRadius=e.borderRadius),e.density&&(t.density=e.density),e.contrast&&(t.contrast=e.contrast),e.fontFamily&&(t.fontFamily=e.fontFamily),e.custom&&(t.custom={...e.custom}),e.customCss&&(t.customCss=e.customCss),Object.keys(t).length?t:void 0}function En(e){let t=e?.colorScheme??`system`,n=e?.custom?`brand colour ${e.custom.primary}`:e?.preset??`glass`;return t===`system`?n:`${n}, ${t}`}var K=`section:`;function Dn(e,t=be(T)){let n=Object.keys(t).sort((e,t)=>t.length-e.length);if(!n.length)return e;let r=e=>{if(!e.startsWith(K))return e;let r=e.slice(8);for(let e of n){if(r===e)return`${K}${t[e]}`;if(r.startsWith(`${e}:`))return`${K}${t[e]}${r.slice(e.length)}`}return e},i=e=>e.startsWith(K)&&n.includes(e.slice(8)),a=e=>[...new Set(e)],o={...e};if(e.sectionOrder&&(o.sectionOrder=a(e.sectionOrder.map(r))),e.hidden&&(o.hidden=a(e.hidden.filter(e=>!i(e)).map(r))),e.itemOrder){let t={};for(let[n,i]of Object.entries(e.itemOrder)){let e=r(n);t[e]=a([...t[e]??[],...i.map(r)])}o.itemOrder=t}return e.moved&&(o.moved=Object.fromEntries(Object.entries(e.moved).map(([e,t])=>[r(e),r(t)]))),o}function On(e,t=T){let n=new Map;for(let e of t){let t=Ce(e).id;for(let r of Re(e))r.key&&n.set(`${K}${t}:${r.packageId}:${r.model.name}:${r.label}`,De(r.packageId,r.model.name,r.key))}let r=e=>{let t=n.get(e);if(t)return t;if(!e.startsWith(K))return e;let r=e.slice(8).split(`:`);return r.length<3||!r[1]||!r[2]?e:De(r[1],r[2])},i=e=>[...new Set(e)],a=(e,t)=>{let n={};for(let[i,a]of Object.entries(e)){let e=r(i);e in n||(n[e]=t(a))}return n},o={...e};return e.hidden&&(o.hidden=i(e.hidden.map(r))),e.itemOrder&&(o.itemOrder=a(e.itemOrder,e=>i(e.map(r)))),e.moved&&(o.moved=a(e.moved,r)),e.items&&(o.items=a(e.items,e=>e)),o}var q=`https://s-m-r-t.dev/schemas/cookbook/v1.json`,kn=new Set([`basic`,`advanced`,`hidden`]),An=new Set([`api`,`mcp`,`cli`]),J=e=>({ok:!1,error:e}),Y=e=>typeof e==`object`&&!!e&&!Array.isArray(e),X=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`);function jn(e,t){if(!Y(e))return`${t} is not an object`;let{objectRef:n,fieldName:r}=e;if(typeof n!=`string`||!n)return`${t} has no objectRef`;if(typeof r!=`string`||!r)return`${t} has no fieldName`;if(e.scopeType!==`app`)return`${t} must have scopeType "app"`;let i={objectRef:n,fieldName:r,scopeType:`app`};for(let n of[`defaultValue`,`help`,`label`]){let r=e[n];if(r!==void 0){if(typeof r!=`string`&&r!==null)return`${t}.${n} is invalid`;i[n]=r}}if(e.visibility!==void 0){let n=e.visibility;if(n!==null&&!(typeof n==`string`&&kn.has(n)))return`${t}.visibility is invalid`;i.visibility=n}if(e.displayOrder!==void 0){let n=e.displayOrder;if(n!==null&&!(typeof n==`number`&&Number.isFinite(n)))return`${t}.displayOrder is invalid`;i.displayOrder=n}if(e.locked!==void 0){if(e.locked!==null&&typeof e.locked!=`boolean`)return`${t}.locked is invalid`;i.locked=e.locked}return i}function Mn(e){if(!Y(e)||e.version!==1)return`layout must be an object with version 1`;for(let t of[`sectionOrder`,`hidden`])if(e[t]!==void 0&&!X(e[t]))return`layout.${t} must be a list of strings`;for(let t of[`itemOrder`,`moved`,`panels`])if(e[t]!==void 0&&!Y(e[t]))return`layout.${t} must be an object`;let t=e.itemOrder;if(Y(t)){for(let[e,n]of Object.entries(t))if(e===`__proto__`||!X(n))return`layout.itemOrder.${e} must be a list of strings`}let n=e.moved;if(Y(n)){for(let[e,t]of Object.entries(n))if(e===`__proto__`||typeof t!=`string`)return`layout.moved.${e} must be a string`}return e}function Nn(e,t={}){if(!Y(e))return J(`This is not a cookbook: expected a JSON object.`);if(e.$schema!==void 0&&e.$schema!==`https://s-m-r-t.dev/schemas/cookbook/v1.json`&&e.$schema!==`https://s-m-r-t.dev/schemas/blueprint/v1.json`)return J(`This is not a cookbook: its "$schema" is not a cookbook schema this planner knows.`);let{version:n}=e;if(n===void 0)return J(`This is not a cookbook: it has no "version".`);if(typeof n!=`number`||!Number.isInteger(n))return J(`The cookbook "version" must be a whole number.`);if(n>1)return J(`This cookbook is version ${n}, newer than this planner understands (1). Update the planner or re-export it.`);if(n!==1)return J(`Cookbook version ${n} is not supported (this planner reads version 1).`);if(!X(e.recipes))return J(`The cookbook "recipes" must be a list of recipe ids.`);let r=e.recipes.filter(e=>!D.has(e)),i=[...new Set([...je(e.recipes.filter(e=>D.has(e)),D),...r])].sort(),a=[];if(e.features!==void 0){if(!X(e.features))return J(`The cookbook "features" must be a list of model names.`);let t=new Set;for(let n of e.features){if(t.has(n))return J(`The cookbook lists the feature ${n} more than once.`);t.add(n)}a=[...e.features].sort()}let o=new Set([...i.flatMap(e=>D.get(e)?.models??[]),...a]);if(!Array.isArray(e.policies))return J(`The cookbook "policies" must be a list.`);let s=[];for(let[t,n]of e.policies.entries()){let e=jn(n,`policies[${t}]`);if(typeof e==`string`)return J(`Invalid cookbook: ${e}.`);(o.has(e.objectRef)||Me(e))&&s.push(e)}let c;if(e.exposure!==void 0){if(!Y(e.exposure))return J(`The cookbook "exposure" must be an object.`);let t=[];for(let[n,r]of Object.entries(e.exposure)){if(!X(r)||!r.every(e=>An.has(e)))return J(`Invalid cookbook: exposure for ${n} must list api, mcp or cli.`);r.length&&o.has(n)&&t.push([n,[...r]])}c=Object.fromEntries(t)}let l;if(e.layout!==void 0){let t=Mn(e.layout);if(typeof t==`string`)return J(`Invalid cookbook: ${t}.`);l=On(Dn(t))}let u;if(e.theme!==void 0){let n=wn(e.theme);if(n.ok)u=n.theme;else if(!t.dropUnknownRecipes)return J(n.error)}let d,f=[];if(e.overviews!==void 0){if(t.overviews){let n=t.overviews(e.overviews,l);if(!n)return J(`The cookbook "overviews" must be an object.`);d=n.overviews,f=n.dropped}else{if(!Y(e.overviews))return J(`The cookbook "overviews" must be an object.`);Object.keys(e.overviews).length&&(f=[`Page customisations (overviews) are not kept by this host and were dropped.`])}}let p={$schema:q,version:1,recipes:i,features:a,policies:s};for(let t of[`name`,`description`]){let n=e[t];if(n!==void 0){if(typeof n!=`string`)return J(`The cookbook "${t}" must be a string.`);n.trim()&&(p[t]=n.trim())}}if(e.specs!==void 0){if(typeof e.specs!=`string`)return J(`The cookbook "specs" must be a string.`);e.specs.trim()&&(p.specs=e.specs.trim())}return c&&Object.keys(c).length&&(p.exposure=c),l&&(p.layout=l),u&&(p.theme=u),d&&Object.keys(d).length&&(p.overviews=d),f.length?{ok:!0,cookbook:p,dropped:f}:{ok:!0,cookbook:p}}var Pn=e=>({ok:!1,error:e});function Fn(e,t={}){return Nn(e,{...t,overviews:pn})}function In(e,t={}){let n;try{n=JSON.parse(e)}catch{return Pn(`This file is not valid JSON.`)}try{return Fn(n,t)}catch{return Pn(`This file is not a valid cookbook.`)}}var Z=`smrt-planner:cookbook-doc:v1`,Ln=`smrt-planner:blueprint:v1`,Rn=`smrt-planner:cookbook-doc:unreadable`;function zn(){try{return globalThis.localStorage??null}catch{return null}}function Bn(e){if(!e)return{status:`unavailable`};let t;try{t=e.getItem(Z)}catch{return{status:`unavailable`}}let n=null;try{n=e.getItem(Ln)}catch{}let r=t===null&&n!==null,i=r?n:t;if(i===null)return{status:`empty`};let a=In(i,{dropUnknownRecipes:!0});if(a.ok)return r&&Q(e,Z,JSON.stringify(a.cookbook)),{status:`loaded`,cookbook:a.cookbook,previousKept:n!==null,...a.dropped?{dropped:a.dropped}:{}};t=i;let o=Q(e,Rn,t);return{status:`unreadable`,reason:a.error,keptAside:o}}function Q(e,t,n){if(!e)return!1;try{return e.setItem(t,n),!0}catch{return!1}}function Vn(e,t){if(!e)return!1;try{return e.removeItem(t),!0}catch{return!1}}function Hn(e,t){return Q(e,Z,JSON.stringify(t))}function Un(e,t={}){let n={$schema:q,version:1,...Fe(e)};t.name&&(n.name=t.name),t.description&&(n.description=t.description),t.specs&&(n.specs=t.specs),t.layout&&(n.layout=t.layout);let r=Tn(t.theme);r&&(n.theme=r);let i=t.overviews??{},a=Object.keys(i).sort();return a.length&&(n.overviews=Object.fromEntries(a.map(e=>[e,i[e]]))),n}var Wn=new Set([`basic`,`advanced`,`hidden`]),Gn=new Set([`api`,`mcp`,`cli`]);function Kn(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`),n=atob(t+`=`.repeat((4-t.length%4)%4));return new TextDecoder().decode(Uint8Array.from(n,e=>e.charCodeAt(0)))}function qn(e){let t=new URLSearchParams(e);return t.has(`r`)||t.has(`o`)}function Jn(e){let t={rows:[],narrowed:{}};if(!e)return t;let n;try{n=JSON.parse(Kn(e))}catch{return t}if(!n||typeof n!=`object`)return t;let r=[];for(let[e,t]of Object.entries(n.r??{}))if(t&&typeof t==`object`)for(let[n,i]of Object.entries(t)){if(!i||typeof i!=`object`)continue;let t={objectRef:e,fieldName:n,scopeType:`app`};typeof i.v==`string`&&Wn.has(i.v)&&(t.visibility=i.v),typeof i.l==`string`&&(t.label=i.l),(typeof i.h==`string`||i.h===null)&&(t.help=i.h),(typeof i.d==`string`||i.d===null)&&(t.defaultValue=i.d),typeof i.o==`number`&&Number.isFinite(i.o)&&(t.displayOrder=i.o),typeof i.k==`boolean`&&(t.locked=i.k),r.push(t)}let i={};for(let[e,t]of Object.entries(n.x??{})){if(!Array.isArray(t))continue;let n=t.filter(e=>Gn.has(e));n.length&&(i[e]=n)}return{rows:r,narrowed:i}}function Yn(e){let t=new URLSearchParams(e),n=(t.get(`r`)??``).split(`,`).filter(Boolean),r=je(Ie(n,D),D),i=new Set(r.flatMap(e=>D.get(e)?.models??[])),{rows:a,narrowed:o}=Jn(t.get(`o`)??``),s={$schema:q,version:1,recipes:r,features:[],policies:a.filter(e=>i.has(e.objectRef))},c=Object.fromEntries(Object.entries(o).filter(([e])=>i.has(e)));return Object.keys(c).length&&(s.exposure=c),s}var Xn=`smrt-planner:shell`;function $(e){let t=Pe(e),n=e.policies.some(e=>e.defaultValue!==void 0&&Me(e));s(Le(e)||n?t.taxRate:void 0),o({pricesIncludeTax:t.pricesIncludeTax,taxRounding:t.taxRounding,currency:t.currency})}var Zn=new class{#e=r(0);get replacementGeneration(){return e(this.#e)}set replacementGeneration(e){i(this.#e,e,!0)}#t=r();get layout(){return e(this.#t)}set layout(e){i(this.#t,e,!0)}#n=r();get name(){return e(this.#n)}set name(e){i(this.#n,e,!0)}#r=r();get description(){return e(this.#r)}set description(e){i(this.#r,e,!0)}#i=r();get specs(){return e(this.#i)}set specs(e){i(this.#i,e,!0)}#a=r();get theme(){return e(this.#a)}set theme(e){i(this.#a,e,!0)}#o=r({});get overviews(){return e(this.#o)}set overviews(e){i(this.#o,e)}#s=r(`unknown`);get persist(){return e(this.#s)}set persist(e){i(this.#s,e,!0)}#c=r(!1);get loaded(){return e(this.#c)}set loaded(e){i(this.#c,e,!0)}hostManaged=!1;#l=r(``);get loadNotice(){return e(this.#l)}set loadNotice(e){i(this.#l,e,!0)}saveBlocked=!1;#u=r(!1);get keepLegacyUrl(){return e(this.#u)}set keepLegacyUrl(e){i(this.#u,e,!0)}replacedBeforeLoad=!1;previousKept=!1;storage=null;timer;snapshot(){return Un(n(E.data),{layout:n(this.layout),theme:n(this.theme),overviews:n(this.overviews),name:this.name,description:this.description,specs:this.specs})}overview(e){return Object.hasOwn(this.overviews,e)?this.overviews[e]:null}setOverview(e,t){let n=Object.fromEntries(Object.entries(this.overviews).filter(([t])=>t!==e));t&&(n[e]=t),this.overviews=n}setLayout(e){this.layout=x(e)?void 0:e}setSpecs(e){let t=e.trimEnd();this.specs=t.trim()?t:void 0}apply(e){E.load(e),this.layout=e.layout,this.theme=e.theme,this.name=e.name,this.description=e.description,this.specs=e.specs,this.overviews={...e.overviews??{}},$(e)}get unavailableNotice(){let e=[...E.unavailableRecipes,...E.unavailableFeatures];if(!e.length)return``;let t=e.length;return`${t} ${t===1?`recipe`:`recipes`} in this cookbook ${t===1?`isn't`:`aren't`} available in this version: ${e.join(`, `)}. They are kept when you save or export.`}removeUnavailable(){E.removeUnavailable(),this.scheduleSave()}setTheme(e){this.theme=Tn(e)}settings(){return Pe(this.snapshot())}setSettings(e){let t=Ne(this.snapshot(),e);E.rows=t.policies.map(e=>({...e})),$(t)}replace(e){this.replacementGeneration++,this.apply(e),this.loaded||(this.replacedBeforeLoad=!0),this.saveBlocked=!1,this.keepLegacyUrl=!1}reset(e={}){this.replacementGeneration++,E.clear(),$({policies:[]}),this.layout=void 0,e.preserveTheme||(this.theme=void 0),this.name=void 0,this.description=void 0,this.specs=void 0,this.overviews={},this.saveBlocked=!1,this.keepLegacyUrl=!1}importText(e){let t=In(e);return t.ok&&this.replace(t.cookbook),t}hydrate(e,t=u()){this.storage=t;let n=Bn(t);n.status===`loaded`&&(this.previousKept=n.previousKept),n.status===`loaded`&&!this.replacedBeforeLoad?(this.apply(n.cookbook),n.dropped?.length&&(this.loadNotice=`Some saved page customisations could not be used and were removed: ${n.dropped.join(` `)}`)):n.status===`unreadable`&&(this.saveBlocked=!n.keptAside,this.loadNotice=n.keptAside?`The saved cookbook could not be read (${n.reason}) and was kept aside; starting empty.`:`The saved cookbook could not be read (${n.reason}). Starting empty without overwriting it; import or reset to save again.`);let r=!1;if(qn(e)&&(n.status===`loaded`&&!Q(t,`smrt-planner:cookbook-doc:backup`,JSON.stringify(n.cookbook))&&(this.saveBlocked=!0),this.apply(Yn(e)),r=!0),this.persist=n.status===`unavailable`?`memory`:`unknown`,this.loaded=!0,r){let e=this.save();this.keepLegacyUrl=!e}return r}save(){if(clearTimeout(this.timer),this.timer=void 0,!this.loaded)return!1;if(this.hostManaged)return!0;if(this.saveBlocked)return this.persist=`memory`,!1;let e=Hn(this.storage,this.snapshot());return this.persist=e?`ok`:`memory`,e&&this.previousKept&&(this.previousKept=!Vn(this.storage,Ln)),e&&(this.keepLegacyUrl=!1),e}scheduleSave(){this.loaded&&!this.hostManaged&&(clearTimeout(this.timer),this.timer=setTimeout(()=>this.save(),300))}flush(){this.timer!==void 0&&this.save()}};export{j as A,N as C,lt as D,pt as E,ot as O,mt as S,gt as T,Sn as _,zn as a,Qt as b,q as c,gn as d,hn as f,En as g,mn as h,Z as i,at as j,M as k,vn as l,G as m,Zn as n,Fn as o,yn as p,$ as r,In as s,Xn as t,bn as u,on as v,ht as w,F as x,$t as y};
@@ -1 +1 @@
1
- import{n as e}from"./COiEfhsA.js";import{S as t}from"./Bs5WxZDd.js";import{a as n,r}from"./C7zBd-pD.js";import{t as i}from"./D042ejzG.js";function a(e){return t=>{t.allowLocalModels=e,t.useBrowserCache=!0;let n=globalThis.crossOriginIsolated===!0,r=t.backends?.onnx?.wasm;r&&!n&&(r.numThreads=1)}}var o=`onnx-community/whisper-tiny.en`,s={"moonshine-tiny":{id:`onnx-community/moonshine-tiny-ONNX`,bytes:322e5,englishOnly:!0,label:`Moonshine tiny`},"moonshine-base":{id:`onnx-community/moonshine-base-ONNX`,bytes:67e6,englishOnly:!0,label:`Moonshine base`},"whisper-tiny.en":{id:o,bytes:451e5,englishOnly:!0,label:`Whisper tiny (English)`},"whisper-base.en":{id:`onnx-community/whisper-base.en`,bytes:85e6,englishOnly:!0,label:`Whisper base (English)`},"whisper-small.en":{id:`onnx-community/whisper-small.en`,bytes:26e7,englishOnly:!0,label:`Whisper small (English)`}};function c(e){return e?s[e]?.id??e:o}function l(e){return Object.values(s).some(t=>t.id===e&&t.englishOnly)||/\.en$|moonshine/i.test(e)}var u=`audio/pcm;rate=16000;channels=1;encoding=f32le`;function d(){let e=Error(`Download cancelled`);return e.name=`AbortError`,e}function f(e){return e?.split(/[-_]/)[0]?.toLowerCase()||void 0}function p(e){return{data:new Uint8Array(e.slice().buffer),mimeType:u}}async function m(e){try{return await(e?e():i(`@happyvertical/speech/local`))}catch{throw new r(`local-speech`,'@happyvertical/speech could not be loaded. Install it (and @huggingface/transformers) and pass `loadSpeech: () => import("@happyvertical/speech/local")`.')}}var h=class{createWorker;loadSpeech;progress;worker=null;client=null;constructor(e,t,n){this.createWorker=e,this.loadSpeech=t,this.progress=n}ensure(){return this.client??=m(this.loadSpeech).then(e=>{let t=this.createWorker();return this.worker=t,new e.LocalTranscriberWorkerClient(t,{onProgress:this.progress})}),this.client}async isCached(e){return(await this.ensure()).isCached(e)}async preload(e,t){if(t?.aborted)throw d();let n=await this.ensure();if(!t)return n.preload(e);let r=()=>this.dispose();t.addEventListener(`abort`,r,{once:!0});try{await Promise.race([n.preload(e),new Promise((e,n)=>t.addEventListener(`abort`,()=>n(d()),{once:!0}))])}finally{t.removeEventListener(`abort`,r)}}async transcribe(e,t,n){return(await(await this.ensure()).transcribe({audio:p(e),model:t,language:f(n)})).text.trim()}dispose(){this.client?.then(e=>e.close()).catch(()=>void 0),this.worker?.terminate(),this.worker=null,this.client=null}},g=class{options;model;progress;transcriber=null;constructor(e,t,n){this.options=e,this.model=t,this.progress=n}ensure(){return this.transcriber??=m(this.options.loadSpeech).then(e=>new e.LocalTranscriber({model:this.model,device:this.options.device??`auto`,dtype:this.options.dtype??`q8`,...this.options.loadModule?{transformers:this.options.loadModule}:{},onProgress:this.progress,configureEnv:a(this.options.allowLocalModels??!1)})),this.transcriber}async isCached(e){return(await this.ensure()).isCached(e)}async preload(e,t){if(t?.aborted)throw d();await(await this.ensure()).preload(e,t).catch(e=>{throw t?.aborted?d():e})}async transcribe(e,t,n){return(await(await this.ensure()).transcribe({audio:p(e),model:t,language:f(n)})).text.trim()}dispose(){this.transcriber?.then(e=>e.dispose()).catch(()=>void 0),this.transcriber=null}},_=class{options;modelId;backend=null;loadPromise=null;listeners=new Set;_state=`idle`;constructor(e={}){this.options=e,this.modelId=c(e.model??e.modelId)}get state(){return this._state}get ready(){return this._state===`ready`}get englishOnly(){return l(this.modelId)}estimateSize(){return Object.values(s).find(e=>e.id===this.modelId)?.bytes??451e5}emit(e){for(let t of this.listeners)t(e)}onEngineProgress=e=>{if(e.status!==`progress_total`||typeof e.loaded!=`number`||typeof e.total!=`number`)return;let t=this.estimateSize(),n=e.total||t,r=e.total>0&&e.loaded>=e.total;this.emit({state:r?`extracting`:`downloading`,bytesLoaded:e.loaded,bytesTotal:n,percent:e.total?Math.round(e.loaded/e.total*100):0,currentFile:e.file})};getBackend(){if(this.backend)return this.backend;let{createWorker:e,loadSpeech:t}=this.options;return this.backend=e?new h(e,t,this.onEngineProgress):new g(this.options,this.modelId,this.onEngineProgress),this.backend}async isCached(){if(this._state===`ready`)return!0;try{return await this.getBackend().isCached(this.modelId)}catch{return!1}}load(e={}){let{onProgress:t,signal:n}=e;if(this._state===`ready`)return Promise.resolve();if(t&&this.listeners.add(t),!this.loadPromise){this._state=`loading`;let e=this.estimateSize();this.emit({state:`downloading`,bytesLoaded:0,bytesTotal:e,percent:0}),this.loadPromise=this.getBackend().preload(this.modelId,n).then(()=>{this._state=`ready`,this.emit({state:`complete`,bytesLoaded:e,bytesTotal:e,percent:100})}).catch(t=>{this._state=`idle`,this.backend?.dispose(),this.backend=null;let n=t instanceof Error?t:Error(String(t));throw n.name!==`AbortError`&&(this._state=`error`,this.emit({state:`error`,bytesLoaded:0,bytesTotal:e,percent:0,error:n.message})),n}).finally(()=>{this.loadPromise=null,this.listeners.clear()})}let r=this.loadPromise;return n?new Promise((e,t)=>{if(n.aborted)return t(d());n.addEventListener(`abort`,()=>t(d()),{once:!0}),r.then(e,t)}):r}transcribe(e,t){return this._state===`ready`?this.getBackend().transcribe(e,this.modelId,t):Promise.reject(Error(`The speech model is not loaded`))}dispose(){this.backend?.dispose(),this.backend=null,this.loadPromise=null,this.listeners.clear(),this._state=`idle`}};function v(e={}){return new _(e)}var y=e({LocalSpeechSTTAdapter:()=>w,WhisperLocalSTTAdapter:()=>w,WhisperWasmSTTAdapter:()=>w}),b={tiny:`onnx-community/whisper-tiny.en`,base:`onnx-community/whisper-base.en`,small:`onnx-community/whisper-small.en`},x=16e3,S=9e4;async function C(e){let t=await e.arrayBuffer(),n=new AudioContext({sampleRate:x});try{return(await n.decodeAudioData(t)).getChannelData(0).slice()}finally{n.close().catch(()=>void 0)}}var w=class{type;stopTimeoutMs=S;options;_model;makeCapture;capture=null;captureOff=null;_isListening=!1;language=`en`;session=0;starting=!1;stopping=null;resultListeners=new Set;errorListeners=new Set;startListeners=new Set;endListeners=new Set;constructor(e={}){this.options={type:`whisper-local`,defaultLanguage:`en`,...e},this.type=this.options.type,this.language=this.options.defaultLanguage??`en`,this.makeCapture=e.capture??t;let n=this.options.model??this.options.modelId??(this.options.modelSize?b[this.options.modelSize]:this.type===`moonshine`?`moonshine-tiny`:void 0);this._model=this.options.modelHandle??v({model:n,device:this.options.device,dtype:this.options.dtype,createWorker:this.options.createWorker,loadSpeech:this.options.loadSpeech,loadModule:this.options.loadModule,allowLocalModels:this.options.allowLocalModels})}get model(){return this._model}get initState(){switch(this._model.state){case`ready`:return`ready`;case`loading`:return`initializing`;case`error`:return`error`;default:return`uninitialized`}}estimateSize(){return this._model.estimateSize()}isCached(){return this._model.isCached()}load(e){return this._model.load(e)}async ensureInitialized(e){await this._model.load({onProgress:e??this.options.onProgress})}async prepare(){if(this._model.state!==`ready`){if(!await this._model.isCached())throw new n(this._model.modelId,this.type);await this.ensureInitialized()}}getCapabilities(){return{continuous:!1,interimResults:!1,languages:this._model.englishOnly?[`en`]:[`en`,`es`,`fr`,`de`,`it`,`pt`,`nl`,`pl`,`ru`,`zh`,`ja`,`ko`],accuracy:`medium`,requiresDownload:!0,downloadSize:this._model.estimateSize()}}async transcribePcm(e,t={}){return await this.prepare(),this._model.transcribe(e,t.language??this.options.defaultLanguage??`en`)}async start(e={}){if(this._isListening||this.starting)return;let t=++this.session;this.starting=!0;try{await this.prepare()}finally{this.starting=!1}if(t!==this.session||this._isListening)return;this.language=e.language??this.options.defaultLanguage??`en`;let n=this.makeCapture({maxDurationMs:this.options.maxDurationMs});try{await n.start()}catch(e){let t=e instanceof Error?e:Error(String(e));throw this.emitError(t),t}if(t!==this.session)n.cancel();else{this.capture=n,this.captureOff=n.onLimit(e=>{e===`time`?this.stop():(this.captureOff?.(),this.finish(t,null,Error(`The recording is too long`)))}),this._isListening=!0;for(let e of this.startListeners)e()}}stop(){if(this.stopping)return this.stopping;let e=this.capture;if(this.starting&&this.session++,!e||!this._isListening)return Promise.resolve();let t=this.session;return this.stopping=(async()=>{let n=null,r=null;try{let r=await e.stop();if(t!==this.session)return;let i=await C(r.audio);n=await this._model.transcribe(i,this.language)}catch(e){r=e instanceof Error?e:Error(String(e))}await this.finish(t,n,r)})(),this.stopping}async finish(e,t,n){if(e===this.session){if(this.captureOff?.(),this.captureOff=null,this.capture=null,this._isListening=!1,this.stopping=null,n)this.emitError(n);else if(t){let e={text:t,confidence:1,isFinal:!0,timestamp:Date.now()};for(let t of this.resultListeners)t(e)}for(let e of this.endListeners)e()}}emitError(e){for(let t of this.errorListeners)t(e)}abort(){if(this.starting&&this.session++,this._isListening){this.session++,this.captureOff?.(),this.captureOff=null,this.capture?.cancel(),this.capture=null,this._isListening=!1,this.stopping=null;for(let e of this.endListeners)e()}}isListening(){return this._isListening}onResult(e){return this.resultListeners.add(e),()=>this.resultListeners.delete(e)}onError(e){return this.errorListeners.add(e),()=>this.errorListeners.delete(e)}onStart(e){return this.startListeners.add(e),()=>this.startListeners.delete(e)}onEnd(e){return this.endListeners.add(e),()=>this.endListeners.delete(e)}async dispose(){this.abort(),this.options.modelHandle||this._model.dispose(),this.resultListeners.clear(),this.errorListeners.clear(),this.startListeners.clear(),this.endListeners.clear()}};export{s as n,v as r,y as t};
1
+ import{n as e}from"./COiEfhsA.js";import{S as t}from"./Qxx7HWld.js";import{a as n,r}from"./C7zBd-pD.js";import{t as i}from"./D042ejzG.js";function a(e){return t=>{t.allowLocalModels=e,t.useBrowserCache=!0;let n=globalThis.crossOriginIsolated===!0,r=t.backends?.onnx?.wasm;r&&!n&&(r.numThreads=1)}}var o=`onnx-community/whisper-tiny.en`,s={"moonshine-tiny":{id:`onnx-community/moonshine-tiny-ONNX`,bytes:322e5,englishOnly:!0,label:`Moonshine tiny`},"moonshine-base":{id:`onnx-community/moonshine-base-ONNX`,bytes:67e6,englishOnly:!0,label:`Moonshine base`},"whisper-tiny.en":{id:o,bytes:451e5,englishOnly:!0,label:`Whisper tiny (English)`},"whisper-base.en":{id:`onnx-community/whisper-base.en`,bytes:85e6,englishOnly:!0,label:`Whisper base (English)`},"whisper-small.en":{id:`onnx-community/whisper-small.en`,bytes:26e7,englishOnly:!0,label:`Whisper small (English)`}};function c(e){return e?s[e]?.id??e:o}function l(e){return Object.values(s).some(t=>t.id===e&&t.englishOnly)||/\.en$|moonshine/i.test(e)}var u=`audio/pcm;rate=16000;channels=1;encoding=f32le`;function d(){let e=Error(`Download cancelled`);return e.name=`AbortError`,e}function f(e){return e?.split(/[-_]/)[0]?.toLowerCase()||void 0}function p(e){return{data:new Uint8Array(e.slice().buffer),mimeType:u}}async function m(e){try{return await(e?e():i(`@happyvertical/speech/local`))}catch{throw new r(`local-speech`,'@happyvertical/speech could not be loaded. Install it (and @huggingface/transformers) and pass `loadSpeech: () => import("@happyvertical/speech/local")`.')}}var h=class{createWorker;loadSpeech;progress;worker=null;client=null;constructor(e,t,n){this.createWorker=e,this.loadSpeech=t,this.progress=n}ensure(){return this.client??=m(this.loadSpeech).then(e=>{let t=this.createWorker();return this.worker=t,new e.LocalTranscriberWorkerClient(t,{onProgress:this.progress})}),this.client}async isCached(e){return(await this.ensure()).isCached(e)}async preload(e,t){if(t?.aborted)throw d();let n=await this.ensure();if(!t)return n.preload(e);let r=()=>this.dispose();t.addEventListener(`abort`,r,{once:!0});try{await Promise.race([n.preload(e),new Promise((e,n)=>t.addEventListener(`abort`,()=>n(d()),{once:!0}))])}finally{t.removeEventListener(`abort`,r)}}async transcribe(e,t,n){return(await(await this.ensure()).transcribe({audio:p(e),model:t,language:f(n)})).text.trim()}dispose(){this.client?.then(e=>e.close()).catch(()=>void 0),this.worker?.terminate(),this.worker=null,this.client=null}},g=class{options;model;progress;transcriber=null;constructor(e,t,n){this.options=e,this.model=t,this.progress=n}ensure(){return this.transcriber??=m(this.options.loadSpeech).then(e=>new e.LocalTranscriber({model:this.model,device:this.options.device??`auto`,dtype:this.options.dtype??`q8`,...this.options.loadModule?{transformers:this.options.loadModule}:{},onProgress:this.progress,configureEnv:a(this.options.allowLocalModels??!1)})),this.transcriber}async isCached(e){return(await this.ensure()).isCached(e)}async preload(e,t){if(t?.aborted)throw d();await(await this.ensure()).preload(e,t).catch(e=>{throw t?.aborted?d():e})}async transcribe(e,t,n){return(await(await this.ensure()).transcribe({audio:p(e),model:t,language:f(n)})).text.trim()}dispose(){this.transcriber?.then(e=>e.dispose()).catch(()=>void 0),this.transcriber=null}},_=class{options;modelId;backend=null;loadPromise=null;listeners=new Set;_state=`idle`;constructor(e={}){this.options=e,this.modelId=c(e.model??e.modelId)}get state(){return this._state}get ready(){return this._state===`ready`}get englishOnly(){return l(this.modelId)}estimateSize(){return Object.values(s).find(e=>e.id===this.modelId)?.bytes??451e5}emit(e){for(let t of this.listeners)t(e)}onEngineProgress=e=>{if(e.status!==`progress_total`||typeof e.loaded!=`number`||typeof e.total!=`number`)return;let t=this.estimateSize(),n=e.total||t,r=e.total>0&&e.loaded>=e.total;this.emit({state:r?`extracting`:`downloading`,bytesLoaded:e.loaded,bytesTotal:n,percent:e.total?Math.round(e.loaded/e.total*100):0,currentFile:e.file})};getBackend(){if(this.backend)return this.backend;let{createWorker:e,loadSpeech:t}=this.options;return this.backend=e?new h(e,t,this.onEngineProgress):new g(this.options,this.modelId,this.onEngineProgress),this.backend}async isCached(){if(this._state===`ready`)return!0;try{return await this.getBackend().isCached(this.modelId)}catch{return!1}}load(e={}){let{onProgress:t,signal:n}=e;if(this._state===`ready`)return Promise.resolve();if(t&&this.listeners.add(t),!this.loadPromise){this._state=`loading`;let e=this.estimateSize();this.emit({state:`downloading`,bytesLoaded:0,bytesTotal:e,percent:0}),this.loadPromise=this.getBackend().preload(this.modelId,n).then(()=>{this._state=`ready`,this.emit({state:`complete`,bytesLoaded:e,bytesTotal:e,percent:100})}).catch(t=>{this._state=`idle`,this.backend?.dispose(),this.backend=null;let n=t instanceof Error?t:Error(String(t));throw n.name!==`AbortError`&&(this._state=`error`,this.emit({state:`error`,bytesLoaded:0,bytesTotal:e,percent:0,error:n.message})),n}).finally(()=>{this.loadPromise=null,this.listeners.clear()})}let r=this.loadPromise;return n?new Promise((e,t)=>{if(n.aborted)return t(d());n.addEventListener(`abort`,()=>t(d()),{once:!0}),r.then(e,t)}):r}transcribe(e,t){return this._state===`ready`?this.getBackend().transcribe(e,this.modelId,t):Promise.reject(Error(`The speech model is not loaded`))}dispose(){this.backend?.dispose(),this.backend=null,this.loadPromise=null,this.listeners.clear(),this._state=`idle`}};function v(e={}){return new _(e)}var y=e({LocalSpeechSTTAdapter:()=>w,WhisperLocalSTTAdapter:()=>w,WhisperWasmSTTAdapter:()=>w}),b={tiny:`onnx-community/whisper-tiny.en`,base:`onnx-community/whisper-base.en`,small:`onnx-community/whisper-small.en`},x=16e3,S=9e4;async function C(e){let t=await e.arrayBuffer(),n=new AudioContext({sampleRate:x});try{return(await n.decodeAudioData(t)).getChannelData(0).slice()}finally{n.close().catch(()=>void 0)}}var w=class{type;stopTimeoutMs=S;options;_model;makeCapture;capture=null;captureOff=null;_isListening=!1;language=`en`;session=0;starting=!1;stopping=null;resultListeners=new Set;errorListeners=new Set;startListeners=new Set;endListeners=new Set;constructor(e={}){this.options={type:`whisper-local`,defaultLanguage:`en`,...e},this.type=this.options.type,this.language=this.options.defaultLanguage??`en`,this.makeCapture=e.capture??t;let n=this.options.model??this.options.modelId??(this.options.modelSize?b[this.options.modelSize]:this.type===`moonshine`?`moonshine-tiny`:void 0);this._model=this.options.modelHandle??v({model:n,device:this.options.device,dtype:this.options.dtype,createWorker:this.options.createWorker,loadSpeech:this.options.loadSpeech,loadModule:this.options.loadModule,allowLocalModels:this.options.allowLocalModels})}get model(){return this._model}get initState(){switch(this._model.state){case`ready`:return`ready`;case`loading`:return`initializing`;case`error`:return`error`;default:return`uninitialized`}}estimateSize(){return this._model.estimateSize()}isCached(){return this._model.isCached()}load(e){return this._model.load(e)}async ensureInitialized(e){await this._model.load({onProgress:e??this.options.onProgress})}async prepare(){if(this._model.state!==`ready`){if(!await this._model.isCached())throw new n(this._model.modelId,this.type);await this.ensureInitialized()}}getCapabilities(){return{continuous:!1,interimResults:!1,languages:this._model.englishOnly?[`en`]:[`en`,`es`,`fr`,`de`,`it`,`pt`,`nl`,`pl`,`ru`,`zh`,`ja`,`ko`],accuracy:`medium`,requiresDownload:!0,downloadSize:this._model.estimateSize()}}async transcribePcm(e,t={}){return await this.prepare(),this._model.transcribe(e,t.language??this.options.defaultLanguage??`en`)}async start(e={}){if(this._isListening||this.starting)return;let t=++this.session;this.starting=!0;try{await this.prepare()}finally{this.starting=!1}if(t!==this.session||this._isListening)return;this.language=e.language??this.options.defaultLanguage??`en`;let n=this.makeCapture({maxDurationMs:this.options.maxDurationMs});try{await n.start()}catch(e){let t=e instanceof Error?e:Error(String(e));throw this.emitError(t),t}if(t!==this.session)n.cancel();else{this.capture=n,this.captureOff=n.onLimit(e=>{e===`time`?this.stop():(this.captureOff?.(),this.finish(t,null,Error(`The recording is too long`)))}),this._isListening=!0;for(let e of this.startListeners)e()}}stop(){if(this.stopping)return this.stopping;let e=this.capture;if(this.starting&&this.session++,!e||!this._isListening)return Promise.resolve();let t=this.session;return this.stopping=(async()=>{let n=null,r=null;try{let r=await e.stop();if(t!==this.session)return;let i=await C(r.audio);n=await this._model.transcribe(i,this.language)}catch(e){r=e instanceof Error?e:Error(String(e))}await this.finish(t,n,r)})(),this.stopping}async finish(e,t,n){if(e===this.session){if(this.captureOff?.(),this.captureOff=null,this.capture=null,this._isListening=!1,this.stopping=null,n)this.emitError(n);else if(t){let e={text:t,confidence:1,isFinal:!0,timestamp:Date.now()};for(let t of this.resultListeners)t(e)}for(let e of this.endListeners)e()}}emitError(e){for(let t of this.errorListeners)t(e)}abort(){if(this.starting&&this.session++,this._isListening){this.session++,this.captureOff?.(),this.captureOff=null,this.capture?.cancel(),this.capture=null,this._isListening=!1,this.stopping=null;for(let e of this.endListeners)e()}}isListening(){return this._isListening}onResult(e){return this.resultListeners.add(e),()=>this.resultListeners.delete(e)}onError(e){return this.errorListeners.add(e),()=>this.errorListeners.delete(e)}onStart(e){return this.startListeners.add(e),()=>this.startListeners.delete(e)}onEnd(e){return this.endListeners.add(e),()=>this.endListeners.delete(e)}async dispose(){this.abort(),this.options.modelHandle||this._model.dispose(),this.resultListeners.clear(),this.errorListeners.clear(),this.startListeners.clear(),this.endListeners.clear()}};export{s as n,v as r,y as t};