@happyvertical/smrt-planner 0.57.2 → 0.57.4

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 (906) hide show
  1. package/agents/assistant.md +8 -1
  2. package/agents/commands.md +4 -1
  3. package/agents/cookbook.md +8 -2
  4. package/app/404.html +21 -21
  5. package/app/_app/immutable/assets/2.CdEXvRg0.css +1 -0
  6. package/app/_app/immutable/assets/{feedback.DePeap37.css → feedback.qFktqYFY.css} +1 -1
  7. package/app/_app/immutable/chunks/{DQ1SHYJc.js → 8vF2REci.js} +1 -1
  8. package/app/_app/immutable/chunks/{C4QwYOkG.js → A_IpJrNN.js} +1 -1
  9. package/app/_app/immutable/chunks/{C0ucZoOF.js → B6GaAylQ.js} +1 -1
  10. package/app/_app/immutable/chunks/{CXWyfpCp.js → BMRtN-eN.js} +3 -3
  11. package/app/_app/immutable/chunks/Bc_SIIIS.js +1 -0
  12. package/app/_app/immutable/chunks/{BUIY_h3z.js → BhsxCKaI.js} +1 -1
  13. package/app/_app/immutable/chunks/Burj9UYU.js +1 -0
  14. package/app/_app/immutable/chunks/{BwcU9V16.js → BvRNePGN.js} +1 -1
  15. package/app/_app/immutable/chunks/C7z2g6fG.js +1 -0
  16. package/app/_app/immutable/chunks/CQ13lq7J.js +1 -0
  17. package/app/_app/immutable/chunks/{1Zpjoi-y.js → CUAfmRua.js} +1 -1
  18. package/app/_app/immutable/chunks/{Bu-php1s.js → CVcfTI5P.js} +1 -1
  19. package/app/_app/immutable/chunks/{gaBQMwwt.js → CdPJK-gf.js} +1 -1
  20. package/app/_app/immutable/chunks/{C5GaTR6t.js → Ckc_1feF.js} +1 -1
  21. package/app/_app/immutable/chunks/{DQX_f7BA.js → CztFAhpp.js} +1 -1
  22. package/app/_app/immutable/chunks/D76yH9OO.js +24 -0
  23. package/app/_app/immutable/chunks/D7t4xFw6.js +4 -0
  24. package/app/_app/immutable/chunks/{Bzx-XNnr.js → D8D_RStZ.js} +1 -1
  25. package/app/_app/immutable/chunks/DCr75fDJ.js +1 -0
  26. package/app/_app/immutable/chunks/DEwvWTFM.js +1 -0
  27. package/app/_app/immutable/chunks/{BAeyjCL_.js → DTWraE40.js} +1 -1
  28. package/app/_app/immutable/chunks/{BZhu4b2K.js → VCg3x54j.js} +1 -1
  29. package/app/_app/immutable/chunks/{BvF_HjSi.js → XlsfHlOd.js} +1 -1
  30. package/app/_app/immutable/chunks/{CqPgazbY.js → gnVUq1Tr.js} +25 -25
  31. package/app/_app/immutable/chunks/{nwp8tVWc.js → h1rof478.js} +1 -1
  32. package/app/_app/immutable/chunks/{aNkgB9ms.js → ukqw0V0Z.js} +1 -1
  33. package/app/_app/immutable/entry/{app.B-4NFfCd.js → app.C-mGsUDb.js} +2 -2
  34. package/app/_app/immutable/entry/start.DnB4rZdO.js +1 -0
  35. package/app/_app/immutable/nodes/0.CG8nFTeW.js +9 -0
  36. package/app/_app/immutable/nodes/{1.DIereQ7U.js → 1.BY2zPWBD.js} +1 -1
  37. package/app/_app/immutable/nodes/{10.DD2srRhL.js → 10.y59vLZOY.js} +1 -1
  38. package/app/_app/immutable/nodes/{11.YniEwoUY.js → 11.HBRO8fTE.js} +1 -1
  39. package/app/_app/immutable/nodes/{12.CmLo0eX_.js → 12.DiV3I_fX.js} +1 -1
  40. package/app/_app/immutable/nodes/{13.DHBg3FSE.js → 13.f4cxyt4f.js} +1 -1
  41. package/app/_app/immutable/nodes/{14.DvDXr38B.js → 14.DnBBJxxq.js} +1 -1
  42. package/app/_app/immutable/nodes/2.DR5lKFBV.js +24 -0
  43. package/app/_app/immutable/nodes/{3.BKisFpyK.js → 3.gu2TJwhp.js} +1 -1
  44. package/app/_app/immutable/nodes/{4.TwPulHIt.js → 4.CU9BPw5o.js} +1 -1
  45. package/app/_app/immutable/nodes/{5.D0vlCt9Z.js → 5.CD78hESs.js} +1 -1
  46. package/app/_app/immutable/nodes/{6.C_gaaJ3_.js → 6.B5LspHdV.js} +1 -1
  47. package/app/_app/immutable/nodes/{7.Bripk7o3.js → 7.lSo_04_4.js} +1 -1
  48. package/app/_app/immutable/nodes/{8.BhlRo42p.js → 8.OVIZi4uJ.js} +1 -1
  49. package/app/_app/immutable/nodes/{9.CjXXNQFq.js → 9.BLNgntah.js} +1 -1
  50. package/app/_app/version.json +1 -1
  51. package/app/advanced-styles/index.html +24 -24
  52. package/app/ai/index.html +28 -33
  53. package/app/blueprint/index.html +22 -22
  54. package/app/cookbook/index.html +22 -22
  55. package/app/index.html +38 -38
  56. package/app/m/ads/AdDeliveryTier/index.html +25 -25
  57. package/app/m/ads/AdEvent/index.html +25 -25
  58. package/app/m/ads/AdFormat/index.html +25 -25
  59. package/app/m/ads/AdGroup/index.html +25 -25
  60. package/app/m/ads/AdVariation/index.html +25 -25
  61. package/app/m/analytics/AnalyticsDataStream/index.html +25 -25
  62. package/app/m/analytics/AnalyticsEvent/index.html +25 -25
  63. package/app/m/analytics/AnalyticsProperty/index.html +25 -25
  64. package/app/m/analytics/AnalyticsReport/index.html +25 -25
  65. package/app/m/approvals/ApprovalEvent/index.html +25 -25
  66. package/app/m/approvals/ApprovalPolicy/index.html +25 -25
  67. package/app/m/approvals/ApprovalRequest/index.html +25 -25
  68. package/app/m/assets/Asset/attachments/index.html +26 -26
  69. package/app/m/assets/Asset/index.html +25 -25
  70. package/app/m/assets/AssetAssociation/index.html +25 -25
  71. package/app/m/assets/AssetMetafield/index.html +25 -25
  72. package/app/m/assets/AssetStatus/index.html +25 -25
  73. package/app/m/assets/AssetType/index.html +25 -25
  74. package/app/m/assets/Folder/index.html +25 -25
  75. package/app/m/chat/AgentSession/index.html +25 -25
  76. package/app/m/chat/ChatMessage/index.html +25 -25
  77. package/app/m/chat/ChatParticipant/index.html +25 -25
  78. package/app/m/chat/ChatReaction/index.html +25 -25
  79. package/app/m/chat/ChatRoom/index.html +25 -25
  80. package/app/m/chat/ChatThread/index.html +25 -25
  81. package/app/m/chat/VoiceGatewayTurn/index.html +25 -25
  82. package/app/m/chat/VoiceSession/index.html +25 -25
  83. package/app/m/commerce/Agreement/index.html +25 -25
  84. package/app/m/commerce/Cart/index.html +25 -25
  85. package/app/m/commerce/Contract/index.html +25 -25
  86. package/app/m/commerce/ContractLineItem/index.html +26 -26
  87. package/app/m/commerce/Customer/index.html +25 -25
  88. package/app/m/commerce/DocumentTax/index.html +25 -25
  89. package/app/m/commerce/Estimate/index.html +25 -25
  90. package/app/m/commerce/Fulfillment/index.html +25 -25
  91. package/app/m/commerce/FulfillmentLineItem/index.html +25 -25
  92. package/app/m/commerce/HistoricalCustomerFunds/index.html +89 -0
  93. package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +89 -0
  94. package/app/m/commerce/HistoricalSalesLine/index.html +89 -0
  95. package/app/m/commerce/Invoice/index.html +25 -25
  96. package/app/m/commerce/InvoiceLineItem/index.html +25 -25
  97. package/app/m/commerce/Lease/index.html +25 -25
  98. package/app/m/commerce/LicenseSale/index.html +25 -25
  99. package/app/m/commerce/Order/index.html +25 -25
  100. package/app/m/commerce/Payment/index.html +25 -25
  101. package/app/m/commerce/PaymentAllocation/index.html +25 -25
  102. package/app/m/commerce/PaymentInstrument/index.html +25 -25
  103. package/app/m/commerce/PaymentIntent/index.html +25 -25
  104. package/app/m/commerce/Payout/index.html +25 -25
  105. package/app/m/commerce/ProductionOrder/index.html +25 -25
  106. package/app/m/commerce/PurchaseContract/index.html +25 -25
  107. package/app/m/commerce/PurchaseOrder/index.html +25 -25
  108. package/app/m/commerce/SalesContract/index.html +25 -25
  109. package/app/m/commerce/SupplierQuote/index.html +25 -25
  110. package/app/m/commerce/TaxCode/index.html +25 -25
  111. package/app/m/commerce/TaxComponent/index.html +25 -25
  112. package/app/m/commerce/TaxSettings/index.html +25 -25
  113. package/app/m/commerce/TaxSummaryReport/index.html +25 -25
  114. package/app/m/commerce/Vendor/index.html +25 -25
  115. package/app/m/commerce/WholesaleOrder/index.html +25 -25
  116. package/app/m/content/Content/index.html +25 -25
  117. package/app/m/content/ContentContribution/index.html +25 -25
  118. package/app/m/content/ContentContributionAttachment/index.html +25 -25
  119. package/app/m/content/ContentContributionRevision/index.html +25 -25
  120. package/app/m/content/ContentContributionType/index.html +25 -25
  121. package/app/m/content/ContentContributor/index.html +25 -25
  122. package/app/m/content/ContentCorrection/index.html +25 -25
  123. package/app/m/content/ContentFeedSource/index.html +25 -25
  124. package/app/m/content/ContentGovernanceAssignment/index.html +25 -25
  125. package/app/m/content/ContentGovernancePolicy/index.html +25 -25
  126. package/app/m/content/ContentGovernanceProfile/index.html +25 -25
  127. package/app/m/content/ContentReference/index.html +25 -25
  128. package/app/m/content/ContentReview/index.html +25 -25
  129. package/app/m/content/ContentVersion/index.html +25 -25
  130. package/app/m/events/Event/index.html +25 -25
  131. package/app/m/events/EventParticipant/index.html +25 -25
  132. package/app/m/events/EventSeries/index.html +26 -26
  133. package/app/m/events/EventType/index.html +25 -25
  134. package/app/m/expenses/Expense/index.html +25 -25
  135. package/app/m/facts/Fact/index.html +25 -25
  136. package/app/m/facts/FactContent/index.html +25 -25
  137. package/app/m/facts/FactEvidence/index.html +25 -25
  138. package/app/m/facts/FactSource/index.html +25 -25
  139. package/app/m/facts/FactSubject/index.html +25 -25
  140. package/app/m/facts/FactTag/index.html +25 -25
  141. package/app/m/fields/FieldPolicy/index.html +25 -25
  142. package/app/m/fields/FieldPolicySuggestion/index.html +25 -25
  143. package/app/m/fields/FieldUsageCounter/index.html +25 -25
  144. package/app/m/images/Image/index.html +25 -25
  145. package/app/m/inventory/InventoryLocation/index.html +25 -25
  146. package/app/m/inventory/StockLevel/index.html +25 -25
  147. package/app/m/inventory/StockMovement/index.html +25 -25
  148. package/app/m/ledgers/Account/index.html +25 -25
  149. package/app/m/ledgers/Journal/index.html +25 -25
  150. package/app/m/ledgers/JournalEntry/index.html +25 -25
  151. package/app/m/ledgers/Ledger/index.html +89 -0
  152. package/app/m/manufacturing/Assembly/index.html +25 -25
  153. package/app/m/manufacturing/BillOfMaterials/index.html +25 -25
  154. package/app/m/manufacturing/BomLine/index.html +25 -25
  155. package/app/m/manufacturing/Operation/index.html +25 -25
  156. package/app/m/manufacturing/ProductionRun/index.html +25 -25
  157. package/app/m/manufacturing/ProductionRunCompletion/index.html +25 -25
  158. package/app/m/manufacturing/RoutingStep/index.html +25 -25
  159. package/app/m/marketing/Campaign/index.html +25 -25
  160. package/app/m/marketing/CampaignChannel/index.html +25 -25
  161. package/app/m/marketing/CampaignMetricSnapshot/index.html +25 -25
  162. package/app/m/messages/Account/index.html +25 -25
  163. package/app/m/messages/Attachment/index.html +25 -25
  164. package/app/m/messages/Blacklist/index.html +25 -25
  165. package/app/m/messages/Email/failed-sends/index.html +26 -26
  166. package/app/m/messages/Email/index.html +25 -25
  167. package/app/m/messages/Email/mailbox/index.html +26 -26
  168. package/app/m/messages/EmailAccount/index.html +25 -25
  169. package/app/m/messages/EmailAttachment/index.html +25 -25
  170. package/app/m/messages/EmailFolder/index.html +25 -25
  171. package/app/m/messages/Message/index.html +25 -25
  172. package/app/m/messages/MessagingEndpoint/index.html +25 -25
  173. package/app/m/messages/PersonaMessageRoute/index.html +25 -25
  174. package/app/m/messages/SlackAccount/index.html +25 -25
  175. package/app/m/messages/SlackMessage/index.html +25 -25
  176. package/app/m/messages/TelegramAccount/index.html +25 -25
  177. package/app/m/messages/Tweet/index.html +25 -25
  178. package/app/m/messages/TwitterAccount/index.html +25 -25
  179. package/app/m/messages/Whitelist/index.html +25 -25
  180. package/app/m/messages/ZulipAccount/index.html +25 -25
  181. package/app/m/places/Place/index.html +25 -25
  182. package/app/m/places/PlaceType/index.html +25 -25
  183. package/app/m/products/Category/index.html +25 -25
  184. package/app/m/products/Material/index.html +25 -25
  185. package/app/m/products/Product/index.html +25 -25
  186. package/app/m/products/Product/ingredients/index.html +26 -26
  187. package/app/m/products/ProductVariant/index.html +25 -25
  188. package/app/m/products/Sku/index.html +25 -25
  189. package/app/m/profiles/ApiKey/index.html +25 -25
  190. package/app/m/profiles/Bot/index.html +25 -25
  191. package/app/m/profiles/MagicLinkToken/index.html +25 -25
  192. package/app/m/profiles/NostrIdentity/index.html +25 -25
  193. package/app/m/profiles/OidcIdentity/index.html +25 -25
  194. package/app/m/profiles/Organization/index.html +25 -25
  195. package/app/m/profiles/Person/index.html +25 -25
  196. package/app/m/profiles/Profile/index.html +25 -25
  197. package/app/m/profiles/ProfileMetadata/index.html +25 -25
  198. package/app/m/profiles/ProfileMetafield/index.html +25 -25
  199. package/app/m/profiles/ProfileRelationship/index.html +25 -25
  200. package/app/m/profiles/ProfileRelationshipTerm/index.html +25 -25
  201. package/app/m/profiles/ProfileRelationshipType/index.html +25 -25
  202. package/app/m/profiles/ProfileType/index.html +25 -25
  203. package/app/m/projects/Comment/index.html +25 -25
  204. package/app/m/projects/Issue/index.html +25 -25
  205. package/app/m/projects/Label/index.html +25 -25
  206. package/app/m/projects/Project/index.html +25 -25
  207. package/app/m/projects/ProjectIntegration/index.html +25 -25
  208. package/app/m/projects/PullRequest/index.html +25 -25
  209. package/app/m/projects/Repository/index.html +25 -25
  210. package/app/m/properties/Property/index.html +25 -25
  211. package/app/m/properties/Zone/index.html +25 -25
  212. package/app/m/reports/RuntimeReport/index.html +25 -25
  213. package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +26 -26
  214. package/app/m/reports/SmrtReportLock/index.html +26 -26
  215. package/app/m/reports/SmrtReportRefreshTask/index.html +26 -26
  216. package/app/m/reports/SmrtReportRun/index.html +26 -26
  217. package/app/m/reports/SmrtReportSchedule/index.html +26 -26
  218. package/app/m/reports/SmrtReportWatermark/index.html +26 -26
  219. package/app/m/sales/Agreement/index.html +89 -0
  220. package/app/m/sales/AttributionException/index.html +25 -25
  221. package/app/m/sales/AttributionPolicy/index.html +25 -25
  222. package/app/m/sales/Commission/index.html +25 -25
  223. package/app/m/sales/CommissionAdjustment/index.html +25 -25
  224. package/app/m/sales/CommissionPayout/index.html +25 -25
  225. package/app/m/sales/CommissionPlan/index.html +25 -25
  226. package/app/m/sales/Earner/index.html +25 -25
  227. package/app/m/sales/EarnerSourceAttribution/index.html +25 -25
  228. package/app/m/sales/EarningEvent/index.html +25 -25
  229. package/app/m/sales/ExecutedAgreement/index.html +25 -25
  230. package/app/m/sales/Lead/index.html +25 -25
  231. package/app/m/sales/Opportunity/index.html +25 -25
  232. package/app/m/sales/OpportunityConversion/index.html +25 -25
  233. package/app/m/sales/PipelineDefinition/index.html +25 -25
  234. package/app/m/sales/PipelineStage/index.html +25 -25
  235. package/app/m/sales/Referral/index.html +25 -25
  236. package/app/m/sales/ReferralAgreement/index.html +25 -25
  237. package/app/m/sales/ReferralLink/index.html +25 -25
  238. package/app/m/sales/ReferralProgram/index.html +25 -25
  239. package/app/m/sales/ReferralTermSnapshot/index.html +25 -25
  240. package/app/m/sales/ReferralTouch/index.html +25 -25
  241. package/app/m/sales/Referrer/index.html +25 -25
  242. package/app/m/sales/SalesActivity/index.html +25 -25
  243. package/app/m/sales/SalesRepresentative/index.html +25 -25
  244. package/app/m/sites/Site/index.html +25 -25
  245. package/app/m/sites/SiteAgentBinding/index.html +25 -25
  246. package/app/m/social/OAuthState/index.html +25 -25
  247. package/app/m/social/SocialAccount/index.html +25 -25
  248. package/app/m/social/SocialPost/index.html +25 -25
  249. package/app/m/social/SocialPostAnalyticsSnapshot/index.html +25 -25
  250. package/app/m/subscriptions/BillingAdjustment/index.html +25 -25
  251. package/app/m/subscriptions/ClientCharge/index.html +25 -25
  252. package/app/m/subscriptions/CreditGrant/index.html +25 -25
  253. package/app/m/subscriptions/PricingRule/index.html +25 -25
  254. package/app/m/subscriptions/RetailCharge/index.html +25 -25
  255. package/app/m/subscriptions/SpendingPolicy/index.html +25 -25
  256. package/app/m/subscriptions/SubscriptionPlan/index.html +25 -25
  257. package/app/m/subscriptions/TenantSubscription/index.html +25 -25
  258. package/app/m/subscriptions/TenantUsageMetric/index.html +25 -25
  259. package/app/m/support/ServiceTimeEntry/index.html +25 -25
  260. package/app/m/support/SupportAiRun/index.html +25 -25
  261. package/app/m/support/SupportAvailability/index.html +25 -25
  262. package/app/m/support/SupportCase/index.html +25 -25
  263. package/app/m/support/SupportCaseEvent/index.html +25 -25
  264. package/app/m/support/SupportChannelBinding/index.html +25 -25
  265. package/app/m/support/SupportCharge/index.html +25 -25
  266. package/app/m/support/SupportCompensation/index.html +25 -25
  267. package/app/m/support/SupportCompensationPlan/index.html +25 -25
  268. package/app/m/support/SupportEscalation/index.html +25 -25
  269. package/app/m/support/SupportInteraction/index.html +25 -25
  270. package/app/m/support/SupportPlan/index.html +25 -25
  271. package/app/m/support/SupportPolicy/index.html +25 -25
  272. package/app/m/support/SupportQualification/index.html +25 -25
  273. package/app/m/support/SupportServiceTarget/index.html +25 -25
  274. package/app/m/support/SupportSpecialist/index.html +25 -25
  275. package/app/m/support/SupportWorkLink/index.html +25 -25
  276. package/app/m/tags/Tag/index.html +25 -25
  277. package/app/m/tags/TagAlias/index.html +25 -25
  278. package/app/m/timesheets/AttendanceBreak/index.html +25 -25
  279. package/app/m/timesheets/AttendancePunch/index.html +25 -25
  280. package/app/m/timesheets/AttendanceSegment/index.html +25 -25
  281. package/app/m/timesheets/ServiceChargeSnapshot/index.html +25 -25
  282. package/app/m/timesheets/ServiceCompensationSnapshot/index.html +25 -25
  283. package/app/m/timesheets/ServiceTimeEntry/index.html +25 -25
  284. package/app/m/users/Group/index.html +25 -25
  285. package/app/m/users/GroupMember/index.html +25 -25
  286. package/app/m/users/GroupRole/index.html +25 -25
  287. package/app/m/users/Membership/index.html +25 -25
  288. package/app/m/users/MembershipOverride/index.html +25 -25
  289. package/app/m/users/Permission/index.html +25 -25
  290. package/app/m/users/Role/index.html +25 -25
  291. package/app/m/users/RolePermission/index.html +25 -25
  292. package/app/m/users/Session/index.html +25 -25
  293. package/app/m/users/Tenant/index.html +25 -25
  294. package/app/m/users/TenantIntegration/index.html +25 -25
  295. package/app/m/users/TenantPermissionOverride/index.html +25 -25
  296. package/app/m/users/User/index.html +25 -25
  297. package/app/m/video/Character/index.html +25 -25
  298. package/app/m/video/CharacterAsset/index.html +25 -25
  299. package/app/m/video/CompositeJob/index.html +25 -25
  300. package/app/m/video/Performer/index.html +25 -25
  301. package/app/m/video/PerformerAsset/index.html +25 -25
  302. package/app/m/video/Scene/index.html +25 -25
  303. package/app/m/video/SceneAsset/index.html +25 -25
  304. package/app/m/video/VideoComposition/index.html +25 -25
  305. package/app/m/video/VideoCompositionAsset/index.html +25 -25
  306. package/app/m/video/VideoSequence/index.html +25 -25
  307. package/app/m/video/VideoSequenceAsset/index.html +25 -25
  308. package/app/m/video/VideoShot/index.html +25 -25
  309. package/app/m/video/VideoShotAsset/index.html +25 -25
  310. package/app/m/video/VideoShotCharacter/index.html +25 -25
  311. package/app/m/video/VideoWorkflow/index.html +25 -25
  312. package/app/m/voice/VoiceOutput/index.html +25 -25
  313. package/app/m/voice/VoiceProfile/index.html +25 -25
  314. package/app/m/voice/VoiceSample/index.html +25 -25
  315. package/app/mcp.html +2 -2
  316. package/app/packages/ads/index.html +24 -24
  317. package/app/packages/analytics/index.html +24 -24
  318. package/app/packages/approvals/index.html +24 -24
  319. package/app/packages/assets/index.html +24 -24
  320. package/app/packages/chat/index.html +24 -24
  321. package/app/packages/comments/index.html +24 -24
  322. package/app/packages/commerce/index.html +25 -25
  323. package/app/packages/content/index.html +24 -24
  324. package/app/packages/events/index.html +24 -24
  325. package/app/packages/expenses/index.html +25 -25
  326. package/app/packages/facts/index.html +24 -24
  327. package/app/packages/fields/index.html +24 -24
  328. package/app/packages/human-resources/index.html +24 -24
  329. package/app/packages/images/index.html +24 -24
  330. package/app/packages/index.html +24 -24
  331. package/app/packages/ingestion/index.html +24 -24
  332. package/app/packages/inventory/index.html +24 -24
  333. package/app/packages/ledgers/index.html +25 -25
  334. package/app/packages/manufacturing/index.html +24 -24
  335. package/app/packages/marketing/index.html +24 -24
  336. package/app/packages/messages/index.html +24 -24
  337. package/app/packages/places/index.html +24 -24
  338. package/app/packages/preferences/index.html +24 -24
  339. package/app/packages/products/index.html +24 -24
  340. package/app/packages/profiles/index.html +24 -24
  341. package/app/packages/projects/index.html +24 -24
  342. package/app/packages/properties/index.html +24 -24
  343. package/app/packages/reports/index.html +24 -24
  344. package/app/packages/sales/index.html +25 -25
  345. package/app/packages/sites/index.html +24 -24
  346. package/app/packages/social/index.html +24 -24
  347. package/app/packages/subscriptions/index.html +25 -25
  348. package/app/packages/support/index.html +24 -24
  349. package/app/packages/tags/index.html +24 -24
  350. package/app/packages/timesheets/index.html +24 -24
  351. package/app/packages/users/index.html +24 -24
  352. package/app/packages/video/index.html +24 -24
  353. package/app/packages/voice/index.html +24 -24
  354. package/app/packages/webhooks/index.html +24 -24
  355. package/app/recipes/account-access/help/index.html +24 -24
  356. package/app/recipes/account-access/index.html +26 -26
  357. package/app/recipes/activity/help/index.html +24 -24
  358. package/app/recipes/activity/index.html +26 -26
  359. package/app/recipes/agreements/help/index.html +26 -26
  360. package/app/recipes/agreements/index.html +27 -27
  361. package/app/recipes/analytics.reports/help/index.html +24 -24
  362. package/app/recipes/analytics.reports/index.html +26 -26
  363. package/app/recipes/assets/help/index.html +24 -24
  364. package/app/recipes/assets/index.html +27 -27
  365. package/app/recipes/billing/help/index.html +26 -26
  366. package/app/recipes/billing/index.html +26 -26
  367. package/app/recipes/chat.assistant/help/index.html +24 -24
  368. package/app/recipes/chat.assistant/index.html +26 -26
  369. package/app/recipes/comments/help/index.html +24 -24
  370. package/app/recipes/comments/index.html +26 -26
  371. package/app/recipes/commerce.customers/help/index.html +24 -24
  372. package/app/recipes/commerce.customers/index.html +26 -26
  373. package/app/recipes/commerce.estimates/help/index.html +26 -26
  374. package/app/recipes/commerce.estimates/index.html +26 -26
  375. package/app/recipes/commerce.purchases/help/index.html +26 -26
  376. package/app/recipes/commerce.purchases/index.html +26 -26
  377. package/app/recipes/commerce.sales/help/index.html +26 -26
  378. package/app/recipes/commerce.sales/index.html +26 -26
  379. package/app/recipes/commerce.vendors/help/index.html +24 -24
  380. package/app/recipes/commerce.vendors/index.html +26 -26
  381. package/app/recipes/commerce.wholesale/help/index.html +26 -26
  382. package/app/recipes/commerce.wholesale/index.html +26 -26
  383. package/app/recipes/events.calendar/help/index.html +24 -24
  384. package/app/recipes/events.calendar/index.html +26 -26
  385. package/app/recipes/expenses.tracking/help/index.html +26 -26
  386. package/app/recipes/expenses.tracking/index.html +26 -26
  387. package/app/recipes/fields.form-customization/help/index.html +24 -24
  388. package/app/recipes/fields.form-customization/index.html +26 -26
  389. package/app/recipes/ingestion/help/index.html +24 -24
  390. package/app/recipes/ingestion/index.html +26 -26
  391. package/app/recipes/integrations/help/index.html +24 -24
  392. package/app/recipes/integrations/index.html +26 -26
  393. package/app/recipes/inventory.stock/help/index.html +24 -24
  394. package/app/recipes/inventory.stock/index.html +26 -26
  395. package/app/recipes/ledgers.bookkeeping/help/index.html +26 -26
  396. package/app/recipes/ledgers.bookkeeping/index.html +26 -26
  397. package/app/recipes/messages/help/index.html +24 -24
  398. package/app/recipes/messages/index.html +26 -26
  399. package/app/recipes/products/help/index.html +24 -24
  400. package/app/recipes/products/index.html +26 -26
  401. package/app/recipes/projects.tracker/help/index.html +24 -24
  402. package/app/recipes/projects.tracker/index.html +27 -27
  403. package/app/recipes/reports.materialized/help/index.html +26 -26
  404. package/app/recipes/reports.materialized/index.html +29 -29
  405. package/app/recipes/reports.runtime/help/index.html +24 -24
  406. package/app/recipes/reports.runtime/index.html +27 -27
  407. package/app/recipes/sales.pipeline/help/index.html +24 -24
  408. package/app/recipes/sales.pipeline/index.html +26 -26
  409. package/app/recipes/tags.taxonomy/help/index.html +24 -24
  410. package/app/recipes/tags.taxonomy/index.html +26 -26
  411. package/app/recipes/team-collaboration/help/index.html +24 -24
  412. package/app/recipes/team-collaboration/index.html +26 -26
  413. package/app/recipes/timesheets.time-entries/help/index.html +24 -24
  414. package/app/recipes/timesheets.time-entries/index.html +26 -26
  415. package/app/s/custom-accounts/index.html +22 -22
  416. package/app/s/custom-appointments/index.html +22 -22
  417. package/app/s/custom-billing/index.html +22 -22
  418. package/app/s/custom-buying/index.html +22 -22
  419. package/app/s/custom-checkout/index.html +22 -22
  420. package/app/s/custom-classes/index.html +22 -22
  421. package/app/s/custom-clients/index.html +22 -22
  422. package/app/s/custom-events/index.html +22 -22
  423. package/app/s/custom-fleet/index.html +22 -22
  424. package/app/s/custom-giving/index.html +22 -22
  425. package/app/s/custom-jobs/index.html +22 -22
  426. package/app/s/custom-kitchen/index.html +22 -22
  427. package/app/s/custom-material/index.html +22 -22
  428. package/app/s/custom-meetings/index.html +22 -22
  429. package/app/s/custom-members/index.html +22 -22
  430. package/app/s/custom-paint/index.html +82 -0
  431. package/app/s/custom-parts/index.html +22 -22
  432. package/app/s/custom-rentals/index.html +22 -22
  433. package/app/s/custom-roastery/index.html +22 -22
  434. package/app/s/custom-schedule/index.html +22 -22
  435. package/app/s/custom-shelf/index.html +22 -22
  436. package/app/s/custom-shop/index.html +22 -22
  437. package/app/s/custom-wholesale/index.html +22 -22
  438. package/app/s/custom-work/index.html +22 -22
  439. package/app/s/custom-yard/index.html +22 -22
  440. package/app/s/section-access-control/index.html +22 -22
  441. package/app/s/section-account-security/index.html +22 -22
  442. package/app/s/section-accounting/index.html +22 -22
  443. package/app/s/section-activity/index.html +22 -22
  444. package/app/s/section-agreements/index.html +22 -22
  445. package/app/s/section-analytics/index.html +22 -22
  446. package/app/s/section-assets/index.html +22 -22
  447. package/app/s/section-billing/index.html +22 -22
  448. package/app/s/section-calendar/index.html +22 -22
  449. package/app/s/section-catalog/index.html +22 -22
  450. package/app/s/section-chat.assistant/index.html +22 -22
  451. package/app/s/section-comments/index.html +22 -22
  452. package/app/s/section-fields.form-customization/index.html +22 -22
  453. package/app/s/section-ingestion/index.html +22 -22
  454. package/app/s/section-integrations/index.html +22 -22
  455. package/app/s/section-messages/index.html +22 -22
  456. package/app/s/section-more/index.html +22 -22
  457. package/app/s/section-operations/index.html +22 -22
  458. package/app/s/section-projects/index.html +22 -22
  459. package/app/s/section-purchasing/index.html +22 -22
  460. package/app/s/section-reports.materialized/index.html +22 -22
  461. package/app/s/section-reports.runtime/index.html +22 -22
  462. package/app/s/section-sales/index.html +22 -22
  463. package/app/s/section-taxonomy/index.html +22 -22
  464. package/app/s/section-team/index.html +22 -22
  465. package/app/s/section-work/index.html +22 -22
  466. package/dist/ai/echo-gate.d.ts +1 -0
  467. package/dist/ai/echo-gate.d.ts.map +1 -0
  468. package/dist/ai/icons.d.ts +1 -0
  469. package/dist/ai/icons.d.ts.map +1 -0
  470. package/dist/ai/instance.d.ts +1 -0
  471. package/dist/ai/instance.d.ts.map +1 -0
  472. package/dist/ai/instance.js +9 -1
  473. package/dist/ai/state.svelte.d.ts +1 -0
  474. package/dist/ai/state.svelte.d.ts.map +1 -0
  475. package/dist/ai/status.d.ts +1 -0
  476. package/dist/ai/status.d.ts.map +1 -0
  477. package/dist/assistant/change.d.ts +14 -3
  478. package/dist/assistant/change.d.ts.map +1 -0
  479. package/dist/assistant/change.js +18 -3
  480. package/dist/assistant/engine.d.ts +1 -0
  481. package/dist/assistant/engine.d.ts.map +1 -0
  482. package/dist/assistant/llm.worker.d.ts +1 -0
  483. package/dist/assistant/llm.worker.d.ts.map +1 -0
  484. package/dist/assistant/match.d.ts +1 -0
  485. package/dist/assistant/match.d.ts.map +1 -0
  486. package/dist/assistant/models.d.ts +1 -0
  487. package/dist/assistant/models.d.ts.map +1 -0
  488. package/dist/assistant/offers.svelte.d.ts +1 -0
  489. package/dist/assistant/offers.svelte.d.ts.map +1 -0
  490. package/dist/assistant/prefs.d.ts +1 -0
  491. package/dist/assistant/prefs.d.ts.map +1 -0
  492. package/dist/assistant/prompt.d.ts +7 -1
  493. package/dist/assistant/prompt.d.ts.map +1 -0
  494. package/dist/assistant/prompt.js +13 -1
  495. package/dist/assistant/session.svelte.d.ts +6 -0
  496. package/dist/assistant/session.svelte.d.ts.map +1 -0
  497. package/dist/assistant/session.svelte.js +1 -0
  498. package/dist/assistant/theme-undo.svelte.d.ts +1 -0
  499. package/dist/assistant/theme-undo.svelte.d.ts.map +1 -0
  500. package/dist/assistant/transport.d.ts +25 -1
  501. package/dist/assistant/transport.d.ts.map +1 -0
  502. package/dist/assistant/transport.js +57 -8
  503. package/dist/assistant/voice-host.d.ts +1 -0
  504. package/dist/assistant/voice-host.d.ts.map +1 -0
  505. package/dist/assistant/voice.svelte.d.ts +1 -0
  506. package/dist/assistant/voice.svelte.d.ts.map +1 -0
  507. package/dist/catalog/catalog.json +2774 -62
  508. package/dist/catalog/generate/build.d.ts +1 -0
  509. package/dist/catalog/generate/build.d.ts.map +1 -0
  510. package/dist/catalog/generate/exclusions.d.ts +1 -0
  511. package/dist/catalog/generate/exclusions.d.ts.map +1 -0
  512. package/dist/catalog/generate/extract.d.ts +1 -0
  513. package/dist/catalog/generate/extract.d.ts.map +1 -0
  514. package/dist/catalog/generate/local.d.ts +1 -0
  515. package/dist/catalog/generate/local.d.ts.map +1 -0
  516. package/dist/catalog/generate/recipe-demo.d.ts +1 -0
  517. package/dist/catalog/generate/recipe-demo.d.ts.map +1 -0
  518. package/dist/catalog/generate/recipe-metadata.d.ts +1 -0
  519. package/dist/catalog/generate/recipe-metadata.d.ts.map +1 -0
  520. package/dist/catalog/generate/registry.d.ts +1 -0
  521. package/dist/catalog/generate/registry.d.ts.map +1 -0
  522. package/dist/catalog/index.d.ts +1 -0
  523. package/dist/catalog/index.d.ts.map +1 -0
  524. package/dist/catalog/types.d.ts +1 -0
  525. package/dist/catalog/types.d.ts.map +1 -0
  526. package/dist/components/AdvancedStyles.svelte.d.ts +1 -0
  527. package/dist/components/AdvancedStyles.svelte.d.ts.map +1 -0
  528. package/dist/components/AiModelsPage.svelte.d.ts +1 -0
  529. package/dist/components/AiModelsPage.svelte.d.ts.map +1 -0
  530. package/dist/components/AiSetup.svelte.d.ts +1 -0
  531. package/dist/components/AiSetup.svelte.d.ts.map +1 -0
  532. package/dist/components/AiStatusIcons.svelte.d.ts +1 -0
  533. package/dist/components/AiStatusIcons.svelte.d.ts.map +1 -0
  534. package/dist/components/AppSettings.svelte.d.ts +1 -0
  535. package/dist/components/AppSettings.svelte.d.ts.map +1 -0
  536. package/dist/components/BrowserAssistant.svelte +0 -2
  537. package/dist/components/BrowserAssistant.svelte.d.ts +1 -0
  538. package/dist/components/BrowserAssistant.svelte.d.ts.map +1 -0
  539. package/dist/components/ChildRecords.svelte.d.ts +1 -0
  540. package/dist/components/ChildRecords.svelte.d.ts.map +1 -0
  541. package/dist/components/ConnectTools.svelte.d.ts +1 -0
  542. package/dist/components/ConnectTools.svelte.d.ts.map +1 -0
  543. package/dist/components/CookbooksPanel.svelte +101 -21
  544. package/dist/components/CookbooksPanel.svelte.d.ts +1 -0
  545. package/dist/components/CookbooksPanel.svelte.d.ts.map +1 -0
  546. package/dist/components/CopyButton.svelte.d.ts +1 -0
  547. package/dist/components/CopyButton.svelte.d.ts.map +1 -0
  548. package/dist/components/ExportPanel.svelte.d.ts +1 -0
  549. package/dist/components/ExportPanel.svelte.d.ts.map +1 -0
  550. package/dist/components/FeatureCard.svelte.d.ts +1 -0
  551. package/dist/components/FeatureCard.svelte.d.ts.map +1 -0
  552. package/dist/components/FeaturesPanel.svelte.d.ts +1 -0
  553. package/dist/components/FeaturesPanel.svelte.d.ts.map +1 -0
  554. package/dist/components/FieldInput.svelte.d.ts +1 -0
  555. package/dist/components/FieldInput.svelte.d.ts.map +1 -0
  556. package/dist/components/FieldMapForm.svelte.d.ts +1 -0
  557. package/dist/components/FieldMapForm.svelte.d.ts.map +1 -0
  558. package/dist/components/FormWorkspace.svelte.d.ts +1 -0
  559. package/dist/components/FormWorkspace.svelte.d.ts.map +1 -0
  560. package/dist/components/HeaderIconLink.svelte.d.ts +1 -0
  561. package/dist/components/HeaderIconLink.svelte.d.ts.map +1 -0
  562. package/dist/components/HelpView.svelte.d.ts +1 -0
  563. package/dist/components/HelpView.svelte.d.ts.map +1 -0
  564. package/dist/components/ModelOptions.svelte.d.ts +1 -0
  565. package/dist/components/ModelOptions.svelte.d.ts.map +1 -0
  566. package/dist/components/ModelPage.svelte.d.ts +1 -0
  567. package/dist/components/ModelPage.svelte.d.ts.map +1 -0
  568. package/dist/components/ModelWorkspace.svelte.d.ts +1 -0
  569. package/dist/components/ModelWorkspace.svelte.d.ts.map +1 -0
  570. package/dist/components/PackagePage.svelte.d.ts +1 -0
  571. package/dist/components/PackagePage.svelte.d.ts.map +1 -0
  572. package/dist/components/PlannerEditBridge.svelte.d.ts +1 -0
  573. package/dist/components/PlannerEditBridge.svelte.d.ts.map +1 -0
  574. package/dist/components/PlannerPalette.svelte.d.ts +1 -0
  575. package/dist/components/PlannerPalette.svelte.d.ts.map +1 -0
  576. package/dist/components/ProductMedia.svelte.d.ts +1 -0
  577. package/dist/components/ProductMedia.svelte.d.ts.map +1 -0
  578. package/dist/components/RecipeCards.svelte.d.ts +1 -0
  579. package/dist/components/RecipeCards.svelte.d.ts.map +1 -0
  580. package/dist/components/RecipeHelp.svelte.d.ts +1 -0
  581. package/dist/components/RecipeHelp.svelte.d.ts.map +1 -0
  582. package/dist/components/RecipeOptions.svelte.d.ts +1 -0
  583. package/dist/components/RecipeOptions.svelte.d.ts.map +1 -0
  584. package/dist/components/RecordFeatures.svelte.d.ts +1 -0
  585. package/dist/components/RecordFeatures.svelte.d.ts.map +1 -0
  586. package/dist/components/RecordView.svelte.d.ts +1 -0
  587. package/dist/components/RecordView.svelte.d.ts.map +1 -0
  588. package/dist/components/RelationField.svelte.d.ts +1 -0
  589. package/dist/components/RelationField.svelte.d.ts.map +1 -0
  590. package/dist/components/SectionActions.svelte.d.ts +1 -0
  591. package/dist/components/SectionActions.svelte.d.ts.map +1 -0
  592. package/dist/components/SectionHeading.svelte.d.ts +1 -0
  593. package/dist/components/SectionHeading.svelte.d.ts.map +1 -0
  594. package/dist/components/SectionIcons.svelte.d.ts +1 -0
  595. package/dist/components/SectionIcons.svelte.d.ts.map +1 -0
  596. package/dist/components/SectionOverview.svelte.d.ts +1 -0
  597. package/dist/components/SectionOverview.svelte.d.ts.map +1 -0
  598. package/dist/components/SectionPage.svelte.d.ts +1 -0
  599. package/dist/components/SectionPage.svelte.d.ts.map +1 -0
  600. package/dist/components/SectionView.svelte.d.ts +1 -0
  601. package/dist/components/SectionView.svelte.d.ts.map +1 -0
  602. package/dist/components/SettingsPanel.svelte.d.ts +1 -0
  603. package/dist/components/SettingsPanel.svelte.d.ts.map +1 -0
  604. package/dist/components/ThemeBridge.svelte.d.ts +1 -0
  605. package/dist/components/ThemeBridge.svelte.d.ts.map +1 -0
  606. package/dist/components/ThemeSection.svelte.d.ts +1 -0
  607. package/dist/components/ThemeSection.svelte.d.ts.map +1 -0
  608. package/dist/components/VariantGridForm.svelte.d.ts +1 -0
  609. package/dist/components/VariantGridForm.svelte.d.ts.map +1 -0
  610. package/dist/components/VoiceTyping.svelte.d.ts +1 -0
  611. package/dist/components/VoiceTyping.svelte.d.ts.map +1 -0
  612. package/dist/cookbook/assemble.d.ts +1 -0
  613. package/dist/cookbook/assemble.d.ts.map +1 -0
  614. package/dist/cookbook/describe.d.ts +1 -0
  615. package/dist/cookbook/describe.d.ts.map +1 -0
  616. package/dist/cookbook/file.d.ts +1 -0
  617. package/dist/cookbook/file.d.ts.map +1 -0
  618. package/dist/cookbook/legacy.d.ts +1 -0
  619. package/dist/cookbook/legacy.d.ts.map +1 -0
  620. package/dist/cookbook/migrate.d.ts +1 -0
  621. package/dist/cookbook/migrate.d.ts.map +1 -0
  622. package/dist/cookbook/parse.d.ts +1 -0
  623. package/dist/cookbook/parse.d.ts.map +1 -0
  624. package/dist/cookbook/prompt.d.ts +1 -0
  625. package/dist/cookbook/prompt.d.ts.map +1 -0
  626. package/dist/cookbook/storage.d.ts +1 -0
  627. package/dist/cookbook/storage.d.ts.map +1 -0
  628. package/dist/cookbook/store.svelte.d.ts +1 -0
  629. package/dist/cookbook/store.svelte.d.ts.map +1 -0
  630. package/dist/cookbook/types.d.ts +1 -0
  631. package/dist/cookbook/types.d.ts.map +1 -0
  632. package/dist/cookbook/validate.d.ts +1 -0
  633. package/dist/cookbook/validate.d.ts.map +1 -0
  634. package/dist/core/app.d.ts +1 -0
  635. package/dist/core/app.d.ts.map +1 -0
  636. package/dist/core/catalog.d.ts +1 -0
  637. package/dist/core/catalog.d.ts.map +1 -0
  638. package/dist/core/headless.d.ts +1 -0
  639. package/dist/core/headless.d.ts.map +1 -0
  640. package/dist/core/index.d.ts +1 -0
  641. package/dist/core/index.d.ts.map +1 -0
  642. package/dist/core/prompt.d.ts +1 -0
  643. package/dist/core/prompt.d.ts.map +1 -0
  644. package/dist/core/reply.d.ts +1 -0
  645. package/dist/core/reply.d.ts.map +1 -0
  646. package/dist/core/request.d.ts +1 -0
  647. package/dist/core/request.d.ts.map +1 -0
  648. package/dist/data/children.d.ts +1 -0
  649. package/dist/data/children.d.ts.map +1 -0
  650. package/dist/data/columns.d.ts +1 -0
  651. package/dist/data/columns.d.ts.map +1 -0
  652. package/dist/data/context.d.ts +1 -0
  653. package/dist/data/context.d.ts.map +1 -0
  654. package/dist/data/derived.d.ts +1 -0
  655. package/dist/data/derived.d.ts.map +1 -0
  656. package/dist/data/display.d.ts +1 -0
  657. package/dist/data/display.d.ts.map +1 -0
  658. package/dist/data/fakes.d.ts +1 -0
  659. package/dist/data/fakes.d.ts.map +1 -0
  660. package/dist/data/format.d.ts +1 -0
  661. package/dist/data/format.d.ts.map +1 -0
  662. package/dist/data/format.js +3 -0
  663. package/dist/data/labels.d.ts +1 -0
  664. package/dist/data/labels.d.ts.map +1 -0
  665. package/dist/data/list-sort.d.ts +1 -0
  666. package/dist/data/list-sort.d.ts.map +1 -0
  667. package/dist/data/money.d.ts +2 -1
  668. package/dist/data/money.d.ts.map +1 -0
  669. package/dist/data/money.js +2 -2
  670. package/dist/data/packs.d.ts +1 -1
  671. package/dist/data/packs.d.ts.map +1 -0
  672. package/dist/data/packs.js +835 -1
  673. package/dist/data/payments.d.ts +1 -0
  674. package/dist/data/payments.d.ts.map +1 -0
  675. package/dist/data/planner-source.d.ts +1 -0
  676. package/dist/data/planner-source.d.ts.map +1 -0
  677. package/dist/data/source.d.ts +1 -0
  678. package/dist/data/source.d.ts.map +1 -0
  679. package/dist/features/catalogue.d.ts +1 -0
  680. package/dist/features/catalogue.d.ts.map +1 -0
  681. package/dist/features/demo.d.ts +1 -0
  682. package/dist/features/demo.d.ts.map +1 -0
  683. package/dist/features/palette.d.ts +1 -0
  684. package/dist/features/palette.d.ts.map +1 -0
  685. package/dist/fields/address.d.ts +1 -0
  686. package/dist/fields/address.d.ts.map +1 -0
  687. package/dist/fields/invalid.d.ts +1 -0
  688. package/dist/fields/invalid.d.ts.map +1 -0
  689. package/dist/fields/modal.d.ts +1 -0
  690. package/dist/fields/modal.d.ts.map +1 -0
  691. package/dist/fields/percent.d.ts +1 -0
  692. package/dist/fields/percent.d.ts.map +1 -0
  693. package/dist/fields/renderer.d.ts +1 -0
  694. package/dist/fields/renderer.d.ts.map +1 -0
  695. package/dist/forms/active.d.ts +1 -0
  696. package/dist/forms/active.d.ts.map +1 -0
  697. package/dist/forms/fieldMap.d.ts +1 -0
  698. package/dist/forms/fieldMap.d.ts.map +1 -0
  699. package/dist/forms/shared.d.ts +1 -0
  700. package/dist/forms/shared.d.ts.map +1 -0
  701. package/dist/forms/stock.d.ts +1 -0
  702. package/dist/forms/stock.d.ts.map +1 -0
  703. package/dist/forms/variantGrid.d.ts +1 -0
  704. package/dist/forms/variantGrid.d.ts.map +1 -0
  705. package/dist/index.d.ts +1 -0
  706. package/dist/index.d.ts.map +1 -0
  707. package/dist/inference/byo.svelte.d.ts +1 -0
  708. package/dist/inference/byo.svelte.d.ts.map +1 -0
  709. package/dist/inference/config.d.ts +1 -0
  710. package/dist/inference/config.d.ts.map +1 -0
  711. package/dist/inference/host.d.ts +1 -0
  712. package/dist/inference/host.d.ts.map +1 -0
  713. package/dist/inference/openai.d.ts +1 -0
  714. package/dist/inference/openai.d.ts.map +1 -0
  715. package/dist/inference/presets.d.ts +1 -0
  716. package/dist/inference/presets.d.ts.map +1 -0
  717. package/dist/kitchen/LiveKitchenBridge.svelte.d.ts +1 -0
  718. package/dist/kitchen/LiveKitchenBridge.svelte.d.ts.map +1 -0
  719. package/dist/kitchen/client.d.ts +1 -0
  720. package/dist/kitchen/client.d.ts.map +1 -0
  721. package/dist/kitchen/fragment.d.ts +1 -0
  722. package/dist/kitchen/fragment.d.ts.map +1 -0
  723. package/dist/kitchen/live.d.ts +1 -0
  724. package/dist/kitchen/live.d.ts.map +1 -0
  725. package/dist/kitchen/state.svelte.d.ts +1 -0
  726. package/dist/kitchen/state.svelte.d.ts.map +1 -0
  727. package/dist/library/apply.d.ts +8 -3
  728. package/dist/library/apply.d.ts.map +1 -0
  729. package/dist/library/apply.js +19 -6
  730. package/dist/library/document.d.ts +10 -0
  731. package/dist/library/document.d.ts.map +1 -0
  732. package/dist/library/document.js +29 -0
  733. package/dist/library/icons.d.ts +1 -0
  734. package/dist/library/icons.d.ts.map +1 -0
  735. package/dist/library/icons.js +15 -0
  736. package/dist/library/index.d.ts +5 -1
  737. package/dist/library/index.d.ts.map +1 -0
  738. package/dist/library/index.js +9 -2
  739. package/dist/library/library.json +919 -14
  740. package/dist/library/menu.d.ts +1 -0
  741. package/dist/library/menu.d.ts.map +1 -0
  742. package/dist/library/state.svelte.d.ts +6 -1
  743. package/dist/library/state.svelte.d.ts.map +1 -0
  744. package/dist/library/state.svelte.js +12 -1
  745. package/dist/library/types.d.ts +1 -0
  746. package/dist/library/types.d.ts.map +1 -0
  747. package/dist/library/view.svelte.d.ts +41 -0
  748. package/dist/library/view.svelte.d.ts.map +1 -0
  749. package/dist/library/view.svelte.js +67 -0
  750. package/dist/motion/tokens.d.ts +1 -0
  751. package/dist/motion/tokens.d.ts.map +1 -0
  752. package/dist/motion/view-transition.d.ts +1 -0
  753. package/dist/motion/view-transition.d.ts.map +1 -0
  754. package/dist/overviews/definitions.d.ts +1 -0
  755. package/dist/overviews/definitions.d.ts.map +1 -0
  756. package/dist/overviews/models.d.ts +1 -0
  757. package/dist/overviews/models.d.ts.map +1 -0
  758. package/dist/overviews/page.d.ts +1 -0
  759. package/dist/overviews/page.d.ts.map +1 -0
  760. package/dist/overviews/registry.d.ts +1 -0
  761. package/dist/overviews/registry.d.ts.map +1 -0
  762. package/dist/overviews/validate.d.ts +1 -0
  763. package/dist/overviews/validate.d.ts.map +1 -0
  764. package/dist/planner/Planner.svelte +79 -2
  765. package/dist/planner/Planner.svelte.d.ts +1 -0
  766. package/dist/planner/Planner.svelte.d.ts.map +1 -0
  767. package/dist/planner/PlannerControls.svelte +21 -2
  768. package/dist/planner/PlannerControls.svelte.d.ts +1 -0
  769. package/dist/planner/PlannerControls.svelte.d.ts.map +1 -0
  770. package/dist/planner/PlannerLifecycle.svelte.d.ts +1 -0
  771. package/dist/planner/PlannerLifecycle.svelte.d.ts.map +1 -0
  772. package/dist/planner/app.svelte.d.ts +1 -0
  773. package/dist/planner/app.svelte.d.ts.map +1 -0
  774. package/dist/planner/assistant.d.ts +1 -0
  775. package/dist/planner/assistant.d.ts.map +1 -0
  776. package/dist/planner/assistant.js +9 -0
  777. package/dist/planner/commands/adapter.d.ts +1 -0
  778. package/dist/planner/commands/adapter.d.ts.map +1 -0
  779. package/dist/planner/commands/adapter.js +10 -3
  780. package/dist/planner/commands/catalog.d.ts +1 -0
  781. package/dist/planner/commands/catalog.d.ts.map +1 -0
  782. package/dist/planner/commands/controller.svelte.d.ts +1 -0
  783. package/dist/planner/commands/controller.svelte.d.ts.map +1 -0
  784. package/dist/planner/commands/controller.svelte.js +2 -1
  785. package/dist/planner/commands/index.d.ts +1 -0
  786. package/dist/planner/commands/index.d.ts.map +1 -0
  787. package/dist/planner/commands/schemas.d.ts +1 -0
  788. package/dist/planner/commands/schemas.d.ts.map +1 -0
  789. package/dist/planner/commands/slices.d.ts +1 -0
  790. package/dist/planner/commands/slices.d.ts.map +1 -0
  791. package/dist/planner/commands/types.d.ts +1 -0
  792. package/dist/planner/commands/types.d.ts.map +1 -0
  793. package/dist/planner/create.d.ts +1 -0
  794. package/dist/planner/create.d.ts.map +1 -0
  795. package/dist/planner/header-icons.d.ts +1 -0
  796. package/dist/planner/header-icons.d.ts.map +1 -0
  797. package/dist/planner/host/HostPlanner.svelte.d.ts +1 -0
  798. package/dist/planner/host/HostPlanner.svelte.d.ts.map +1 -0
  799. package/dist/planner/host/session.svelte.d.ts +1 -0
  800. package/dist/planner/host/session.svelte.d.ts.map +1 -0
  801. package/dist/planner/instance.d.ts +1 -0
  802. package/dist/planner/instance.d.ts.map +1 -0
  803. package/dist/planner/query.d.ts +1 -0
  804. package/dist/planner/query.d.ts.map +1 -0
  805. package/dist/planner/routes.d.ts +1 -0
  806. package/dist/planner/routes.d.ts.map +1 -0
  807. package/dist/planner/selection.d.ts +1 -0
  808. package/dist/planner/selection.d.ts.map +1 -0
  809. package/dist/planner/selection.svelte.d.ts +1 -0
  810. package/dist/planner/selection.svelte.d.ts.map +1 -0
  811. package/dist/planner/shell.d.ts +1 -0
  812. package/dist/planner/shell.d.ts.map +1 -0
  813. package/dist/planner/tab.svelte.d.ts +1 -0
  814. package/dist/planner/tab.svelte.d.ts.map +1 -0
  815. package/dist/planner/title.d.ts +1 -0
  816. package/dist/planner/title.d.ts.map +1 -0
  817. package/dist/planner/title.svelte.d.ts +1 -0
  818. package/dist/planner/title.svelte.d.ts.map +1 -0
  819. package/dist/planner/types.d.ts +1 -0
  820. package/dist/planner/types.d.ts.map +1 -0
  821. package/dist/products/media.d.ts +1 -0
  822. package/dist/products/media.d.ts.map +1 -0
  823. package/dist/recipes/cards.d.ts +1 -0
  824. package/dist/recipes/cards.d.ts.map +1 -0
  825. package/dist/recipes/features.d.ts +1 -0
  826. package/dist/recipes/features.d.ts.map +1 -0
  827. package/dist/recipes/help.d.ts +1 -0
  828. package/dist/recipes/help.d.ts.map +1 -0
  829. package/dist/recipes/index.d.ts +1 -0
  830. package/dist/recipes/index.d.ts.map +1 -0
  831. package/dist/recipes/merge.d.ts +1 -0
  832. package/dist/recipes/merge.d.ts.map +1 -0
  833. package/dist/recipes/plan-data.d.ts +1 -0
  834. package/dist/recipes/plan-data.d.ts.map +1 -0
  835. package/dist/recipes/plumbing.d.ts +1 -0
  836. package/dist/recipes/plumbing.d.ts.map +1 -0
  837. package/dist/recipes/policy.d.ts +1 -0
  838. package/dist/recipes/policy.d.ts.map +1 -0
  839. package/dist/recipes/resolve.d.ts +1 -0
  840. package/dist/recipes/resolve.d.ts.map +1 -0
  841. package/dist/recipes/scope.d.ts +24 -0
  842. package/dist/recipes/scope.d.ts.map +1 -0
  843. package/dist/recipes/scope.js +20 -0
  844. package/dist/recipes/sections.d.ts +1 -0
  845. package/dist/recipes/sections.d.ts.map +1 -0
  846. package/dist/recipes/state.svelte.d.ts +1 -0
  847. package/dist/recipes/state.svelte.d.ts.map +1 -0
  848. package/dist/recipes/types.d.ts +1 -0
  849. package/dist/recipes/types.d.ts.map +1 -0
  850. package/dist/screens/definition.d.ts +1 -0
  851. package/dist/screens/definition.d.ts.map +1 -0
  852. package/dist/screens/relations.d.ts +1 -0
  853. package/dist/screens/relations.d.ts.map +1 -0
  854. package/dist/screens/totals.d.ts +1 -0
  855. package/dist/screens/totals.d.ts.map +1 -0
  856. package/dist/sections/entries.d.ts +1 -0
  857. package/dist/sections/entries.d.ts.map +1 -0
  858. package/dist/sections/info.d.ts +1 -0
  859. package/dist/sections/info.d.ts.map +1 -0
  860. package/dist/sections/path.d.ts +1 -0
  861. package/dist/sections/path.d.ts.map +1 -0
  862. package/dist/settings/app-settings.d.ts +1 -0
  863. package/dist/settings/app-settings.d.ts.map +1 -0
  864. package/dist/settings/currencies.d.ts +1 -0
  865. package/dist/settings/currencies.d.ts.map +1 -0
  866. package/dist/smrt-version.d.ts +2 -1
  867. package/dist/smrt-version.d.ts.map +1 -0
  868. package/dist/smrt-version.js +1 -1
  869. package/dist/theme/css-highlight.d.ts +1 -0
  870. package/dist/theme/css-highlight.d.ts.map +1 -0
  871. package/dist/theme/custom-css.svelte.d.ts +1 -0
  872. package/dist/theme/custom-css.svelte.d.ts.map +1 -0
  873. package/dist/theme/runtime.d.ts +1 -0
  874. package/dist/theme/runtime.d.ts.map +1 -0
  875. package/dist/theme/theme.d.ts +1 -0
  876. package/dist/theme/theme.d.ts.map +1 -0
  877. package/dist/upstream/CustomerSelect.svelte.d.ts +1 -0
  878. package/dist/upstream/CustomerSelect.svelte.d.ts.map +1 -0
  879. package/dist/upstream/VendorSelect.svelte.d.ts +1 -0
  880. package/dist/upstream/VendorSelect.svelte.d.ts.map +1 -0
  881. package/dist/upstream/overlay.d.ts +1 -0
  882. package/dist/upstream/overlay.d.ts.map +1 -0
  883. package/dist/upstream/partySelect.d.ts +1 -0
  884. package/dist/upstream/partySelect.d.ts.map +1 -0
  885. package/dist/upstream/partyTypes.d.ts +1 -0
  886. package/dist/upstream/partyTypes.d.ts.map +1 -0
  887. package/dist/upstream/relations.d.ts +1 -0
  888. package/dist/upstream/relations.d.ts.map +1 -0
  889. package/dist/upstream/selects.d.ts +1 -0
  890. package/dist/upstream/selects.d.ts.map +1 -0
  891. package/dist/upstream/widgets.d.ts +1 -0
  892. package/dist/upstream/widgets.d.ts.map +1 -0
  893. package/package.json +56 -56
  894. package/app/_app/immutable/assets/2.Djk1H2wk.css +0 -1
  895. package/app/_app/immutable/chunks/BUWiA0bl.js +0 -1
  896. package/app/_app/immutable/chunks/BY2iyZkA.js +0 -1
  897. package/app/_app/immutable/chunks/Bm8jjb_e.js +0 -1
  898. package/app/_app/immutable/chunks/D8CMB1bs.js +0 -24
  899. package/app/_app/immutable/chunks/DPUmJ6vl.js +0 -1
  900. package/app/_app/immutable/chunks/Dnh261tH.js +0 -1
  901. package/app/_app/immutable/chunks/IGiURgRE.js +0 -4
  902. package/app/_app/immutable/chunks/_V0EAIDV.js +0 -1
  903. package/app/_app/immutable/entry/start.BUD35Ixb.js +0 -1
  904. package/app/_app/immutable/nodes/0.Clo7wl71.js +0 -9
  905. package/app/_app/immutable/nodes/2.IEuzYtzP.js +0 -24
  906. /package/app/_app/immutable/chunks/{DVQPWAnI.js → Bv5jGtB8.js} +0 -0
