@happyvertical/smrt-planner 0.57.6 → 0.57.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (565) hide show
  1. package/agents/assistant.md +29 -2
  2. package/agents/shell.md +13 -0
  3. package/app/404.html +26 -29
  4. package/app/_app/immutable/assets/0.BaRFeYGU.css +1 -0
  5. package/app/_app/immutable/assets/AppShell.BkKNrxND.css +1 -0
  6. package/app/_app/immutable/assets/{ModelPage.FEM0ZnPM.css → ModelPage.SIoeO-AU.css} +1 -1
  7. package/app/_app/immutable/assets/app.BHwMQ9Zv.css +1 -0
  8. package/app/_app/immutable/assets/{forms.DXOeP4wZ.css → forms.BRdbPdvs.css} +1 -1
  9. package/app/_app/immutable/assets/icons.BDx21rPt.css +1 -0
  10. package/app/_app/immutable/assets/labels.Dxa6EyRI.css +1 -0
  11. package/app/_app/immutable/assets/planner.DOQVfcOi.css +1 -0
  12. package/app/_app/immutable/assets/state.C0UZEhxS.css +1 -0
  13. package/app/_app/immutable/chunks/{BPsie9Wr.js → B2uXaQfZ.js} +1 -1
  14. package/app/_app/immutable/chunks/{D2Ykv2Y3.js → BQLQsso4.js} +1 -1
  15. package/app/_app/immutable/chunks/BdOPgmQ_.js +11 -0
  16. package/app/_app/immutable/chunks/BeL8dJx9.js +4 -0
  17. package/app/_app/immutable/chunks/{DypPefJO.js → Bhd-3niN.js} +1 -1
  18. package/app/_app/immutable/chunks/{exPME6UK.js → BqEBz5Vq.js} +1 -1
  19. package/app/_app/immutable/chunks/{GdHEbDDH.js → BxyJ_Q7v.js} +1 -1
  20. package/app/_app/immutable/chunks/{Dyf3Cj8R.js → C2OYATC6.js} +1 -1
  21. package/app/_app/immutable/chunks/C6AANt9H.js +26 -0
  22. package/app/_app/immutable/chunks/{0as86J1A.js → C8FX0hli.js} +6 -6
  23. package/app/_app/immutable/chunks/{BSYvnYu8.js → CYhwv6d2.js} +1 -1
  24. package/app/_app/immutable/chunks/CdKHckEF.js +1 -0
  25. package/app/_app/immutable/chunks/CsaWd8kG.js +2 -0
  26. package/app/_app/immutable/chunks/Cwz7QFS4.js +2 -0
  27. package/app/_app/immutable/chunks/{CoXf-L_3.js → D3lXu_rt.js} +25 -25
  28. package/app/_app/immutable/chunks/{PsiVGwJV.js → D8MqcCKq.js} +1 -1
  29. package/app/_app/immutable/chunks/DF-0MxNw.js +1 -0
  30. package/app/_app/immutable/chunks/DGaFQflg.js +1 -0
  31. package/app/_app/immutable/chunks/DIgo5ngo.js +1 -0
  32. package/app/_app/immutable/chunks/{CdlkzC7D.js → Db12RzZi.js} +1 -1
  33. package/app/_app/immutable/chunks/{eNZ3ToP2.js → DfN2k_EX.js} +1 -1
  34. package/app/_app/immutable/chunks/DmHVTNcC.js +4 -0
  35. package/app/_app/immutable/chunks/{DrjdLb0M.js → DmdvNG82.js} +2 -2
  36. package/app/_app/immutable/chunks/{CwNhmq3e.js → DwIRC3h5.js} +1 -1
  37. package/app/_app/immutable/chunks/{Dzh-1KQR.js → FeyhlLIZ.js} +1 -1
  38. package/app/_app/immutable/chunks/ICDFUCZL.js +2 -0
  39. package/app/_app/immutable/chunks/{D31rqKs1.js → IDZmjRDr.js} +1 -1
  40. package/app/_app/immutable/chunks/JqlEoPqZ.js +1 -0
  41. package/app/_app/immutable/chunks/{D8rEUyzO.js → TcjpRcdI.js} +1 -1
  42. package/app/_app/immutable/chunks/Vt9hDpHd.js +1 -0
  43. package/app/_app/immutable/chunks/ezs6CGyc.js +1 -0
  44. package/app/_app/immutable/chunks/lUJaueNM.js +16 -0
  45. package/app/_app/immutable/entry/app.C5bxPKCP.js +2 -0
  46. package/app/_app/immutable/entry/start.CZvO61qD.js +1 -0
  47. package/app/_app/immutable/nodes/0.DFJFBCCB.js +7 -0
  48. package/app/_app/immutable/nodes/{1.CTatAlE5.js → 1.D_79m87b.js} +1 -1
  49. package/app/_app/immutable/nodes/{10.DHnK3kbB.js → 10.20u2-jxn.js} +1 -1
  50. package/app/_app/immutable/nodes/{11.Ck1kcQLu.js → 11.CvMq32jC.js} +1 -1
  51. package/app/_app/immutable/nodes/{12.oK17D56_.js → 12.Cd0cy1AC.js} +1 -1
  52. package/app/_app/immutable/nodes/{13.DlEsuw6F.js → 13.DYYS3YVQ.js} +1 -1
  53. package/app/_app/immutable/nodes/14.BEf5BJDn.js +1 -0
  54. package/app/_app/immutable/nodes/2.C_kLkHNl.js +24 -0
  55. package/app/_app/immutable/nodes/{3.DOL1VeVM.js → 3.CZw3hv8O.js} +1 -1
  56. package/app/_app/immutable/nodes/{4.CiKq5-ek.js → 4.WMU9NDex.js} +1 -1
  57. package/app/_app/immutable/nodes/{5.nKUg_W9L.js → 5.CuqxSfl4.js} +1 -1
  58. package/app/_app/immutable/nodes/{6.CVGw-hLa.js → 6.BXLQB7tR.js} +1 -1
  59. package/app/_app/immutable/nodes/{7.Clo6kG4w.js → 7.BZvxNeL2.js} +1 -1
  60. package/app/_app/immutable/nodes/{8.C3moca98.js → 8.Bj2O4pyx.js} +1 -1
  61. package/app/_app/immutable/nodes/{9.BnVJx5kW.js → 9.yeFzeUHj.js} +1 -1
  62. package/app/_app/version.json +1 -1
  63. package/app/advanced-styles/index.html +32 -33
  64. package/app/ai/index.html +37 -38
  65. package/app/blueprint/index.html +27 -30
  66. package/app/cookbook/index.html +27 -30
  67. package/app/index.html +36 -39
  68. package/app/m/ads/AdDeliveryTier/index.html +34 -35
  69. package/app/m/ads/AdEvent/index.html +34 -35
  70. package/app/m/ads/AdFormat/index.html +34 -35
  71. package/app/m/ads/AdGroup/index.html +34 -35
  72. package/app/m/ads/AdVariation/index.html +34 -35
  73. package/app/m/analytics/AnalyticsDataStream/index.html +34 -35
  74. package/app/m/analytics/AnalyticsEvent/index.html +34 -35
  75. package/app/m/analytics/AnalyticsProperty/index.html +34 -35
  76. package/app/m/analytics/AnalyticsReport/index.html +34 -35
  77. package/app/m/approvals/ApprovalEvent/index.html +34 -35
  78. package/app/m/approvals/ApprovalPolicy/index.html +34 -35
  79. package/app/m/approvals/ApprovalRequest/index.html +34 -35
  80. package/app/m/assets/Asset/attachments/index.html +36 -37
  81. package/app/m/assets/Asset/index.html +34 -35
  82. package/app/m/assets/AssetAssociation/index.html +35 -36
  83. package/app/m/assets/AssetMetafield/index.html +34 -35
  84. package/app/m/assets/AssetStatus/index.html +34 -35
  85. package/app/m/assets/AssetType/index.html +34 -35
  86. package/app/m/assets/Folder/index.html +34 -35
  87. package/app/m/chat/AgentSession/index.html +34 -35
  88. package/app/m/chat/ChatMessage/index.html +35 -36
  89. package/app/m/chat/ChatParticipant/index.html +35 -36
  90. package/app/m/chat/ChatReaction/index.html +34 -35
  91. package/app/m/chat/ChatRoom/index.html +34 -35
  92. package/app/m/chat/ChatThread/index.html +35 -36
  93. package/app/m/chat/VoiceGatewayTurn/index.html +34 -35
  94. package/app/m/chat/VoiceSession/index.html +34 -35
  95. package/app/m/commerce/Agreement/index.html +34 -35
  96. package/app/m/commerce/Cart/index.html +34 -35
  97. package/app/m/commerce/Contract/index.html +34 -35
  98. package/app/m/commerce/ContractLineItem/index.html +35 -36
  99. package/app/m/commerce/Customer/index.html +34 -35
  100. package/app/m/commerce/DocumentTax/index.html +34 -35
  101. package/app/m/commerce/Estimate/index.html +34 -35
  102. package/app/m/commerce/Fulfillment/index.html +34 -35
  103. package/app/m/commerce/FulfillmentLineItem/index.html +35 -36
  104. package/app/m/commerce/HistoricalCustomerFunds/index.html +34 -35
  105. package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +34 -35
  106. package/app/m/commerce/HistoricalSalesLine/index.html +34 -35
  107. package/app/m/commerce/Invoice/index.html +34 -35
  108. package/app/m/commerce/InvoiceLineItem/index.html +35 -36
  109. package/app/m/commerce/Lease/index.html +34 -35
  110. package/app/m/commerce/LicenseSale/index.html +34 -35
  111. package/app/m/commerce/Order/index.html +34 -35
  112. package/app/m/commerce/Payment/index.html +34 -35
  113. package/app/m/commerce/PaymentAllocation/index.html +35 -36
  114. package/app/m/commerce/PaymentInstrument/index.html +34 -35
  115. package/app/m/commerce/PaymentIntent/index.html +34 -35
  116. package/app/m/commerce/Payout/index.html +34 -35
  117. package/app/m/commerce/ProductionOrder/index.html +34 -35
  118. package/app/m/commerce/PurchaseContract/index.html +34 -35
  119. package/app/m/commerce/PurchaseOrder/index.html +34 -35
  120. package/app/m/commerce/SalesContract/index.html +34 -35
  121. package/app/m/commerce/SupplierQuote/index.html +34 -35
  122. package/app/m/commerce/TaxCode/index.html +34 -35
  123. package/app/m/commerce/TaxComponent/index.html +34 -35
  124. package/app/m/commerce/TaxSettings/index.html +34 -35
  125. package/app/m/commerce/TaxSummaryReport/index.html +34 -35
  126. package/app/m/commerce/Vendor/index.html +34 -35
  127. package/app/m/commerce/WholesaleOrder/index.html +34 -35
  128. package/app/m/content/Content/index.html +34 -35
  129. package/app/m/content/ContentContribution/index.html +34 -35
  130. package/app/m/content/ContentContributionAttachment/index.html +34 -35
  131. package/app/m/content/ContentContributionRevision/index.html +34 -35
  132. package/app/m/content/ContentContributionType/index.html +34 -35
  133. package/app/m/content/ContentContributor/index.html +34 -35
  134. package/app/m/content/ContentCorrection/index.html +34 -35
  135. package/app/m/content/ContentFeedSource/index.html +34 -35
  136. package/app/m/content/ContentGovernanceAssignment/index.html +34 -35
  137. package/app/m/content/ContentGovernancePolicy/index.html +34 -35
  138. package/app/m/content/ContentGovernanceProfile/index.html +34 -35
  139. package/app/m/content/ContentReference/index.html +34 -35
  140. package/app/m/content/ContentReview/index.html +34 -35
  141. package/app/m/content/ContentVersion/index.html +34 -35
  142. package/app/m/events/Event/index.html +34 -35
  143. package/app/m/events/EventParticipant/index.html +35 -36
  144. package/app/m/events/EventSeries/index.html +34 -35
  145. package/app/m/events/EventType/index.html +34 -35
  146. package/app/m/expenses/Expense/index.html +34 -35
  147. package/app/m/facts/Fact/index.html +34 -35
  148. package/app/m/facts/FactContent/index.html +34 -35
  149. package/app/m/facts/FactEvidence/index.html +34 -35
  150. package/app/m/facts/FactSource/index.html +34 -35
  151. package/app/m/facts/FactSubject/index.html +34 -35
  152. package/app/m/facts/FactTag/index.html +34 -35
  153. package/app/m/fields/FieldPolicy/index.html +34 -35
  154. package/app/m/fields/FieldPolicySuggestion/index.html +34 -35
  155. package/app/m/fields/FieldUsageCounter/index.html +34 -35
  156. package/app/m/images/Image/index.html +34 -35
  157. package/app/m/inventory/InventoryLocation/index.html +34 -35
  158. package/app/m/inventory/StockLevel/index.html +34 -35
  159. package/app/m/inventory/StockMovement/index.html +34 -35
  160. package/app/m/ledgers/Account/index.html +34 -35
  161. package/app/m/ledgers/Journal/index.html +34 -35
  162. package/app/m/ledgers/JournalEntry/index.html +35 -36
  163. package/app/m/ledgers/Ledger/index.html +34 -35
  164. package/app/m/manufacturing/Assembly/index.html +34 -35
  165. package/app/m/manufacturing/BillOfMaterials/index.html +34 -35
  166. package/app/m/manufacturing/BomLine/index.html +34 -35
  167. package/app/m/manufacturing/Operation/index.html +34 -35
  168. package/app/m/manufacturing/ProductionRun/index.html +34 -35
  169. package/app/m/manufacturing/ProductionRunCompletion/index.html +34 -35
  170. package/app/m/manufacturing/RoutingStep/index.html +34 -35
  171. package/app/m/marketing/Campaign/index.html +34 -35
  172. package/app/m/marketing/CampaignChannel/index.html +34 -35
  173. package/app/m/marketing/CampaignMetricSnapshot/index.html +34 -35
  174. package/app/m/messages/Account/index.html +34 -35
  175. package/app/m/messages/Attachment/index.html +34 -35
  176. package/app/m/messages/Blacklist/index.html +34 -35
  177. package/app/m/messages/Email/failed-sends/index.html +36 -37
  178. package/app/m/messages/Email/index.html +34 -35
  179. package/app/m/messages/Email/mailbox/index.html +36 -37
  180. package/app/m/messages/EmailAccount/index.html +34 -35
  181. package/app/m/messages/EmailAttachment/index.html +34 -35
  182. package/app/m/messages/EmailFolder/index.html +34 -35
  183. package/app/m/messages/Message/index.html +34 -35
  184. package/app/m/messages/MessagingEndpoint/index.html +34 -35
  185. package/app/m/messages/PersonaMessageRoute/index.html +34 -35
  186. package/app/m/messages/SlackAccount/index.html +34 -35
  187. package/app/m/messages/SlackMessage/index.html +34 -35
  188. package/app/m/messages/TelegramAccount/index.html +34 -35
  189. package/app/m/messages/Tweet/index.html +34 -35
  190. package/app/m/messages/TwitterAccount/index.html +34 -35
  191. package/app/m/messages/Whitelist/index.html +34 -35
  192. package/app/m/messages/ZulipAccount/index.html +34 -35
  193. package/app/m/places/Place/index.html +34 -35
  194. package/app/m/places/PlaceType/index.html +34 -35
  195. package/app/m/products/Category/index.html +34 -35
  196. package/app/m/products/Material/index.html +34 -35
  197. package/app/m/products/Product/index.html +34 -35
  198. package/app/m/products/Product/ingredients/index.html +36 -37
  199. package/app/m/products/ProductVariant/index.html +35 -36
  200. package/app/m/products/Sku/index.html +35 -36
  201. package/app/m/profiles/ApiKey/index.html +34 -35
  202. package/app/m/profiles/Bot/index.html +34 -35
  203. package/app/m/profiles/MagicLinkToken/index.html +34 -35
  204. package/app/m/profiles/NostrIdentity/index.html +34 -35
  205. package/app/m/profiles/OidcIdentity/index.html +34 -35
  206. package/app/m/profiles/Organization/index.html +34 -35
  207. package/app/m/profiles/Person/index.html +34 -35
  208. package/app/m/profiles/Profile/index.html +34 -35
  209. package/app/m/profiles/ProfileMetadata/index.html +34 -35
  210. package/app/m/profiles/ProfileMetafield/index.html +34 -35
  211. package/app/m/profiles/ProfileRelationship/index.html +34 -35
  212. package/app/m/profiles/ProfileRelationshipTerm/index.html +34 -35
  213. package/app/m/profiles/ProfileRelationshipType/index.html +34 -35
  214. package/app/m/profiles/ProfileType/index.html +34 -35
  215. package/app/m/projects/Comment/index.html +35 -36
  216. package/app/m/projects/Issue/index.html +34 -35
  217. package/app/m/projects/Label/index.html +34 -35
  218. package/app/m/projects/Project/index.html +34 -35
  219. package/app/m/projects/ProjectIntegration/index.html +34 -35
  220. package/app/m/projects/PullRequest/index.html +34 -35
  221. package/app/m/projects/Repository/index.html +34 -35
  222. package/app/m/properties/Property/index.html +34 -35
  223. package/app/m/properties/Zone/index.html +34 -35
  224. package/app/m/reports/RuntimeReport/index.html +38 -36
  225. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +34 -35
  226. package/app/m/reports/SmrtReportLock/index.html +34 -35
  227. package/app/m/reports/SmrtReportRefreshTask/index.html +34 -35
  228. package/app/m/reports/SmrtReportRun/index.html +34 -35
  229. package/app/m/reports/SmrtReportSchedule/index.html +34 -35
  230. package/app/m/reports/SmrtReportWatermark/index.html +34 -35
  231. package/app/m/sales/Agreement/index.html +34 -35
  232. package/app/m/sales/AttributionException/index.html +34 -35
  233. package/app/m/sales/AttributionPolicy/index.html +34 -35
  234. package/app/m/sales/Commission/index.html +34 -35
  235. package/app/m/sales/CommissionAdjustment/index.html +34 -35
  236. package/app/m/sales/CommissionPayout/index.html +34 -35
  237. package/app/m/sales/CommissionPlan/index.html +34 -35
  238. package/app/m/sales/Earner/index.html +34 -35
  239. package/app/m/sales/EarnerSourceAttribution/index.html +34 -35
  240. package/app/m/sales/EarningEvent/index.html +34 -35
  241. package/app/m/sales/ExecutedAgreement/index.html +34 -35
  242. package/app/m/sales/Lead/index.html +34 -35
  243. package/app/m/sales/Opportunity/index.html +34 -35
  244. package/app/m/sales/OpportunityConversion/index.html +34 -35
  245. package/app/m/sales/PipelineDefinition/index.html +34 -35
  246. package/app/m/sales/PipelineStage/index.html +35 -36
  247. package/app/m/sales/Referral/index.html +34 -35
  248. package/app/m/sales/ReferralAgreement/index.html +34 -35
  249. package/app/m/sales/ReferralLink/index.html +34 -35
  250. package/app/m/sales/ReferralProgram/index.html +34 -35
  251. package/app/m/sales/ReferralTermSnapshot/index.html +34 -35
  252. package/app/m/sales/ReferralTouch/index.html +34 -35
  253. package/app/m/sales/Referrer/index.html +34 -35
  254. package/app/m/sales/SalesActivity/index.html +34 -35
  255. package/app/m/sales/SalesRepresentative/index.html +34 -35
  256. package/app/m/sites/Site/index.html +34 -35
  257. package/app/m/sites/SiteAgentBinding/index.html +34 -35
  258. package/app/m/social/OAuthState/index.html +34 -35
  259. package/app/m/social/SocialAccount/index.html +34 -35
  260. package/app/m/social/SocialPost/index.html +34 -35
  261. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +34 -35
  262. package/app/m/subscriptions/BillingAdjustment/index.html +34 -35
  263. package/app/m/subscriptions/ClientCharge/index.html +34 -35
  264. package/app/m/subscriptions/CreditGrant/index.html +34 -35
  265. package/app/m/subscriptions/PricingRule/index.html +34 -35
  266. package/app/m/subscriptions/RetailCharge/index.html +34 -35
  267. package/app/m/subscriptions/SpendingPolicy/index.html +34 -35
  268. package/app/m/subscriptions/SubscriptionPlan/index.html +34 -35
  269. package/app/m/subscriptions/TenantSubscription/index.html +34 -35
  270. package/app/m/subscriptions/TenantUsageMetric/index.html +34 -35
  271. package/app/m/support/ServiceTimeEntry/index.html +34 -35
  272. package/app/m/support/SupportAiRun/index.html +34 -35
  273. package/app/m/support/SupportAvailability/index.html +34 -35
  274. package/app/m/support/SupportCase/index.html +34 -35
  275. package/app/m/support/SupportCaseEvent/index.html +34 -35
  276. package/app/m/support/SupportChannelBinding/index.html +34 -35
  277. package/app/m/support/SupportCharge/index.html +34 -35
  278. package/app/m/support/SupportCompensation/index.html +34 -35
  279. package/app/m/support/SupportCompensationPlan/index.html +34 -35
  280. package/app/m/support/SupportEscalation/index.html +34 -35
  281. package/app/m/support/SupportInteraction/index.html +34 -35
  282. package/app/m/support/SupportPlan/index.html +34 -35
  283. package/app/m/support/SupportPolicy/index.html +34 -35
  284. package/app/m/support/SupportQualification/index.html +34 -35
  285. package/app/m/support/SupportServiceTarget/index.html +34 -35
  286. package/app/m/support/SupportSpecialist/index.html +34 -35
  287. package/app/m/support/SupportWorkLink/index.html +34 -35
  288. package/app/m/tags/Tag/index.html +34 -35
  289. package/app/m/tags/TagAlias/index.html +34 -35
  290. package/app/m/timesheets/AttendanceBreak/index.html +34 -35
  291. package/app/m/timesheets/AttendancePunch/index.html +34 -35
  292. package/app/m/timesheets/AttendanceSegment/index.html +34 -35
  293. package/app/m/timesheets/ServiceChargeSnapshot/index.html +34 -35
  294. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +34 -35
  295. package/app/m/timesheets/ServiceTimeEntry/index.html +34 -35
  296. package/app/m/users/Group/index.html +34 -35
  297. package/app/m/users/GroupMember/index.html +34 -35
  298. package/app/m/users/GroupRole/index.html +34 -35
  299. package/app/m/users/Membership/index.html +35 -36
  300. package/app/m/users/MembershipOverride/index.html +34 -35
  301. package/app/m/users/Permission/index.html +34 -35
  302. package/app/m/users/Role/index.html +34 -35
  303. package/app/m/users/RolePermission/index.html +34 -35
  304. package/app/m/users/Session/index.html +34 -35
  305. package/app/m/users/Tenant/index.html +34 -35
  306. package/app/m/users/TenantIntegration/index.html +34 -35
  307. package/app/m/users/TenantPermissionOverride/index.html +34 -35
  308. package/app/m/users/User/index.html +34 -35
  309. package/app/m/video/Character/index.html +34 -35
  310. package/app/m/video/CharacterAsset/index.html +34 -35
  311. package/app/m/video/CompositeJob/index.html +34 -35
  312. package/app/m/video/Performer/index.html +34 -35
  313. package/app/m/video/PerformerAsset/index.html +34 -35
  314. package/app/m/video/Scene/index.html +34 -35
  315. package/app/m/video/SceneAsset/index.html +34 -35
  316. package/app/m/video/VideoComposition/index.html +34 -35
  317. package/app/m/video/VideoCompositionAsset/index.html +34 -35
  318. package/app/m/video/VideoSequence/index.html +34 -35
  319. package/app/m/video/VideoSequenceAsset/index.html +34 -35
  320. package/app/m/video/VideoShot/index.html +34 -35
  321. package/app/m/video/VideoShotAsset/index.html +34 -35
  322. package/app/m/video/VideoShotCharacter/index.html +34 -35
  323. package/app/m/video/VideoWorkflow/index.html +34 -35
  324. package/app/m/voice/VoiceOutput/index.html +34 -35
  325. package/app/m/voice/VoiceProfile/index.html +34 -35
  326. package/app/m/voice/VoiceSample/index.html +34 -35
  327. package/app/mcp.html +2 -2
  328. package/app/packages/ads/index.html +29 -32
  329. package/app/packages/analytics/index.html +29 -32
  330. package/app/packages/approvals/index.html +29 -32
  331. package/app/packages/assets/index.html +29 -32
  332. package/app/packages/chat/index.html +29 -32
  333. package/app/packages/comments/index.html +29 -32
  334. package/app/packages/commerce/index.html +29 -32
  335. package/app/packages/content/index.html +29 -32
  336. package/app/packages/events/index.html +29 -32
  337. package/app/packages/expenses/index.html +29 -32
  338. package/app/packages/facts/index.html +29 -32
  339. package/app/packages/fields/index.html +29 -32
  340. package/app/packages/human-resources/index.html +29 -32
  341. package/app/packages/images/index.html +29 -32
  342. package/app/packages/index.html +28 -31
  343. package/app/packages/ingestion/index.html +29 -32
  344. package/app/packages/inventory/index.html +29 -32
  345. package/app/packages/ledgers/index.html +29 -32
  346. package/app/packages/manufacturing/index.html +29 -32
  347. package/app/packages/marketing/index.html +29 -32
  348. package/app/packages/messages/index.html +29 -32
  349. package/app/packages/places/index.html +29 -32
  350. package/app/packages/preferences/index.html +29 -32
  351. package/app/packages/products/index.html +29 -32
  352. package/app/packages/profiles/index.html +29 -32
  353. package/app/packages/projects/index.html +29 -32
  354. package/app/packages/properties/index.html +29 -32
  355. package/app/packages/reports/index.html +29 -32
  356. package/app/packages/sales/index.html +29 -32
  357. package/app/packages/sites/index.html +29 -32
  358. package/app/packages/social/index.html +29 -32
  359. package/app/packages/subscriptions/index.html +29 -32
  360. package/app/packages/support/index.html +29 -32
  361. package/app/packages/tags/index.html +29 -32
  362. package/app/packages/timesheets/index.html +29 -32
  363. package/app/packages/users/index.html +29 -32
  364. package/app/packages/video/index.html +29 -32
  365. package/app/packages/voice/index.html +29 -32
  366. package/app/packages/webhooks/index.html +29 -32
  367. package/app/recipes/account-access/help/index.html +30 -33
  368. package/app/recipes/account-access/index.html +34 -36
  369. package/app/recipes/activity/help/index.html +30 -33
  370. package/app/recipes/activity/index.html +34 -36
  371. package/app/recipes/agreements/help/index.html +30 -33
  372. package/app/recipes/agreements/index.html +34 -36
  373. package/app/recipes/analytics.reports/help/index.html +30 -33
  374. package/app/recipes/analytics.reports/index.html +34 -36
  375. package/app/recipes/assets/help/index.html +30 -33
  376. package/app/recipes/assets/index.html +34 -36
  377. package/app/recipes/billing/help/index.html +30 -33
  378. package/app/recipes/billing/index.html +34 -36
  379. package/app/recipes/chat.assistant/help/index.html +30 -33
  380. package/app/recipes/chat.assistant/index.html +34 -36
  381. package/app/recipes/comments/help/index.html +30 -33
  382. package/app/recipes/comments/index.html +34 -36
  383. package/app/recipes/commerce.customers/help/index.html +30 -33
  384. package/app/recipes/commerce.customers/index.html +34 -36
  385. package/app/recipes/commerce.estimates/help/index.html +30 -33
  386. package/app/recipes/commerce.estimates/index.html +34 -36
  387. package/app/recipes/commerce.purchases/help/index.html +30 -33
  388. package/app/recipes/commerce.purchases/index.html +34 -36
  389. package/app/recipes/commerce.sales/help/index.html +30 -33
  390. package/app/recipes/commerce.sales/index.html +34 -36
  391. package/app/recipes/commerce.vendors/help/index.html +30 -33
  392. package/app/recipes/commerce.vendors/index.html +34 -36
  393. package/app/recipes/commerce.wholesale/help/index.html +30 -33
  394. package/app/recipes/commerce.wholesale/index.html +34 -36
  395. package/app/recipes/events.calendar/help/index.html +30 -33
  396. package/app/recipes/events.calendar/index.html +34 -36
  397. package/app/recipes/expenses.tracking/help/index.html +30 -33
  398. package/app/recipes/expenses.tracking/index.html +34 -36
  399. package/app/recipes/fields.form-customization/help/index.html +30 -33
  400. package/app/recipes/fields.form-customization/index.html +34 -36
  401. package/app/recipes/ingestion/help/index.html +30 -33
  402. package/app/recipes/ingestion/index.html +34 -36
  403. package/app/recipes/integrations/help/index.html +30 -33
  404. package/app/recipes/integrations/index.html +34 -36
  405. package/app/recipes/inventory.stock/help/index.html +30 -33
  406. package/app/recipes/inventory.stock/index.html +34 -36
  407. package/app/recipes/ledgers.bookkeeping/help/index.html +30 -33
  408. package/app/recipes/ledgers.bookkeeping/index.html +34 -36
  409. package/app/recipes/messages/help/index.html +30 -33
  410. package/app/recipes/messages/index.html +34 -36
  411. package/app/recipes/products/help/index.html +30 -33
  412. package/app/recipes/products/index.html +34 -36
  413. package/app/recipes/projects.tracker/help/index.html +30 -33
  414. package/app/recipes/projects.tracker/index.html +34 -36
  415. package/app/recipes/reports.materialized/help/index.html +30 -33
  416. package/app/recipes/reports.materialized/index.html +34 -36
  417. package/app/recipes/reports.runtime/help/index.html +31 -34
  418. package/app/recipes/reports.runtime/index.html +35 -37
  419. package/app/recipes/sales.pipeline/help/index.html +30 -33
  420. package/app/recipes/sales.pipeline/index.html +34 -36
  421. package/app/recipes/tags.taxonomy/help/index.html +30 -33
  422. package/app/recipes/tags.taxonomy/index.html +34 -36
  423. package/app/recipes/team-collaboration/help/index.html +30 -33
  424. package/app/recipes/team-collaboration/index.html +34 -36
  425. package/app/recipes/timesheets.time-entries/help/index.html +30 -33
  426. package/app/recipes/timesheets.time-entries/index.html +34 -36
  427. package/app/s/custom-accounts/index.html +27 -30
  428. package/app/s/custom-appointments/index.html +27 -30
  429. package/app/s/custom-billing/index.html +27 -30
  430. package/app/s/custom-bookings/index.html +27 -30
  431. package/app/s/custom-buying/index.html +27 -30
  432. package/app/s/custom-checkout/index.html +27 -30
  433. package/app/s/custom-classes/index.html +27 -30
  434. package/app/s/custom-clients/index.html +27 -30
  435. package/app/s/custom-events/index.html +27 -30
  436. package/app/s/custom-fleet/index.html +27 -30
  437. package/app/s/custom-gigs/index.html +27 -30
  438. package/app/s/custom-giving/index.html +27 -30
  439. package/app/s/custom-instruments/index.html +27 -30
  440. package/app/s/custom-jobs/index.html +27 -30
  441. package/app/s/custom-kitchen/index.html +27 -30
  442. package/app/s/custom-lessons/index.html +27 -30
  443. package/app/s/custom-material/index.html +27 -30
  444. package/app/s/custom-meetings/index.html +27 -30
  445. package/app/s/custom-members/index.html +27 -30
  446. package/app/s/custom-merch/index.html +27 -30
  447. package/app/s/custom-money/index.html +27 -30
  448. package/app/s/custom-paint/index.html +27 -30
  449. package/app/s/custom-parts/index.html +27 -30
  450. package/app/s/custom-rentals/index.html +27 -30
  451. package/app/s/custom-roastery/index.html +27 -30
  452. package/app/s/custom-schedule/index.html +27 -30
  453. package/app/s/custom-shelf/index.html +27 -30
  454. package/app/s/custom-shop/index.html +27 -30
  455. package/app/s/custom-students/index.html +27 -30
  456. package/app/s/custom-wholesale/index.html +27 -30
  457. package/app/s/custom-work/index.html +27 -30
  458. package/app/s/custom-yard/index.html +27 -30
  459. package/app/s/section-access-control/index.html +27 -30
  460. package/app/s/section-account-security/index.html +27 -30
  461. package/app/s/section-accounting/index.html +27 -30
  462. package/app/s/section-activity/index.html +27 -30
  463. package/app/s/section-agreements/index.html +27 -30
  464. package/app/s/section-analytics/index.html +27 -30
  465. package/app/s/section-assets/index.html +27 -30
  466. package/app/s/section-billing/index.html +27 -30
  467. package/app/s/section-calendar/index.html +27 -30
  468. package/app/s/section-catalog/index.html +27 -30
  469. package/app/s/section-chat.assistant/index.html +27 -30
  470. package/app/s/section-comments/index.html +27 -30
  471. package/app/s/section-fields.form-customization/index.html +27 -30
  472. package/app/s/section-ingestion/index.html +27 -30
  473. package/app/s/section-integrations/index.html +27 -30
  474. package/app/s/section-messages/index.html +27 -30
  475. package/app/s/section-more/index.html +27 -30
  476. package/app/s/section-operations/index.html +27 -30
  477. package/app/s/section-projects/index.html +27 -30
  478. package/app/s/section-purchasing/index.html +27 -30
  479. package/app/s/section-reports.materialized/index.html +27 -30
  480. package/app/s/section-reports.runtime/index.html +27 -30
  481. package/app/s/section-sales/index.html +27 -30
  482. package/app/s/section-taxonomy/index.html +27 -30
  483. package/app/s/section-team/index.html +27 -30
  484. package/app/s/section-work/index.html +27 -30
  485. package/dist/assistant/change.d.ts +10 -1
  486. package/dist/assistant/change.d.ts.map +1 -1
  487. package/dist/assistant/change.js +6 -1
  488. package/dist/assistant/prompt.d.ts +10 -1
  489. package/dist/assistant/prompt.d.ts.map +1 -1
  490. package/dist/assistant/prompt.js +42 -7
  491. package/dist/assistant/session.svelte.d.ts +6 -0
  492. package/dist/assistant/session.svelte.d.ts.map +1 -1
  493. package/dist/assistant/session.svelte.js +6 -0
  494. package/dist/assistant/transport.d.ts +23 -3
  495. package/dist/assistant/transport.d.ts.map +1 -1
  496. package/dist/assistant/transport.js +356 -13
  497. package/dist/catalog/catalog.json +107 -41
  498. package/dist/components/BrowserAssistant.svelte +26 -0
  499. package/dist/components/BrowserAssistant.svelte.d.ts.map +1 -1
  500. package/dist/components/ModelPage.svelte +36 -4
  501. package/dist/components/ModelPage.svelte.d.ts.map +1 -1
  502. package/dist/components/PlannerReports.svelte +61 -0
  503. package/dist/components/PlannerReports.svelte.d.ts +10 -0
  504. package/dist/components/PlannerReports.svelte.d.ts.map +1 -0
  505. package/dist/components/PlannerSavedReportsWidget.svelte +38 -0
  506. package/dist/components/PlannerSavedReportsWidget.svelte.d.ts +9 -0
  507. package/dist/components/PlannerSavedReportsWidget.svelte.d.ts.map +1 -0
  508. package/dist/components/ReportProposalCard.svelte +63 -0
  509. package/dist/components/ReportProposalCard.svelte.d.ts +17 -0
  510. package/dist/components/ReportProposalCard.svelte.d.ts.map +1 -0
  511. package/dist/components/SectionOverview.svelte +22 -1
  512. package/dist/components/SectionOverview.svelte.d.ts.map +1 -1
  513. package/dist/core/prompt.d.ts.map +1 -1
  514. package/dist/core/prompt.js +7 -1
  515. package/dist/core/reply.d.ts +6 -0
  516. package/dist/core/reply.d.ts.map +1 -1
  517. package/dist/core/reply.js +11 -0
  518. package/dist/data/planner-source.d.ts.map +1 -1
  519. package/dist/data/planner-source.js +4 -1
  520. package/dist/overviews/definitions.d.ts.map +1 -1
  521. package/dist/overviews/definitions.js +6 -1
  522. package/dist/overviews/registry.d.ts.map +1 -1
  523. package/dist/overviews/registry.js +9 -5
  524. package/dist/planner/Planner.svelte +17 -0
  525. package/dist/planner/Planner.svelte.d.ts.map +1 -1
  526. package/dist/planner/instance.d.ts +6 -0
  527. package/dist/planner/instance.d.ts.map +1 -1
  528. package/dist/planner/shell.d.ts.map +1 -1
  529. package/dist/planner/shell.js +3 -1
  530. package/dist/reports/intent.d.ts +106 -0
  531. package/dist/reports/intent.d.ts.map +1 -0
  532. package/dist/reports/intent.js +667 -0
  533. package/dist/reports/planner.d.ts +33 -0
  534. package/dist/reports/planner.d.ts.map +1 -0
  535. package/dist/reports/planner.js +60 -0
  536. package/dist/reports/sources.d.ts +36 -0
  537. package/dist/reports/sources.d.ts.map +1 -0
  538. package/dist/reports/sources.js +125 -0
  539. package/dist/reports/store.d.ts +64 -0
  540. package/dist/reports/store.d.ts.map +1 -0
  541. package/dist/reports/store.js +214 -0
  542. package/dist/smrt-version.d.ts +1 -1
  543. package/dist/smrt-version.js +1 -1
  544. package/package.json +54 -54
  545. package/app/_app/immutable/assets/0.C8CwV4Fz.css +0 -1
  546. package/app/_app/immutable/assets/AppShell.DrL8T9I9.css +0 -1
  547. package/app/_app/immutable/assets/app.4ScdTV_S.css +0 -1
  548. package/app/_app/immutable/assets/labels.AVmg4hBz.css +0 -1
  549. package/app/_app/immutable/assets/state.CkVocVUJ.css +0 -1
  550. package/app/_app/immutable/chunks/B7d7dGCP.js +0 -1
  551. package/app/_app/immutable/chunks/C3nKLKKd.js +0 -1
  552. package/app/_app/immutable/chunks/CXKa_xdk.js +0 -4
  553. package/app/_app/immutable/chunks/CdBvpdnq.js +0 -4
  554. package/app/_app/immutable/chunks/DBp81N-t.js +0 -24
  555. package/app/_app/immutable/chunks/DzRTyOpH.js +0 -1
  556. package/app/_app/immutable/chunks/GVQNHDp5.js +0 -1
  557. package/app/_app/immutable/chunks/M-CuJzQN.js +0 -1
  558. package/app/_app/immutable/chunks/ORlJSBRk.js +0 -1
  559. package/app/_app/immutable/chunks/gMSmS-_y.js +0 -2
  560. package/app/_app/immutable/chunks/jol435F5.js +0 -11
  561. package/app/_app/immutable/entry/app.C_C191oT.js +0 -2
  562. package/app/_app/immutable/entry/start.C01jT-Kj.js +0 -1
  563. package/app/_app/immutable/nodes/0._tbUx7Ky.js +0 -9
  564. package/app/_app/immutable/nodes/14.sDZ3z4Zh.js +0 -1
  565. package/app/_app/immutable/nodes/2.GYBHfqdI.js +0 -24
