@happyvertical/smrt-planner 0.57.6 → 0.57.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/assistant.md +29 -2
- package/agents/shell.md +13 -0
- package/app/404.html +26 -29
- package/app/_app/immutable/assets/0.BaRFeYGU.css +1 -0
- package/app/_app/immutable/assets/AppShell.BkKNrxND.css +1 -0
- package/app/_app/immutable/assets/{ModelPage.FEM0ZnPM.css → ModelPage.SIoeO-AU.css} +1 -1
- package/app/_app/immutable/assets/app.BHwMQ9Zv.css +1 -0
- package/app/_app/immutable/assets/{forms.DXOeP4wZ.css → forms.BRdbPdvs.css} +1 -1
- package/app/_app/immutable/assets/icons.BDx21rPt.css +1 -0
- package/app/_app/immutable/assets/labels.Dxa6EyRI.css +1 -0
- package/app/_app/immutable/assets/planner.DOQVfcOi.css +1 -0
- package/app/_app/immutable/assets/state.C0UZEhxS.css +1 -0
- package/app/_app/immutable/chunks/{BPsie9Wr.js → B2uXaQfZ.js} +1 -1
- package/app/_app/immutable/chunks/{D2Ykv2Y3.js → BQLQsso4.js} +1 -1
- package/app/_app/immutable/chunks/BdOPgmQ_.js +11 -0
- package/app/_app/immutable/chunks/BeL8dJx9.js +4 -0
- package/app/_app/immutable/chunks/{DypPefJO.js → Bhd-3niN.js} +1 -1
- package/app/_app/immutable/chunks/{exPME6UK.js → BqEBz5Vq.js} +1 -1
- package/app/_app/immutable/chunks/{GdHEbDDH.js → BxyJ_Q7v.js} +1 -1
- package/app/_app/immutable/chunks/{Dyf3Cj8R.js → C2OYATC6.js} +1 -1
- package/app/_app/immutable/chunks/C6AANt9H.js +26 -0
- package/app/_app/immutable/chunks/{0as86J1A.js → C8FX0hli.js} +6 -6
- package/app/_app/immutable/chunks/{BSYvnYu8.js → CYhwv6d2.js} +1 -1
- package/app/_app/immutable/chunks/CdKHckEF.js +1 -0
- package/app/_app/immutable/chunks/CsaWd8kG.js +2 -0
- package/app/_app/immutable/chunks/Cwz7QFS4.js +2 -0
- package/app/_app/immutable/chunks/{CoXf-L_3.js → D3lXu_rt.js} +25 -25
- package/app/_app/immutable/chunks/{PsiVGwJV.js → D8MqcCKq.js} +1 -1
- package/app/_app/immutable/chunks/DF-0MxNw.js +1 -0
- package/app/_app/immutable/chunks/DGaFQflg.js +1 -0
- package/app/_app/immutable/chunks/DIgo5ngo.js +1 -0
- package/app/_app/immutable/chunks/{CdlkzC7D.js → Db12RzZi.js} +1 -1
- package/app/_app/immutable/chunks/{eNZ3ToP2.js → DfN2k_EX.js} +1 -1
- package/app/_app/immutable/chunks/DmHVTNcC.js +4 -0
- package/app/_app/immutable/chunks/{DrjdLb0M.js → DmdvNG82.js} +2 -2
- package/app/_app/immutable/chunks/{CwNhmq3e.js → DwIRC3h5.js} +1 -1
- package/app/_app/immutable/chunks/{Dzh-1KQR.js → FeyhlLIZ.js} +1 -1
- package/app/_app/immutable/chunks/ICDFUCZL.js +2 -0
- package/app/_app/immutable/chunks/{D31rqKs1.js → IDZmjRDr.js} +1 -1
- package/app/_app/immutable/chunks/JqlEoPqZ.js +1 -0
- package/app/_app/immutable/chunks/{D8rEUyzO.js → TcjpRcdI.js} +1 -1
- package/app/_app/immutable/chunks/Vt9hDpHd.js +1 -0
- package/app/_app/immutable/chunks/ezs6CGyc.js +1 -0
- package/app/_app/immutable/chunks/lUJaueNM.js +16 -0
- package/app/_app/immutable/entry/app.C5bxPKCP.js +2 -0
- package/app/_app/immutable/entry/start.CZvO61qD.js +1 -0
- package/app/_app/immutable/nodes/0.DFJFBCCB.js +7 -0
- package/app/_app/immutable/nodes/{1.CTatAlE5.js → 1.D_79m87b.js} +1 -1
- package/app/_app/immutable/nodes/{10.DHnK3kbB.js → 10.20u2-jxn.js} +1 -1
- package/app/_app/immutable/nodes/{11.Ck1kcQLu.js → 11.CvMq32jC.js} +1 -1
- package/app/_app/immutable/nodes/{12.oK17D56_.js → 12.Cd0cy1AC.js} +1 -1
- package/app/_app/immutable/nodes/{13.DlEsuw6F.js → 13.DYYS3YVQ.js} +1 -1
- package/app/_app/immutable/nodes/14.BEf5BJDn.js +1 -0
- package/app/_app/immutable/nodes/2.C_kLkHNl.js +24 -0
- package/app/_app/immutable/nodes/{3.DOL1VeVM.js → 3.CZw3hv8O.js} +1 -1
- package/app/_app/immutable/nodes/{4.CiKq5-ek.js → 4.WMU9NDex.js} +1 -1
- package/app/_app/immutable/nodes/{5.nKUg_W9L.js → 5.CuqxSfl4.js} +1 -1
- package/app/_app/immutable/nodes/{6.CVGw-hLa.js → 6.BXLQB7tR.js} +1 -1
- package/app/_app/immutable/nodes/{7.Clo6kG4w.js → 7.BZvxNeL2.js} +1 -1
- package/app/_app/immutable/nodes/{8.C3moca98.js → 8.Bj2O4pyx.js} +1 -1
- package/app/_app/immutable/nodes/{9.BnVJx5kW.js → 9.yeFzeUHj.js} +1 -1
- package/app/_app/version.json +1 -1
- package/app/advanced-styles/index.html +32 -33
- package/app/ai/index.html +37 -38
- package/app/blueprint/index.html +27 -30
- package/app/cookbook/index.html +27 -30
- package/app/index.html +36 -39
- package/app/m/ads/AdDeliveryTier/index.html +34 -35
- package/app/m/ads/AdEvent/index.html +34 -35
- package/app/m/ads/AdFormat/index.html +34 -35
- package/app/m/ads/AdGroup/index.html +34 -35
- package/app/m/ads/AdVariation/index.html +34 -35
- package/app/m/analytics/AnalyticsDataStream/index.html +34 -35
- package/app/m/analytics/AnalyticsEvent/index.html +34 -35
- package/app/m/analytics/AnalyticsProperty/index.html +34 -35
- package/app/m/analytics/AnalyticsReport/index.html +34 -35
- package/app/m/approvals/ApprovalEvent/index.html +34 -35
- package/app/m/approvals/ApprovalPolicy/index.html +34 -35
- package/app/m/approvals/ApprovalRequest/index.html +34 -35
- package/app/m/assets/Asset/attachments/index.html +36 -37
- package/app/m/assets/Asset/index.html +34 -35
- package/app/m/assets/AssetAssociation/index.html +35 -36
- package/app/m/assets/AssetMetafield/index.html +34 -35
- package/app/m/assets/AssetStatus/index.html +34 -35
- package/app/m/assets/AssetType/index.html +34 -35
- package/app/m/assets/Folder/index.html +34 -35
- package/app/m/chat/AgentSession/index.html +34 -35
- package/app/m/chat/ChatMessage/index.html +35 -36
- package/app/m/chat/ChatParticipant/index.html +35 -36
- package/app/m/chat/ChatReaction/index.html +34 -35
- package/app/m/chat/ChatRoom/index.html +34 -35
- package/app/m/chat/ChatThread/index.html +35 -36
- package/app/m/chat/VoiceGatewayTurn/index.html +34 -35
- package/app/m/chat/VoiceSession/index.html +34 -35
- package/app/m/commerce/Agreement/index.html +34 -35
- package/app/m/commerce/Cart/index.html +34 -35
- package/app/m/commerce/Contract/index.html +34 -35
- package/app/m/commerce/ContractLineItem/index.html +35 -36
- package/app/m/commerce/Customer/index.html +34 -35
- package/app/m/commerce/DocumentTax/index.html +34 -35
- package/app/m/commerce/Estimate/index.html +34 -35
- package/app/m/commerce/Fulfillment/index.html +34 -35
- package/app/m/commerce/FulfillmentLineItem/index.html +35 -36
- package/app/m/commerce/HistoricalCustomerFunds/index.html +34 -35
- package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +34 -35
- package/app/m/commerce/HistoricalSalesLine/index.html +34 -35
- package/app/m/commerce/Invoice/index.html +34 -35
- package/app/m/commerce/InvoiceLineItem/index.html +35 -36
- package/app/m/commerce/Lease/index.html +34 -35
- package/app/m/commerce/LicenseSale/index.html +34 -35
- package/app/m/commerce/Order/index.html +34 -35
- package/app/m/commerce/Payment/index.html +34 -35
- package/app/m/commerce/PaymentAllocation/index.html +35 -36
- package/app/m/commerce/PaymentInstrument/index.html +34 -35
- package/app/m/commerce/PaymentIntent/index.html +34 -35
- package/app/m/commerce/Payout/index.html +34 -35
- package/app/m/commerce/ProductionOrder/index.html +34 -35
- package/app/m/commerce/PurchaseContract/index.html +34 -35
- package/app/m/commerce/PurchaseOrder/index.html +34 -35
- package/app/m/commerce/SalesContract/index.html +34 -35
- package/app/m/commerce/SupplierQuote/index.html +34 -35
- package/app/m/commerce/TaxCode/index.html +34 -35
- package/app/m/commerce/TaxComponent/index.html +34 -35
- package/app/m/commerce/TaxSettings/index.html +34 -35
- package/app/m/commerce/TaxSummaryReport/index.html +34 -35
- package/app/m/commerce/Vendor/index.html +34 -35
- package/app/m/commerce/WholesaleOrder/index.html +34 -35
- package/app/m/content/Content/index.html +34 -35
- package/app/m/content/ContentContribution/index.html +34 -35
- package/app/m/content/ContentContributionAttachment/index.html +34 -35
- package/app/m/content/ContentContributionRevision/index.html +34 -35
- package/app/m/content/ContentContributionType/index.html +34 -35
- package/app/m/content/ContentContributor/index.html +34 -35
- package/app/m/content/ContentCorrection/index.html +34 -35
- package/app/m/content/ContentFeedSource/index.html +34 -35
- package/app/m/content/ContentGovernanceAssignment/index.html +34 -35
- package/app/m/content/ContentGovernancePolicy/index.html +34 -35
- package/app/m/content/ContentGovernanceProfile/index.html +34 -35
- package/app/m/content/ContentReference/index.html +34 -35
- package/app/m/content/ContentReview/index.html +34 -35
- package/app/m/content/ContentVersion/index.html +34 -35
- package/app/m/events/Event/index.html +34 -35
- package/app/m/events/EventParticipant/index.html +35 -36
- package/app/m/events/EventSeries/index.html +34 -35
- package/app/m/events/EventType/index.html +34 -35
- package/app/m/expenses/Expense/index.html +34 -35
- package/app/m/facts/Fact/index.html +34 -35
- package/app/m/facts/FactContent/index.html +34 -35
- package/app/m/facts/FactEvidence/index.html +34 -35
- package/app/m/facts/FactSource/index.html +34 -35
- package/app/m/facts/FactSubject/index.html +34 -35
- package/app/m/facts/FactTag/index.html +34 -35
- package/app/m/fields/FieldPolicy/index.html +34 -35
- package/app/m/fields/FieldPolicySuggestion/index.html +34 -35
- package/app/m/fields/FieldUsageCounter/index.html +34 -35
- package/app/m/images/Image/index.html +34 -35
- package/app/m/inventory/InventoryLocation/index.html +34 -35
- package/app/m/inventory/StockLevel/index.html +34 -35
- package/app/m/inventory/StockMovement/index.html +34 -35
- package/app/m/ledgers/Account/index.html +34 -35
- package/app/m/ledgers/Journal/index.html +34 -35
- package/app/m/ledgers/JournalEntry/index.html +35 -36
- package/app/m/ledgers/Ledger/index.html +34 -35
- package/app/m/manufacturing/Assembly/index.html +34 -35
- package/app/m/manufacturing/BillOfMaterials/index.html +34 -35
- package/app/m/manufacturing/BomLine/index.html +34 -35
- package/app/m/manufacturing/Operation/index.html +34 -35
- package/app/m/manufacturing/ProductionRun/index.html +34 -35
- package/app/m/manufacturing/ProductionRunCompletion/index.html +34 -35
- package/app/m/manufacturing/RoutingStep/index.html +34 -35
- package/app/m/marketing/Campaign/index.html +34 -35
- package/app/m/marketing/CampaignChannel/index.html +34 -35
- package/app/m/marketing/CampaignMetricSnapshot/index.html +34 -35
- package/app/m/messages/Account/index.html +34 -35
- package/app/m/messages/Attachment/index.html +34 -35
- package/app/m/messages/Blacklist/index.html +34 -35
- package/app/m/messages/Email/failed-sends/index.html +36 -37
- package/app/m/messages/Email/index.html +34 -35
- package/app/m/messages/Email/mailbox/index.html +36 -37
- package/app/m/messages/EmailAccount/index.html +34 -35
- package/app/m/messages/EmailAttachment/index.html +34 -35
- package/app/m/messages/EmailFolder/index.html +34 -35
- package/app/m/messages/Message/index.html +34 -35
- package/app/m/messages/MessagingEndpoint/index.html +34 -35
- package/app/m/messages/PersonaMessageRoute/index.html +34 -35
- package/app/m/messages/SlackAccount/index.html +34 -35
- package/app/m/messages/SlackMessage/index.html +34 -35
- package/app/m/messages/TelegramAccount/index.html +34 -35
- package/app/m/messages/Tweet/index.html +34 -35
- package/app/m/messages/TwitterAccount/index.html +34 -35
- package/app/m/messages/Whitelist/index.html +34 -35
- package/app/m/messages/ZulipAccount/index.html +34 -35
- package/app/m/places/Place/index.html +34 -35
- package/app/m/places/PlaceType/index.html +34 -35
- package/app/m/products/Category/index.html +34 -35
- package/app/m/products/Material/index.html +34 -35
- package/app/m/products/Product/index.html +34 -35
- package/app/m/products/Product/ingredients/index.html +36 -37
- package/app/m/products/ProductVariant/index.html +35 -36
- package/app/m/products/Sku/index.html +35 -36
- package/app/m/profiles/ApiKey/index.html +34 -35
- package/app/m/profiles/Bot/index.html +34 -35
- package/app/m/profiles/MagicLinkToken/index.html +34 -35
- package/app/m/profiles/NostrIdentity/index.html +34 -35
- package/app/m/profiles/OidcIdentity/index.html +34 -35
- package/app/m/profiles/Organization/index.html +34 -35
- package/app/m/profiles/Person/index.html +34 -35
- package/app/m/profiles/Profile/index.html +34 -35
- package/app/m/profiles/ProfileMetadata/index.html +34 -35
- package/app/m/profiles/ProfileMetafield/index.html +34 -35
- package/app/m/profiles/ProfileRelationship/index.html +34 -35
- package/app/m/profiles/ProfileRelationshipTerm/index.html +34 -35
- package/app/m/profiles/ProfileRelationshipType/index.html +34 -35
- package/app/m/profiles/ProfileType/index.html +34 -35
- package/app/m/projects/Comment/index.html +35 -36
- package/app/m/projects/Issue/index.html +34 -35
- package/app/m/projects/Label/index.html +34 -35
- package/app/m/projects/Project/index.html +34 -35
- package/app/m/projects/ProjectIntegration/index.html +34 -35
- package/app/m/projects/PullRequest/index.html +34 -35
- package/app/m/projects/Repository/index.html +34 -35
- package/app/m/properties/Property/index.html +34 -35
- package/app/m/properties/Zone/index.html +34 -35
- package/app/m/reports/RuntimeReport/index.html +38 -36
- package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +34 -35
- package/app/m/reports/SmrtReportLock/index.html +34 -35
- package/app/m/reports/SmrtReportRefreshTask/index.html +34 -35
- package/app/m/reports/SmrtReportRun/index.html +34 -35
- package/app/m/reports/SmrtReportSchedule/index.html +34 -35
- package/app/m/reports/SmrtReportWatermark/index.html +34 -35
- package/app/m/sales/Agreement/index.html +34 -35
- package/app/m/sales/AttributionException/index.html +34 -35
- package/app/m/sales/AttributionPolicy/index.html +34 -35
- package/app/m/sales/Commission/index.html +34 -35
- package/app/m/sales/CommissionAdjustment/index.html +34 -35
- package/app/m/sales/CommissionPayout/index.html +34 -35
- package/app/m/sales/CommissionPlan/index.html +34 -35
- package/app/m/sales/Earner/index.html +34 -35
- package/app/m/sales/EarnerSourceAttribution/index.html +34 -35
- package/app/m/sales/EarningEvent/index.html +34 -35
- package/app/m/sales/ExecutedAgreement/index.html +34 -35
- package/app/m/sales/Lead/index.html +34 -35
- package/app/m/sales/Opportunity/index.html +34 -35
- package/app/m/sales/OpportunityConversion/index.html +34 -35
- package/app/m/sales/PipelineDefinition/index.html +34 -35
- package/app/m/sales/PipelineStage/index.html +35 -36
- package/app/m/sales/Referral/index.html +34 -35
- package/app/m/sales/ReferralAgreement/index.html +34 -35
- package/app/m/sales/ReferralLink/index.html +34 -35
- package/app/m/sales/ReferralProgram/index.html +34 -35
- package/app/m/sales/ReferralTermSnapshot/index.html +34 -35
- package/app/m/sales/ReferralTouch/index.html +34 -35
- package/app/m/sales/Referrer/index.html +34 -35
- package/app/m/sales/SalesActivity/index.html +34 -35
- package/app/m/sales/SalesRepresentative/index.html +34 -35
- package/app/m/sites/Site/index.html +34 -35
- package/app/m/sites/SiteAgentBinding/index.html +34 -35
- package/app/m/social/OAuthState/index.html +34 -35
- package/app/m/social/SocialAccount/index.html +34 -35
- package/app/m/social/SocialPost/index.html +34 -35
- package/app/m/social/SocialPostAnalyticsSnapshot/index.html +34 -35
- package/app/m/subscriptions/BillingAdjustment/index.html +34 -35
- package/app/m/subscriptions/ClientCharge/index.html +34 -35
- package/app/m/subscriptions/CreditGrant/index.html +34 -35
- package/app/m/subscriptions/PricingRule/index.html +34 -35
- package/app/m/subscriptions/RetailCharge/index.html +34 -35
- package/app/m/subscriptions/SpendingPolicy/index.html +34 -35
- package/app/m/subscriptions/SubscriptionPlan/index.html +34 -35
- package/app/m/subscriptions/TenantSubscription/index.html +34 -35
- package/app/m/subscriptions/TenantUsageMetric/index.html +34 -35
- package/app/m/support/ServiceTimeEntry/index.html +34 -35
- package/app/m/support/SupportAiRun/index.html +34 -35
- package/app/m/support/SupportAvailability/index.html +34 -35
- package/app/m/support/SupportCase/index.html +34 -35
- package/app/m/support/SupportCaseEvent/index.html +34 -35
- package/app/m/support/SupportChannelBinding/index.html +34 -35
- package/app/m/support/SupportCharge/index.html +34 -35
- package/app/m/support/SupportCompensation/index.html +34 -35
- package/app/m/support/SupportCompensationPlan/index.html +34 -35
- package/app/m/support/SupportEscalation/index.html +34 -35
- package/app/m/support/SupportInteraction/index.html +34 -35
- package/app/m/support/SupportPlan/index.html +34 -35
- package/app/m/support/SupportPolicy/index.html +34 -35
- package/app/m/support/SupportQualification/index.html +34 -35
- package/app/m/support/SupportServiceTarget/index.html +34 -35
- package/app/m/support/SupportSpecialist/index.html +34 -35
- package/app/m/support/SupportWorkLink/index.html +34 -35
- package/app/m/tags/Tag/index.html +34 -35
- package/app/m/tags/TagAlias/index.html +34 -35
- package/app/m/timesheets/AttendanceBreak/index.html +34 -35
- package/app/m/timesheets/AttendancePunch/index.html +34 -35
- package/app/m/timesheets/AttendanceSegment/index.html +34 -35
- package/app/m/timesheets/ServiceChargeSnapshot/index.html +34 -35
- package/app/m/timesheets/ServiceCompensationSnapshot/index.html +34 -35
- package/app/m/timesheets/ServiceTimeEntry/index.html +34 -35
- package/app/m/users/Group/index.html +34 -35
- package/app/m/users/GroupMember/index.html +34 -35
- package/app/m/users/GroupRole/index.html +34 -35
- package/app/m/users/Membership/index.html +35 -36
- package/app/m/users/MembershipOverride/index.html +34 -35
- package/app/m/users/Permission/index.html +34 -35
- package/app/m/users/Role/index.html +34 -35
- package/app/m/users/RolePermission/index.html +34 -35
- package/app/m/users/Session/index.html +34 -35
- package/app/m/users/Tenant/index.html +34 -35
- package/app/m/users/TenantIntegration/index.html +34 -35
- package/app/m/users/TenantPermissionOverride/index.html +34 -35
- package/app/m/users/User/index.html +34 -35
- package/app/m/video/Character/index.html +34 -35
- package/app/m/video/CharacterAsset/index.html +34 -35
- package/app/m/video/CompositeJob/index.html +34 -35
- package/app/m/video/Performer/index.html +34 -35
- package/app/m/video/PerformerAsset/index.html +34 -35
- package/app/m/video/Scene/index.html +34 -35
- package/app/m/video/SceneAsset/index.html +34 -35
- package/app/m/video/VideoComposition/index.html +34 -35
- package/app/m/video/VideoCompositionAsset/index.html +34 -35
- package/app/m/video/VideoSequence/index.html +34 -35
- package/app/m/video/VideoSequenceAsset/index.html +34 -35
- package/app/m/video/VideoShot/index.html +34 -35
- package/app/m/video/VideoShotAsset/index.html +34 -35
- package/app/m/video/VideoShotCharacter/index.html +34 -35
- package/app/m/video/VideoWorkflow/index.html +34 -35
- package/app/m/voice/VoiceOutput/index.html +34 -35
- package/app/m/voice/VoiceProfile/index.html +34 -35
- package/app/m/voice/VoiceSample/index.html +34 -35
- package/app/mcp.html +2 -2
- package/app/packages/ads/index.html +29 -32
- package/app/packages/analytics/index.html +29 -32
- package/app/packages/approvals/index.html +29 -32
- package/app/packages/assets/index.html +29 -32
- package/app/packages/chat/index.html +29 -32
- package/app/packages/comments/index.html +29 -32
- package/app/packages/commerce/index.html +29 -32
- package/app/packages/content/index.html +29 -32
- package/app/packages/events/index.html +29 -32
- package/app/packages/expenses/index.html +29 -32
- package/app/packages/facts/index.html +29 -32
- package/app/packages/fields/index.html +29 -32
- package/app/packages/human-resources/index.html +29 -32
- package/app/packages/images/index.html +29 -32
- package/app/packages/index.html +28 -31
- package/app/packages/ingestion/index.html +29 -32
- package/app/packages/inventory/index.html +29 -32
- package/app/packages/ledgers/index.html +29 -32
- package/app/packages/manufacturing/index.html +29 -32
- package/app/packages/marketing/index.html +29 -32
- package/app/packages/messages/index.html +29 -32
- package/app/packages/places/index.html +29 -32
- package/app/packages/preferences/index.html +29 -32
- package/app/packages/products/index.html +29 -32
- package/app/packages/profiles/index.html +29 -32
- package/app/packages/projects/index.html +29 -32
- package/app/packages/properties/index.html +29 -32
- package/app/packages/reports/index.html +29 -32
- package/app/packages/sales/index.html +29 -32
- package/app/packages/sites/index.html +29 -32
- package/app/packages/social/index.html +29 -32
- package/app/packages/subscriptions/index.html +29 -32
- package/app/packages/support/index.html +29 -32
- package/app/packages/tags/index.html +29 -32
- package/app/packages/timesheets/index.html +29 -32
- package/app/packages/users/index.html +29 -32
- package/app/packages/video/index.html +29 -32
- package/app/packages/voice/index.html +29 -32
- package/app/packages/webhooks/index.html +29 -32
- package/app/recipes/account-access/help/index.html +30 -33
- package/app/recipes/account-access/index.html +34 -36
- package/app/recipes/activity/help/index.html +30 -33
- package/app/recipes/activity/index.html +34 -36
- package/app/recipes/agreements/help/index.html +30 -33
- package/app/recipes/agreements/index.html +34 -36
- package/app/recipes/analytics.reports/help/index.html +30 -33
- package/app/recipes/analytics.reports/index.html +34 -36
- package/app/recipes/assets/help/index.html +30 -33
- package/app/recipes/assets/index.html +34 -36
- package/app/recipes/billing/help/index.html +30 -33
- package/app/recipes/billing/index.html +34 -36
- package/app/recipes/chat.assistant/help/index.html +30 -33
- package/app/recipes/chat.assistant/index.html +34 -36
- package/app/recipes/comments/help/index.html +30 -33
- package/app/recipes/comments/index.html +34 -36
- package/app/recipes/commerce.customers/help/index.html +30 -33
- package/app/recipes/commerce.customers/index.html +34 -36
- package/app/recipes/commerce.estimates/help/index.html +30 -33
- package/app/recipes/commerce.estimates/index.html +34 -36
- package/app/recipes/commerce.purchases/help/index.html +30 -33
- package/app/recipes/commerce.purchases/index.html +34 -36
- package/app/recipes/commerce.sales/help/index.html +30 -33
- package/app/recipes/commerce.sales/index.html +34 -36
- package/app/recipes/commerce.vendors/help/index.html +30 -33
- package/app/recipes/commerce.vendors/index.html +34 -36
- package/app/recipes/commerce.wholesale/help/index.html +30 -33
- package/app/recipes/commerce.wholesale/index.html +34 -36
- package/app/recipes/events.calendar/help/index.html +30 -33
- package/app/recipes/events.calendar/index.html +34 -36
- package/app/recipes/expenses.tracking/help/index.html +30 -33
- package/app/recipes/expenses.tracking/index.html +34 -36
- package/app/recipes/fields.form-customization/help/index.html +30 -33
- package/app/recipes/fields.form-customization/index.html +34 -36
- package/app/recipes/ingestion/help/index.html +30 -33
- package/app/recipes/ingestion/index.html +34 -36
- package/app/recipes/integrations/help/index.html +30 -33
- package/app/recipes/integrations/index.html +34 -36
- package/app/recipes/inventory.stock/help/index.html +30 -33
- package/app/recipes/inventory.stock/index.html +34 -36
- package/app/recipes/ledgers.bookkeeping/help/index.html +30 -33
- package/app/recipes/ledgers.bookkeeping/index.html +34 -36
- package/app/recipes/messages/help/index.html +30 -33
- package/app/recipes/messages/index.html +34 -36
- package/app/recipes/products/help/index.html +30 -33
- package/app/recipes/products/index.html +34 -36
- package/app/recipes/projects.tracker/help/index.html +30 -33
- package/app/recipes/projects.tracker/index.html +34 -36
- package/app/recipes/reports.materialized/help/index.html +30 -33
- package/app/recipes/reports.materialized/index.html +34 -36
- package/app/recipes/reports.runtime/help/index.html +31 -34
- package/app/recipes/reports.runtime/index.html +35 -37
- package/app/recipes/sales.pipeline/help/index.html +30 -33
- package/app/recipes/sales.pipeline/index.html +34 -36
- package/app/recipes/tags.taxonomy/help/index.html +30 -33
- package/app/recipes/tags.taxonomy/index.html +34 -36
- package/app/recipes/team-collaboration/help/index.html +30 -33
- package/app/recipes/team-collaboration/index.html +34 -36
- package/app/recipes/timesheets.time-entries/help/index.html +30 -33
- package/app/recipes/timesheets.time-entries/index.html +34 -36
- package/app/s/custom-accounts/index.html +27 -30
- package/app/s/custom-appointments/index.html +27 -30
- package/app/s/custom-billing/index.html +27 -30
- package/app/s/custom-bookings/index.html +27 -30
- package/app/s/custom-buying/index.html +27 -30
- package/app/s/custom-checkout/index.html +27 -30
- package/app/s/custom-classes/index.html +27 -30
- package/app/s/custom-clients/index.html +27 -30
- package/app/s/custom-events/index.html +27 -30
- package/app/s/custom-fleet/index.html +27 -30
- package/app/s/custom-gigs/index.html +27 -30
- package/app/s/custom-giving/index.html +27 -30
- package/app/s/custom-instruments/index.html +27 -30
- package/app/s/custom-jobs/index.html +27 -30
- package/app/s/custom-kitchen/index.html +27 -30
- package/app/s/custom-lessons/index.html +27 -30
- package/app/s/custom-material/index.html +27 -30
- package/app/s/custom-meetings/index.html +27 -30
- package/app/s/custom-members/index.html +27 -30
- package/app/s/custom-merch/index.html +27 -30
- package/app/s/custom-money/index.html +27 -30
- package/app/s/custom-paint/index.html +27 -30
- package/app/s/custom-parts/index.html +27 -30
- package/app/s/custom-rentals/index.html +27 -30
- package/app/s/custom-roastery/index.html +27 -30
- package/app/s/custom-schedule/index.html +27 -30
- package/app/s/custom-shelf/index.html +27 -30
- package/app/s/custom-shop/index.html +27 -30
- package/app/s/custom-students/index.html +27 -30
- package/app/s/custom-wholesale/index.html +27 -30
- package/app/s/custom-work/index.html +27 -30
- package/app/s/custom-yard/index.html +27 -30
- package/app/s/section-access-control/index.html +27 -30
- package/app/s/section-account-security/index.html +27 -30
- package/app/s/section-accounting/index.html +27 -30
- package/app/s/section-activity/index.html +27 -30
- package/app/s/section-agreements/index.html +27 -30
- package/app/s/section-analytics/index.html +27 -30
- package/app/s/section-assets/index.html +27 -30
- package/app/s/section-billing/index.html +27 -30
- package/app/s/section-calendar/index.html +27 -30
- package/app/s/section-catalog/index.html +27 -30
- package/app/s/section-chat.assistant/index.html +27 -30
- package/app/s/section-comments/index.html +27 -30
- package/app/s/section-fields.form-customization/index.html +27 -30
- package/app/s/section-ingestion/index.html +27 -30
- package/app/s/section-integrations/index.html +27 -30
- package/app/s/section-messages/index.html +27 -30
- package/app/s/section-more/index.html +27 -30
- package/app/s/section-operations/index.html +27 -30
- package/app/s/section-projects/index.html +27 -30
- package/app/s/section-purchasing/index.html +27 -30
- package/app/s/section-reports.materialized/index.html +27 -30
- package/app/s/section-reports.runtime/index.html +27 -30
- package/app/s/section-sales/index.html +27 -30
- package/app/s/section-taxonomy/index.html +27 -30
- package/app/s/section-team/index.html +27 -30
- package/app/s/section-work/index.html +27 -30
- package/dist/assistant/change.d.ts +10 -1
- package/dist/assistant/change.d.ts.map +1 -1
- package/dist/assistant/change.js +6 -1
- package/dist/assistant/prompt.d.ts +10 -1
- package/dist/assistant/prompt.d.ts.map +1 -1
- package/dist/assistant/prompt.js +42 -7
- package/dist/assistant/session.svelte.d.ts +6 -0
- package/dist/assistant/session.svelte.d.ts.map +1 -1
- package/dist/assistant/session.svelte.js +6 -0
- package/dist/assistant/transport.d.ts +23 -3
- package/dist/assistant/transport.d.ts.map +1 -1
- package/dist/assistant/transport.js +356 -13
- package/dist/catalog/catalog.json +107 -41
- package/dist/components/BrowserAssistant.svelte +26 -0
- package/dist/components/BrowserAssistant.svelte.d.ts.map +1 -1
- package/dist/components/ModelPage.svelte +36 -4
- package/dist/components/ModelPage.svelte.d.ts.map +1 -1
- package/dist/components/PlannerReports.svelte +61 -0
- package/dist/components/PlannerReports.svelte.d.ts +10 -0
- package/dist/components/PlannerReports.svelte.d.ts.map +1 -0
- package/dist/components/PlannerSavedReportsWidget.svelte +38 -0
- package/dist/components/PlannerSavedReportsWidget.svelte.d.ts +9 -0
- package/dist/components/PlannerSavedReportsWidget.svelte.d.ts.map +1 -0
- package/dist/components/ReportProposalCard.svelte +63 -0
- package/dist/components/ReportProposalCard.svelte.d.ts +17 -0
- package/dist/components/ReportProposalCard.svelte.d.ts.map +1 -0
- package/dist/components/SectionOverview.svelte +22 -1
- package/dist/components/SectionOverview.svelte.d.ts.map +1 -1
- package/dist/core/prompt.d.ts.map +1 -1
- package/dist/core/prompt.js +7 -1
- package/dist/core/reply.d.ts +6 -0
- package/dist/core/reply.d.ts.map +1 -1
- package/dist/core/reply.js +11 -0
- package/dist/data/planner-source.d.ts.map +1 -1
- package/dist/data/planner-source.js +4 -1
- package/dist/overviews/definitions.d.ts.map +1 -1
- package/dist/overviews/definitions.js +6 -1
- package/dist/overviews/registry.d.ts.map +1 -1
- package/dist/overviews/registry.js +9 -5
- package/dist/planner/Planner.svelte +17 -0
- package/dist/planner/Planner.svelte.d.ts.map +1 -1
- package/dist/planner/instance.d.ts +6 -0
- package/dist/planner/instance.d.ts.map +1 -1
- package/dist/planner/shell.d.ts.map +1 -1
- package/dist/planner/shell.js +3 -1
- package/dist/reports/intent.d.ts +106 -0
- package/dist/reports/intent.d.ts.map +1 -0
- package/dist/reports/intent.js +667 -0
- package/dist/reports/planner.d.ts +33 -0
- package/dist/reports/planner.d.ts.map +1 -0
- package/dist/reports/planner.js +60 -0
- package/dist/reports/sources.d.ts +36 -0
- package/dist/reports/sources.d.ts.map +1 -0
- package/dist/reports/sources.js +125 -0
- package/dist/reports/store.d.ts +64 -0
- package/dist/reports/store.d.ts.map +1 -0
- package/dist/reports/store.js +214 -0
- package/dist/smrt-version.d.ts +1 -1
- package/dist/smrt-version.js +1 -1
- package/package.json +54 -54
- package/app/_app/immutable/assets/0.C8CwV4Fz.css +0 -1
- package/app/_app/immutable/assets/AppShell.DrL8T9I9.css +0 -1
- package/app/_app/immutable/assets/app.4ScdTV_S.css +0 -1
- package/app/_app/immutable/assets/labels.AVmg4hBz.css +0 -1
- package/app/_app/immutable/assets/state.CkVocVUJ.css +0 -1
- package/app/_app/immutable/chunks/B7d7dGCP.js +0 -1
- package/app/_app/immutable/chunks/C3nKLKKd.js +0 -1
- package/app/_app/immutable/chunks/CXKa_xdk.js +0 -4
- package/app/_app/immutable/chunks/CdBvpdnq.js +0 -4
- package/app/_app/immutable/chunks/DBp81N-t.js +0 -24
- package/app/_app/immutable/chunks/DzRTyOpH.js +0 -1
- package/app/_app/immutable/chunks/GVQNHDp5.js +0 -1
- package/app/_app/immutable/chunks/M-CuJzQN.js +0 -1
- package/app/_app/immutable/chunks/ORlJSBRk.js +0 -1
- package/app/_app/immutable/chunks/gMSmS-_y.js +0 -2
- package/app/_app/immutable/chunks/jol435F5.js +0 -11
- package/app/_app/immutable/entry/app.C_C191oT.js +0 -2
- package/app/_app/immutable/entry/start.C01jT-Kj.js +0 -1
- package/app/_app/immutable/nodes/0._tbUx7Ky.js +0 -9
- package/app/_app/immutable/nodes/14.sDZ3z4Zh.js +0 -1
- package/app/_app/immutable/nodes/2.GYBHfqdI.js +0 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
import{x as e}from"./B7d7dGCP.js";var t={cookbooks:[{id:`bakery`,name:`Bakery`,icon:`bread`,summary:`Retail and cafe wholesale orders, ingredient stock, batches and suppliers.`,keywords:[`bake`,`baker`,`bakery`,`baking`,`bread`,`pastry`,`cake`,`cookies`,`cafe wholesale`,`coffee shop`,`patisserie`,`sourdough`],settings:{currency:`USD`,paymentTerms:`Net 15`,taxRate:0},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#b45309`,fontFamily:`Georgia`}},recipes:[`commerce.customers`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`commerce.wholesale`,`inventory.stock`,`ledgers.bookkeeping`,`products.ingredients`,`products.simple`],features:[`@happyvertical/smrt-commerce:ProductionOrder`],policies:[{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`channelId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`expiryDate`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`vendorId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`}],layout:{version:1,sectionOrder:[`custom:shop`,`custom:wholesale`,`custom:kitchen`,`custom:buying`,`section:accounting`],itemOrder:{"custom:shop":[`item:commerce:Order`,`item:commerce:Customer`],"custom:wholesale":[`item:commerce:WholesaleOrder`,`item:commerce:Invoice`,`item:commerce:Payment`],"custom:kitchen":[`item:products:Product`,`item:products:Product:ingredients`,`item:inventory:StockLevel`,`item:commerce:ProductionOrder`],"custom:buying":[`item:commerce:Vendor`,`item:commerce:PurchaseOrder`]},hidden:[`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Order":`custom:shop`,"item:commerce:Customer":`custom:shop`,"item:commerce:WholesaleOrder":`custom:wholesale`,"item:commerce:Invoice":`custom:wholesale`,"item:commerce:Payment":`custom:wholesale`,"item:products:Product":`custom:kitchen`,"item:inventory:StockLevel":`custom:kitchen`,"item:commerce:ProductionOrder":`custom:kitchen`,"item:commerce:Vendor":`custom:buying`,"item:commerce:PurchaseOrder":`custom:buying`,"item:products:Product:ingredients":`custom:kitchen`},customSections:[{id:`custom:shop`,label:`Shop`},{id:`custom:wholesale`,label:`Wholesale`},{id:`custom:kitchen`,label:`Kitchen`},{id:`custom:buying`,label:`Buying`}],items:{"item:commerce:Order":{label:`Orders`,description:`Orders from your shop and website customers.`},"item:commerce:WholesaleOrder":{label:`Cafe orders`,description:`Standing and one-off orders from cafes and shops.`},"item:inventory:StockLevel":{label:`Stock`,description:`Baked goods and supplies on hand today.`},"item:commerce:ProductionOrder":{label:`Batches`,description:`What you plan to bake, with the amounts and the day.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The mills, dairies and suppliers you buy from.`},"item:products:Product:ingredients":{label:`Ingredients`,description:`Flour, butter, sugar and the rest, with costs and units.`}},sections:{"custom:shop":{icon:`shoppingBag`},"custom:wholesale":{icon:`briefcase`},"custom:kitchen":{icon:`package`},"custom:buying":{icon:`truck`}}}},sectionDescriptions:{"custom:shop":`Sell to customers and keep their details.`,"custom:wholesale":`Orders, invoices and payments from trade customers.`,"custom:kitchen":`Products, ingredients, stock and what you are making.`,"custom:buying":`Suppliers and what you order from them.`}},{id:`mechanic`,name:`Mechanic`,icon:`car`,summary:`Quotes, work orders, parts, appointments and billing for a repair shop.`,keywords:[`mechanic`,`garage`,`auto repair`,`car repair`,`fix cars`,`car`,`vehicle`,`brakes`,`oil change`,`tyres`,`tires`,`servicing`,`repair shop`],settings:{currency:`USD`,paymentTerms:`Due on receipt`,taxRate:.0825,taxRounding:`document`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{preset:`smrt`},recipes:[`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Contract`,fieldName:`taxRoundingScope`,scopeType:`app`,defaultValue:`"document"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0825`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`taxRoundingScope`,scopeType:`app`,defaultValue:`"document"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0825`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:parts`,`custom:billing`,`custom:schedule`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`],"custom:parts":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`],"custom:schedule":[`item:events:Event`,`item:events:EventType`]},hidden:[`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:products:Product":`custom:parts`,"item:inventory:StockLevel":`custom:parts`,"item:commerce:Vendor":`custom:parts`,"item:commerce:PurchaseOrder":`custom:parts`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:parts`,label:`Parts`},{id:`custom:billing`,label:`Billing`},{id:`custom:schedule`,label:`Schedule`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for repairs, ready to become work orders once approved.`},"item:commerce:Order":{label:`Work orders`,description:`Every job in the shop, from drop-off to pick-up.`},"item:products:Product":{label:`Parts catalog`,description:`The parts you sell and fit, with prices.`},"item:inventory:StockLevel":{label:`Parts on hand`,description:`Parts on the shelf, so you know what to reorder.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The parts suppliers you buy from, with terms and contacts.`},"item:commerce:PurchaseOrder":{label:`Parts orders`,description:`Parts you have ordered and when they arrive.`},"item:events:Event":{label:`Appointments`,description:`Bookings on the shop calendar, by day and bay.`},"item:events:EventType":{label:`Appointment types`,description:`The kinds of service you book, like an oil change or inspection.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:parts":{icon:`package`},"custom:billing":{icon:`receipt`},"custom:schedule":{icon:`calendar`}}}},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:parts":`Parts, materials and the stock on your shelves.`,"custom:billing":`Invoices and the payments against them.`,"custom:schedule":`Appointments and what is on the calendar.`}},{id:`welder`,name:`Welder`,icon:`flame`,summary:`Quotes, jobs, agreements, material and site visits for a welding business.`,keywords:[`weld`,`welder`,`welding`,`fabrication`,`fabricate`,`metal`,`steel`,`gates`,`railings`,`metalwork`,`boilermaker`],settings:{currency:`USD`,paymentTerms:`50% deposit, balance on completion`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{preset:`studio`},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:material`,`custom:billing`,`custom:schedule`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Order`,`item:commerce:Customer`,`item:commerce:Estimate`,`item:commerce:Agreement`],"custom:material":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`],"custom:schedule":[`item:events:Event`,`item:events:EventType`]},hidden:[`item:commerce:Contract`,`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Customer":`custom:jobs`,"item:commerce:Estimate":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:products:Product":`custom:material`,"item:inventory:StockLevel":`custom:material`,"item:commerce:Vendor":`custom:material`,"item:commerce:PurchaseOrder":`custom:material`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:commerce:Order":`custom:jobs`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:material`,label:`Material`},{id:`custom:billing`,label:`Billing`},{id:`custom:schedule`,label:`Schedule`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for jobs, ready to turn into orders when accepted.`},"item:products:Product":{label:`Steel & supplies`,description:`Steel, rod, gas and other materials you stock and charge for.`},"item:inventory:StockLevel":{label:`Material on hand`,description:`Material on hand, so you know what to buy before the next job.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The suppliers you buy metal and gas from.`},"item:commerce:PurchaseOrder":{label:`Material orders`,description:`Material you have ordered and when it lands.`},"item:events:Event":{label:`Site visits`,description:`Visits to measure, quote or install on site, by day.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of visit you make, like a quote visit or install.`},"item:commerce:Order":{label:`Work orders`,description:`Every job you have won, from start to final invoice.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:material":{icon:`layers`},"custom:billing":{icon:`receipt`},"custom:schedule":{icon:`calendar`}}}},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:material":`Material, stock and what you have ordered.`,"custom:billing":`Invoices and the payments against them.`,"custom:schedule":`Appointments and what is on the calendar.`}},{id:`yoga-studio`,name:`Yoga studio`,icon:`yoga`,summary:`Classes, class series, members, memberships and a small retail shop.`,keywords:[`yoga`,`yoga studio`,`pilates`,`studio`,`classes`,`class series`,`meditation`,`members`,`memberships`,`instructor`],settings:{currency:`USD`,paymentTerms:`Due on receipt`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#0f766e`,fontFamily:`ui-rounded`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.invoicing`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxExempt`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxId`,scopeType:`app`,visibility:`hidden`}],layout:{version:1,sectionOrder:[`custom:classes`,`custom:members`,`custom:shop`,`custom:billing`,`section:accounting`],itemOrder:{"custom:classes":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:members":[`item:commerce:Customer`,`item:commerce:Agreement`],"custom:shop":[`item:products:Product`,`item:inventory:StockLevel`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:events:Event":`custom:classes`,"item:events:EventSeries":`custom:classes`,"item:events:EventType":`custom:classes`,"item:commerce:Customer":`custom:members`,"item:commerce:Agreement":`custom:members`,"item:products:Product":`custom:shop`,"item:inventory:StockLevel":`custom:shop`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:classes`,label:`Classes`},{id:`custom:members`,label:`Members`},{id:`custom:shop`,label:`Shop`},{id:`custom:billing`,label:`Billing`}],items:{"item:events:Event":{label:`Class schedule`,description:`Every class on your timetable, with who's teaching and where.`},"item:events:EventSeries":{label:`Class series`,description:`Weekly classes that repeat, so you set them up once.`},"item:events:EventType":{label:`Class types`,description:`Your styles, like Vinyasa or Yin, with length and price.`},"item:commerce:Customer":{label:`Students`,description:`Your students, with how to reach them and what they have booked.`},"item:commerce:Agreement":{label:`Memberships`,description:`Memberships and class packs, with who holds them and when they renew.`},"item:inventory:StockLevel":{label:`Stock`,description:`Mats, props and retail items on hand.`}},sections:{"custom:classes":{icon:`school`},"custom:members":{icon:`users`},"custom:shop":{icon:`shoppingBag`},"custom:billing":{icon:`receipt`}}}},sectionDescriptions:{"custom:classes":`Classes, sessions and bookings.`,"custom:members":`Members and their memberships.`,"custom:shop":`Sell to customers and keep their details.`,"custom:billing":`Invoices and the payments against them.`}},{id:`landscaping`,name:`Landscaping`,icon:`leaf`,summary:`Quotes, jobs, maintenance contracts, materials and the crew schedule for a lawn and landscape business.`,keywords:[`landscaping`,`landscaper`,`lawn care`,`lawn`,`mowing`,`garden`,`gardener`,`yard work`,`hardscape`,`irrigation`,`tree service`,`snow removal`,`grounds`],settings:{currency:`USD`,paymentTerms:`Net 15`,taxRate:.06},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:yard":`Materials, stock and the suppliers you buy from.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#15803d`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.06`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.06`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:yard`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`,`item:commerce:Agreement`],"custom:schedule":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:yard":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventSeries":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:yard`,"item:inventory:StockLevel":`custom:yard`,"item:commerce:Vendor":`custom:yard`,"item:commerce:PurchaseOrder":`custom:yard`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:yard`,label:`Yard`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for new work, ready to become jobs once approved.`},"item:commerce:Order":{label:`Work orders`,description:`Every job you have won, from the first visit to the final invoice.`},"item:commerce:Agreement":{label:`Maintenance contracts`,description:`Weekly mowing and seasonal programs, with who holds them and when they renew.`},"item:events:Event":{label:`Crew schedule`,description:`Visits on the calendar, by day and crew.`},"item:events:EventSeries":{label:`Recurring visits`,description:`Routes that repeat, like a Tuesday mowing round, set up once.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of visit you make, like a mow, a clean-up or an install.`},"item:products:Product":{label:`Materials`,description:`Mulch, soil, sod, plants and the other things you sell and install.`},"item:inventory:StockLevel":{label:`Materials on hand`,description:`What is in the yard and on the trucks.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The nurseries and stone yards you buy from.`},"item:commerce:PurchaseOrder":{label:`Material orders`,description:`Material you have ordered and when it lands.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:yard":{icon:`package`},"custom:billing":{icon:`receipt`}}}}},{id:`salon`,name:`Hair salon`,icon:`scissors`,summary:`Appointments, clients, services, retail stock and payments at the desk for a salon or barbershop.`,keywords:[`salon`,`hair salon`,`barber`,`barbershop`,`hairdresser`,`stylist`,`haircut`,`hair colour`,`hair color`,`highlights`,`blow-dry`,`nails`,`beauty`,`spa`],settings:{currency:`USD`,paymentTerms:`Due on receipt`,taxRate:.07,pricesIncludeTax:!0},sectionDescriptions:{"custom:appointments":`Bookings and the services behind them.`,"custom:clients":`Clients and what they usually have.`,"custom:checkout":`Sales at the desk and the payments against them.`,"custom:shelf":`Retail, backbar stock and who you buy from.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#9d174d`}},recipes:[`commerce.customers`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Contract`,fieldName:`lineAmountType`,scopeType:`app`,defaultValue:`"inclusive"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxExempt`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`lineAmountType`,scopeType:`app`,defaultValue:`"inclusive"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`}],layout:{version:1,sectionOrder:[`custom:appointments`,`custom:clients`,`custom:checkout`,`custom:shelf`,`section:accounting`],itemOrder:{"custom:appointments":[`item:events:Event`,`item:events:EventType`,`item:events:EventSeries`],"custom:clients":[`item:commerce:Customer`],"custom:checkout":[`item:commerce:Order`,`item:commerce:Payment`,`item:commerce:Invoice`],"custom:shelf":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`]},hidden:[`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:events:Event":`custom:appointments`,"item:events:EventType":`custom:appointments`,"item:events:EventSeries":`custom:appointments`,"item:commerce:Customer":`custom:clients`,"item:commerce:Order":`custom:checkout`,"item:commerce:Payment":`custom:checkout`,"item:commerce:Invoice":`custom:checkout`,"item:products:Product":`custom:shelf`,"item:inventory:StockLevel":`custom:shelf`,"item:commerce:Vendor":`custom:shelf`,"item:commerce:PurchaseOrder":`custom:shelf`},customSections:[{id:`custom:appointments`,label:`Appointments`},{id:`custom:clients`,label:`Clients`},{id:`custom:checkout`,label:`Checkout`},{id:`custom:shelf`,label:`Shelf`}],items:{"item:events:Event":{label:`Bookings`,description:`Every booking in the book, by stylist and chair.`},"item:events:EventType":{label:`Appointment types`,description:`The services you book, like a cut, a colour or a beard trim, with their length.`},"item:events:EventSeries":{label:`Standing appointments`,description:`Regulars who come back every few weeks, set up once.`},"item:commerce:Customer":{label:`Client cards`,description:`Your clients, with how to reach them and what they usually have.`},"item:commerce:Order":{label:`Sales`,description:`Each visit’s ticket: the services done and anything bought at the desk.`},"item:commerce:Payment":{label:`Payments`,description:`Money taken at the desk, by card or cash.`},"item:commerce:Invoice":{label:`Invoices`,description:`Bills for bridal parties, packages and accounts that pay later.`},"item:products:Product":{label:`Services & products`,description:`Your services and the retail you sell, with prices.`},"item:inventory:StockLevel":{label:`Retail stock`,description:`Product on the shelf and at the backbar.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The distributors you buy colour, product and towels from.`},"item:commerce:PurchaseOrder":{label:`Supply orders`,description:`Product you have ordered and when it arrives.`}},sections:{"custom:appointments":{icon:`calendar`},"custom:clients":{icon:`users`},"custom:checkout":{icon:`creditCard`},"custom:shelf":{icon:`shoppingBag`}}}}},{id:`roaster`,name:`Coffee roaster`,icon:`coffee`,summary:`Cafe accounts, online orders, green coffee, roast batches and importers for a small roastery or brewery.`,keywords:[`coffee roaster`,`roaster`,`roastery`,`coffee`,`beans`,`green coffee`,`espresso`,`cafe accounts`,`brewery`,`microbrewery`,`taproom`,`kegs`,`small batch`],settings:{currency:`USD`,paymentTerms:`Net 30`,taxRate:.0725},sectionDescriptions:{"custom:shop":`Sell to customers and keep their details.`,"custom:wholesale":`Orders, invoices and payments from trade customers.`,"custom:roastery":`Coffees, green coffee, stock and what you are roasting.`,"custom:buying":`Suppliers and what you order from them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#7c2d12`,fontFamily:`Georgia`}},recipes:[`commerce.customers`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`commerce.wholesale`,`inventory.stock`,`ledgers.bookkeeping`,`products.ingredients`,`products.simple`],features:[`@happyvertical/smrt-commerce:ProductionOrder`],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0725`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0725`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`channelId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`expiryDate`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`vendorId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`}],layout:{version:1,sectionOrder:[`custom:shop`,`custom:wholesale`,`custom:roastery`,`custom:buying`,`section:accounting`],itemOrder:{"custom:shop":[`item:commerce:Order`,`item:commerce:Customer`],"custom:wholesale":[`item:commerce:WholesaleOrder`,`item:commerce:Invoice`,`item:commerce:Payment`],"custom:roastery":[`item:products:Product`,`item:products:Product:ingredients`,`item:inventory:StockLevel`,`item:commerce:ProductionOrder`],"custom:buying":[`item:commerce:Vendor`,`item:commerce:PurchaseOrder`]},hidden:[`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Order":`custom:shop`,"item:commerce:Customer":`custom:shop`,"item:commerce:WholesaleOrder":`custom:wholesale`,"item:commerce:Invoice":`custom:wholesale`,"item:commerce:Payment":`custom:wholesale`,"item:products:Product":`custom:roastery`,"item:products:Product:ingredients":`custom:roastery`,"item:inventory:StockLevel":`custom:roastery`,"item:commerce:ProductionOrder":`custom:roastery`,"item:commerce:Vendor":`custom:buying`,"item:commerce:PurchaseOrder":`custom:buying`},customSections:[{id:`custom:shop`,label:`Shop`},{id:`custom:wholesale`,label:`Wholesale`},{id:`custom:roastery`,label:`Roastery`},{id:`custom:buying`,label:`Buying`}],items:{"item:commerce:Order":{label:`Online & retail orders`,description:`Orders from the website and the roastery door.`},"item:commerce:WholesaleOrder":{label:`Cafe orders`,description:`Standing and one-off orders from cafes, bars and grocers.`},"item:products:Product":{label:`Coffees`,description:`Roasted coffees and shop items, with prices.`},"item:products:Product:ingredients":{label:`Green coffee`,description:`Green coffee and packaging, by the bag, with costs.`},"item:inventory:StockLevel":{label:`Stock`,description:`Roasted and green coffee on hand today.`},"item:commerce:ProductionOrder":{label:`Roast batches`,description:`What you plan to roast, with the amounts and the day.`},"item:commerce:Vendor":{label:`Importers & suppliers`,description:`The importers and packaging suppliers you buy from.`},"item:commerce:PurchaseOrder":{label:`Green coffee orders`,description:`Green coffee you have bought and when the container lands.`}},sections:{"custom:shop":{icon:`shoppingBag`},"custom:wholesale":{icon:`briefcase`},"custom:roastery":{icon:`package`},"custom:buying":{icon:`truck`}}}}},{id:`equipment-rental`,name:`Equipment rental`,icon:`forklift`,summary:`Rentals, quotes, the fleet and its availability, pickups and returns, and billing for a hire yard.`,keywords:[`equipment rental`,`rental`,`rentals`,`hire`,`tool hire`,`plant hire`,`party rental`,`excavator`,`scaffolding`,`generators`,`bike rental`,`kayak rental`,`fleet`],settings:{currency:`USD`,paymentTerms:`Deposit on pickup, balance on return`,taxRate:.08,taxRounding:`document`},sectionDescriptions:{"custom:rentals":`Rentals, quotes and the customers they belong to.`,"custom:fleet":`Equipment, availability and who you buy from.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#a16207`}},recipes:[`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.leases`,`commerce.purchases`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:Contract`,fieldName:`taxRoundingScope`,scopeType:`app`,defaultValue:`"document"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.08`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`taxRoundingScope`,scopeType:`app`,defaultValue:`"document"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.08`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`}],layout:{version:1,sectionOrder:[`custom:rentals`,`custom:fleet`,`custom:schedule`,`custom:billing`,`section:accounting`],itemOrder:{"custom:rentals":[`item:commerce:Lease`,`item:commerce:Estimate`,`item:commerce:Customer`],"custom:fleet":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Lease":`custom:rentals`,"item:commerce:Estimate":`custom:rentals`,"item:commerce:Customer":`custom:rentals`,"item:products:Product":`custom:fleet`,"item:inventory:StockLevel":`custom:fleet`,"item:commerce:Vendor":`custom:fleet`,"item:commerce:PurchaseOrder":`custom:fleet`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:rentals`,label:`Rentals`},{id:`custom:fleet`,label:`Fleet`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Lease":{label:`Rental contracts`,description:`Every rental out the gate, with the dates and what is due.`},"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for a hire, ready to become a rental when accepted.`},"item:products:Product":{label:`Equipment`,description:`The machines and tools you hire out, with the daily rate.`},"item:inventory:StockLevel":{label:`Availability`,description:`What is in the yard, out on hire or in for service.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The dealers and parts suppliers you buy from.`},"item:commerce:PurchaseOrder":{label:`Equipment & parts orders`,description:`Machines and parts you have ordered and when they arrive.`},"item:events:Event":{label:`Pickups & returns`,description:`Pickups, returns and deliveries on the calendar, by day.`},"item:events:EventType":{label:`Booking types`,description:`The kinds of booking you make, like a pickup, a return or a delivery.`}},sections:{"custom:rentals":{icon:`fileText`},"custom:fleet":{icon:`truck`},"custom:schedule":{icon:`calendar`},"custom:billing":{icon:`receipt`}}}}},{id:`nonprofit`,name:`Non-profit`,icon:`heart`,summary:`Members, memberships, dues and donations, events and the books for a club, society or charity.`,keywords:[`non-profit`,`nonprofit`,`charity`,`club`,`society`,`association`,`members`,`membership dues`,`donations`,`donors`,`fundraiser`,`volunteers`,`community group`],settings:{currency:`USD`,paymentTerms:`Due on receipt`,taxRate:0},sectionDescriptions:{"custom:members":`Members and their memberships.`,"custom:events":`Meetings, fundraisers and volunteer days.`,"custom:giving":`Dues, pledges and the money that comes in.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#1d4ed8`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.invoicing`,`events.calendar`,`ledgers.bookkeeping`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxExempt`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`}],layout:{version:1,sectionOrder:[`custom:members`,`custom:events`,`custom:giving`,`section:accounting`],itemOrder:{"custom:members":[`item:commerce:Customer`,`item:commerce:Agreement`],"custom:events":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:giving":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`],moved:{"item:commerce:Customer":`custom:members`,"item:commerce:Agreement":`custom:members`,"item:events:Event":`custom:events`,"item:events:EventSeries":`custom:events`,"item:events:EventType":`custom:events`,"item:commerce:Invoice":`custom:giving`,"item:commerce:Payment":`custom:giving`},customSections:[{id:`custom:members`,label:`Members`},{id:`custom:events`,label:`Events`},{id:`custom:giving`,label:`Giving`}],items:{"item:commerce:Customer":{label:`Members & donors`,description:`Your members and donors, with how to reach them.`},"item:commerce:Agreement":{label:`Memberships`,description:`Annual, family and student memberships, with who holds them and when they renew.`},"item:events:Event":{label:`Event calendar`,description:`Meetings, fundraisers and volunteer days, with who is coming.`},"item:events:EventSeries":{label:`Regular meetings`,description:`Meetings that repeat, like the monthly meetup, set up once.`},"item:events:EventType":{label:`Event types`,description:`The kinds of event you run, like a fundraiser or a clean-up.`},"item:commerce:Invoice":{label:`Dues & pledges`,description:`Dues and pledges you have asked for and which are still owed.`},"item:commerce:Payment":{label:`Donations & payments`,description:`Money that has come in, from dues, gifts and tickets.`}},sections:{"custom:members":{icon:`users`},"custom:events":{icon:`calendar`},"custom:giving":{icon:`creditCard`}}}}},{id:`agency`,name:`Agency`,icon:`pencil`,summary:`Clients, proposals, retainers, projects, time, expenses and invoices for a consulting or design studio.`,keywords:[`agency`,`design agency`,`consulting`,`consultant`,`consultancy`,`studio`,`design studio`,`freelance`,`retainer`,`proposals`,`billable hours`,`timesheets`,`creative`],settings:{currency:`USD`,paymentTerms:`Net 30`,taxRate:0},sectionDescriptions:{"custom:accounts":`Clients, proposals and the contracts you hold with them.`,"custom:work":`Projects, tasks, time and costs.`,"custom:meetings":`Meetings with clients and the studio.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#4338ca`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.vendors`,`events.calendar`,`expenses.tracking`,`ledgers.bookkeeping`,`projects.tracker`,`timesheets.time-entries`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`}],layout:{version:1,sectionOrder:[`custom:accounts`,`custom:work`,`custom:meetings`,`custom:billing`,`section:accounting`],itemOrder:{"custom:accounts":[`item:commerce:Customer`,`item:commerce:Estimate`,`item:commerce:Agreement`],"custom:work":[`item:projects:Project`,`item:projects:Issue`,`item:timesheets:ServiceTimeEntry`,`item:expenses:Expense`],"custom:meetings":[`item:events:Event`,`item:events:EventType`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`,`item:commerce:Vendor`]},hidden:[`item:commerce:Contract`,`item:projects:Label`,`item:events:EventSeries`],moved:{"item:commerce:Customer":`custom:accounts`,"item:commerce:Estimate":`custom:accounts`,"item:commerce:Agreement":`custom:accounts`,"item:projects:Project":`custom:work`,"item:projects:Issue":`custom:work`,"item:timesheets:ServiceTimeEntry":`custom:work`,"item:expenses:Expense":`custom:work`,"item:events:Event":`custom:meetings`,"item:events:EventType":`custom:meetings`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`,"item:commerce:Vendor":`custom:billing`},customSections:[{id:`custom:accounts`,label:`Clients`},{id:`custom:work`,label:`Work`},{id:`custom:meetings`,label:`Meetings`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Customer":{label:`Client companies`,description:`The companies you work for, with how to reach them.`},"item:commerce:Estimate":{label:`Proposals`,description:`Proposals you have sent, ready to become a contract when accepted.`},"item:commerce:Agreement":{label:`Contracts`,description:`Retainers and statements of work, with the terms and the dates.`},"item:projects:Project":{label:`Projects`,description:`Each engagement, with what it covers and where it stands.`},"item:projects:Issue":{label:`Tasks`,description:`The work inside each project, from to-do to done.`},"item:timesheets:ServiceTimeEntry":{label:`Time entries`,description:`Hours logged by person and project, from draft to approved.`},"item:expenses:Expense":{label:`Expenses`,description:`Costs on a project, with the receipt and whether to bill them on.`},"item:events:Event":{label:`Client meetings`,description:`Kickoffs, reviews and check-ins with clients, by day.`},"item:events:EventType":{label:`Meeting types`,description:`The kinds of meeting you hold, like a kickoff or a review.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The printers, photographers and freelancers you buy from.`}},sections:{"custom:accounts":{icon:`users`},"custom:work":{icon:`briefcase`},"custom:meetings":{icon:`calendar`},"custom:billing":{icon:`receipt`}}}}},{id:`plumber`,name:`Plumber`,icon:`tool`,summary:`Quotes, service calls, parts, appointments and billing for a plumbing business.`,keywords:[`plumber`,`plumbing`,`pipes`,`leak`,`drain`,`blocked drain`,`water heater`,`boiler`,`bathroom`,`faucet`,`toilet`,`sewer`,`emergency call-out`,`gas fitter`],settings:{currency:`USD`,paymentTerms:`Due on completion`,taxRate:.07},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:parts":`Parts, materials and the stock on your shelves.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#0e7490`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on completion"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on completion"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on completion"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on completion"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on completion"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:parts`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Order`,`item:commerce:Estimate`,`item:commerce:Customer`,`item:commerce:Agreement`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:parts":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Order":`custom:jobs`,"item:commerce:Estimate":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:parts`,"item:inventory:StockLevel":`custom:parts`,"item:commerce:Vendor":`custom:parts`,"item:commerce:PurchaseOrder":`custom:parts`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:parts`,label:`Parts`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Order":{label:`Service calls`,description:`Call-outs and booked jobs, emergencies first, from the first call to the final invoice.`},"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for installs and bigger repairs, ready to book once approved.`},"item:commerce:Agreement":{label:`Service plans`,description:`Yearly water heater and drain service plans, with who holds them and when they renew.`},"item:events:Event":{label:`Appointments`,description:`Calls on the calendar, by day and van.`},"item:events:EventType":{label:`Call types`,description:`The kinds of call you take, like a leak, a blocked drain or a water heater install.`},"item:products:Product":{label:`Parts & fittings`,description:`Valves, fittings, pipe and fixtures you fit and charge for.`},"item:inventory:StockLevel":{label:`Van stock`,description:`What is on each van and in the store, so a call is not a second trip.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The plumbing merchants and wholesalers you buy from.`},"item:commerce:PurchaseOrder":{label:`Parts orders`,description:`Parts you have ordered and when they are ready for pickup.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:parts":{icon:`package`},"custom:billing":{icon:`receipt`}}}}},{id:`electrician`,name:`Electrician`,icon:`bolt`,summary:`Quotes, installs, repairs, materials and billing for an electrical contractor.`,keywords:[`electrician`,`electrical`,`electric`,`wiring`,`rewire`,`panel upgrade`,`breaker`,`lighting`,`outlets`,`ev charger`,`inspection`,`sparky`,`electrical contractor`],settings:{currency:`USD`,paymentTerms:`Net 15`,taxRate:.0625},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:material":`Material, stock and what you have ordered.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#ca8a04`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0625`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0625`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:material`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`,`item:commerce:Agreement`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:material":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:material`,"item:inventory:StockLevel":`custom:material`,"item:commerce:Vendor":`custom:material`,"item:commerce:PurchaseOrder":`custom:material`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:material`,label:`Material`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Priced quotes for installs, rewires and upgrades, ready to schedule once accepted.`},"item:commerce:Order":{label:`Work orders`,description:`Installs, repairs and inspections you have won, from rough-in to sign-off.`},"item:commerce:Agreement":{label:`Maintenance contracts`,description:`Planned maintenance and testing for commercial sites, with renewal dates.`},"item:events:Event":{label:`Site visits`,description:`Visits to quote, wire, inspect or test, by day and electrician.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of visit you make, like a panel upgrade, a fault call or an inspection.`},"item:products:Product":{label:`Electrical supplies`,description:`Cable, breakers, devices and fixtures you stock and charge for.`},"item:inventory:StockLevel":{label:`Materials on hand`,description:`Cable and parts in the shop and on the trucks.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The electrical wholesalers and lighting suppliers you buy from.`},"item:commerce:PurchaseOrder":{label:`Material orders`,description:`Material you have ordered and when it lands.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:material":{icon:`layers`},"custom:billing":{icon:`receipt`}}}}},{id:`painter`,name:`Painter`,icon:`brush`,summary:`Estimates, jobs, paint and materials, crew schedule and billing for a painting business.`,keywords:[`painter`,`painting`,`decorator`,`decorating`,`house painting`,`interior painting`,`exterior painting`,`wallpaper`,`drywall repair`,`cabinet painting`,`stain`,`repaint`],settings:{currency:`USD`,paymentTerms:`50% deposit, balance on completion`,taxRate:.06},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:paint":`Paint, sundries and the stock in your store room.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#be185d`}},recipes:[`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.06`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.06`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:paint`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:paint":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:paint`,"item:inventory:StockLevel":`custom:paint`,"item:commerce:Vendor":`custom:paint`,"item:commerce:PurchaseOrder":`custom:paint`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Crew`},{id:`custom:paint`,label:`Paint & supplies`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Estimate":{label:`Estimates`,description:`Room-by-room estimates from the site visit, ready to book once signed.`},"item:commerce:Order":{label:`Projects`,description:`Every painting project you have booked, from prep to the final walkthrough.`},"item:events:Event":{label:`Crew schedule`,description:`Site visits and crew days on the calendar, by job.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of day you book, like an estimate visit, prep or a touch-up.`},"item:products:Product":{label:`Paint & sundries`,description:`Paint, primer, caulk, tape and the other things you use and charge for.`},"item:inventory:StockLevel":{label:`Paint on hand`,description:`Paint and supplies in the store room and on the van.`},"item:commerce:Vendor":{label:`Paint suppliers`,description:`The paint stores and suppliers you buy from, with trade terms.`},"item:commerce:PurchaseOrder":{label:`Supply orders`,description:`Paint and supplies you have ordered and when they are ready.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:paint":{icon:`package`},"custom:billing":{icon:`receipt`}}}}},{id:`roofer`,name:`Roofer`,icon:`home`,summary:`Inspections, quotes, jobs, materials and billing for a roofing contractor.`,keywords:[`roofer`,`roofing`,`roof`,`roof repair`,`reroof`,`shingles`,`gutters`,`flashing`,`leaking roof`,`storm damage`,`flat roof`,`skylight`],settings:{currency:`USD`,paymentTerms:`Net 30`,taxRate:.07},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:material":`Material, stock and what you have ordered.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#475569`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:material`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`,`item:commerce:Agreement`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:material":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:material`,"item:inventory:StockLevel":`custom:material`,"item:commerce:Vendor":`custom:material`,"item:commerce:PurchaseOrder":`custom:material`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:material`,label:`Material`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Quotes written up after an inspection, for repairs and full replacements.`},"item:commerce:Order":{label:`Roofing jobs`,description:`Repairs and re-roofs you have won, from tear-off to final cleanup.`},"item:commerce:Agreement":{label:`Maintenance agreements`,description:`Yearly inspection and gutter programs for homes and buildings, with renewal dates.`},"item:events:Event":{label:`Inspections & visits`,description:`Roof inspections, measure-ups and crew days on the calendar.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of visit you make, like an inspection, a storm check or a tear-off.`},"item:products:Product":{label:`Roofing products`,description:`Shingles, underlayment, flashing and fasteners you install and charge for.`},"item:inventory:StockLevel":{label:`Materials on hand`,description:`Bundles and rolls in the yard and on the trailer.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The roofing distributors and lumber yards you buy from.`},"item:commerce:PurchaseOrder":{label:`Material orders`,description:`Material you have ordered and when it is delivered to site.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:material":{icon:`layers`},"custom:billing":{icon:`receipt`}}}}},{id:`music-teacher`,name:`Music teacher`,icon:`music`,summary:`Students, lesson schedule, packages, recitals and billing for a music teacher or studio.`,keywords:[`music teacher`,`music lessons`,`music studio`,`music school`,`piano teacher`,`piano lessons`,`guitar lessons`,`violin lessons`,`voice lessons`,`singing lessons`,`drum lessons`,`recital`,`instrument rental`,`sheet music`],settings:{currency:`USD`,paymentTerms:`Due at the start of each month`,taxRate:0},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#6d28d9`,fontFamily:`Georgia`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.invoicing`,`commerce.leases`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxExempt`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`}],layout:{version:1,sectionOrder:[`custom:lessons`,`custom:students`,`custom:instruments`,`custom:billing`,`section:accounting`],itemOrder:{"custom:lessons":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:students":[`item:commerce:Customer`,`item:commerce:Agreement`],"custom:instruments":[`item:commerce:Lease`,`item:products:Product`,`item:inventory:StockLevel`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:events:Event":`custom:lessons`,"item:events:EventSeries":`custom:lessons`,"item:events:EventType":`custom:lessons`,"item:commerce:Customer":`custom:students`,"item:commerce:Agreement":`custom:students`,"item:commerce:Lease":`custom:instruments`,"item:products:Product":`custom:instruments`,"item:inventory:StockLevel":`custom:instruments`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:lessons`,label:`Lessons`},{id:`custom:students`,label:`Students`},{id:`custom:instruments`,label:`Rentals & shop`},{id:`custom:billing`,label:`Billing`}],items:{"item:events:Event":{label:`Lesson calendar`,description:`Every lesson, group class and recital, with the teacher and the room.`},"item:events:EventSeries":{label:`Weekly slots`,description:`A student’s regular lesson time, set up once for the term.`},"item:events:EventType":{label:`Lesson types`,description:`Private lessons, group classes and recitals, with their length.`},"item:commerce:Customer":{label:`Students & families`,description:`Your students, with a parent or guardian to contact for younger ones.`},"item:commerce:Agreement":{label:`Lesson packages`,description:`Term enrolments and lesson packs, with who holds them and when they renew.`},"item:commerce:Lease":{label:`Instrument rentals`,description:`Instruments out on rent, with the student, the dates and the monthly fee.`},"item:products:Product":{label:`Books & instruments`,description:`Method books, sheet music, accessories and rental instruments, with prices.`},"item:inventory:StockLevel":{label:`Stock`,description:`Books, strings and rental instruments on the shelf.`}},sections:{"custom:lessons":{icon:`school`},"custom:students":{icon:`users`},"custom:instruments":{icon:`package`},"custom:billing":{icon:`receipt`}}}},sectionDescriptions:{"custom:lessons":`Lessons, recitals and the weekly timetable.`,"custom:students":`Students, their families and the packages they hold.`,"custom:instruments":`Instrument rentals, books and sheet music on the shelf.`,"custom:billing":`Invoices and the payments against them.`}},{id:`band`,name:`Band`,icon:`microphone`,summary:`Gigs, venues, booking contracts, merch and billing for a band.`,keywords:[`band`,`gigs`,`gigging`,`live music`,`musicians`,`ensemble`,`wedding band`,`cover band`,`venues`,`booking`,`promoter`,`merch`,`merchandise`,`tour`,`residency`],settings:{currency:`USD`,paymentTerms:`50% deposit, balance on the night`,taxRate:0},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#b91c1c`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`expenses.tracking`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`}],layout:{version:1,sectionOrder:[`custom:gigs`,`custom:bookings`,`custom:merch`,`custom:money`,`section:accounting`],itemOrder:{"custom:gigs":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:bookings":[`item:commerce:Customer`,`item:commerce:Estimate`,`item:commerce:Agreement`],"custom:merch":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Order`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:money":[`item:commerce:Invoice`,`item:commerce:Payment`,`item:expenses:Expense`]},hidden:[`item:commerce:Contract`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:events:Event":`custom:gigs`,"item:events:EventSeries":`custom:gigs`,"item:events:EventType":`custom:gigs`,"item:commerce:Customer":`custom:bookings`,"item:commerce:Estimate":`custom:bookings`,"item:commerce:Agreement":`custom:bookings`,"item:products:Product":`custom:merch`,"item:inventory:StockLevel":`custom:merch`,"item:commerce:Order":`custom:merch`,"item:commerce:Vendor":`custom:merch`,"item:commerce:PurchaseOrder":`custom:merch`,"item:commerce:Invoice":`custom:money`,"item:commerce:Payment":`custom:money`,"item:expenses:Expense":`custom:money`},customSections:[{id:`custom:gigs`,label:`Gigs`},{id:`custom:bookings`,label:`Bookings`},{id:`custom:merch`,label:`Merch`},{id:`custom:money`,label:`Money`}],items:{"item:events:Event":{label:`Show calendar`,description:`Every gig and rehearsal, with the venue, the call time and who is playing.`},"item:events:EventSeries":{label:`Residencies`,description:`Regular nights at the same venue, set up once.`},"item:events:EventType":{label:`Show types`,description:`The kinds of date you play, like a club night, a wedding, a festival set or a rehearsal.`},"item:commerce:Customer":{label:`Venues & promoters`,description:`The venues, promoters and private clients who book you, with how to reach them.`},"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for a booking, ready to become a contract when accepted.`},"item:commerce:Agreement":{label:`Booking contracts`,description:`The fee, deposit and terms agreed for each show.`},"item:products:Product":{label:`Products`,description:`Shirts, records, posters and anything else on the merch table, with prices.`},"item:inventory:StockLevel":{label:`Stock`,description:`What is in the merch cases and what is left at the rehearsal space.`},"item:commerce:Order":{label:`Sales`,description:`Merch sold at shows and online.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The printers and pressing plants that make your merch.`},"item:commerce:PurchaseOrder":{label:`Print & pressing orders`,description:`Shirts and records you have ordered and when they arrive.`},"item:commerce:Invoice":{label:`Invoices`,description:`Bills for deposits and show fees, and which are still owed.`},"item:commerce:Payment":{label:`Payments`,description:`Fees, deposits and merch money that has come in.`},"item:expenses:Expense":{label:`Expenses`,description:`Van hire, strings, rehearsal space and travel, with who paid and what to pay back.`}},sections:{"custom:gigs":{icon:`calendar`},"custom:bookings":{icon:`fileText`},"custom:merch":{icon:`shoppingBag`},"custom:money":{icon:`receipt`}}}},sectionDescriptions:{"custom:gigs":`Shows, rehearsals and residencies on the calendar.`,"custom:bookings":`Venues, quotes and the contract for each booking.`,"custom:merch":`Merch, stock, sales and who makes it for you.`,"custom:money":`Invoices, payments and what the band spends.`}}]},n=new Intl.Collator(`en`,{sensitivity:`base`,numeric:!0}),r=[...t.cookbooks].sort((e,t)=>n.compare(e.name,t.name));function i(e){return r.find(t=>t.id===e)}function a(t){return t.document.recipes.map(t=>e.get(t)?.label??t)}export{r as n,a as r,i as t};
|
|
1
|
+
import{x as e}from"./lUJaueNM.js";var t={cookbooks:[{id:`bakery`,name:`Bakery`,icon:`bread`,summary:`Retail and cafe wholesale orders, ingredient stock, batches and suppliers.`,keywords:[`bake`,`baker`,`bakery`,`baking`,`bread`,`pastry`,`cake`,`cookies`,`cafe wholesale`,`coffee shop`,`patisserie`,`sourdough`],settings:{currency:`USD`,paymentTerms:`Net 15`,taxRate:0},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#b45309`,fontFamily:`Georgia`}},recipes:[`commerce.customers`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`commerce.wholesale`,`inventory.stock`,`ledgers.bookkeeping`,`products.ingredients`,`products.simple`],features:[`@happyvertical/smrt-commerce:ProductionOrder`],policies:[{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`channelId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`expiryDate`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`vendorId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`}],layout:{version:1,sectionOrder:[`custom:shop`,`custom:wholesale`,`custom:kitchen`,`custom:buying`,`section:accounting`],itemOrder:{"custom:shop":[`item:commerce:Order`,`item:commerce:Customer`],"custom:wholesale":[`item:commerce:WholesaleOrder`,`item:commerce:Invoice`,`item:commerce:Payment`],"custom:kitchen":[`item:products:Product`,`item:products:Product:ingredients`,`item:inventory:StockLevel`,`item:commerce:ProductionOrder`],"custom:buying":[`item:commerce:Vendor`,`item:commerce:PurchaseOrder`]},hidden:[`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Order":`custom:shop`,"item:commerce:Customer":`custom:shop`,"item:commerce:WholesaleOrder":`custom:wholesale`,"item:commerce:Invoice":`custom:wholesale`,"item:commerce:Payment":`custom:wholesale`,"item:products:Product":`custom:kitchen`,"item:inventory:StockLevel":`custom:kitchen`,"item:commerce:ProductionOrder":`custom:kitchen`,"item:commerce:Vendor":`custom:buying`,"item:commerce:PurchaseOrder":`custom:buying`,"item:products:Product:ingredients":`custom:kitchen`},customSections:[{id:`custom:shop`,label:`Shop`},{id:`custom:wholesale`,label:`Wholesale`},{id:`custom:kitchen`,label:`Kitchen`},{id:`custom:buying`,label:`Buying`}],items:{"item:commerce:Order":{label:`Orders`,description:`Orders from your shop and website customers.`},"item:commerce:WholesaleOrder":{label:`Cafe orders`,description:`Standing and one-off orders from cafes and shops.`},"item:inventory:StockLevel":{label:`Stock`,description:`Baked goods and supplies on hand today.`},"item:commerce:ProductionOrder":{label:`Batches`,description:`What you plan to bake, with the amounts and the day.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The mills, dairies and suppliers you buy from.`},"item:products:Product:ingredients":{label:`Ingredients`,description:`Flour, butter, sugar and the rest, with costs and units.`}},sections:{"custom:shop":{icon:`shoppingBag`},"custom:wholesale":{icon:`briefcase`},"custom:kitchen":{icon:`package`},"custom:buying":{icon:`truck`}}}},sectionDescriptions:{"custom:shop":`Sell to customers and keep their details.`,"custom:wholesale":`Orders, invoices and payments from trade customers.`,"custom:kitchen":`Products, ingredients, stock and what you are making.`,"custom:buying":`Suppliers and what you order from them.`}},{id:`mechanic`,name:`Mechanic`,icon:`car`,summary:`Quotes, work orders, parts, appointments and billing for a repair shop.`,keywords:[`mechanic`,`garage`,`auto repair`,`car repair`,`fix cars`,`car`,`vehicle`,`brakes`,`oil change`,`tyres`,`tires`,`servicing`,`repair shop`],settings:{currency:`USD`,paymentTerms:`Due on receipt`,taxRate:.0825,taxRounding:`document`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{preset:`smrt`},recipes:[`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Contract`,fieldName:`taxRoundingScope`,scopeType:`app`,defaultValue:`"document"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0825`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`taxRoundingScope`,scopeType:`app`,defaultValue:`"document"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0825`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:parts`,`custom:billing`,`custom:schedule`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`],"custom:parts":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`],"custom:schedule":[`item:events:Event`,`item:events:EventType`]},hidden:[`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:products:Product":`custom:parts`,"item:inventory:StockLevel":`custom:parts`,"item:commerce:Vendor":`custom:parts`,"item:commerce:PurchaseOrder":`custom:parts`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:parts`,label:`Parts`},{id:`custom:billing`,label:`Billing`},{id:`custom:schedule`,label:`Schedule`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for repairs, ready to become work orders once approved.`},"item:commerce:Order":{label:`Work orders`,description:`Every job in the shop, from drop-off to pick-up.`},"item:products:Product":{label:`Parts catalog`,description:`The parts you sell and fit, with prices.`},"item:inventory:StockLevel":{label:`Parts on hand`,description:`Parts on the shelf, so you know what to reorder.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The parts suppliers you buy from, with terms and contacts.`},"item:commerce:PurchaseOrder":{label:`Parts orders`,description:`Parts you have ordered and when they arrive.`},"item:events:Event":{label:`Appointments`,description:`Bookings on the shop calendar, by day and bay.`},"item:events:EventType":{label:`Appointment types`,description:`The kinds of service you book, like an oil change or inspection.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:parts":{icon:`package`},"custom:billing":{icon:`receipt`},"custom:schedule":{icon:`calendar`}}}},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:parts":`Parts, materials and the stock on your shelves.`,"custom:billing":`Invoices and the payments against them.`,"custom:schedule":`Appointments and what is on the calendar.`}},{id:`welder`,name:`Welder`,icon:`flame`,summary:`Quotes, jobs, agreements, material and site visits for a welding business.`,keywords:[`weld`,`welder`,`welding`,`fabrication`,`fabricate`,`metal`,`steel`,`gates`,`railings`,`metalwork`,`boilermaker`],settings:{currency:`USD`,paymentTerms:`50% deposit, balance on completion`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{preset:`studio`},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:material`,`custom:billing`,`custom:schedule`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Order`,`item:commerce:Customer`,`item:commerce:Estimate`,`item:commerce:Agreement`],"custom:material":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`],"custom:schedule":[`item:events:Event`,`item:events:EventType`]},hidden:[`item:commerce:Contract`,`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Customer":`custom:jobs`,"item:commerce:Estimate":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:products:Product":`custom:material`,"item:inventory:StockLevel":`custom:material`,"item:commerce:Vendor":`custom:material`,"item:commerce:PurchaseOrder":`custom:material`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:commerce:Order":`custom:jobs`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:material`,label:`Material`},{id:`custom:billing`,label:`Billing`},{id:`custom:schedule`,label:`Schedule`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for jobs, ready to turn into orders when accepted.`},"item:products:Product":{label:`Steel & supplies`,description:`Steel, rod, gas and other materials you stock and charge for.`},"item:inventory:StockLevel":{label:`Material on hand`,description:`Material on hand, so you know what to buy before the next job.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The suppliers you buy metal and gas from.`},"item:commerce:PurchaseOrder":{label:`Material orders`,description:`Material you have ordered and when it lands.`},"item:events:Event":{label:`Site visits`,description:`Visits to measure, quote or install on site, by day.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of visit you make, like a quote visit or install.`},"item:commerce:Order":{label:`Work orders`,description:`Every job you have won, from start to final invoice.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:material":{icon:`layers`},"custom:billing":{icon:`receipt`},"custom:schedule":{icon:`calendar`}}}},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:material":`Material, stock and what you have ordered.`,"custom:billing":`Invoices and the payments against them.`,"custom:schedule":`Appointments and what is on the calendar.`}},{id:`yoga-studio`,name:`Yoga studio`,icon:`yoga`,summary:`Classes, class series, members, memberships and a small retail shop.`,keywords:[`yoga`,`yoga studio`,`pilates`,`studio`,`classes`,`class series`,`meditation`,`members`,`memberships`,`instructor`],settings:{currency:`USD`,paymentTerms:`Due on receipt`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#0f766e`,fontFamily:`ui-rounded`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.invoicing`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxExempt`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxId`,scopeType:`app`,visibility:`hidden`}],layout:{version:1,sectionOrder:[`custom:classes`,`custom:members`,`custom:shop`,`custom:billing`,`section:accounting`],itemOrder:{"custom:classes":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:members":[`item:commerce:Customer`,`item:commerce:Agreement`],"custom:shop":[`item:products:Product`,`item:inventory:StockLevel`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:events:Event":`custom:classes`,"item:events:EventSeries":`custom:classes`,"item:events:EventType":`custom:classes`,"item:commerce:Customer":`custom:members`,"item:commerce:Agreement":`custom:members`,"item:products:Product":`custom:shop`,"item:inventory:StockLevel":`custom:shop`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:classes`,label:`Classes`},{id:`custom:members`,label:`Members`},{id:`custom:shop`,label:`Shop`},{id:`custom:billing`,label:`Billing`}],items:{"item:events:Event":{label:`Class schedule`,description:`Every class on your timetable, with who's teaching and where.`},"item:events:EventSeries":{label:`Class series`,description:`Weekly classes that repeat, so you set them up once.`},"item:events:EventType":{label:`Class types`,description:`Your styles, like Vinyasa or Yin, with length and price.`},"item:commerce:Customer":{label:`Students`,description:`Your students, with how to reach them and what they have booked.`},"item:commerce:Agreement":{label:`Memberships`,description:`Memberships and class packs, with who holds them and when they renew.`},"item:inventory:StockLevel":{label:`Stock`,description:`Mats, props and retail items on hand.`}},sections:{"custom:classes":{icon:`school`},"custom:members":{icon:`users`},"custom:shop":{icon:`shoppingBag`},"custom:billing":{icon:`receipt`}}}},sectionDescriptions:{"custom:classes":`Classes, sessions and bookings.`,"custom:members":`Members and their memberships.`,"custom:shop":`Sell to customers and keep their details.`,"custom:billing":`Invoices and the payments against them.`}},{id:`landscaping`,name:`Landscaping`,icon:`leaf`,summary:`Quotes, jobs, maintenance contracts, materials and the crew schedule for a lawn and landscape business.`,keywords:[`landscaping`,`landscaper`,`lawn care`,`lawn`,`mowing`,`garden`,`gardener`,`yard work`,`hardscape`,`irrigation`,`tree service`,`snow removal`,`grounds`],settings:{currency:`USD`,paymentTerms:`Net 15`,taxRate:.06},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:yard":`Materials, stock and the suppliers you buy from.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#15803d`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.06`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.06`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:yard`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`,`item:commerce:Agreement`],"custom:schedule":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:yard":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventSeries":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:yard`,"item:inventory:StockLevel":`custom:yard`,"item:commerce:Vendor":`custom:yard`,"item:commerce:PurchaseOrder":`custom:yard`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:yard`,label:`Yard`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for new work, ready to become jobs once approved.`},"item:commerce:Order":{label:`Work orders`,description:`Every job you have won, from the first visit to the final invoice.`},"item:commerce:Agreement":{label:`Maintenance contracts`,description:`Weekly mowing and seasonal programs, with who holds them and when they renew.`},"item:events:Event":{label:`Crew schedule`,description:`Visits on the calendar, by day and crew.`},"item:events:EventSeries":{label:`Recurring visits`,description:`Routes that repeat, like a Tuesday mowing round, set up once.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of visit you make, like a mow, a clean-up or an install.`},"item:products:Product":{label:`Materials`,description:`Mulch, soil, sod, plants and the other things you sell and install.`},"item:inventory:StockLevel":{label:`Materials on hand`,description:`What is in the yard and on the trucks.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The nurseries and stone yards you buy from.`},"item:commerce:PurchaseOrder":{label:`Material orders`,description:`Material you have ordered and when it lands.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:yard":{icon:`package`},"custom:billing":{icon:`receipt`}}}}},{id:`salon`,name:`Hair salon`,icon:`scissors`,summary:`Appointments, clients, services, retail stock and payments at the desk for a salon or barbershop.`,keywords:[`salon`,`hair salon`,`barber`,`barbershop`,`hairdresser`,`stylist`,`haircut`,`hair colour`,`hair color`,`highlights`,`blow-dry`,`nails`,`beauty`,`spa`],settings:{currency:`USD`,paymentTerms:`Due on receipt`,taxRate:.07,pricesIncludeTax:!0},sectionDescriptions:{"custom:appointments":`Bookings and the services behind them.`,"custom:clients":`Clients and what they usually have.`,"custom:checkout":`Sales at the desk and the payments against them.`,"custom:shelf":`Retail, backbar stock and who you buy from.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#9d174d`}},recipes:[`commerce.customers`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Contract`,fieldName:`lineAmountType`,scopeType:`app`,defaultValue:`"inclusive"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxExempt`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`lineAmountType`,scopeType:`app`,defaultValue:`"inclusive"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`}],layout:{version:1,sectionOrder:[`custom:appointments`,`custom:clients`,`custom:checkout`,`custom:shelf`,`section:accounting`],itemOrder:{"custom:appointments":[`item:events:Event`,`item:events:EventType`,`item:events:EventSeries`],"custom:clients":[`item:commerce:Customer`],"custom:checkout":[`item:commerce:Order`,`item:commerce:Payment`,`item:commerce:Invoice`],"custom:shelf":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`]},hidden:[`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:events:Event":`custom:appointments`,"item:events:EventType":`custom:appointments`,"item:events:EventSeries":`custom:appointments`,"item:commerce:Customer":`custom:clients`,"item:commerce:Order":`custom:checkout`,"item:commerce:Payment":`custom:checkout`,"item:commerce:Invoice":`custom:checkout`,"item:products:Product":`custom:shelf`,"item:inventory:StockLevel":`custom:shelf`,"item:commerce:Vendor":`custom:shelf`,"item:commerce:PurchaseOrder":`custom:shelf`},customSections:[{id:`custom:appointments`,label:`Appointments`},{id:`custom:clients`,label:`Clients`},{id:`custom:checkout`,label:`Checkout`},{id:`custom:shelf`,label:`Shelf`}],items:{"item:events:Event":{label:`Bookings`,description:`Every booking in the book, by stylist and chair.`},"item:events:EventType":{label:`Appointment types`,description:`The services you book, like a cut, a colour or a beard trim, with their length.`},"item:events:EventSeries":{label:`Standing appointments`,description:`Regulars who come back every few weeks, set up once.`},"item:commerce:Customer":{label:`Client cards`,description:`Your clients, with how to reach them and what they usually have.`},"item:commerce:Order":{label:`Sales`,description:`Each visit’s ticket: the services done and anything bought at the desk.`},"item:commerce:Payment":{label:`Payments`,description:`Money taken at the desk, by card or cash.`},"item:commerce:Invoice":{label:`Invoices`,description:`Bills for bridal parties, packages and accounts that pay later.`},"item:products:Product":{label:`Services & products`,description:`Your services and the retail you sell, with prices.`},"item:inventory:StockLevel":{label:`Retail stock`,description:`Product on the shelf and at the backbar.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The distributors you buy colour, product and towels from.`},"item:commerce:PurchaseOrder":{label:`Supply orders`,description:`Product you have ordered and when it arrives.`}},sections:{"custom:appointments":{icon:`calendar`},"custom:clients":{icon:`users`},"custom:checkout":{icon:`creditCard`},"custom:shelf":{icon:`shoppingBag`}}}}},{id:`roaster`,name:`Coffee roaster`,icon:`coffee`,summary:`Cafe accounts, online orders, green coffee, roast batches and importers for a small roastery or brewery.`,keywords:[`coffee roaster`,`roaster`,`roastery`,`coffee`,`beans`,`green coffee`,`espresso`,`cafe accounts`,`brewery`,`microbrewery`,`taproom`,`kegs`,`small batch`],settings:{currency:`USD`,paymentTerms:`Net 30`,taxRate:.0725},sectionDescriptions:{"custom:shop":`Sell to customers and keep their details.`,"custom:wholesale":`Orders, invoices and payments from trade customers.`,"custom:roastery":`Coffees, green coffee, stock and what you are roasting.`,"custom:buying":`Suppliers and what you order from them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#7c2d12`,fontFamily:`Georgia`}},recipes:[`commerce.customers`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`commerce.wholesale`,`inventory.stock`,`ledgers.bookkeeping`,`products.ingredients`,`products.simple`],features:[`@happyvertical/smrt-commerce:ProductionOrder`],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0725`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0725`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`channelId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`expiryDate`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:ProductionOrder`,fieldName:`vendorId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`}],layout:{version:1,sectionOrder:[`custom:shop`,`custom:wholesale`,`custom:roastery`,`custom:buying`,`section:accounting`],itemOrder:{"custom:shop":[`item:commerce:Order`,`item:commerce:Customer`],"custom:wholesale":[`item:commerce:WholesaleOrder`,`item:commerce:Invoice`,`item:commerce:Payment`],"custom:roastery":[`item:products:Product`,`item:products:Product:ingredients`,`item:inventory:StockLevel`,`item:commerce:ProductionOrder`],"custom:buying":[`item:commerce:Vendor`,`item:commerce:PurchaseOrder`]},hidden:[`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Order":`custom:shop`,"item:commerce:Customer":`custom:shop`,"item:commerce:WholesaleOrder":`custom:wholesale`,"item:commerce:Invoice":`custom:wholesale`,"item:commerce:Payment":`custom:wholesale`,"item:products:Product":`custom:roastery`,"item:products:Product:ingredients":`custom:roastery`,"item:inventory:StockLevel":`custom:roastery`,"item:commerce:ProductionOrder":`custom:roastery`,"item:commerce:Vendor":`custom:buying`,"item:commerce:PurchaseOrder":`custom:buying`},customSections:[{id:`custom:shop`,label:`Shop`},{id:`custom:wholesale`,label:`Wholesale`},{id:`custom:roastery`,label:`Roastery`},{id:`custom:buying`,label:`Buying`}],items:{"item:commerce:Order":{label:`Online & retail orders`,description:`Orders from the website and the roastery door.`},"item:commerce:WholesaleOrder":{label:`Cafe orders`,description:`Standing and one-off orders from cafes, bars and grocers.`},"item:products:Product":{label:`Coffees`,description:`Roasted coffees and shop items, with prices.`},"item:products:Product:ingredients":{label:`Green coffee`,description:`Green coffee and packaging, by the bag, with costs.`},"item:inventory:StockLevel":{label:`Stock`,description:`Roasted and green coffee on hand today.`},"item:commerce:ProductionOrder":{label:`Roast batches`,description:`What you plan to roast, with the amounts and the day.`},"item:commerce:Vendor":{label:`Importers & suppliers`,description:`The importers and packaging suppliers you buy from.`},"item:commerce:PurchaseOrder":{label:`Green coffee orders`,description:`Green coffee you have bought and when the container lands.`}},sections:{"custom:shop":{icon:`shoppingBag`},"custom:wholesale":{icon:`briefcase`},"custom:roastery":{icon:`package`},"custom:buying":{icon:`truck`}}}}},{id:`equipment-rental`,name:`Equipment rental`,icon:`forklift`,summary:`Rentals, quotes, the fleet and its availability, pickups and returns, and billing for a hire yard.`,keywords:[`equipment rental`,`rental`,`rentals`,`hire`,`tool hire`,`plant hire`,`party rental`,`excavator`,`scaffolding`,`generators`,`bike rental`,`kayak rental`,`fleet`],settings:{currency:`USD`,paymentTerms:`Deposit on pickup, balance on return`,taxRate:.08,taxRounding:`document`},sectionDescriptions:{"custom:rentals":`Rentals, quotes and the customers they belong to.`,"custom:fleet":`Equipment, availability and who you buy from.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#a16207`}},recipes:[`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.leases`,`commerce.purchases`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:Contract`,fieldName:`taxRoundingScope`,scopeType:`app`,defaultValue:`"document"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.08`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`taxRoundingScope`,scopeType:`app`,defaultValue:`"document"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.08`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Deposit on pickup, balance on return"`}],layout:{version:1,sectionOrder:[`custom:rentals`,`custom:fleet`,`custom:schedule`,`custom:billing`,`section:accounting`],itemOrder:{"custom:rentals":[`item:commerce:Lease`,`item:commerce:Estimate`,`item:commerce:Customer`],"custom:fleet":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Lease":`custom:rentals`,"item:commerce:Estimate":`custom:rentals`,"item:commerce:Customer":`custom:rentals`,"item:products:Product":`custom:fleet`,"item:inventory:StockLevel":`custom:fleet`,"item:commerce:Vendor":`custom:fleet`,"item:commerce:PurchaseOrder":`custom:fleet`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:rentals`,label:`Rentals`},{id:`custom:fleet`,label:`Fleet`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Lease":{label:`Rental contracts`,description:`Every rental out the gate, with the dates and what is due.`},"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for a hire, ready to become a rental when accepted.`},"item:products:Product":{label:`Equipment`,description:`The machines and tools you hire out, with the daily rate.`},"item:inventory:StockLevel":{label:`Availability`,description:`What is in the yard, out on hire or in for service.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The dealers and parts suppliers you buy from.`},"item:commerce:PurchaseOrder":{label:`Equipment & parts orders`,description:`Machines and parts you have ordered and when they arrive.`},"item:events:Event":{label:`Pickups & returns`,description:`Pickups, returns and deliveries on the calendar, by day.`},"item:events:EventType":{label:`Booking types`,description:`The kinds of booking you make, like a pickup, a return or a delivery.`}},sections:{"custom:rentals":{icon:`fileText`},"custom:fleet":{icon:`truck`},"custom:schedule":{icon:`calendar`},"custom:billing":{icon:`receipt`}}}}},{id:`nonprofit`,name:`Non-profit`,icon:`heart`,summary:`Members, memberships, dues and donations, events and the books for a club, society or charity.`,keywords:[`non-profit`,`nonprofit`,`charity`,`club`,`society`,`association`,`members`,`membership dues`,`donations`,`donors`,`fundraiser`,`volunteers`,`community group`],settings:{currency:`USD`,paymentTerms:`Due on receipt`,taxRate:0},sectionDescriptions:{"custom:members":`Members and their memberships.`,"custom:events":`Meetings, fundraisers and volunteer days.`,"custom:giving":`Dues, pledges and the money that comes in.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#1d4ed8`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.invoicing`,`events.calendar`,`ledgers.bookkeeping`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxExempt`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on receipt"`}],layout:{version:1,sectionOrder:[`custom:members`,`custom:events`,`custom:giving`,`section:accounting`],itemOrder:{"custom:members":[`item:commerce:Customer`,`item:commerce:Agreement`],"custom:events":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:giving":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`],moved:{"item:commerce:Customer":`custom:members`,"item:commerce:Agreement":`custom:members`,"item:events:Event":`custom:events`,"item:events:EventSeries":`custom:events`,"item:events:EventType":`custom:events`,"item:commerce:Invoice":`custom:giving`,"item:commerce:Payment":`custom:giving`},customSections:[{id:`custom:members`,label:`Members`},{id:`custom:events`,label:`Events`},{id:`custom:giving`,label:`Giving`}],items:{"item:commerce:Customer":{label:`Members & donors`,description:`Your members and donors, with how to reach them.`},"item:commerce:Agreement":{label:`Memberships`,description:`Annual, family and student memberships, with who holds them and when they renew.`},"item:events:Event":{label:`Event calendar`,description:`Meetings, fundraisers and volunteer days, with who is coming.`},"item:events:EventSeries":{label:`Regular meetings`,description:`Meetings that repeat, like the monthly meetup, set up once.`},"item:events:EventType":{label:`Event types`,description:`The kinds of event you run, like a fundraiser or a clean-up.`},"item:commerce:Invoice":{label:`Dues & pledges`,description:`Dues and pledges you have asked for and which are still owed.`},"item:commerce:Payment":{label:`Donations & payments`,description:`Money that has come in, from dues, gifts and tickets.`}},sections:{"custom:members":{icon:`users`},"custom:events":{icon:`calendar`},"custom:giving":{icon:`creditCard`}}}}},{id:`agency`,name:`Agency`,icon:`pencil`,summary:`Clients, proposals, retainers, projects, time, expenses and invoices for a consulting or design studio.`,keywords:[`agency`,`design agency`,`consulting`,`consultant`,`consultancy`,`studio`,`design studio`,`freelance`,`retainer`,`proposals`,`billable hours`,`timesheets`,`creative`],settings:{currency:`USD`,paymentTerms:`Net 30`,taxRate:0},sectionDescriptions:{"custom:accounts":`Clients, proposals and the contracts you hold with them.`,"custom:work":`Projects, tasks, time and costs.`,"custom:meetings":`Meetings with clients and the studio.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#4338ca`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.vendors`,`events.calendar`,`expenses.tracking`,`ledgers.bookkeeping`,`projects.tracker`,`timesheets.time-entries`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`}],layout:{version:1,sectionOrder:[`custom:accounts`,`custom:work`,`custom:meetings`,`custom:billing`,`section:accounting`],itemOrder:{"custom:accounts":[`item:commerce:Customer`,`item:commerce:Estimate`,`item:commerce:Agreement`],"custom:work":[`item:projects:Project`,`item:projects:Issue`,`item:timesheets:ServiceTimeEntry`,`item:expenses:Expense`],"custom:meetings":[`item:events:Event`,`item:events:EventType`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`,`item:commerce:Vendor`]},hidden:[`item:commerce:Contract`,`item:projects:Label`,`item:events:EventSeries`],moved:{"item:commerce:Customer":`custom:accounts`,"item:commerce:Estimate":`custom:accounts`,"item:commerce:Agreement":`custom:accounts`,"item:projects:Project":`custom:work`,"item:projects:Issue":`custom:work`,"item:timesheets:ServiceTimeEntry":`custom:work`,"item:expenses:Expense":`custom:work`,"item:events:Event":`custom:meetings`,"item:events:EventType":`custom:meetings`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`,"item:commerce:Vendor":`custom:billing`},customSections:[{id:`custom:accounts`,label:`Clients`},{id:`custom:work`,label:`Work`},{id:`custom:meetings`,label:`Meetings`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Customer":{label:`Client companies`,description:`The companies you work for, with how to reach them.`},"item:commerce:Estimate":{label:`Proposals`,description:`Proposals you have sent, ready to become a contract when accepted.`},"item:commerce:Agreement":{label:`Contracts`,description:`Retainers and statements of work, with the terms and the dates.`},"item:projects:Project":{label:`Projects`,description:`Each engagement, with what it covers and where it stands.`},"item:projects:Issue":{label:`Tasks`,description:`The work inside each project, from to-do to done.`},"item:timesheets:ServiceTimeEntry":{label:`Time entries`,description:`Hours logged by person and project, from draft to approved.`},"item:expenses:Expense":{label:`Expenses`,description:`Costs on a project, with the receipt and whether to bill them on.`},"item:events:Event":{label:`Client meetings`,description:`Kickoffs, reviews and check-ins with clients, by day.`},"item:events:EventType":{label:`Meeting types`,description:`The kinds of meeting you hold, like a kickoff or a review.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The printers, photographers and freelancers you buy from.`}},sections:{"custom:accounts":{icon:`users`},"custom:work":{icon:`briefcase`},"custom:meetings":{icon:`calendar`},"custom:billing":{icon:`receipt`}}}}},{id:`plumber`,name:`Plumber`,icon:`tool`,summary:`Quotes, service calls, parts, appointments and billing for a plumbing business.`,keywords:[`plumber`,`plumbing`,`pipes`,`leak`,`drain`,`blocked drain`,`water heater`,`boiler`,`bathroom`,`faucet`,`toilet`,`sewer`,`emergency call-out`,`gas fitter`],settings:{currency:`USD`,paymentTerms:`Due on completion`,taxRate:.07},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:parts":`Parts, materials and the stock on your shelves.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#0e7490`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on completion"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due on completion"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on completion"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on completion"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due on completion"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:parts`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Order`,`item:commerce:Estimate`,`item:commerce:Customer`,`item:commerce:Agreement`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:parts":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Order":`custom:jobs`,"item:commerce:Estimate":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:parts`,"item:inventory:StockLevel":`custom:parts`,"item:commerce:Vendor":`custom:parts`,"item:commerce:PurchaseOrder":`custom:parts`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:parts`,label:`Parts`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Order":{label:`Service calls`,description:`Call-outs and booked jobs, emergencies first, from the first call to the final invoice.`},"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for installs and bigger repairs, ready to book once approved.`},"item:commerce:Agreement":{label:`Service plans`,description:`Yearly water heater and drain service plans, with who holds them and when they renew.`},"item:events:Event":{label:`Appointments`,description:`Calls on the calendar, by day and van.`},"item:events:EventType":{label:`Call types`,description:`The kinds of call you take, like a leak, a blocked drain or a water heater install.`},"item:products:Product":{label:`Parts & fittings`,description:`Valves, fittings, pipe and fixtures you fit and charge for.`},"item:inventory:StockLevel":{label:`Van stock`,description:`What is on each van and in the store, so a call is not a second trip.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The plumbing merchants and wholesalers you buy from.`},"item:commerce:PurchaseOrder":{label:`Parts orders`,description:`Parts you have ordered and when they are ready for pickup.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:parts":{icon:`package`},"custom:billing":{icon:`receipt`}}}}},{id:`electrician`,name:`Electrician`,icon:`bolt`,summary:`Quotes, installs, repairs, materials and billing for an electrical contractor.`,keywords:[`electrician`,`electrical`,`electric`,`wiring`,`rewire`,`panel upgrade`,`breaker`,`lighting`,`outlets`,`ev charger`,`inspection`,`sparky`,`electrical contractor`],settings:{currency:`USD`,paymentTerms:`Net 15`,taxRate:.0625},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:material":`Material, stock and what you have ordered.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#ca8a04`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0625`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.0625`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 15"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:material`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`,`item:commerce:Agreement`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:material":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:material`,"item:inventory:StockLevel":`custom:material`,"item:commerce:Vendor":`custom:material`,"item:commerce:PurchaseOrder":`custom:material`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:material`,label:`Material`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Priced quotes for installs, rewires and upgrades, ready to schedule once accepted.`},"item:commerce:Order":{label:`Work orders`,description:`Installs, repairs and inspections you have won, from rough-in to sign-off.`},"item:commerce:Agreement":{label:`Maintenance contracts`,description:`Planned maintenance and testing for commercial sites, with renewal dates.`},"item:events:Event":{label:`Site visits`,description:`Visits to quote, wire, inspect or test, by day and electrician.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of visit you make, like a panel upgrade, a fault call or an inspection.`},"item:products:Product":{label:`Electrical supplies`,description:`Cable, breakers, devices and fixtures you stock and charge for.`},"item:inventory:StockLevel":{label:`Materials on hand`,description:`Cable and parts in the shop and on the trucks.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The electrical wholesalers and lighting suppliers you buy from.`},"item:commerce:PurchaseOrder":{label:`Material orders`,description:`Material you have ordered and when it lands.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:material":{icon:`layers`},"custom:billing":{icon:`receipt`}}}}},{id:`painter`,name:`Painter`,icon:`brush`,summary:`Estimates, jobs, paint and materials, crew schedule and billing for a painting business.`,keywords:[`painter`,`painting`,`decorator`,`decorating`,`house painting`,`interior painting`,`exterior painting`,`wallpaper`,`drywall repair`,`cabinet painting`,`stain`,`repaint`],settings:{currency:`USD`,paymentTerms:`50% deposit, balance on completion`,taxRate:.06},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:paint":`Paint, sundries and the stock in your store room.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#be185d`}},recipes:[`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.06`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.06`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on completion"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:paint`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:paint":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:paint`,"item:inventory:StockLevel":`custom:paint`,"item:commerce:Vendor":`custom:paint`,"item:commerce:PurchaseOrder":`custom:paint`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Crew`},{id:`custom:paint`,label:`Paint & supplies`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Estimate":{label:`Estimates`,description:`Room-by-room estimates from the site visit, ready to book once signed.`},"item:commerce:Order":{label:`Projects`,description:`Every painting project you have booked, from prep to the final walkthrough.`},"item:events:Event":{label:`Crew schedule`,description:`Site visits and crew days on the calendar, by job.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of day you book, like an estimate visit, prep or a touch-up.`},"item:products:Product":{label:`Paint & sundries`,description:`Paint, primer, caulk, tape and the other things you use and charge for.`},"item:inventory:StockLevel":{label:`Paint on hand`,description:`Paint and supplies in the store room and on the van.`},"item:commerce:Vendor":{label:`Paint suppliers`,description:`The paint stores and suppliers you buy from, with trade terms.`},"item:commerce:PurchaseOrder":{label:`Supply orders`,description:`Paint and supplies you have ordered and when they are ready.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:paint":{icon:`package`},"custom:billing":{icon:`receipt`}}}}},{id:`roofer`,name:`Roofer`,icon:`home`,summary:`Inspections, quotes, jobs, materials and billing for a roofing contractor.`,keywords:[`roofer`,`roofing`,`roof`,`roof repair`,`reroof`,`shingles`,`gutters`,`flashing`,`leaking roof`,`storm damage`,`flat roof`,`skylight`],settings:{currency:`USD`,paymentTerms:`Net 30`,taxRate:.07},sectionDescriptions:{"custom:jobs":`Work orders and the customers they belong to.`,"custom:material":`Material, stock and what you have ordered.`,"custom:schedule":`Appointments and what is on the calendar.`,"custom:billing":`Invoices and the payments against them.`},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#475569`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:ContractLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`},{objectRef:`@happyvertical/smrt-commerce:InvoiceLineItem`,fieldName:`taxRate`,scopeType:`app`,defaultValue:`0.07`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Net 30"`}],layout:{version:1,sectionOrder:[`custom:jobs`,`custom:schedule`,`custom:material`,`custom:billing`,`section:accounting`],itemOrder:{"custom:jobs":[`item:commerce:Estimate`,`item:commerce:Order`,`item:commerce:Customer`,`item:commerce:Agreement`],"custom:schedule":[`item:events:Event`,`item:events:EventType`],"custom:material":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:events:EventSeries`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:commerce:Estimate":`custom:jobs`,"item:commerce:Order":`custom:jobs`,"item:commerce:Customer":`custom:jobs`,"item:commerce:Agreement":`custom:jobs`,"item:events:Event":`custom:schedule`,"item:events:EventType":`custom:schedule`,"item:products:Product":`custom:material`,"item:inventory:StockLevel":`custom:material`,"item:commerce:Vendor":`custom:material`,"item:commerce:PurchaseOrder":`custom:material`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:jobs`,label:`Jobs`},{id:`custom:schedule`,label:`Schedule`},{id:`custom:material`,label:`Material`},{id:`custom:billing`,label:`Billing`}],items:{"item:commerce:Estimate":{label:`Quotes`,description:`Quotes written up after an inspection, for repairs and full replacements.`},"item:commerce:Order":{label:`Roofing jobs`,description:`Repairs and re-roofs you have won, from tear-off to final cleanup.`},"item:commerce:Agreement":{label:`Maintenance agreements`,description:`Yearly inspection and gutter programs for homes and buildings, with renewal dates.`},"item:events:Event":{label:`Inspections & visits`,description:`Roof inspections, measure-ups and crew days on the calendar.`},"item:events:EventType":{label:`Visit types`,description:`The kinds of visit you make, like an inspection, a storm check or a tear-off.`},"item:products:Product":{label:`Roofing products`,description:`Shingles, underlayment, flashing and fasteners you install and charge for.`},"item:inventory:StockLevel":{label:`Materials on hand`,description:`Bundles and rolls in the yard and on the trailer.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The roofing distributors and lumber yards you buy from.`},"item:commerce:PurchaseOrder":{label:`Material orders`,description:`Material you have ordered and when it is delivered to site.`}},sections:{"custom:jobs":{icon:`wrench`},"custom:schedule":{icon:`calendar`},"custom:material":{icon:`layers`},"custom:billing":{icon:`receipt`}}}}},{id:`music-teacher`,name:`Music teacher`,icon:`music`,summary:`Students, lesson schedule, packages, recitals and billing for a music teacher or studio.`,keywords:[`music teacher`,`music lessons`,`music studio`,`music school`,`piano teacher`,`piano lessons`,`guitar lessons`,`violin lessons`,`voice lessons`,`singing lessons`,`drum lessons`,`recital`,`instrument rental`,`sheet music`],settings:{currency:`USD`,paymentTerms:`Due at the start of each month`,taxRate:0},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#6d28d9`,fontFamily:`Georgia`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.invoicing`,`commerce.leases`,`events.calendar`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxExempt`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`taxId`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"Due at the start of each month"`}],layout:{version:1,sectionOrder:[`custom:lessons`,`custom:students`,`custom:instruments`,`custom:billing`,`section:accounting`],itemOrder:{"custom:lessons":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:students":[`item:commerce:Customer`,`item:commerce:Agreement`],"custom:instruments":[`item:commerce:Lease`,`item:products:Product`,`item:inventory:StockLevel`],"custom:billing":[`item:commerce:Invoice`,`item:commerce:Payment`]},hidden:[`item:commerce:Contract`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:events:Event":`custom:lessons`,"item:events:EventSeries":`custom:lessons`,"item:events:EventType":`custom:lessons`,"item:commerce:Customer":`custom:students`,"item:commerce:Agreement":`custom:students`,"item:commerce:Lease":`custom:instruments`,"item:products:Product":`custom:instruments`,"item:inventory:StockLevel":`custom:instruments`,"item:commerce:Invoice":`custom:billing`,"item:commerce:Payment":`custom:billing`},customSections:[{id:`custom:lessons`,label:`Lessons`},{id:`custom:students`,label:`Students`},{id:`custom:instruments`,label:`Rentals & shop`},{id:`custom:billing`,label:`Billing`}],items:{"item:events:Event":{label:`Lesson calendar`,description:`Every lesson, group class and recital, with the teacher and the room.`},"item:events:EventSeries":{label:`Weekly slots`,description:`A student’s regular lesson time, set up once for the term.`},"item:events:EventType":{label:`Lesson types`,description:`Private lessons, group classes and recitals, with their length.`},"item:commerce:Customer":{label:`Students & families`,description:`Your students, with a parent or guardian to contact for younger ones.`},"item:commerce:Agreement":{label:`Lesson packages`,description:`Term enrolments and lesson packs, with who holds them and when they renew.`},"item:commerce:Lease":{label:`Instrument rentals`,description:`Instruments out on rent, with the student, the dates and the monthly fee.`},"item:products:Product":{label:`Books & instruments`,description:`Method books, sheet music, accessories and rental instruments, with prices.`},"item:inventory:StockLevel":{label:`Stock`,description:`Books, strings and rental instruments on the shelf.`}},sections:{"custom:lessons":{icon:`school`},"custom:students":{icon:`users`},"custom:instruments":{icon:`package`},"custom:billing":{icon:`receipt`}}}},sectionDescriptions:{"custom:lessons":`Lessons, recitals and the weekly timetable.`,"custom:students":`Students, their families and the packages they hold.`,"custom:instruments":`Instrument rentals, books and sheet music on the shelf.`,"custom:billing":`Invoices and the payments against them.`}},{id:`band`,name:`Band`,icon:`microphone`,summary:`Gigs, venues, booking contracts, merch and billing for a band.`,keywords:[`band`,`gigs`,`gigging`,`live music`,`musicians`,`ensemble`,`wedding band`,`cover band`,`venues`,`booking`,`promoter`,`merch`,`merchandise`,`tour`,`residency`],settings:{currency:`USD`,paymentTerms:`50% deposit, balance on the night`,taxRate:0},document:{$schema:`https://s-m-r-t.dev/schemas/cookbook/v1.json`,version:1,theme:{custom:{primary:`#b91c1c`}},recipes:[`commerce.agreements`,`commerce.customers`,`commerce.estimates`,`commerce.invoicing`,`commerce.purchases`,`commerce.sales`,`commerce.vendors`,`events.calendar`,`expenses.tracking`,`inventory.stock`,`ledgers.bookkeeping`,`products.simple`],features:[],policies:[{objectRef:`@happyvertical/smrt-commerce:Agreement`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`creditLimit`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`customerType`,scopeType:`app`,visibility:`hidden`},{objectRef:`@happyvertical/smrt-commerce:Customer`,fieldName:`paymentTerms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Estimate`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`currency`,scopeType:`app`,defaultValue:`"USD"`},{objectRef:`@happyvertical/smrt-commerce:Invoice`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Lease`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:Order`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`},{objectRef:`@happyvertical/smrt-commerce:WholesaleOrder`,fieldName:`terms`,scopeType:`app`,defaultValue:`"50% deposit, balance on the night"`}],layout:{version:1,sectionOrder:[`custom:gigs`,`custom:bookings`,`custom:merch`,`custom:money`,`section:accounting`],itemOrder:{"custom:gigs":[`item:events:Event`,`item:events:EventSeries`,`item:events:EventType`],"custom:bookings":[`item:commerce:Customer`,`item:commerce:Estimate`,`item:commerce:Agreement`],"custom:merch":[`item:products:Product`,`item:inventory:StockLevel`,`item:commerce:Order`,`item:commerce:Vendor`,`item:commerce:PurchaseOrder`],"custom:money":[`item:commerce:Invoice`,`item:commerce:Payment`,`item:expenses:Expense`]},hidden:[`item:commerce:Contract`,`item:inventory:InventoryLocation`,`item:inventory:StockMovement`],moved:{"item:events:Event":`custom:gigs`,"item:events:EventSeries":`custom:gigs`,"item:events:EventType":`custom:gigs`,"item:commerce:Customer":`custom:bookings`,"item:commerce:Estimate":`custom:bookings`,"item:commerce:Agreement":`custom:bookings`,"item:products:Product":`custom:merch`,"item:inventory:StockLevel":`custom:merch`,"item:commerce:Order":`custom:merch`,"item:commerce:Vendor":`custom:merch`,"item:commerce:PurchaseOrder":`custom:merch`,"item:commerce:Invoice":`custom:money`,"item:commerce:Payment":`custom:money`,"item:expenses:Expense":`custom:money`},customSections:[{id:`custom:gigs`,label:`Gigs`},{id:`custom:bookings`,label:`Bookings`},{id:`custom:merch`,label:`Merch`},{id:`custom:money`,label:`Money`}],items:{"item:events:Event":{label:`Show calendar`,description:`Every gig and rehearsal, with the venue, the call time and who is playing.`},"item:events:EventSeries":{label:`Residencies`,description:`Regular nights at the same venue, set up once.`},"item:events:EventType":{label:`Show types`,description:`The kinds of date you play, like a club night, a wedding, a festival set or a rehearsal.`},"item:commerce:Customer":{label:`Venues & promoters`,description:`The venues, promoters and private clients who book you, with how to reach them.`},"item:commerce:Estimate":{label:`Quotes`,description:`Quotes for a booking, ready to become a contract when accepted.`},"item:commerce:Agreement":{label:`Booking contracts`,description:`The fee, deposit and terms agreed for each show.`},"item:products:Product":{label:`Products`,description:`Shirts, records, posters and anything else on the merch table, with prices.`},"item:inventory:StockLevel":{label:`Stock`,description:`What is in the merch cases and what is left at the rehearsal space.`},"item:commerce:Order":{label:`Sales`,description:`Merch sold at shows and online.`},"item:commerce:Vendor":{label:`Suppliers`,description:`The printers and pressing plants that make your merch.`},"item:commerce:PurchaseOrder":{label:`Print & pressing orders`,description:`Shirts and records you have ordered and when they arrive.`},"item:commerce:Invoice":{label:`Invoices`,description:`Bills for deposits and show fees, and which are still owed.`},"item:commerce:Payment":{label:`Payments`,description:`Fees, deposits and merch money that has come in.`},"item:expenses:Expense":{label:`Expenses`,description:`Van hire, strings, rehearsal space and travel, with who paid and what to pay back.`}},sections:{"custom:gigs":{icon:`calendar`},"custom:bookings":{icon:`fileText`},"custom:merch":{icon:`shoppingBag`},"custom:money":{icon:`receipt`}}}},sectionDescriptions:{"custom:gigs":`Shows, rehearsals and residencies on the calendar.`,"custom:bookings":`Venues, quotes and the contract for each booking.`,"custom:merch":`Merch, stock, sales and who makes it for you.`,"custom:money":`Invoices, payments and what the band spends.`}}]},n=new Intl.Collator(`en`,{sensitivity:`base`,numeric:!0}),r=[...t.cookbooks].sort((e,t)=>n.compare(e.name,t.name));function i(e){return r.find(t=>t.id===e)}function a(t){return t.document.recipes.map(t=>e.get(t)?.label??t)}export{r as n,a as r,i as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{$ as e,B as t,Ct as n,Dt as r,E as i,Ft as a,G as o,H as s,J as c,L as l,Ot as u,Pt as d,R as f,U as p,W as m,a as h,bt as g,ct as _,d as v,ft as y,gt as b,ht as x,j as S,mt as C,nt as w,pt as T,r as E,st as D,v as O,vt as k,xt as A}from"./DG3qFFTE.js";import"./xihTtKlq.js";import{i as j}from"./Bv5jGtB8.js";import{a as M,t as ee}from"./YUSKx8_q.js";import{Ct as N,_t as P,bt as te,ft as F,x as I}from"./D3lXu_rt.js";import{n as L}from"./DK8Blf1Y.js";import{S as ne,_ as R}from"./BeL8dJx9.js";import{t as z}from"./DF-0MxNw.js";import"./BQLQsso4.js";import"./DfN2k_EX.js";import{b as B,i as V}from"./CsaWd8kG.js";import{A as re,j as H,y as ie}from"./DmHVTNcC.js";import{b as U,et as W,t as G}from"./lUJaueNM.js";import{a as K,c as q,d as J,f as Y,h as ae,l as oe,n as se,p as X,s as Z}from"./CdKHckEF.js";import{n as ce,t as le}from"./DIgo5ngo.js";var ue=/^[A-Za-z][A-Za-z0-9_]*$/,de=/^[a-z][a-z0-9_]*$/,fe=/^[A-Za-z@][A-Za-z0-9_@./:-]*$/,pe=/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/,me=new Set([`minute`,`hour`,`day`,`week`,`month`,`quarter`,`year`]),he=new Set([`count`,`countDistinct`,`sum`,`avg`,`min`,`max`]),ge=new Set([`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`in`,`notIn`,`contains`,`isNull`,`isNotNull`]),_e=new Set([`eq`,`ne`,`gt`,`gte`,`lt`,`lte`]),ve=new Set([`table`,`bar`,`line`,`pie`,`stat`]),ye=new Set(`all.and.as.asc.between.by.case.cast.check.column.constraint.create.cross.default.delete.desc.distinct.drop.else.end.except.exists.false.for.foreign.from.full.group.having.in.inner.insert.intersect.into.is.join.left.like.limit.natural.not.null.offset.on.or.order.outer.primary.references.right.select.set.table.then.to.true.union.unique.update.user.using.values.when.where.with`.split(`.`));function be(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null?e:null}function xe(e,t){return Object.keys(e).every(e=>t.includes(e))}function Se(e,t,n=!1){if(e===void 0)return n;if(typeof e!=`string`)return!1;let r=e.trim();return r.length>0&&r.length<=t&&r===e&&!pe.test(r)}function Ce(e){return typeof e==`string`&&e.length<=64&&ue.test(e)}function we(e){return typeof e==`string`&&e.length<=40&&de.test(e)&&!ye.has(e)}function Te(e){return typeof e==`string`&&e.length<=256&&!e.includes(`\0`)||typeof e==`number`&&Number.isFinite(e)||typeof e==`boolean`}function Ee(e){let t=be(e);if(!t||!xe(t,[`version`,`title`,`description`,`source`,`dimensions`,`measures`,`filters`,`having`,`sort`,`limit`,`chart`])||t.version!==1||!Se(t.title,120)||!Se(t.description,500,!0)||typeof t.source!=`string`||t.source.length===0||t.source.length>120||!fe.test(t.source)||!Array.isArray(t.dimensions)||t.dimensions.length>4||!Array.isArray(t.measures)||t.measures.length<1||t.measures.length>6||!Array.isArray(t.filters)||t.filters.length>12||!Array.isArray(t.having)||t.having.length>4||!Array.isArray(t.sort)||t.sort.length>3||!Number.isSafeInteger(t.limit)||t.limit<1||t.limit>1e3)return!1;let n=new Set,r=new Set,i=new Set;for(let e of t.dimensions){let t=be(e);if(!t||!xe(t,[`field`,`as`,`bucket`])||!Ce(t.field)||!we(t.as)||t.bucket!==void 0&&(typeof t.bucket!=`string`||!me.has(t.bucket))||i.has(t.as))return!1;i.add(t.as),n.add(t.as)}for(let e of t.measures){let t=be(e);if(!t||!xe(t,[`fn`,`field`,`as`])||typeof t.fn!=`string`||!he.has(t.fn)||!we(t.as)||i.has(t.as)||t.field!==void 0&&!Ce(t.field)||t.fn!==`count`&&t.field===void 0)return!1;i.add(t.as),r.add(t.as)}for(let e of t.filters){let t=be(e);if(!t||!xe(t,[`field`,`op`,`value`])||!Ce(t.field)||typeof t.op!=`string`||!ge.has(t.op))return!1;if(t.op===`isNull`||t.op===`isNotNull`){if(t.value!==void 0)return!1}else if(t.op===`in`||t.op===`notIn`){if(!Array.isArray(t.value)||t.value.length<1||t.value.length>100||!t.value.every(Te))return!1}else if(!Te(t.value)||t.op===`contains`&&typeof t.value!=`string`)return!1}for(let e of t.having){let t=be(e);if(!t||!xe(t,[`measure`,`op`,`value`])||!we(t.measure)||!r.has(t.measure)||typeof t.op!=`string`||!_e.has(t.op)||typeof t.value!=`number`||!Number.isFinite(t.value))return!1}for(let e of t.sort){let t=be(e);if(!t||!xe(t,[`by`,`direction`])||!we(t.by)||!i.has(t.by)||t.direction!==`asc`&&t.direction!==`desc`)return!1}let a=be(t.chart);return!(!a||!xe(a,[`type`,`x`,`y`])||typeof a.type!=`string`||!ve.has(a.type)||a.x!==void 0&&(!we(a.x)||!n.has(a.x))||a.y!==void 0&&(!Array.isArray(a.y)||a.y.length>6||!a.y.every(e=>we(e)&&r.has(e))))}function De(e){let t=e;if(typeof e==`string`){if(e.length>65536)return null;try{t=JSON.parse(e)}catch{return null}}return Ee(t)?t:null}function Oe(e){if(e&&typeof e==`object`){let t=e;if(t.status===401||t.status===403||t.code===`unknown_field`)return`reports.denied`;if(t.code===`invalid_result`)return`reports.invalid`}return`reports.error`}function ke(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.version===1&&typeof t.title==`string`&&typeof t.specHash==`string`&&typeof t.ranAt==`string`&&typeof t.truncated==`boolean`&&Array.isArray(t.columns)&&t.columns.length>0&&t.columns.length<=10&&new Set(t.columns.map(e=>e?.id)).size===t.columns.length&&t.columns.every(e=>e&&typeof e.id==`string`&&typeof e.label==`string`&&[`dimension`,`measure`].includes(e.role)&&[`string`,`integer`,`decimal`,`boolean`,`datetime`,`id`].includes(e.type))&&Array.isArray(t.rows)&&t.rows.length<=1e3&&t.rowCount===t.rows.length&&t.rows.every(e=>e&&typeof e==`object`&&t.columns.every(t=>{let n=e[t.id];return n===null?!0:t.type===`integer`?typeof n==`number`&&Number.isSafeInteger(n):t.type===`decimal`?typeof n==`number`&&Number.isFinite(n):t.type===`boolean`?typeof n==`boolean`:typeof n==`string`}))&&!!t.chart&&[`bar`,`line`,`table`,`pie`,`stat`].includes(t.chart.type)&&(t.chart.y===void 0||Array.isArray(t.chart.y)&&t.chart.y.every(e=>t.columns.some(t=>t.id===e&&t.role===`measure`)))&&(t.chart.x===void 0||t.columns.some(e=>e.id===t.chart.x))}function Ae(e,t,n,r){return e==null?`–`:typeof e==`number`?H(e,{format:t.format===`money`?`money`:t.type===`integer`?`integer`:`decimal`,locale:n,currency:r}):String(e)}function je(e){if(!e||typeof e!=`object`)return!1;let t=e;if(t.status!==`awaiting_confirmation`||typeof t.specHash!=`string`||!/^[a-f0-9]{64}$/.test(t.specHash)||typeof t.sourceLabel!=`string`||t.sourceLabel.length<1||t.sourceLabel.length>120||typeof t.confirmPath!=`string`||t.confirmPath.length>2048||!t.confirmPath.startsWith(`/`)||t.confirmPath.startsWith(`//`)||!ke(t.preview)||t.preview.specHash!==t.specHash||!t.spec||!Ee(t.spec)||t.preview.title!==t.spec.title)return!1;let n=new Map([...t.spec.dimensions.map(e=>[e.as,`dimension`]),...t.spec.measures.map(e=>[e.as,`measure`])]);return t.preview.columns.length===n.size&&t.preview.columns.every(e=>n.get(e.id)===e.role)&&JSON.stringify(t.preview.chart)===JSON.stringify(t.spec.chart)}var Q=class extends Error{status;code;constructor(e,t){super(`Runtime report request failed`),this.status=e,this.code=t,this.name=`RuntimeReportsHttpError`}},Me=1e3,Ne=1e3;function Pe(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}async function Fe(e){let t;try{t=await e.json()}catch{throw new Q(e.status)}if(!e.ok){let n=Pe(t);throw new Q(e.status,typeof n?.code==`string`?n.code:void 0)}return t}function Ie(e){return encodeURIComponent(e)}function Le(e){if(!e.startsWith(`/`)||e.startsWith(`//`))throw new Q(400,`invalid_confirm_path`);if(typeof location>`u`)return e;let t=new URL(e,location.href);if(t.origin!==location.origin)throw new Q(400,`invalid_confirm_path`);return`${t.pathname}${t.search}`}function Re(e={}){let t=e.fetch??globalThis.fetch;if(typeof t!=`function`)throw Error(`Runtime reports require a fetch implementation`);let n=(e.basePath??`/api/runtimereports`).replace(/\/$/,``),r=new Map,i=t=>{let n=Pe(t);if(!n)throw new Q(502,`invalid_result`);let i=De(n.spec);if(!i||typeof n.id!=`string`||typeof n.title!=`string`||typeof n.sourceId!=`string`||typeof n.createdByUserId!=`string`||n.status!==`active`&&n.status!==`archived`)throw new Q(502,`invalid_result`);let a={id:n.id,title:n.title,...typeof n.description==`string`&&n.description?{description:n.description}:{},sourceId:n.sourceId,createdByUserId:n.createdByUserId,status:n.status,spec:i,...typeof n.createdAt==`string`&&n.createdAt?{savedAt:n.createdAt}:{},...r.has(n.id)?{lastRunAt:r.get(n.id)}:{}},o=typeof e.canArchive==`function`?e.canArchive(a):e.canArchive===!0;return{...a,canArchive:o}},a=async e=>i(await Fe(await t(`${n}/${Ie(e)}`,{headers:{accept:`application/json`}})));return{async list({onlyMine:r,includeArchived:a}){let o=new URLSearchParams;if(a||o.set(`status`,`active`),r){if(!e.currentUserId)throw new Q(400,`missing_current_user`);o.set(`createdByUserId`,e.currentUserId)}let s=[],c=new Set,l=0;for(let e=0;e<Ne;e++){let e=new URLSearchParams(o);e.set(`limit`,String(Me)),e.set(`offset`,String(l));let r=Pe(await Fe(await t(`${n}?${e}`,{headers:{accept:`application/json`}})));if(!r||!Array.isArray(r.items)||typeof r.count!=`number`||!Number.isSafeInteger(r.count)||r.count<0||typeof r.limit!=`number`||!Number.isSafeInteger(r.limit)||r.limit<1||r.limit>Me||typeof r.offset!=`number`||!Number.isSafeInteger(r.offset)||r.offset!==l||r.items.length>r.limit)throw new Q(502,`invalid_result`);let a=r.items.map(i);for(let e of a){if(c.has(e.id))throw new Q(502,`invalid_result`);c.add(e.id)}if(s.push(...a),l+=r.items.length,l>=r.count)return s;if(r.items.length===0)throw new Q(502,`invalid_result`)}throw new Q(502,`invalid_result`)},get:a,async run(e){let i=Pe(await Fe(await t(`${n}/${Ie(e)}/run`,{method:`POST`,headers:{accept:`application/json`}})));if(i?.action!==`run`||!ke(i.result))throw new Q(502,`invalid_result`);return r.set(e,i.result.ranAt),i.result},async archive(e,r){let i=Pe(await Fe(await t(`${n}/${Ie(e)}/archive`,{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json`},body:JSON.stringify({archived:r})}))),a=Pe(i?.result);if(i?.action!==`archive`||a?.id!==e||a.status!==(r?`archived`:`active`))throw new Q(502,`invalid_result`)},async confirm(e){let n=Pe(await Fe(await t(Le(e.confirmPath),{method:`POST`,headers:{"content-type":`application/json`,accept:`application/json`},body:JSON.stringify({spec:e.spec,specHash:e.specHash})})));if(typeof n?.id!=`string`||n.specHash!==e.specHash)throw new Q(502,`invalid_result`);return a(n.id)}}}var ze,Be=``;function Ve(e={}){if(typeof window>`u`)throw Error(`The runtime reports browser client is unavailable during SSR`);let t=`${e.scopeKey??``}:${e.currentUserId??``}:${e.canArchive===!0}`;return(!ze||Be!==t)&&(ze=Re(e),Be=t),ze}function He(e){return e.replace(/([a-z\d])([A-Z])/g,`$1 $2`).replace(/[_-]+/g,` `).trim().toLowerCase().replace(/^./,e=>e.toUpperCase())}var Ue=/^\d{4}-\d{2}-\d{2}(?:[T ][\d:.]+(?:Z|[+-]\d{2}:?\d{2})?)?$/;function We(e){if(typeof e!=`string`||!Ue.test(e))return null;let t=new Date(/^\d{4}-\d{2}-\d{2}$/.test(e)?`${e}T00:00:00Z`:e);return Number.isNaN(t.getTime())?null:t}function Ge(e,t){let n=new Map;e.filters.forEach((e,t)=>{let r=We(e.value);if(!r)return;let i=n.get(e.field)??{filters:[]};if(e.op===`gte`||e.op===`gt`)i.from=r;else if(e.op===`lt`||e.op===`lte`){let t=new Date(r),n=t.getUTCHours()===0&&t.getUTCMinutes()===0&&t.getUTCSeconds()===0;e.op===`lt`&&n&&t.setUTCDate(t.getUTCDate()-1),i.to=t}else return;i.filters.push(t),n.set(e.field,i)});let[r,i]=[...n.entries()][0]??[];if(!r||!i)return null;let a=`en`;try{a=Intl.getCanonicalLocales(t.locale)[0]??`en`}catch{}let o=new Intl.DateTimeFormat(a,{timeZone:`UTC`,day:`numeric`,month:`short`,year:`numeric`}),s=i.from&&i.to?o.formatRange(i.from,i.to):i.from?t.t(`reports.period.since`,{date:o.format(i.from)}):i.to?t.t(`reports.period.until`,{date:o.format(i.to)}):``;return{field:t.label(r),range:s,filters:i.filters}}function Ke(e,t){let{t:n,locale:r,currency:i,source:a,columns:o}=t,s=e=>a?.fields?.find(t=>t.name===e),c=e=>s(e)?.label??He(e),l=a?.label??He(e.source),u=e.dimensions.map(e=>e.bucket?n(`reports.dimension_bucket`,{field:c(e.field),bucket:n(`reports.bucket_unit.${e.bucket}`)}):c(e.field)).join(`, `),d=Ge(e,{locale:r,label:c,t:n}),f=e.measures.map(e=>o?.find(t=>t.id===e.as)?.label??(e.field?n(`reports.aggregate.${e.fn}`,{field:c(e.field)}):n(`reports.aggregate.rows`,{source:l}))),p=(e,t)=>{let n=t=>s(e)?.format===`money`&&typeof t==`number`?H(t,{format:`money`,currency:i,locale:r}):String(t??``);return Array.isArray(t)?t.map(n).join(`, `):n(t)},m=e.filters.filter((e,t)=>!d?.filters.includes(t)).map(e=>`${c(e.field)} ${n(`reports.operator.${e.op}`)} ${p(e.field,e.value)}`.trim()),h=e=>o?.find(t=>t.id===e)?.label??He(e);return{source:l,groupings:u,period:d,measures:f,filters:m,having:e.having.map(e=>`${h(e.measure)} ${n(`reports.operator.${e.op}`)} ${e.value}`),line:[l,u,d?.range].filter(e=>!!e).join(` · `)}}var qe=new Set([`minute`,`hour`,`day`,`week`,`month`,`quarter`,`year`]);function Je(e){let t=e.chart.x?e.columns.find(t=>t.id===e.chart.x):e.columns.find(e=>e.role===`dimension`);return t?.bucket&&qe.has(t.bucket)?t:void 0}function Ye(e){let t=e.columns.filter(e=>e.role===`measure`),n=e.chart.y??[];return[...t.filter(e=>n.includes(e.id)),...t.filter(e=>!n.includes(e.id))]}function Xe(e){return e.format===`money`?`money`:e.type===`integer`?`integer`:`decimal`}function Ze(e,t,n){let{t:r,locale:i,currency:a}=n,o=e.rows.map(e=>({row:e,value:e[t.id]})).filter(e=>typeof e.value==`number`&&Number.isFinite(e.value));if(o.length===0)return[];let s=e=>Ae(t.type===`integer`&&!Number.isInteger(e)?Math.round(e*100)/100:e,t.type===`integer`&&!Number.isInteger(e)?{...t,type:`decimal`}:t,i,a);if(!e.columns.some(e=>e.role===`dimension`)||o.length===1)return[{label:t.label,value:s(o[0].value)}];let c=o.reduce((e,t)=>e+t.value,0),l=o.reduce((e,t)=>t.value>e.value?t:e),u=Je(e),d=[];return(n.fn===`sum`||n.fn===`count`)&&d.push({label:r(`reports.figure.total`),value:s(c)}),d.push({label:u?.bucket?r(`reports.figure.average_per`,{bucket:r(`reports.bucket_unit.${u.bucket}`)}):r(`reports.figure.average`),value:s(c/o.length)}),d.push({label:r(`reports.figure.peak`),value:s(l.value),detail:n.groupLabel(l.row)}),d}function Qe(e,t,n=new Date,r){let i=new Date(e);if(Number.isNaN(i.getTime()))return e;let a=`en`;try{a=Intl.getCanonicalLocales(t)[0]??`en`}catch{}let o=Math.round((i.getTime()-n.getTime())/1e3),s=[[`year`,31536e3],[`month`,2592e3],[`week`,604800],[`day`,86400],[`hour`,3600],[`minute`,60]],c=new Intl.RelativeTimeFormat(a,{numeric:`auto`});for(let[e,t]of s)if(Math.abs(o)>=t)return c.format(Math.round(o/t),e);return r??c.format(0,`second`)}function $e(e,t=!1){let n=!t&&/^[=+\-@\t\r]/.test(e)?`'${e}`:e;return/[",\n\r]/.test(n)?`"${n.replaceAll(`"`,`""`)}"`:n}function et(e,t){return`${[e.columns.map(e=>$e(e.label)).join(`,`),...e.rows.map(n=>e.columns.map(e=>$e(t(n[e.id],e),(e.type===`integer`||e.type===`decimal`)&&typeof n[e.id]==`number`)).join(`,`))].join(`\r
|
|
2
|
+
`)}\r\n`}var $=M({"reports.title":`Saved reports`,"reports.new":`New report`,"reports.new_prompt":`Make a report of `,"reports.hint":`Ask the assistant for a new one, for example “sales by month”.`,"reports.ask_where":`Open the assistant and ask for a report, for example “sales by month”.`,"reports.empty_title":`No saved reports yet`,"reports.filter_label":`Whose reports`,"reports.filter_all":`Everyone’s`,"reports.filter_mine":`Mine`,"reports.archived_badge":`Archived`,"reports.more":`More actions for {title}`,"reports.archive_confirm_title":`Archive “{title}”?`,"reports.archive_confirm":`It leaves Saved reports for everyone on your team. You can restore it under Show archived.`,"reports.restore":`Restore`,"reports.saved_at":`Saved {time}`,"reports.saved_by":`Saved by {author}`,"reports.saved_by_at":`Saved by {author} {time}`,"reports.ran_at":`Last run {time}`,"reports.just_now":`just now`,"reports.period":`Period`,"reports.period.since":`Since {date}`,"reports.period.until":`Until {date}`,"reports.aggregate.rows":`Number of records`,"reports.figure.total":`Total`,"reports.figure.average":`Average`,"reports.figure.average_per":`Average per {bucket}`,"reports.figure.peak":`Peak`,"reports.figures":`Headline figures`,"reports.edit":`Edit`,"reports.edit_prompt":`Change the report “{title}”: `,"reports.export_csv":`Export CSV`,"reports.view":`Show as`,"reports.view_chart":`Chart`,"reports.view_table":`Table`,"reports.measure_pick":`Measure`,"reports.view_all":`View all saved reports`,"reports.open_report":`Open report`,"reports.groups_count":`Across {count} groups`,"reports.run_failed":`This report could not run.`,"reports.details":`Report details`,"reports.only_mine":`Only mine`,"reports.archived":`Show archived`,"reports.archive":`Archive`,"reports.unarchive":`Restore`,"reports.loading":`Loading reports…`,"reports.running":`Running report…`,"reports.empty":`Ask the assistant for a report, check its preview, and approve it. It is kept here for your team, with its numbers up to date each time you open it.`,"reports.no_rows":`No matching records.`,"reports.unavailable":`Reports are unavailable because this host has no server.`,"reports.error":`The report request failed. Please try again.`,"reports.denied":`You do not have permission to read this report or one of its fields.`,"reports.invalid":`The report returned an invalid result.`,"reports.retry":`Try again`,"reports.rerun":`Re-run`,"reports.table":`Table`,"reports.chart":`Chart`,"reports.source":`Source`,"reports.author":`Author`,"reports.last_run":`Last run: {time}`,"reports.never_run":`No recent run`,"reports.truncated":`Showing a bounded sample; more rows are available.`,"reports.yes":`Yes`,"reports.no":`No`,"reports.select_report":`Report`,"reports.select_measure":`Measure`,"reports.choose_report":`Choose a saved report`,"reports.choose_measure":`Choose a measure`,"reports.select_dimension":`Group by`,"reports.choose_dimension":`The report’s first grouping`,"reports.options_invalid":`Choose a report and measure before saving.`,"reports.cancel":`Cancel`,"reports.save":`Save`,"reports.confirm_title":`Review report proposal`,"reports.saved":`Report saved`,"reports.open":`Open report`,"reports.declined":`Declined — nothing saved`,"reports.dimension_bucket":`{field} by {bucket}`,"reports.bucket_unit.minute":`minute`,"reports.bucket_unit.hour":`hour`,"reports.bucket_unit.day":`day`,"reports.bucket_unit.week":`week`,"reports.bucket_unit.month":`month`,"reports.bucket_unit.quarter":`quarter`,"reports.bucket_unit.year":`year`,"reports.groupings":`Group by`,"reports.measures":`Measures`,"reports.filters":`Filters`,"reports.having":`Measure filters`,"reports.none":`None`,"reports.rows":`rows`,"reports.saving":`Saving…`,"reports.approve":`Approve`,"reports.decline":`Decline`,"reports.aggregate.count":`Count of {field}`,"reports.aggregate.countDistinct":`Distinct count of {field}`,"reports.aggregate.sum":`Sum of {field}`,"reports.aggregate.avg":`Average of {field}`,"reports.aggregate.min":`Minimum of {field}`,"reports.aggregate.max":`Maximum of {field}`,"reports.operator.eq":`equals`,"reports.operator.ne":`does not equal`,"reports.operator.gt":`is greater than`,"reports.operator.gte":`is at least`,"reports.operator.lt":`is less than`,"reports.operator.lte":`is at most`,"reports.operator.in":`is one of`,"reports.operator.notIn":`is not one of`,"reports.operator.contains":`contains`,"reports.operator.isNull":`is empty`,"reports.operator.isNotNull":`is not empty`,"reports.bucket.minute":`Minute`,"reports.bucket.hour":`Hour`,"reports.bucket.day":`Day`,"reports.bucket.week":`Week`,"reports.bucket.month":`Month`,"reports.bucket.quarter":`Quarter`,"reports.bucket.year":`Year`}),tt=o(`<p role="alert"> </p>`),nt=o(`<p class="report-result__empty svelte-13bgg2g"> </p>`),rt=o(`<option> </option>`),it=o(`<span class="report-result__figure-detail svelte-13bgg2g"> </span>`),at=o(`<div class="report-result__figure svelte-13bgg2g"><dt class="svelte-13bgg2g"> <!></dt> <dd class="svelte-13bgg2g"><span class="report-result__figure-value svelte-13bgg2g"> </span></dd></div>`),ot=o(`<dl class="report-result__figures svelte-13bgg2g"></dl>`),st=o(`<div class="report-result__controls svelte-13bgg2g"><!> <!></div> <!>`,1),ct=o(`<div class="report-result__toggle svelte-13bgg2g"><!></div>`),lt=o(`<th scope="col"> </th>`),ut=o(`<td> </td>`),dt=o(`<tr class="svelte-13bgg2g"></tr>`),ft=o(`<div class="report-result__table svelte-13bgg2g"><table class="svelte-13bgg2g"><caption class="svelte-13bgg2g"> </caption><thead class="svelte-13bgg2g"><tr></tr></thead><tbody class="svelte-13bgg2g"></tbody></table></div>`),pt=o(`<p class="report-result__series svelte-13bgg2g"> </p>`),mt=o(`<p class="report-result__more svelte-13bgg2g"> </p>`),ht=o(`<!> <!> <!>`,1),gt=o(`<div class="report-result svelte-13bgg2g" data-smrt-component="ReportResult"><!></div>`);function _t(o,_){u(_,!0);let v=h(_,`variant`,3,`compact`),b=h(_,`view`,15,`chart`),S=h(_,`locale`,3,`en`),w=h(_,`currency`,3,`USD`),{t:E}=ee(),A=n(()=>ke(_.result)),j=n(()=>e(A)?Ye(_.result):[]),M=g(null),N=n(()=>e(j).find(t=>t.id===e(M))??e(j)[0]),P=n(()=>e(A)?_.result.chart.x?_.result.columns.find(e=>e.id===_.result.chart.x):_.result.columns.find(e=>e.role===`dimension`):void 0),te=n(()=>e(A)?Je(_.result):void 0),F=n(()=>e(A)&&_.result.chart.type===`table`),I=n(()=>e(F)||b()===`table`);function ne(e,t){if(typeof e==`string`&&t?.bucket)return re(e,t.bucket,S())}function R(e,t){return typeof e==`boolean`?E($[e?`reports.yes`:`reports.no`]):ne(e,t)??Ae(e,t,S(),w())}let V=t=>e(P)?R(t[e(P).id],e(P)):e(N)?.label??``,H=n(()=>v()===`full`&&e(A)&&e(N)?Ze(_.result,e(N),{t:E,locale:S(),currency:w(),groupLabel:V,fn:_.spec?.measures.find(t=>t.as===e(N).id)?.fn}):[]),U=n(()=>e(A)&&e(N)?{points:_.result.rows.filter(t=>typeof t[e(N).id]==`number`).map(t=>({label:V(t),value:t[e(N).id]})),format:Xe(e(N)),currency:w()}:null),W=n(()=>e(N)?e(te)?.bucket?E($[`reports.dimension_bucket`],{field:e(N).label,bucket:E(`reports.bucket_unit.${e(te).bucket}`)}):e(P)?E($[`reports.dimension_bucket`],{field:e(N).label,bucket:e(P).label.toLowerCase()}):e(N).label:``),G=e=>e.type===`integer`||e.type===`decimal`,K=n(()=>e(j).map(e=>({value:e.id,label:e.label})));var q=gt(),J=y(q),Y=e=>{var t=tt(),n=C(t,!0);D(e=>s(n,e),[()=>E($[`reports.invalid`])]),p(e,t)},ae=e=>{var t=nt(),n=C(t,!0);D(e=>s(n,e),[()=>E($[`reports.no_rows`])]),p(e,t)},oe=r=>{var o=ht(),u=T(o),h=r=>{var i=st(),o=T(i),c=y(o),u=t=>{{let r=n(()=>E($[`reports.view`])),i=n(()=>[{value:`chart`,label:E($[`reports.view_chart`])},{value:`table`,label:E($[`reports.view_table`])}]);z(t,{get label(){return e(r)},get options(){return e(i)},get value(){return b()},onvaluechange:e=>b(e===`table`?`table`:`chart`)})}};t(c,t=>{e(F)||t(u)});var d=x(c,2),f=r=>{var i=m(),a=T(i),o=t=>{{let r=n(()=>E($[`reports.measure_pick`])),i=n(()=>e(N)?.id);z(t,{get label(){return e(r)},get options(){return e(K)},get value(){return e(i)},onvaluechange:e=>k(M,String(e),!0)})}},c=t=>{{let r=n(()=>E($[`reports.measure_pick`])),i=n(()=>e(N)?.id);B(t,{get"aria-label"(){return e(r)},get value(){return e(i)},onchange:e=>k(M,e.currentTarget.value,!0),children:(t,n)=>{var r=m(),i=T(r);l(i,17,()=>e(K),e=>e.value,(t,n)=>{var r=rt(),i=C(r,!0),a={};D(()=>{s(i,e(n).label),a!==(a=e(n).value)&&(r.value=(r.__value=a)??``)}),p(t,r)}),p(t,r)},$$slots:{default:!0}})}};t(a,t=>{e(j).length<=3?t(o):t(c,-1)}),p(r,i)};t(d,t=>{e(j).length>1&&!e(I)&&t(f)}),a(o);var h=x(o,2),g=n=>{var r=ot();l(r,21,()=>e(H),e=>e.label,(n,r)=>{var i=at(),o=y(i),c=y(o,!0),l=x(c),u=t=>{var n=it(),i=C(n);D(()=>s(i,` · ${e(r).detail??``}`)),p(t,n)};t(l,t=>{e(r).detail&&t(u)}),a(o);var d=x(o,2),f=y(d),m=C(f,!0);a(d),a(i),D(()=>{s(c,e(r).label),s(m,e(r).value)}),p(n,i)}),a(r),D(e=>O(r,`aria-label`,e),[()=>E($[`reports.figures`])]),p(n,r)};t(h,t=>{e(H).length>0&&!e(I)&&t(g)}),p(r,i)},g=t=>{var r=ct(),i=y(r);{let t=n(()=>b()===`table`);L(i,{type:`button`,variant:`ghost`,size:`sm`,get"aria-pressed"(){return e(t)},onclick:()=>b(b()===`table`?`chart`:`table`),children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>E($[b()===`table`?`reports.chart`:`reports.table`])]),p(e,n)},$$slots:{default:!0}})}a(r),p(t,r)};t(u,t=>{v()===`full`?t(h):e(F)||t(g,1)});var w=x(u,2),A=t=>{var n=ft(),r=y(n),o=y(r),c=C(o,!0),u=x(o),d=y(u);l(d,21,()=>_.result.columns,e=>e.id,(t,n)=>{var r=lt();let a;var o=C(r,!0);D(t=>{a=i(r,1,`svelte-13bgg2g`,null,a,{"report-result__num":t}),s(o,e(n).label)},[()=>G(e(n))]),p(t,r)}),a(d),a(u);var m=x(u);l(m,21,()=>_.result.rows,f,(t,n)=>{var r=dt();l(r,21,()=>_.result.columns,e=>e.id,(t,r)=>{var a=ut();let o;var c=C(a,!0);D((e,t)=>{o=i(a,1,`svelte-13bgg2g`,null,o,{"report-result__num":e}),s(c,t)},[()=>G(e(r)),()=>R(e(n)[e(r).id],e(r))]),p(t,a)}),a(r),p(t,r)}),a(m),a(r),a(n),D(()=>s(c,_.result.title)),p(t,n)},ee=r=>{var i=ht(),a=T(i),o=t=>{var n=pt(),r=C(n,!0);D(()=>s(r,e(W))),p(t,n)};t(a,t=>{(v()===`full`||e(j).length>1)&&t(o)});var c=x(a,2);{let t=n(()=>v()===`full`?`tall`:`regular`),r=n(()=>v()===`full`),i=n(()=>v()!==`full`);ie(c,{get title(){return e(N).label},get style(){return _.result.chart.type},get size(){return e(t)},get valueAxis(){return e(r)},get readout(){return e(i)},get locale(){return S()},get data(){return e(U)}})}var l=x(c,2),u=t=>{var n=mt(),r=C(n);D((e,t)=>s(r,`${e??``} · ${t??``}`),[()=>e(j).slice(1).map(e=>e.label).join(`, `),()=>E($[`reports.table`]).toLowerCase()]),p(t,n)};t(l,t=>{v()===`compact`&&e(j).length>1&&t(u)}),p(r,i)};t(w,t=>{e(I)?t(A):e(N)&&e(U)&&t(ee,1)});var P=x(w,2),te=e=>{var t=nt(),n=C(t,!0);D(e=>s(n,e),[()=>E($[`reports.truncated`])]),p(e,t)};t(P,e=>{_.result.truncated&&e(te)}),p(r,o)};t(J,t=>{e(A)?_.result.rows.length===0?t(ae,1):t(oe,-1):t(Y)}),a(q),D(()=>O(q,`data-variant`,v())),p(o,q),r()}var vt=o(`<p role="alert"> </p>`),yt=o(`<p class="report-confirmation-description svelte-dnrtr8"> </p>`),bt=o(`<div class="svelte-dnrtr8"><dt class="svelte-dnrtr8"> </dt><dd class="svelte-dnrtr8"> </dd></div>`),xt=o(`<dl class="report-confirmation-facts svelte-dnrtr8"><div class="svelte-dnrtr8"><dt class="svelte-dnrtr8"> </dt><dd class="svelte-dnrtr8"> </dd></div> <div class="svelte-dnrtr8"><dt class="svelte-dnrtr8"> </dt><dd class="svelte-dnrtr8"> </dd></div> <!> <div class="svelte-dnrtr8"><dt class="svelte-dnrtr8"> </dt><dd class="svelte-dnrtr8"> </dd></div> <!> <!></dl>`),St=o(`<p class="report-confirmation-outcome svelte-dnrtr8" role="status"> <a> </a></p>`),Ct=o(`<p class="report-confirmation-outcome svelte-dnrtr8" role="status"> </p>`),wt=o(`<!> <div class="report-confirmation-actions svelte-dnrtr8"><!> <!></div>`,1),Tt=o(`<!> <!> <!> <!>`,1),Et=o(`<section data-smrt-component="ReportConfirmation" class="svelte-dnrtr8"><h3 class="report-confirmation-title svelte-dnrtr8"> </h3> <!></section>`);function Dt(i,o){u(o,!0);let l=h(o,`reportHref`,3,e=>`/reports/${encodeURIComponent(e)}`),f=h(o,`outcome`,3,null),m=h(o,`fields`,19,()=>[]),v=h(o,`locale`,3,`en`),b=h(o,`currency`,3,`USD`),{t:S}=ee(),w=g(`idle`),E=g(null),A=g(null),j=0;_(()=>(o.proposal,o.confirm,++j,k(w,`idle`),k(E,null),k(A,null),()=>{++j}));let M=n(()=>je(o.proposal)),N=n(()=>f()??(e(w)===`saved`&&e(E)?{status:`saved`,report:e(E)}:e(w)===`declined`?{status:`declined`}:null)),P=n(()=>e(M)?Ke(o.proposal.spec,{t:S,locale:v(),currency:b(),source:{id:o.proposal.spec.source,label:o.proposal.sourceLabel,fields:m()},columns:o.proposal.preview.columns}):null);async function te(t){if(!t.isTrusted||e(w)!==`idle`||!e(M)||e(N))return;let n=j,r=o.proposal.specHash;k(w,`saving`),k(A,null);try{let e=await o.confirm({...o.proposal,specHash:r});if(n!==j)return;k(E,e,!0),k(w,`saved`),o.onsaved?.(e)}catch(e){n===j&&(k(w,`idle`),k(A,Oe(e),!0))}}function F(){e(w)!==`idle`||e(N)||(k(w,`declined`),o.ondecline?.())}var I=Et(),ne=y(I),R=C(ne,!0),z=x(ne,2),B=e=>{var t=vt(),n=C(t,!0);D(e=>s(n,e),[()=>S($[`reports.invalid`])]),p(e,t)},V=r=>{var i=Tt(),u=T(i),f=e=>{var t=yt(),n=C(t,!0);D(()=>s(n,o.proposal.spec.description)),p(e,t)};t(u,e=>{o.proposal.spec.description&&e(f)});var m=x(u,2),h=n=>{var r=xt(),i=y(r),o=y(i),c=C(o,!0),l=x(o),u=C(l,!0);a(i);var d=x(i,2),f=y(d),m=C(f,!0),h=x(f),g=C(h,!0);a(d);var _=x(d,2),v=t=>{var n=bt(),r=y(n),i=C(r,!0),o=x(r),c=C(o,!0);a(n),D(t=>{s(i,t),s(c,e(P).period.range)},[()=>S($[`reports.period`])]),p(t,n)};t(_,t=>{e(P).period&&t(v)});var b=x(_,2),w=y(b),T=C(w,!0),E=x(w),O=C(E,!0);a(b);var k=x(b,2),A=t=>{var n=bt(),r=y(n),i=C(r,!0),o=x(r),c=C(o,!0);a(n),D((e,t)=>{s(i,e),s(c,t)},[()=>S($[`reports.filters`]),()=>e(P).filters.join(`; `)]),p(t,n)};t(k,t=>{e(P).filters.length&&t(A)});var j=x(k,2),M=t=>{var n=bt(),r=y(n),i=C(r,!0),o=x(r),c=C(o,!0);a(n),D((e,t)=>{s(i,e),s(c,t)},[()=>S($[`reports.having`]),()=>e(P).having.join(`; `)]),p(t,n)};t(j,t=>{e(P).having.length&&t(M)}),a(r),D((t,n,r,i,a)=>{s(c,t),s(u,e(P).source),s(m,n),s(g,r),s(T,i),s(O,a)},[()=>S($[`reports.source`]),()=>S($[`reports.groupings`]),()=>e(P).groupings||S($[`reports.none`]),()=>S($[`reports.measures`]),()=>e(P).measures.join(`, `)]),p(n,r)};t(m,t=>{e(P)&&t(h)});var g=x(m,2);_t(g,{get result(){return o.proposal.preview},get locale(){return v()},get currency(){return b()}});var _=x(g,2),E=t=>{var n=St(),r=y(n),i=x(r),o=C(i,!0);a(n),D((e,t,n)=>{s(r,`${e??``} · `),O(i,`href`,t),s(o,n)},[()=>S($[`reports.saved`]),()=>l()(e(N).report.id),()=>S($[`reports.open`])]),p(t,n)},k=e=>{var t=Ct(),n=C(t,!0);D(e=>s(n,e),[()=>S($[`reports.declined`])]),p(e,t)},j=r=>{var i=wt(),o=T(i),l=t=>{var n=vt(),r=C(n,!0);D(e=>s(r,e),[()=>S($[e(A)])]),p(t,n)};t(o,t=>{e(A)&&t(l)});var u=x(o,2),f=y(u);{let t=n(()=>e(w)===`saving`);L(f,{variant:`secondary`,get disabled(){return e(t)},onclick:F,children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>S($[`reports.decline`])]),p(e,n)},$$slots:{default:!0}})}var m=x(f,2);{let t=n(()=>e(w)===`saving`),r=n(()=>e(w)===`saving`);L(m,{get disabled(){return e(t)},get"aria-busy"(){return e(r)},onclick:te,children:(t,n)=>{d();var r=c();D(e=>s(r,e),[()=>S($[e(w)===`saving`?`reports.saving`:`reports.approve`])]),p(t,r)},$$slots:{default:!0}})}a(u),p(r,i)};t(_,t=>{e(N)?.status===`saved`?t(E):e(N)?.status===`declined`?t(k,1):t(j,-1)}),p(r,i)};t(z,t=>{e(M)?t(V,-1):t(B)}),a(I),D((e,t)=>{O(I,`aria-label`,e),s(R,t)},[()=>S($[`reports.confirm_title`]),()=>e(M)?o.proposal.spec.title:S($[`reports.confirm_title`])]),p(i,I),r()}var Ot=o(`<p class="report-detail__line svelte-ckjxb4"> </p>`),kt=o(`<p class="report-detail__description svelte-ckjxb4"> </p>`),At=o(`<!> <!>`,1),jt=o(`<span aria-hidden="true">⋯</span>`),Mt=o(`<div class="report-detail__actions svelte-ckjxb4"><!> <!></div>`),Nt=o(`<p class="report-detail__note svelte-ckjxb4"> </p>`),Pt=o(`<div class="svelte-ckjxb4"><dt class="svelte-ckjxb4"> </dt><dd class="svelte-ckjxb4"> <span class="report-detail__aside svelte-ckjxb4"> </span></dd></div>`),Ft=o(`<div class="svelte-ckjxb4"><dt class="svelte-ckjxb4"> </dt><dd class="svelte-ckjxb4"> </dd></div>`),It=o(`<div class="report-detail__meta svelte-ckjxb4"><dt class="report-detail__sr svelte-ckjxb4"> </dt><dd class="svelte-ckjxb4"> </dd></div>`),Lt=o(`<dl class="report-detail__facts svelte-ckjxb4"><div class="svelte-ckjxb4"><dt class="svelte-ckjxb4"> </dt><dd class="svelte-ckjxb4"> </dd></div> <div class="svelte-ckjxb4"><dt class="svelte-ckjxb4"> </dt><dd class="svelte-ckjxb4"> </dd></div> <!> <div class="svelte-ckjxb4"><dt class="svelte-ckjxb4"> </dt><dd class="svelte-ckjxb4"> </dd></div> <!> <!> <!></dl>`),Rt=o(`<p class="report-detail__note svelte-ckjxb4" role="status"> </p>`),zt=o(`<p class="report-detail__error svelte-ckjxb4" role="alert"> </p>`),Bt=o(`<div class="report-detail__result svelte-ckjxb4"><!></div>`),Vt=o(`<!> <!> <!> <!> <!>`,1),Ht=o(`<section class="report-detail svelte-ckjxb4" data-smrt-component="ReportDetail"><header class="report-detail__head svelte-ckjxb4"><div class="report-detail__heading svelte-ckjxb4"><div class="report-detail__title-row svelte-ckjxb4"><h1 class="report-detail__title svelte-ckjxb4"> </h1> <!></div> <!> <!></div> <!></header> <!> <!></section>`);function Ut(i,o){u(o,!0);let l=h(o,`sources`,19,()=>[]),f=h(o,`authorLabel`,3,()=>void 0),b=h(o,`locale`,3,`en`),S=h(o,`currency`,3,`USD`),{t:E}=ee(),M=g(null),P=g(null),F=g(null),I=g(!1),R=g(0),z=g(`chart`),B=g(!1),V=g(!1),re=g(!1),H=g(null),ie=null;_(()=>{let t=o.client,n=o.id;e(R);let r=!0;return ie!==n&&k(M,null),ie=n,k(P,null),k(F,null),k(I,!!t),t&&(async()=>{try{let e=await t.get(n);if(!r||(k(M,e,!0),w(()=>o.onreport)?.(e),e.status===`archived`))return;let i=await t.run(n);if(!r)return;ke(i)?k(P,i,!0):k(F,`reports.invalid`)}catch(e){r&&k(F,Oe(e),!0)}finally{r&&k(I,!1)}})(),()=>{r=!1}});let U=n(()=>e(M)?l().find(t=>t.id===e(M)?.sourceId):void 0),W=n(()=>e(M)?Ke(e(M).spec,{t:E,locale:b(),currency:S(),source:e(U),columns:e(P)?.columns}):null),G=n(()=>e(M)?f()(e(M).createdByUserId):void 0),K=n(()=>{if(!e(M))return``;let t=e(M).savedAt?Qe(e(M).savedAt,b()):``;return e(G)&&t?E($[`reports.saved_by_at`],{author:e(G),time:t}):e(G)?E($[`reports.saved_by`],{author:e(G)}):t?E($[`reports.saved_at`],{time:t}):``}),q=n(()=>e(P)?.ranAt?E($[`reports.ran_at`],{time:Qe(e(P).ranAt,b(),void 0,E($[`reports.just_now`]))}):``),J=n(()=>e(M)?.status===`archived`);function Y(){e(M)&&(o.onedit?o.onedit(e(M)):k(re,!(e(H)&&ne(e(H),{prompt:E($[`reports.edit_prompt`],{title:e(M).title})}))))}function ae(){if(!e(P)||!e(M)||typeof document>`u`)return;let t=et(e(P),(e,t)=>typeof e==`boolean`?E($[e?`reports.yes`:`reports.no`]):Ae(e,t,b(),S())),n=URL.createObjectURL(new Blob([t],{type:`text/csv;charset=utf-8`})),r=document.createElement(`a`);r.href=n,r.download=`${e(M).title.replace(/[^\p{L}\p{N}]+/gu,`-`).replace(/^-|-$/g,``).toLowerCase()||`report`}.csv`,r.click(),setTimeout(()=>URL.revokeObjectURL(n),0)}async function oe(t){if(o.client&&e(M)&&!e(V)){k(V,!0),k(F,null);try{await o.client.archive(e(M).id,t),A(R)}catch(e){k(F,Oe(e),!0)}finally{k(V,!1),k(B,!1)}}}let se=n(()=>[...e(M)&&!e(J)&&!e(F)?[{id:`rerun`,label:E($[`reports.rerun`]),disabled:e(I),onselect:()=>{A(R)}}]:[],...e(M)?.canArchive&&!e(J)?[{id:`archive`,label:E($[`reports.archive`]),disabled:e(V),onselect:()=>{k(B,!0)}}]:[]]);var X=Ht(),Z=y(X),ce=y(Z),le=y(ce),ue=y(le),de=C(ue,!0),fe=x(ue,2),pe=e=>{N(e,{children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>E($[`reports.archived_badge`])]),p(e,n)},$$slots:{default:!0}})};t(fe,t=>{e(J)&&t(pe)}),a(le);var me=x(le,2),he=t=>{var n=Ot(),r=C(n,!0);D(()=>s(r,e(W).line)),p(t,n)};t(me,t=>{e(W)&&t(he)});var ge=x(me,2),_e=t=>{var n=kt(),r=C(n,!0);D(()=>s(r,e(M).description)),p(t,n)};t(ge,t=>{e(M)?.description&&t(_e)}),a(ce);var ve=x(ce,2),ye=r=>{var i=Mt(),o=y(i),l=n=>{var r=m(),i=T(r),a=t=>{L(t,{variant:`primary`,get disabled(){return e(V)},onclick:()=>oe(!1),children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>E($[`reports.restore`])]),p(e,n)},$$slots:{default:!0}})};t(i,t=>{e(M).canArchive&&t(a)}),p(n,r)},u=t=>{L(t,{variant:`primary`,get disabled(){return e(I)},onclick:()=>A(R),children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>E($[`reports.retry`])]),p(e,n)},$$slots:{default:!0}})},f=t=>{var r=At(),i=T(r);{let t=n(()=>!e(P));L(i,{variant:`secondary`,get disabled(){return e(t)},onclick:ae,children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>E($[`reports.export_csv`])]),p(e,n)},$$slots:{default:!0}})}var a=x(i,2);L(a,{variant:`primary`,onclick:Y,children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>E($[`reports.edit`])]),p(e,n)},$$slots:{default:!0}}),p(t,r)};t(o,t=>{e(J)?t(l):e(F)?t(u,1):t(f,-1)});var h=x(o,2),g=t=>{{let r=e=>{var t=jt();p(e,t)},i=n(()=>E($[`reports.more`],{title:e(M).title}));te(t,{variant:`icon`,placement:`bottom-end`,get triggerLabel(){return e(i)},get items(){return e(se)},trigger:r,$$slots:{trigger:!0}})}};t(h,t=>{e(se).length&&t(g)}),a(i),p(r,i)};t(ve,t=>{o.client&&e(M)&&t(ye)}),a(Z);var be=x(Z,2),xe=e=>{var t=Nt(),n=C(t,!0);D(e=>s(n,e),[()=>E($[`reports.unavailable`])]),p(e,t)},Se=n=>{var r=Vt(),i=T(r),o=n=>{var r=Lt(),i=y(r),o=y(i),c=C(o,!0),l=x(o),u=C(l,!0);a(i);var d=x(i,2),f=y(d),m=C(f,!0),h=x(f),g=C(h,!0);a(d);var _=x(d,2),v=t=>{var n=Pt(),r=y(n),i=C(r,!0),o=x(r),c=y(o,!0),l=x(c),u=C(l);a(o),a(n),D(t=>{s(i,t),s(c,e(W).period.range),s(u,` · ${e(W).period.field??``}`)},[()=>E($[`reports.period`])]),p(t,n)};t(_,t=>{e(W).period&&t(v)});var b=x(_,2),S=y(b),w=C(S,!0),T=x(S),k=C(T,!0);a(b);var A=x(b,2),j=t=>{var n=Ft(),r=y(n),i=C(r,!0),o=x(r),c=C(o,!0);a(n),D((e,t)=>{s(i,e),s(c,t)},[()=>E($[`reports.filters`]),()=>e(W).filters.join(`; `)]),p(t,n)};t(A,t=>{e(W).filters.length&&t(j)});var M=x(A,2),ee=t=>{var n=Ft(),r=y(n),i=C(r,!0),o=x(r),c=C(o,!0);a(n),D((e,t)=>{s(i,e),s(c,t)},[()=>E($[`reports.having`]),()=>e(W).having.join(`; `)]),p(t,n)};t(M,t=>{e(W).having.length&&t(ee)});var N=x(M,2),P=t=>{var n=It(),r=y(n),i=C(r,!0),o=x(r),c=C(o,!0);a(n),D((e,t)=>{s(i,e),s(c,t)},[()=>E($[`reports.author`]),()=>[e(K),e(q)].filter(Boolean).join(` · `)]),p(t,n)};t(N,t=>{(e(K)||e(q))&&t(P)}),a(r),D((t,n,i,a,o,l)=>{O(r,`aria-label`,t),s(c,n),s(u,e(W).source),s(m,i),s(g,a),s(w,o),s(k,l)},[()=>E($[`reports.details`]),()=>E($[`reports.source`]),()=>E($[`reports.groupings`]),()=>e(W).groupings||E($[`reports.none`]),()=>E($[`reports.measures`]),()=>e(W).measures.join(`, `)]),p(n,r)};t(i,t=>{e(W)&&t(o)});var c=x(i,2),l=e=>{var t=Rt(),n=C(t,!0);D(e=>s(n,e),[()=>E($[`reports.ask_where`])]),p(e,t)};t(c,t=>{e(re)&&t(l)});var u=x(c,2),d=e=>{var t=Rt(),n=C(t,!0);D(e=>s(n,e),[()=>E($[`reports.running`])]),p(e,t)};t(u,t=>{e(I)&&!e(P)&&t(d)});var f=x(u,2),m=t=>{var n=zt(),r=C(n,!0);D(e=>s(r,e),[()=>E($[e(F)])]),p(t,n)};t(f,t=>{e(F)&&t(m)});var h=x(f,2),g=t=>{var n=Bt();_t(y(n),{get result(){return e(P)},get spec(){return e(M).spec},variant:`full`,get locale(){return b()},get currency(){return S()},get view(){return e(z)},set view(e){k(z,e,!0)}}),a(n),p(t,n)};t(h,t=>{e(P)&&e(M)&&t(g)}),p(n,r)};t(be,e=>{o.client?e(Se,-1):e(xe)});var Ce=x(be,2);{let t=n(()=>E($[`reports.archive_confirm_title`],{title:e(M)?.title??``})),r=n(()=>E($[`reports.archive_confirm`])),i=n(()=>E($[`reports.archive`])),a=n(()=>E($[`reports.cancel`]));j(Ce,{get open(){return e(B)},get title(){return e(t)},get message(){return e(r)},get confirmLabel(){return e(i)},get cancelLabel(){return e(a)},get loading(){return e(V)},onconfirm:()=>void oe(!0),oncancel:()=>k(B,!1)})}a(X),v(X,e=>k(H,e),()=>e(H)),D((e,t)=>{O(X,`data-report-id`,o.id),O(X,`aria-label`,e),s(de,t)},[()=>e(M)?.title??E($[`reports.title`]),()=>e(M)?.title??E($[`reports.title`])]),p(i,X),r()}var Wt=o(`<a class="svelte-2yrjmy"> </a>`),Gt=o(`<span aria-hidden="true">⋯</span>`),Kt=o(`<div class="saved-report-card__menu svelte-2yrjmy"><!></div>`),qt=o(`<p class="saved-report-card__muted svelte-2yrjmy"> </p>`),Jt=o(`<span class="saved-report-card__detail svelte-2yrjmy"> </span>`),Yt=o(`<div class="saved-report-card__spark svelte-2yrjmy"><!></div>`),Xt=o(`<div class="svelte-2yrjmy"><dt class="svelte-2yrjmy"> </dt><dd class="svelte-2yrjmy"> </dd></div>`),Zt=o(`<dl class="saved-report-card__extra svelte-2yrjmy"></dl>`),Qt=o(`<p class="saved-report-card__label svelte-2yrjmy"> </p> <p class="saved-report-card__value svelte-2yrjmy"> <!></p> <!>`,1),$t=o(`<p class="saved-report-card__meta svelte-2yrjmy"> </p>`),en=o(`<article class="saved-report-card svelte-2yrjmy" data-smrt-component="SavedReportCard"><div class="saved-report-card__head svelte-2yrjmy"><!> <!> <!></div> <p class="saved-report-card__line svelte-2yrjmy"> </p> <div class="saved-report-card__figure svelte-2yrjmy"><!></div> <!></article>`);function tn(o,f){u(f,!0);let m=h(f,`actions`,19,()=>[]),g=h(f,`headingLevel`,3,2),_=h(f,`locale`,3,`en`),v=h(f,`currency`,3,`USD`),{t:b}=ee(),w=n(()=>Ke(f.report.spec,{t:b,locale:_(),currency:v(),source:f.source,columns:f.result?.columns})),E=n(()=>f.result?Ye(f.result)[0]:void 0),k=n(()=>f.result?Je(f.result):void 0),A=t=>{let n=e(k)??f.result?.columns.find(e=>e.role===`dimension`),r=n?t[n.id]:void 0;return typeof r==`string`&&e(k)?.bucket?re(r,e(k).bucket,_()):n?Ae(r,n,_(),v()):``},j=n(()=>e(E)?f.report.spec.measures.find(t=>t.as===e(E).id)?.fn:void 0),M=n(()=>{if(!f.result||!e(E))return null;let t=Ze(f.result,e(E),{t:b,locale:_(),currency:v(),groupLabel:A,fn:e(j)}),n=t.find(e=>e.label===b($[`reports.figure.total`]));if(t.length===1)return{label:e(E).label,value:t[0].value};if(n)return{label:e(E).label,value:n.value};let r=t.at(-1);return r?{label:`${e(E).label} · ${b($[`reports.figure.peak`]).toLowerCase()}`,value:r.value,detail:r.detail}:null}),F=n(()=>{if(!f.result||e(k)||f.result.columns.some(e=>e.role===`dimension`))return[];let t=f.result.rows[0];return t?Ye(f.result).slice(1,3).map(e=>({label:e.label,value:Ae(t[e.id],e,_(),v())})):[]}),I=n(()=>{if(!f.result||!e(E)||!e(k))return null;let t=f.result.rows.filter(t=>typeof t[e(E).id]==`number`).map(t=>({label:A(t),value:t[e(E).id]}));return t.length>1?{points:t,format:Xe(e(E)),currency:v()}:null}),L=n(()=>f.result&&!e(k)&&f.result.columns.some(e=>e.role===`dimension`)?f.result.rows.length:0),ne=n(()=>f.report.savedAt?f.author?b($[`reports.saved_by_at`],{author:f.author,time:Qe(f.report.savedAt,_())}):b($[`reports.saved_at`],{time:Qe(f.report.savedAt,_())}):f.author?b($[`reports.saved_by`],{author:f.author}):``);var R=en(),z=y(R),B=y(z);S(B,()=>`h${g()}`,!1,(e,t)=>{i(e,0,`saved-report-card__title svelte-2yrjmy`);var n=Wt(),r=C(n,!0);D(()=>{O(n,`href`,f.href),s(r,f.report.title)}),p(t,n)});var V=x(B,2),H=e=>{N(e,{size:`sm`,children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>b($[`reports.archived_badge`])]),p(e,n)},$$slots:{default:!0}})};t(V,e=>{f.report.status===`archived`&&e(H)});var U=x(V,2),W=t=>{var r=Kt(),i=y(r);{let t=e=>{var t=Gt();p(e,t)},r=n(()=>b($[`reports.more`],{title:f.report.title}));te(i,{variant:`icon`,placement:`bottom-end`,get triggerLabel(){return e(r)},get items(){return m()},trigger:t,$$slots:{trigger:!0}})}a(r),p(t,r)};t(U,e=>{m().length&&e(W)}),a(z);var G=x(z,2),K=C(G,!0),q=x(G,2),J=y(q),Y=t=>{{let r=n(()=>b($[`reports.running`]));P(t,{variant:`text`,lines:2,get label(){return e(r)}})}},ae=e=>{var t=qt(),n=C(t,!0);D(e=>s(n,e),[()=>b($[`reports.run_failed`])]),p(e,t)},oe=e=>{var t=qt(),n=C(t,!0);D(e=>s(n,e),[()=>b($[`reports.no_rows`])]),p(e,t)},se=n=>{var r=Qt(),i=T(r),o=C(i,!0),c=x(i,2),u=y(c,!0),d=x(u),f=t=>{var n=Jt(),r=C(n);D(()=>s(r,`· ${e(M).detail??``}`)),p(t,n)};t(d,t=>{e(M).detail&&t(f)}),a(c);var m=x(c,2),h=t=>{var n=Yt(),r=y(n);ie(r,{get data(){return e(I)},style:`line`,size:`compact`,get title(){return e(E).label},get locale(){return _()}}),a(n),p(t,n)},g=t=>{var n=Zt();l(n,21,()=>e(F),e=>e.label,(t,n)=>{var r=Xt(),i=y(r),o=C(i,!0),c=x(i),l=C(c,!0);a(r),D(()=>{s(o,e(n).label),s(l,e(n).value)}),p(t,r)}),a(n),p(t,n)},v=t=>{var n=qt(),r=C(n,!0);D(e=>s(r,e),[()=>b($[`reports.groups_count`],{count:e(L)})]),p(t,n)};t(m,t=>{e(I)&&e(E)?t(h):e(F).length?t(g,1):e(L)>1&&t(v,2)}),D(()=>{s(o,e(M).label),s(u,e(M).value)}),p(n,r)};t(J,t=>{f.result===void 0?t(Y):f.result===null?t(ae,1):f.result.rows.length===0?t(oe,2):e(M)&&t(se,3)}),a(q);var X=x(q,2),Z=t=>{var n=$t(),r=C(n,!0);D(()=>s(r,e(ne))),p(t,n)};t(X,t=>{e(ne)&&t(Z)}),a(R),D(()=>{O(R,`data-report-id`,f.report.id),O(R,`data-archived`,f.report.status===`archived`?``:void 0),s(K,e(w).line)}),p(o,R),r()}var nn=o(`<header class="saved-reports__head svelte-1jp87tr"><h1 class="saved-reports__title svelte-1jp87tr"> </h1> <!></header>`),rn=o(`<p class="saved-reports__note svelte-1jp87tr"> </p>`),an=o(`<div class="saved-reports__toolbar svelte-1jp87tr"><!> <!></div>`),on=o(`<div class="saved-reports__toolbar svelte-1jp87tr"><p class="saved-reports__hint svelte-1jp87tr"> </p> <div class="saved-reports__actions svelte-1jp87tr"><!> <!></div></div>`),sn=o(`<p class="saved-reports__note svelte-1jp87tr" role="status"> </p>`),cn=o(`<div class="saved-reports__error svelte-1jp87tr"><p role="alert" class="svelte-1jp87tr"> </p> <!></div>`),ln=o(`<li class="saved-reports__placeholder svelte-1jp87tr"><!></li>`),un=o(`<ul class="saved-reports__grid svelte-1jp87tr" aria-busy="true"></ul>`),dn=o(`<li class="svelte-1jp87tr"><!></li>`),fn=o(`<ul class="saved-reports__grid svelte-1jp87tr"></ul>`),pn=o(`<!> <!> <!> <!>`,1),mn=o(`<section class="saved-reports svelte-1jp87tr" data-smrt-component="SavedReports"><!> <!> <!></section>`);function hn(i,o){u(o,!0);let f=h(o,`reportHref`,3,e=>`/reports/${encodeURIComponent(e)}`),m=h(o,`authorLabel`,3,()=>void 0),S=h(o,`sources`,19,()=>[]),E=h(o,`variant`,3,`page`),M=h(o,`limit`,19,()=>E()===`section`?6:48),N=h(o,`locale`,3,`en`),te=h(o,`currency`,3,`USD`),{t:F}=ee(),I=g(`all`),R=g(!1),B=g(b([])),re=g(0),H=g(b({})),ie=g(!1),U=g(null),G=g(0),K=g(null),q=g(null),J=g(!1),Y=0;async function ae(t,n,r){let i=n.filter(e=>e.status===`active`),a=async()=>{for(let n=i.shift();n;n=i.shift()){let i=n.id,a=null;try{let e=await t.run(i);a=ke(e)?e:null}catch{a=null}if(r!==Y)return;k(H,{...e(H),[i]:a},!0)}};await Promise.all([a(),a(),a()])}_(()=>{let t=o.client,n={onlyMine:e(I)===`mine`,includeArchived:e(R)},r=M();e(G);let i=++Y;return k(B,[],!0),k(H,{},!0),k(U,null),k(K,null),k(ie,!!t),t&&t.list(n).then(n=>{i===Y&&(k(re,n.length,!0),k(B,n.slice(0,r),!0),ae(t,e(B),i))}).catch(e=>{i===Y&&k(U,Oe(e),!0)}).finally(()=>{i===Y&&k(ie,!1)}),()=>{++Y}});async function oe(t,n){if(!o.client||e(K)||!t.canArchive)return;let r=Y;k(K,t.id,!0),k(U,null);try{await o.client.archive(t.id,n),r===Y&&k(G,w(()=>e(G))+1)}catch(e){r===Y&&k(U,Oe(e),!0)}finally{r===Y&&k(K,null),k(q,null)}}function se(t){return t.canArchive?t.status===`archived`?[{id:`restore`,label:F($[`reports.restore`]),disabled:e(K)!==null,onselect:()=>void oe(t,!1)}]:[{id:`archive`,label:F($[`reports.archive`]),disabled:e(K)!==null,onselect:()=>{k(q,t,!0)}}]:[]}let X=g(null);function Z(){o.onnewreport?o.onnewreport():k(J,!(e(X)&&ne(e(X),{prompt:F($[`reports.new_prompt`])})))}let ce=e=>S().find(t=>t.id===e),le=n(()=>E()===`page`?2:3);var ue=mn(),de=y(ue),fe=e=>{var n=nn(),r=y(n),i=C(r,!0),l=x(r,2),u=e=>{L(e,{variant:`primary`,onclick:Z,children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>F($[`reports.new`])]),p(e,n)},$$slots:{default:!0}})};t(l,e=>{o.client&&e(u)}),a(n),D(e=>s(i,e),[()=>F($[`reports.title`])]),p(e,n)};t(de,e=>{E()===`page`&&e(fe)});var pe=x(de,2),me=e=>{var t=rn(),n=C(t,!0);D(e=>s(n,e),[()=>F($[`reports.unavailable`])]),p(e,t)},he=r=>{var i=pn(),u=T(i),h=t=>{var r=an(),i=y(r);{let t=n(()=>F($[`reports.filter_label`])),r=n(()=>[{value:`all`,label:F($[`reports.filter_all`])},{value:`mine`,label:F($[`reports.filter_mine`])}]);z(i,{get label(){return e(t)},get options(){return e(r)},get value(){return e(I)},onvaluechange:e=>k(I,e===`mine`?`mine`:`all`,!0)})}var o=x(i,2);{let t=n(()=>F($[`reports.archived`]));V(o,{get label(){return e(t)},size:`sm`,get checked(){return e(R)},set checked(e){k(R,e,!0)}})}a(r),p(t,r)},g=n=>{var r=on(),i=y(r),l=C(i,!0),u=x(i,2),f=y(u),m=e=>{L(e,{variant:`ghost`,size:`sm`,get href(){return o.listHref},children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>F($[`reports.view_all`])]),p(e,n)},$$slots:{default:!0}})};t(f,t=>{o.listHref&&e(re)>e(B).length&&t(m)});var h=x(f,2);L(h,{variant:`primary`,size:`sm`,onclick:Z,children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>F($[`reports.new`])]),p(e,n)},$$slots:{default:!0}}),a(u),a(r),D(e=>s(l,e),[()=>F($[`reports.hint`])]),p(n,r)};t(u,t=>{E()===`page`?t(h):e(B).length>0&&t(g,1)});var _=x(u,2),v=e=>{var t=sn(),n=C(t,!0);D(e=>s(n,e),[()=>F($[`reports.ask_where`])]),p(e,t)};t(_,t=>{e(J)&&t(v)});var b=x(_,2),S=t=>{var n=cn(),r=y(n),i=C(r,!0),o=x(r,2);L(o,{variant:`secondary`,size:`sm`,onclick:()=>A(G),children:(e,t)=>{d();var n=c();D(e=>s(n,e),[()=>F($[`reports.retry`])]),p(e,n)},$$slots:{default:!0}}),a(n),D(e=>s(i,e),[()=>F($[e(U)])]),p(t,n)};t(b,t=>{e(U)&&t(S)});var w=x(b,2),j=e=>{var t=un();l(t,20,()=>[0,1,2],e=>e,(e,t)=>{var n=ln(),r=y(n);P(r,{variant:`text`,lines:4}),a(n),p(e,n)}),a(t),D(e=>O(t,`aria-label`,e),[()=>F($[`reports.loading`])]),p(e,t)},M=t=>{{let r=n(()=>F($[`reports.empty_title`])),i=n(()=>F($[`reports.empty`])),a=n(()=>F($[`reports.new`])),o=n(()=>E()===`page`?`md`:`sm`);W(t,{get title(){return e(r)},get description(){return e(i)},icon:`document`,get actionLabel(){return e(a)},onaction:Z,get size(){return e(o)}})}},ee=t=>{var r=fn();l(r,21,()=>e(B),e=>e.id,(t,r)=>{var i=dn(),o=y(i);{let t=n(()=>f()(e(r).id)),i=n(()=>e(r).status===`archived`?null:e(H)[e(r).id]),a=n(()=>ce(e(r).sourceId)),s=n(()=>se(e(r))),c=n(()=>m()(e(r).createdByUserId));tn(o,{get report(){return e(r)},get href(){return e(t)},get result(){return e(i)},get source(){return e(a)},get actions(){return e(s)},get author(){return e(c)},get headingLevel(){return e(le)},get locale(){return N()},get currency(){return te()}})}a(i),p(t,i)}),a(r),p(t,r)};t(w,t=>{e(ie)?t(j):e(B).length===0&&!e(U)?t(M,1):e(B).length>0&&t(ee,2)}),p(r,i)};t(pe,e=>{o.client?e(he,-1):e(me)});var ge=x(pe,2);{let t=n(()=>e(q)!==null),r=n(()=>F($[`reports.archive_confirm_title`],{title:e(q)?.title??``})),i=n(()=>F($[`reports.archive_confirm`])),a=n(()=>F($[`reports.archive`])),o=n(()=>F($[`reports.cancel`])),s=n(()=>e(K)!==null);j(ge,{get open(){return e(t)},get title(){return e(r)},get message(){return e(i)},get confirmLabel(){return e(a)},get cancelLabel(){return e(o)},get loading(){return e(s)},onconfirm:()=>e(q)&&void oe(e(q),!0),oncancel:()=>k(q,null)})}a(ue),v(ue,e=>k(X,e),()=>e(X)),D(e=>{O(ue,`data-variant`,E()),O(ue,`aria-label`,e)},[()=>F($[`reports.title`])]),p(i,ue),r()}function gn(e){let t=e.toolCallData;if(!t||typeof t!=`object`)return null;let n=t;return(n.name??n.tool??n.toolName)===`reports.runtime.define`&&je(n.result)?n.result:null}var _n=o(`<div data-smrt-component="SavedReportsWidget"><!></div>`);function vn(t,i){u(i,!0);let o=h(i,`options`,19,()=>({})),s=h(i,`locale`,3,`en`),c=h(i,`listHref`,3,`/reports`),l=g(void 0);E(()=>{i.client||k(l,Ve(),!0)});let d=n(()=>typeof o().limit==`number`&&o().limit>0?o().limit:6);var f=_n(),m=y(f);{let t=n(()=>i.client??e(l));hn(m,{variant:`section`,get client(){return e(t)},get limit(){return e(d)},get reportHref(){return i.reportHref},get listHref(){return c()},get sources(){return i.sources},get authorLabel(){return i.authorLabel},get locale(){return s()},get currency(){return i.currency}})}a(f),p(t,f),r()}var yn=`planner`,bn=`/api/_reports/runtime/confirm`,xn=`/m/reports/RuntimeReport/`;function Sn(e){return`${xn}${encodeURIComponent(e)}/`}var Cn=class extends Error{status;code;constructor(e,t){super(`Report request failed (${t})`),this.status=e,this.code=t,this.name=`PlannerReportError`}};function wn(){let e=F(le);if(!e)throw Error(`${le} is not in the catalog`);return e.model}function Tn(e){if(typeof e.spec!=`string`)return null;let t;try{t=oe(e.spec)}catch{return null}return{id:e.id,title:t.title,...t.description?{description:t.description}:{},sourceId:t.source,createdByUserId:typeof e.createdByUserId==`string`?e.createdByUserId:``,status:e.status===`archived`?`archived`:`active`,spec:t,...typeof e.createdAt==`string`&&e.createdAt?{savedAt:e.createdAt}:{},canArchive:!0}}function En(e){let t=()=>ce(e.recipeIds(),e.recipes);async function n(n){let r=t(),i=r.find(e=>e.id===n.source),a=i?await e.data.list(i.model):[];return J(n,a,{sources:r})}async function r(r,i=``){let a=K(r,t(),e.now(),i);if(!a.ok)return a;try{let e=await n(a.spec);return{ok:!0,source:a.source,proposal:{status:`awaiting_confirmation`,specHash:e.specHash,spec:a.spec,sourceLabel:a.source.label,confirmPath:bn,preview:e}}}catch(e){if(e instanceof Z)return{ok:!1,question:se(e,a.source)};throw e}}async function i(){return(await e.data.list(wn())).flatMap(e=>Tn(e)??[]).reverse()}async function a(t){let n=await e.data.get(wn(),t),r=n?Tn(n):null;if(!r)throw new Cn(404,`not_found`);return r}async function o(t){let r;try{r=oe(t.spec)}catch{throw new Cn(422,`invalid_spec`)}let a=await Y(r);if(a!==t.specHash)throw new Cn(422,`spec_hash_mismatch`);try{await n(r)}catch(e){throw e instanceof Z?new Cn(422,e.code):e}let o=(await i()).find(e=>e.status===`active`&&e.createdByUserId===`planner`&&X(e.spec)===X(r));if(o)return o;let s=Tn(await e.data.create(wn(),{title:r.title,description:r.description??``,sourceId:r.source,spec:X(r),specHash:a,status:`active`,createdByUserId:yn,createdAt:new Date().toISOString()}));if(!s)throw new Cn(500,`invalid_result`);return s}let s={async list({onlyMine:e,includeArchived:t}){return(await i()).filter(n=>(t||n.status===`active`)&&(!e||n.createdByUserId===`planner`))},get:a,async run(e){let t=await a(e);if(t.status===`archived`)throw new Cn(409,`report_archived`);return n(t.spec)},async archive(t,n){await a(t),await e.data.update(wn(),t,{status:n?`archived`:`active`})},confirm:o},c=e=>e.map(({name:e,label:t,type:n,format:r})=>({name:e,label:t,type:n,...r?{format:r}:{}}));function l(e){let n=t();return n.some(t=>t.id===e)?c(q(n,e).fields):[]}function u(){let e=t();return e.map(t=>{let n=q(e,t.id);return{id:n.id,label:n.label,fields:c(n.fields)}})}return{sources:t,define:r,run:n,save:o,client:s,fieldsFor:l,sourceInfo:u}}var Dn=new WeakMap;function On(e){let t=Dn.get(e);return t||(t=En({data:e,recipeIds:()=>G.ids,recipes:U,now:()=>new Date(I)}),Dn.set(e,t)),t}async function kn(e){await ae.openPath?.(Sn(e.id))}async function An(e,t){try{await kn(t)}catch{}e?.isConnected&&R(e,{focus:`[data-smrt-component="ReportDetail"][data-report-id="${CSS.escape(t.id)}"] h1`})}export{Sn as a,hn as c,xn as i,Ut as l,On as n,vn as o,yn as r,gn as s,An as t,Dt as u};
|