@@ -1 +1 @@
1
- import{$ as e,B as t,Ct as n,Dt as r,Ft as i,G as a,H as o,L as s,O as c,Ot as l,P as u,Pt as d,U as f,W as p,X as m,Y as h,Z as g,_,a as v,b as y,bt as b,ct as x,ft as S,gt as C,ht as w,mt as T,pt as E,st as D,tt as O,v as k,vt as A,wt as j,xt as M,z as N}from"./DG3qFFTE.js";import"./xihTtKlq.js";import{O as P,c as F,ft as I,gt as L,h as R,l as z,m as B,p as ee}from"./CqPgazbY.js";import{_ as V,i as H,o as U,y as W}from"./gMSmS-_y.js";import{a as te,c as ne,i as re,l as ie,o as ae,p as G,s as oe}from"./IGiURgRE.js";import{b as K,t as q}from"./C0ucZoOF.js";import{r as J}from"./D_U_DYjx.js";import{a as Y,c as se,d as ce,f as le,i as ue,n as de,o as fe,p as pe,r as X,s as me,u as he}from"./DQ1SHYJc.js";import{a as ge,c as _e,i as ve,l as ye,n as be,o as xe,r as Se,s as Ce,t as we,u as Te}from"./BUIY_h3z.js";function Ee(e){return e.form.kind===`field-map`}function De(e){return e.form.kind===`variant-grid`}function Oe(e,t,n){let r=t.filter(t=>e.includes(t.id));return r.flatMap(e=>(e.forms??[]).filter(e=>e.model===n).map(t=>({recipeId:e.id,form:t,extensions:r.flatMap(e=>(e.extends??[]).filter(e=>e.form===t.id))})))}function ke(e,t){return e.extensions.some(e=>(e.records??[]).some(e=>e.model===t))}function Z(e){return(e.type===`foreignKey`||e.type===`crossPackageRef`)&&typeof e.related==`string`}function Ae(e,t){if(e.type===`boolean`)return`boolean`;if(Z(e))return`relation`;if(e.enum&&e.enum.length>0)return`enum`;if(e.ui?.widget)return e.ui.widget;if(e.type===`json`&&t!==void 0&&(L[t]??[]).includes(e.name))return`address`;if(P(e))return`money`;if(B(e))return`percent`;switch(e.type){case`datetime`:return`datetime`;case`integer`:return`integer`;case`decimal`:return`decimal`;case`json`:return`json`;default:return`text`}}var je=e=>typeof e==`number`&&Number.isFinite(e)?e:0;function Me(e){let t=e.name;if(e.type===`json`)return 99;if(/^(name|title|label|code)$|Number$|^number$/.test(t))return 0;if(t===`reference`&&e.type===`text`)return .5;if(t===`description`&&e.type===`text`)return 5.9;if(Z(e))return/^(customer|vendor|profile)/i.test(t)?1:/^(contract|.*(journal|account))/i.test(t)?7:2;if((e.enum?.length??0)>0&&/(status|state|stage)$/i.test(t))return 3;if(/^(totalAmount|amount|total)$/.test(t))return 4;if(e.type===`datetime`){if(/^start(date|at)?$/i.test(t))return 1.2;if(/^due/i.test(t))return 5;if(/(issue|paid|allocated|^date$)/i.test(t))return 5.2}return 6}function Ne(e,t=6){let n=e.filter(e=>e.type!==`json`),r=new Set(n.slice(0,3)),i=n.filter(e=>r.has(e)||Me(e)<6||[`integer`,`decimal`,`boolean`,`datetime`].includes(e.type)||(e.enum?.length??0)>0||Z(e)).map((e,t)=>({f:e,i:t,rank:Me(e)})).sort((e,t)=>e.rank-t.rank||e.i-t.i).map(e=>e.f),a=n.find(e=>e.name===`totalAmount`);if(a&&n.some(e=>e.name===`amountPaid`)){let e={...a,name:`amountDue`,label:`Amount due`,required:!1,derive:e=>je(e.totalAmount)-je(e.amountPaid)},t=i.findIndex(e=>e.name===`totalAmount`);i.splice(t<0?i.length:t+1,0,e)}let o=n.some(e=>e.name===`allDay`);return i.slice(0,t).map(e=>o&&e.type===`datetime`&&/^(start|end)(date|at)$/i.test(e.name)?{...e,showTime:!0}:e)}function Pe(e,t){return e.derive?e.derive(t):t[e.name]}function Fe(e,t,n){return e.filter(e=>e[t]===n)}function Ie(e){if(e.default!==void 0&&e.default!==null)return e.default;let t=e.enum??[];return t.length>0&&(e.required||/(status|state|stage)$/i.test(e.name))?t.includes(`draft`)?`draft`:t[0]:e.type===`boolean`?!1:e.type===`text`?``:null}function Le(e){let t={};for(let n of e)t[n.name]=Ie(n);return t}function Re(e,t,n){return{...Le(e),[t]:n}}var ze=e=>e==null||typeof e==`string`&&e.trim()===``;function Be(e,t,n=new Set){let r={};for(let i of e)i.required&&i.type!==`boolean`&&!n.has(i.name)&&ze(t[i.name])&&(r[i.name]=`${i.label} is required.`);return r}function Ve(e,t){let n=e.filter(e=>t[e.name]).map(e=>e.label);return n.length===0?``:`Cannot save yet: ${n.join(`, `)} ${n.length===1?`is`:`are`} required.`}function He(e,t,n,r){return G(e,n,(e,t)=>e.related?r.get(R(e.related,t)):void 0,t)??``}function Ue(e){e instanceof HTMLElement&&e.querySelector(`[data-invalid] :is(input, select, textarea, button):not([type="hidden"])`)?.focus()}function Q(e){return{records:[...e.form.records,...e.extensions.flatMap(e=>e.records??[])],fields:[...e.form.fields,...e.extensions.flatMap(e=>e.fields??[])]}}function We(e,t){let{records:n,fields:r}=Q(e);return r.map(e=>({field:e,catalogField:ce(e,n,t),modelId:le(e,n)}))}function Ge(e,t){return Object.fromEntries(We(e,t).map(({field:e,catalogField:t})=>[e.id,he(e,t)]))}function Ke(e){let{records:t}=Q(e),n=t.findIndex(t=>t.model===e.form.model);return n<0?0:n}async function qe(e,t,n,r){let{records:i}=Q(t),a=i[Ke(t)];if(!a)return{};let o=await e.get(n(a.model),r);return Y(e,i,{[a.as]:o},n)}async function Je(e,t,n,r){let{fields:i}=Q(t),a=await qe(e,t,n,r),o=Ge(t,n);return{values:Object.fromEntries(i.map(e=>{let{alias:t,field:n}=me(e.to),r=a[t]?.[n];return[e.id,r===void 0?o[e.id]:r]})),rows:a}}function Ye(e,t,n,r,i={},a={}){let{records:o,fields:s}=Q(e),c=ue(s,n),l=Ke(e),u=new Set;return o.map((e,o)=>{let d=fe(s,e.as,n),f={...pe(e.values,c),...o===l?Object.fromEntries(Object.entries(a).map(([e,t])=>[e,se(t)])):{}},p=t(e.model),m=r===void 0?void 0:i[e.as];try{if(o===l&&r!==void 0){let t=Object.fromEntries(Object.entries(f).filter(([,e])=>de(e)));return{op:`save`,as:e.as,model:p,id:r,values:{...d,...t}}}if(m)return{op:`save`,as:e.as,model:p,id:m.id,values:d};let t=e.match?pe(e.match,c):{},n=Object.values(t).some(e=>de(e)&&!u.has(e.ref))?{}:t,i=Object.keys(n).length>0;return{op:`save`,as:e.as,model:p,...i?{match:n}:{},onCreate:f,values:d}}finally{u.add(e.as)}})}var $=e=>typeof e==`string`&&e!==``?e:void 0;function Xe(e){let t=typeof e==`object`&&e&&!Array.isArray(e)?e:{},n=$(t.country),r=$(t.state);return{...$(t.street1)?{street:t.street1}:{},...$(t.city)?{city:t.city}:{},...r?{province:n===`US`?`US-${r}`:r}:{},...$(t.postalCode)?{postalCode:t.postalCode}:{},...n?{country:n}:{}}}function Ze(e,t){let n=typeof t==`object`&&t&&!Array.isArray(t)?{...t}:{};for(let e of[`street1`,`city`,`state`,`postalCode`,`country`])delete n[e];let r=$(e.province);return{...n,...$(e.street)?{street1:e.street}:{},...$(e.city)?{city:e.city}:{},...r?{state:r.replace(/^US-/,``)}:{},...$(e.postalCode)?{postalCode:e.postalCode}:{},...$(e.country)?{country:e.country}:{}}}function Qe(e){return document.body.appendChild(e),e.showModal(),()=>{e.close(),e.remove()}}function $e(e){let t=[e.status,e.customerType].filter(Boolean).join(` · `);return{id:e.id,label:e.profile.name,...t?{detail:t}:{}}}function et(e){return{id:e.id,label:e.profile.name,...e.status?{detail:e.status}:{}}}function tt(e,t){l(t,!0);let n=v(t,`value`,15,``),i=v(t,`label`,3,`Customer`),a=v(t,`required`,3,!1),o=v(t,`disabled`,3,!1),s=v(t,`createLabel`,3,`New customer`);U(e,{get name(){return t.name},get label(){return i()},get required(){return a()},get disabled(){return o()},get error(){return t.error},get onCreate(){return t.onCreate},get createLabel(){return s()},get onchange(){return t.onchange},search:async e=>(await t.search(e)).map($e),resolve:async e=>{let n=await t.resolve(e);return n?{id:n.id,label:n.profile.name}:null},get value(){return n()},set value(e){n(e)}}),r()}function nt(e,t){l(t,!0);let n=v(t,`value`,15,``),i=v(t,`label`,3,`Vendor`),a=v(t,`required`,3,!1),o=v(t,`disabled`,3,!1),s=v(t,`createLabel`,3,`New vendor`);U(e,{get name(){return t.name},get label(){return i()},get required(){return a()},get disabled(){return o()},get error(){return t.error},get onCreate(){return t.onCreate},get createLabel(){return s()},get onchange(){return t.onchange},search:async e=>(await t.search(e)).map(et),resolve:async e=>{let n=await t.resolve(e);return n?{id:n.id,label:n.profile.name}:null},get value(){return n()},set value(e){n(e)}}),r()}var rt=[{name:`CustomerSelect`,selects:`@happyvertical/smrt-commerce:Customer`,kind:`customer`,component:tt},{name:`VendorSelect`,selects:`@happyvertical/smrt-commerce:Vendor`,kind:`vendor`,component:nt}];function it(e,t=rt){return t.find(t=>t.selects===e)}var at=a(`<label class="plain svelte-1t0u16g"> <input type="text"/></label>`),ot=a(`<dialog class="create svelte-1t0u16g"><!></dialog>`),st=a(`<!> <!>`,1);function ct(a,s){l(s,!0);let d=v(s,`creatable`,3,!0),h=J(),T=n(()=>s.field.related??``),O=n(()=>I(e(T))?.model),j=n(()=>it(e(T))),P=n(()=>d()?Oe(q.ids,K,e(T)).find(Ee):void 0),F=n(()=>e(O)?.name.toLowerCase()??`record`),L=b(C(typeof s.value==`string`?s.value:``));x(()=>{let t=typeof s.value==`string`?s.value:``;t!==e(L)&&A(L,t,!0)});let R=b(!1),z=b(0);function B(){M(z),A(R,!0)}function ee(e){A(R,!1),A(L,e.id,!0),s.onchange(e.id)}function V(e){A(L,e,!0),s.onchange(e===``?null:e)}var H=st(),W=E(H),G=t=>{var n=at(),r=S(n),a=w(r);_(a),i(n),D(()=>{o(r,`${s.label??``} `),k(a,`name`,s.name),a.required=s.required,y(a,e(L))}),m(`input`,a,e=>V(e.currentTarget.value)),f(t,n)},Y=t=>{let r=n(()=>e(j).component);var i=p(),a=E(i);{let t=n(()=>e(P)?B:void 0),i=n(()=>`New ${e(F)}`);u(a,()=>e(r),(n,r)=>{r(n,{get name(){return s.name},get label(){return s.label},get required(){return s.required},search:e=>oe(h,e),resolve:e=>re(h,e),get onCreate(){return e(t)},get createLabel(){return e(i)},onchange:V,get value(){return e(L)},set value(e){A(L,e,!0)}})})}f(t,i)},se=t=>{let r=n(()=>e(j).component);var i=p(),a=E(i);{let t=n(()=>e(P)?B:void 0),i=n(()=>`New ${e(F)}`);u(a,()=>e(r),(n,r)=>{r(n,{get name(){return s.name},get label(){return s.label},get required(){return s.required},search:e=>ie(h,e),resolve:e=>ae(h,e),get onCreate(){return e(t)},get createLabel(){return e(i)},onchange:V,get value(){return e(L)},set value(e){A(L,e,!0)}})})}f(t,i)},ce=t=>{{let r=n(()=>e(P)?B:void 0),i=n(()=>`New ${e(F)}`);U(t,{get name(){return s.name},get label(){return s.label},get required(){return s.required},search:t=>ne(h,e(O),t),resolve:t=>te(h,e(O),t),get onCreate(){return e(r)},get createLabel(){return e(i)},onchange:V,get value(){return e(L)},set value(e){A(L,e,!0)}})}};t(W,t=>{e(O)?e(j)?.kind===`customer`?t(Y,1):e(j)?.kind===`vendor`?t(se,2):t(ce,-1):t(G)});var le=w(W,2),ue=t=>{var n=ot(),r=S(n);N(r,()=>e(z),t=>{wt(t,{get active(){return e(P)},onsaved:ee,oncancel:()=>A(R,!1)})}),i(n),c(n,()=>Qe),D(()=>k(n,`aria-label`,`New ${e(F)}`)),g(`close`,n,()=>A(R,!1)),f(t,n)};t(le,t=>{e(P)&&e(R)&&t(ue)}),f(a,H),r()}h([`input`]);var lt=a(`<div class="percent svelte-n1ol00"><!> <span class="percent-sign svelte-n1ol00" aria-hidden="true">%</span></div>`),ut=a(`<input type="url" class="svelte-n1ol00"/>`),dt=a(`<input type="number" step="1" class="svelte-n1ol00"/>`),ft=a(`<input type="number" step="any" class="svelte-n1ol00"/>`),pt=a(`<textarea rows="3" class="svelte-n1ol00"></textarea>`),mt=a(`<input type="text" class="svelte-n1ol00"/>`),ht=a(`<!> <!>`,1),gt=a(`<p class="field-error svelte-n1ol00" role="alert"> </p>`),_t=a(`<small class="svelte-n1ol00"> </small>`),vt=a(`<div class="field svelte-n1ol00"><!> <!> <!></div>`);function yt(a,s){l(s,!0);let c=v(s,`idPrefix`,3,`field`),u=v(s,`hideRequired`,3,!1),p=v(s,`creatable`,3,!0),h=n(()=>Ae(s.field,s.modelId)),b=n(()=>s.label??ee(s.field.name)),x=n(()=>`${c()}-${s.field.name}`),C=n(()=>s.field.required&&!u()),O=n(()=>s.value===null||s.value===void 0?``:typeof s.value==`object`?JSON.stringify(s.value):String(s.value)),A=n(()=>[...e(C)||(s.field.enum??[]).includes(``)?[]:[{value:``,label:`(none)`}],...(s.field.enum??[]).map(e=>({value:e,label:e===``?`(none)`:z(e)}))]);function M(e){if(e.trim()===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function N(e){try{return JSON.parse(e)}catch{return e}}let P=e=>e.slice(0,10);var F=vt(),I=S(F),L=t=>{{let r=n(()=>s.value===!0);H(t,{get checked(){return e(r)},onchange:e=>s.onchange(e.currentTarget.checked),get label(){return e(b)}})}},R=t=>{ct(t,{get field(){return s.field},get value(){return s.value},get onchange(){return s.onchange},get label(){return e(b)},get name(){return e(x)},get required(){return e(C)},get creatable(){return p()}})},B=t=>{ge(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},get options(){return e(A)},get value(){return e(O)},onchange:e=>s.onchange(e)})},U=t=>{ve(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},rows:4,get value(){return e(O)},onchange:e=>s.onchange(e)})},te=t=>{Se(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},type:`email`,get value(){return e(O)},onchange:e=>s.onchange(e)})},ne=t=>{xe(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},get value(){return e(O)},onchange:e=>s.onchange(e)})},re=t=>{{let r=n(()=>typeof s.value==`number`?s.value:null);_e(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},currency:`USD`,min:0,get value(){return e(r)},onchange:e=>s.onchange(e)})}},ie=t=>{var r=lt(),a=S(r);{let t=n(()=>we(s.value));Ce(a,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},min:0,step:.01,get value(){return e(t)},onchange:e=>s.onchange(be(e))})}d(2),i(r),f(t,r)},ae=t=>{{let r=n(()=>P(e(O)));ye(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},includeTime:!1,get value(){return e(r)},onchange:e=>s.onchange(e?new Date(`${e}T00:00:00Z`).toISOString():``)})}},G=t=>{{let r=n(()=>Xe(s.value));Te(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},get value(){return e(r)},onchange:e=>s.onchange(Ze(e,s.value))})}},oe=n=>{var r=ht(),i=E(r);W(i,{get for(){return e(x)},get label(){return e(b)},get required(){return e(C)}});var a=w(i,2),o=t=>{V(t,{get id(){return e(x)},get required(){return e(C)},get value(){return e(O)},onchange:e=>s.onchange(e.currentTarget.value)})},c=t=>{var n=ut();_(n),D(()=>{k(n,`id`,e(x)),n.required=e(C),y(n,e(O))}),m(`input`,n,e=>s.onchange(e.currentTarget.value)),f(t,n)},l=t=>{var n=dt();_(n),D(()=>{k(n,`id`,e(x)),n.required=e(C),y(n,e(O))}),g(`focus`,n,e=>e.currentTarget.select()),m(`input`,n,e=>{let t=M(e.currentTarget.value);s.onchange(t===null?null:Math.trunc(t))}),f(t,n)},u=t=>{var n=ft();_(n),D(()=>{k(n,`id`,e(x)),n.required=e(C),y(n,e(O))}),g(`focus`,n,e=>e.currentTarget.select()),m(`input`,n,e=>s.onchange(M(e.currentTarget.value))),f(t,n)},d=t=>{var n=pt();j(n),D(()=>{k(n,`id`,e(x)),y(n,e(O))}),m(`input`,n,e=>s.onchange(N(e.currentTarget.value))),f(t,n)},p=t=>{var n=mt();_(n),D(()=>{k(n,`id`,e(x)),n.required=e(C),y(n,e(O))}),m(`input`,n,e=>s.onchange(e.currentTarget.value)),f(t,n)};t(a,t=>{e(h)===`currency`?t(o):e(h)===`url`?t(c,1):e(h)===`integer`?t(l,2):e(h)===`decimal`?t(u,3):e(h)===`json`?t(d,4):t(p,-1)}),f(n,r)};t(I,t=>{e(h)===`boolean`?t(L):e(h)===`relation`?t(R,1):e(h)===`enum`?t(B,2):e(h)===`textarea`?t(U,3):e(h)===`email`?t(te,4):e(h)===`phone`?t(ne,5):e(h)===`money`?t(re,6):e(h)===`percent`?t(ie,7):e(h)===`datetime`?t(ae,8):e(h)===`address`?t(G,9):t(oe,-1)});var K=w(I,2),q=t=>{var n=gt(),r=T(n,!0);D(()=>{k(n,`id`,`${e(x)}-error`),o(r,s.error)}),f(t,n)};t(K,e=>{s.error&&e(q)});var J=w(K,2),Y=e=>{var t=_t(),n=T(t,!0);D(()=>o(n,s.help)),f(e,t)};t(J,e=>{s.help&&e(Y)}),i(F),D(()=>{k(F,`data-renderer`,e(h)),k(F,`data-invalid`,s.error?``:void 0)}),f(a,F),r()}h([`input`]);var bt=a(`<p>Loading...</p>`),xt=a(`<p class="error svelte-1rp3j7g" role="alert" data-error-summary=""> </p>`),St=a(`<p class="error svelte-1rp3j7g" role="alert"> </p>`),Ct=a(`<form class="planner-form" novalidate=""><h3 class="svelte-1rp3j7g"> </h3> <!> <!> <!> <div class="actions svelte-1rp3j7g"><button type="submit" class="svelte-1rp3j7g">Save</button> <button type="button" class="secondary svelte-1rp3j7g">Cancel</button></div></form>`);function wt(a,c){l(c,!0);let u=J(),d=n(()=>We(c.active,X).filter(({catalogField:e,modelId:t})=>!q.rows.some(n=>n.objectRef===t&&n.fieldName===e.name&&n.visibility===`hidden`))),h=b(C(Ge(c.active,X))),_=b(c.id===void 0),v=b(``),y=b(C({})),x=n(()=>e(d).map(({field:e,catalogField:t})=>({...t,name:e.id,label:e.label,required:e.required??t.required}))),k=n(()=>Ve(e(x),e(y))),j={};async function M(e){let t=await Je(u,c.active,X,e);A(h,t.values,!0),j=t.rows,A(_,!0)}c.id!==void 0&&M(c.id);async function N(t){t.preventDefault();let n=t.currentTarget;if(A(v,``),A(y,Be(e(x),e(h)),!0),Object.keys(e(y)).length>0)await O(),Ue(n);else try{let t=await u.apply(Ye(c.active,X,e(h),c.id,j,c.preset)),n=Q(c.active).records[Ke(c.active)],r=n?t[n.as]:void 0;if(!r)throw Error(`Nothing was saved.`);c.onsaved(r)}catch(e){A(v,e instanceof Error?e.message:`Could not save.`,!0)}}var P=p(),I=E(P),L=e=>{var t=bt();f(e,t)},R=r=>{var a=Ct(),l=S(a),u=T(l),p=w(l,2);s(p,17,()=>e(d),({field:e,catalogField:t,modelId:n})=>e.id,(t,r)=>{let i=()=>e(r).field,a=()=>e(r).catalogField,o=()=>e(r).modelId;{let r=n(()=>({...a(),required:i().required??a().required}));yt(t,{get modelId(){return o()},get field(){return e(r)},get label(){return i().label},get help(){return i().help},get idPrefix(){return c.active.form.id},get error(){return e(y)[i().id]},get value(){return e(h)[i().id]},onchange:t=>{e(h)[i().id]=t,delete e(y)[i().id]}})}});var _=w(p,2),b=t=>{var n=xt(),r=T(n,!0);D(()=>o(r,e(k))),f(t,n)};t(_,t=>{e(k)&&t(b)});var x=w(_,2),C=t=>{var n=St(),r=T(n,!0);D(()=>o(r,e(v))),f(t,n)};t(x,t=>{e(v)&&t(C)});var E=w(x,2),O=w(S(E),2);i(E),i(a),D(e=>o(u,`${c.id===void 0?`New`:`Edit`} ${e??``}`),[()=>F(c.active.form.label,c.noun,c.noun!==void 0)]),g(`submit`,a,N),m(`click`,O,function(...e){c.oncancel?.apply(this,e)}),f(r,a)};t(I,t=>{e(_)?t(R,-1):t(L)}),f(a,P),r()}h([`click`]);export{Le as a,Ne as c,Fe as d,Oe as f,De as h,Re as i,Be as l,Ee as m,yt as n,Pe as o,ke as p,Ue as r,Ve as s,wt as t,He as u};
1
+ import{$ as e,B as t,Ct as n,Dt as r,Ft as i,G as a,H as o,L as s,O as c,Ot as l,P as u,Pt as d,U as f,W as p,X as m,Y as h,Z as g,_,a as v,b as y,bt as b,ct as x,ft as S,gt as C,ht as w,mt as T,pt as E,st as D,tt as O,v as k,vt as A,wt as j,xt as M,z as N}from"./DG3qFFTE.js";import"./xihTtKlq.js";import{O as P,c as F,ft as I,gt as L,h as R,l as z,m as B,p as ee}from"./gnVUq1Tr.js";import{_ as V,i as H,o as U,y as W}from"./gMSmS-_y.js";import{a as te,c as ne,i as re,l as ie,o as ae,p as G,s as oe}from"./D7t4xFw6.js";import{b as K,t as q}from"./B6GaAylQ.js";import{r as J}from"./D_U_DYjx.js";import{a as Y,c as se,d as ce,f as le,i as ue,n as de,o as fe,p as pe,r as X,s as me,u as he}from"./8vF2REci.js";import{a as ge,c as _e,i as ve,l as ye,n as be,o as xe,r as Se,s as Ce,t as we,u as Te}from"./BhsxCKaI.js";function Ee(e){return e.form.kind===`field-map`}function De(e){return e.form.kind===`variant-grid`}function Oe(e,t,n){let r=t.filter(t=>e.includes(t.id));return r.flatMap(e=>(e.forms??[]).filter(e=>e.model===n).map(t=>({recipeId:e.id,form:t,extensions:r.flatMap(e=>(e.extends??[]).filter(e=>e.form===t.id))})))}function ke(e,t){return e.extensions.some(e=>(e.records??[]).some(e=>e.model===t))}function Z(e){return(e.type===`foreignKey`||e.type===`crossPackageRef`)&&typeof e.related==`string`}function Ae(e,t){if(e.type===`boolean`)return`boolean`;if(Z(e))return`relation`;if(e.enum&&e.enum.length>0)return`enum`;if(e.ui?.widget)return e.ui.widget;if(e.type===`json`&&t!==void 0&&(L[t]??[]).includes(e.name))return`address`;if(P(e))return`money`;if(B(e))return`percent`;switch(e.type){case`datetime`:return`datetime`;case`integer`:return`integer`;case`decimal`:return`decimal`;case`json`:return`json`;default:return`text`}}var je=e=>typeof e==`number`&&Number.isFinite(e)?e:0;function Me(e){let t=e.name;if(e.type===`json`)return 99;if(/^(name|title|label|code)$|Number$|^number$/.test(t))return 0;if(t===`reference`&&e.type===`text`)return .5;if(t===`description`&&e.type===`text`)return 5.9;if(Z(e))return/^(customer|vendor|profile)/i.test(t)?1:/^(contract|.*(journal|account))/i.test(t)?7:2;if((e.enum?.length??0)>0&&/(status|state|stage)$/i.test(t))return 3;if(/^(totalAmount|amount|total)$/.test(t))return 4;if(e.type===`datetime`){if(/^start(date|at)?$/i.test(t))return 1.2;if(/^due/i.test(t))return 5;if(/(issue|paid|allocated|^date$)/i.test(t))return 5.2}return 6}function Ne(e,t=6){let n=e.filter(e=>e.type!==`json`),r=new Set(n.slice(0,3)),i=n.filter(e=>r.has(e)||Me(e)<6||[`integer`,`decimal`,`boolean`,`datetime`].includes(e.type)||(e.enum?.length??0)>0||Z(e)).map((e,t)=>({f:e,i:t,rank:Me(e)})).sort((e,t)=>e.rank-t.rank||e.i-t.i).map(e=>e.f),a=n.find(e=>e.name===`totalAmount`);if(a&&n.some(e=>e.name===`amountPaid`)){let e={...a,name:`amountDue`,label:`Amount due`,required:!1,derive:e=>je(e.totalAmount)-je(e.amountPaid)},t=i.findIndex(e=>e.name===`totalAmount`);i.splice(t<0?i.length:t+1,0,e)}let o=n.some(e=>e.name===`allDay`);return i.slice(0,t).map(e=>o&&e.type===`datetime`&&/^(start|end)(date|at)$/i.test(e.name)?{...e,showTime:!0}:e)}function Pe(e,t){return e.derive?e.derive(t):t[e.name]}function Fe(e,t,n){return e.filter(e=>e[t]===n)}function Ie(e){if(e.default!==void 0&&e.default!==null)return e.default;let t=e.enum??[];return t.length>0&&(e.required||/(status|state|stage)$/i.test(e.name))?t.includes(`draft`)?`draft`:t[0]:e.type===`boolean`?!1:e.type===`text`?``:null}function Le(e){let t={};for(let n of e)t[n.name]=Ie(n);return t}function Re(e,t,n){return{...Le(e),[t]:n}}var ze=e=>e==null||typeof e==`string`&&e.trim()===``;function Be(e,t,n=new Set){let r={};for(let i of e)i.required&&i.type!==`boolean`&&!n.has(i.name)&&ze(t[i.name])&&(r[i.name]=`${i.label} is required.`);return r}function Ve(e,t){let n=e.filter(e=>t[e.name]).map(e=>e.label);return n.length===0?``:`Cannot save yet: ${n.join(`, `)} ${n.length===1?`is`:`are`} required.`}function He(e,t,n,r){return G(e,n,(e,t)=>e.related?r.get(R(e.related,t)):void 0,t)??``}function Ue(e){e instanceof HTMLElement&&e.querySelector(`[data-invalid] :is(input, select, textarea, button):not([type="hidden"])`)?.focus()}function Q(e){return{records:[...e.form.records,...e.extensions.flatMap(e=>e.records??[])],fields:[...e.form.fields,...e.extensions.flatMap(e=>e.fields??[])]}}function We(e,t){let{records:n,fields:r}=Q(e);return r.map(e=>({field:e,catalogField:ce(e,n,t),modelId:le(e,n)}))}function Ge(e,t){return Object.fromEntries(We(e,t).map(({field:e,catalogField:t})=>[e.id,he(e,t)]))}function Ke(e){let{records:t}=Q(e),n=t.findIndex(t=>t.model===e.form.model);return n<0?0:n}async function qe(e,t,n,r){let{records:i}=Q(t),a=i[Ke(t)];if(!a)return{};let o=await e.get(n(a.model),r);return Y(e,i,{[a.as]:o},n)}async function Je(e,t,n,r){let{fields:i}=Q(t),a=await qe(e,t,n,r),o=Ge(t,n);return{values:Object.fromEntries(i.map(e=>{let{alias:t,field:n}=me(e.to),r=a[t]?.[n];return[e.id,r===void 0?o[e.id]:r]})),rows:a}}function Ye(e,t,n,r,i={},a={}){let{records:o,fields:s}=Q(e),c=ue(s,n),l=Ke(e),u=new Set;return o.map((e,o)=>{let d=fe(s,e.as,n),f={...pe(e.values,c),...o===l?Object.fromEntries(Object.entries(a).map(([e,t])=>[e,se(t)])):{}},p=t(e.model),m=r===void 0?void 0:i[e.as];try{if(o===l&&r!==void 0){let t=Object.fromEntries(Object.entries(f).filter(([,e])=>de(e)));return{op:`save`,as:e.as,model:p,id:r,values:{...d,...t}}}if(m)return{op:`save`,as:e.as,model:p,id:m.id,values:d};let t=e.match?pe(e.match,c):{},n=Object.values(t).some(e=>de(e)&&!u.has(e.ref))?{}:t,i=Object.keys(n).length>0;return{op:`save`,as:e.as,model:p,...i?{match:n}:{},onCreate:f,values:d}}finally{u.add(e.as)}})}var $=e=>typeof e==`string`&&e!==``?e:void 0;function Xe(e){let t=typeof e==`object`&&e&&!Array.isArray(e)?e:{},n=$(t.country),r=$(t.state);return{...$(t.street1)?{street:t.street1}:{},...$(t.city)?{city:t.city}:{},...r?{province:n===`US`?`US-${r}`:r}:{},...$(t.postalCode)?{postalCode:t.postalCode}:{},...n?{country:n}:{}}}function Ze(e,t){let n=typeof t==`object`&&t&&!Array.isArray(t)?{...t}:{};for(let e of[`street1`,`city`,`state`,`postalCode`,`country`])delete n[e];let r=$(e.province);return{...n,...$(e.street)?{street1:e.street}:{},...$(e.city)?{city:e.city}:{},...r?{state:r.replace(/^US-/,``)}:{},...$(e.postalCode)?{postalCode:e.postalCode}:{},...$(e.country)?{country:e.country}:{}}}function Qe(e){return document.body.appendChild(e),e.showModal(),()=>{e.close(),e.remove()}}function $e(e){let t=[e.status,e.customerType].filter(Boolean).join(` · `);return{id:e.id,label:e.profile.name,...t?{detail:t}:{}}}function et(e){return{id:e.id,label:e.profile.name,...e.status?{detail:e.status}:{}}}function tt(e,t){l(t,!0);let n=v(t,`value`,15,``),i=v(t,`label`,3,`Customer`),a=v(t,`required`,3,!1),o=v(t,`disabled`,3,!1),s=v(t,`createLabel`,3,`New customer`);U(e,{get name(){return t.name},get label(){return i()},get required(){return a()},get disabled(){return o()},get error(){return t.error},get onCreate(){return t.onCreate},get createLabel(){return s()},get onchange(){return t.onchange},search:async e=>(await t.search(e)).map($e),resolve:async e=>{let n=await t.resolve(e);return n?{id:n.id,label:n.profile.name}:null},get value(){return n()},set value(e){n(e)}}),r()}function nt(e,t){l(t,!0);let n=v(t,`value`,15,``),i=v(t,`label`,3,`Vendor`),a=v(t,`required`,3,!1),o=v(t,`disabled`,3,!1),s=v(t,`createLabel`,3,`New vendor`);U(e,{get name(){return t.name},get label(){return i()},get required(){return a()},get disabled(){return o()},get error(){return t.error},get onCreate(){return t.onCreate},get createLabel(){return s()},get onchange(){return t.onchange},search:async e=>(await t.search(e)).map(et),resolve:async e=>{let n=await t.resolve(e);return n?{id:n.id,label:n.profile.name}:null},get value(){return n()},set value(e){n(e)}}),r()}var rt=[{name:`CustomerSelect`,selects:`@happyvertical/smrt-commerce:Customer`,kind:`customer`,component:tt},{name:`VendorSelect`,selects:`@happyvertical/smrt-commerce:Vendor`,kind:`vendor`,component:nt}];function it(e,t=rt){return t.find(t=>t.selects===e)}var at=a(`<label class="plain svelte-1t0u16g"> <input type="text"/></label>`),ot=a(`<dialog class="create svelte-1t0u16g"><!></dialog>`),st=a(`<!> <!>`,1);function ct(a,s){l(s,!0);let d=v(s,`creatable`,3,!0),h=J(),T=n(()=>s.field.related??``),O=n(()=>I(e(T))?.model),j=n(()=>it(e(T))),P=n(()=>d()?Oe(q.ids,K,e(T)).find(Ee):void 0),F=n(()=>e(O)?.name.toLowerCase()??`record`),L=b(C(typeof s.value==`string`?s.value:``));x(()=>{let t=typeof s.value==`string`?s.value:``;t!==e(L)&&A(L,t,!0)});let R=b(!1),z=b(0);function B(){M(z),A(R,!0)}function ee(e){A(R,!1),A(L,e.id,!0),s.onchange(e.id)}function V(e){A(L,e,!0),s.onchange(e===``?null:e)}var H=st(),W=E(H),G=t=>{var n=at(),r=S(n),a=w(r);_(a),i(n),D(()=>{o(r,`${s.label??``} `),k(a,`name`,s.name),a.required=s.required,y(a,e(L))}),m(`input`,a,e=>V(e.currentTarget.value)),f(t,n)},Y=t=>{let r=n(()=>e(j).component);var i=p(),a=E(i);{let t=n(()=>e(P)?B:void 0),i=n(()=>`New ${e(F)}`);u(a,()=>e(r),(n,r)=>{r(n,{get name(){return s.name},get label(){return s.label},get required(){return s.required},search:e=>oe(h,e),resolve:e=>re(h,e),get onCreate(){return e(t)},get createLabel(){return e(i)},onchange:V,get value(){return e(L)},set value(e){A(L,e,!0)}})})}f(t,i)},se=t=>{let r=n(()=>e(j).component);var i=p(),a=E(i);{let t=n(()=>e(P)?B:void 0),i=n(()=>`New ${e(F)}`);u(a,()=>e(r),(n,r)=>{r(n,{get name(){return s.name},get label(){return s.label},get required(){return s.required},search:e=>ie(h,e),resolve:e=>ae(h,e),get onCreate(){return e(t)},get createLabel(){return e(i)},onchange:V,get value(){return e(L)},set value(e){A(L,e,!0)}})})}f(t,i)},ce=t=>{{let r=n(()=>e(P)?B:void 0),i=n(()=>`New ${e(F)}`);U(t,{get name(){return s.name},get label(){return s.label},get required(){return s.required},search:t=>ne(h,e(O),t),resolve:t=>te(h,e(O),t),get onCreate(){return e(r)},get createLabel(){return e(i)},onchange:V,get value(){return e(L)},set value(e){A(L,e,!0)}})}};t(W,t=>{e(O)?e(j)?.kind===`customer`?t(Y,1):e(j)?.kind===`vendor`?t(se,2):t(ce,-1):t(G)});var le=w(W,2),ue=t=>{var n=ot(),r=S(n);N(r,()=>e(z),t=>{wt(t,{get active(){return e(P)},onsaved:ee,oncancel:()=>A(R,!1)})}),i(n),c(n,()=>Qe),D(()=>k(n,`aria-label`,`New ${e(F)}`)),g(`close`,n,()=>A(R,!1)),f(t,n)};t(le,t=>{e(P)&&e(R)&&t(ue)}),f(a,H),r()}h([`input`]);var lt=a(`<div class="percent svelte-n1ol00"><!> <span class="percent-sign svelte-n1ol00" aria-hidden="true">%</span></div>`),ut=a(`<input type="url" class="svelte-n1ol00"/>`),dt=a(`<input type="number" step="1" class="svelte-n1ol00"/>`),ft=a(`<input type="number" step="any" class="svelte-n1ol00"/>`),pt=a(`<textarea rows="3" class="svelte-n1ol00"></textarea>`),mt=a(`<input type="text" class="svelte-n1ol00"/>`),ht=a(`<!> <!>`,1),gt=a(`<p class="field-error svelte-n1ol00" role="alert"> </p>`),_t=a(`<small class="svelte-n1ol00"> </small>`),vt=a(`<div class="field svelte-n1ol00"><!> <!> <!></div>`);function yt(a,s){l(s,!0);let c=v(s,`idPrefix`,3,`field`),u=v(s,`hideRequired`,3,!1),p=v(s,`creatable`,3,!0),h=n(()=>Ae(s.field,s.modelId)),b=n(()=>s.label??ee(s.field.name)),x=n(()=>`${c()}-${s.field.name}`),C=n(()=>s.field.required&&!u()),O=n(()=>s.value===null||s.value===void 0?``:typeof s.value==`object`?JSON.stringify(s.value):String(s.value)),A=n(()=>[...e(C)||(s.field.enum??[]).includes(``)?[]:[{value:``,label:`(none)`}],...(s.field.enum??[]).map(e=>({value:e,label:e===``?`(none)`:z(e)}))]);function M(e){if(e.trim()===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function N(e){try{return JSON.parse(e)}catch{return e}}let P=e=>e.slice(0,10);var F=vt(),I=S(F),L=t=>{{let r=n(()=>s.value===!0);H(t,{get checked(){return e(r)},onchange:e=>s.onchange(e.currentTarget.checked),get label(){return e(b)}})}},R=t=>{ct(t,{get field(){return s.field},get value(){return s.value},get onchange(){return s.onchange},get label(){return e(b)},get name(){return e(x)},get required(){return e(C)},get creatable(){return p()}})},B=t=>{ge(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},get options(){return e(A)},get value(){return e(O)},onchange:e=>s.onchange(e)})},U=t=>{ve(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},rows:4,get value(){return e(O)},onchange:e=>s.onchange(e)})},te=t=>{Se(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},type:`email`,get value(){return e(O)},onchange:e=>s.onchange(e)})},ne=t=>{xe(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},get value(){return e(O)},onchange:e=>s.onchange(e)})},re=t=>{{let r=n(()=>typeof s.value==`number`?s.value:null);_e(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},currency:`USD`,min:0,get value(){return e(r)},onchange:e=>s.onchange(e)})}},ie=t=>{var r=lt(),a=S(r);{let t=n(()=>we(s.value));Ce(a,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},min:0,step:.01,get value(){return e(t)},onchange:e=>s.onchange(be(e))})}d(2),i(r),f(t,r)},ae=t=>{{let r=n(()=>P(e(O)));ye(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},includeTime:!1,get value(){return e(r)},onchange:e=>s.onchange(e?new Date(`${e}T00:00:00Z`).toISOString():``)})}},G=t=>{{let r=n(()=>Xe(s.value));Te(t,{get name(){return e(x)},get label(){return e(b)},get required(){return e(C)},get value(){return e(r)},onchange:e=>s.onchange(Ze(e,s.value))})}},oe=n=>{var r=ht(),i=E(r);W(i,{get for(){return e(x)},get label(){return e(b)},get required(){return e(C)}});var a=w(i,2),o=t=>{V(t,{get id(){return e(x)},get required(){return e(C)},get value(){return e(O)},onchange:e=>s.onchange(e.currentTarget.value)})},c=t=>{var n=ut();_(n),D(()=>{k(n,`id`,e(x)),n.required=e(C),y(n,e(O))}),m(`input`,n,e=>s.onchange(e.currentTarget.value)),f(t,n)},l=t=>{var n=dt();_(n),D(()=>{k(n,`id`,e(x)),n.required=e(C),y(n,e(O))}),g(`focus`,n,e=>e.currentTarget.select()),m(`input`,n,e=>{let t=M(e.currentTarget.value);s.onchange(t===null?null:Math.trunc(t))}),f(t,n)},u=t=>{var n=ft();_(n),D(()=>{k(n,`id`,e(x)),n.required=e(C),y(n,e(O))}),g(`focus`,n,e=>e.currentTarget.select()),m(`input`,n,e=>s.onchange(M(e.currentTarget.value))),f(t,n)},d=t=>{var n=pt();j(n),D(()=>{k(n,`id`,e(x)),y(n,e(O))}),m(`input`,n,e=>s.onchange(N(e.currentTarget.value))),f(t,n)},p=t=>{var n=mt();_(n),D(()=>{k(n,`id`,e(x)),n.required=e(C),y(n,e(O))}),m(`input`,n,e=>s.onchange(e.currentTarget.value)),f(t,n)};t(a,t=>{e(h)===`currency`?t(o):e(h)===`url`?t(c,1):e(h)===`integer`?t(l,2):e(h)===`decimal`?t(u,3):e(h)===`json`?t(d,4):t(p,-1)}),f(n,r)};t(I,t=>{e(h)===`boolean`?t(L):e(h)===`relation`?t(R,1):e(h)===`enum`?t(B,2):e(h)===`textarea`?t(U,3):e(h)===`email`?t(te,4):e(h)===`phone`?t(ne,5):e(h)===`money`?t(re,6):e(h)===`percent`?t(ie,7):e(h)===`datetime`?t(ae,8):e(h)===`address`?t(G,9):t(oe,-1)});var K=w(I,2),q=t=>{var n=gt(),r=T(n,!0);D(()=>{k(n,`id`,`${e(x)}-error`),o(r,s.error)}),f(t,n)};t(K,e=>{s.error&&e(q)});var J=w(K,2),Y=e=>{var t=_t(),n=T(t,!0);D(()=>o(n,s.help)),f(e,t)};t(J,e=>{s.help&&e(Y)}),i(F),D(()=>{k(F,`data-renderer`,e(h)),k(F,`data-invalid`,s.error?``:void 0)}),f(a,F),r()}h([`input`]);var bt=a(`<p>Loading...</p>`),xt=a(`<p class="error svelte-1rp3j7g" role="alert" data-error-summary=""> </p>`),St=a(`<p class="error svelte-1rp3j7g" role="alert"> </p>`),Ct=a(`<form class="planner-form" novalidate=""><h3 class="svelte-1rp3j7g"> </h3> <!> <!> <!> <div class="actions svelte-1rp3j7g"><button type="submit" class="svelte-1rp3j7g">Save</button> <button type="button" class="secondary svelte-1rp3j7g">Cancel</button></div></form>`);function wt(a,c){l(c,!0);let u=J(),d=n(()=>We(c.active,X).filter(({catalogField:e,modelId:t})=>!q.rows.some(n=>n.objectRef===t&&n.fieldName===e.name&&n.visibility===`hidden`))),h=b(C(Ge(c.active,X))),_=b(c.id===void 0),v=b(``),y=b(C({})),x=n(()=>e(d).map(({field:e,catalogField:t})=>({...t,name:e.id,label:e.label,required:e.required??t.required}))),k=n(()=>Ve(e(x),e(y))),j={};async function M(e){let t=await Je(u,c.active,X,e);A(h,t.values,!0),j=t.rows,A(_,!0)}c.id!==void 0&&M(c.id);async function N(t){t.preventDefault();let n=t.currentTarget;if(A(v,``),A(y,Be(e(x),e(h)),!0),Object.keys(e(y)).length>0)await O(),Ue(n);else try{let t=await u.apply(Ye(c.active,X,e(h),c.id,j,c.preset)),n=Q(c.active).records[Ke(c.active)],r=n?t[n.as]:void 0;if(!r)throw Error(`Nothing was saved.`);c.onsaved(r)}catch(e){A(v,e instanceof Error?e.message:`Could not save.`,!0)}}var P=p(),I=E(P),L=e=>{var t=bt();f(e,t)},R=r=>{var a=Ct(),l=S(a),u=T(l),p=w(l,2);s(p,17,()=>e(d),({field:e,catalogField:t,modelId:n})=>e.id,(t,r)=>{let i=()=>e(r).field,a=()=>e(r).catalogField,o=()=>e(r).modelId;{let r=n(()=>({...a(),required:i().required??a().required}));yt(t,{get modelId(){return o()},get field(){return e(r)},get label(){return i().label},get help(){return i().help},get idPrefix(){return c.active.form.id},get error(){return e(y)[i().id]},get value(){return e(h)[i().id]},onchange:t=>{e(h)[i().id]=t,delete e(y)[i().id]}})}});var _=w(p,2),b=t=>{var n=xt(),r=T(n,!0);D(()=>o(r,e(k))),f(t,n)};t(_,t=>{e(k)&&t(b)});var x=w(_,2),C=t=>{var n=St(),r=T(n,!0);D(()=>o(r,e(v))),f(t,n)};t(x,t=>{e(v)&&t(C)});var E=w(x,2),O=w(S(E),2);i(E),i(a),D(e=>o(u,`${c.id===void 0?`New`:`Edit`} ${e??``}`),[()=>F(c.active.form.label,c.noun,c.noun!==void 0)]),g(`submit`,a,N),m(`click`,O,function(...e){c.oncancel?.apply(this,e)}),f(r,a)};t(I,t=>{e(_)?t(R,-1):t(L)}),f(a,P),r()}h([`click`]);export{Le as a,Ne as c,Fe as d,Oe as f,De as h,Re as i,Be as l,Ee as m,yt as n,Pe as o,ke as p,Ue as r,Ve as s,wt as t,He as u};
@@ -1 +1 @@
1
- import{$ as e,Et as t,Mt as n,bt as r,vt as i}from"./DG3qFFTE.js";import"./xihTtKlq.js";import{I as a,K as o,L as s,O as c,U as l,W as u,_ as d,dt as f,ft as p,h as m,lt as h,p as g,st as _,x as v}from"./CqPgazbY.js";import{h as y}from"./CXWyfpCp.js";import"./M-CuJzQN.js";import"./9pRTae44.js";import{u as b}from"./BUWiA0bl.js";import{A as x,C as S,D as C,E as w,F as ee,M as T,N as te,S as ne,T as re,_ as ie,b as ae,d as oe,g as se,h as ce,j as le,n as ue,r as de,v as fe,w as pe,x as me,y as he}from"./IGiURgRE.js";import{B as ge,G as _e,J as ve,R as ye,V as be,W as xe,X as Se,Y as Ce,a as we,b as E,c as Te,d as Ee,i as De,j as Oe,l as ke,n as Ae,o as je,q as Me,t as D,v as Ne,x as O,z as Pe}from"./C0ucZoOF.js";function Fe(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 k(e,t){let n=Fe(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 A(e){let t;return()=>(t??=e(),t)}function Ie(e){return typeof e==`object`&&!!e&&`default`in e&&!!e.default}function Le(e,t,n){let r=A(()=>k(e.export,t)),i=e.optionsEditor?A(()=>k(e.optionsEditor,t)):void 0,a=e.data?.load?A(()=>k(e.data?.load,t)):void 0,o={type:e.type,title:e.label,options:e.options??[],loadComponent:async()=>{let e=await r();return Ie(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 Ie(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 Re(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 k(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(Le(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 ze=[`identifier`,`status`,`date`,`party`,`total`,`money`];function Be(e){for(let t of[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`])if(e.includes(t))return t}function Ve(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 ze)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:j(n,e),...Be(t[n]??[])?{role:Be(t[n]??[])}:{}}))}function He(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:j(o,e)}),s&&d.push({key:s,label:j(s,e),role:`quantity`}),l&&d.push({key:l,label:j(l,e),role:`money`,summarize:!1}),u&&u!==l&&d.push({key:u,label:j(u,e),role:`money`}),d}function j(e,t){let n=t.fields[e];return n&&(n.type===`foreignKey`||n.type===`crossPackageRef`)&&/.[a-z]Id$/.test(e)?re(e.slice(0,-2)):re(e)}var Ue=[`text`,`integer`,`decimal`,`boolean`,`datetime`,`json`,`foreignKey`,`crossPackageRef`];function We(e){return Ue.includes(e)?e:`text`}var Ge=/(Date|^date|period(Start|End))$/;function Ke(e,t){return t.type===`datetime`&&!t.system&&Ge.test(t.name)&&!e.fields.some(e=>e.name===`allDay`)?`date`:void 0}function qe(e){return oe(e)[0]}function Je(e,t){let n=t.ui?{...t.ui}:void 0,r=c(t)?`money`:Ke(e,t);return{type:We(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}:{},...qe(e)===t.name?{display:!0}:{}}}function Ye(e,t){return e.includes(`:`)?e:`${t.slice(0,t.lastIndexOf(`:`))}:${e}`}function Xe(e,t){if(!t.related)return!1;let n=Ye(t.related,e.id);return ve(h,n,o).some(t=>t.id===e.id)}function Ze(e){return e.fields.flatMap(t=>{if(t.type!==`foreignKey`&&t.type!==`crossPackageRef`||!t.related)return[];let n=p(Ye(t.related,e.id));return n?[{field:t.name,kind:t.type===`crossPackageRef`?`crossPackageRef`:`foreignKey`,relatedCollection:n.model.collection,...Xe(e,t)?{role:`items`}:{}}]:[]})}function M(e){let t=Ze(e);return{name:e.collection,objectRef:e.id,className:e.name,idField:`id`,fields:Object.fromEntries(e.fields.map(t=>[t.name,Je(e,t)])),...t.length?{relationships:t}:{}}}function Qe(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 $e(e,t){let n=new Set(t);for(let t of e)for(let e of t.models)n.add(e);return n}function et(e){return g(e.replace(/_?id$/i,``)||e)}function N(e,t,n){let r=Ce(e,t),i=Se(e,t).filter(e=>e.model.exposed&&n.has(e.model.id)),a=new Set(ve(e,t,o).map(e=>e.id)),s=new Map;for(let e of i)s.set(e.model.id,(s.get(e.model.id)??0)+1);let c=i.map(e=>{let t=a.has(e.model.id)?`items`:`children`,n=M(e.model),i=C(n),o=[e.fk];return{model:e.model.id,field:e.fk,label:(s.get(e.model.id)??0)>1?`${xe(e.model.name,r)} (${et(e.fk).toLowerCase()})`:xe(e.model.name,r),kind:t,columns:t===`items`?He(n,i,{exclude:o}):Ve(n,i,{exclude:o,max:5}),...t===`items`&&`sortOrder`in n.fields?{sort:`sortOrder`}:{}}});for(let n of _e(e,t))c.push({model:n.model.id,field:n.fk,label:et(n.fk),kind:`reference`});return c}var tt=Symbol(`smrt-cookbook`);function nt(){return t(tt)}function rt(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 pe(n,i)}function it(e){return e?async(t,n)=>{let r=rt(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}}:rt}var at=new Set([`foreignKey`,`crossPackageRef`]);function P(e,t){return`/m/${e}/${t}/`}function ot(e,t,n,r=`view`){let i=`${P(e,t)}${encodeURIComponent(n)}/`;return r===`edit`?`${i}edit/`:i}function st(e,t,n,r){return`${P(e,t)}?${encodeURIComponent(n)}=${encodeURIComponent(r)}`}function ct(e,t){let n=new URLSearchParams(e);for(let e of t.fields){if(!at.has(e.type))continue;let t=n.get(e.name);if(t)return{field:e.name,equals:t}}}function lt(e){return e?.equals===void 0?``:`${encodeURIComponent(e.field)}=${encodeURIComponent(e.equals)}`}function ut(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 dt(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 ft(e){return e?.equals===void 0?{}:{[e.field]:e.equals}}var F=e=>typeof e==`number`&&Number.isSafeInteger(e)?e:null,pt=(e,t)=>e.fields.some(e=>e.name===t);function mt(e,t){let n=C(M(e)),r=ce(t,n);return Object.values(r).some(e=>F(e)!==null)?r:void 0}function ht(e,t){return!!e.fields.find(e=>e.name===`status`)?.enum?.includes(`draft`)&&typeof t.status==`string`&&t.status!==``&&t.status!==`draft`}function gt(e,t,n){if(!ht(e,t)||![`subtotal`,`taxAmount`,`totalAmount`,`discountTotal`].every(t=>pt(e,t)))return;let r=F(t.subtotal),i=F(t.taxAmount),a=F(t.totalAmount),o=F(t.discountTotal)??0;if(r===null||i===null||a===null)return;let s=l(t,`exclusive`);return{subtotal:r,discount:o,tax:i,total:a,lineAmountType:s,roundingScope:u(t,`line`),showNetSubtotal:s===`inclusive`,taxes:_(n,s).flatMap(e=>e.taxComponentId?[{taxComponentId:e.taxComponentId,name:e.name,percent:e.percent,taxable:e.taxable,tax:e.tax}]:[])}}var I=x();function L(e){let{source:t,href:n}=e;if(!t||!n)throw Error(`the planner widget context is missing`);return{source:t,href:n}}function R(e){let t=typeof e==`string`?p(e):void 0;if(!t)throw Error(`unknown model ${String(e)}`);return{model:t.model,packageId:t.pkg.id,path:P(t.pkg.id,t.model.name)}}var z=new Set([`foreignKey`,`crossPackageRef`]);function B(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||!z.has(s.type))throw Error(`${n.name} has no reference field ${o}`);return{field:o,id:i.id}}async function _t(e,t,n){return n?e.listWhere(t,n.field,n.id):e.list(t)}function vt(e,t,n){return e(n?st(t.packageId,t.model.name,n.field,n.id):t.path)}var V=e=>typeof e==`number`&&Number.isFinite(e);async function yt(e,t){let{source:n,href:r}=L(t),i=R(e.model),{model:a}=i,o=B(e,t,a),s=await _t(n,a,o),l=vt(r,i,o),u=typeof e.measure==`string`?e.measure:``;if(u===`count`||u===``)return{value:s.length,format:`integer`,href:l};let d=a.fields.find(t=>t.name===e.field);if(!d||d.type!==`integer`&&d.type!==`decimal`)throw Error(`${u} needs a numeric field of ${a.name}`);let f=s.map(e=>e[d.name]).filter(V),p=0;if(f.length){if(u===`sum`||u===`avg`)p=f.reduce((e,t)=>e+t,0),u===`avg`&&(p/=f.length);else if(u===`min`)p=Math.min(...f);else if(u===`max`)p=Math.max(...f);else throw Error(`unknown measure ${u}`)}let m=c(d);return{value:m?Math.round(p):p,format:m?`money`:d.type===`integer`?`integer`:`decimal`,...m?{currency:`USD`}:{},href:l}}function bt(e,t){return V(e)&&V(t)?e-t:String(e??``).localeCompare(String(t??``))}var xt=new Set([`createdAt`,`updatedAt`]),St=[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`];function Ct(e=[]){return St.find(t=>e.includes(t))}function wt(e,t,n,r){let i=M(e),a=r?[r]:[],o=S(n);if(o.length===0)return Ve(i,t,{exclude:a,max:5});let s=[...He(i,t,{exclude:a}),...Ve(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=Ct(t[n]);return{key:n,label:z.has(r.type)?g(n.replace(/Id$/,``)):g(n),...a?{role:a}:{}}})}var Tt=new Set([`money`,`quantity`]);function Et(e,t){let n={};for(let r of e)(r.summarize??Tt.has(r.role))&&(n[r.key]=t.reduce((e,t)=>{let n=t[r.key];return V(n)?e+n:e},0));return n}function Dt(e,t){let n=w(M(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 Ot(e,t){let{source:n,href:r}=L(t),i=R(e.model),{model:a}=i,o=B(e,t,a),s=await _t(n,a,o);if(typeof e.sort==`string`&&e.sort){if(!a.fields.find(t=>t.name===e.sort)&&!xt.has(e.sort))throw Error(`${a.name} has no field ${e.sort}`);let t=s.some(t=>t[e.sort]!==void 0)?e.sort:It(a)?.name;if(t){let n=e.direction===`asc`?1:-1;s=[...s].sort((e,r)=>n*bt(e[t],r[t]))}}let c=wt(a,C(M(a)),e.columns,o?.field),l=V(e.limit)?e.limit:5,u=s.slice(0,l),d=a.fields.filter(e=>z.has(e.type)&&c.some(t=>t.key===e.name)),f=await de(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(m(r.related,n))??``]:[t.key,n??null]})),h=Et(c,s),g=!Me(a);return{rows:await Promise.all(u.map(async e=>({id:String(e.id),title:await ue(n,a,e,0,o?.field),...g?{href:r(ot(i.packageId,a.name,String(e.id)))}:{},cells:p(e)}))),total:s.length,...g?{href:vt(r,i,o)}:{},columns:c,currency:Dt(a,s),...Object.keys(h).length?{summaries:h}:{}}}var kt={"7d":7,"30d":30,"90d":90,"12m":365,all:null},At=864e5;function jt(e){return e===`7d`||e===`30d`?`day`:e===`90d`?`week`:`month`}function Mt(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*At:r}function Nt(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)*At}function Pt(e,t){let n=new Date(e).toISOString();return t===`month`?n.slice(0,7):n.slice(0,10)}var Ft=e=>e.type===`datetime`&&!e.system;function It(e){let t=e.fields.filter(Ft);return t.find(e=>/^(issue|order|start|created)/i.test(e.name))??t[0]}function H(e){if(typeof e!=`string`&&typeof e!=`number`)return;let t=new Date(e).getTime();return Number.isFinite(t)?t:void 0}async function Lt(e,t){let{source:n,href:r}=L(t),i=R(e.model),{model:a}=i,o=B(e,t,a),s=typeof e.groupBy==`string`?e.groupBy:``,l=s?a.fields.find(e=>e.name===s):It(a);if(!l)throw Error(s?`${a.name} has no field ${s}`:`${a.name} has no date field to chart; choose a group-by field`);let u=typeof e.measure==`string`?e.measure:``,d;if(u&&u!==`count`){if(u!==`sum`&&u!==`avg`)throw Error(`unknown measure ${u}`);if(d=a.fields.find(t=>t.name===e.field),!d||d.type!==`integer`&&d.type!==`decimal`)throw Error(`${u} needs a numeric field of ${a.name}`)}let f=typeof e.period==`string`?e.period:`30d`;if(!Object.hasOwn(kt,f))throw Error(`unknown period ${f}`);let p=kt[f],m=Ft(l),h=m?l:It(a),g=p!==null&&h?v-p*At:-1/0,_=await _t(n,a,o);h&&g!==-1/0&&(_=_.filter(e=>{let t=H(e[h.name]);return t!==void 0&&t>=g&&t<=v}));let y=new Map,b=(e,t,n)=>{let r=y.get(e)??{key:t,sum:0,n:0};if(d){let e=n[d.name];if(!V(e))return;r.sum+=e}r.n+=1,y.set(e,r)},x=jt(f);if(m){let e=g===-1/0?Math.min(..._.map(e=>H(e[l.name])??v),v):g;for(let t=Mt(e,x);t<=v;t=Nt(t,x))y.set(Pt(t,x),{key:t,sum:0,n:0});for(let e of _){let t=H(e[l.name]);if(t===void 0)continue;let n=Mt(t,x);b(Pt(n,x),n,e)}}else for(let e of _){let t=e[l.name],n=t==null||t===``?`(none)`:String(t);b(n,n,e)}let S=d?c(d):!1,C=e=>{if(!d)return e.n;let t=u===`avg`&&e.n?e.sum/e.n:e.sum;return S?Math.round(t):t},w=[...y.entries()].map(([e,t])=>({label:e,value:C(t),key:t.key}));return w=m?w.sort((e,t)=>Number(e.key)-Number(t.key)):w.sort((e,t)=>t.value-e.value||e.label.localeCompare(t.label)),{points:w.map(({label:e,value:t})=>({label:e,value:t})),format:d?S?`money`:d.type===`integer`?`integer`:`decimal`:`integer`,...S?{currency:`USD`}:{},href:vt(r,i,o)}}var Rt=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=>dt(t.scope,e)).length}}))};fe(I,{metric:yt,records:Ot,chart:Lt,shortcuts:Rt,shortcuts:it(Rt)});function zt(e){let{relations:t,viewAllHref:n}=e;if(!t)throw Error(`the record page context is missing`);return{relations:t,records:Ot,viewAllHref:n}}async function Bt(e,t){let{source:n}=L(e),r=e.record;if(!r?.id)throw Error(`line items need a record`);let{model:i}=R(r.model),a=await n.get(i,r.id);if(!a)return{};let o=t.find(e=>e.kind===`items`),s=o?p(o.model)?.model:void 0,c=gt(i,a,o&&s?await n.listWhere(s,o.field,r.id):[]),l=c?void 0:mt(i,a),u=w(M(i)),d=u?a[u]:void 0;return{...c?{storedTotals:c}:{},...l?{totals:l}:{},...typeof d==`string`&&d?{currency:d}:{}}}I.register(ie((e,t)=>ae(zt(t))(e,t))),I.register(se(async(e,t)=>{let n=zt(t),{totals:r,storedTotals:i,currency:a}=await Bt(t,n.relations);return he({...n,totals:()=>r,storedTotals:()=>i,currency:()=>a})(e,t)}));var Vt=[`shortcuts`,`metric`,`records`,`chart`,`note`],Ht={},Ut=async(e,t)=>{let n=Ht[e];if(n)return(await n())[t]},Wt=E.filter(e=>e.surfaces?.some(e=>e.kind===`widget`)),Gt=Wt.flatMap(e=>(e.surfaces??[]).flatMap(e=>e.kind===`widget`?[e.type]:[]));Re(I,Wt,Ut);var Kt=new Map(ye(E).map(e=>[`section:${e.id}`,e])),qt=h.packages.flatMap(e=>e.models.map(e=>e.id)),Jt=[...Vt,...Gt];function Yt(e){let t=Kt.get(e);for(let e of t?.recipes??[]){let t=Ne(e)[0];if(t)return{id:t.model.id,name:g(t.model.name)}}}function Xt(e){let t=[{id:`shortcuts`,type:`shortcuts`,span:4,options:{}}],n=Yt(e);return n&&t.push({id:`count`,type:`metric`,span:1,options:{title:d(n.name),model:n.id,measure:`count`}},{id:`latest`,type:`records`,span:3,options:{title:`${n.name} records`,model:n.id,limit:5}}),t}var Zt=new Map;function Qt(e){if(!ee.test(e))return;let t=Zt.get(e);return t||(t=T({id:e,allowed:Jt,models:qt,defaults:Xt(e)}),Zt.set(e,t)),t}function $t(e,t){return`detail:${e}.${t}`}var en=new Map(h.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(t=>[ne(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?f(t,n):void 0;return t&&r?.exposed?{packageId:t,model:r}:en.get(e)}var tn=new Set(h.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(e=>e.id))),nn=new Map;function rn(e){let t=nn.get(e);if(t)return t;let n=U(e);if(!n)return;let r=N(h,n.model.id,tn),i=me(M(n.model),r,{id:e,maxMetrics:2*r.length});return t=T({...i,maxWidgets:Math.max(i.maxWidgets??24,i.defaults.length+24)}),nn.set(e,t),t}function an(e,t){let n=rn(e),r=U(e);if(!n||!r)return;let i=N(h,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 T({...n,defaults:o})}function on(e){return e.startsWith(`detail:`)?rn(e):Qt(e)}function sn(e,t){return Kt.has(e)||e===`section:${Oe.id}`?!0:e.startsWith(`detail:`)?U(e)!==void 0:e.startsWith(`custom:`)&&ee.test(e)&&(t?.customSections??[]).some(t=>t.id===e)}var cn=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function ln(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 un(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 dn(e,t){let n=on(e);if(!n)return{override:null,issues:[{widgetId:null,type:null,code:`malformed`,message:`not an overview id`}]};let r=le(n,t,I);if(r.ok)return{override:r.override,issues:[]};let i=te(t),a=new Set(r.issues.flatMap(e=>e.widgetId?[e.widgetId]:[]));if(!i.override)return{override:null,issues:r.issues};let o=le(n,un(i.override,a),I);return o.ok?{override:o.override,issues:r.issues}:{override:null,issues:[...r.issues,...o.issues]}}function fn(e,t){if(!cn(e))return null;let n=[],r=[];for(let i of Object.keys(e).sort()){if(!sn(i,t)){r.push(`Overview ${i} is not a page in this app and was dropped.`);continue}let{override:a,issues:o}=dn(i,e[i]);for(let e of o)r.push(ln(i,e));a&&n.push([i,a])}return{overviews:Object.fromEntries(n),dropped:r}}var W=b,pn=`glass`,mn=`system`,hn=[`light`,`dark`,`system`],gn=[`none`,`sm`,`md`,`lg`,`xl`,`full`],_n=[`comfortable`,`touch`],vn=[`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`},yn=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;function bn(e){if(typeof e!=`string`)return null;let t=yn.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 xn=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function Sn(e){if(e===void 0)return{ok:!0,theme:void 0};if(!xn(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(!hn.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`,gn],[`density`,_n],[`contrast`,vn]]){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(!xn(e.custom))return{ok:!1,error:`The theme "custom" must be an object.`};let n=bn(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 Cn(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 wn(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 Tn(e,t=Pe(E)){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 En(e,t=E){let n=new Map;for(let e of t){let t=be(e).id;for(let r of Ne(e))r.key&&n.set(`${K}${t}:${r.packageId}:${r.model.name}:${r.label}`,ge(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:ge(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`,Dn=new Set([`basic`,`advanced`,`hidden`]),On=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 kn(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`&&Dn.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 An(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 jn(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=>!O.has(e)),i=[...new Set([...Ee(e.recipes.filter(e=>O.has(e)),O),...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=>O.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=kn(n,`policies[${t}]`);if(typeof e==`string`)return J(`Invalid cookbook: ${e}.`);(o.has(e.objectRef)||we(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=>On.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=An(e.layout);if(typeof t==`string`)return J(`Invalid cookbook: ${t}.`);l=En(Tn(t))}let u;if(e.theme!==void 0){let n=Sn(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 Mn=e=>({ok:!1,error:e});function Nn(e,t={}){return jn(e,{...t,overviews:fn})}function Pn(e,t={}){let n;try{n=JSON.parse(e)}catch{return Mn(`This file is not valid JSON.`)}try{return Nn(n,t)}catch{return Mn(`This file is not a valid cookbook.`)}}var Z=`smrt-planner:cookbook-doc:v1`,Fn=`smrt-planner:blueprint:v1`,In=`smrt-planner:cookbook-doc:unreadable`;function Ln(){try{return globalThis.localStorage??null}catch{return null}}function Rn(e){if(!e)return{status:`unavailable`};let t;try{t=e.getItem(Z)}catch{return{status:`unavailable`}}let n=null;try{n=e.getItem(Fn)}catch{}let r=t===null&&n!==null,i=r?n:t;if(i===null)return{status:`empty`};let a=Pn(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,In,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 zn(e,t){if(!e)return!1;try{return e.removeItem(t),!0}catch{return!1}}function Bn(e,t){return Q(e,Z,JSON.stringify(t))}function Vn(e,t={}){let n={$schema:q,version:1,...Ae(e)};t.name&&(n.name=t.name),t.description&&(n.description=t.description),t.layout&&(n.layout=t.layout);let r=Cn(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 Hn=new Set([`basic`,`advanced`,`hidden`]),Un=new Set([`api`,`mcp`,`cli`]);function Wn(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 Gn(e){let t=new URLSearchParams(e);return t.has(`r`)||t.has(`o`)}function Kn(e){let t={rows:[],narrowed:{}};if(!e)return t;let n;try{n=JSON.parse(Wn(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`&&Hn.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=>Un.has(e));n.length&&(i[e]=n)}return{rows:r,narrowed:i}}function qn(e){let t=new URLSearchParams(e),n=(t.get(`r`)??``).split(`,`).filter(Boolean),r=Ee(ke(n,O),O),i=new Set(r.flatMap(e=>O.get(e)?.models??[])),{rows:a,narrowed:o}=Kn(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 Jn=`smrt-planner:shell`;function $(e){let t=je(e),n=e.policies.some(e=>e.defaultValue!==void 0&&we(e));s(De(e)||n?t.taxRate:void 0),a({pricesIncludeTax:t.pricesIncludeTax,taxRounding:t.taxRounding,currency:t.currency})}var Yn=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 Vn(n(D.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=y(e)?void 0:e}apply(e){D.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=[...D.unavailableRecipes,...D.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(){D.removeUnavailable(),this.scheduleSave()}setTheme(e){this.theme=Cn(e)}settings(){return je(this.snapshot())}setSettings(e){let t=Te(this.snapshot(),e);D.rows=t.policies.map(e=>({...e})),$(t)}replace(e){this.apply(e),this.loaded||(this.replacedBeforeLoad=!0),this.saveBlocked=!1,this.keepLegacyUrl=!1}reset(){D.clear(),$({policies:[]}),this.layout=void 0,this.theme=void 0,this.name=void 0,this.description=void 0,this.overviews={};try{globalThis.localStorage?.removeItem(Jn)}catch{}this.saveBlocked=!1,this.keepLegacyUrl=!1}importText(e){let t=Pn(e);return t.ok&&this.replace(t.cookbook),t}hydrate(e,t=Ln()){this.storage=t;let n=Rn(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(Gn(e)&&(n.status===`loaded`&&!Q(t,`smrt-planner:cookbook-doc:backup`,JSON.stringify(n.cookbook))&&(this.saveBlocked=!0),this.apply(qn(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=Bn(this.storage,this.snapshot());return this.persist=e?`ok`:`memory`,e&&this.previousKept&&(this.previousKept=!zn(this.storage,Fn)),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{nt as A,ut as C,ct as D,P as E,N as M,M as N,lt as O,Qe as P,dt as S,st as T,bn as _,Ln as a,Qt as b,q as c,mn as d,pn as f,wn as g,W as h,Z as i,$e as j,ot as k,gn as l,G as m,Yn as n,Nn as o,_n as p,$ as r,Pn as s,Jn as t,vn as u,an as v,ft as w,I as x,$t as y};
1
+ import{$ as e,Et as t,Mt as n,bt as r,vt as i}from"./DG3qFFTE.js";import"./xihTtKlq.js";import{I as a,K as o,L as s,O as c,U as l,W as u,_ as d,dt as f,ft as p,h as m,lt as h,p as g,st as _,x as v}from"./gnVUq1Tr.js";import{g as y}from"./BMRtN-eN.js";import"./M-CuJzQN.js";import"./9pRTae44.js";import{u as b}from"./DEwvWTFM.js";import{A as x,C as S,D as C,E as w,F as ee,M as T,N as te,S as ne,T as re,_ as ie,b as ae,d as oe,g as se,h as ce,j as le,n as ue,r as de,v as fe,w as pe,x as me,y as he}from"./D7t4xFw6.js";import{B as ge,G as _e,J as ve,R as ye,V as be,W as xe,X as Se,Y as Ce,a as we,b as E,c as Te,d as Ee,i as De,j as Oe,l as ke,n as Ae,o as je,q as Me,t as D,v as Ne,x as O,z as Pe}from"./B6GaAylQ.js";function Fe(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 k(e,t){let n=Fe(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 A(e){let t;return()=>(t??=e(),t)}function Ie(e){return typeof e==`object`&&!!e&&`default`in e&&!!e.default}function Le(e,t,n){let r=A(()=>k(e.export,t)),i=e.optionsEditor?A(()=>k(e.optionsEditor,t)):void 0,a=e.data?.load?A(()=>k(e.data?.load,t)):void 0,o={type:e.type,title:e.label,options:e.options??[],loadComponent:async()=>{let e=await r();return Ie(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 Ie(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 Re(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 k(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(Le(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 ze=[`identifier`,`status`,`date`,`party`,`total`,`money`];function Be(e){for(let t of[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`])if(e.includes(t))return t}function Ve(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 ze)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:j(n,e),...Be(t[n]??[])?{role:Be(t[n]??[])}:{}}))}function He(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:j(o,e)}),s&&d.push({key:s,label:j(s,e),role:`quantity`}),l&&d.push({key:l,label:j(l,e),role:`money`,summarize:!1}),u&&u!==l&&d.push({key:u,label:j(u,e),role:`money`}),d}function j(e,t){let n=t.fields[e];return n&&(n.type===`foreignKey`||n.type===`crossPackageRef`)&&/.[a-z]Id$/.test(e)?re(e.slice(0,-2)):re(e)}var Ue=[`text`,`integer`,`decimal`,`boolean`,`datetime`,`json`,`foreignKey`,`crossPackageRef`];function We(e){return Ue.includes(e)?e:`text`}var Ge=/(Date|^date|period(Start|End))$/;function Ke(e,t){return t.type===`datetime`&&!t.system&&Ge.test(t.name)&&!e.fields.some(e=>e.name===`allDay`)?`date`:void 0}function qe(e){return oe(e)[0]}function Je(e,t){let n=t.ui?{...t.ui}:void 0,r=c(t)?`money`:Ke(e,t);return{type:We(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}:{},...qe(e)===t.name?{display:!0}:{}}}function Ye(e,t){return e.includes(`:`)?e:`${t.slice(0,t.lastIndexOf(`:`))}:${e}`}function Xe(e,t){if(!t.related)return!1;let n=Ye(t.related,e.id);return ve(h,n,o).some(t=>t.id===e.id)}function Ze(e){return e.fields.flatMap(t=>{if(t.type!==`foreignKey`&&t.type!==`crossPackageRef`||!t.related)return[];let n=p(Ye(t.related,e.id));return n?[{field:t.name,kind:t.type===`crossPackageRef`?`crossPackageRef`:`foreignKey`,relatedCollection:n.model.collection,...Xe(e,t)?{role:`items`}:{}}]:[]})}function M(e){let t=Ze(e);return{name:e.collection,objectRef:e.id,className:e.name,idField:`id`,fields:Object.fromEntries(e.fields.map(t=>[t.name,Je(e,t)])),...t.length?{relationships:t}:{}}}function Qe(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 $e(e,t){let n=new Set(t);for(let t of e)for(let e of t.models)n.add(e);return n}function et(e){return g(e.replace(/_?id$/i,``)||e)}function N(e,t,n){let r=Ce(e,t),i=Se(e,t).filter(e=>e.model.exposed&&n.has(e.model.id)),a=new Set(ve(e,t,o).map(e=>e.id)),s=new Map;for(let e of i)s.set(e.model.id,(s.get(e.model.id)??0)+1);let c=i.map(e=>{let t=a.has(e.model.id)?`items`:`children`,n=M(e.model),i=C(n),o=[e.fk];return{model:e.model.id,field:e.fk,label:(s.get(e.model.id)??0)>1?`${xe(e.model.name,r)} (${et(e.fk).toLowerCase()})`:xe(e.model.name,r),kind:t,columns:t===`items`?He(n,i,{exclude:o}):Ve(n,i,{exclude:o,max:5}),...t===`items`&&`sortOrder`in n.fields?{sort:`sortOrder`}:{}}});for(let n of _e(e,t))c.push({model:n.model.id,field:n.fk,label:et(n.fk),kind:`reference`});return c}var tt=Symbol(`smrt-cookbook`);function nt(){return t(tt)}function rt(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 pe(n,i)}function it(e){return e?async(t,n)=>{let r=rt(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}}:rt}var at=new Set([`foreignKey`,`crossPackageRef`]);function P(e,t){return`/m/${e}/${t}/`}function ot(e,t,n,r=`view`){let i=`${P(e,t)}${encodeURIComponent(n)}/`;return r===`edit`?`${i}edit/`:i}function st(e,t,n,r){return`${P(e,t)}?${encodeURIComponent(n)}=${encodeURIComponent(r)}`}function ct(e,t){let n=new URLSearchParams(e);for(let e of t.fields){if(!at.has(e.type))continue;let t=n.get(e.name);if(t)return{field:e.name,equals:t}}}function lt(e){return e?.equals===void 0?``:`${encodeURIComponent(e.field)}=${encodeURIComponent(e.equals)}`}function ut(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 dt(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 ft(e){return e?.equals===void 0?{}:{[e.field]:e.equals}}var F=e=>typeof e==`number`&&Number.isSafeInteger(e)?e:null,pt=(e,t)=>e.fields.some(e=>e.name===t);function mt(e,t){let n=C(M(e)),r=ce(t,n);return Object.values(r).some(e=>F(e)!==null)?r:void 0}function ht(e,t){return!!e.fields.find(e=>e.name===`status`)?.enum?.includes(`draft`)&&typeof t.status==`string`&&t.status!==``&&t.status!==`draft`}function gt(e,t,n){if(!ht(e,t)||![`subtotal`,`taxAmount`,`totalAmount`,`discountTotal`].every(t=>pt(e,t)))return;let r=F(t.subtotal),i=F(t.taxAmount),a=F(t.totalAmount),o=F(t.discountTotal)??0;if(r===null||i===null||a===null)return;let s=l(t,`exclusive`);return{subtotal:r,discount:o,tax:i,total:a,lineAmountType:s,roundingScope:u(t,`line`),showNetSubtotal:s===`inclusive`,taxes:_(n,s).flatMap(e=>e.taxComponentId?[{taxComponentId:e.taxComponentId,name:e.name,percent:e.percent,taxable:e.taxable,tax:e.tax}]:[])}}var I=x();function L(e){let{source:t,href:n}=e;if(!t||!n)throw Error(`the planner widget context is missing`);return{source:t,href:n}}function R(e){let t=typeof e==`string`?p(e):void 0;if(!t)throw Error(`unknown model ${String(e)}`);return{model:t.model,packageId:t.pkg.id,path:P(t.pkg.id,t.model.name)}}var z=new Set([`foreignKey`,`crossPackageRef`]);function B(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||!z.has(s.type))throw Error(`${n.name} has no reference field ${o}`);return{field:o,id:i.id}}async function _t(e,t,n){return n?e.listWhere(t,n.field,n.id):e.list(t)}function vt(e,t,n){return e(n?st(t.packageId,t.model.name,n.field,n.id):t.path)}var V=e=>typeof e==`number`&&Number.isFinite(e);async function yt(e,t){let{source:n,href:r}=L(t),i=R(e.model),{model:a}=i,o=B(e,t,a),s=await _t(n,a,o),l=vt(r,i,o),u=typeof e.measure==`string`?e.measure:``;if(u===`count`||u===``)return{value:s.length,format:`integer`,href:l};let d=a.fields.find(t=>t.name===e.field);if(!d||d.type!==`integer`&&d.type!==`decimal`)throw Error(`${u} needs a numeric field of ${a.name}`);let f=s.map(e=>e[d.name]).filter(V),p=0;if(f.length){if(u===`sum`||u===`avg`)p=f.reduce((e,t)=>e+t,0),u===`avg`&&(p/=f.length);else if(u===`min`)p=Math.min(...f);else if(u===`max`)p=Math.max(...f);else throw Error(`unknown measure ${u}`)}let m=c(d);return{value:m?Math.round(p):p,format:m?`money`:d.type===`integer`?`integer`:`decimal`,...m?{currency:`USD`}:{},href:l}}function bt(e,t){return V(e)&&V(t)?e-t:String(e??``).localeCompare(String(t??``))}var xt=new Set([`createdAt`,`updatedAt`]),St=[`identifier`,`status`,`date`,`money`,`quantity`,`party`,`title`];function Ct(e=[]){return St.find(t=>e.includes(t))}function wt(e,t,n,r){let i=M(e),a=r?[r]:[],o=S(n);if(o.length===0)return Ve(i,t,{exclude:a,max:5});let s=[...He(i,t,{exclude:a}),...Ve(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=Ct(t[n]);return{key:n,label:z.has(r.type)?g(n.replace(/Id$/,``)):g(n),...a?{role:a}:{}}})}var Tt=new Set([`money`,`quantity`]);function Et(e,t){let n={};for(let r of e)(r.summarize??Tt.has(r.role))&&(n[r.key]=t.reduce((e,t)=>{let n=t[r.key];return V(n)?e+n:e},0));return n}function Dt(e,t){let n=w(M(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 Ot(e,t){let{source:n,href:r}=L(t),i=R(e.model),{model:a}=i,o=B(e,t,a),s=await _t(n,a,o);if(typeof e.sort==`string`&&e.sort){if(!a.fields.find(t=>t.name===e.sort)&&!xt.has(e.sort))throw Error(`${a.name} has no field ${e.sort}`);let t=s.some(t=>t[e.sort]!==void 0)?e.sort:It(a)?.name;if(t){let n=e.direction===`asc`?1:-1;s=[...s].sort((e,r)=>n*bt(e[t],r[t]))}}let c=wt(a,C(M(a)),e.columns,o?.field),l=V(e.limit)?e.limit:5,u=s.slice(0,l),d=a.fields.filter(e=>z.has(e.type)&&c.some(t=>t.key===e.name)),f=await de(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(m(r.related,n))??``]:[t.key,n??null]})),h=Et(c,s),g=!Me(a);return{rows:await Promise.all(u.map(async e=>({id:String(e.id),title:await ue(n,a,e,0,o?.field),...g?{href:r(ot(i.packageId,a.name,String(e.id)))}:{},cells:p(e)}))),total:s.length,...g?{href:vt(r,i,o)}:{},columns:c,currency:Dt(a,s),...Object.keys(h).length?{summaries:h}:{}}}var kt={"7d":7,"30d":30,"90d":90,"12m":365,all:null},At=864e5;function jt(e){return e===`7d`||e===`30d`?`day`:e===`90d`?`week`:`month`}function Mt(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*At:r}function Nt(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)*At}function Pt(e,t){let n=new Date(e).toISOString();return t===`month`?n.slice(0,7):n.slice(0,10)}var Ft=e=>e.type===`datetime`&&!e.system;function It(e){let t=e.fields.filter(Ft);return t.find(e=>/^(issue|order|start|created)/i.test(e.name))??t[0]}function H(e){if(typeof e!=`string`&&typeof e!=`number`)return;let t=new Date(e).getTime();return Number.isFinite(t)?t:void 0}async function Lt(e,t){let{source:n,href:r}=L(t),i=R(e.model),{model:a}=i,o=B(e,t,a),s=typeof e.groupBy==`string`?e.groupBy:``,l=s?a.fields.find(e=>e.name===s):It(a);if(!l)throw Error(s?`${a.name} has no field ${s}`:`${a.name} has no date field to chart; choose a group-by field`);let u=typeof e.measure==`string`?e.measure:``,d;if(u&&u!==`count`){if(u!==`sum`&&u!==`avg`)throw Error(`unknown measure ${u}`);if(d=a.fields.find(t=>t.name===e.field),!d||d.type!==`integer`&&d.type!==`decimal`)throw Error(`${u} needs a numeric field of ${a.name}`)}let f=typeof e.period==`string`?e.period:`30d`;if(!Object.hasOwn(kt,f))throw Error(`unknown period ${f}`);let p=kt[f],m=Ft(l),h=m?l:It(a),g=p!==null&&h?v-p*At:-1/0,_=await _t(n,a,o);h&&g!==-1/0&&(_=_.filter(e=>{let t=H(e[h.name]);return t!==void 0&&t>=g&&t<=v}));let y=new Map,b=(e,t,n)=>{let r=y.get(e)??{key:t,sum:0,n:0};if(d){let e=n[d.name];if(!V(e))return;r.sum+=e}r.n+=1,y.set(e,r)},x=jt(f);if(m){let e=g===-1/0?Math.min(..._.map(e=>H(e[l.name])??v),v):g;for(let t=Mt(e,x);t<=v;t=Nt(t,x))y.set(Pt(t,x),{key:t,sum:0,n:0});for(let e of _){let t=H(e[l.name]);if(t===void 0)continue;let n=Mt(t,x);b(Pt(n,x),n,e)}}else for(let e of _){let t=e[l.name],n=t==null||t===``?`(none)`:String(t);b(n,n,e)}let S=d?c(d):!1,C=e=>{if(!d)return e.n;let t=u===`avg`&&e.n?e.sum/e.n:e.sum;return S?Math.round(t):t},w=[...y.entries()].map(([e,t])=>({label:e,value:C(t),key:t.key}));return w=m?w.sort((e,t)=>Number(e.key)-Number(t.key)):w.sort((e,t)=>t.value-e.value||e.label.localeCompare(t.label)),{points:w.map(({label:e,value:t})=>({label:e,value:t})),format:d?S?`money`:d.type===`integer`?`integer`:`decimal`:`integer`,...S?{currency:`USD`}:{},href:vt(r,i,o)}}var Rt=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=>dt(t.scope,e)).length}}))};fe(I,{metric:yt,records:Ot,chart:Lt,shortcuts:Rt,shortcuts:it(Rt)});function zt(e){let{relations:t,viewAllHref:n}=e;if(!t)throw Error(`the record page context is missing`);return{relations:t,records:Ot,viewAllHref:n}}async function Bt(e,t){let{source:n}=L(e),r=e.record;if(!r?.id)throw Error(`line items need a record`);let{model:i}=R(r.model),a=await n.get(i,r.id);if(!a)return{};let o=t.find(e=>e.kind===`items`),s=o?p(o.model)?.model:void 0,c=gt(i,a,o&&s?await n.listWhere(s,o.field,r.id):[]),l=c?void 0:mt(i,a),u=w(M(i)),d=u?a[u]:void 0;return{...c?{storedTotals:c}:{},...l?{totals:l}:{},...typeof d==`string`&&d?{currency:d}:{}}}I.register(ie((e,t)=>ae(zt(t))(e,t))),I.register(se(async(e,t)=>{let n=zt(t),{totals:r,storedTotals:i,currency:a}=await Bt(t,n.relations);return he({...n,totals:()=>r,storedTotals:()=>i,currency:()=>a})(e,t)}));var Vt=[`shortcuts`,`metric`,`records`,`chart`,`note`],Ht={},Ut=async(e,t)=>{let n=Ht[e];if(n)return(await n())[t]},Wt=E.filter(e=>e.surfaces?.some(e=>e.kind===`widget`)),Gt=Wt.flatMap(e=>(e.surfaces??[]).flatMap(e=>e.kind===`widget`?[e.type]:[]));Re(I,Wt,Ut);var Kt=new Map(ye(E).map(e=>[`section:${e.id}`,e])),qt=h.packages.flatMap(e=>e.models.map(e=>e.id)),Jt=[...Vt,...Gt];function Yt(e){let t=Kt.get(e);for(let e of t?.recipes??[]){let t=Ne(e)[0];if(t)return{id:t.model.id,name:g(t.model.name)}}}function Xt(e){let t=[{id:`shortcuts`,type:`shortcuts`,span:4,options:{}}],n=Yt(e);return n&&t.push({id:`count`,type:`metric`,span:1,options:{title:d(n.name),model:n.id,measure:`count`}},{id:`latest`,type:`records`,span:3,options:{title:`${n.name} records`,model:n.id,limit:5}}),t}var Zt=new Map;function Qt(e){if(!ee.test(e))return;let t=Zt.get(e);return t||(t=T({id:e,allowed:Jt,models:qt,defaults:Xt(e)}),Zt.set(e,t)),t}function $t(e,t){return`detail:${e}.${t}`}var en=new Map(h.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(t=>[ne(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?f(t,n):void 0;return t&&r?.exposed?{packageId:t,model:r}:en.get(e)}var tn=new Set(h.packages.flatMap(e=>e.models.filter(e=>e.exposed).map(e=>e.id))),nn=new Map;function rn(e){let t=nn.get(e);if(t)return t;let n=U(e);if(!n)return;let r=N(h,n.model.id,tn),i=me(M(n.model),r,{id:e,maxMetrics:2*r.length});return t=T({...i,maxWidgets:Math.max(i.maxWidgets??24,i.defaults.length+24)}),nn.set(e,t),t}function an(e,t){let n=rn(e),r=U(e);if(!n||!r)return;let i=N(h,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 T({...n,defaults:o})}function on(e){return e.startsWith(`detail:`)?rn(e):Qt(e)}function sn(e,t){return Kt.has(e)||e===`section:${Oe.id}`?!0:e.startsWith(`detail:`)?U(e)!==void 0:e.startsWith(`custom:`)&&ee.test(e)&&(t?.customSections??[]).some(t=>t.id===e)}var cn=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function ln(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 un(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 dn(e,t){let n=on(e);if(!n)return{override:null,issues:[{widgetId:null,type:null,code:`malformed`,message:`not an overview id`}]};let r=le(n,t,I);if(r.ok)return{override:r.override,issues:[]};let i=te(t),a=new Set(r.issues.flatMap(e=>e.widgetId?[e.widgetId]:[]));if(!i.override)return{override:null,issues:r.issues};let o=le(n,un(i.override,a),I);return o.ok?{override:o.override,issues:r.issues}:{override:null,issues:[...r.issues,...o.issues]}}function fn(e,t){if(!cn(e))return null;let n=[],r=[];for(let i of Object.keys(e).sort()){if(!sn(i,t)){r.push(`Overview ${i} is not a page in this app and was dropped.`);continue}let{override:a,issues:o}=dn(i,e[i]);for(let e of o)r.push(ln(i,e));a&&n.push([i,a])}return{overviews:Object.fromEntries(n),dropped:r}}var W=b,pn=`glass`,mn=`system`,hn=[`light`,`dark`,`system`],gn=[`none`,`sm`,`md`,`lg`,`xl`,`full`],_n=[`comfortable`,`touch`],vn=[`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`},yn=/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;function bn(e){if(typeof e!=`string`)return null;let t=yn.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 xn=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function Sn(e){if(e===void 0)return{ok:!0,theme:void 0};if(!xn(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(!hn.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`,gn],[`density`,_n],[`contrast`,vn]]){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(!xn(e.custom))return{ok:!1,error:`The theme "custom" must be an object.`};let n=bn(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 Cn(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 wn(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 Tn(e,t=Pe(E)){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 En(e,t=E){let n=new Map;for(let e of t){let t=be(e).id;for(let r of Ne(e))r.key&&n.set(`${K}${t}:${r.packageId}:${r.model.name}:${r.label}`,ge(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:ge(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`,Dn=new Set([`basic`,`advanced`,`hidden`]),On=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 kn(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`&&Dn.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 An(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 jn(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=>!O.has(e)),i=[...new Set([...Ee(e.recipes.filter(e=>O.has(e)),O),...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=>O.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=kn(n,`policies[${t}]`);if(typeof e==`string`)return J(`Invalid cookbook: ${e}.`);(o.has(e.objectRef)||we(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=>On.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=An(e.layout);if(typeof t==`string`)return J(`Invalid cookbook: ${t}.`);l=En(Tn(t))}let u;if(e.theme!==void 0){let n=Sn(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 Mn=e=>({ok:!1,error:e});function Nn(e,t={}){return jn(e,{...t,overviews:fn})}function Pn(e,t={}){let n;try{n=JSON.parse(e)}catch{return Mn(`This file is not valid JSON.`)}try{return Nn(n,t)}catch{return Mn(`This file is not a valid cookbook.`)}}var Z=`smrt-planner:cookbook-doc:v1`,Fn=`smrt-planner:blueprint:v1`,In=`smrt-planner:cookbook-doc:unreadable`;function Ln(){try{return globalThis.localStorage??null}catch{return null}}function Rn(e){if(!e)return{status:`unavailable`};let t;try{t=e.getItem(Z)}catch{return{status:`unavailable`}}let n=null;try{n=e.getItem(Fn)}catch{}let r=t===null&&n!==null,i=r?n:t;if(i===null)return{status:`empty`};let a=Pn(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,In,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 zn(e,t){if(!e)return!1;try{return e.removeItem(t),!0}catch{return!1}}function Bn(e,t){return Q(e,Z,JSON.stringify(t))}function Vn(e,t={}){let n={$schema:q,version:1,...Ae(e)};t.name&&(n.name=t.name),t.description&&(n.description=t.description),t.layout&&(n.layout=t.layout);let r=Cn(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 Hn=new Set([`basic`,`advanced`,`hidden`]),Un=new Set([`api`,`mcp`,`cli`]);function Wn(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 Gn(e){let t=new URLSearchParams(e);return t.has(`r`)||t.has(`o`)}function Kn(e){let t={rows:[],narrowed:{}};if(!e)return t;let n;try{n=JSON.parse(Wn(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`&&Hn.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=>Un.has(e));n.length&&(i[e]=n)}return{rows:r,narrowed:i}}function qn(e){let t=new URLSearchParams(e),n=(t.get(`r`)??``).split(`,`).filter(Boolean),r=Ee(ke(n,O),O),i=new Set(r.flatMap(e=>O.get(e)?.models??[])),{rows:a,narrowed:o}=Kn(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 Jn=`smrt-planner:shell`;function $(e){let t=je(e),n=e.policies.some(e=>e.defaultValue!==void 0&&we(e));s(De(e)||n?t.taxRate:void 0),a({pricesIncludeTax:t.pricesIncludeTax,taxRounding:t.taxRounding,currency:t.currency})}var Yn=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 Vn(n(D.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=y(e)?void 0:e}apply(e){D.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=[...D.unavailableRecipes,...D.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(){D.removeUnavailable(),this.scheduleSave()}setTheme(e){this.theme=Cn(e)}settings(){return je(this.snapshot())}setSettings(e){let t=Te(this.snapshot(),e);D.rows=t.policies.map(e=>({...e})),$(t)}replace(e){this.apply(e),this.loaded||(this.replacedBeforeLoad=!0),this.saveBlocked=!1,this.keepLegacyUrl=!1}reset(){D.clear(),$({policies:[]}),this.layout=void 0,this.theme=void 0,this.name=void 0,this.description=void 0,this.overviews={};try{globalThis.localStorage?.removeItem(Jn)}catch{}this.saveBlocked=!1,this.keepLegacyUrl=!1}importText(e){let t=Pn(e);return t.ok&&this.replace(t.cookbook),t}hydrate(e,t=Ln()){this.storage=t;let n=Rn(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(Gn(e)&&(n.status===`loaded`&&!Q(t,`smrt-planner:cookbook-doc:backup`,JSON.stringify(n.cookbook))&&(this.saveBlocked=!0),this.apply(qn(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=Bn(this.storage,this.snapshot());return this.persist=e?`ok`:`memory`,e&&this.previousKept&&(this.previousKept=!zn(this.storage,Fn)),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{nt as A,ut as C,ct as D,P as E,N as M,M as N,lt as O,Qe as P,dt as S,st as T,bn as _,Ln as a,Qt as b,q as c,mn as d,pn as f,wn as g,W as h,Z as i,$e as j,ot as k,gn as l,G as m,Yn as n,Nn as o,_n as p,$ as r,Pn as s,Jn as t,vn as u,an as v,ft as w,I as x,$t as y};
@@ -1 +1 @@
1
- import"./DG3qFFTE.js";import{s as e}from"./Bm8jjb_e.js";var t={get data(){return e.data},get error(){return e.error},get form(){return e.form},get params(){return e.params},get route(){return e.route},get state(){return e.state},get status(){return e.status},get url(){return e.url}};export{t};
1
+ import"./DG3qFFTE.js";import{c as e}from"./Burj9UYU.js";var t={get data(){return e.data},get error(){return e.error},get form(){return e.form},get params(){return e.params},get route(){return e.route},get state(){return e.state},get status(){return e.status},get url(){return e.url}};export{t};
@@ -1 +1 @@
1
- import{$ as e,B as t,Dt as n,Ft as r,G as i,H as a,L as o,Ot as s,U as c,W as l,ft as u,ht as d,mt as f,pt as p,st as m,v as h}from"./DG3qFFTE.js";import"./xihTtKlq.js";import{t as g}from"./CqPgazbY.js";import{et as _}from"./C0ucZoOF.js";import{t as v}from"./BZhu4b2K.js";var y=i(`<li><a class="svelte-ra5apm"> </a></li> <li><a class="svelte-ra5apm"> </a></li>`,1),b=i(`<details class="menu svelte-ra5apm"><summary class="svelte-ra5apm"><!></summary> <ul class="svelte-ra5apm"></ul></details>`);function x(i,x){s(x,!0);var S=l(),C=p(S),w=e=>{v(e,{get section(){return x.groups[0].id},get label(){return x.groups[0].label},compact:!0})},T=t=>{var n=b(),i=u(n),s=u(i);_(s,{path:`M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.488.488 0 0 0-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.49.49 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z`,size:16}),r(i);var l=d(i,2);o(l,21,()=>x.groups,e=>e.id,(t,n)=>{var i=y(),o=p(i),s=u(o),l=f(s);r(o);var _=d(o,2),v=u(_),b=f(v);r(_),m((t,r)=>{h(s,`href`,t),a(l,`${e(n).label??``} options`),h(v,`href`,r),a(b,`${e(n).label??``} help`)},[()=>g(`/recipes/${e(n).id}/`),()=>g(`/recipes/${e(n).id}/help/`)]),c(t,i)}),r(l),r(n),m(()=>{h(i,`title`,`${x.label} options and help`),h(i,`aria-label`,`${x.label} options and help`)}),c(t,n)};t(C,e=>{x.groups.length===1?e(w):x.groups.length>1&&e(T,1)}),c(i,S),n()}export{x as t};
1
+ import{$ as e,B as t,Dt as n,Ft as r,G as i,H as a,L as o,Ot as s,U as c,W as l,ft as u,ht as d,mt as f,pt as p,st as m,v as h}from"./DG3qFFTE.js";import"./xihTtKlq.js";import{t as g}from"./gnVUq1Tr.js";import{et as _}from"./B6GaAylQ.js";import{t as v}from"./VCg3x54j.js";var y=i(`<li><a class="svelte-ra5apm"> </a></li> <li><a class="svelte-ra5apm"> </a></li>`,1),b=i(`<details class="menu svelte-ra5apm"><summary class="svelte-ra5apm"><!></summary> <ul class="svelte-ra5apm"></ul></details>`);function x(i,x){s(x,!0);var S=l(),C=p(S),w=e=>{v(e,{get section(){return x.groups[0].id},get label(){return x.groups[0].label},compact:!0})},T=t=>{var n=b(),i=u(n),s=u(i);_(s,{path:`M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.488.488 0 0 0-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54a.484.484 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.49.49 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z`,size:16}),r(i);var l=d(i,2);o(l,21,()=>x.groups,e=>e.id,(t,n)=>{var i=y(),o=p(i),s=u(o),l=f(s);r(o);var _=d(o,2),v=u(_),b=f(v);r(_),m((t,r)=>{h(s,`href`,t),a(l,`${e(n).label??``} options`),h(v,`href`,r),a(b,`${e(n).label??``} help`)},[()=>g(`/recipes/${e(n).id}/`),()=>g(`/recipes/${e(n).id}/help/`)]),c(t,i)}),r(l),r(n),m(()=>{h(i,`title`,`${x.label} options and help`),h(i,`aria-label`,`${x.label} options and help`)}),c(t,n)};t(C,e=>{x.groups.length===1?e(w):x.groups.length>1&&e(T,1)}),c(i,S),n()}export{x as t};
@@ -1 +1 @@
1
- import{t as e}from"./_V0EAIDV.js";var t=new Map;function n(n,r){if(e())return 0;if(typeof document>`u`)return r;let i=t.get(n);if(i!==void 0)return i;let a=getComputedStyle(document.documentElement).getPropertyValue(`--smrt-duration-${n}`).trim(),o=/^([\d.]+)(ms|s)$/.exec(a),s=o?Number(o[1])*(o[2]===`s`?1e3:1):r;return t.set(n,s),s}export{n as t};
1
+ import{t as e}from"./C7z2g6fG.js";var t=new Map;function n(n,r){if(e())return 0;if(typeof document>`u`)return r;let i=t.get(n);if(i!==void 0)return i;let a=getComputedStyle(document.documentElement).getPropertyValue(`--smrt-duration-${n}`).trim(),o=/^([\d.]+)(ms|s)$/.exec(a),s=o?Number(o[1])*(o[2]===`s`?1e3:1):r;return t.set(n,s),s}export{n as t};