@@ -0,0 +1 @@
1
+ import{$ as e,bt as t,ct as n,gt as r,nt as i,ot as a,vt as o}from"./DG3qFFTE.js";import{F as s,lt as c}from"./D3lXu_rt.js";import{g as l}from"./BeL8dJx9.js";import{a as u,c as d,h as f,n as p,o as m}from"./Cwz7QFS4.js";import{b as h,c as g,o as _,r as v}from"./lUJaueNM.js";import{n as y}from"./FeyhlLIZ.js";var b=[`material`,`glass`,`studio`,`smrt`,`happyvertical`],x=`@happyvertical/smrt-commerce:`,S={currency:[`Order`,`PurchaseOrder`,`WholesaleOrder`,`Estimate`,`Invoice`,`Agreement`].map(e=>({model:`${x}${e}`,field:`currency`})),taxRate:[`InvoiceLineItem`,`ContractLineItem`].map(e=>({model:`${x}${e}`,field:`taxRate`})),pricesIncludeTax:[`Invoice`,`Contract`].map(e=>({model:`${x}${e}`,field:`lineAmountType`})),taxRounding:[`Invoice`,`Contract`].map(e=>({model:`${x}${e}`,field:`taxRoundingScope`})),paymentTerms:[...[`Order`,`WholesaleOrder`,`Estimate`,`Invoice`,`Agreement`].map(e=>({model:`${x}${e}`,field:`terms`})),{model:`${x}Customer`,field:`paymentTerms`}]},C={id:`more`,label:`More`},w=/^@[^/]+\/(?:smrt-)?([^:]+):(.+)$/;function T(e,t){let n=e.models.find(e=>e.id===t);if(n)return{packageId:n.packageId,name:n.name};let r=w.exec(t);return r?{packageId:r[1],name:r[2]}:{packageId:`unknown`,name:t}}var E=(e,t,n)=>`item:${e}:${t}${n?`:${n}`:``}`,D=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase()),O=(e,t)=>D(T(e,t).name);function ee(e,t){let n=new Map(e.recipes.map(e=>[e.id,e])),r=new Map;for(let i of[...t.recipes].sort()){let t=n.get(i);if(!t)continue;let a=t.section??{id:t.group?.id??t.id,label:t.group?.label??t.label},o=`section:${a.id}`,s=r.get(o)??{id:o,label:a.label,items:[]};for(let n of t.nav){let{packageId:t,name:r}=T(e,n.model),i=E(t,r,n.key);s.items.some(e=>e.id===i)||s.items.push({id:i,label:n.label})}r.set(o,s)}let i=[...r.values()].filter(e=>e.items.length>0),a=new Set(e.models.filter(e=>e.exposed!==!1).map(e=>e.id)),o=t.features.filter(e=>a.has(e));return o.length&&i.push({id:`section:${C.id}`,label:C.label,items:o.map(t=>{let{packageId:n,name:r}=T(e,t);return{id:E(n,r),label:D(r)}})}),i}var k=(e,t)=>{if(!t?.length)return e;let n=e=>{let n=t.indexOf(e);return n<0?2**53-1:n};return[...e].sort((e,t)=>n(e.id)-n(t.id))};function te(e,t){let n=t.layout,r=ee(e,t).map(e=>({id:e.id,label:e.label,defaultLabel:e.label,custom:!1,hidden:!1,items:e.items.map(e=>({id:e.id,label:e.label,defaultLabel:e.label,hidden:!1}))}));for(let e of n?.customSections??[])r.some(t=>t.id===e.id)||r.push({id:e.id,label:e.label,defaultLabel:e.label,custom:!0,hidden:!1,items:[]});for(let[e,t]of Object.entries(n?.moved??{})){let n=r.find(e=>e.id===t);if(n)for(let t of r){let r=t.items.findIndex(t=>t.id===e);r>=0&&t!==n&&n.items.push(...t.items.splice(r,1))}}let i=new Set(n?.hidden??[]);for(let e of r){let t=n?.sections?.[e.id]?.label?.trim();t&&!e.custom&&(e.label=t),e.hidden=i.has(e.id),e.items=k(e.items,n?.itemOrder?.[e.id]);for(let t of e.items){let e=n?.items?.[t.id]?.label?.trim();e&&(t.label=e),t.hidden=i.has(t.id)}}return k(r.filter(e=>e.custom||e.items.length>0),n?.sectionOrder)}var A=(e,t)=>e.models.find(e=>e.id===t),ne=e=>{let t={...e};for(let e of[`hidden`,`customSections`,`sectionOrder`])t[e]?.length||delete t[e];for(let e of[`sections`,`items`,`itemOrder`,`moved`,`panels`,`placements`])t[e]&&Object.keys(t[e]).length===0&&delete t[e];return Object.keys(t).length>1?t:void 0};function re(e,t,n){let r=e?structuredClone(e):{version:1},i=n.trim();if(t.custom)return i?(r.customSections=r.customSections?.map(e=>e.id===t.id?{...e,label:i}:e),ne(r)):e;let a={...r.sections??{}},o={...a[t.id]??{}};return!i||i===t.defaultLabel?delete o.label:o.label=i,Object.keys(o).length?a[t.id]=o:delete a[t.id],r.sections=a,ne(r)}function ie(e,t,n){let r=e?structuredClone(e):{version:1},i=n?.trim()??``,a={...r.items??{}},o={...a[t.id]??{}};return!i||i===t.defaultLabel?delete o.label:o.label=i,Object.keys(o).length?a[t.id]=o:delete a[t.id],r.items=a,ne(r)}function ae(e,t,n){let r=e?structuredClone(e):{version:1},i=(r.hidden??[]).filter(e=>e!==t);return r.hidden=n?[...i,t]:i,ne(r)}var oe=`https://s-m-r-t.dev/schemas/cookbook/v1.json`,se=new Set([`basic`,`advanced`,`hidden`]),ce=new Set([`api`,`mcp`,`cli`]),le=new Set([`light`,`dark`,`system`]),ue={borderRadius:[`none`,`sm`,`md`,`lg`,`xl`,`full`],density:[`comfortable`,`touch`],contrast:[`auto`,`standard`,`more`]},de=new Set([`header.start`,`header.center`,`header.end`,`footer.start`,`footer.center`,`footer.end`,`leftSidebar.header`,`leftSidebar.footer`,`rightSidebar.header`,`rightSidebar.footer`]),j=e=>typeof e==`object`&&!!e&&!Array.isArray(e),M=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`),fe=(e,t)=>j(e)&&!Object.hasOwn(e,`__proto__`)&&Object.values(e).every(t),pe=(e,t,n,r,i)=>{e.push({severity:t,code:n,path:r,message:i})},N=(e,t,n,r)=>pe(e,`error`,t,n,r),P=(e,t,n,r)=>pe(e,`warning`,t,n,r);function me(e,t,n){if(!j(e))return N(n,`invalid_type`,t,`${t} must be an object`);for(let r of[`objectRef`,`fieldName`])(typeof e[r]!=`string`||!e[r])&&N(n,`invalid_value`,`${t}.${r}`,`${t}.${r} must be a non-empty string`);e.scopeType!==`app`&&N(n,`invalid_value`,`${t}.scopeType`,`${t}.scopeType must be "app"`);for(let r of[`defaultValue`,`help`,`label`]){let i=e[r];i!=null&&typeof i!=`string`&&N(n,`invalid_type`,`${t}.${r}`,`${t}.${r} must be a string or null`)}let r=e.visibility;r!=null&&!(typeof r==`string`&&se.has(r))&&N(n,`invalid_value`,`${t}.visibility`,`${t}.visibility must be basic, advanced or hidden`);let i=e.displayOrder;i!=null&&!(typeof i==`number`&&Number.isFinite(i))&&N(n,`invalid_value`,`${t}.displayOrder`,`${t}.displayOrder must be a finite number`),e.locked!=null&&typeof e.locked!=`boolean`&&N(n,`invalid_type`,`${t}.locked`,`${t}.locked must be a boolean`)}function he(e,t){if(!j(e)||e.version!==1)return N(t,`invalid_value`,`layout`,`layout must be an object with version 1`);for(let n of[`sectionOrder`,`hidden`])e[n]!==void 0&&!M(e[n])&&N(t,`invalid_type`,`layout.${n}`,`layout.${n} must be a list of strings`);for(let n of[`itemOrder`,`moved`,`placements`]){let r=e[n];r!==void 0&&((n===`itemOrder`?fe(r,M):fe(r,e=>typeof e==`string`))||N(t,`invalid_type`,`layout.${n}`,n===`itemOrder`?`layout.itemOrder must map ids to lists of strings`:`layout.${n} must map ids to strings`))}if(j(e.placements))for(let[n,r]of Object.entries(e.placements))typeof r==`string`&&!de.has(r)&&N(t,`unknown_layout_slot`,`layout.placements.${n}`,`Unknown shell slot "${r}".`);for(let n of[`sections`,`items`,`panels`])e[n]!==void 0&&!fe(e[n],e=>j(e))&&N(t,`invalid_type`,`layout.${n}`,`layout.${n} must map ids to objects`);let n=e.customSections;n!==void 0&&!(Array.isArray(n)&&n.every(e=>j(e)&&typeof e.id==`string`&&typeof e.label==`string`))&&N(t,`invalid_type`,`layout.customSections`,`layout.customSections must be a list of { id, label }`)}function ge(e,t){if(!j(e))return N(t,`invalid_type`,`theme`,`theme must be an object`);e.preset!==void 0&&typeof e.preset!=`string`&&N(t,`invalid_type`,`theme.preset`,`theme.preset must be a string`),e.fontFamily!==void 0&&(typeof e.fontFamily!=`string`||!e.fontFamily)&&N(t,`invalid_value`,`theme.fontFamily`,`theme.fontFamily must be a non-empty string`),e.customCss!==void 0&&(typeof e.customCss==`string`?Array.from(e.customCss).length>65536&&N(t,`invalid_value`,`theme.customCss`,`theme.customCss must be at most 65,536 characters`):N(t,`invalid_type`,`theme.customCss`,`theme.customCss must be a string`)),e.colorScheme!==void 0&&!(typeof e.colorScheme==`string`&&le.has(e.colorScheme))&&N(t,`invalid_value`,`theme.colorScheme`,`theme.colorScheme must be light, dark or system`);for(let n of[`borderRadius`,`density`,`contrast`]){let r=ue[n],i=e[n];i!==void 0&&!(typeof i==`string`&&r.includes(i))&&N(t,`invalid_value`,`theme.${n}`,`theme.${n} must be one of ${r.join(`, `)}`)}let n=e.custom;n!==void 0&&(!j(n)||typeof n.primary!=`string`?N(t,`invalid_value`,`theme.custom`,`theme.custom must be an object with a string primary`):/^#[0-9a-fA-F]{6}$/.test(n.primary)?n.fontFamily!==void 0&&typeof n.fontFamily!=`string`&&N(t,`invalid_type`,`theme.custom.fontFamily`,`theme.custom.fontFamily must be a string`):N(t,`invalid_value`,`theme.custom.primary`,`theme.custom.primary must be a hex colour like #c2410c`))}var _e=/^[A-Za-z0-9][A-Za-z0-9_.:-]{0,95}$/,ve=/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/,ye=/^[a-z][a-z0-9-]{0,31}$/,be=e=>e===null||typeof e==`string`||typeof e==`number`&&Number.isFinite(e)||typeof e==`boolean`;function xe(e,t,n){return j(e)?[typeof e.id==`string`&&ve.test(e.id),typeof e.type==`string`&&ye.test(e.type),typeof e.span==`number`&&Number.isInteger(e.span)&&e.span>=1&&e.span<=4,j(e.options)&&Object.values(e.options).every(be),e.version===void 0||typeof e.version==`number`&&Number.isInteger(e.version)&&e.version>=1].every(Boolean)?e:(P(n,`malformed_overview_widget`,t,`${t} was dropped because it is not a valid overview widget`),null):(P(n,`malformed_overview_widget`,t,`${t} was dropped`),null)}function Se(e,t,n){return j(e)?(e.span===void 0||typeof e.span==`number`&&Number.isInteger(e.span)&&e.span>=1&&e.span<=4)&&(e.options===void 0||j(e.options)&&Object.values(e.options).every(be))&&(e.version===void 0||typeof e.version==`number`&&Number.isInteger(e.version)&&e.version>=1)?e:(P(n,`malformed_overview_change`,t,`${t} was dropped because it is not a valid widget change`),null):(P(n,`malformed_overview_change`,t,`${t} was dropped`),null)}function Ce(e,t,n){if(!j(e)||e.version!==1)return P(n,`malformed_overview`,t,`${t} was dropped because it must be an object with version 1`),null;let r={...e,version:1};for(let i of[`order`,`removed`])e[i]!==void 0&&!M(e[i])?(P(n,`malformed_overview_list`,`${t}.${i}`,`${t}.${i} was dropped because it must be a list of strings`),delete r[i]):e[i]!==void 0&&(r[i]=[...new Set(e[i])]);if(e.added!==void 0){if(!Array.isArray(e.added))P(n,`malformed_overview_widgets`,`${t}.added`,`${t}.added was dropped because it must be a list of widgets`),delete r.added;else{let i=e.added.flatMap((e,r)=>{let i=xe(e,`${t}.added[${r}]`,n);return i?[i]:[]});i.length?r.added=i:delete r.added}}if(e.changed!==void 0){if(!j(e.changed)||Object.hasOwn(e.changed,`__proto__`))P(n,`malformed_overview_changes`,`${t}.changed`,`${t}.changed was dropped because it must map widget ids to objects`),delete r.changed;else{let i={};for(let[r,a]of Object.entries(e.changed)){if(!ve.test(r)){P(n,`malformed_overview_change`,`${t}.changed.${r}`,`${t}.changed.${r} was dropped because its widget id is invalid`);continue}let e=Se(a,`${t}.changed.${r}`,n);e&&(i[r]=e)}Object.keys(i).length?r.changed=i:delete r.changed}}return r}function we(e,t={}){let n=[];if(!j(e))return N(n,`invalid_type`,``,`expected a JSON object`),{ok:!1,errors:[`expected a JSON object`],diagnostics:n};let{$schema:r,version:i}=e;r!==void 0&&r!==`https://s-m-r-t.dev/schemas/cookbook/v1.json`&&r!==`https://s-m-r-t.dev/schemas/blueprint/v1.json`&&N(n,`invalid_schema`,`$schema`,`$schema must be ${oe}`),i===void 0?N(n,`missing_field`,`version`,`version is required`):typeof i!=`number`||!Number.isInteger(i)?N(n,`invalid_type`,`version`,`version must be a whole number`):i>1?N(n,`unsupported_version`,`version`,`version ${i} is newer than this reader understands (1)`):i!==1&&N(n,`unsupported_version`,`version`,`version ${i} is not supported`),r===`https://s-m-r-t.dev/schemas/blueprint/v1.json`&&P(n,`migrated_schema`,`$schema`,`$schema uses the legacy blueprint URL; migrated`);for(let t of[`name`,`description`])e[t]!==void 0&&typeof e[t]!=`string`&&N(n,`invalid_type`,t,`${t} must be a string`);let a=[];if(!M(e.recipes))N(n,`invalid_type`,`recipes`,`recipes must be a list of recipe ids`);else if(a=[...new Set(e.recipes)].sort(),t.recipes){let r=new Set(t.recipes);for(let t of a)r.has(t)||N(n,`unknown_recipe`,`recipes[${e.recipes.indexOf(t)}]`,`recipes: unknown recipe "${t}"`)}let o=[];e.features!==void 0&&(M(e.features)?(o=[...new Set(e.features)].sort(),o.length!==e.features.length&&P(n,`duplicate_value`,`features`,`features listed a model more than once; deduplicated`)):N(n,`invalid_type`,`features`,`features must be a list of model names`));let s=[];if(!Array.isArray(e.policies))N(n,`invalid_type`,`policies`,`policies must be a list`);else for(let[t,r]of e.policies.entries())me(r,`policies[${t}]`,n),s.push(r);if(e.exposure!==void 0&&(fe(e.exposure,e=>M(e)&&e.every(e=>ce.has(e)))||N(n,`invalid_value`,`exposure`,`exposure must map model names to lists of api, mcp or cli`)),e.layout!==void 0&&he(e.layout,n),e.theme!==void 0&&ge(e.theme,n),j(e.theme)&&typeof e.theme.preset==`string`){let r=t.themePresets?new Set(t.themePresets):void 0;r&&!r.has(e.theme.preset)&&N(n,`unknown_theme_preset`,`theme.preset`,`Unknown theme preset "${e.theme.preset}".`)}if(j(e.layout)&&e.layout.version===1&&t.layout){let r=t.layout.sections?new Set(t.layout.sections):void 0,i=t.layout.items?new Set(t.layout.items):void 0,a=t.layout.placementItems?new Set(t.layout.placementItems):void 0;if(r&&Array.isArray(e.layout.customSections))for(let t of e.layout.customSections)j(t)&&typeof t.id==`string`&&r.add(t.id);let o=(e,t)=>t===`section`?r?.has(e)!==!1:t===`item`?i?.has(e)!==!1:r?.has(e)===!0||i?.has(e)===!0||!r&&!i,s=(e,t,r)=>{typeof e==`string`&&!o(e,r)&&N(n,`unknown_layout_id`,t,`Unknown layout ${r===`either`?`section or item`:r} "${e}".`)};if(M(e.layout.sectionOrder)&&e.layout.sectionOrder.forEach((e,t)=>{s(e,`layout.sectionOrder[${t}]`,`section`)}),M(e.layout.hidden)&&e.layout.hidden.forEach((e,t)=>{s(e,`layout.hidden[${t}]`,`either`)}),j(e.layout.itemOrder))for(let[t,n]of Object.entries(e.layout.itemOrder))s(t,`layout.itemOrder.${t}`,`section`),M(n)&&n.forEach((e,n)=>{s(e,`layout.itemOrder.${t}[${n}]`,`item`)});if(j(e.layout.moved))for(let[t,n]of Object.entries(e.layout.moved))s(t,`layout.moved.${t}`,`item`),s(n,`layout.moved.${t}`,`section`);for(let t of[`sections`,`items`])if(j(e.layout[t]))for(let n of Object.keys(e.layout[t]))s(n,`layout.${t}.${n}`,t===`sections`?`section`:`item`);if(j(e.layout.placements))for(let t of Object.keys(e.layout.placements))a&&!a.has(t)&&N(n,`unknown_layout_id`,`layout.placements.${t}`,`Unknown layout placement item "${t}".`)}let c={};if(e.overviews!==void 0){if(!j(e.overviews)||Object.hasOwn(e.overviews,`__proto__`))N(n,`invalid_type`,`overviews`,`overviews must map overview ids to overrides`);else{let r=t.overviewIds?new Set(t.overviewIds):void 0;for(let[i,a]of Object.entries(e.overviews)){let e=`overviews.${i}`;if(!_e.test(i)){P(n,`invalid_overview_id`,e,`${e} was dropped because its overview id is invalid`);continue}if(r&&!r.has(i)){P(n,`unknown_overview`,e,`Unknown overview "${i}" was dropped.`);continue}let o=Ce(a,e,n);if(!o)continue;if(!t.validateOverview){c[i]=o;continue}let s;try{s=t.validateOverview(i,o)}catch{P(n,`overview_validation_failed`,e,`Overview "${i}" was dropped because its host validator failed.`);continue}for(let t of s.diagnostics??[])P(n,t.code,t.path||e,t.message);!s.ok&&s.diagnostics.length===0&&P(n,`overview_rejected`,e,`Overview "${i}" was rejected by its host validator and dropped.`),s.ok&&s.override&&(c[i]=s.override)}}}let l=n.filter(e=>e.severity===`error`).map(e=>e.message);if(l.length)return{ok:!1,errors:l,diagnostics:n};let u={...e,$schema:oe,version:1,recipes:a,features:o,policies:s};return e.exposure!==void 0&&(u.exposure=e.exposure),e.layout!==void 0&&(u.layout=e.layout),e.theme!==void 0&&(u.theme=e.theme),delete u.overviews,Object.keys(c).length&&(u.overviews=c),{ok:!0,cookbook:u,warnings:n.filter(e=>e.severity===`warning`).map(e=>e.message),diagnostics:n}}var F=e=>e===void 0?e:structuredClone(e),Te=(e,t)=>JSON.stringify(e??null)===JSON.stringify(t??null),Ee=()=>({$schema:oe,version:1,recipes:[],features:[],policies:[]});function De(e){return!e.recipes.length&&!e.features.length&&!e.policies.length&&!Object.keys(e.exposure??{}).length&&!e.layout&&!e.theme&&!Object.keys(e.overviews??{}).length}var Oe=e=>[...new Set(e)].sort();function ke(e){let t=new Set([`$schema`,`version`,`name`,`description`,`recipes`,`features`,`policies`,`exposure`,`layout`,`theme`,`overviews`]),n={$schema:oe,version:1,...e.name?{name:e.name}:{},...e.description?{description:e.description}:{},recipes:Oe(e.recipes),features:Oe(e.features),policies:[...e.policies].sort((e,t)=>e.objectRef.localeCompare(t.objectRef)||e.fieldName.localeCompare(t.fieldName)).map(e=>({...e}))},r=Object.fromEntries(Object.keys(e.exposure??{}).sort().filter(t=>e.exposure?.[t]?.length).map(t=>[t,[...e.exposure?.[t]??[]].sort()]));Object.keys(r).length&&(n.exposure=r),e.layout&&(n.layout=F(e.layout));let i=Xe(e.theme);i&&(n.theme=i);let a=Object.entries(e.overviews??{}).sort(([e],[t])=>e<t?-1:+(e>t));a.length&&(n.overviews=Object.fromEntries(a.map(([e,t])=>[e,F(t)])));for(let[r,i]of Object.entries(e))t.has(r)||(n[r]=F(i));return n}var I=e=>new Map(e.recipes.map(e=>[e.id,e]));function Ae(e,t){let n=new Set,r=e=>{let i=t.get(e);if(i&&!n.has(e)){n.add(e);for(let e of i.requires)r(e)}};for(let t of e)r(t);let i=!0;for(;i;){i=!1;for(let e of[...n])for(let a of t.get(e)?.requiresAny??[]){if(a.some(e=>n.has(e)))continue;let e=a.find(e=>t.has(e));e&&(r(e),i=!0)}}return Oe(n)}function je(e,t){let n=I(e);return new Set([...t.recipes.flatMap(e=>n.get(e)?.models??[]),...t.features])}function Me(e){return e.settingTargets??S}function Ne(e,t){return Object.values(Me(e)).some(e=>e.some(e=>e.model===t.objectRef&&e.field===t.fieldName))}function Pe(e,t){let n=je(e,t),r={...t,policies:t.policies.filter(t=>n.has(t.objectRef)||Ne(e,t))};if(t.exposure){let e=Object.fromEntries(Object.entries(t.exposure).filter(([e])=>n.has(e)));Object.keys(e).length?r.exposure=e:delete r.exposure}return r}var Fe=(e,t)=>{let n=I(e);return t.recipes.filter(e=>n.has(e))},Ie=(e,t)=>{let n=I(e);return t.recipes.filter(e=>!n.has(e))};function Le(e,t){let n=new Set(e),r=new Set(t);return{added:t.filter(e=>!n.has(e)),removed:e.filter(e=>!r.has(e))}}function Re(e,t,n){let r=I(e),i=Fe(e,t),a=Ae([...i,...n],r);return{doc:{...t,recipes:Oe([...a,...Ie(e,t)])},changes:{...Le(i,a),kept:[]}}}function ze(e,t,n){let r=I(e),i=Fe(e,t),a=new Set(n),o=Ae(i.filter(e=>!a.has(e)),r),s=Pe(e,{...t,recipes:Oe([...o,...Ie(e,t)])}),{added:c,removed:l}=Le(i,o);return{doc:s,changes:{added:c,removed:l,kept:n.filter(e=>o.includes(e)&&i.includes(e))}}}function Be(e,t,n,r){let i=new Set(t.features);for(let e of n)r?i.add(e):i.delete(e);let a=[...i].sort(),o={...t,features:a};return r||(o=Pe(e,o)),{doc:o,changes:{...Le(t.features,a),kept:[]}}}var Ve=(e,t)=>({added:[...e.added,...t.added],removed:[...e.removed,...t.removed],kept:[...e.kept,...t.kept]}),He={currency:`USD`,taxRate:0,paymentTerms:``,pricesIncludeTax:!1,taxRounding:`line`},Ue=[`currency`,`taxRate`,`paymentTerms`,`pricesIncludeTax`,`taxRounding`];function We(e){if(e?.defaultValue!==void 0&&e.defaultValue!==null)try{return JSON.parse(e.defaultValue)}catch{return}}var Ge=(e,t,n)=>e.find(e=>e.scopeType===`app`&&e.objectRef===t&&e.fieldName===n);function Ke(e,t){let n=Me(e),r={...He},i=(e,r)=>{for(let{model:i,field:a}of n[e]){let e=We(Ge(t.policies,i,a));if(typeof e===r)return e}},a=i(`currency`,`string`),o=i(`taxRate`,`number`),s=i(`paymentTerms`,`string`),c=i(`pricesIncludeTax`,`string`),l=i(`taxRounding`,`string`);return typeof a==`string`&&(r.currency=a),typeof o==`number`&&(r.taxRate=o),typeof s==`string`&&(r.paymentTerms=s),(c===`inclusive`||c===`exclusive`)&&(r.pricesIncludeTax=c===`inclusive`),(l===`line`||l===`document`)&&(r.taxRounding=l),r}var qe=e=>e==null||e===``;function Je(e,t,n,r){let i=I(e);for(let e of t.recipes){let t=i.get(e)?.options?.[n]?.fields?.[r];if(t&&`default`in t)return t.default}return A(e,n)?.fields?.find(e=>e.name===r)?.default}function Ye(e,t,n){let r=Me(e),i=t.policies.map(e=>({...e}));for(let a of Ue){let o=n[a],s=a===`paymentTerms`?String(o).trim():a===`currency`?String(o).trim().toUpperCase():a===`pricesIncludeTax`?o?`inclusive`:`exclusive`:o;for(let{model:n,field:o}of r[a]){let r=Je(e,t,n,o),c=!qe(s)&&!(!qe(r)&&r===s)&&!(qe(r)&&a===`taxRate`&&s===0),l=Ge(i,n,o);if(c){let e=JSON.stringify(s);l?l.defaultValue=e:i.push({objectRef:n,fieldName:o,scopeType:`app`,defaultValue:e})}else l&&(delete l.defaultValue,Object.keys(l).length<=3&&(i=i.filter(e=>e!==l)))}}return{...t,policies:i}}function Xe(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 Ze(e){let t=e?.colorScheme??`system`,n=e?.custom?`brand colour ${e.custom.primary}`:e?.preset??`smrt`;return t===`system`?n:`${n}, ${t}`}function Qe(e,t){let n={...e.theme??{}};t.preset&&(n.preset=t.preset,delete n.custom),t.primary&&(n.custom={primary:t.primary.toLowerCase(),...e.theme?.custom?.fontFamily?{fontFamily:e.theme.custom.fontFamily}:{}}),t.colorScheme&&(n.colorScheme=t.colorScheme),t.borderRadius&&(n.borderRadius=t.borderRadius),t.density&&(n.density=t.density),t.contrast&&(n.contrast=t.contrast),t.fontFamily===null?(delete n.fontFamily,n.custom?.fontFamily&&(n.custom={primary:n.custom.primary})):t.fontFamily!==void 0&&(n.fontFamily=t.fontFamily);let r=Xe(n),i={...e};return r?i.theme=r:delete i.theme,i}function $e(e,t){let n=[],r=(e,t,r,i)=>n.push({severity:e,code:t,path:r,message:i}),i=we(t);if(!i.ok){for(let e of i.diagnostics.filter(e=>e.severity===`error`))r(`error`,`invalid_document`,e.path,e.message);return n}for(let e of i.diagnostics)r(e.severity,e.code===`migrated_schema`?`migrated`:e.code,e.path,e.message);let a=i.cookbook,o=I(e),s=te(e,{...a,layout:void 0}),c=we(a,{themePresets:e.themePresets??b,layout:{sections:s.map(e=>e.id),items:s.flatMap(e=>e.items.map(e=>e.id)),...e.placementItems?{placementItems:e.placementItems}:{}},overviewIds:[...s.map(e=>e.id),...(a.layout?.customSections??[]).map(e=>e.id)]});for(let e of c.diagnostics)(e.code===`unknown_theme_preset`||e.code===`unknown_layout_id`||e.code===`unknown_overview`)&&r(e.code===`unknown_layout_id`&&!e.path.startsWith(`layout.placements.`)?`warning`:e.severity,e.code===`unknown_theme_preset`?`unknown_preset`:e.code,e.path,e.message);for(let[e,t]of a.recipes.entries())o.has(t)||r(`error`,`unknown_recipe`,`recipes[${e}]`,`Unknown recipe "${t}".`);let l=new Set(Ae(a.recipes,o));for(let e of l)a.recipes.includes(e)||r(`error`,`missing_requirement`,`recipes`,`A recipe needs "${e}", which is not listed.`);for(let[t,n]of a.features.entries()){let i=A(e,n);i?i.exposed===!1&&r(`error`,`model_not_exposed`,`features[${t}]`,`${n} cannot be added as a feature.`):r(`error`,`unknown_model`,`features[${t}]`,`Unknown model "${n}".`)}let u=je(e,a);for(let[t,n]of a.policies.entries()){let i=`policies[${t}]`,a=A(e,n.objectRef);a?(a.fields&&!a.fields.some(e=>e.name===n.fieldName&&!e.system)&&r(`error`,`unknown_field`,`${i}.fieldName`,`${a.name} has no field "${n.fieldName}".`),!u.has(n.objectRef)&&!Ne(e,n)&&r(`warning`,`policy_not_covered`,i,`${a.name} is not in the app, so this row has no effect.`)):r(`error`,`unknown_model`,`${i}.objectRef`,`Unknown model "${n.objectRef}".`)}for(let t of Object.keys(a.exposure??{}))A(e,t)||r(`error`,`unknown_model`,`exposure.${t}`,`Unknown model "${t}".`);return n}var L=(e,t,n={})=>({ok:!1,error:{code:e,message:t,...n}}),R=(e,t=``,n={})=>({ok:!0,state:e,summary:t,...n}),et=`This replaces the recipes, options, menu and look. Send replace: true to confirm.`,z=e=>e.join(`, `);function tt(e){return`${(e??``).normalize(`NFD`).replace(/\p{M}/gu,``).toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||`my-app`}.cookbook.json`}var nt=e=>`${JSON.stringify(e,null,2)}\n`;function rt(e,t){let n=new Map(e.recipes.map(e=>[e.id,e])),r=t.recipes.filter(e=>n.has(e)),i=t.recipes.filter(e=>!n.has(e));return ke(Pe(e,{...F(t),recipes:[...Ae(r,n),...i]}))}function it(e,t){return t?e.cookbooks?.find(e=>e.id===t)?.name:void 0}var at=(e,t)=>{let n=t=>e.recipes.find(e=>e.id===t)?.label??t;return[t.added.length?`Added ${z(t.added.map(n))}.`:``,t.removed.length?`Removed ${z(t.removed.map(n))}.`:``,t.kept.length?`Kept ${z(t.kept.map(n))} (needed).`:``].filter(Boolean).join(` `)},ot=(e,t)=>[t.added.length?`Added ${z(t.added.map(t=>O(e,t)))}.`:``,t.removed.length?`Removed ${z(t.removed.map(t=>O(e,t)))}.`:``].filter(Boolean).join(` `),st=e=>`${Number((e*100).toFixed(4))}%`,B=(e,t)=>({...e,doc:ke(t)});function ct(e,t){let n=te(e,t);return{sections:n,section:e=>n.find(t=>t.id===e),item:e=>n.flatMap(e=>e.items).find(t=>t.id===e)}}var lt=(e,t)=>{let n={...e};return t?n.layout=t:delete n.layout,n},ut={add_recipes(e,t,{ids:n}){let r=n.filter(t=>!e.recipes.some(e=>e.id===t));if(r.length)return L(`not_found`,`No such recipe: ${z(r)}.`,{path:`input.ids`});let{doc:i,changes:a}=Re(e,t.doc,n);return R(B(t,i),at(e,a),{changes:a})},remove_recipes(e,t,{ids:n}){let{doc:r,changes:i}=ze(e,t.doc,n);return R(B(t,r),at(e,i),{changes:i})},add_features(e,t,{ids:n}){let r=n.filter(t=>!A(e,t)?.exposed);if(r.length)return L(`not_found`,`No such model to add: ${z(r)}.`,{path:`input.ids`});let{doc:i,changes:a}=Be(e,t.doc,n,!0);return R(B(t,i),ot(e,a),{changes:a})},remove_features(e,t,{ids:n}){let{doc:r,changes:i}=Be(e,t.doc,n,!1);return R(B(t,r),ot(e,i),{changes:i})},add_cookbook(e,t,{id:n}){let r=e.cookbooks?.find(e=>e.id===n);if(!r)return L(`not_found`,`No cookbook "${n}".`,{path:`input.id`});let i=Re(e,t.doc,r.document.recipes),a=Be(e,i.doc,r.document.features.filter(t=>A(e,t)?.exposed),!0),o=Ve(i.changes,a.changes);return R(B(t,a.doc),o.added.length?`Added the ${r.name} cookbook.`:``,{changes:o})},remove_cookbook(e,t,{id:n}){let r=e.cookbooks?.find(e=>e.id===n);if(!r)return L(`not_found`,`No cookbook "${n}".`,{path:`input.id`});let i=ze(e,t.doc,r.document.recipes),a=Be(e,i.doc,r.document.features,!1),o=Ve(i.changes,a.changes);return R(B(t,a.doc),[at(e,i.changes),ot(e,a.changes)].filter(Boolean).join(` `),{changes:o})},apply_cookbook(e,t,{id:n,replace:r}){let i=e.cookbooks?.find(e=>e.id===n);return i?!r&&!De(t.doc)?L(`confirmation_required`,et):R({doc:rt(e,i.document),applied:n},`${i.name} set up.`):L(`not_found`,`No cookbook "${n}".`,{path:`input.id`})},import_cookbook(e,t,{document:n,replace:r}){let i=we(n);if(!i.ok)return L(`invalid_input`,i.errors[0]??`Not a cookbook.`,{path:`input.document`,details:{errors:i.errors}});if(!r&&!De(t.doc))return L(`confirmation_required`,et);let a=i.cookbook.recipes.length;return R({doc:rt(e,i.cookbook),applied:null},`Imported ${a} ${a===1?`recipe`:`recipes`}.`,i.warnings.length?{warnings:i.warnings}:{})},set_settings(e,t,n){let r=Ke(e,t.doc),i={...r},a=[];if(n.currency!==void 0){let t=n.currency.trim().toUpperCase();if(e.currencies&&!e.currencies.includes(t))return L(`invalid_input`,`${t} is not a known currency.`,{path:`input.currency`});if(!/^[A-Z]{3}$/.test(t))return L(`invalid_input`,`currency must be a three-letter code.`,{path:`input.currency`});t!==r.currency&&(i.currency=t,a.push(`currency ${t}`))}if(n.taxRate!==void 0){let e=Number((n.taxRate/100).toFixed(6));e!==r.taxRate&&(i.taxRate=e,a.push(`tax ${st(e)}`))}if(n.paymentTerms!==void 0){let e=[...n.paymentTerms].map(e=>e.charCodeAt(0)<32||e.charCodeAt(0)===127?` `:e).join(``).trim();if(!e)return L(`invalid_input`,`paymentTerms must not be empty.`,{path:`input.paymentTerms`});e!==r.paymentTerms&&(i.paymentTerms=e,a.push(`terms ${e}`))}if(n.pricesIncludeTax!==void 0&&n.pricesIncludeTax!==r.pricesIncludeTax&&(i.pricesIncludeTax=n.pricesIncludeTax,a.push(n.pricesIncludeTax?`prices include tax`:`prices exclude tax`)),n.taxRounding!==void 0&&n.taxRounding!==r.taxRounding&&(i.taxRounding=n.taxRounding,a.push(`${n.taxRounding} tax rounding`)),!a.length)return R(t);let o=a.join(`, `);return R(B(t,Ye(e,t.doc,i)),`${o[0].toUpperCase()}${o.slice(1)}.`)},set_policy(e,t,n){let r=A(e,n.model);if(!r)return L(`not_found`,`No such model: ${n.model}.`,{path:`input.model`});if(r.fields){let e=r.fields.find(e=>e.name===n.field);if(!e||e.system)return L(`not_found`,`${r.name} has no field ${n.field}.`,{path:`input.field`})}if(!je(e,t.doc).has(r.id))return L(`not_found`,`${D(r.name)} is not in the app yet; add its recipe or feature first.`,{path:`input.model`});if(t.doc.recipes.some(t=>e.recipes.find(e=>e.id===t)?.options?.[r.id]?.fields?.[n.field]?.locked))return L(`failed`,`${n.field} is locked by its recipe.`,{path:`input.field`});let i=t.doc.policies.map(e=>({...e})),a=i.find(e=>e.objectRef===r.id&&e.fieldName===n.field),o=a??{objectRef:r.id,fieldName:n.field,scopeType:`app`},s=JSON.stringify(o);for(let e of[`visibility`,`label`,`help`]){let t=n[e];t!==void 0&&(t===null?delete o[e]:o[e]=t)}if(n.defaultValue!==void 0){if(n.defaultValue===null)delete o.defaultValue;else{let e=JSON.stringify(n.defaultValue);if(e===void 0)return L(`invalid_input`,`defaultValue is not a JSON value.`,{path:`input.defaultValue`});o.defaultValue=e}}let c=Object.keys(o).length<=3;if(JSON.stringify(o)===s||c&&!a)return R(t);let l=i.filter(e=>e!==a);return R(B(t,{...t.doc,policies:c?l:[...l,o]}),`Updated ${D(r.name)} ${n.field}.`)},set_theme(e,t,n){let r=Qe(t.doc,n);return JSON.stringify(ke(r).theme??null)===JSON.stringify(t.doc.theme??null)?R(t):R(B(t,r),`Theme: ${Ze(ke(r).theme)}.`)},reset_theme(e,t){if(!t.doc.theme)return R(t);let n={...t.doc};return delete n.theme,R(B(t,n),`Theme: default.`)},set_name(e,t,n){let r={...t.doc};for(let e of[`name`,`description`]){let t=n[e];if(t===void 0)continue;let i=t?.trim();i?r[e]=i:delete r[e]}return JSON.stringify(ke(r))===JSON.stringify(t.doc)?R(t):R(B(t,r),n.name?`Named the app ${n.name.trim()}.`:`Updated the app details.`)},rename_section(e,t,{id:n,label:r}){let i=ct(e,t.doc).section(n);if(!i)return L(`not_found`,`No menu section "${n}".`,{path:`input.id`});let a=re(t.doc.layout,i,r);return JSON.stringify(a??null)===JSON.stringify(t.doc.layout??null)?R(t):R(B(t,lt(t.doc,a)),`Renamed the section to ${r.trim()}.`)},rename_item(e,t,{id:n,label:r}){let i=ct(e,t.doc).item(n);if(!i)return L(`not_found`,`No menu entry "${n}".`,{path:`input.id`});let a=ie(t.doc.layout,i,r);return JSON.stringify(a??null)===JSON.stringify(t.doc.layout??null)?R(t):R(B(t,lt(t.doc,a)),r?`Renamed the entry to ${r.trim()}.`:`Entry name restored.`)},hide(e,t,{id:n}){let r=ct(e,t.doc);return r.section(n)??r.item(n)?t.doc.layout?.hidden?.includes(n)?R(t):R(B(t,lt(t.doc,ae(t.doc.layout,n,!0))),`Hidden.`):L(`not_found`,`No menu section or entry "${n}".`,{path:`input.id`})},show(e,t,{id:n}){let r=ct(e,t.doc);return!r.section(n)&&!r.item(n)?L(`not_found`,`No menu section or entry "${n}".`,{path:`input.id`}):t.doc.layout?.hidden?.includes(n)?R(B(t,lt(t.doc,ae(t.doc.layout,n,!1))),`Shown.`):R(t)},validate(e,t){let n=$e(e,t.doc);return R(t,``,{data:{ok:!n.some(e=>e.severity===`error`),diagnostics:n}})},export_cookbook(e,t,{name:n}){return R(t,``,{data:{fileName:tt(n??t.doc.name??it(e,t.applied)),text:nt(t.doc),cookbook:F(t.doc)}})}};function dt(e,t,n,r){let i=ut[n];return i?i(e,t,r):L(`unknown_command`,`No command "${n}".`)}var ft=(e,t)=>({type:`array`,description:e,minItems:1,maxItems:50,items:t?.length?{type:`string`,enum:[...t]}:{type:`string`,minLength:1}}),pt=(e,t={})=>({type:`string`,description:e,minLength:1,maxLength:200,...t}),V=(e,t=[])=>({type:`object`,properties:e,...t.length?{required:t}:{},additionalProperties:!1});function mt(e){let t=e.recipes.map(e=>e.id),n=(e.cookbooks??[]).map(e=>e.id),r=e.themePresets??b,i=e=>({type:`string`,description:e,...n.length?{enum:[...n]}:{minLength:1}}),a=e=>pt(`The id of ${e}, as the plan snapshot's "sections" lists it.`),o={type:`boolean`,description:`Confirm replacing what is there.`};return[{name:`add_recipes`,description:`Switch recipes on. Recipes they require come along. Returns what was added.`,inputSchema:V({ids:ft(`Recipe ids to add.`,t)},[`ids`])},{name:`remove_recipes`,description:`Switch recipes off. A recipe another one needs is kept and reported.`,inputSchema:V({ids:ft(`Recipe ids to remove.`,t)},[`ids`])},{name:`add_features`,description:"Add single models no recipe covers, by qualified name (`@scope/pkg:Class`).",inputSchema:V({ids:ft(`Qualified model names to add.`)},[`ids`])},{name:`remove_features`,description:`Remove single models added with add_features.`,inputSchema:V({ids:ft(`Qualified model names to remove.`)},[`ids`])},{name:`add_cookbook`,description:`Add the recipes and features of a ready-made cookbook to the current app. Nothing is replaced.`,inputSchema:V({id:i(`The cookbook to add.`)},[`id`])},{name:`remove_cookbook`,description:`Remove the recipes and features a ready-made cookbook adds. Ones another recipe needs are kept.`,inputSchema:V({id:i(`The cookbook to remove.`)},[`id`])},{name:`apply_cookbook`,description:`Select a ready-made cookbook: replace the whole app (recipes, options, menu, theme) with it. When the app has anything in it, replace must be true.`,inputSchema:V({id:i(`The cookbook to set up.`),replace:o},[`id`])},{name:`import_cookbook`,description:`Replace the whole app with a cookbook document (version 1). Checked strictly; nothing is applied if it is invalid. When the app has anything in it, replace must be true.`,inputSchema:V({document:{type:`object`,description:`A cookbook document, version 1.`},replace:o},[`document`])},{name:`set_settings`,description:`Change app settings: currency, default tax rate (percent), default payment terms. Applies to new records only.`,inputSchema:V({currency:e.currencies?.length?{type:`string`,description:`ISO 4217 code, e.g. CAD.`,enum:[...e.currencies]}:{type:`string`,description:`ISO 4217 code, e.g. CAD.`,pattern:`^[A-Z]{3}$`},taxRate:{type:`number`,description:`Default tax rate in percent, 0 to 100.`,minimum:0,maximum:100},paymentTerms:{type:`string`,description:`Default payment terms, e.g. "Net 30".`,minLength:1,maxLength:40},pricesIncludeTax:{type:`boolean`,description:`Whether new document prices include tax.`},taxRounding:{enum:[`line`,`document`],description:`Whether tax rounds per line or per document.`}})},{name:`set_policy`,description:`Set one field's policy: default value, visibility, label or help. The model must be covered by a recipe or feature that is on. null clears a part.`,inputSchema:V({model:pt(`Qualified model name, e.g. @happyvertical/smrt-commerce:Order.`),field:pt(`The model field name.`),defaultValue:{description:`The default as a JSON value (a string, number or boolean). null clears it.`},visibility:{enum:[`basic`,`advanced`,`hidden`,null],description:`Whether the field shows in forms and lists.`},label:{type:[`string`,`null`],description:`A different label.`,maxLength:120},help:{type:[`string`,`null`],description:`Help text under the field.`,maxLength:400}},[`model`,`field`])},{name:`set_theme`,description:`Change the look: a preset, a brand colour, light or dark. A preset replaces a brand colour.`,inputSchema:V({preset:{enum:[...r],description:`A built-in theme.`},primary:{type:`string`,description:`Brand colour as #rrggbb.`,pattern:`^#[0-9a-fA-F]{6}$`},colorScheme:{enum:[`light`,`dark`,`system`],description:`Light, dark or follow the device.`},fontFamily:{type:[`string`,`null`],minLength:1,description:`Font key. Null restores the preset font.`},borderRadius:{enum:[`none`,`sm`,`md`,`lg`,`xl`,`full`],description:`Corner roundness.`},density:{enum:[`comfortable`,`touch`],description:`Control size: comfortable, or larger touch targets.`},contrast:{enum:[`auto`,`standard`,`more`],description:`Contrast: auto follows the device, or force standard or more.`}})},{name:`reset_theme`,description:`Go back to the default look.`,inputSchema:V({})},{name:`set_name`,description:`Name and describe the app. null clears a part.`,inputSchema:V({name:{type:[`string`,`null`],minLength:1,maxLength:60},description:{type:[`string`,`null`],minLength:1,maxLength:400}})},{name:`rename_section`,description:`Rename a menu section.`,inputSchema:V({id:a(`the section`),label:pt(`The new name.`,{maxLength:60})},[`id`,`label`])},{name:`rename_item`,description:`Rename a menu entry. A null label restores its own name.`,inputSchema:V({id:a(`the entry`),label:{type:[`string`,`null`],minLength:1,maxLength:60}},[`id`,`label`])},{name:`hide`,description:`Hide a menu section or entry. Nothing is deleted.`,inputSchema:V({id:a(`the section or entry`)},[`id`])},{name:`show`,description:`Show a hidden menu section or entry again.`,inputSchema:V({id:a(`the section or entry`)},[`id`])},{name:`validate`,description:`Check the current cookbook against the catalog and report typed diagnostics. Changes nothing.`,inputSchema:V({})},{name:`export_cookbook`,description:`The cookbook as a <name>.cookbook.json file (text in the result). Changes nothing.`,inputSchema:V({name:pt(`A name for the file.`,{maxLength:60})})},{name:`undo`,description:`Undo an earlier change by the undoId its receipt carried. Refused with a conflict when the plan changed since, unless force is true.`,inputSchema:V({undoId:pt(`The undoId from a receipt.`),force:{type:`boolean`,description:`Undo even after later edits.`}},[`undoId`])}]}function ht(e){return{name:`run_batch`,description:`Run several commands as one atomic batch: all apply or none does. A failure names the command and leaves the plan unchanged.`,inputSchema:{type:`object`,properties:{id:{type:`string`,minLength:1,maxLength:200},expectedRevision:{type:`integer`,minimum:0},commands:{type:`array`,minItems:1,maxItems:50,items:{oneOf:mt(e).map(e=>({type:`object`,properties:{name:{const:e.name},input:e.inputSchema},required:[`name`],additionalProperties:!1}))}}},required:[`commands`],additionalProperties:!1}}}var gt=e=>e===null?`null`:Array.isArray(e)?`array`:Number.isInteger(e)?`integer`:typeof e;function _t(e,t){let n=gt(t);return n===e||e===`number`&&n===`integer`}function vt(e,t,n=`input`){let r=e=>({path:n,message:`${n} ${e}`}),i=e.type;if(i){let e=Array.isArray(i)?i:[i];if(!e.some(e=>_t(e,t)))return r(`must be ${e.join(` or `)}`)}let a=e.enum;if(a&&!a.includes(t))return r(a.length>12?`is not a known value`:`must be one of ${a.map(e=>JSON.stringify(e)).join(`, `)}`);if(typeof t==`string`){let{minLength:n,maxLength:i,pattern:a}=e;if(n!==void 0&&t.length<n)return r(`must not be empty`);if(i!==void 0&&t.length>i)return r(`must be at most ${i} characters`);if(a&&!new RegExp(a).test(t))return r(`has the wrong format`)}if(typeof t==`number`){let{minimum:n,maximum:i}=e;if(!Number.isFinite(t))return r(`must be a finite number`);if(n!==void 0&&t<n)return r(`must be at least ${n}`);if(i!==void 0&&t>i)return r(`must be at most ${i}`)}if(Array.isArray(t)){let{minItems:i,maxItems:a,items:o}=e;if(i!==void 0&&t.length<i)return r(`needs at least ${i} item${i===1?``:`s`}`);if(a!==void 0&&t.length>a)return r(`takes at most ${a} items`);if(o)for(let[e,r]of t.entries()){let t=vt(o,r,`${n}[${e}]`);if(t)return t}}if(gt(t)===`object`){let r=t,{properties:i,required:a,additionalProperties:o}=e;for(let e of a??[])if(r[e]===void 0)return{path:`${n}.${e}`,message:`${n}.${e} is required`};for(let[e,t]of Object.entries(r)){let r=i?.[e];if(!r){if(o===!1)return{path:`${n}.${e}`,message:`${n}.${e} is not an option of this command`};continue}if(t===void 0)continue;let a=vt(r,t,`${n}.${e}`);if(a)return a}}return null}function yt(e){return Object.fromEntries(mt(e).map(e=>[e.name,e.inputSchema]))}var H=(e,t,n={})=>({code:e,message:t,...n}),bt=e=>Array.isArray(e)?e.map(bt):e&&typeof e==`object`?Object.fromEntries(Object.keys(e).sort().map(t=>[t,bt(e[t])])):e,xt=e=>{try{return JSON.stringify(bt(e))??`undefined`}catch{return`unserializable`}};function St(e,t,n){if(!e||typeof e!=`object`||Array.isArray(e))return{ok:!1,error:H(`unknown_command`,`A command is an object: { name, input }.`)};let r=e,{name:i,input:a={}}=r;if(typeof i!=`string`||!Object.hasOwn(t,i))return{ok:!1,error:H(`unknown_command`,`Unknown command ${JSON.stringify(i)}.`)};for(let e of Object.keys(r))if(e!==`name`&&e!==`input`&&!n.includes(e))return{ok:!1,error:H(`invalid_input`,`${e} is not part of a command.`,{path:e})};let o=vt(t[i],a);return o?{ok:!1,error:H(`invalid_input`,o.message,{path:o.path})}:{ok:!0,name:i,input:a}}var Ct=e=>e===void 0||typeof e==`string`&&e.length>0&&e.length<=200?null:H(`invalid_input`,`id must be a non-empty string of at most 200 characters.`,{path:`id`}),wt=e=>e===void 0||Number.isInteger(e)&&e>=0?null:H(`invalid_input`,`expectedRevision must be a whole number.`,{path:`expectedRevision`});function Tt(e){let{catalog:t}=e,n=yt(t),r=mt(t),i=ht(t),a=e.maxJournal??500,o=e.maxUndo??20,s,c=0,l=new Map;if(e.state){let n=e.state,r=we(n.cookbook);if(!r.ok)throw Error(`Invalid saved cookbook: ${r.errors.join(`; `)}`);if(!Number.isInteger(n.revision)||n.revision<0)throw Error(`Invalid saved revision.`);s={doc:rt(t,r.cookbook),applied:n.applied??null},c=n.revision;for(let e of n.journal??[])l.set(e.id,F(e))}else if(e.cookbook!==void 0){let n=we(e.cookbook);if(!n.ok)throw Error(`Invalid cookbook: ${n.errors.join(`; `)}`);s={doc:rt(t,n.cookbook),applied:null}}else s={doc:rt(t,Ee()),applied:null};let u=new Map,d=[],f=0,p=new Map;function m(e,n){let{doc:r}=e,i=new Map(t.recipes.map(e=>[e.id,e])),a=Ke(t,r),o=new Set(t.models.filter(e=>e.exposed!==!1).map(e=>e.id));return{version:1,revision:n,app:{name:r.name??it(t,e.applied)??`my-app`,description:r.description??null,cookbook:e.applied},recipes:r.recipes.flatMap(e=>{let t=i.get(e);return t?[{id:e,label:t.label}]:[]}),features:r.features.filter(e=>o.has(e)),unavailable:[...r.recipes.filter(e=>!i.has(e)),...r.features.filter(e=>!o.has(e))],settings:{currency:a.currency,taxRate:Number((a.taxRate*100).toFixed(4)),paymentTerms:a.paymentTerms,pricesIncludeTax:a.pricesIncludeTax,taxRounding:a.taxRounding},theme:{text:Ze(r.theme),preset:r.theme?.preset??null,primary:r.theme?.custom?.primary??null,colorScheme:r.theme?.colorScheme??`system`,borderRadius:r.theme?.borderRadius??null,density:r.theme?.density??null,contrast:r.theme?.contrast??null},sections:te(t,r).map(e=>({id:e.id,label:e.label,hidden:e.hidden,items:e.items.map(e=>({id:e.id,label:e.label,hidden:e.hidden}))})),policies:r.policies.length,undo:[...d]}}let h=()=>m(s,c);function g(){for(let[e,t]of p)t!==c&&(p.set(e,c),e(h()))}function _(e,t,n){if(e!==void 0)for(l.set(e,{id:e,fingerprint:t,result:F(n)});l.size>a;){let e=l.keys().next().value;if(e===void 0)break;l.delete(e)}}function v(e,t){if(e===void 0)return null;let n=l.get(e);return n?n.fingerprint===t?{...F(n.result),replayed:!0}:{ok:!1,id:e,error:H(`id_reuse`,`The id "${e}" was already used for a different command.`,{path:`id`})}:null}function y(t,n){let r=`${e.undoPrefix??`undo`}-${++f}`;u.set(r,{before:F(t),after:F(n)}),d=[...d,r].slice(-o);for(let e of[...u.keys()])d.includes(e)||u.delete(e);return r}let b=(e,t)=>e.applied!==t.applied||!Te(e.doc,t.doc);function x(e,t,n,r,i,a,o){return{ok:!0,...e===void 0?{}:{id:e},snapshot:a,receipt:{name:t,...e===void 0?{}:{id:e},summary:i===r?``:n.summary,changed:i!==r,revisionBefore:r,revisionAfter:i,...o?{undoId:o}:{},...n.changes?{changes:n.changes}:{},...n.warnings?{warnings:n.warnings}:{}},...n.data===void 0?{}:{data:n.data}}}function S(e,t){let n=u.get(t.undoId);if(!n)return{ok:!1,...e===void 0?{}:{id:e},error:H(`not_found`,`Nothing to undo for "${t.undoId}".`,{path:`input.undoId`})};if(!t.force&&b(s,n.after))return{ok:!1,...e===void 0?{}:{id:e},error:H(`conflict`,`The plan changed since; send force: true to undo anyway.`,{details:{currentRevision:c}})};let r=c,i=F(n.before),a=b(s,i);s=i,a&&(c+=1),u.delete(t.undoId),d=d.filter(e=>e!==t.undoId);let o=x(e,`undo`,{ok:!0,state:s,summary:`Undone.`},r,c,h());return g(),o}function C(e,r={}){try{let i=e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,a=i?.id,o=Ct(a);if(o)return{ok:!1,error:o};let l=i?.expectedRevision??r.expectedRevision,u=wt(l);if(u)return{ok:!1,...a===void 0?{}:{id:a},error:u};let d=xt({name:i?.name,input:i?.input??{},expectedRevision:l}),f=v(a,d);if(f)return f;let p=e=>(_(a,d,e),e),m=e=>({ok:!1,...a===void 0?{}:{id:a},error:e}),C=St(e,n,[`id`,`expectedRevision`]);if(!C.ok)return p(m(C.error));if(l!==void 0&&l!==c)return p(m(H(`conflict`,`The plan is at revision ${c}, not ${l}. Read the snapshot and try again.`,{details:{expectedRevision:l,currentRevision:c}})));if(C.name===`undo`)return p(S(a,C.input));let w=s,T=dt(t,w,C.name,C.input);if(!T.ok)return p(m(T.error));let E=c,D=b(w,T.state),O;D&&(s=T.state,c+=1,O=y(w,T.state));let ee=p(x(a,C.name,T,E,c,h(),O));return g(),ee}catch(e){return{ok:!1,error:H(`failed`,e instanceof Error?e.message:String(e))}}}function w(e){let r=(e,t)=>({ok:!1,...t===void 0?{}:{id:t},error:e,snapshot:h()});try{if(!e||typeof e!=`object`||Array.isArray(e))return r(H(`invalid_input`,`A batch is an object: { commands }.`));let i=e,a=i.id,o=Ct(a);if(o)return r(o);let l=wt(i.expectedRevision);if(l)return r(l,a);let u=xt({commands:i.commands,expectedRevision:i.expectedRevision}),d=v(a,u);if(d)return`results`in d||`snapshot`in d?d:r(d.error,a);let f=e=>(_(a,u,e),e),p=i.commands;if(!Array.isArray(p)||p.length===0||p.length>50)return f(r(H(`invalid_input`,`commands must be a list of 1 to 50 commands.`,{path:`commands`}),a));let S=i.expectedRevision;if(S!==void 0&&S!==c)return f(r(H(`conflict`,`The plan is at revision ${c}, not ${S}. Read the snapshot and try again.`,{details:{expectedRevision:S,currentRevision:c}}),a));let C=(e,t,n)=>f(r(H(`batch_failed`,`Command ${e+1} (${String(t)}) failed: ${n.message}`,{path:`commands[${e}]`,details:{index:e,cause:n}}),a)),w=s,T=c,E=w,D=T,O=[];for(let[e,r]of p.entries()){let i=St(r,n,[]);if(!i.ok)return C(e,r?.name,i.error);if(i.name===`undo`)return C(e,`undo`,H(`invalid_input`,`undo cannot run inside a batch.`));let a=dt(t,E,i.name,i.input);if(!a.ok)return C(e,i.name,a.error);let o=D;b(E,a.state)&&(D+=1),E=a.state,O.push(x(void 0,i.name,a,o,D,m(E,D)))}let ee=D!==T,k;if(ee){s=E,c=D,k=y(w,E);for(let e of O)e.receipt.changed&&delete e.receipt.undoId}let te=f({ok:!0,...a===void 0?{}:{id:a},snapshot:h(),receipt:{...a===void 0?{}:{id:a},count:O.length,changed:ee,revisionBefore:T,revisionAfter:D,...k?{undoId:k}:{}},results:O});return g(),te}catch(e){return r(H(`failed`,e instanceof Error?e.message:String(e)))}}return{run:C,batch:w,snapshot:h,cookbook:()=>F(s.doc),state:()=>({version:1,revision:c,applied:s.applied,cookbook:F(s.doc),journal:[...l.values()].map(e=>F(e))}),subscribe(e){return p.set(e,c),e(h()),()=>{p.delete(e)}},tools:r,batchTool:i}}var Et=new Set(`AED AFN ALL AMD ANG AOA ARS AUD AWG AZN BAM BBD BDT BGN BHD BIF BMD BND BOB BRL BSD BTN BWP BYN BZD CAD CDF CHF CLP CNY COP CRC CUP CVE CZK DJF DKK DOP DZD EGP ERN ETB EUR FJD FKP GBP GEL GHS GIP GMD GNF GTQ GYD HKD HNL HTG HUF IDR ILS INR IQD IRR ISK JMD JOD JPY KES KGS KHR KMF KPW KRW KWD KYD KZT LAK LBP LKR LRD LSL LYD MAD MDL MGA MKD MMK MNT MOP MRU MUR MVR MWK MXN MYR MZN NAD NGN NIO NOK NPR NZD OMR PAB PEN PGK PHP PKR PLN PYG QAR RON RSD RUB RWF SAR SBD SCR SDG SEK SGD SHP SLE SOS SRD SSP STN SYP SZL THB TJS TMT TND TOP TRY TTD TWD TZS UAH UGX USD UYU UZS VES VND VUV WST XAF XCD XOF XPF YER ZAR ZMW ZWG`.split(` `));function Dt(){let e=c.packages.flatMap(e=>e.models.map(t=>({id:t.id,name:t.name,packageId:e.id,...t.description?{description:t.description}:{},exposed:t.exposed,fields:t.fields.map(e=>({name:e.name,...e.system?{system:!0}:{},...e.default===void 0?{}:{default:e.default}}))})));return{recipes:h,models:e,cookbooks:y.map(e=>({id:e.id,name:e.name,document:e.document})),themePresets:f,currencies:[...Et],settingTargets:v}}var Ot;function kt(){return Ot??=Dt(),Ot}var At=[`cookbooks`,`recipes`,`features`,`layout`,`theme`,`settings`,`export`],jt={name:`focus`,description:`Move the planner's view to a tab and/or a menu section. Navigation only; it changes nothing in the plan.`,inputSchema:{type:`object`,properties:{tab:{enum:[...At],description:`The tab to open.`},section:{type:`string`,minLength:1,maxLength:200,description:`The id of a menu section, as the plan snapshot's "sections" lists it.`}},additionalProperties:!1}};function Mt(e){return[...mt(e),jt]}function Nt(e,t){return Mt({...kt(),recipes:e.map(e=>({id:e,label:e,models:[],nav:[],requires:[]})),cookbooks:t.map(e=>({id:e,name:e,document:{}}))})}var Pt=Nt(h.map(e=>e.id),y.map(e=>e.id));Object.fromEntries(Pt.map(e=>[e.name,e.inputSchema])),Pt.map(e=>e.name);function Ft(e,t,n=`input`){return vt(e,t,n)?.message??null}function It(e){let t=e;return{get:()=>t,set:e=>{t=e}}}var U=(e,t,n={})=>({code:e,message:t,...n}),W=(e,t)=>({ok:!1,...t===void 0?{}:{id:t},error:e}),G=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Lt=new Set([`apply_cookbook`,`import_cookbook`]),Rt=e=>e instanceof Error?e.message:String(e);function zt(e,t){if(!G(e))return JSON.stringify([t,e??null]);let{overviews:n,...r}=e;return JSON.stringify([t,r])}function Bt(e){let{catalog:t,port:n,options:r={},env:i={}}=e,a=i.section??It(null),o=i.tab??It(null),s=Mt(t),c=e=>s.find(t=>t.name===e)?.inputSchema,l=c(`focus`),u=c(`undo`),d,f=``,p=null,m=new Map,h=new Map,g=0,_=new Map,v=()=>n?.applied?.()??null,y=()=>r.navigation?.getTab()??o.get();function b(){if(!n?.read){d=Tt(e.cookbook===void 0?{catalog:t}:{catalog:t,state:{version:1,revision:0,applied:null,cookbook:e.cookbook,journal:[]}});return}let r=n.read();f=zt(r,v());try{d=Tt({catalog:t,state:{version:1,revision:0,applied:v(),cookbook:r,journal:[]}})}catch(e){d=Tt({catalog:t}),p=Rt(e)}}b();function x(e,n){let r=d.state();try{d=Tt({catalog:t,state:{version:1,revision:r.revision+1,applied:v(),cookbook:e,journal:r.journal}}),p=null}catch(e){p=Rt(e)}m=new Map,h=new Map,f=n}function S(){if(n?.read)try{let e=n.read(),t=zt(e,v());if(t===f)return;x(e,t)}catch(e){p=Rt(e)}}let C=()=>U(`failed`,`The app's document is not one the planner can read (${p}). Fix it or reset the cookbook, then try again.`),w=e=>W(C(),e);function T(e){if(!e)return;let t=m.get(e);return t||(t=`undo-${++g}`,m.set(e,t),h.set(t,e)),t}function E(e){let t=new Set(e);for(let[e,n]of m)t.has(e)||(m.delete(e),h.delete(n))}let D=e=>({...e,undo:e.undo.map(e=>T(e)),focus:{tab:y(),section:a.get()}});function O(){let e=d.snapshot();return E(e.undo),D(e)}function ee(e){if(!n?.read)return e;try{let t=n.read(),r=G(t)?t.overviews:void 0,{overviews:i,...a}=e;return ke(G(r)&&Object.keys(r).length?{...a,overviews:r}:a)}catch{return e}}function k(e){if(!e.ok)return e;let{receipt:t}=e,n=e.replayed?void 0:T(t.undoId),{undoId:r,...i}=t,a=e.data;if(t.name===`export_cookbook`&&G(a)&&!e.replayed){let e=ee(a.cookbook);a={...a,cookbook:e,text:`${JSON.stringify(e,null,2)}\n`}}return{...e,...a===void 0?{}:{data:a},snapshot:O(),receipt:{...i,...n?{undoId:n}:{}}}}function te(e,t){if(!n?.write)return;let i=d.snapshot().app.cookbook,a=e.includes(`apply_cookbook`)||i!==null&&i!==t;n.write(d.cookbook(),{commands:e,replaced:e.some(e=>Lt.has(e)),applied:i,libraryApplied:a}),n.read&&(f=zt(n.read(),v())),a&&r.onReplaced?.()}function A(){if(!_.size)return;S();let e=O(),t=JSON.stringify(e);for(let[n,r]of _)r!==t&&(_.set(n,t),n(e))}function ne(e,t){for(let t of Object.keys(e))if(![`name`,`input`,`id`,`expectedRevision`].includes(t))return U(`invalid_input`,`${t} is not part of a command.`,{path:t});let{id:n}=e;if(n!==void 0&&!(typeof n==`string`&&n.length>0&&n.length<=200))return U(`invalid_input`,`id must be a non-empty string of at most 200 characters.`,{path:`id`});let r=e.expectedRevision??t.expectedRevision;return r!==void 0&&!(Number.isInteger(r)&&r>=0)?U(`invalid_input`,`expectedRevision must be a whole number.`,{path:`expectedRevision`}):null}function re(e,t){let n=ne(e,t),i=typeof e.id==`string`?e.id:void 0;if(n)return W(n,i);let s=e.expectedRevision??t.expectedRevision,c=e.input??{},u=Ft(l,c);if(u)return W(U(`invalid_input`,u,{path:`input`}),i);let f=d.snapshot().revision;if(s!==void 0&&s!==f)return W(U(`conflict`,`The plan is at revision ${f}, not ${s}. Read the snapshot and try again.`,{details:{expectedRevision:s,currentRevision:f}}),i);if(c.section!==void 0&&!O().sections.some(e=>e.id===c.section))return W(U(`not_found`,`No menu section "${c.section}".`,{path:`input.section`}),i);let p=!1;c.tab&&At.includes(c.tab)&&(p||=y()!==c.tab,o.set(c.tab),r.navigation?.setTab(c.tab)),c.section!==void 0&&(p||=a.get()!==c.section,a.set(c.section),r.navigation?.setSection?.(c.section));let m={ok:!0,...i===void 0?{}:{id:i},snapshot:O(),receipt:{name:`focus`,...i===void 0?{}:{id:i},summary:``,changed:p,revisionBefore:f,revisionAfter:f}};return A(),m}function ie(e){let t=e.input;if(!n?.prepareImport||!G(t))return{raw:e};let r=n.prepareImport(t.document);return r.ok?{raw:{...e,input:{...t,document:r.cookbook}},dropped:r.dropped}:W(U(`invalid_input`,r.error,{path:`input.document`}),e.id)}function ae(e){if(n?.read&&e.some(e=>typeof e==`string`&&Lt.has(e)))try{let e=n.read();if(De(d.cookbook())&&!De(e)){let n=d.state();d=Tt({catalog:t,state:{version:1,revision:n.revision,applied:v(),cookbook:e,journal:n.journal}}),m=new Map,h=new Map,f=zt(e,v())}}catch(e){p=Rt(e)}}function oe(e,t={}){try{if(S(),p)return w(G(e)&&typeof e.id==`string`?e.id:void 0);if(!G(e))return k(d.run(e,t));if(e.name===`focus`)return re(e,t);if(ae([e.name]),p)return w(typeof e.id==`string`?e.id:void 0);let n=e,r;if(e.name===`import_cookbook`){let t=ie(e);if(`ok`in t)return t;n=t.raw,r=t.dropped}let i=d.snapshot().app.cookbook,a=se(n),o=a?ce(n,t,a):k(d.run(n,t));if(!o.ok)return o;!o.replayed&&o.receipt.changed&&te([String(n.name)],i);let s=o;return r?.length&&(s={...o,receipt:{...o.receipt,warnings:[...o.receipt.warnings??[],...r.map(e=>`Not imported: ${e}`)]}}),A(),s.ok?{...s,snapshot:O()}:s}catch(e){return W(U(`failed`,Rt(e)))}}function se(e){let n=e.input;if(e.name!==`apply_cookbook`||!G(n))return;let r=t.cookbooks?.find(e=>e.id===n.id);if(!r)return;let i=d.cookbook().theme;if(!i)return;let a=r.document.theme;if(a)return a.colorScheme||!i.colorScheme?void 0:{colorScheme:i.colorScheme};let o={};return i.preset&&(o.preset=i.preset),i.custom?.primary&&(o.primary=i.custom.primary),i.colorScheme&&(o.colorScheme=i.colorScheme),i.borderRadius&&(o.borderRadius=i.borderRadius),i.density&&(o.density=i.density),i.contrast&&(o.contrast=i.contrast),Object.keys(o).length?o:void 0}function ce(e,t,n){let r=d.batch({...e.id===void 0?{}:{id:e.id},expectedRevision:e.expectedRevision??t.expectedRevision,commands:[e,{name:`set_theme`,input:n}].map(({id:e,expectedRevision:t,...n})=>n)});if(!r.ok){let t=r.error.details?.cause;return W(r.error.code===`batch_failed`&&t?t:r.error,e.id)}let i=r.results[0],a=r.replayed?void 0:T(r.receipt.undoId);return{...i,...r.id===void 0?{}:{id:r.id},...r.replayed?{replayed:!0}:{},snapshot:O(),receipt:{...i.receipt,...r.id===void 0?{}:{id:r.id},revisionBefore:r.receipt.revisionBefore,revisionAfter:r.receipt.revisionAfter,changed:r.receipt.changed,...a?{undoId:a}:{}}}}function le(e){try{if(S(),p)return{ok:!1,error:C(),snapshot:O()};let t=G(e)&&Array.isArray(e.commands)?e.commands:[];if(ae(t.map(e=>G(e)?e.name:void 0)),p)return{ok:!1,error:C(),snapshot:O()};let n=d.snapshot().app.cookbook,r=d.batch(e);if(!r.ok)return{...r,snapshot:O()};!r.replayed&&r.receipt.changed&&te(t.map(e=>String(e?.name)),n);let i=r.replayed?void 0:T(r.receipt.undoId),{undoId:a,...o}=r.receipt,s=O(),c={...r,snapshot:s,receipt:{...o,...i?{undoId:i}:{}},results:r.results.map(e=>({...e,snapshot:r.replayed?s:D(e.snapshot)}))};return A(),c}catch(e){return{ok:!1,error:U(`failed`,Rt(e)),snapshot:O()}}}function ue(e){if(!G(e)||e.name!==`undo`||!G(e.input))return e;let t=e.input.undoId;return typeof t==`string`?{...e,input:{...e.input,undoId:h.get(t)??``}}:e}function de(e,t){if(e.ok||e.error.code!==`not_found`)return e;let n=h.get(t);return n?{...e,error:{...e.error,message:e.error.message.replace(`"${n}"`,`"${t}"`)}}:e}let j=(e,t)=>{if(G(e)&&e.name===`undo`&&G(e.input)){let n=e.input.undoId;if(typeof n==`string`&&Ft(u,e.input)===null)return S(),O(),h.has(n)?de(oe(ue(e),t),n):W(U(`not_found`,`Nothing to undo for "${n}".`,{path:`input.undoId`}),e.id)}return oe(ue(e),t)};return{run:j,batch:le,snapshot(){return S(),O()},cookbook(){return S(),ee(d.cookbook())},undo(){S();let e=O().undo.at(-1);return e?j({name:`undo`,input:{undoId:e}}):W(U(`not_found`,`Nothing to undo.`))},state:()=>d.state(),get tools(){return s},get batchTool(){return d.batchTool},observe(){return S(),JSON.stringify(O())},deliver:A,subscribe(e){i.watch?.start(),S();let t=O();return _.set(e,JSON.stringify(t)),e(t),()=>{_.delete(e),_.size||i.watch?.stop()}}}}function Vt(e){return e.recipes.length===0&&e.features.length===0&&e.policies.length===0&&Object.keys(e.exposure??{}).length===0&&e.theme===void 0&&l(e.layout)}function Ht(e){if(!e.theme?.colorScheme)return e;let{colorScheme:t,...n}=e.theme;return{...e,theme:Object.keys(n).length?n:void 0}}function Ut(e){return JSON.stringify(Ht(e))}function Wt(e,t){let n=Ht(e);return Vt(n)?!1:t===null||JSON.stringify(n)!==t}function Gt(e,t,n){return t(n?g(structuredClone(e.document),n):e.document)}var Kt=`smrt-planner:cookbook`,qt=`smrt-planner:cookbook-applied`,Jt=new class{#e=t(null);get active(){return e(this.#e)}set active(e){o(this.#e,e,!0)}#t=t(null);get appliedWork(){return e(this.#t)}set appliedWork(e){o(this.#t,e,!0)}load(e=u()){try{this.active=e?.getItem(`smrt-planner:cookbook`)??null,this.appliedWork=e?.getItem(`smrt-planner:cookbook-applied`)??null}catch{this.active=null,this.appliedWork=null}s(this.active)}select(e,t=null,n=u()){this.active=e,this.appliedWork=t;try{n?.setItem(Kt,e),t===null?n?.removeItem(qt):n?.setItem(qt,t)}catch{}}};function Yt(n){let i=t(r(n));return{get:()=>e(i),set:e=>{o(i,e,!0)}}}function Xt(e){return{read:()=>e.snapshot(),applied:()=>Jt.active,prepareImport:e=>m(e),write(t,{replaced:n,applied:r,libraryApplied:i}){let a=n?t:{...t,overviews:e.snapshot().overviews};n?e.replace(a):e.apply(a),i&&r&&(Jt.select(r,Ut(e.snapshot())),s(r))}}}function Zt(e=p,t={}){let r,o=Bt({catalog:kt(),port:Xt(e),options:t,env:{section:Yt(null),tab:Yt(null),watch:{start(){r||=a(()=>{n(()=>{o.observe(),i(o.deliver)})})},stop(){r?.(),r=void 0}}}});return o}var Qt=()=>({$schema:d,version:1,recipes:[],features:[],policies:[]});function $t(e){let{store:t,settings:n,theme:r}=e;return{read(){let e={...Qt(),recipes:[...t.ids].sort()};n&&(e=g(e,n.read()));let i=r?.read();return i?{...e,theme:i}:e},write(e){let i=new Set(e.recipes),a=new Set(t.ids),o=[...a].filter(e=>!i.has(e));o.length&&t.remove(...o);let s=[...i].filter(e=>!a.has(e));s.length&&t.add(...s),n&&n.write(_(e)),r?.write(e.theme)}}}function en(e,t={}){return Bt({catalog:kt(),port:$t(e),options:t})}var tn=[`cookbooks`,`recipes`,`features`,`layout`,`theme`,`settings`,`export`];function nn(e,t=`cookbooks`){let n=new URLSearchParams(e).get(`tab`);return tn.find(e=>e===n)??t}var rn=new class{#e=t(`cookbooks`);get active(){return e(this.#e)}set active(e){o(this.#e,e,!0)}fromSearch(e,t=`cookbooks`){this.active=nn(e,t)}leaveExport(e=`cookbooks`){this.active===`export`&&(this.active=e)}},an={},on=Zt(p,{navigation:{getTab:()=>rn.active,setTab:e=>{rn.active=e},setSection:e=>an.openSection?.(e)},onReplaced:()=>an.onReplaced?.()}),sn=class extends Error{code;category;details;cause;constructor(e,t,n,r,i){super(e),this.name=this.constructor.name,this.code=t,this.category=n,this.details=r,this.cause=i,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,category:this.category,details:this.details,stack:this.stack,cause:this.cause?{name:this.cause.name,message:this.cause.message,stack:this.cause.stack}:void 0}}},K=Object.freeze({maxTitleLength:120,maxDescriptionLength:500,maxDimensions:4,maxMeasures:6,maxFilters:12,maxHaving:4,maxSort:3,maxInValues:100,maxStringValueLength:256,defaultRowLimit:100,maxRowLimit:1e3,maxAliasLength:40,maxFieldNameLength:64,maxSourceIdLength:120}),cn=[`minute`,`hour`,`day`,`week`,`month`,`quarter`,`year`],ln=[`count`,`countDistinct`,`sum`,`avg`,`min`,`max`],un=[`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`in`,`notIn`,`contains`,`isNull`,`isNotNull`],dn=[`eq`,`ne`,`gt`,`gte`,`lt`,`lte`],fn=[`table`,`bar`,`line`,`pie`,`stat`],q=class extends sn{code;path;status;constructor(e,t,n){super(t?`${t}: ${n}`:n,e,`validation`),this.name=`RuntimeReportError`,this.code=e,this.path=t,this.status=e===`tenant_required`||e===`confirmation_required`?403:e===`invalid_result`?500:422}};function J(e,t){throw new q(`invalid_spec`,e,t)}var pn=new Set(`all.and.as.asc.between.by.case.cast.check.column.constraint.create.cross.default.delete.desc.distinct.drop.else.end.except.exists.false.for.foreign.from.full.group.having.in.inner.insert.intersect.into.is.join.left.like.limit.natural.not.null.offset.on.or.order.outer.primary.references.right.select.set.table.then.to.true.union.unique.update.user.using.values.when.where.with`.split(`.`)),mn=/^[a-z][a-z0-9_]*$/,hn=/^[A-Za-z][A-Za-z0-9_]*$/,gn=/^[A-Za-z@][A-Za-z0-9_@./:-]*$/;function _n(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&(Object.getPrototypeOf(e)===Object.prototype||Object.getPrototypeOf(e)===null)}function Y(e,t,n){_n(e)||J(t,`must be an object`);for(let r of Object.keys(e))n.includes(r)||J(`${t}.${r}`,`is not a known key`);return e}function X(e,t,n,r=0){return e===void 0?[]:(Array.isArray(e)||J(t,`must be an array`),e.length>n&&J(t,`must have at most ${n} entries`),e.length<r&&J(t,`must have at least ${r} entries`),e)}function vn(e,t,n,r={}){if(typeof e!=`string`){if(r.optional&&e===void 0)return``;J(t,`must be a string`)}let i=e.trim();return i.length===0&&!r.optional&&J(t,`must not be empty`),i.length>n&&J(t,`must be at most ${n} characters`),/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/.test(i)&&J(t,`must not contain control characters`),i}function yn(e,t,n){return(typeof e!=`string`||!n.includes(e))&&J(t,`must be one of: ${n.join(`, `)}`),e}function bn(e,t){return typeof e!=`string`&&J(t,`must be a string`),(e.length===0||e.length>K.maxFieldNameLength||!hn.test(e))&&J(t,`must be a plain field name (letters, digits, underscore)`),e}function Z(e,t){return typeof e!=`string`&&J(t,`must be a string`),(e.length===0||e.length>K.maxAliasLength||!mn.test(e))&&J(t,`must be a lowercase identifier of at most ${K.maxAliasLength} characters (a-z, 0-9, underscore)`),pn.has(e)&&J(t,`'${e}' is a reserved word`),e}function xn(e,t){return typeof e==`string`?(e.length>K.maxStringValueLength&&J(t,`must be at most ${K.maxStringValueLength} characters`),e.includes(`\0`)&&J(t,`must not contain NUL`),e):typeof e==`number`?(Number.isFinite(e)||J(t,`must be a finite number`),e):typeof e==`boolean`?e:J(t,`must be a string, number or boolean`)}function Sn(e){return e.replace(/([a-z\d])([A-Z])/g,`$1_$2`).replace(/([A-Z]+)([A-Z][a-z])/g,`$1_$2`).toLowerCase()}function Cn(e,t){let n=Y(e,t,[`field`,`as`,`bucket`]),r=bn(n.field,`${t}.field`),i=n.bucket===void 0?void 0:yn(n.bucket,`${t}.bucket`,cn);return{field:r,as:n.as===void 0?Z(i?`${Sn(r)}_${i}`:Sn(r),`${t}.as`):Z(n.as,`${t}.as`),...i?{bucket:i}:{}}}function wn(e,t){let n=Y(e,t,[`fn`,`field`,`as`]),r=yn(n.fn,`${t}.fn`,ln),i=n.field===void 0?void 0:bn(n.field,`${t}.field`);!i&&r!==`count`&&J(`${t}.field`,`is required for ${r}`);let a=n.as===void 0?Z(i?`${Sn(r)}_${Sn(i)}`:`row_count`,`${t}.as`):Z(n.as,`${t}.as`);return{fn:r,...i?{field:i}:{},as:a}}function Tn(e,t){let n=Y(e,t,[`field`,`op`,`value`]),r=bn(n.field,`${t}.field`),i=yn(n.op,`${t}.op`,un);if(i===`isNull`||i===`isNotNull`)return n.value!==void 0&&J(`${t}.value`,`must be omitted for ${i}`),{field:r,op:i};if(n.value===void 0&&J(`${t}.value`,`is required for ${i}`),i===`in`||i===`notIn`)return{field:r,op:i,value:X(n.value,`${t}.value`,K.maxInValues,1).map((e,n)=>xn(e,`${t}.value[${n}]`))};Array.isArray(n.value)&&J(`${t}.value`,`must be a scalar for ${i}`);let a=xn(n.value,`${t}.value`);return i===`contains`&&typeof a!=`string`&&J(`${t}.value`,`must be a string for contains`),{field:r,op:i,value:a}}function En(e,t){let n=Y(e,t,[`measure`,`op`,`value`]),r=Z(n.measure,`${t}.measure`),i=yn(n.op,`${t}.op`,dn);return(typeof n.value!=`number`||!Number.isFinite(n.value))&&J(`${t}.value`,`must be a finite number`),{measure:r,op:i,value:n.value}}function Dn(e,t){let n=Y(e,t,[`by`,`direction`]);return{by:Z(n.by,`${t}.by`),direction:n.direction===void 0?`asc`:yn(n.direction,`${t}.direction`,[`asc`,`desc`])}}function On(e){let t=e;if(typeof e==`string`){e.length>65536&&J(``,`spec JSON is too large`);try{t=JSON.parse(e)}catch{J(``,`spec is not valid JSON`)}}let n=Y(t,`spec`,[`version`,`title`,`description`,`source`,`dimensions`,`measures`,`filters`,`having`,`sort`,`limit`,`chart`]);n.version!==void 0&&n.version!==1&&J(`spec.version`,`unsupported version (expected 1)`);let r=vn(n.title,`spec.title`,K.maxTitleLength),i=vn(n.description,`spec.description`,K.maxDescriptionLength,{optional:!0});(typeof n.source!=`string`||n.source.length===0||n.source.length>K.maxSourceIdLength||!gn.test(n.source))&&J(`spec.source`,`must be a source id`);let a=X(n.dimensions,`spec.dimensions`,K.maxDimensions).map((e,t)=>Cn(e,`spec.dimensions[${t}]`)),o=X(n.measures,`spec.measures`,K.maxMeasures,1).map((e,t)=>wn(e,`spec.measures[${t}]`)),s=X(n.filters,`spec.filters`,K.maxFilters).map((e,t)=>Tn(e,`spec.filters[${t}]`)),c=X(n.having,`spec.having`,K.maxHaving).map((e,t)=>En(e,`spec.having[${t}]`)),l=X(n.sort,`spec.sort`,K.maxSort).map((e,t)=>Dn(e,`spec.sort[${t}]`)),u=new Set,d=new Set,f=new Set;for(let[e,t]of a.entries())f.has(t.as)&&J(`spec.dimensions[${e}].as`,`duplicate alias '${t.as}'`),f.add(t.as),u.add(t.as);for(let[e,t]of o.entries())f.has(t.as)&&J(`spec.measures[${e}].as`,`duplicate alias '${t.as}'`),f.add(t.as),d.add(t.as);for(let[e,t]of c.entries())d.has(t.measure)||J(`spec.having[${e}].measure`,`must be a declared measure alias`);for(let[e,t]of l.entries())f.has(t.by)||J(`spec.sort[${e}].by`,`must be a declared dimension or measure alias`);let p=K.defaultRowLimit;n.limit!==void 0&&((typeof n.limit!=`number`||!Number.isSafeInteger(n.limit)||n.limit<1||n.limit>K.maxRowLimit)&&J(`spec.limit`,`must be an integer between 1 and ${K.maxRowLimit}`),p=n.limit);let m={type:`table`};if(n.chart!==void 0){let e=Y(n.chart,`spec.chart`,[`type`,`x`,`y`]),t=yn(e.type,`spec.chart.type`,fn),r=e.x===void 0?void 0:Z(e.x,`spec.chart.x`);r!==void 0&&!u.has(r)&&J(`spec.chart.x`,`must be a declared dimension alias`);let i=X(e.y,`spec.chart.y`,K.maxMeasures).map((e,t)=>Z(e,`spec.chart.y[${t}]`));for(let[e,t]of i.entries())d.has(t)||J(`spec.chart.y[${e}]`,`must be a declared measure alias`);m={type:t,...r?{x:r}:{},...i.length>0?{y:i}:{}}}return{version:1,title:r,...i?{description:i}:{},source:n.source,dimensions:a,measures:o,filters:s,having:c,sort:l,limit:p,chart:m}}function kn(e){return Array.isArray(e)?e.map(kn):_n(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,kn(e[t])])):e}function An(e){return JSON.stringify(kn(e))}async function jn(e){let t=globalThis.crypto?.subtle;if(!t)throw Error(`runtimeReportSpecDigest needs Web Crypto (crypto.subtle), which browsers offer only in a secure context`);let n=new TextEncoder().encode(An(e)),r=new Uint8Array(await t.digest(`SHA-256`,n));return Array.from(r,e=>e.toString(16).padStart(2,`0`)).join(``)}var Mn=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Nn(e){return e.replace(/([a-z\d])([A-Z])/g,`$1 $2`).replace(/[_-]+/g,` `).replace(/^./,e=>e.toUpperCase())}function Pn(e,t){throw new q(`unknown_field`,e,`'${t}' is not a field available on this source`)}function Fn(e,t){throw new q(`invalid_operation`,e,t)}function In(e,t){throw new q(`invalid_value`,e,t)}var Ln={string:[`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`in`,`notIn`,`contains`,`isNull`,`isNotNull`],integer:[`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`in`,`notIn`,`isNull`,`isNotNull`],decimal:[`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`in`,`notIn`,`isNull`,`isNotNull`],datetime:[`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`in`,`notIn`,`isNull`,`isNotNull`],boolean:[`eq`,`ne`,`isNull`,`isNotNull`],id:[`eq`,`ne`,`in`,`notIn`,`isNull`,`isNotNull`]};function Rn(e){return e===`integer`||e===`decimal`?[`count`,`countDistinct`,`sum`,`avg`,`min`,`max`]:e===`datetime`?[`count`,`countDistinct`,`min`,`max`]:[`count`,`countDistinct`]}function zn(e,t,n){Ln[t].includes(e.op)||Fn(`${n}.op`,`'${e.op}' is not valid for ${t} fields`)}function Bn(e,t,n){switch(e){case`string`:return typeof t!=`string`&&In(n,`must be a string`),t;case`integer`:return(typeof t!=`number`||!Number.isSafeInteger(t))&&In(n,`must be a safe integer`),t;case`decimal`:return(typeof t!=`number`||!Number.isFinite(t))&&In(n,`must be a finite number`),t;case`boolean`:return typeof t!=`boolean`&&In(n,`must be true or false`),t;case`datetime`:{typeof t!=`string`&&In(n,`must be an ISO-8601 string`);let e=new Date(t);return(Number.isNaN(e.getTime())||!/^\d{4}-\d{2}-\d{2}/.test(t))&&In(n,`must be an ISO-8601 date or timestamp`),e}case`id`:return(typeof t!=`string`||!Mn.test(t))&&In(n,`must be a UUID`),t.toLowerCase()}}function Vn(e,t){let n=n=>{let r=e[n];if(r!==void 0){if(!Array.isArray(r)||Array.from(r).some(e=>typeof e!=`string`||!t.has(e)))throw new q(`unsupported_source`,`source.${n}`,`${n} must contain canonical field names declared on the source`);return new Set(r)}},r=n(`fields`),i=n(`excludeFields`);if(n(`dimensions`),e.timeField!==void 0&&(typeof e.timeField!=`string`||!t.has(e.timeField)))throw new q(`unsupported_source`,`source.timeField`,`timeField must be a canonical field name declared on the source`);return{...r?{included:r}:{},...i?{excluded:i}:{}}}function Hn(e,t){return e===`count`||e===`countDistinct`?`integer`:e===`avg`?`decimal`:t?.type??`decimal`}function Un(e,t){let n=(e,n)=>{let r=t.get(e);return r||Pn(n,e),r},r=[];for(let[t,i]of e.dimensions.entries()){let e=`spec.dimensions[${t}]`,a=n(i.field,`${e}.field`);i.bucket&&a.type!==`datetime`&&Fn(`${e}.bucket`,`buckets are only valid on datetime fields`),r.push({id:i.as,label:Nn(i.as),role:`dimension`,type:i.bucket?`datetime`:a.type,field:a.name,...i.bucket?{bucket:i.bucket}:{},...a.format&&!i.bucket?{format:a.format}:{}})}for(let[t,i]of e.measures.entries()){let e=`spec.measures[${t}]`,a=i.field?n(i.field,`${e}.field`):void 0;(i.fn===`sum`||i.fn===`avg`)&&a?.type!==`integer`&&a?.type!==`decimal`&&Fn(`${e}.fn`,`${i.fn} requires a numeric field`),(i.fn===`min`||i.fn===`max`)&&a?.type!==`integer`&&a?.type!==`decimal`&&a?.type!==`datetime`&&Fn(`${e}.fn`,`${i.fn} requires a numeric or datetime field`);let o=a?.format&&(i.fn===`sum`||i.fn===`min`||i.fn===`max`||i.fn===`avg`);r.push({id:i.as,label:Nn(i.as),role:`measure`,type:Hn(i.fn,a),...a?{field:a.name}:{},fn:i.fn,...o?{format:a?.format}:{}})}return r}function Wn(e,t){if(t==null)return null;if(t instanceof Date)return t.toISOString();if(typeof t==`bigint`){let n=Number(t);if(!Number.isSafeInteger(n))throw new q(`invalid_result`,e.id,`integer result exceeds the JavaScript safe range`);return n}if(e.type===`boolean`){if(t===1||t===`1`||t===`true`||t===!0)return!0;if(t===0||t===`0`||t===`false`||t===!1)return!1}if(e.type===`integer`||e.type===`decimal`){let n=typeof t==`number`?t:Number(t);if(!Number.isFinite(n))throw new q(`invalid_result`,e.id,`numeric result is not finite`);if(e.type===`integer`&&!Number.isSafeInteger(n))throw new q(`invalid_result`,e.id,`integer result exceeds the JavaScript safe range`);return n}return typeof t==`string`||typeof t==`number`||typeof t==`boolean`?t:String(t)}var Gn=/^(?:id|_.*)$|(?:Hash|Json|Token|Secret|Signature|Authority|Snapshot|Checksum|Cursor|Etag)$|^(?:external|historical)[A-Z]/,Kn=/^(?:created|updated|deleted|synced|archived)At$|^last[A-Z]\w*At$/,qn=/^(?:status|state)$|(?:Status|State)$/,Jn=/^(?:kind|type|category|method|channel|stage|priority|segment|tier|source)$|(?:Kind|Type|Category|Method|Channel|Stage|Priority|Segment|Tier)$/,Yn=/^(?:customer|vendor|supplier|client|member|employee|owner|assignee|product|location|project|account|contact)Id$/,Xn=50;function Zn(e){if(e.type===`datetime`)return e.name===`deletedAt`?void 0:`time`;if(!Gn.test(e.name)){if(e.type===`boolean`||e.type===`string`&&e.enum&&e.enum.length>0&&e.enum.length<=Xn)return`category`;if(e.type===`id`&&/Id$/.test(e.name))return`relation`}}function Qn(e){return e.type===`boolean`?10:e.type===`id`?Yn.test(e.name)?70:30:qn.test(e.name)?100:Jn.test(e.name)?80:50}function $n(e,t={}){let n=[...e.values()],r=new Map;for(let e of n){let t=Zn(e);t&&r.set(e.name,t)}let i=n.filter(e=>r.get(e.name)===`time`),a=(t.timeField&&e.get(t.timeField)?.type===`datetime`?t.timeField:void 0)??i.find(e=>e.businessDate)?.name??i.find(e=>!Kn.test(e.name))?.name??i.find(e=>e.name===`createdAt`)?.name??i[0]?.name,o=[...a?[a]:[],...i.map(e=>e.name).filter(e=>e!==a)],s;if(t.dimensions){s=t.dimensions.filter(t=>e.has(t)&&e.get(t)?.type!==`datetime`);for(let t of s)r.has(t)||r.set(t,e.get(t)?.type===`id`?`relation`:`category`);for(let[e,t]of[...r])t!==`time`&&!s.includes(e)&&r.delete(e)}else s=n.filter(e=>{let t=r.get(e.name);return t===`category`||t===`relation`}).map((e,t)=>({field:e,index:t})).sort((e,t)=>Qn(t.field)-Qn(e.field)||e.index-t.index).map(({field:e})=>e.name);return{kinds:r,timeFields:o,...a?{defaultTimeField:a}:{},dimensions:s}}function er(e,t={}){let n=$n(e,t);return{fields:[...e.values()].map(e=>{let t=n.kinds.get(e.name);return{name:e.name,label:e.label,type:e.type,...e.format?{format:e.format}:{},...e.enum?{enum:e.enum}:{},...t?{dimension:t}:{},filterOperators:Ln[e.type],aggregates:Rn(e.type)}}),timeFields:n.timeFields,...n.defaultTimeField?{defaultTimeField:n.defaultTimeField}:{},dimensions:n.dimensions}}var tr=new Set([`tenantId`,`tenant_id`]);function nr(e,t){let n=e.find(e=>e.id===t);if(!n)throw new q(`unknown_source`,`spec.source`,`'${t}' is not an available report source`);return n}function rr(e){let{included:t,excluded:n}=Vn(e,new Set(e.schema.map(e=>e.name))),r=new Map;for(let i of e.schema)i.name.startsWith(`_`)||tr.has(i.name)||n?.has(i.name)||t&&!t.has(i.name)||r.has(i.name)||r.set(i.name,{name:i.name,type:i.type,...i.format?{format:i.format}:{},...i.type===`string`&&i.enum?.length?{enum:i.enum}:{},...i.type===`datetime`&&i.format===`date`?{businessDate:!0}:{},label:i.label??Nn(i.name)});return r}function ir(e,t){let n=nr(e,t);return{id:n.id,label:n.label??Nn(n.id),...n.description?{description:n.description}:{},...er(rr(n),n)}}function ar(e){if(e instanceof Date)return Number.isNaN(e.getTime())?null:e;if(typeof e==`string`||typeof e==`number`){let t=new Date(e);return Number.isNaN(t.getTime())?null:t}return null}function or(e,t){let n=e[t.name];if(n==null)return null;switch(t.type){case`integer`:case`decimal`:{if(typeof n==`bigint`){if(n>BigInt(2**53-1)||n<BigInt(-(2**53-1)))throw new q(`invalid_result`,t.name,`integer value exceeds the JavaScript safe range`);return Number(n)}let e=typeof n==`number`?n:typeof n==`string`&&n.trim()!==``?Number(n):NaN;return Number.isFinite(e)?e:null}case`boolean`:return n===!0||n===1||n===`1`||n===`true`?!0:n===!1||n===0||n===`0`||n===`false`?!1:null;case`datetime`:return ar(n);default:return typeof n==`string`?n:String(n)}}function sr(e,t){let n=e instanceof Date?e.getTime():e,r=t instanceof Date?t.getTime():t;return typeof n==`boolean`||typeof r==`boolean`?Number(n)-Number(r):n<r?-1:+(n>r)}function cr(e,t,n){zn(e,t.type,n);let r=e=>or(e,t);switch(e.op){case`isNull`:return e=>r(e)===null;case`isNotNull`:return e=>r(e)!==null;case`in`:case`notIn`:{let i=e.value.map((e,r)=>Bn(t.type,e,`${n}.value[${r}]`)),a=e=>i.some(t=>sr(e,t)===0);return e.op===`in`?e=>{let t=r(e);return t!==null&&a(t)}:e=>{let t=r(e);return t!==null&&!a(t)}}case`contains`:{let i=Bn(t.type,e.value,`${n}.value`);return e=>{let t=r(e);return typeof t==`string`&&t.includes(i)}}default:{let i=Bn(t.type,e.value,`${n}.value`),a={eq:e=>e===0,ne:e=>e!==0,gt:e=>e>0,gte:e=>e>=0,lt:e=>e<0,lte:e=>e<=0}[e.op];return e=>{let t=r(e);return t!==null&&a(sr(t,i))}}}}function lr(e,t){let n=e.getUTCFullYear(),r=e.getUTCMonth(),i=e.getUTCDate();switch(t){case`minute`:return new Date(Date.UTC(n,r,i,e.getUTCHours(),e.getUTCMinutes()));case`hour`:return new Date(Date.UTC(n,r,i,e.getUTCHours()));case`day`:return new Date(Date.UTC(n,r,i));case`week`:{let t=(e.getUTCDay()+6)%7;return new Date(Date.UTC(n,r,i-t))}case`month`:return new Date(Date.UTC(n,r,1));case`quarter`:return new Date(Date.UTC(n,Math.floor(r/3)*3,1));case`year`:return new Date(Date.UTC(n,0,1))}}function ur(e){return e===null?`n`:e instanceof Date?`d${e.getTime()}`:`${typeof e}:${String(e)}`}function dr(e,t,n){if(t===null)return n;let r=t.filter(e=>e!==null);switch(e){case`count`:return r.length;case`countDistinct`:return new Set(r.map(ur)).size;case`sum`:return r.length===0?null:r.reduce((e,t)=>e+t,0);case`avg`:return r.length===0?null:r.reduce((e,t)=>e+t,0)/r.length;case`min`:case`max`:{if(r.length===0)return null;let t=r[0];for(let n of r.slice(1)){let r=sr(n,t);(e===`min`?r<0:r>0)&&(t=n)}return t}default:return null}}function fr(e,t){if(typeof t!=`number`)return!1;switch(e.op){case`eq`:return t===e.value;case`ne`:return t!==e.value;case`gt`:return t>e.value;case`gte`:return t>=e.value;case`lt`:return t<e.value;case`lte`:return t<=e.value}}function pr(e,t,n){let r;return r=e===null&&t===null?0:e===null?-1:t===null?1:sr(e,t),n===`desc`?-r:r}async function mr(e,t,n){let r=On(e),i=nr(n.sources,r.source),a=rr(i),o=Un(r,a),s=(e,t)=>{let n=a.get(e);return n||Pn(t,e),n},c=[];i.schema.some(e=>e.name===`deletedAt`)&&c.push(e=>e.deletedAt===null||e.deletedAt===void 0);for(let[e,t]of r.filters.entries()){let n=`spec.filters[${e}]`;c.push(cr(t,s(t.field,`${n}.field`),n))}let l=t.filter(e=>c.every(t=>t(e))),u=r.dimensions.map(e=>{let t=a.get(e.field);return n=>{let r=or(n,t);return e.bucket&&r instanceof Date?lr(r,e.bucket):r}}),d=new Map;if(r.dimensions.length===0)d.set(``,{key:[],rows:l});else for(let e of l){let t=u.map(t=>t(e)),n=JSON.stringify(t.map(ur)),r=d.get(n);r?r.rows.push(e):d.set(n,{key:t,rows:[e]})}let f=r.measures.map(e=>e.field?a.get(e.field):null),p=[...d.values()].map(e=>{let t={};return r.dimensions.forEach((n,r)=>{t[n.as]=e.key[r]}),r.measures.forEach((n,r)=>{let i=f[r];t[n.as]=dr(n.fn,i?e.rows.map(e=>or(e,i)):null,e.rows.length)}),t});r.having.length>0&&(p=p.filter(e=>r.having.every(t=>fr(t,e[t.measure]))));let m=r.sort.length>0?r.sort:r.dimensions.length>0?[{by:r.dimensions[0].as,direction:`asc`}]:[];m.length>0&&(p=p.map((e,t)=>({values:e,index:t})).sort((e,t)=>{for(let n of m){let r=pr(e.values[n.by],t.values[n.by],n.direction);if(r!==0)return r}return e.index-t.index}).map(({values:e})=>e));let h=Math.min(r.limit,n.maxRows??K.maxRowLimit),g=p.length>h,_=p.slice(0,h).map(e=>{let t={};for(let n of o)t[n.id]=Wn(n,e[n.id]);return t});return{version:1,specHash:await jn(r),title:r.title,columns:o,rows:_,rowCount:_.length,truncated:g,ranAt:(n.now?.()??new Date).toISOString(),chart:r.chart}}var Q=864e5,hr=e=>new Date(e).toISOString().slice(0,10),gr=[`january`,`february`,`march`,`april`,`may`,`june`,`july`,`august`,`september`,`october`,`november`,`december`],_r={first:1,second:2,third:3,fourth:4},vr=[[`minute`,/\b(?:minutely|(?:per|by|each|every|a) minute|minute by minute)\b/],[`hour`,/\b(?:hourly|(?:per|by|each|every|an?) hour|hour by hour)\b/],[`day`,/\b(?:daily|(?:per|by|each|every|a) day|day by day)\b/],[`week`,/\b(?:weekly|(?:per|by|each|every|a) week|week by week|week over week)\b/],[`month`,/\b(?:monthly|(?:per|by|each|every|a) month|month by month|month over month)\b/],[`quarter`,/\b(?:quarterly|(?:per|by|each|every|a) quarter|quarter by quarter|quarter over quarter)\b/],[`year`,/\b(?:yearly|annually|annual|(?:per|by|each|every|a) year|year by year|year over year)\b/]],yr=/\b(?:over time|trends?|trending|timeline|history)\b/;function br(e){return e===null?`month`:e<=31?`day`:e<=92?`week`:e<=1098?`month`:`quarter`}function xr(e){return Math.round((Date.parse(`${e.to}T00:00:00Z`)-Date.parse(`${e.from}T00:00:00Z`))/Q)}function Sr(e,t){let n=e.toLowerCase().replace(/[_-]+/g,` `).replace(/\s+/g,` `),r=t.getUTCFullYear(),i=t.getUTCMonth(),a=Date.UTC(r,i,t.getUTCDate()),o=a+Q,s=a-(t.getUTCDay()+6)%7*Q,c=Math.floor(i/3)*3,l=(e,t,n)=>({from:hr(e),to:hr(t),label:n}),u=/\b(?:last|past|previous|trailing)\s+(\d{1,4})\s+(day|week|month|year)s?\b/.exec(n);if(u){let e=Number(u[1]),n=u[2];if(e>0)return l(n===`day`?o-e*Q:n===`week`?o-e*7*Q:n===`month`?Date.UTC(r,i-e,t.getUTCDate()+1):Date.UTC(r-e,i,t.getUTCDate()+1),o,`last ${e} ${n}${e===1?``:`s`}`)}let d=/\bq([1-4])(?:\s*(?:of\s*)?((?:19|20)\d{2}))?\b/.exec(n)??/\b(first|second|third|fourth) quarter(?: (?:of )?((?:19|20)\d{2}))?\b/.exec(n);if(d){let e=/^\d$/.test(d[1])?Number(d[1]):_r[d[1]],t=(e-1)*3,n=d[2]?Number(d[2]):Date.UTC(r,t,1)<=a?r:r-1;return l(Date.UTC(n,t,1),Date.UTC(n,t+3,1),`Q${e} ${n}`)}if(/\b(?:year to date|ytd)\b/.test(n))return l(Date.UTC(r,0,1),o,`year to date`);if(/\b(?:month to date|mtd)\b/.test(n))return l(Date.UTC(r,i,1),o,`month to date`);if(/\btoday\b/.test(n))return l(a,o,`today`);if(/\byesterday\b/.test(n))return l(a-Q,a,`yesterday`);let f=/\b(this|current|last|previous|past) (week|month|quarter|year)\b/.exec(n);if(f){let e=f[1]!==`this`&&f[1]!==`current`,t=f[2],n=`${e?`last`:`this`} ${t}`;switch(t){case`week`:return e?l(s-7*Q,s,n):l(s,s+7*Q,n);case`month`:return e?l(Date.UTC(r,i-1,1),Date.UTC(r,i,1),n):l(Date.UTC(r,i,1),Date.UTC(r,i+1,1),n);case`quarter`:return e?l(Date.UTC(r,c-3,1),Date.UTC(r,c,1),n):l(Date.UTC(r,c,1),Date.UTC(r,c+3,1),n);default:return e?l(Date.UTC(r-1,0,1),Date.UTC(r,0,1),n):l(Date.UTC(r,0,1),Date.UTC(r+1,0,1),n)}}let p=RegExp(`\\b(${gr.join(`|`)})(?: ((?:19|20)\\d{2}))?\\b`).exec(n);if(p&&(p[1]!==`may`||p[2])){let e=p,t=gr.indexOf(e[1]),n=e[2]?Number(e[2]):Date.UTC(r,t,1)<=a?r:r-1,i=e[1].charAt(0).toUpperCase()+e[1].slice(1);return l(Date.UTC(n,t,1),Date.UTC(n,t+1,1),`${i} ${n}`)}let m=/\b(?:in|for|during)\s+((?:19|20)\d{2})\b/.exec(n)??/^\s*((?:19|20)\d{2})\s*$/.exec(n);if(m){let e=Number(m[1]);return l(Date.UTC(e,0,1),Date.UTC(e+1,0,1),String(e))}return null}function Cr(e,t){let n=e.toLowerCase(),r=Sr(n,t)??void 0,i=vr.find(([,e])=>e.test(n))?.[0],a=yr.test(n);!i&&a&&(i=br(r?xr(r):null));let o=!!(i||r||a)||/\b(?:date|dates|time|when|minute|hour|day|week|month|quarter|year)s?\b/.test(n);return{...i?{bucket:i}:{},...r?{range:r}:{},mentionsTime:o}}var wr=[`today`,`yesterday`,`this_week`,`last_week`,`this_month`,`last_month`,`this_quarter`,`last_quarter`,`this_year`,`last_year`,`all_time`],Tr=[`minute`,`hour`,`day`,`week`,`month`,`quarter`,`year`],Er=[`count`,`sum`,`avg`,`min`,`max`],Dr=[`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`contains`],Or=4,kr=3,Ar=64,jr=8;function Mr(e){let t={type:`string`,maxLength:Ar};return{type:[`object`,`null`],properties:{source:e.length?{enum:[...e]}:{type:`string`,maxLength:K.maxSourceIdLength},measures:{type:`array`,maxItems:Or,items:{type:`object`,properties:{fn:{enum:[...Er]},field:t},required:[`fn`],additionalProperties:!1}},groupBy:t,bucket:{enum:[...Tr]},period:{enum:[...wr]},range:{type:`string`,maxLength:40},dateField:t,filters:{type:`array`,maxItems:kr,items:{type:`object`,properties:{field:t,op:{enum:[...Dr]},value:{type:[`string`,`number`,`boolean`]}},required:[`field`,`op`,`value`],additionalProperties:!1}},title:{type:`string`,maxLength:K.maxTitleLength}},required:[`source`],additionalProperties:!1}}var Nr=(e,t)=>typeof e==`string`&&t.includes(e)?e:void 0,Pr=(e,t=Ar)=>typeof e==`string`&&e.trim()&&e.trim().length<=t?e.trim():void 0;function Fr(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e,n=Pr(t.source,K.maxSourceIdLength);if(!n)return null;let r=e=>t[e]!==void 0&&t[e]!==null,i=Array.isArray(t.unreadable)?t.unreadable.filter(e=>typeof e==`string`&&e.trim().length>0).slice(0,jr).map(e=>e.trim().slice(0,Ar)):[];r(`measures`)&&!Array.isArray(t.measures)&&i.push(`the measures`),r(`filters`)&&!Array.isArray(t.filters)&&i.push(`the filters`);let a=Array.isArray(t.measures)?t.measures.slice(0,Or).flatMap(e=>{let t=e&&typeof e==`object`?e:{},n=Nr(t.fn,Er);if(!n)return i.push(`a measure`),[];let r=Pr(t.field);return[{fn:n,...r?{field:r}:{}}]}):[],o=Array.isArray(t.filters)?t.filters.slice(0,kr).flatMap(e=>{let t=e&&typeof e==`object`?e:{},n=Pr(t.field),r=Nr(t.op,Dr),a=t.value;return!n||!r||!(typeof a==`string`&&a.length<=256||typeof a==`number`&&Number.isFinite(a)||typeof a==`boolean`)?(i.push(n?`the ${n} filter`:`a filter`),[]):[{field:n,op:r,value:a}]}):[];Array.isArray(t.measures)&&t.measures.length>Or&&i.push(`more than ${Or} measures`),Array.isArray(t.filters)&&t.filters.length>kr&&i.push(`more than ${kr} filters`);let s=Pr(t.groupBy),c=Nr(t.bucket,Tr),l=Nr(t.period,wr),u=Pr(t.dateField),d=Pr(t.range,40),f=Pr(t.title,K.maxTitleLength);return r(`range`)&&!d&&i.push(`the period`),r(`groupBy`)&&!s&&i.push(`the grouping`),r(`bucket`)&&!c&&i.push(`the time grouping`),r(`period`)&&!l&&i.push(`the period`),r(`dateField`)&&!u&&i.push(`the date`),{source:n,...a.length?{measures:a}:{},...s?{groupBy:s}:{},...c?{bucket:c}:{},...l?{period:l}:{},...d?{range:d}:{},...u?{dateField:u}:{},...o.length?{filters:o}:{},...f?{title:f}:{},...i.length?{unreadable:i}:{}}}var Ir=e=>e.toLowerCase().replace(/[^a-z0-9]/g,``);function Lr(e,t,n=()=>!0){let r=Ir(e),i=t.filter(n);return i.find(t=>t.name===e)??i.find(e=>Ir(e.name)===r)??i.find(e=>Ir(e.label)===r)}function Rr(e){let t=e.slice(0,6),n=e.length>t.length?`, …`:``;return t.length<=1?`${t.join(``)}${n}`:`${t.slice(0,-1).join(`, `)}${n} or ${t[t.length-1]}`}var $=e=>({ok:!1,question:e}),zr=e=>e.options.length?{ok:!1,question:e.prompt,followUp:{...e,default:e.options[0].value}}:{ok:!1,question:e.prompt.replace(/…$/,` what?`)},Br=8;function Vr(e){let t=e=>(e.amountField?2:0)+ +!!e.dateField;return[...e].sort((e,n)=>t(n)-t(e))}function Hr(e){let t=Vr(e).slice(0,Br);return t.length?{field:`source`,label:`Records`,prompt:`Which records should the report cover?`,options:t.map(e=>({value:e.id,label:e.label,apply:{source:e.id}})),default:t[0].id}:null}function Ur(e){return e.length?`Which records should the report cover?`:`Which records should the report cover? Add a recipe with records first, such as invoicing?`}var Wr={minute:`minute`,minutely:`minute`,hour:`hour`,hourly:`hour`,day:`day`,daily:`day`,week:`week`,weekly:`week`,month:`month`,monthly:`month`,quarter:`quarter`,quarterly:`quarter`,year:`year`,yearly:`year`,annual:`year`,annually:`year`},Gr=new Set([`by`,`per`,`the`,`each`,`every`,`a`,`over`,`time`,`date`,`dates`,`in`]);function Kr(e){let t=e.replace(/([a-z])([A-Z])/g,`$1 $2`).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean),n,r=!1,i=[];for(let e of t){let t=e.endsWith(`s`)?e.slice(0,-1):e,a=Wr[e]??Wr[t];a?(n??=a,r=!0):Gr.has(e)?(e===`date`||e===`dates`||e===`time`)&&(r=!0):i.push(e)}return{...n?{bucket:n}:{},rest:i.join(` `),time:r}}var qr=[{value:`this month`,label:`This month`},{value:`last month`,label:`Last month`},{value:`this quarter`,label:`This quarter`},{value:`last quarter`,label:`Last quarter`},{value:`this year`,label:`This year`},{value:`last year`,label:`Last year`},{value:`all time`,label:`All time`}];function Jr(e,t,n){let r=e=>e.replace(/([a-z\d])([A-Z])/g,`$1_$2`).toLowerCase().replace(/[^a-z0-9_]+/g,`_`);return(e===`count`||!t?`number_of_${r(n)}`:e===`sum`?r(t).startsWith(`total`)?r(t):`total_${r(t)}`:`${{avg:`average`,min:`lowest`,max:`highest`}[e]}_${r(t)}`).slice(0,K.maxAliasLength).replace(/_+$/,``)}var Yr={eq:`is`,ne:`is not`,gt:`over`,gte:`at least`,lt:`under`,lte:`at most`,contains:`contains`},Xr=/^-?\s*[$€£¥]?\s*-?(\d{1,3}(,\d{3})+|\d+)(\.\d{1,2})?$/;function Zr(e){if(typeof e==`number`)return Number.isFinite(e)?Math.round(e*100):null;if(typeof e!=`string`)return null;let t=e.trim();if(!Xr.test(t))return null;let n=Number(t.replace(/[^0-9.-]/g,``));return Number.isFinite(n)?Math.round(n*100):null}var Qr=e=>e.type===`integer`||e.type===`decimal`;function $r(e,t,n,r=``){let i=t.find(t=>t.id===e.source);if(!i){let e=Hr(t);return e?{ok:!1,question:e.prompt,followUp:e}:$(Ur(t))}let a=ir(t,i.id),{fields:o}=a,s=i.label,c=e=>o.find(t=>t.name===e)?.label??e;if(e.unreadable?.length)return $(`I could not read ${Rr(e.unreadable).replace(/ or ([^,]+)$/,` and $1`)} for the ${s} report. Can you say that again?`);let l=Cr(r,n),u=e.measures?.length?e.measures:[{fn:`count`},...i.amountField?[{fn:`sum`,field:i.amountField}]:[]],d=[];for(let[e,t]of u.entries()){if(t.fn===`count`){d.some(e=>e.fn===`count`)||d.push({fn:`count`,as:Jr(`count`,void 0,i.id)});continue}let n=t.field??i.amountField,r=n?Lr(n,o,e=>t.fn===`min`||t.fn===`max`?Qr(e)||e.type===`datetime`:Qr(e)):void 0;if(!r){let n=o.filter(e=>Qr(e)&&e.name!==`id`);if(!n.length)return $(`${s} have no amounts to total. Should I count them instead?`);let r=[...n.filter(e=>e.name===i.amountField),...n.filter(e=>e.format===`money`&&e.name!==i.amountField),...n.filter(e=>e.format!==`money`)].slice(0,Br);return zr({field:`measure`,label:t.fn===`sum`?`Total`:`Amount`,prompt:`Which amount on ${s} should I ${t.fn===`sum`?`total`:`take the ${t.fn} of`}?`,options:r.map(n=>({value:n.name,label:n.label,apply:{measures:u.map((r,i)=>i===e?{fn:t.fn,field:n.name}:r)}}))})}d.push({fn:t.fn,field:r.name,as:Jr(t.fn,r.name,i.id)})}let f=e.groupBy,p=e.dateField,m=e.bucket;if(f){let e=Kr(f),t=Lr(f,o,e=>e.type===`datetime`);if(t)p??=t.name,m??=`month`,f=void 0;else if(e.time){let t=e.rest?Lr(e.rest,o,e=>e.type===`datetime`):void 0;(!e.rest||t)&&(t&&(p??=t.name),m??=e.bucket??l.bucket??`month`,f=void 0)}}m??=l.bucket;let h=null;if(e.range){if(h=Sr(e.range,n),!h&&!/\ball\s*time\b|\bever\b/i.test(e.range))return zr({field:`period`,label:`Period`,prompt:`Which period should the ${s} report cover?`,options:qr.map(e=>({...e,apply:{range:e.value,period:void 0}}))})}else e.period&&e.period!==`all_time`?h=Sr(e.period,n):e.period||(h=l.range??null);let g;if((m||h)&&(g=p?Lr(p,o,e=>e.type===`datetime`):a.defaultTimeField?o.find(e=>e.name===a.defaultTimeField):void 0,!g)){let e=a.timeFields.slice(0,Br);return e.length?zr({field:`dateField`,label:`Date`,prompt:`Which date on ${s} should the report use?`,options:e.map(e=>({value:e,label:c(e),apply:{dateField:e}}))}):$(`${s} have no date to group or filter by. Should the report cover all of them?`)}let _=[];if(f){let e=new Set(a.dimensions),t=Lr(f,o,t=>e.has(t.name))??Lr(f,o,e=>e.type!==`datetime`);if(t)_.push({field:t.name});else if(!(m&&g))return zr(ei(a,s,c,l.mentionsTime))}m&&g&&_.push({field:g.name,bucket:m});let v=[];h&&g&&(v.push({field:g.name,op:`gte`,value:h.from}),v.push({field:g.name,op:`lt`,value:h.to}));let y=[];for(let t of e.filters??[]){let e=Lr(t.field,o);if(!e)return $(`Which field on ${s} should "${t.field}" filter: ${Rr(o.map(e=>e.label))}?`);if(e.format===`money`){let n=Zr(t.value);if(n===null)return $(`What amount should ${e.label} be compared with?`);v.push({field:e.name,op:t.op,value:n}),y.push(`${e.label} ${Yr[t.op]} ${(n/100).toFixed(2)}`)}else v.push({field:e.name,op:t.op,value:t.value}),y.push(`${e.label} ${Yr[t.op]} ${String(t.value)}`)}let b=e.title??[[s,..._.map(e=>e.bucket?`by ${e.bucket}`:`by ${c(e.field).toLowerCase()}`)].join(` `),h?.label??``].filter(Boolean).join(`, `),x=y.join(`; `)||void 0,S=e=>e.measures.map(e=>e.as);try{let e=On({title:b,...x?{description:x}:{},source:i.id,dimensions:_,measures:d,filters:v}),t=e.measures.filter(e=>e.fn!==`count`),n=(t[0]??e.measures[0]).as,r=e.dimensions.find(e=>e.bucket),a=e.dimensions.find(e=>!e.bucket);return{ok:!0,spec:On({...e,sort:a&&!r?[{by:n,direction:`desc`}]:[],chart:e.dimensions.length?{type:r&&!a?`line`:`bar`,x:(a??r)?.as,y:t.length?t.map(e=>e.as):S(e)}:{type:`stat`,y:S(e)}}),source:i}}catch(e){if(e instanceof q)return $(`I could not build that report (${e.message}). What should it show?`);throw e}}function ei(e,t,n,r){let i=e.defaultTimeField,a=i?[`month`,`week`,`quarter`].map(e=>({value:`${i}:${e}`,label:`${n(i)} by ${e}`,keywords:[`${e}ly`,`date`,`time`,`per`,e],apply:{groupBy:void 0,bucket:e,dateField:i}})):[],o=e.dimensions.map(e=>({value:e,label:n(e),apply:{groupBy:e}})),s=r?[...a,...o]:[...o.slice(0,4),...a.slice(0,1),...o.slice(4),...a.slice(1)];return{field:`groupBy`,label:`Group by`,prompt:`Group ${t} by…`,options:s.slice(0,Br)}}function ti(e,t){return e.code===`invalid_value`?`That value does not fit ${t.label} (${e.message}). What value did you mean?`:e.code===`invalid_operation`?`I cannot use that on ${t.label} (${e.message}). What should the report show instead?`:`I could not build that report (${e.message}). What should it show?`}export{Et as C,At as S,en as _,$r as a,Ut as b,ir as c,mr as d,jn as f,rn as g,an as h,Hr as i,On as l,on as m,ti as n,Ur as o,An as p,Mr as r,q as s,Fr as t,Sr as u,Jt as v,Wt as x,Gt as y};
@@ -0,0 +1,2 @@
1
+ import{$ as e,B as t,Ct as n,D as r,Dt as i,E as a,Et as o,F as s,Ft as c,G as l,H as u,J as d,L as f,Lt as p,Ot as m,Pt as h,R as g,U as _,W as v,X as y,Y as b,Z as x,_ as S,a as C,b as w,bt as T,ct as E,d as D,ft as O,g as k,gt as A,h as j,ht as M,kt as N,m as P,mt as F,n as I,nt as L,o as R,p as ee,pt as z,q as B,s as V,st as H,tt as U,v as W,vt as G,wt as K,x as q,y as J}from"./DG3qFFTE.js";import"./xihTtKlq.js";import{i as Y,t as te}from"./YUSKx8_q.js";import{n as X,t as ne}from"./DK8Blf1Y.js";import{_ as re,a as ie,b as ae,c as oe,d as se,f as ce,g as le,h as ue,i as de,l as fe,m as pe,n as Z,o as me,p as he,s as ge,u as _e,v as ve,x as ye,y as be}from"./DF-0MxNw.js";var xe=[`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`,`audio/ogg;codecs=opus`],Q=class extends Error{dictationKind;code;constructor(e,t,n){super(t),this.name=`DictationError`,this.dictationKind=e,this.code=n??e}},Se=3e3;function Ce(e,t){return new Q(e,t)}function we(){return typeof MediaRecorder<`u`&&typeof navigator<`u`&&typeof navigator.mediaDevices?.getUserMedia==`function`}function Te(e=xe){if(typeof MediaRecorder>`u`)return``;let t=typeof MediaRecorder.isTypeSupported==`function`?e=>MediaRecorder.isTypeSupported(e):()=>!1;return e.find(e=>t(e))??``}var Ee=(e={})=>{let t=e.maxDurationMs??12e4,n=e.maxBytes??10485760,r=new Set,i=null,a=null,o=[],s=0,c=0,l=0,u=null,d=!1,f=!1,p=!1,m=null,h=null,g=e=>{for(let t of r)try{t(e)}catch{}},_=()=>{u&&clearTimeout(u),u=null;for(let e of i?.getTracks()??[])e.stop();i=null},v=()=>{if(l||=Date.now(),a&&a.state!==`inactive`)try{a.stop()}catch{h?.()}else h?.();_()};return{async start(){if(!we())throw Ce(`unsupported`,`This browser cannot record audio (no MediaRecorder).`);if(i=await navigator.mediaDevices.getUserMedia(e.constraints??{audio:!0}),p){_();return}let r=Te(e.mimeTypes);try{a=r?new MediaRecorder(i,{mimeType:r}):new MediaRecorder(i)}catch(e){throw _(),e}m=new Promise(e=>{h=e}),a.addEventListener(`dataavailable`,e=>{e.data&&e.data.size!==0&&!p&&(o.push(e.data),s+=e.data.size,s>n&&!f&&(f=!0,o=[],g(`size`),v()))}),a.addEventListener(`stop`,()=>h?.()),a.addEventListener(`error`,()=>v()),a.start(1e3),c=Date.now(),u=setTimeout(()=>{d=!0,g(`time`),v()},t)},async stop(){if(!a)throw _(),Ce(`unsupported`,`Recording never started.`);v();let t;await Promise.race([m,new Promise(e=>{t=setTimeout(e,Se)})]),t&&clearTimeout(t);let r=a.mimeType||Te(e.mimeTypes),i={audio:new Blob(o,r?{type:r}:void 0),mimeType:r||`audio/webm`,durationMs:Math.max(0,(l||Date.now())-c),reachedTimeLimit:d};if(o=[],f||i.audio.size>n)throw Ce(`too-long`,`The recording is too large to send.`);return i},cancel(){p=!0,o=[],v()},onLimit(e){return r.add(e),()=>r.delete(e)}}};b([`click`,`change`]);var De=l(`<span class="required svelte-5fecqg" aria-hidden="true">*</span>`),Oe=l(`<label class="smrt-field-label svelte-5fecqg" data-smrt-component="FieldLabel"> <!></label>`),ke=l(`<span class="smrt-field-label svelte-5fecqg" data-smrt-component="FieldLabel"> <!></span>`);function Ae(e,n){let r=C(n,`required`,3,!1);var i=v(),a=z(i),o=e=>{var i=Oe(),a=O(i,!0),o=M(a),s=e=>{var t=De();_(e,t)};t(o,e=>{r()&&e(s)}),c(i),H(()=>{W(i,`id`,n.id),W(i,`for`,n.for),u(a,n.label)}),_(e,i)},s=e=>{var i=ke(),a=O(i,!0),o=M(a),s=e=>{var t=De();_(e,t)};t(o,e=>{r()&&e(s)}),c(i),H(()=>{W(i,`id`,n.id),u(a,n.label)}),_(e,i)};t(a,e=>{n.for?e(o):e(s,-1)}),_(e,i)}var je=l(`<input type="hidden" class="svelte-jccarb"/>`),Me=l(`<button type="button" role="option"><!></button>`),Ne=l(`<div class="options svelte-jccarb" role="listbox"></div>`),Pe=l(`<div class="options empty svelte-jccarb" aria-hidden="true"> </div>`),Fe=l(`<div class="sr-status svelte-jccarb" role="status" aria-live="polite"> </div>`),Ie=l(`<div data-smrt-component="Combobox"><!> <!> <input role="combobox" autocomplete="off" aria-autocomplete="list" class="svelte-jccarb"/> <!> <!></div>`);function Le(r,o){let l=B();m(o,!0);let p=C(o,`value`,15,``),h=C(o,`disabled`,3,!1),g=C(o,`required`,3,!1),b=C(o,`allowCustom`,3,!1),k=C(o,`filter`,3,!0),j=C(o,`busy`,3,!1),N=C(o,`invalid`,3,!1),P=C(o,`class`,3,``),I=`smrt-combobox-${l}`,R=`${I}-list`,ee=ve(),V=T(null),U=T(null),K=T(!1),q=L(()=>p());function J(e){if(!e)return``;let t=o.options.find(t=>String(t.value)===e);return t?t.label:o.valueLabel?o.valueLabel:b()?e:``}let Y=T(A(L(()=>J(p())))),te=T(!1),X=T(0),ne=n(()=>e(te)&&k()?o.options.filter(t=>t.label.toLowerCase().includes(e(Y).toLowerCase())):o.options),re=n(()=>o.interaction===!1?void 0:o.interaction?.id??o.name??I);function ie(t,n=!1){if(t.disabled||h())return;let r=String(t.value)!==p();p(String(t.value)),G(Y,t.label,!0),G(te,!1),G(K,!1),o.onvaluechange?.(p()),n&&r&&(le(ee,e(re),o.interaction===!1?void 0:o.interaction?.subject),e(V)&&be(e(V)))}function oe(e){let t=String(e??``),n=ge(o.options,t,!0);n?ie(n):b()&&(p(t),G(Y,t,!0),G(te,!1),o.onvaluechange?.(t))}function se(e){let t=_e(e),n=ge(o.options,t,!0);return n?String(n.value):(b(),t)}function ce(){if(e(K))return;G(K,!0),G(te,!1);let t=o.options.findIndex(e=>String(e.value)===p());G(X,t>=0?t:0,!0),o.onquery?.(``)}function de(){G(K,!1),G(te,!1)}function fe(t){G(Y,t.currentTarget.value,!0),G(te,!0),G(K,!0),G(X,0),o.onquery?.(e(Y)),b()&&(p(e(Y)),o.onvaluechange?.(p()))}function pe(t){if(t.key===`ArrowDown`){if(t.preventDefault(),!e(K)){ce();return}let n=e(ne).map((e,t)=>e.disabled?-1:t).filter(e=>e>=0),r=n.indexOf(e(X));G(X,n[(r+1)%n.length]??0,!0)}else if(t.key===`ArrowUp`){t.preventDefault();let n=e(ne).map((e,t)=>e.disabled?-1:t).filter(e=>e>=0),r=n.indexOf(e(X));G(X,n[(r-1+n.length)%n.length]??0,!0)}else t.key===`Enter`&&e(K)&&e(ne)[e(X)]?(t.preventDefault(),ie(e(ne)[e(X)],!0)):t.key===`Escape`&&de()}E(()=>{e(X)>=e(ne).length&&G(X,0)}),E(()=>{let t=e(U)?.form;if(!t)return;let n=!1,r=new Set,i=t=>{let i=p(),a=e(Y),s=setTimeout(()=>{r.delete(s),!(n||t.defaultPrevented||p()!==i||e(Y)!==a)&&(p(q),G(Y,J(q),!0),G(te,!1),G(K,!1),le(ee,e(re),o.interaction===!1?void 0:o.interaction?.subject),o.onvaluechange?.(p()))});r.add(s)};return t.addEventListener(`reset`,i),()=>{n=!0,t.removeEventListener(`reset`,i);for(let e of r)clearTimeout(e)}}),E(()=>{if(!e(K))return;let t=t=>{e(V)&&!e(V).contains(t.target)&&de()},n=t=>{e(V)&&!e(V).contains(t.target)&&de()};return document.addEventListener(`pointerdown`,t,!0),document.addEventListener(`focusin`,n,!0),()=>{document.removeEventListener(`pointerdown`,t,!0),document.removeEventListener(`focusin`,n,!0)}}),E(()=>{let t=J(p());e(te)||G(Y,t,!0)}),E(()=>{e(U)&&e(U).setCustomValidity(g()&&!h()&&!p()&&e(Y).trim()!==``?`Choose an option from the list.`:``)}),ue(()=>{let t=e(V),n=e(U);return!t||!n||o.interaction===!1?!1:{controlId:e(re),subject:o.interaction?.subject,metadata:{kind:`combobox`,label:o.label,description:o.interaction?.description,sensitivity:o.interaction?.sensitivity??`public`,readable:o.interaction?.readable,writable:o.interaction?.writable,constraints:{required:g()},options:o.options},getValue:()=>p(),prepareValue:se,setValue:oe,clear:()=>(p(``),G(Y,``),o.onvaluechange?.(``),!0),focus:()=>n.focus(),reveal:()=>ye(t),highlight:e=>ae(t,e),validate:()=>n.reportValidity(),validateValue:e=>{let t=String(e??``),n=ge(o.options,t,!0);return n?n.disabled!==!0:b()&&(!g()||t.length>0)},getState:()=>({disabled:n.matches(`:disabled`),valid:n.validity.valid,validationMessage:n.validationMessage||void 0})}});var Z=Ie(),me=O(Z);Ae(me,{get for(){return I},get label(){return o.label},get required(){return g()}});var he=M(me,2),xe=e=>{var t=je();S(t),H(()=>{W(t,`name`,o.name),w(t,p()),t.disabled=h()}),_(e,t)};t(he,e=>{o.name&&e(xe)});var Q=M(he,2);S(Q),D(Q,e=>G(U,e),()=>e(U));var Se=M(Q,2),Ce=n=>{var r=Ne();f(r,23,()=>e(ne),e=>e.value,(n,r,i)=>{var l=Me();let f;var m=O(l),h=t=>{var n=v(),i=z(n);s(i,()=>o.optionContent,()=>e(r)),_(t,n)},g=t=>{var n=d();H(()=>u(n,e(r).label)),_(t,n)};t(m,e=>{o.optionContent?e(h):e(g,-1)}),c(l),H(t=>{W(l,`id`,`${R}-${e(i)}`),W(l,`aria-selected`,t),l.disabled=e(r).disabled,f=a(l,1,`svelte-jccarb`,null,f,{active:e(i)===e(X)})},[()=>String(e(r).value)===p()]),y(`pointerdown`,l,e=>e.preventDefault()),y(`click`,l,()=>ie(e(r),!0)),_(n,l)}),c(r),H(()=>W(r,`id`,R)),_(n,r)},we=e=>{var t=Pe(),n=F(t,!0);H(()=>u(n,o.status)),_(e,t)};t(Se,t=>{e(K)&&e(ne).length?t(Ce):e(K)&&o.status&&t(we,1)});var Te=M(Se,2),Ee=t=>{var n=Fe(),r=F(n,!0);H(()=>u(r,e(K)?o.status:``)),_(t,n)};t(Te,e=>{o.status!==void 0&&e(Ee)}),c(Z),D(Z,e=>G(V,e),()=>e(V)),H(()=>{a(Z,1,`combobox ${P()??``}`,`svelte-jccarb`),W(Z,`data-smrt-control`,e(re)),W(Z,`data-smrt-form`,ee?.formId),W(Z,`data-smrt-subject-type`,o.interaction===!1?void 0:o.interaction?.subject?.type),W(Z,`data-smrt-subject-id`,o.interaction===!1?void 0:o.interaction?.subject?.id),W(Q,`id`,I),W(Q,`placeholder`,o.placeholder),Q.disabled=h(),Q.required=g()&&!p(),W(Q,`aria-required`,g()?`true`:void 0),w(Q,e(Y)),W(Q,`aria-expanded`,e(K)),W(Q,`aria-controls`,R),W(Q,`aria-busy`,j()?`true`:void 0),W(Q,`aria-invalid`,N()?`true`:void 0),W(Q,`aria-describedby`,o.describedby),W(Q,`aria-activedescendant`,e(K)&&e(ne)[e(X)]?`${R}-${e(X)}`:void 0)}),x(`focus`,Q,ce),y(`click`,Q,ce),y(`input`,Q,fe),y(`keydown`,Q,pe),_(r,Z),i()}b([`click`,`input`,`keydown`,`pointerdown`]);var Re=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`value`,`disabled`,`required`,`name`,`class`,`interaction`,`children`,`aria-label`,`aria-describedby`,`aria-invalid`,`density`]),ze=l(`<select><!></select>`);function Be(t,r){m(r,!0);let a=C(r,`value`,15,``),o=C(r,`disabled`,3,!1),c=C(r,`required`,3,!1),l=C(r,`class`,3,``),u=R(r,Re),d=ie(),f=ve(),p=T(null),h=n(()=>r.id??d?.().inputId),g=n(()=>r[`aria-describedby`]??d?.().describedBy),y=n(()=>r[`aria-invalid`]??(d?.().invalid?`true`:void 0)),b=n(()=>{let e=d?.().interaction;return r.interaction===!1||e===!1?!1:{...e??{},...r.interaction??{}}}),x=n(()=>e(b)===!1?void 0:e(b).id??r.name??e(h));function S(t){a(String(t??``)),e(p)&&be(e(p))}function w(e){return e.disabled||e.closest(`optgroup`)?.disabled===!0}function E(t){let n=e(p);if(!n)return!0;let r=String(t??``);return r===``?!c():Array.from(n.options).some(e=>e.value===r&&!w(e))}ue(()=>{let t=e(p),n=e(x),i=e(b);return!t||!n||i===!1?!1:{controlId:n,subject:i.subject,metadata:{kind:`select`,label:d?.().label??r[`aria-label`]??void 0,description:i.description??d?.().description,sensitivity:i.sensitivity??`public`,readable:i.readable,writable:i.writable,constraints:{required:c()===!0},options:Array.from(t.options).map(e=>({value:e.value,label:e.label,disabled:w(e)}))},getValue:()=>a(),prepareValue:_e,setValue:S,clear:()=>(S(``),!0),focus:()=>t.focus(),reveal:()=>ye(t),highlight:e=>ae(t,e),validate:()=>t.reportValidity(),validateValue:E,getState:()=>({disabled:t.matches(`:disabled`),valid:t.validity.valid,validationMessage:t.validationMessage||void 0})}});function A(){e(p)?.focus()}function j(){return e(p)}var M={focus:A,getElement:j},N=ze();return k(N,()=>({id:e(h),disabled:o(),required:c(),name:r.name,"aria-label":r[`aria-label`],"aria-describedby":e(g),"aria-invalid":e(y),"data-density":r.density,class:`smrt-select__root ${l()??``}`,"data-smrt-control":e(x),"data-smrt-form":f?.formId,"data-smrt-subject-type":e(b)===!1?void 0:e(b).subject?.type,"data-smrt-subject-id":e(b)===!1?void 0:e(b).subject?.id,...u,"data-smrt-component":`Select`}),void 0,void 0,void 0,`svelte-vy6n12`),P(N,()=>{var e=O(N),t=v(),n=z(t);s(n,()=>r.children),_(e,t)}),D(N,e=>G(p,e),()=>e(p)),q(N,a),_(t,N),i(M)}var Ve=new Set([`$$slots`,`$$events`,`$$legacy`,`value`,`options`,`placeholder`,`readOnly`,`disabled`,`freeText`,`locale`,`name`,`form`,`label`,`id`,`required`]),He=l(`<option> </option>`),Ue=l(`<option> </option> <!> <!>`,1),We=l(`<!> <!> <!>`,1);function Ge(r,a){let o=B();m(a,!0);let s=C(a,`value`,15,``),c=C(a,`options`,19,()=>[]),l=C(a,`placeholder`,3,`—`),d=C(a,`readOnly`,3,!1),p=C(a,`disabled`,3,!1),h=C(a,`freeText`,3,!1),v=R(a,Ve),y=`${o}-label`,b=n(()=>a.id??`${o}-control`),x=n(()=>a.label?{id:e(b),"aria-labelledby":y}:{id:a.id}),S=T(void 0),w=T(void 0),E=n(()=>c().filter(e=>e.value!==``)),O=n(()=>s()!==``&&!e(E).some(e=>e.value===s())),k=n(()=>v);function A(){(h()?e(w):e(S))?.focus()}function j(){return(h()?e(w):e(S))?.getElement()??null}var N={focus:A,getElement:j},P=We(),I=z(P),L=t=>{Ae(t,{get id(){return y},get for(){return e(b)},get label(){return a.label},get required(){return a.required}})};t(I,e=>{a.label&&e(L)});var ee=M(I,2),U=t=>{{let r=n(()=>p()||d());D(Z(t,V(()=>e(k),()=>e(x),{get required(){return a.required},type:`text`,get name(){return a.name},get form(){return a.form},get placeholder(){return l()},get disabled(){return e(r)},get value(){return s()},set value(e){s(e)}})),e=>G(w,e,!0),()=>e(w))}},W=r=>{{let i=n(()=>p()||d());D(Be(r,V(()=>v,()=>e(x),{get required(){return a.required},get name(){return a.name},get form(){return a.form},get disabled(){return e(i)},get value(){return s()},set value(e){s(e)},children:(n,r)=>{var i=Ue(),a=z(i),o=F(a,!0);a.value=a.__value=``;var c=M(a,2),d=e=>{var t=He(),n=F(t,!0),r={};H(()=>{u(n,s()),r!==(r=s())&&(t.value=(t.__value=r)??``)}),_(e,t)};t(c,t=>{e(O)&&t(d)});var p=M(c,2);f(p,17,()=>e(E),g,(t,n)=>{var r=He(),i=F(r,!0),a={};H(()=>{r.disabled=e(n).disabled,u(i,e(n).label??e(n).value),a!==(a=e(n).value)&&(r.value=(r.__value=a)??``)}),_(t,r)}),H(()=>u(o,l())),_(n,i)},$$slots:{default:!0}})),e=>G(S,e,!0),()=>e(S))}};t(ee,e=>{h()?e(U):e(W,-1)});var K=M(ee,2),q=e=>{Z(e,{get id(){return o},type:`hidden`,get name(){return a.name},get form(){return a.form},get value(){return s()},get disabled(){return p()},interaction:!1})};return t(K,e=>{d()&&e(q)}),_(r,P),i(N)}`AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW`.split(` `);function Ke(e,t){try{return new Intl.DisplayNames(e,{type:t})}catch{return new Intl.DisplayNames(`en`,{type:t})}}var qe=new Set([`BOV`,`CHE`,`CHW`,`CLF`,`COU`,`MXV`,`USN`,`USS`,`UYI`,`UYW`,`XAG`,`XAU`,`XPD`,`XPT`,`XBA`,`XBB`,`XBC`,`XBD`,`XDR`,`XSU`,`XUA`,`XTS`,`XXX`]);function Je(e){let t=Ke(e,`currency`);return[...ne.keys()].filter(e=>!qe.has(e)).sort().flatMap(e=>{let n=t.of(e);return!n||n===e?[]:[{value:e,label:`${e} — ${n}`}]})}var Ye=new Set([`$$slots`,`$$events`,`$$legacy`,`value`,`options`,`locale`]);function Xe(t,r){m(r,!0);let a=C(r,`value`,15,``),o=C(r,`locale`,3,`en`),s=R(r,Ye),c=T(void 0),l=n(()=>r.options??Je(o()));function u(){e(c)?.focus()}function d(){return e(c)?.getElement()??null}var f={focus:u,getElement:d};return D(Ge(t,V(()=>s,{get options(){return e(l)},get value(){return a()},set value(e){a(e)}})),e=>G(c,e,!0),()=>e(c)),i(f)}var Ze=new WeakMap,Qe=Symbol(`smrt.localGestureBatchExecutor`),$e=new WeakMap,et=typeof Event>`u`?void 0:Object.getOwnPropertyDescriptor(Event.prototype,`isTrusted`)?.get,tt=typeof Event>`u`?void 0:Object.getOwnPropertyDescriptor(Event.prototype,`eventPhase`)?.get;function nt(e){let t=Object.getOwnPropertyDescriptor(e,`isTrusted`);if(!(!tt||Object.hasOwn(e,`eventPhase`)||et&&t||!et&&(!t||t.configurable||t.writable)))try{return{isTrusted:et?!!et.call(e):!!(t&&`get`in t?t.get?.call(e):t?.value),eventPhase:Number(tt.call(e))}}catch{return}}function rt(e){let t=`stage`,n={formId:``,controlId:``};try{t=e.action}catch{}try{let t=e.identity;n={formId:t.formId,controlId:t.controlId,...t.subject?{subject:{type:t.subject.type,id:t.subject.id,...t.subject.label===void 0?{}:{label:t.subject.label}}}:{}}}catch{}return{ok:!1,action:t,identity:n,reason:`command_failed`}}function it(e){try{return $(e)}catch{return}}function at(e,t,n){return ot(e,[t],n).then(e=>e.results[0])}async function ot(e,t,n){let r=it(t);if(!r)return{ok:!1,results:t.map(rt)};let i=Ze.get(e)??e[Qe];if(!i){let t=$e.get(e)??new WeakSet;$e.set(e,t);let i=nt(n);if(!i?.isTrusted||i.eventPhase===0||t.has(n))return{ok:!1,results:r.map(e=>({ok:!1,action:e.action,identity:$(e.identity),reason:`local_gesture_required`}))};t.add(n);let a=[];for(let t of r)a.push(await e.execute(t,{source:`user`,confirmed:!0,localGesture:!0}));return{ok:a.every(e=>e.ok),results:a}}return i(e,r,n)}function st(e){return JSON.stringify([e.formId,e.controlId,e.subject?.type??null,e.subject?.id??null])}function ct(e){return[`stage`,`apply`,`discard`,`clear`,`undo`].includes(e)}function lt(e){return e.metadata.sensitivity===`secret`}function ut(e){return!!(e.setValueWithContext||e.setValue)}function dt(e,t,n){return e.setValueWithContext?e.setValueWithContext(t,n):e.setValue?.(t)}function ft(e){let t=e.metadata.capabilities,n=t?[...t]:[];return t||(n.push(`explain`),e.getValue&&e.metadata.readable!==!1&&n.push(`read`),e.focus&&n.push(`focus`),e.reveal&&n.push(`reveal`),e.highlight&&n.push(`highlight`),e.validate&&n.push(`validate`),ut(e)&&(n.push(`discard`),e.metadata.writable!==!1&&n.push(`stage`,`apply`,`undo`)),(e.clear||ut(e))&&e.metadata.writable!==!1&&n.push(`clear`)),n.filter(t=>t===`read`?!lt(e):t===`discard`||!ct(t)||!lt(e)&&e.metadata.writable!==!1)}function pt(e){return lt(e)||e.metadata.sensitivity===`sensitive`||e.metadata.readable===!1}function mt(e,t,n,r){if(!ct(e.action))return{allowed:!0};if(e.action!==`discard`){if(n.metadata.sensitivity===`secret`)return{allowed:!1,reason:`sensitive_control`};if(n.metadata.writable===!1)return{allowed:!1,reason:`control_not_writable`};if(n.state.disabled||n.state.readonly)return{allowed:!1,reason:`control_not_editable`}}return t.source===`agent`&&e.action!==`stage`?{allowed:!1,reason:`human_confirmation_required`}:[`apply`,`discard`,`clear`,`undo`].includes(e.action)&&!r?{allowed:!1,reason:`local_gesture_required`}:e.action!==`stage`&&!t.confirmed?{allowed:!1,reason:`consent_required`}:{allowed:!0}}function $(e){try{return structuredClone(e)}catch{if(e===void 0)return e;let t=JSON.stringify(e,(e,t)=>{if(typeof t==`function`||typeof t==`symbol`||typeof t==`bigint`)throw new DOMException(`Value is not cloneable`,`DataCloneError`);return t});if(t===void 0)throw new DOMException(`Value is not cloneable`,`DataCloneError`);return JSON.parse(t)}}function ht(e){try{return $(e)}catch{return}}function gt(e,t){if(Object.is(e,t))return!0;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}}function _t(e,t){if(!t)return!1;let n=e.getUserEditSnapshot?.();return n!==void 0&&n.revision!==t.revision}async function vt(e,t,n,r){let i=$(e.getUserEditSnapshot?.())??null,a=n&&i&&i.revision!==n.revision?$(i.value):t;for(let t=0;t<8;t+=1){e.restoreValue?await r(t=>e.restoreValue?.(a,t)):await r(t=>dt(e,a,t));let n=$(e.getUserEditSnapshot?.())??null;if(!i||!n||n.revision===i.revision)return;if(i=n,a=$(n.value),t===7){e.restoreValue?await r(t=>e.restoreValue?.(a,t)):ut(e)&&await r(t=>dt(e,a,t));return}}}function yt(e){return[`stale_revision`,`staged_value_stale`,`no_staged_value`,`staged_value_invalid`,`staged_value_rejected`,`nothing_to_undo`,`sensitive_control`].includes(e)?e:`command_failed`}async function bt(e,t,n){if(!e.validateValue)return{};let r=await e.validateValue($(t),n);return typeof r==`boolean`?{valid:r}:typeof r==`string`?{valid:!1,validationMessage:r}:{valid:r.valid,validationMessage:r.message}}function xt(e={}){let t=new Map,n=new Map,r=new Map,i=new Map,a=new Map,o=new WeakMap,s=new Map,c=new Set,l=e.now??Date.now,u=new WeakMap,d=new WeakSet,f=new WeakSet,p=new Map,m=new Map,h=0,g=(e,t)=>({...t,getUserEditSnapshot:()=>t.getUserEditSnapshot?.()??a.get(e)??{revision:0,value:t.getValue?.()}}),_=(e,n)=>{m.set(e,(m.get(e)??0)+1);let r=t=>{let n=(t.get(e)??1)-1;n===0?t.delete(e):t.set(e,n)},i={execute(n,r={source:`agent`}){if(ct(n.action)&&st(n.identity)===e){let r=t.get(e);return Promise.resolve(C(n,!1,r,r&&pt(r)?`command_failed`:`reentrant_mutation`))}return w.execute(n,r)}},a;try{a=n(i)}catch(e){throw r(m),e}return r(m),a},v=async(e,r,i)=>{let a=t.get(e),s=n.get(e);if(!a||!s||s===r)return!1;let c=g(e,a),l=o.get(s)??{value:i,userEdit:{revision:0,value:$(i)}};return await vt(c,$(l.value),$(l.userEdit),t=>_(e,t)),!0},y=(e,t)=>{let n=(p.get(e)??Promise.resolve()).catch(()=>void 0).then(t),r=n.then(()=>void 0,()=>void 0);return p.set(e,r),r.finally(()=>{p.get(e)===r&&p.delete(e)}),n},b=async(e,t,n,r,i,a)=>{let o={registration:t,generation:n,previousValue:$(r),immediateValue:$(r),previousUserEdit:$(i)};try{s.set(e,o);let n=_(e,a);return o.immediateValue=$(t.getValue?.()),await n}finally{s.get(e)===o&&s.delete(e)}},x=e=>{let t={...e,timestamp:l()};for(let e of c)try{e($(t))}catch{}},S=e=>{let t=st(e.identity),n=pt(e),i=r.get(t),a=i?!gt(i.baseValue,e.getValue?.()):!1,o=e.getState?.(),s=i&&!lt(e)&&e.metadata.writable!==!1?{value:n?void 0:$(i.value),valueRedacted:n,provenance:{...i.provenance},stagedAt:i.stagedAt,revision:i.revision,stale:a,valid:i.valid,validationMessage:n?void 0:i.validationMessage}:void 0,c=n?void 0:e.getValue?.(),l=n?void 0:ht(c);return{identity:$(e.identity),metadata:{...e.metadata,capabilities:ft(e),constraints:e.metadata.constraints?{...e.metadata.constraints}:void 0,options:e.metadata.options?.map(e=>({...e})),...e.metadata.valueSchema?{valueSchema:$(e.metadata.valueSchema)}:{}},state:{...o,validationMessage:n?void 0:o?.validationMessage,value:l,valueRedacted:n||c!==void 0&&l===void 0,...s?{stagedValue:s.value,stagedValueRedacted:s.valueRedacted,staged:s}:{}}}},C=(e,t,n,r)=>{let i;try{i=n?S(n):void 0}catch{}return{ok:t,action:e.action,identity:$(e.identity),snapshot:i,reason:r}},w={register(e){let c=st(e.identity),l={};return L(()=>{try{let t=$(e.getValue?.()),r=s.get(c),i=$(e.getUserEditSnapshot?.()??a.get(c)),u=r&&i&&(!r.previousUserEdit||i.revision!==r.previousUserEdit.revision),d=r&&n.get(c)===r.generation&&(e===r.registration||gt(t,r.immediateValue))&&!u?$(r.previousValue):t;o.set(l,{value:d,userEdit:i??{revision:0,value:$(d)}})}catch{}}),t.set(c,e),n.set(c,l),x({type:`registered`,identity:e.identity}),()=>{n.get(c)===l&&(t.delete(c),n.delete(c),r.delete(c),i.delete(c),a.delete(c),x({type:`unregistered`,identity:e.identity}))}},unregister(e){let o=st(e);t.delete(o)&&(n.delete(o),r.delete(o),i.delete(o),a.delete(o),x({type:`unregistered`,identity:e}))},recordUserEdit(e){let n=st(e),r=t.get(n);if(!r)return;let i=a.get(n);a.set(n,{revision:(i?.revision??0)+1,value:$(r.getValue?.())})},list(e){return[...t.values()].filter(t=>!e||t.identity.formId===e).map(S)},get(e){let n=t.get(st(e));return n?S(n):void 0},refresh(e){for(let n of t.values())e&&n.identity.formId!==e||x({type:`refreshed`,identity:n.identity})},async execute(a,o={source:`user`,confirmed:!0}){let s=a,c=u.get(o);if(c&&u.delete(o),!d.has(o))try{a=$(a)}catch{return rt(a)}let f=st(a.identity);if(ct(a.action)&&(m.get(f)??0)>0){let e=t.get(f);return C(a,!1,e,e&&pt(e)?`command_failed`:`reentrant_mutation`)}let p=!!(c&&c.command===s&&gt(c.snapshot,a)&&c.generation===n.get(f));if(ct(a.action)&&!d.has(o)){let e={...o};d.add(e);let t=a;return p&&u.set(e,{command:t,snapshot:$(t),generation:c?.generation}),await y(f,()=>this.execute(t,e))}let w=t.get(f);if(!w)return C(a,!1,void 0,`not_found`);let T=n.get(f);if(!T)return C(a,!1,void 0,`not_found`);let E=g(f,w),D=async(e,t)=>{await v(f,T,e)||await vt(E,e,t,e=>_(f,e))},O=pt(w)&&(a.action===`stage`||a.action===`apply`)?$({...a,value:void 0}):$(a),k={source:o.source,confirmed:o.confirmed,localGesture:p,actorId:o.actorId,sessionId:o.sessionId},A=e.policy;try{let e=S(w),t,s,c=a.action===`apply`||a.action===`clear`||a.action===`undo`?$(E.getUserEditSnapshot?.())??null:null,u=mt(a,k,e,k.localGesture===!0),d=u;if(u.allowed&&a.action===`stage`)for(let r=0;r<8;r+=1){if(s=$(w.getValue?.()),t=$(w.prepareValue?_(f,()=>w.prepareValue?.(a.value)):a.value),e=S(w),O=pt(w)?$({...a,value:void 0}):$({...a,value:t}),d=A?await _(f,t=>A($(O),$(k),$(e),t)):u,n.get(f)!==T)throw Error(`staged_value_stale`);if(u=mt(a,k,S(w),k.localGesture===!0),!u.allowed)throw Error(u.reason??`denied`);if(gt(s,w.getValue?.()))break;if(r===7)throw Error(`staged_value_stale`)}else u.allowed&&A&&(d=await _(f,t=>A($(O),$(k),$(e),t)));if(n.get(f)!==T||c&&_t(E,c))throw Error(`staged_value_stale`);let m=mt(a,k,S(w),k.localGesture===!0);if(!m.allowed)throw Error(m.reason??`denied`);if(!d.allowed){let e=pt(w)?yt(d.reason??`denied`):d.reason??`denied`,t=C(a,!1,w,e);return x({type:`command`,identity:a.identity,command:O,context:k,result:t}),t}if(!ft(w).includes(a.action)){let e=C(a,!1,w,`unsupported`);return x({type:`command`,identity:a.identity,command:O,context:k,result:e}),e}switch(a.action){case`focus`:o.source===`agent`?(await w.reveal?.(),await w.highlight?.()):await w.focus?.();break;case`reveal`:await w.reveal?.();break;case`highlight`:await w.highlight?.(a.durationMs);break;case`explain`:break;case`validate`:await _(f,e=>w.validate?.(e));break;case`stage`:h+=1;{let e=h,i=t,c={value:$(i),baseValue:$(s),provenance:{source:o.source,actorId:o.actorId,sessionId:o.sessionId},stagedAt:l(),revision:e},u=r.get(f);r.set(f,c);try{let e=await _(f,e=>bt(w,i,e));if(n.get(f)!==T||r.get(f)!==c)throw Error(`stale_revision`);let t={identity:$(w.identity),metadata:{...w.metadata,capabilities:ft(w)},state:{...w.getState?.(),valueRedacted:pt(w)}},o=mt(a,k,t,k.localGesture===!0);if(!o.allowed)throw Error(o.reason??`denied`);if(!ft(w).includes(`stage`))throw Error(`unsupported`);Object.assign(c,e);let s=S(w),l={ok:!0,action:a.action,identity:{...a.identity},snapshot:s};return x({type:`staged`,identity:a.identity,command:O,context:k,staged:s.state.staged}),x({type:`command`,identity:a.identity,command:O,context:k,result:l}),l}catch(e){throw r.get(f)===c&&(u?r.set(f,u):r.delete(f)),e}}case`apply`:{let e=r.get(f);if(a.revision!==void 0&&e?.revision!==a.revision)throw Error(`stale_revision`);if(e&&!gt(e.baseValue,w.getValue?.()))throw Error(`staged_value_stale`);let t=`value`in a&&a.value!==void 0,o=t&&e!==void 0&&gt(a.value,e.value),s=t&&e!==void 0&&a.reviewedValueIsCanonical===!0&&p,l=o?e.value:s?w.prepareReviewedValue?_(f,()=>w.prepareReviewedValue?.(a.value)):w.prepareValue?_(f,()=>w.prepareValue?.(a.value)):a.value:t?w.prepareValue?_(f,()=>w.prepareValue?.(a.value)):a.value:e?.value;if(l===void 0&&!e)throw Error(`no_staged_value`);let u=$(l),d=await _(f,e=>bt(w,u,e));if(n.get(f)!==T||c&&_t(E,c))throw Error(`staged_value_stale`);if(e&&(r.get(f)!==e||!gt(e.baseValue,w.getValue?.())))throw Error(`stale_revision`);if(d.valid===!1)throw e&&Object.assign(e,d),Error(pt(w)?`staged_value_invalid`:d.validationMessage??`staged_value_invalid`);let m=mt(a,k,S(w),k.localGesture===!0);if(!m.allowed)throw Error(m.reason??`denied`);let h=$(w.getValue?.()),g=i.get(f)??[],v=c;try{await b(f,w,T,h,v,e=>dt(w,$(u),e))}catch(e){try{await D(h,v)}catch{}throw e}if(n.get(f)!==T||_t(E,v))throw await D(h,v),Error(`staged_value_stale`);let y=$(w.getValue?.());if(!gt(y,u)){try{await D(h,v)}catch{}throw Error(`staged_value_rejected`)}try{let t=await _(f,e=>w.validate?.(e));if(n.get(f)!==T||_t(E,v)||!gt(w.getValue?.(),y))throw Error(`staged_value_stale`);if(t===!1)throw e&&(e.valid=!1,e.validationMessage=w.getState?.().validationMessage??`staged_value_invalid`),Error(`staged_value_invalid`)}catch(e){let t;try{t=w.getValue?.()}catch{}if(gt(t,y))try{await D(h,v)}catch{}throw e}g.push({previousValue:h,appliedValue:y}),i.set(f,g),(!e||r.get(f)===e)&&r.delete(f);break}case`discard`:{let e=r.get(f);if(!e)throw Error(`no_staged_value`);if(a.revision!==void 0&&e.revision!==a.revision)throw Error(`stale_revision`);r.delete(f);break}case`clear`:{let e=$(w.getValue?.()),t,a=c;try{let n=await b(f,w,T,e,a,e=>w.clear?w.clear(e):dt(w,``,e));t=n===!0||n!==!1&&void 0}catch(t){try{await D(e,a)}catch{}throw t}if(n.get(f)!==T||_t(E,a))throw await D(e,a),Error(`staged_value_stale`);let o=w.getValue?.();if(t===!1||t!==!0&&gt(o,e)&&e!==``&&e!=null&&e!==!1&&!(Array.isArray(e)&&e.length===0)){try{await D(e,a)}catch{}throw Error(`staged_value_rejected`)}let s=i.get(f)??[];s.push({previousValue:e,appliedValue:$(o)}),i.set(f,s),r.delete(f);break}case`undo`:{let e=i.get(f)??[];if(e.length===0)throw Error(`nothing_to_undo`);let t=e.at(-1);if(!t)throw Error(`nothing_to_undo`);let r=$(w.getValue?.()),a=$(t.previousValue),o=c;if(!gt(r,t.appliedValue))throw Error(`staged_value_stale`);try{await b(f,w,T,r,o,e=>dt(w,$(a),e))}catch(e){try{await D(r,o)}catch{}throw e}if(n.get(f)!==T||_t(E,o))throw await D(r,o),Error(`staged_value_stale`);if(!gt(w.getValue?.(),a)){try{await D(r,o)}catch{}throw Error(`staged_value_rejected`)}e.pop(),i.set(f,e);break}}let g=C(a,!0,w);return x({type:`command`,identity:a.identity,command:O,context:k,result:g}),g}catch(e){let t=e instanceof Error?e.message:`command_failed`,n=C(a,!1,w,pt(w)?yt(t):t);return x({type:`command`,identity:a.identity,command:O,context:k,result:n}),n}},async executeBatch(e,t={source:`user`,confirmed:!0}){let n=it(e);if(!n)return{ok:!1,results:e.map(rt)};let r;try{r=$(t)}catch{return{ok:!1,results:n.map(rt)}}let i=[];for(let e of n)i.push(await this.execute(e,r));return{ok:i.every(e=>e.ok),results:i}},subscribe(e){return c.add(e),()=>c.delete(e)}},T=async(r,i,a)=>{let o=nt(a),s=e.isLocalGesture??(()=>o?.isTrusted);if(!o||!s(a)||o.eventPhase===0||f.has(a))return{ok:!1,results:i.map(e=>C(e,!1,t.get(st(e.identity)),`local_gesture_required`))};f.add(a);let c=i.map(e=>n.get(st(e.identity))),l=[];for(let[e,t]of i.entries()){let n={source:`user`,confirmed:!0};u.set(n,{command:t,snapshot:$(t),generation:c[e]});try{l.push(await r.execute(t,n))}finally{u.delete(n)}}return{ok:l.every(e=>e.ok),results:l}};return Ze.set(w,T),Object.defineProperty(w,Qe,{value:T,enumerable:!0}),w}var St=null;function Ct(){if(typeof window>`u`)return null;let e=window;return e.AudioContext??e.webkitAudioContext??null}function wt(){if(St)return St;let e=Ct();if(!e)return null;try{St=new e}catch{St=null}return St}function Tt(){let e=wt();e&&e.state===`suspended`&&e.resume().catch(()=>void 0)}async function Et(e={}){let t=wt();if(!t)return!1;try{t.state===`suspended`&&await t.resume()}catch{return!1}if(t.state!==`running`)return!1;let n=Math.max(0,Math.min(1,e.volume??.12)),r=t.currentTime+.01;for(let[e,i]of[[660,0],[990,.1]]){let a=t.createOscillator(),o=t.createGain();a.type=`sine`,a.frequency.value=e,o.gain.setValueAtTime(0,r+i),o.gain.linearRampToValueAtTime(n,r+i+.01),o.gain.exponentialRampToValueAtTime(1e-4,r+i+.09),a.connect(o),o.connect(t.destination),a.start(r+i),a.stop(r+i+.1)}return!0}var Dt=l(`<span class="smrt-dictation-dot svelte-7xgg87" aria-hidden="true"></span>`),Ot=l(`<span class="smrt-dictation-writing svelte-7xgg87" aria-hidden="true"></span>`),kt=l(`<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="svelte-7xgg87"><rect x="9" y="2" width="6" height="12" rx="3" class="svelte-7xgg87"></rect><path d="M5 10a7 7 0 0 0 14 0" class="svelte-7xgg87"></path><path d="M12 17v4" class="svelte-7xgg87"></path></svg> <!> <!>`,1),At=l(`<span class="smrt-dictation-help svelte-7xgg87" data-smrt-component="DictationButton"> </span>`),jt=l(`<!> <!>`,1);function Mt(r,a){let o=B();m(a,!0);let s=C(a,`disabled`,3,!1),c=C(a,`class`,3,``),{t:l}=te(),d=n(()=>a.dictation.active),f=n(()=>a.dictation.handsFree),p=n(()=>e(d)&&e(f)&&a.dictation.suspended),h=n(()=>e(d)&&e(f)&&a.dictation.speaking&&!e(p)),g=n(()=>e(f)&&a.dictation.queued>0),v=n(()=>a.dictation.state===`transcribing`),y=n(()=>e(d)?a.stopLabel??l(Y[`ui.dictation.stop`]):a.label??l(Y[`ui.dictation.start`])),b=`smrt-dictation-help-${o}`,x=n(()=>e(d)?e(f)?e(p)?l(Y[`ui.dictation.paused_speaking`]):l(Y[`ui.dictation.listening_hands_free`]):e(y):a.title??l(a.dictation.wantsHandsFree?Y[`ui.dictation.start_hands_free`]:Y[`ui.dictation.start_hint`]));function S(){Tt(),a.dictation.unlock(),a.dictation.toggle()}var w=jt(),T=z(w);{let r=n(()=>`smrt-dictation-button${e(d)?` smrt-dictation-button--listening`:``}${e(d)&&e(f)?` smrt-dictation-button--hands-free`:``}${e(h)?` smrt-dictation-button--speaking`:``}${e(p)?` smrt-dictation-button--paused`:``} ${c()}`.trim()),i=n(()=>e(v)||void 0),o=n(()=>e(x)===e(y)?void 0:b),l=n(()=>s()||e(v)),u=n(()=>e(f)?`hands-free`:void 0),m=n(()=>e(h)||void 0),C=n(()=>e(p)||void 0),w=n(()=>e(h)?`--smrt-dictation-level: ${a.dictation.level}`:void 0);X(T,{type:`button`,variant:`ghost`,size:`sm`,get class(){return e(r)},get"aria-label"(){return e(y)},get"aria-pressed"(){return e(d)},get"aria-busy"(){return e(i)},get title(){return e(x)},get"aria-describedby"(){return e(o)},get disabled(){return e(l)},onclick:S,get"data-dictation-state"(){return a.dictation.state},get"data-dictation-mode"(){return e(u)},get"data-dictation-speaking"(){return e(m)},get"data-dictation-paused"(){return e(C)},get style(){return e(w)},children:(n,r)=>{var i=kt(),o=M(z(i),2),s=e=>{var t=Dt();_(e,t)};t(o,t=>{e(d)&&t(s)});var c=M(o,2),l=e=>{var t=Ot();_(e,t)};t(c,t=>{(e(g)||e(f)&&a.dictation.state===`transcribing`)&&t(l)}),_(n,i)},$$slots:{default:!0}})}var E=M(T,2),D=t=>{var n=At(),r=F(n,!0);H(()=>{W(n,`id`,b),u(r,e(x))}),_(t,n)};t(E,t=>{e(x)!==e(y)&&t(D)}),_(r,w),i()}var Nt=l(`<span class="smrt-dictation-status-interim svelte-321zm9"> </span>`),Pt=l(`<span class="smrt-dictation-status-dot svelte-321zm9" aria-hidden="true"></span> <!>`,1),Ft=l(`<span class="smrt-dictation-status-spinner svelte-321zm9" aria-hidden="true"></span> `,1),It=l(`<div data-smrt-component="DictationStatus"><p role="status" aria-live="polite"><!></p> <p role="alert"><!></p></div>`);function Lt(o,s){m(s,!0);let l=C(s,`sending`,3,!1),f=C(s,`class`,3,``),{t:p}=te(),h=n(()=>l()||s.dictation.state===`starting`||s.dictation.state===`listening`||s.dictation.state===`stopping`||s.dictation.state===`transcribing`),g=n(()=>!l()&&s.dictation.handsFree&&s.dictation.state===`listening`);function y(e){switch(e){case`unsupported`:return p(Y[`ui.dictation.unsupported`]);case`denied`:return p(Y[`ui.dictation.denied`]);case`no-speech`:return p(Y[`ui.dictation.no_speech`]);case`microphone`:return p(Y[`ui.dictation.microphone`]);case`interrupted`:return p(Y[`ui.dictation.interrupted`]);case`too-long`:return p(Y[`ui.dictation.too_long`]);case`not-transcribed`:return p(Y[`ui.dictation.not_transcribed`]);case`unavailable`:return p(Y[`ui.dictation.unavailable`]);case`model-missing`:return p(Y[`ui.dictation.model_missing`]);case`forbidden`:return p(Y[`ui.dictation.forbidden`]);default:return p(Y[`ui.dictation.failed`])}}var b=It(),x=O(b);let S;var w=O(x),T=e=>{var t=d();H(e=>u(t,e),[()=>p(Y[`ui.dictation.sending`])]),_(e,t)},E=e=>{var t=d();H(e=>u(t,e),[()=>p(Y[`ui.dictation.starting`])]),_(e,t)},D=e=>{var n=v(),r=z(n),i=e=>{var t=d();H(e=>u(t,e),[()=>p(Y[`ui.dictation.paused_speaking`])]),_(e,t)},a=e=>{var t=d();H(e=>u(t,e),[()=>p(Y[`ui.dictation.transcribing`])]),_(e,t)},o=e=>{var t=d();H(e=>u(t,e),[()=>p(Y[`ui.dictation.hearing`])]),_(e,t)},c=e=>{var t=d();H(e=>u(t,e),[()=>p(Y[`ui.dictation.listening_short`])]),_(e,t)};t(r,e=>{s.dictation.suspended?e(i):s.dictation.queued>0?e(a,1):s.dictation.speaking?e(o,2):e(c,-1)}),_(e,n)},k=e=>{var n=Pt(),r=M(z(n)),i=M(r),a=e=>{var t=Nt(),n=F(t);H(()=>u(n,`“${s.dictation.interim??``}”`)),_(e,t)};t(i,e=>{s.dictation.interim&&e(a)}),H(e=>u(r,` ${e??``} `),[()=>p(Y[`ui.dictation.listening`])]),_(e,n)},A=e=>{var t=Ft(),n=M(z(t));H(e=>u(n,` ${e??``}`),[()=>p(Y[`ui.dictation.transcribing`])]),_(e,t)};t(w,e=>{l()?e(T):s.dictation.state===`starting`?e(E,1):s.dictation.handsFree&&s.dictation.state===`listening`?e(D,2):s.dictation.state===`listening`||s.dictation.state===`stopping`?e(k,3):s.dictation.state===`transcribing`&&e(A,4)}),c(x);var j=M(x,2);let N;var P=O(j),I=e=>{var t=d();H(e=>u(t,e),[()=>y(s.dictation.errorKind)]),_(e,t)};t(P,e=>{s.dictation.state===`error`&&e(I)}),c(j),c(b),H(t=>{a(b,1,t,`svelte-321zm9`),S=a(x,1,`smrt-dictation-status-line svelte-321zm9`,null,S,{"smrt-dictation-status--empty":!e(h)||e(g)}),N=a(j,1,`smrt-dictation-status-error svelte-321zm9`,null,N,{"smrt-dictation-status--empty":s.dictation.state!==`error`}),W(j,`data-dictation-error`,s.dictation.state===`error`?s.dictation.errorCode??s.dictation.errorKind:void 0)},[()=>r(`smrt-dictation-status ${f()}`.trim())]),_(o,b),i()}var Rt=new Set([`unsupported`,`denied`,`no-speech`,`microphone`,`interrupted`,`too-long`,`not-transcribed`,`unavailable`,`model-missing`,`forbidden`,`failed`]),zt=new Set([`too-long`,`not-transcribed`,`unavailable`,`forbidden`,`no-speech`]),Bt={network:`unsupported`,"service-not-allowed":`unsupported`,"language-not-supported":`unsupported`,"not-allowed":`denied`,"no-speech":`no-speech`,"audio-capture":`microphone`,aborted:`interrupted`};function Vt(e){if(e instanceof Q)return e.code;let t=e??{};return typeof t.speechError==`string`?t.speechError:typeof t.error==`string`?t.error:typeof t.code==`string`?t.code:typeof t.name==`string`&&t.name!==`Error`?t.name:null}function Ht(e){let t=e?.dictationKind;if(typeof t==`string`&&Rt.has(t))return t;let n=e??{},r=typeof n.speechError==`string`?n.speechError:typeof n.error==`string`?n.error:``;if(r&&Bt[r])return Bt[r];let i=typeof n.code==`string`?n.code:``,a=typeof n.name==`string`?n.name:``,o=typeof n.message==`string`?n.message.toLowerCase():String(e??``).toLowerCase();return i===`PERMISSION_DENIED`||a===`PermissionDeniedError`||a===`NotAllowedError`||/not-allowed|service-not-allowed|permission denied/.test(o)?`denied`:i===`CAPABILITY_NOT_AVAILABLE`||i===`UNSUPPORTED_ADAPTER`||a===`CapabilityNotAvailableError`||a===`NotSupportedError`||/not available|not supported|unsupported/.test(o)?`unsupported`:a===`NotFoundError`||a===`NotReadableError`||a===`OverconstrainedError`||/audio capture|audio-capture/.test(o)?`microphone`:/no speech|no-speech/.test(o)?`no-speech`:/network/.test(o)?`unsupported`:/aborted/.test(o)?`interrupted`:`failed`}function Ut(){if(typeof document<`u`){let e=document.documentElement.getAttribute(`lang`);if(e)return e}return`en-US`}function Wt(e){console.warn(`[dictation] stopped (${e.kind}) at ${e.stage}`+(e.code?` [${e.code}]`:``)+`: ${e.message}`+(e.fallback===`recording`?` (recording instead)`:``))}var Gt=class{#e=T(`idle`);get state(){return e(this.#e)}set state(e){G(this.#e,e,!0)}#t=T(null);get errorKind(){return e(this.#t)}set errorKind(e){G(this.#t,e,!0)}#n=T(null);get errorCode(){return e(this.#n)}set errorCode(e){G(this.#n,e,!0)}#r=T(``);get interim(){return e(this.#r)}set interim(e){G(this.#r,e,!0)}#i=T(!1);get beepPending(){return e(this.#i)}set beepPending(e){G(this.#i,e,!0)}#a=T(!1);get recording(){return e(this.#a)}set recording(e){G(this.#a,e,!0)}#o=T(!1);get handsFree(){return e(this.#o)}set handsFree(e){G(this.#o,e,!0)}#s=T(!1);get speaking(){return e(this.#s)}set speaking(e){G(this.#s,e,!0)}#c=T(!1);get suspended(){return e(this.#c)}set suspended(e){G(this.#c,e,!0)}#l=!1;#u=T(0);get level(){return e(this.#u)}set level(e){G(this.#u,e,!0)}#d=T(0);get queued(){return e(this.#d)}set queued(e){G(this.#d,e,!0)}#f;#p=null;#m=null;#h=[];#g=0;#_=null;#v=!1;#y=!1;#b=0;#x=!1;#S=!1;#C=null;#w=!1;#T=null;#E=null;#D=null;#O=Promise.resolve();#k=!1;constructor(e){this.#f=e}get available(){return!!(this.#f.source||this.#f.transcribe)}get wantsHandsFree(){return this.#f.mode===`hands-free`&&!!this.#f.handsFreeCapture}get active(){return this.state===`starting`||this.state===`listening`}setOptions(e){this.#f={...this.#f,...e}}async start(){if(this.#v||this.active||this.state===`stopping`||this.state===`transcribing`)return;this.errorKind=null,this.errorCode=null,this.interim=``,this.#x=!1,this.#b=0,this.recording=!1,this.state=`starting`;let e=++this.#g,t=this.#f.source;if(this.#j()&&(this.#S||!t)){await this.#F(e);return}if(!t){this.#Q(`unsupported`,null,`No speech source`,`source`);return}let n;try{n=await this.#G(t)}catch(t){e===this.#g&&this.#N(t,`source`,e);return}if(!(e!==this.#g||this.#v)){if(this.#L(n))await this.#R(e,n);else{try{await this.#W()}catch(t){e===this.#g&&this.#X(t,`microphone`);return}if(!(e!==this.#g||this.#v||this.state!==`starting`)){try{await n.start({language:this.#A(),continuous:!0,interimResults:!0})}catch(t){e===this.#g&&this.#N(t,`start`,e);return}e!==this.#g||this.recording||!n.onStart&&this.state===`starting`&&this.#q()}}}}async stop(){if(!this.active)return;if(this.recording){await this.#I();return}if(this.handsFree){this.#B();return}this.state=`stopping`;let e=this.#g;this.#$(),this.#_=setTimeout(()=>{e===this.#g&&this.state===`stopping`&&this.#Y()},this.#p?.stopTimeoutMs??this.#f.stopTimeoutMs??1500);try{await this.#p?.stop()}catch{e===this.#g&&this.#Y()}}suspend(){this.#l=!0,this.handsFree&&!this.suspended&&(this.#D?.suspend?.(),this.suspended=!0,this.speaking=!1,this.level=0)}resume(){this.#l=!1,this.suspended&&=(this.#D?.resume?.(),!1)}async toggle(){this.active?await this.stop():await this.start()}clearError(){this.state===`error`&&(this.state=`idle`,this.errorKind=null,this.errorCode=null)}async unlock(){this.beepPending&&await this.#J()&&(this.beepPending=!1)}dispose(){this.#v=!0,this.#g++,this.#$(),this.active&&!this.recording&&!this.handsFree&&this.#p?.stop().catch(()=>void 0),this.#U(!0),this.#V(),this.#E?.abort(),this.#E=null;for(let e of this.#h)e();this.#h=[],this.state=`idle`,this.recording=!1,this.#H()}#A(){return this.#f.language??Ut()}#j(){return!!(this.#f.transcribe&&(this.#f.capture||we()))}#M(e,t){return!this.#j()||this.#x?!1:e===`unsupported`||e===`interrupted`&&t===`end`}#N(e,t,n){let r=Ht(e);this.#M(r,t)?(this.#Z(r,Vt(e),Kt(e),t,!0),this.#P(n)):this.#X(e,t)}async#P(e){this.#S=!0,this.interim=``,this.#$();let t=this.#p;this.recording=!0,t&&t.stop().catch(()=>void 0),await this.#F(e)}async#F(e){this.recording=!0;let t=this.#f.capture??Ee,n;try{n=t({maxDurationMs:this.#f.maxDurationMs,maxBytes:this.#f.maxBytes})}catch(t){e===this.#g&&this.#X(t,`record`);return}this.#U(!0),this.#C=n,this.#T=n.onLimit(()=>{e===this.#g&&this.state===`listening`&&this.#I()});try{await n.start(),this.#C===n&&(this.#w=!0)}catch(t){e===this.#g&&this.#C===n?(this.#U(!0),this.#X(t,`record`)):n.cancel();return}e!==this.#g||this.#v||this.#C!==n||!this.active?this.#C===n?this.#U(!0):n.cancel():this.state===`starting`&&this.#q()}async#I(){let e=this.#g,t=this.#C;if(!t||!this.#w){this.#U(!0),this.#g++,this.#Y();return}this.#U(!1),this.state=`transcribing`,this.interim=``,this.beepPending=!1;let n;try{n=await t.stop()}catch(t){e===this.#g&&this.#X(t,`record`);return}if(e!==this.#g||this.#v)return;if(n.audio.size===0){this.#Q(`no-speech`,null,`The recording is empty`,`record`);return}let r=this.#f.transcribe;if(!r){this.#Q(`unavailable`,null,`No transcribe function`,`transcribe`);return}let i=new AbortController;this.#E=i;let a=!1,o=setTimeout(()=>{a=!0,i.abort()},this.#f.transcribeTimeoutMs??6e4),s=``;try{let e=await r(n.audio,{mimeType:n.mimeType,language:this.#A(),durationMs:n.durationMs,signal:i.signal});s=(typeof e==`string`?e:e?.text??``).trim()}catch(t){if(e!==this.#g||this.#v)return;if(a)this.#Q(`not-transcribed`,`timeout`,`Writing the recording down took too long`,`transcribe`);else{let e=Ht(t);this.#Q(zt.has(e)?e:`not-transcribed`,Vt(t),Kt(t),`transcribe`)}return}finally{clearTimeout(o),this.#E===i&&(this.#E=null)}e!==this.#g||this.#v||(s?(this.#Y(),this.#f.onText(s)):this.#Q(`no-speech`,null,`Nothing was written down`,`transcribe`))}#L(e){return!!(this.#f.mode===`hands-free`&&this.#f.handsFreeCapture&&typeof e.transcribePcm==`function`)}async#R(e,t){let n=this.#f.handsFreeCapture;if(!n)return;try{await t.prepare?.()}catch(t){e===this.#g&&this.#X(t,`source`);return}if(e!==this.#g||this.#v)return;this.#H(),this.handsFree=!0;let r;try{r=n({vad:this.#f.vad,onUtterance:n=>{this.suspended||this.#z(e,t,n)},onSpeaking:t=>{e===this.#g&&this.handsFree&&!this.suspended&&(this.speaking=t)},onLevel:t=>{if(e!==this.#g||!this.handsFree)return;let n=Math.round(Math.min(1,Math.max(0,t))*20)/20;n!==this.level&&(this.level=n)},onError:t=>{e===this.#g&&this.#X(t,`hands-free`)}})}catch(t){e===this.#g&&this.#X(t,`hands-free`);return}this.#D=r,this.#l&&(r.suspend?.(),this.suspended=!0);try{await r.start()}catch(t){this.#D===r&&(this.#D=null),e===this.#g&&this.#X(t,`microphone`);return}e!==this.#g||this.#v||this.#D!==r||!this.active?(this.#D===r&&(this.#D=null),r.cancel()):this.state===`starting`&&this.#q()}#z(e,t,n){if(this.#v||e!==this.#g)return;this.queued+=1;let r=this.#A();this.#O=this.#O.then(async()=>{if(this.#v||e!==this.#g)return;let i=``;try{i=(await t.transcribePcm?.(n.pcm,{language:r})??``).trim()}catch(t){if(e===this.#g){let e=Ht(t);this.#Q(zt.has(e)?e:`not-transcribed`,Vt(t),Kt(t),`transcribe`)}return}this.#v||e!==this.#g||(this.queued=Math.max(0,this.queued-1),i&&!/^[[(].*[\])]$/.test(i)&&this.#f.onText(i),this.#k&&this.queued===0&&this.#Y())})}async whenSettled(){await this.#O}#B(){let e=this.#D;this.#D=null,this.speaking=!1,this.suspended=!1,this.level=0,this.beepPending=!1,e?.stop(),this.queued>0?(this.#k=!0,this.state=`transcribing`):this.#Y()}#V(){let e=this.#D;this.#D=null,e?.cancel()}#H(){this.handsFree=!1,this.suspended=!1,this.speaking=!1,this.level=0,this.queued=0,this.#k=!1,this.#O=Promise.resolve()}#U(e){this.#T?.(),this.#T=null,e&&this.#C?.cancel(),this.#C=null,this.#w=!1}async#W(){if(this.#y||this.#f.requestMicrophone===!1)return;let e=typeof navigator<`u`?navigator.mediaDevices:void 0;if(!e||typeof e.getUserMedia!=`function`)return;let t=await e.getUserMedia({audio:!0});for(let e of t.getTracks())e.stop();this.#y=!0}async#G(e){if(this.#p)return this.#p;this.#m??=Promise.resolve().then(e);try{let e=await this.#m;return this.#p||(this.#p=e,this.#K(e)),e}catch(e){throw this.#m=null,e}}#K(e){this.#h.push(e.onResult(e=>{if(!(this.#v||this.recording)&&(this.active||this.state===`stopping`)){if(this.#x=!0,e.isFinal){this.interim=``,this.#f.onInterim?.(``);let t=e.text.trim();t&&this.#f.onText(t)}else this.interim=e.text,this.#f.onInterim?.(e.text)}}),e.onError(e=>{this.#v||this.recording||this.state!==`idle`&&this.state!==`error`&&(this.state!==`stopping`||Ht(e)!==`interrupted`)&&(this.active?this.#N(e,`error`,this.#g):this.#X(e,`error`))}),e.onEnd(()=>{if(this.#v||this.recording||this.state===`error`||this.state===`idle`)return;if(this.state===`stopping`){this.#Y();return}let e=this.#f.earlyEndMs??1e3;if(this.state===`starting`||e>0&&!this.#x&&Date.now()-this.#b<e){let e=`Speech recognition ended straight away`;if(this.#M(`interrupted`,`end`)){this.#Z(`interrupted`,null,e,`end`,!0),this.#P(this.#g);return}this.#Q(`interrupted`,null,e,`end`)}else this.#Y()})),e.onStart&&this.#h.push(e.onStart(()=>{this.recording||(!this.#v&&this.state===`starting`?this.#q():(this.#v||this.state!==`listening`)&&e.stop().catch(()=>void 0))}))}#q(){this.state=`listening`,this.#b=Date.now(),this.#J().then(e=>{this.beepPending=!e&&this.state===`listening`})}async#J(){let e=this.#f.beep??!0;if(e===!1)return!0;try{return e===!0?await Et():!!await e()}catch{return!1}}#Y(){this.#$(),this.state=`idle`,this.interim=``,this.beepPending=!1,this.recording=!1,this.#H()}#X(e,t){this.#Q(Ht(e),Vt(e),Kt(e),t)}#Z(e,t,n,r,i=!1){let a=this.#f.log??Wt;try{a({kind:e,code:t,message:n,stage:r,...i?{fallback:`recording`}:{}})}catch{}}#Q(e,t,n,r){this.#$(),this.#U(!0),this.handsFree&&(this.#g++,this.#V()),this.#Z(e,t,n,r),this.errorKind=e,this.errorCode=t,this.state=`error`,this.interim=``,this.beepPending=!1,this.recording=!1,this.#H()}#$(){this.#_&&clearTimeout(this.#_),this.#_=null}};function Kt(e){return e instanceof Error?e.message:String(e??`unknown`)}b([`click`]);var qt=new Set([`$$slots`,`$$events`,`$$legacy`,`legend`,`description`,`error`,`stack`,`class`,`children`]),Jt=l(`<p class="description svelte-ptc7pm"> </p>`),Yt=l(`<p class="error svelte-ptc7pm" role="alert"> </p>`),Xt=l(`<fieldset><legend class="svelte-ptc7pm"> </legend><!><div><!></div><!></fieldset>`);function Zt(r,o){let l=B();m(o,!0);let d=C(o,`stack`,3,!1),f=C(o,`class`,3,``),p=R(o,qt),h=n(()=>o.description?`fieldset-${l}-description`:void 0),g=n(()=>o.error?`fieldset-${l}-error`:void 0);var v=Xt();k(v,e=>({class:`fieldset ${f()??``}`,"aria-describedby":e,...p,"data-smrt-component":`Fieldset`}),[()=>[e(h),e(g)].filter(Boolean).join(` `)||void 0],void 0,void 0,`svelte-ptc7pm`);var y=O(v),b=F(y,!0),x=M(y),S=t=>{var n=Jt(),r=F(n,!0);H(()=>{W(n,`id`,e(h)),u(r,o.description)}),_(t,n)};t(x,e=>{o.description&&e(S)});var w=M(x);let T;var E=O(w);s(E,()=>o.children),c(w);var D=M(w),A=t=>{var n=Yt(),r=F(n,!0);H(()=>{W(n,`id`,e(g)),u(r,o.error)}),_(t,n)};t(D,e=>{o.error&&e(A)}),c(v),H(()=>{u(b,o.legend),T=a(w,1,`content svelte-ptc7pm`,null,T,{"content--stack":d()})}),_(r,v),i()}var Qt=new Set([`$$slots`,`$$events`,`$$legacy`,`files`,`label`,`description`,`dropzone`,`id`,`name`,`accept`,`multiple`,`disabled`,`required`,`class`,`interaction`,`onchange`,`onchangefiles`]),$t=l(`<label data-smrt-component="FilePicker"><input/> <span class="label svelte-1q9rqbm"> </span><span class="description svelte-1q9rqbm"> </span></label>`);function en(t,r){let o=B();m(r,!0);let s=C(r,`files`,31,()=>A([])),l=C(r,`label`,3,`Choose files`),d=C(r,`description`,3,`Drop files here or browse`),f=C(r,`dropzone`,3,!1),p=C(r,`multiple`,3,!1),h=C(r,`disabled`,3,!1),g=C(r,`required`,3,!1),v=C(r,`class`,3,``),y=R(r,Qt),b=ve(),S=T(null),w=T(null),E=n(()=>r.id??`smrt-file-${o}`),j=n(()=>r.interaction===!1?void 0:r.interaction?.id??r.name??e(E)),N=T(!1);function P(t,n=!0){if(s(Array.from(t).slice(0,p()?void 0:1)),n&&e(S)&&typeof DataTransfer<`u`){let t=new DataTransfer;for(let e of s())t.items.add(e);e(S).files=t.files}r.onchangefiles?.(s())}function I(e){P(e.currentTarget.files??[],!1),r.onchange?.(e)}function L(e){e.preventDefault(),G(N,!1),!h()&&e.dataTransfer?.files&&P(e.dataTransfer.files)}function ee(){h()||e(S)?.click()}function z(){s([]),e(S)&&(e(S).value=``),r.onchangefiles?.([])}function V(){return e(S)}ue(()=>{let t=e(S),n=e(w);return!t||!n||r.interaction===!1?!1:{controlId:e(j),subject:r.interaction?.subject,metadata:{kind:`file`,label:l(),description:r.interaction?.description??d(),sensitivity:r.interaction?.sensitivity??`sensitive`,readable:!1,writable:!1,constraints:{required:g()===!0},capabilities:[`focus`,`reveal`,`highlight`,`explain`,`validate`]},focus:()=>t.focus(),reveal:()=>ye(n),highlight:e=>ae(n,e),validate:()=>t.reportValidity(),getState:()=>({disabled:t.matches(`:disabled`),valid:t.validity.valid,validationMessage:t.validationMessage||void 0})}});var U={open:ee,clear:z,getElement:V},K=$t();let q;var J=O(K);k(J,()=>({id:e(E),type:`file`,name:r.name,accept:r.accept,multiple:p(),disabled:h(),required:g(),onchange:I,...y}),void 0,void 0,void 0,`svelte-1q9rqbm`,!0),D(J,e=>G(S,e),()=>e(S));var Y=M(J,2),te=F(Y,!0),X=M(Y),ne=F(X,!0);return c(K),D(K,e=>G(w,e),()=>e(w)),H(()=>{W(K,`for`,e(E)),q=a(K,1,`file-picker ${v()??``}`,`svelte-1q9rqbm`,q,{dropzone:f(),dragging:e(N),disabled:h()}),W(K,`data-smrt-control`,e(j)),W(K,`data-smrt-form`,b?.formId),W(K,`data-smrt-subject-type`,r.interaction===!1?void 0:r.interaction?.subject?.type),W(K,`data-smrt-subject-id`,r.interaction===!1?void 0:r.interaction?.subject?.id),u(te,l()),u(ne,s().length?`${s().length} file${s().length===1?``:`s`} selected`:d())}),x(`dragenter`,K,e=>{e.preventDefault(),G(N,!0)}),x(`dragover`,K,e=>e.preventDefault()),x(`dragleave`,K,()=>G(N,!1)),x(`drop`,K,L),_(t,K),i(U)}var tn=l(`<span class="subject svelte-1wpxa95"> </span>`),nn=l(`<input type="checkbox" class="svelte-1wpxa95"/>`),rn=l(`<textarea class="svelte-1wpxa95"></textarea>`),an=l(`<input class="svelte-1wpxa95"/>`),on=l(`<p class="problem svelte-1wpxa95" role="alert"> </p>`),sn=l(`<li data-staged-review-item=""><div class="proposal-heading svelte-1wpxa95"><div><strong class="svelte-1wpxa95"> </strong><!></div> <span class="svelte-1wpxa95"> </span></div> <dl class="svelte-1wpxa95"><div><dt class="svelte-1wpxa95"> </dt><dd class="svelte-1wpxa95"> </dd></div> <div><dt class="svelte-1wpxa95"> </dt> <dd class="svelte-1wpxa95"><!></dd></div></dl> <!> <!> <!> <div class="item-actions svelte-1wpxa95"><button type="button" class="svelte-1wpxa95"> </button> <button type="button" class="secondary svelte-1wpxa95"> </button></div></li>`),cn=l(`<section class="staged-review svelte-1wpxa95" data-staged-control-review="" data-smrt-component="StagedControlReview"><header class="svelte-1wpxa95"><div><h2 class="svelte-1wpxa95"> </h2> <p class="svelte-1wpxa95"> </p></div> <div class="batch-actions svelte-1wpxa95"><button type="button" class="svelte-1wpxa95"> </button> <button type="button" class="secondary svelte-1wpxa95"> </button></div></header> <ul class="svelte-1wpxa95"></ul></section>`),ln=l(`<p class="status visually-hidden svelte-1wpxa95" role="status" aria-live="polite" aria-atomic="true" data-smrt-component="StagedControlReview"> </p>`),un=l(`<!> <!>`,1);function dn(r,o){m(o,!0);let{t:s}=te(),l=C(o,`formElement`,3,null),p=C(o,`summary`,3,!0),h=n(()=>({region:s(Y[`ui.staged_control_review.region`]),heading:s(Y[`ui.staged_control_review.heading`]),description:s(Y[`ui.staged_control_review.description`]),proposedBy:s(Y[`ui.staged_control_review.proposed_by`]),stagedAt:s(Y[`ui.staged_control_review.staged_at`]),before:s(Y[`ui.staged_control_review.before`]),after:s(Y[`ui.staged_control_review.after`]),redacted:s(Y[`ui.staged_control_review.redacted`]),stale:s(Y[`ui.staged_control_review.stale`]),invalid:s(Y[`ui.staged_control_review.invalid`]),apply:s(Y[`ui.staged_control_review.apply`]),discard:s(Y[`ui.staged_control_review.discard`]),applyAll:s(Y[`ui.staged_control_review.apply_all`]),discardAll:s(Y[`ui.staged_control_review.discard_all`]),edit:s(Y[`ui.staged_control_review.edit`]),appliedStatus:s(Y[`ui.staged_control_review.applied_status`]),discardedStatus:s(Y[`ui.staged_control_review.discarded_status`]),batchStatus:s(Y[`ui.staged_control_review.batch_status`]),...o.labels})),g=T(A([])),v=T(A({})),b=T(A({})),x=T(``),k=T(!1),j=T(null),N=e=>JSON.stringify([e.identity.formId,e.identity.controlId,e.identity.subject?.type??null,e.identity.subject?.id??null]),P=e=>JSON.stringify([N(e),e.state.staged?.revision??null]);function I(e){if(e===void 0)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function R(e){let t=e.metadata.label?.trim();if(t)return t;let n=e.identity.controlId.split(`/`).at(-1)??``,r=n.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/[-_.:]+/g,` `).trim().toLowerCase();return r?r[0].toUpperCase()+r.slice(1):n}function ee(t){let n=R(t);if(e(g).filter(e=>R(e)===n).length<2)return n;let r=t.identity.subject;return`${n} ${r?.label?r.label:r?`${r.type}:${r.id}`:t.identity.controlId} [identity:${N(t)}]`}function B(){let t=o.registry.list(o.formId).filter(e=>e.state.staged!==void 0);t.length>0&&G(k,!0);let n={...L(()=>e(v))};for(let e of t){let t=P(e);!(t in n)&&!e.state.staged?.valueRedacted&&(n[t]=I(e.state.staged?.value))}let r=new Set(t.map(P));for(let e of Object.keys(n))r.has(e)||delete n[e];let i={...L(()=>e(b))};for(let e of Object.keys(i))r.has(e)||delete i[e];G(g,t,!0),G(v,n,!0),G(b,i,!0)}E(()=>(B(),o.registry.subscribe(()=>B()))),E(()=>{if(!l())return;let e=l(),t=()=>L(B),n=()=>queueMicrotask(B),r=t=>{let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`button[type="reset"], input[type="reset"]`);if(!r||!e.contains(r))return;let i=o.registry.list(o.formId).filter(e=>e.state.staged).map(e=>({action:`discard`,identity:e.identity,revision:e.state.staged?.revision}));ot(o.registry,i,t)};return e.addEventListener(`input`,t),e.addEventListener(`change`,t),e.addEventListener(`reset`,n),e.addEventListener(`click`,r,!0),()=>{e.removeEventListener(`input`,t),e.removeEventListener(`change`,t),e.removeEventListener(`reset`,n),e.removeEventListener(`click`,r,!0)}}),E(()=>{let e=l(),t=e?.ownerDocument.defaultView?.MutationObserver;if(!e||!t)return;let n=new t(e=>{e.some(({target:e})=>e instanceof Element&&!e.closest(`[data-staged-control-review]`))&&o.registry.refresh?.(o.formId)});n.observe(e,{attributes:!0,subtree:!0,attributeFilter:[`disabled`,`readonly`]});for(let t=e.parentElement;t;t=t.parentElement)t instanceof HTMLFieldSetElement&&n.observe(t,{attributes:!0,attributeFilter:[`disabled`]});return()=>n.disconnect()}),E(()=>{if(!l())return;let t=new Set(e(g).map(e=>JSON.stringify([e.identity.controlId,e.identity.subject?.type??null,e.identity.subject?.id??null]))),n=l().querySelectorAll(`[data-smrt-control]`);return n.forEach(e=>{let n=JSON.stringify([e.dataset.smrtControl??``,e.dataset.smrtSubjectType??null,e.dataset.smrtSubjectId??null]);t.has(n)?e.dataset.smrtStaged=`true`:delete e.dataset.smrtStaged}),()=>{n.forEach(e=>{delete e.dataset.smrtStaged})}});function V(t){let n=t.state.staged;if(!n||n.valueRedacted)return n?.value;let r=e(v)[P(t)]??``,i=n.value;if(typeof i==`number`){if(r.trim().length===0)throw Error(`invalid_number`);let e=Number(r);if(!Number.isFinite(e))throw Error(`invalid_number`);return e}if(typeof i==`boolean`){if(r!==`true`&&r!==`false`)throw Error(`invalid_boolean`);return r===`true`}return i===null||typeof i==`object`&&i?JSON.parse(r):r}function q(t){return t===`staged_value_stale`||t===`stale_revision`?e(h).stale:e(h).invalid}function X(t,n){G(b,{...e(b),[P(t)]:n},!0)}function ne(t){let n=P(t);if(!(n in e(b)))return;let r={...e(b)};delete r[n],G(b,r,!0)}function re(e,t){let n=e.state.staged?.revision;return t===`discard`?{action:t,identity:e.identity,revision:n}:{action:t,identity:e.identity,revision:n,value:V(e),reviewedValueIsCanonical:!0}}function ie(e){return Array.from(l()?.querySelectorAll(`[data-smrt-control]`)??[]).find(t=>t.dataset.smrtControl===e.identity.controlId&&(t.dataset.smrtSubjectType??void 0)===e.identity.subject?.type&&(t.dataset.smrtSubjectId??void 0)===e.identity.subject?.id)}async function ae(t,n){let r=ie(t);await U();let i=async()=>{if((await o.registry.execute({action:`focus`,identity:t.identity},{source:`user`})).ok&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&l()?.contains(document.activeElement)===!0&&e(j)?.contains(document.activeElement)!==!0)return;let n=r&&!r.matches(`:disabled`)&&r.matches(`button, input:not([type="hidden"]), select, textarea, [tabindex]:not([tabindex="-1"])`)?r:void 0,i=`button:not(:disabled), input:not([type="hidden"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])`,a=[...n?[n]:[],...Array.from(r?.querySelectorAll(i)??[]),...Array.from(l()?.querySelectorAll(i)??[])];for(let e of a)if(e.focus(),document.activeElement===e||e.contains(document.activeElement))return};if(!o.registry.list(o.formId).some(e=>e.state.staged!==void 0)){await i();return}let a=e(j)?.querySelectorAll(`[data-staged-review-item]`),s=(a?.[Math.min(n,Math.max(0,a.length-1))])?.querySelector(`button:not(:disabled)`),c=e(j)?.querySelector(`.batch-actions button:not(:disabled)`);s??c?(s??c)?.focus():await i()}async function oe(t,n){let r=e(g).findIndex(e=>N(e)===N(t));try{let i=await at(o.registry,re(t,`apply`),n);G(x,i.ok?e(h).appliedStatus:q(i.reason),!0),i.ok?(ne(t),await ae(t,r)):X(t,q(i.reason))}catch{G(x,e(h).invalid,!0),X(t,e(h).invalid)}}async function se(t,n){let r=e(g).findIndex(e=>N(e)===N(t)),i=await at(o.registry,re(t,`discard`),n);G(x,i.ok?e(h).discardedStatus:q(i.reason),!0),i.ok?(ne(t),await ae(t,r)):X(t,q(i.reason))}async function ce(t){let n=e(g).length,r=[],i=[];for(let t of e(g))if(t.state.disabled||t.state.readonly||t.state.staged?.stale)X(t,t.state.staged?.stale?e(h).stale:e(h).invalid);else if(t.state.staged?.valid===!1)X(t,e(h).invalid);else try{r.push(re(t,`apply`)),i.push(t)}catch{X(t,e(h).invalid)}let a=await ot(o.registry,r,t),s=[];for(let[e,t]of a.results.entries()){let n=i[e];n&&(t.ok?(ne(n),s.push(n)):X(n,q(t.reason)))}let c=a.results.filter(e=>e.ok).length;G(x,e(h).batchStatus.replace(`{completed}`,String(c)).replace(`{total}`,String(n)),!0),s[0]&&await ae(s[0],0)}async function le(t){let n=e(g).length,r=[];for(let t of e(g))t.state.staged?.stale?X(t,e(h).stale):t.state.staged?.valid===!1?X(t,e(h).invalid):r.push(t);let i=await ot(o.registry,r.map(e=>re(e,`discard`)),t),a=[];for(let[e,t]of i.results.entries()){let n=r[e];n&&(t.ok?(ne(n),a.push(n)):X(n,q(t.reason)))}let s=i.results.filter(e=>e.ok).length;G(x,e(h).batchStatus.replace(`{completed}`,String(s)).replace(`{total}`,String(n)),!0),a[0]&&await ae(a[0],0)}var ue=un(),de=z(ue),fe=r=>{var i=cn(),o=O(i),s=O(o),l=O(s),p=F(l,!0),m=M(l,2),x=F(m,!0);c(s);var C=M(s,2),T=O(C),E=F(T,!0),k=M(T,2),A=F(k,!0);c(C),c(o);var L=M(o,2);f(L,21,()=>e(g),e=>N(e),(r,i)=>{let o=n(()=>e(i).state.staged),s=n(()=>R(e(i))),l=n(()=>ee(e(i)));var f=sn();let p;var m=O(f),g=O(m),x=O(g),C=F(x,!0),T=M(x),E=t=>{var n=tn(),r=F(n,!0);H(()=>u(r,e(i).identity.subject.label)),_(t,n)};t(T,t=>{e(i).identity.subject?.label&&t(E)}),c(g);var D=M(g,2),k=F(D);c(m);var A=M(m,2),j=O(A),N=O(j),L=F(N,!0),z=M(N),B=F(z,!0);c(j);var V=M(j,2),U=O(V),q=F(U,!0),Y=M(U,2),te=O(Y),X=t=>{var n=d();H(()=>u(n,e(h).redacted)),_(t,n)},ne=t=>{var n=nn();S(n),H(t=>{W(n,`aria-label`,`${e(h).edit} ${e(l)}`),J(n,t)},[()=>(e(v)[P(e(i))]??`false`)===`true`]),y(`change`,n,t=>{G(v,{...e(v),[P(e(i))]:String(t.currentTarget.checked)},!0)}),y(`keydown`,n,e=>{e.key===`Enter`&&e.preventDefault()}),_(t,n)},re=t=>{var n=rn();K(n),H(t=>{W(n,`aria-label`,`${e(h).edit} ${e(l)}`),w(n,t)},[()=>e(v)[P(e(i))]??``]),y(`input`,n,t=>{G(v,{...e(v),[P(e(i))]:t.currentTarget.value},!0)}),_(t,n)},ie=n(()=>typeof e(o)?.value==`string`&&e(o).value.includes(`
2
+ `)),ae=t=>{var n=an();S(n),H(t=>{W(n,`aria-label`,`${e(h).edit} ${e(l)}`),w(n,t)},[()=>e(v)[P(e(i))]??``]),y(`input`,n,t=>{G(v,{...e(v),[P(e(i))]:t.currentTarget.value},!0)}),y(`keydown`,n,e=>{e.key===`Enter`&&e.preventDefault()}),_(t,n)};t(te,t=>{e(o)?.valueRedacted?t(X):typeof e(o)?.value==`boolean`?t(ne,1):e(ie)?t(re,2):t(ae,-1)}),c(Y),c(V),c(A);var ce=M(A,2),le=t=>{var n=on(),r=F(n,!0);H(()=>u(r,e(h).stale)),_(t,n)};t(ce,t=>{e(o)?.stale&&t(le)});var ue=M(ce,2),de=t=>{var n=on(),r=F(n,!0);H(()=>u(r,e(h).invalid)),_(t,n)};t(ue,t=>{e(o)?.valid===!1&&t(de)});var fe=M(ue,2),pe=t=>{var n=on(),r=F(n,!0);H(e=>u(r,e),[()=>e(b)[P(e(i))]]),_(t,n)},Z=n(()=>e(b)[P(e(i))]);t(fe,t=>{e(Z)&&t(pe)});var me=M(fe,2),he=O(me),ge=F(he,!0),_e=M(he,2),ve=F(_e,!0);c(me),c(f),H((t,n)=>{p=a(f,1,`svelte-1wpxa95`,null,p,{stale:e(o)?.stale,invalid:e(o)?.valid===!1}),u(C,e(s)),u(k,`${e(h).proposedBy??``} ${e(o)?.provenance.actorId??e(o)?.provenance.source??``} · ${e(h).stagedAt??``} ${t??``}`),u(L,e(h).before),u(B,n),u(q,e(h).after),W(he,`aria-label`,`${e(h).apply} ${e(l)}`),he.disabled=e(o)?.stale||e(i).state.disabled||e(i).state.readonly,u(ge,e(h).apply),W(_e,`aria-label`,`${e(h).discard} ${e(l)}`),u(ve,e(h).discard)},[()=>e(o)?new Date(e(o).stagedAt).toLocaleString():``,()=>e(i).state.valueRedacted?e(h).redacted:I(e(i).state.value)]),y(`click`,he,t=>oe(e(i),t)),y(`click`,_e,t=>se(e(i),t)),_(r,f)}),c(L),c(i),D(i,e=>G(j,e),()=>e(j)),H(()=>{W(i,`aria-label`,e(h).region),u(p,e(h).heading),u(x,e(h).description),u(E,e(h).applyAll),u(A,e(h).discardAll)}),y(`click`,T,ce),y(`click`,k,le),_(r,i)};t(de,t=>{p()&&e(g).length>0&&t(fe)});var pe=M(de,2),Z=t=>{var n=ln(),r=F(n,!0);H(()=>u(r,e(x))),_(t,n)};t(pe,t=>{p()&&e(k)&&t(Z)}),_(r,ue),i()}b([`click`,`change`,`keydown`,`input`]);var fn=new Set([`$$slots`,`$$events`,`$$legacy`,`class`,`preventDefault`,`formId`,`interactionRegistry`,`oninteraction`,`stagedReview`,`id`,`name`,`onsubmit`,`onclick`,`oninput`,`onchange`,`children`]),pn=l(`<form><!> <!></form>`);function mn(t,r){let a=B();m(r,!0);let o=C(r,`class`,3,``),l=C(r,`preventDefault`,3,!0),u=C(r,`stagedReview`,3,!0),d=R(r,fn),f=`smrt-form-${a}`,p=xt(),h=n(()=>r.formId??r.id??r.name??f),g=n(()=>r.interactionRegistry??p),v=T(null);re({get formId(){return e(h)},get registry(){return e(g)}}),E(()=>{if(r.oninteraction)return e(g).subscribe(r.oninteraction)});function y(){return e(g)}function b(){return e(h)}function x(){return e(v)}function S(e){l()&&e.preventDefault(),r.onsubmit?.(e)}function w(t){if(!t.isTrusted)return;let n=t.target;if(!(n instanceof Element))return;let r=n.closest(`[data-smrt-control]`),i=r?.dataset.smrtControl;i&&e(g).recordUserEdit?.({formId:e(h),controlId:i,subject:r.dataset.smrtSubjectType&&r.dataset.smrtSubjectId?{type:r.dataset.smrtSubjectType,id:r.dataset.smrtSubjectId}:void 0})}function A(e){try{r.oninput?.(e)}finally{w(e)}}function j(e){try{r.onchange?.(e)}finally{w(e)}}var N={getInteractionRegistry:y,getFormId:b,getFormElement:x},P=pn();k(P,()=>({id:r.id,name:r.name,class:`form ${o()??``}`,"data-smrt-form":e(h),onsubmit:S,onclick:r.onclick,oninput:A,onchange:j,...d,"data-smrt-component":`Form`}));var F=O(P);return s(F,()=>r.children),dn(M(F,2),{get registry(){return e(g)},get formId(){return e(h)},get formElement(){return e(v)},get summary(){return u()}}),c(P),D(P,e=>G(v,e),()=>e(v)),_(t,P),i(N)}var hn=l(`<div role="group" data-form-action-bar="" data-testid="form-action-bar" data-smrt-component="FormActionBar"><!></div>`);function gn(e,t){m(t,!0);let n=C(t,`plain`,3,!1),{t:r}=te();var o=hn();let l;var u=O(o);s(u,()=>t.children),c(o),H(e=>{l=a(o,1,`form-action-bar svelte-1yzbc7r`,null,l,{plain:n()}),W(o,`aria-label`,e)},[()=>t.label??r(Y[`ui.form_action_bar.label`])]),_(e,o),i()}var _n=l(`<p class="form-hint svelte-1qtoaaj"> </p>`),vn=l(`<p class="form-error svelte-1qtoaaj" role="alert"> </p>`),yn=l(`<div class="form-group svelte-1qtoaaj" data-smrt-component="FormGroup"><!> <!> <!> <!></div>`);function bn(r,a){let o=B();m(a,!0);let l=C(a,`required`,3,!1),d=`smrt-field-${o}`,f=n(()=>a.id??d),p=n(()=>a.hint&&!a.error?`${e(f)}-hint`:void 0),h=n(()=>a.error?`${e(f)}-error`:void 0),g=n(()=>[e(p),e(h)].filter(Boolean).join(` `)||void 0);de(()=>({inputId:e(f),describedBy:e(g),invalid:!!a.error,label:a.label,description:a.hint,required:l(),error:a.error,interaction:a.interaction}));var v=yn(),y=O(v);Ae(y,{get for(){return e(f)},get label(){return a.label},get required(){return l()}});var b=M(y,2);s(b,()=>a.children);var x=M(b,2),S=t=>{var n=_n(),r=F(n,!0);H(()=>{W(n,`id`,e(p)),u(r,a.hint)}),_(t,n)};t(x,t=>{e(p)&&t(S)});var w=M(x,2),T=t=>{var n=vn(),r=F(n,!0);H(()=>{W(n,`id`,e(h)),u(r,a.error)}),_(t,n)};t(w,t=>{e(h)&&t(T)}),c(v),_(r,v),i()}b([`keydown`,`click`]),b([`click`,`keydown`]);var xn=Symbol(`smrt-radio-group`);function Sn(e){N(xn,e)}function Cn(){let e=o(xn);if(!e)throw Error(`<Radio> must be rendered inside <RadioGroup>.`);return e}var wn=new Set([`$$slots`,`$$events`,`$$legacy`,`value`,`label`,`disabled`,`id`,`onchange`]),Tn=l(`<label data-smrt-hit-target="" data-smrt-component="Radio"><input/> <span class="radio__mark svelte-1i18691" aria-hidden="true"></span><span class="radio__label svelte-1i18691"> </span></label>`);function En(t,r){let o=B();m(r,!0);let s=C(r,`disabled`,3,!1),l=R(r,wn),d=Cn(),f=n(()=>r.id??`smrt-radio-${o}`);E(()=>d.registerOption({value:r.value,label:r.label,disabled:s()}));function p(e){e.currentTarget.checked&&d.setValue(r.value),r.onchange?.(e)}var h=Tn();let g;var v=O(h);k(v,()=>({id:e(f),type:`radio`,name:d.name,value:r.value,disabled:s()||d.disabled,required:d.required,checked:d.value===r.value,onchange:p,...l}),void 0,void 0,void 0,`svelte-1i18691`,!0);var y=M(v,3),b=F(y,!0);c(h),H(()=>{g=a(h,1,`radio svelte-1i18691`,null,g,{disabled:s()||d.disabled}),u(b,r.label)}),_(t,h),i()}var Dn=l(`<span aria-hidden="true">*</span>`),On=l(`<legend class="svelte-1xvjki8"> <!></legend>`),kn=l(`<p class="description svelte-1xvjki8"> </p>`),An=l(`<p class="error svelte-1xvjki8" role="alert"> </p>`),jn=l(`<fieldset data-smrt-component="RadioGroup"><!> <!> <div class="options svelte-1xvjki8"><!></div> <!></fieldset>`);function Mn(r,o){m(o,!0);let l=C(o,`value`,15,``),d=C(o,`disabled`,3,!1),f=C(o,`required`,3,!1),p=C(o,`class`,3,``),h=ve(),g=T(null),v=T(A([]));function y(e){l(e),o.onvaluechange?.(e)}Sn({get name(){return o.name},get value(){return l()},get disabled(){return d()},get required(){return f()},setValue:y,registerOption(t){return L(()=>(G(v,[...e(v).filter(e=>e.value!==t.value),t],!0),()=>{L(()=>{G(v,e(v).filter(e=>e.value!==t.value),!0)})}))}});let b=n(()=>o.interaction===!1?void 0:o.interaction?.id??o.name);ue(()=>{let t=e(g);return!t||o.interaction===!1?!1:{controlId:e(b),subject:o.interaction?.subject,metadata:{kind:`radio-group`,label:o.label,description:o.interaction?.description??o.description,sensitivity:o.interaction?.sensitivity??`public`,readable:o.interaction?.readable,writable:o.interaction?.writable,constraints:{required:f()},options:e(v)},getValue:()=>l(),prepareValue:t=>String(fe(e(v),t)),setValue:t=>{let n=String(t);e(v).some(e=>String(e.value)===n&&!e.disabled)&&y(n)},clear:()=>(y(``),!0),focus:()=>t.querySelector(`input:not(:disabled)`)?.focus(),reveal:()=>ye(t),highlight:e=>ae(t,e),validate:()=>t.reportValidity(),validateValue:t=>he(e(v),t),getState:()=>({disabled:t.matches(`:disabled`),valid:!f()||!!l(),validationMessage:o.error})}});var x=jn(),S=O(x),w=e=>{var n=On(),r=O(n,!0),i=M(r),a=e=>{var t=Dn();_(e,t)};t(i,e=>{f()&&e(a)}),c(n),H(()=>u(r,o.label)),_(e,n)};t(S,e=>{o.label&&e(w)});var E=M(S,2),k=e=>{var t=kn(),n=F(t,!0);H(()=>{W(t,`id`,`${o.name}-description`),u(n,o.description)}),_(e,t)};t(E,e=>{o.description&&e(k)});var j=M(E,2),N=O(j);s(N,()=>o.children),c(j);var P=M(j,2),I=e=>{var t=An(),n=F(t,!0);H(()=>u(n,o.error)),_(e,t)};t(P,e=>{o.error&&e(I)}),c(x),D(x,e=>G(g,e),()=>e(g)),H(()=>{W(x,`data-density`,o.density),a(x,1,`radio-group ${p()??``}`,`svelte-1xvjki8`),x.disabled=d(),W(x,`aria-describedby`,o.description?`${o.name}-description`:void 0),W(x,`data-smrt-control`,e(b)),W(x,`data-smrt-form`,h?.formId),W(x,`data-smrt-subject-type`,o.interaction===!1?void 0:o.interaction?.subject?.type),W(x,`data-smrt-subject-id`,o.interaction===!1?void 0:o.interaction?.subject?.id)}),_(r,x),i()}b([`input`,`change`]);var Nn=l(`<span class="option-detail svelte-639852"> </span>`),Pn=l(`<span class="option-label svelte-639852"> </span> <!>`,1),Fn=l(`<p class="hint svelte-639852"> </p>`),In=l(`<p class="error svelte-639852" role="alert"> </p>`),Ln=l(`<div class="relation-input svelte-639852" data-smrt-component="RelationInput"><div class="field svelte-639852"><!> <!></div> <!> <!> <!></div>`);function Rn(r,a){let o=B();m(a,!0);let s=C(a,`value`,15,``),l=C(a,`required`,3,!1),f=C(a,`disabled`,3,!1),g=C(a,`debounceMs`,3,250),v=C(a,`loadingText`,3,`Searching…`),y=C(a,`emptyText`,3,`No matches`),b=C(a,`errorText`,3,`Search failed. Try again.`),x=C(a,`resultsText`,3,e=>`${e} ${e===1?`result`:`results`} available`),S=`${o}-error`,w=`${o}-hint`,k=ve(),j=T(null),N=T(A([])),P=T(!1),I=T(!1),R=T(``),ee=T(!1),V=``,U=``,K=0,q=``,J,Y=n(()=>e(N).map(e=>({value:e.id,label:e.label}))),te=n(()=>new Map(e(N).map(e=>[e.id,e.detail]))),ne=n(()=>e(P)?v():e(I)?b():e(N).length===0?y():x()(e(N).length)),re=n(()=>[a.error?S:``,a.description?w:``].filter(Boolean).join(` `)||void 0),ie=n(()=>a.interaction===!1?void 0:a.interaction?.id??a.name),ae=n(()=>!l()&&!f()&&s()!==``),oe=n(()=>a.createLabel??`New ${a.label.toLowerCase()}`);async function se(e){let t=++K;G(P,!0),G(I,!1);try{let n=await a.search(e);if(t!==K)return;G(N,n,!0)}catch(e){if(t!==K)return;G(N,[],!0),G(I,!0),console.warn(`[smrt-ui] RelationInput search failed`,{error:String(e)})}finally{t===K&&G(P,!1)}}function ce(e){clearTimeout(J),q=e,e===``?se(``):(K++,G(P,!0),G(I,!1),G(N,[],!0),J=setTimeout(()=>void se(e),g()))}function ue(t){q=``;let n=e(N).find(e=>e.id===t);n&&(G(R,n.label,!0),V=t),a.onchange?.(t)}function de(){e(j)?.querySelector(`input[role="combobox"]`)?.focus()}function fe(){e(ae)&&(s(``),G(R,``),V=``,q=``,a.onchange?.(``),le(k,e(ie),a.interaction===!1?void 0:a.interaction?.subject),e(j)&&be(e(j)),de())}async function pe(){if(!a.onCreate||e(ee)||f())return;let t=q;G(ee,!0);try{let n=await a.onCreate(t);n&&typeof n==`object`&&(G(N,[n,...e(N).filter(e=>e.id!==n.id)],!0),G(R,n.label,!0),V=n.id,s(n.id),a.onchange?.(n.id),le(k,e(ie),a.interaction===!1?void 0:a.interaction?.subject),e(j)&&be(e(j)))}catch(e){console.warn(`[smrt-ui] RelationInput onCreate failed`,{error:String(e)})}finally{G(ee,!1)}}E(()=>{let t=s(),n=e(N).find(e=>e.id===t);L(()=>{t?t!==V&&(n?(G(R,n.label,!0),V=t):(G(R,``),V=``,a.resolve&&U!==t&&(U=t,a.resolve(t).then(e=>{s()===t&&e&&(G(R,e.label,!0),V=t)}).catch(e=>{console.warn(`[smrt-ui] RelationInput resolve failed`,{error:String(e)})}).finally(()=>{U===t&&(U=``)})))):(G(R,``),V=``)})}),E(()=>()=>clearTimeout(J));var Z=Ln(),me=O(Z),he=O(me);{let r=(r,i=p)=>{var a=Pn(),o=z(a),s=F(o,!0),c=M(o,2),l=t=>{var n=Nn(),r=F(n,!0);H(e=>u(r,e),[()=>e(te).get(String(i().value))]),_(t,n)},d=n(()=>e(te).get(String(i().value)));t(c,t=>{e(d)&&t(l)}),H(()=>u(s,i().label)),_(r,a)},i=n(()=>!!a.error);Le(he,{get name(){return a.name},get label(){return a.label},get options(){return e(Y)},get placeholder(){return a.placeholder},get disabled(){return f()},get required(){return l()},get interaction(){return a.interaction},get status(){return e(ne)},get describedby(){return e(re)},get valueLabel(){return e(R)},filter:!1,get busy(){return e(P)},get invalid(){return e(i)},onquery:ce,onvaluechange:ue,get value(){return s()},set value(e){s(e)},optionContent:r,$$slots:{optionContent:!0}})}var ge=M(he,2),_e=t=>{{let r=n(()=>a.clearLabel??`Clear ${a.label}`);X(t,{variant:`ghost`,size:`sm`,class:`clear`,get"aria-label"(){return e(r)},onclick:fe,children:(e,t)=>{h();var n=d(`×`);_(e,n)},$$slots:{default:!0}})}};t(ge,t=>{e(ae)&&t(_e)}),c(me);var ye=M(me,2),xe=e=>{var t=Fn(),n=F(t,!0);H(()=>{W(t,`id`,w),u(n,a.description)}),_(e,t)};t(ye,e=>{a.description&&e(xe)});var Q=M(ye,2),Se=t=>{{let r=n(()=>f()||e(ee));X(t,{variant:`ghost`,size:`sm`,class:`create`,get disabled(){return e(r)},onclick:pe,children:(t,n)=>{h();var r=d();H(()=>u(r,`+ ${e(oe)??``}`)),_(t,r)},$$slots:{default:!0}})}};t(Q,e=>{a.onCreate&&e(Se)});var Ce=M(Q,2),we=e=>{var t=In(),n=F(t,!0);H(()=>{W(t,`id`,S),u(n,a.error)}),_(e,t)};t(Ce,e=>{a.error&&e(we)}),c(Z),D(Z,e=>G(j,e),()=>e(j)),_(r,Z),i()}var zn=l(`<button type="button" class="search-input__clear svelte-1gxducu"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg></button>`),Bn=l(`<div role="search" data-smrt-component="SearchInput"><label class="search-input__label svelte-1gxducu"> </label> <span class="search-input__icon svelte-1gxducu" aria-hidden="true"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg></span> <!> <!></div>`);function Vn(n,r){let o=B();m(r,!0);let s=C(r,`placeholder`,3,`Search`),l=C(r,`label`,3,`Search`),d=C(r,`clearLabel`,3,`Clear search`),f=C(r,`debounceMs`,3,300),p=C(r,`name`,3,`q`),h=C(r,`class`,3,``),g=`smrt-search-${o}`,v=T(``),b=null,x=null;E(()=>{let e=r.value;x!==null&&e===x?x=null:(x=null,G(v,e,!0))});function S(e){return e.replace(/\s+/g,` `).trim()}function w(){b&&clearTimeout(b),b=null}function D(e){w();let t=S(e);if(t===S(r.value))return;x=t;let n=()=>{x===t&&(x=null)};try{Promise.resolve(r.onsearch(t)).catch(n)}catch{n()}}function k(){w(),b=setTimeout(()=>D(e(v)),f())}function A(t){t.key!==`Enter`||t.isComposing||(t.preventDefault(),D(e(v)))}function j(){G(v,``),D(``),document.getElementById(g)?.focus()}I(w);var N=Bn(),P=O(N),L=F(P,!0),R=M(P,4);Z(R,{get id(){return g},type:`search`,get name(){return p()},get placeholder(){return s()},enterkeyhint:`search`,autocomplete:`off`,class:`search-input__field`,oninput:k,onkeydown:A,get value(){return e(v)},set value(e){G(v,e,!0)}});var ee=M(R,2),z=e=>{var t=zn();H(()=>W(t,`aria-label`,d())),y(`click`,t,j),_(e,t)};t(ee,t=>{e(v)&&t(z)}),c(N),H(()=>{a(N,1,`search-input ${h()??``}`,`svelte-1gxducu`),W(P,`for`,g),u(L,l())}),_(n,N),i()}b([`click`]),b([`pointerdown`,`pointermove`,`pointerup`,`click`]),b([`change`]);var Hn=new Set([`$$slots`,`$$events`,`$$legacy`,`checked`,`label`,`labelPosition`,`size`,`id`,`name`,`value`,`disabled`,`required`,`class`,`interaction`,`onchange`,`aria-label`,`density`]),Un=l(`<span class="smrt-switch__label svelte-1kh2dfy" data-smrt-part="label"> </span>`),Wn=l(`<label data-smrt-hit-target="" data-smrt-component="Switch"><!> <span class="smrt-switch__control svelte-1kh2dfy" data-smrt-part="control"><input/> <span class="smrt-switch__track svelte-1kh2dfy" data-smrt-part="track" aria-hidden="true"><span class="smrt-switch__thumb svelte-1kh2dfy" data-smrt-part="thumb"></span></span></span> <!></label>`);function Gn(r,o){let s=B();m(o,!0);let l=C(o,`checked`,15,!1),d=C(o,`labelPosition`,3,`right`),f=C(o,`size`,3,`md`),p=C(o,`disabled`,3,!1),g=C(o,`required`,3,!1),v=C(o,`class`,3,``),y=R(o,Hn),b=ie(),x=ve(),S=T(null),w=n(()=>o.id??b?.().inputId??`smrt-switch-${s}`),E=n(()=>{let e=b?.().interaction;return o.interaction===!1||e===!1?!1:{...e??{},...o.interaction??{}}}),A=n(()=>e(E)===!1?void 0:e(E).id??o.name??e(w));function j(t){l(me(t)),e(S)&&be(e(S))}function N(e){l(e.currentTarget.checked),o.onchange?.(e)}ue(()=>{let t=e(S),n=e(E);return!t||n===!1?!1:{controlId:e(A),subject:n.subject,metadata:{kind:`switch`,label:b?.().label??o.label??o[`aria-label`]??void 0,description:n.description??b?.().description,sensitivity:n.sensitivity??`public`,readable:n.readable,writable:n.writable,constraints:{required:g()===!0}},getValue:()=>l(),prepareValue:oe,setValue:j,clear:()=>(j(!1),!0),focus:()=>t.focus(),reveal:()=>ye(t),highlight:e=>ae(t.closest(`label`)??t,e),validate:()=>t.reportValidity(),validateValue:e=>se(t,e),getState:()=>({disabled:t.matches(`:disabled`),valid:t.validity.valid,validationMessage:t.validationMessage||void 0})}});var P=Wn();let I;var L=O(P),ee=e=>{var t=Un(),n=F(t,!0);H(()=>u(n,o.label)),_(e,t)};t(L,e=>{o.label&&d()===`left`&&e(ee)});var z=M(L,2),V=O(z);k(V,(t,n,r)=>({id:e(w),type:`checkbox`,role:`switch`,name:o.name,value:o.value,disabled:p(),required:g(),checked:l(),"aria-label":t,"aria-describedby":n,"aria-invalid":r,onchange:N,...y,"data-smrt-part":`input`}),[()=>o[`aria-label`]??o.label??b?.().label,()=>b?.().describedBy,()=>b?.().invalid?`true`:void 0],void 0,void 0,`svelte-1kh2dfy`,!0),D(V,e=>G(S,e),()=>e(S)),h(2),c(z);var U=M(z,2),K=e=>{var t=Un(),n=F(t,!0);H(()=>u(n,o.label)),_(e,t)};t(U,e=>{o.label&&d()===`right`&&e(K)}),c(P),H(()=>{W(P,`data-density`,o.density),I=a(P,1,`smrt-switch__root smrt-switch__${f()??``} ${v()??``}`,`svelte-1kh2dfy`,I,{"smrt-switch__disabled":p()}),W(P,`data-smrt-control`,e(A)),W(P,`data-smrt-form`,x?.formId),W(P,`data-smrt-subject-type`,e(E)===!1?void 0:e(E).subject?.type),W(P,`data-smrt-subject-id`,e(E)===!1?void 0:e(E).subject?.id)}),_(r,P),i()}var Kn=l(`<span class="tag svelte-dpy1rl"> <button type="button" class="svelte-dpy1rl">×</button><input type="hidden"/></span>`),qn=l(`<div data-smrt-component="TagsInput"><label class="svelte-dpy1rl"> </label><div class="tags svelte-dpy1rl"><!> <input class="svelte-dpy1rl"/></div></div>`);function Jn(t,r){let o=B();m(r,!0);let s=C(r,`values`,31,()=>A([])),l=C(r,`placeholder`,3,`Add a tag`),d=C(r,`disabled`,3,!1),p=C(r,`allowDuplicates`,3,!1),h=C(r,`class`,3,``),v=`smrt-tags-${o}`,b=ve(),E=T(null),k=T(null),j=T(``),N=n(()=>r.interaction===!1?void 0:r.interaction?.id??r.name??v);function P(t){let n=t.trim();!n||d()||r.maxTags!==void 0&&s().length>=r.maxTags||!p()&&s().includes(n)||(s([...s(),n]),G(j,``),r.onvalueschange?.(s()),le(b,e(N),r.interaction===!1?void 0:r.interaction?.subject),e(E)&&be(e(E)))}function I(t){t<0||t>=s().length||(s(s().filter((e,n)=>n!==t)),r.onvalueschange?.(s()),le(b,e(N),r.interaction===!1?void 0:r.interaction?.subject),e(E)&&be(e(E)))}function L(e){if(!Array.isArray(e))return;let t=e.map(String).filter((e,t,n)=>p()||n.indexOf(e)===t);s(r.maxTags===void 0?t:t.slice(0,r.maxTags)),r.onvalueschange?.(s())}function R(t){t.key===`Enter`||t.key===`,`?(t.preventDefault(),P(e(j))):t.key===`Backspace`&&!e(j)&&s().length&&I(s().length-1)}ue(()=>{let t=e(E),n=e(k);return!t||!n||r.interaction===!1?!1:{controlId:e(N),subject:r.interaction?.subject,metadata:{kind:`tags-input`,label:r.label,description:r.interaction?.description,sensitivity:r.interaction?.sensitivity??`public`,readable:r.interaction?.readable,writable:r.interaction?.writable},getValue:()=>[...s()],setValue:L,clear:()=>(L([]),!0),focus:()=>n.focus(),reveal:()=>ye(t),highlight:e=>ae(t,e),validateValue:e=>pe(e,r.maxTags,p()),getState:()=>({disabled:n.matches(`:disabled`)})}});var z=qn(),V=O(z),U=F(V,!0),K=M(V),q=O(K);f(q,17,s,g,(t,n,i)=>{var a=Kn(),o=O(a,!0),s=M(o),l=M(s);S(l),c(a),H(()=>{u(o,e(n)),s.disabled=d(),W(s,`aria-label`,`Remove ${e(n)}`),W(l,`name`,r.name?`${r.name}[]`:void 0),w(l,e(n))}),y(`click`,s,()=>I(i)),_(t,a)});var J=M(q,2);S(J),D(J,e=>G(k,e),()=>e(k)),c(K),D(K,e=>G(E,e),()=>e(E)),c(z),H(()=>{a(z,1,`tags-field ${h()??``}`,`svelte-dpy1rl`),W(V,`for`,v),u(U,r.label),W(K,`data-smrt-control`,e(N)),W(K,`data-smrt-form`,b?.formId),W(K,`data-smrt-subject-type`,r.interaction===!1?void 0:r.interaction?.subject?.type),W(K,`data-smrt-subject-id`,r.interaction===!1?void 0:r.interaction?.subject?.id),W(J,`id`,v),W(J,`placeholder`,l()),J.disabled=d()}),y(`keydown`,J,R),x(`blur`,J,()=>P(e(j))),ee(J,()=>e(j),e=>G(j,e)),_(t,z),i()}b([`click`,`keydown`]);var Yn=new Set([`$$slots`,`$$events`,`$$legacy`,`id`,`value`,`placeholder`,`disabled`,`readonly`,`required`,`name`,`rows`,`class`,`interaction`,`aria-label`,`aria-describedby`,`aria-invalid`,`density`]),Xn=l(`<textarea></textarea>`);function Zn(t,r){m(r,!0);let a=C(r,`value`,15,``),o=C(r,`disabled`,3,!1),s=C(r,`readonly`,3,!1),c=C(r,`required`,3,!1),l=C(r,`rows`,3,4),u=C(r,`class`,3,``),d=R(r,Yn),f=ie(),p=ve(),h=T(null),g=n(()=>r.id??f?.().inputId),v=n(()=>r[`aria-describedby`]??f?.().describedBy),y=n(()=>r[`aria-invalid`]??(f?.().invalid?`true`:void 0)),b=n(()=>{let e=f?.().interaction;return r.interaction===!1||e===!1?!1:{...e??{},...r.interaction??{}}}),x=n(()=>e(b)===!1?void 0:e(b).id??r.name??e(g));function S(t){a(String(t??``)),e(h)&&be(e(h))}ue(()=>{let t=e(h),n=e(x),i=e(b);return!t||!n||i===!1?!1:{controlId:n,subject:i.subject,metadata:{kind:`textarea`,label:f?.().label??r[`aria-label`]??void 0,description:i.description??f?.().description,sensitivity:i.sensitivity??`public`,readable:i.readable,writable:i.writable,constraints:{required:c()===!0,minLength:t.minLength>=0?t.minLength:void 0,maxLength:t.maxLength>=0?t.maxLength:void 0}},getValue:()=>a(),prepareValue:_e,setValue:S,clear:()=>(S(``),!0),focus:()=>t.focus(),reveal:()=>ye(t),highlight:e=>ae(t,e),validate:()=>t.reportValidity(),validateValue:e=>ce(t,e),getState:()=>({disabled:t.matches(`:disabled`),readonly:t.readOnly,valid:t.validity.valid,validationMessage:t.validationMessage||void 0})}});function w(){e(h)?.focus()}function E(){return e(h)}var O={focus:w,getElement:E},A=Xn();return K(A),k(A,()=>({id:e(g),placeholder:r.placeholder,disabled:o(),readonly:s(),required:c(),name:r.name,"aria-label":r[`aria-label`],rows:l(),"aria-describedby":e(v),"aria-invalid":e(y),"data-density":r.density,class:`textarea ${u()??``}`,"data-smrt-control":e(x),"data-smrt-form":p?.formId,"data-smrt-subject-type":e(b)===!1?void 0:e(b).subject?.type,"data-smrt-subject-id":e(b)===!1?void 0:e(b).subject?.id,...d,"data-smrt-component":`Textarea`}),void 0,void 0,void 0,`svelte-5xfgxc`),D(A,e=>G(h,e),()=>e(h)),ee(A,a),_(t,A),i(O)}b([`change`]);var Qn=new Set([`$$slots`,`$$events`,`$$legacy`,`pressed`,`id`,`name`,`disabled`,`class`,`interaction`,`children`,`onclick`,`aria-label`]),$n=l(`<button><!></button>`);function er(t,r){let a=B();m(r,!0);let o=C(r,`pressed`,15,!1),l=C(r,`disabled`,3,!1),u=C(r,`class`,3,``),d=R(r,Qn),f=ve(),h=T(null),g=n(()=>r.id??`smrt-toggle-button-${a}`),v=n(()=>r.interaction===!1?void 0:r.interaction?.id??r.name??e(g));function y(t){o(!!t),e(h)&&be(e(h))}function b(t){o(!o()),le(f,e(v),r.interaction===!1?void 0:r.interaction?.subject),e(h)&&be(e(h)),r.onclick?.(t)}ue(()=>{let t=e(h);return!t||r.interaction===!1?!1:{controlId:e(v),subject:r.interaction?.subject,metadata:{kind:`toggle-button`,label:r[`aria-label`]??(t.textContent?.trim()||void 0),description:r.interaction?.description,sensitivity:r.interaction?.sensitivity??`public`,readable:r.interaction?.readable,writable:r.interaction?.writable},getValue:()=>o(),prepareValue:oe,setValue:y,clear:()=>(y(!1),!0),focus:()=>t.focus(),reveal:()=>ye(t),highlight:e=>ae(t,e),validateValue:e=>typeof e==`boolean`,getState:()=>({disabled:t.matches(`:disabled`)})}});var x=$n();k(x,()=>({id:e(g),type:`button`,name:r.name,disabled:l(),class:`toggle-button ${u()??``}`,"aria-pressed":o(),"aria-label":r[`aria-label`],"data-smrt-control":e(v),"data-smrt-form":f?.formId,"data-smrt-subject-type":r.interaction===!1?void 0:r.interaction?.subject?.type,"data-smrt-subject-id":r.interaction===!1?void 0:r.interaction?.subject?.id,onclick:b,...d,"data-smrt-component":`ToggleButton`,[j]:{pressed:o()}}),void 0,void 0,void 0,`svelte-1ihepq`);var S=O(x);s(S,()=>r.children??p),c(x),D(x,e=>G(h,e),()=>e(h)),_(t,x),i()}export{Ee as S,Tt as _,Vn as a,Be as b,En as c,mn as d,en as f,Mt as g,Lt as h,Gn as i,bn as l,Gt as m,Zn as n,Rn as o,Zt as p,Jn as r,Mn as s,er as t,gn as u,xt as v,Ae as x,Xe as y};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./JqlEoPqZ.js","./DG3qFFTE.js","./COiEfhsA.js","./xihTtKlq.js","./D3lXu_rt.js","./YUSKx8_q.js","./DK8Blf1Y.js","../assets/currency-metadata.ksbBA8-C.css","../assets/app.BHwMQ9Zv.css","./ICDFUCZL.js","./Bv5jGtB8.js","../assets/feedback.qFktqYFY.css","./BeL8dJx9.js","./uBIymjUX.js","./DF-0MxNw.js","../assets/SegmentedControl.DMqHG5fn.css","./DIE02RSm.js","../assets/webmcp-ui-context.hO24Ni5w.css","./DfN2k_EX.js","../assets/data.CVlX_W0i.css","./CUyVrfsu.js","./CsaWd8kG.js","../assets/forms.BRdbPdvs.css","./BYcBM-fh.js","../assets/AppShell.BkKNrxND.css","./BQLQsso4.js","../assets/workspace.C40zM0Mb.css","./DmHVTNcC.js","./lUJaueNM.js","../assets/state.C0UZEhxS.css","../assets/labels.Dxa6EyRI.css","./CdKHckEF.js","./FeyhlLIZ.js","./DIgo5ngo.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"./uBIymjUX.js";import"./xihTtKlq.js";import{I as o,K as s,L as c,O as l,U as u,W as d,_ as f,dt as p,ft as m,h,lt as g,p as _,st as v,x as y}from"./D3lXu_rt.js";import{g as ee}from"./BeL8dJx9.js";import"./DF-0MxNw.js";import"./DIE02RSm.js";import{u as b}from"./DfN2k_EX.js";import{C as x,D as te,E as S,F as ne,I as C,L as re,N as ie,O as ae,S as oe,T as se,_ as ce,b as le,d as ue,g as de,h as fe,n as pe,r as me,v as he,w as ge,x as _e,z as ve}from"./DmHVTNcC.js";import{B as ye,G as be,J as xe,R as Se,V as Ce,W as we,X as Te,Y as Ee,a as De,b as w,c as Oe,d as ke,i as Ae,j as je,l as Me,n as Ne,o as Pe,q as Fe,t as T,v as Ie,x as E,z as Le}from"./lUJaueNM.js";function Re(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 ze(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 D(e,t){let n=ze(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 Be(e){let t;return()=>(t??=e(),t)}function Ve(e){return typeof e==`object`&&!!e&&`default`in e&&!!e.default}function He(e,t,n){let r=Be(()=>D(e.export,t)),i=e.optionsEditor?Be(()=>D(e.optionsEditor,t)):void 0,a=e.data?.load?Be(()=>D(e.data?.load,t)):void 0,o={type:e.type,title:e.label,options:e.options??[],loadComponent:async()=>{let e=await r();return Ve(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 Ve(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 Ue(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 D(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(He(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 We=[`identifier`,`status`,`date`,`party`,`total`,`money`];function Ge(e){for(let t of[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`])if(e.includes(t))return t}function O(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 We)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:k(n,e),...Ge(t[n]??[])?{role:Ge(t[n]??[])}:{}}))}function Ke(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:k(o,e)}),s&&d.push({key:s,label:k(s,e),role:`quantity`}),l&&d.push({key:l,label:k(l,e),role:`money`,summarize:!1}),u&&u!==l&&d.push({key:u,label:k(u,e),role:`money`}),d}function k(e,t){let n=t.fields[e];return n&&(n.type===`foreignKey`||n.type===`crossPackageRef`)&&/.[a-z]Id$/.test(e)?S(e.slice(0,-2)):S(e)}var qe=[`text`,`integer`,`decimal`,`boolean`,`datetime`,`json`,`foreignKey`,`crossPackageRef`];function Je(e){return qe.includes(e)?e:`text`}var Ye=/(Date|^date|period(Start|End))$/;function Xe(e,t){return t.type===`datetime`&&!t.system&&Ye.test(t.name)&&!e.fields.some(e=>e.name===`allDay`)?`date`:void 0}function Ze(e){return ue(e)[0]}function Qe(e,t){let n=t.ui?{...t.ui}:void 0,r=l(t)?`money`:Xe(e,t);return{type:Je(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}:{},...Ze(e)===t.name?{display:!0}:{}}}function $e(e,t){return e.includes(`:`)?e:`${t.slice(0,t.lastIndexOf(`:`))}:${e}`}function et(e,t){if(!t.related)return!1;let n=$e(t.related,e.id);return xe(g,n,s).some(t=>t.id===e.id)}function tt(e){return e.fields.flatMap(t=>{if(t.type!==`foreignKey`&&t.type!==`crossPackageRef`||!t.related)return[];let n=m($e(t.related,e.id));return n?[{field:t.name,kind:t.type===`crossPackageRef`?`crossPackageRef`:`foreignKey`,relatedCollection:n.model.collection,...et(e,t)?{role:`items`}:{}}]:[]})}function A(e){let t=tt(e);return{name:e.collection,objectRef:e.id,className:e.name,idField:`id`,fields:Object.fromEntries(e.fields.map(t=>[t.name,Qe(e,t)])),...t.length?{relationships:t}:{}}}function nt(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 rt(e,t){let n=new Set(t);for(let t of e)for(let e of t.models)n.add(e);return n}function it(e){return _(e.replace(/_?id$/i,``)||e)}function at(e,t,n){let r=Ee(e,t),i=Te(e,t).filter(e=>e.model.exposed&&n.has(e.model.id)),a=new Set(xe(e,t,s).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 c=i.map(e=>{let t=a.has(e.model.id)?`items`:`children`,n=A(e.model),i=ae(n),s=[e.fk];return{model:e.model.id,field:e.fk,label:(o.get(e.model.id)??0)>1?`${we(e.model.name,r)} (${it(e.fk).toLowerCase()})`:we(e.model.name,r),kind:t,columns:t===`items`?Ke(n,i,{exclude:s}):O(n,i,{exclude:s,max:5}),...t===`items`&&`sortOrder`in n.fields?{sort:`sortOrder`}:{}}});for(let n of be(e,t))c.push({model:n.model.id,field:n.fk,label:it(n.fk),kind:`reference`});return c}var ot=Symbol(`smrt-cookbook`);function st(){return t(ot)}function ct(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 se(n,i)}function lt(e){return e?async(t,n)=>{let r=ct(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}}:ct}var ut=new Set([`foreignKey`,`crossPackageRef`]);function j(e,t){return`/m/${e}/${t}/`}function dt(e,t,n,r=`view`){let i=`${j(e,t)}${encodeURIComponent(n)}/`;return r===`edit`?`${i}edit/`:i}function ft(e,t,n,r){return`${j(e,t)}?${encodeURIComponent(n)}=${encodeURIComponent(r)}`}function pt(e,t){let n=new URLSearchParams(e);for(let e of t.fields){if(!ut.has(e.type))continue;let t=n.get(e.name);if(t)return{field:e.name,equals:t}}}function mt(e){return e?.equals===void 0?``:`${encodeURIComponent(e.field)}=${encodeURIComponent(e.equals)}`}function ht(e,t,n){let r=n.filter(t=>t.model.id===e&&t.filter);if(t){let e=r.find(e=>e.key===t)?.filter;return e?{field:e.field,equals:e.value}:void 0}let i=r[0]?.filter;if(!i)return;let a=r.map(e=>e.filter).filter(e=>e?.field===i.field).map(e=>String(e?.value));return{field:i.field,notIn:[...new Set(a)]}}function gt(e,t){if(!e)return!0;let n=String(t[e.field]??``);return e.equals===void 0?!e.notIn?.includes(n):n===e.equals}function _t(e){return e?.equals===void 0?{}:{[e.field]:e.equals}}var M=e=>typeof e==`number`&&Number.isSafeInteger(e)?e:null,vt=(e,t)=>e.fields.some(e=>e.name===t);function yt(e,t){let n=ae(A(e)),r=fe(t,n);return Object.values(r).some(e=>M(e)!==null)?r:void 0}function bt(e,t){return!!e.fields.find(e=>e.name===`status`)?.enum?.includes(`draft`)&&typeof t.status==`string`&&t.status!==``&&t.status!==`draft`}function xt(e,t,n){if(!bt(e,t)||![`subtotal`,`taxAmount`,`totalAmount`,`discountTotal`].every(t=>vt(e,t)))return;let r=M(t.subtotal),i=M(t.taxAmount),a=M(t.totalAmount),o=M(t.discountTotal)??0;if(r===null||i===null||a===null)return;let s=u(t,`exclusive`);return{subtotal:r,discount:o,tax:i,total:a,lineAmountType:s,roundingScope:d(t,`line`),showNetSubtotal:s===`inclusive`,taxes:v(n,s).flatMap(e=>e.taxComponentId?[{taxComponentId:e.taxComponentId,name:e.name,percent:e.percent,taxable:e.taxable,tax:e.tax}]:[])}}var N=ie();function P(e){let{source:t,href:n}=e;if(!t||!n)throw Error(`the planner widget context is missing`);return{source:t,href:n}}function F(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:j(t.pkg.id,t.model.name)}}var St=new Set([`foreignKey`,`crossPackageRef`]);function Ct(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||!St.has(s.type))throw Error(`${n.name} has no reference field ${o}`);return{field:o,id:i.id}}async function I(e,t,n){return n?e.listWhere(t,n.field,n.id):e.list(t)}function L(e,t,n){return e(n?ft(t.packageId,t.model.name,n.field,n.id):t.path)}var R=e=>typeof e==`number`&&Number.isFinite(e);async function wt(e,t){let{source:n,href:r}=P(t),i=F(e.model),{model:a}=i,o=Ct(e,t,a),s=await I(n,a,o),c=L(r,i,o),u=typeof e.measure==`string`?e.measure:``;if(u===`count`||u===``)return{value:s.length,format:`integer`,href:c};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(R),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=l(d);return{value:m?Math.round(p):p,format:m?`money`:d.type===`integer`?`integer`:`decimal`,...m?{currency:`USD`}:{},href:c}}function Tt(e,t){return R(e)&&R(t)?e-t:String(e??``).localeCompare(String(t??``))}var Et=new Set([`createdAt`,`updatedAt`]),Dt=[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`];function Ot(e=[]){return Dt.find(t=>e.includes(t))}function kt(e,t,n,r){let i=A(e),a=r?[r]:[],o=ge(n);if(o.length===0)return O(i,t,{exclude:a,max:5});let s=[...Ke(i,t,{exclude:a}),...O(i,t,{exclude:a,max:o.length+8})];return o.map(n=>{let r=e.fields.find(e=>e.name===n);if(!r)throw Error(`${e.name} has no field ${n}`);let i=s.find(e=>e.key===n);if(i)return i;let a=Ot(t[n]);return{key:n,label:St.has(r.type)?_(n.replace(/Id$/,``)):_(n),...a?{role:a}:{}}})}var At=new Set([`money`,`quantity`]);function jt(e,t){let n={};for(let r of e)(r.summarize??At.has(r.role))&&(n[r.key]=t.reduce((e,t)=>{let n=t[r.key];return R(n)?e+n:e},0));return n}function Mt(e,t){let n=te(A(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 Nt(e,t){let{source:n,href:r}=P(t),i=F(e.model),{model:a}=i,o=Ct(e,t,a),s=await I(n,a,o);if(typeof e.sort==`string`&&e.sort){if(!a.fields.find(t=>t.name===e.sort)&&!Et.has(e.sort))throw Error(`${a.name} has no field ${e.sort}`);let t=s.some(t=>t[e.sort]!==void 0)?e.sort:B(a)?.name;if(t){let n=e.direction===`asc`?1:-1;s=[...s].sort((e,r)=>n*Tt(e[t],r[t]))}}let c=kt(a,ae(A(a)),e.columns,o?.field),l=R(e.limit)?e.limit:5,u=s.slice(0,l),d=a.fields.filter(e=>St.has(e.type)&&c.some(t=>t.key===e.name)),f=await me(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(h(r.related,n))??``]:[t.key,n??null]})),m=jt(c,s),g=!Fe(a);return{rows:await Promise.all(u.map(async e=>({id:String(e.id),title:await pe(n,a,e,0,o?.field),...g?{href:r(dt(i.packageId,a.name,String(e.id)))}:{},cells:p(e)}))),total:s.length,...g?{href:L(r,i,o)}:{},columns:c,currency:Mt(a,s),...Object.keys(m).length?{summaries:m}:{}}}var Pt={"7d":7,"30d":30,"90d":90,"12m":365,all:null},z=864e5;function Ft(e){return e===`7d`||e===`30d`?`day`:e===`90d`?`week`:`month`}function It(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*z:r}function Lt(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)*z}function Rt(e,t){let n=new Date(e).toISOString();return t===`month`?n.slice(0,7):n.slice(0,10)}var zt=e=>e.type===`datetime`&&!e.system;function B(e){let t=e.fields.filter(zt);return t.find(e=>/^(issue|order|start|created)/i.test(e.name))??t[0]}function V(e){if(typeof e!=`string`&&typeof e!=`number`)return;let t=new Date(e).getTime();return Number.isFinite(t)?t:void 0}async function Bt(e,t){let{source:n,href:r}=P(t),i=F(e.model),{model:a}=i,o=Ct(e,t,a),s=typeof e.groupBy==`string`?e.groupBy:``,c=s?a.fields.find(e=>e.name===s):B(a);if(!c)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(Pt,f))throw Error(`unknown period ${f}`);let p=Pt[f],m=zt(c),h=m?c:B(a),g=p!==null&&h?y-p*z:-1/0,_=await I(n,a,o);h&&g!==-1/0&&(_=_.filter(e=>{let t=V(e[h.name]);return t!==void 0&&t>=g&&t<=y}));let v=new Map,ee=(e,t,n)=>{let r=v.get(e)??{key:t,sum:0,n:0};if(d){let e=n[d.name];if(!R(e))return;r.sum+=e}r.n+=1,v.set(e,r)},b=Ft(f);if(m){let e=g===-1/0?Math.min(..._.map(e=>V(e[c.name])??y),y):g;for(let t=It(e,b);t<=y;t=Lt(t,b))v.set(Rt(t,b),{key:t,sum:0,n:0});for(let e of _){let t=V(e[c.name]);if(t===void 0)continue;let n=It(t,b);ee(Rt(n,b),n,e)}}else for(let e of _){let t=e[c.name],n=t==null||t===``?`(none)`:String(t);ee(n,n,e)}let x=d?l(d):!1,te=e=>{if(!d)return e.n;let t=u===`avg`&&e.n?e.sum/e.n:e.sum;return x?Math.round(t):t},S=[...v.entries()].map(([e,t])=>({label:e,value:te(t),key:t.key}));return S=m?S.sort((e,t)=>Number(e.key)-Number(t.key)):S.sort((e,t)=>t.value-e.value||e.label.localeCompare(t.label)),{points:S.map(({label:e,value:t})=>({label:e,value:t})),format:d?x?`money`:d.type===`integer`?`integer`:`decimal`:`integer`,...x?{currency:`USD`}:{},href:L(r,i,o)}}var Vt=async(e,t)=>{let{source:n,entryIndex:r}=e;if(!n||!r)throw Error(`the planner widget context is missing`);return Promise.all(t.map(async e=>{let t=r.get(e.id??``);if(!t)return e;let i=await n.list(t.model);return{...e,count:i.filter(e=>gt(t.scope,e)).length}}))};he(N,{metric:wt,records:Nt,chart:Bt,shortcuts:Vt,shortcuts:lt(Vt)});function Ht(e){let{relations:t,viewAllHref:n}=e;if(!t)throw Error(`the record page context is missing`);return{relations:t,records:Nt,viewAllHref:n}}async function Ut(e,t){let{source:n}=P(e),r=e.record;if(!r?.id)throw Error(`line items need a record`);let{model:i}=F(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=xt(i,a,o&&s?await n.listWhere(s,o.field,r.id):[]),l=c?void 0:yt(i,a),u=te(A(i)),d=u?a[u]:void 0;return{...c?{storedTotals:c}:{},...l?{totals:l}:{},...typeof d==`string`&&d?{currency:d}:{}}}N.register(ce((e,t)=>_e(Ht(t))(e,t))),N.register(de(async(e,t)=>{let n=Ht(t),{totals:r,storedTotals:i,currency:a}=await Ut(t,n.relations);return le({...n,totals:()=>r,storedTotals:()=>i,currency:()=>a})(e,t)}));var Wt=[`shortcuts`,`metric`,`records`,`chart`,`note`],Gt={"@happyvertical/smrt-reports/svelte":async()=>({SavedReportsWidget:(await a(async()=>{let{default:e}=await import(`./JqlEoPqZ.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})},Kt=async(e,t)=>{let n=Gt[e];if(n)return(await n())[t]},qt=w.filter(e=>e.surfaces?.some(e=>e.kind===`widget`)),Jt=qt.flatMap(e=>(e.surfaces??[]).flatMap(e=>e.kind===`widget`?[e.type]:[]));Ue(N,qt,Kt);var H=new Map(Se(w).map(e=>[`section:${e.id}`,e])),Yt=g.packages.flatMap(e=>e.models.map(e=>e.id)),Xt=[...Wt,...Jt];function Zt(e){let t=H.get(e);for(let e of t?.recipes??[]){let t=Ie(e)[0];if(t)return{id:t.model.id,name:_(t.model.name)}}}function Qt(e){let t=Re(H.get(e)?.recipes[0]);if(t&&Jt.includes(t.type))return[t];let n=[{id:`shortcuts`,type:`shortcuts`,span:4,options:{}}],r=Zt(e);return r&&n.push({id:`count`,type:`metric`,span:1,options:{title:f(r.name),model:r.id,measure:`count`}},{id:`latest`,type:`records`,span:3,options:{title:`${r.name} records`,model:r.id,limit:5}}),n}var $t=new Map;function en(e){if(!ve.test(e))return;let t=$t.get(e);return t||(t=C({id:e,allowed:Xt,models:Yt,defaults:Qt(e)}),$t.set(e,t)),t}function tn(e,t){return`detail:${e}.${t}`}var nn=new Map(g.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(t=>[x(t.id),{packageId:e.id,model:t}])));function U(e){let[,t,n]=/^detail:([A-Za-z0-9_-]+)\.([A-Za-z0-9_]+)$/.exec(e)??[],r=t&&n?p(t,n):void 0;return t&&r?.exposed?{packageId:t,model:r}:nn.get(e)}var rn=new Set(g.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(e=>e.id))),an=new Map;function on(e){let t=an.get(e);if(t)return t;let n=U(e);if(!n)return;let r=at(g,n.model.id,rn),i=oe(A(n.model),r,{id:e,maxMetrics:2*r.length});return t=C({...i,maxWidgets:Math.max(i.maxWidgets??24,i.defaults.length+24)}),an.set(e,t),t}function sn(e,t){let n=on(e),r=U(e);if(!n||!r)return;let i=at(g,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 C({...n,defaults:o})}function cn(e){return e.startsWith(`detail:`)?on(e):en(e)}function ln(e,t){return H.has(e)||e===`section:${je.id}`?!0:e.startsWith(`detail:`)?U(e)!==void 0:e.startsWith(`custom:`)&&ve.test(e)&&(t?.customSections??[]).some(t=>t.id===e)}var un=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function dn(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 fn(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 pn(e,t){let n=cn(e);if(!n)return{override:null,issues:[{widgetId:null,type:null,code:`malformed`,message:`not an overview id`}]};let r=ne(n,t,N);if(r.ok)return{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=ne(n,fn(i.override,a),N);return o.ok?{override:o.override,issues:r.issues}:{override:null,issues:[...r.issues,...o.issues]}}function mn(e,t){if(!un(e))return null;let n=[],r=[];for(let i of Object.keys(e).sort()){if(!ln(i,t)){r.push(`Overview ${i} is not a page in this app and was dropped.`);continue}let{override:a,issues:o}=pn(i,e[i]);for(let e of o)r.push(dn(i,e));a&&n.push([i,a])}return{overviews:Object.fromEntries(n),dropped:r}}var W=b,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`||!W.includes(e.preset))return{ok:!1,error:`The theme preset must be one of ${W.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=Le(w)){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=w){let n=new Map;for(let e of t){let t=Ce(e).id;for(let r of Ie(e))r.key&&n.set(`${K}${t}:${r.packageId}:${r.model.name}:${r.label}`,ye(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:ye(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=>!E.has(e)),i=[...new Set([...ke(e.recipes.filter(e=>E.has(e)),E),...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=>E.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)||De(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:mn})}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,...Ne(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=ke(Me(n,E),E),i=new Set(r.flatMap(e=>E.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&&De(e));c(Ae(e)||n?t.taxRate:void 0),o({pricesIncludeTax:t.pricesIncludeTax,taxRounding:t.taxRounding,currency:t.currency})}var Zn=new class{#e=r();get layout(){return e(this.#e)}set layout(e){i(this.#e,e,!0)}#t=r();get name(){return e(this.#t)}set name(e){i(this.#t,e,!0)}#n=r();get description(){return e(this.#n)}set description(e){i(this.#n,e,!0)}#r=r();get theme(){return e(this.#r)}set theme(e){i(this.#r,e,!0)}#i=r({});get overviews(){return e(this.#i)}set overviews(e){i(this.#i,e)}#a=r(`unknown`);get persist(){return e(this.#a)}set persist(e){i(this.#a,e,!0)}#o=r(!1);get loaded(){return e(this.#o)}set loaded(e){i(this.#o,e,!0)}hostManaged=!1;#s=r(``);get loadNotice(){return e(this.#s)}set loadNotice(e){i(this.#s,e,!0)}saveBlocked=!1;#c=r(!1);get keepLegacyUrl(){return e(this.#c)}set keepLegacyUrl(e){i(this.#c,e,!0)}replacedBeforeLoad=!1;previousKept=!1;storage=null;timer;snapshot(){return Un(n(T.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=ee(e)?void 0:e}apply(e){T.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=[...T.unavailableRecipes,...T.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(){T.removeUnavailable(),this.scheduleSave()}setTheme(e){this.theme=Tn(e)}settings(){return Pe(this.snapshot())}setSettings(e){let t=Oe(this.snapshot(),e);T.rows=t.policies.map(e=>({...e})),$(t)}replace(e){this.apply(e),this.loaded||(this.replacedBeforeLoad=!0),this.saveBlocked=!1,this.keepLegacyUrl=!1}reset(){T.clear(),$({policies:[]}),this.layout=void 0,this.theme=void 0,this.name=void 0,this.description=void 0,this.overviews={};try{globalThis.localStorage?.removeItem(Xn)}catch{}this.saveBlocked=!1,this.keepLegacyUrl=!1}importText(e){let t=In(e);return t.ok&&this.replace(t.cookbook),t}hydrate(e,t=zn()){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{st as A,ht as C,pt as D,j as E,at as M,A as N,mt as O,nt as P,gt as S,ft as T,Sn as _,zn as a,en as b,q as c,gn as d,hn as f,En as g,W as h,Z as i,rt as j,dt 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,sn as v,_t as w,N as x,tn as y};