@happyvertical/smrt-planner 0.0.0-stage → 0.0.1
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/LICENSE +21 -0
- package/README.md +170 -2
- package/app/404.html +80 -0
- package/app/_app/immutable/assets/0.B5zXkXe_.css +1 -0
- package/app/_app/immutable/assets/10.hpcnxvK1.css +1 -0
- package/app/_app/immutable/assets/11.D7zoXfVV.css +1 -0
- package/app/_app/immutable/assets/12.CPobm1ED.css +1 -0
- package/app/_app/immutable/assets/2.CyaWdRdI.css +1 -0
- package/app/_app/immutable/assets/3.BlPQOes8.css +1 -0
- package/app/_app/immutable/assets/8.2gQeKBp_.css +1 -0
- package/app/_app/immutable/assets/9.HOPT4xtg.css +1 -0
- package/app/_app/immutable/assets/AiSetup.Cb22AigN.css +1 -0
- package/app/_app/immutable/assets/Button.DkP0qkG9.css +1 -0
- package/app/_app/immutable/assets/ConnectTools.BgIJOOGW.css +1 -0
- package/app/_app/immutable/assets/FieldMapForm.BCU-4pO4.css +1 -0
- package/app/_app/immutable/assets/ModelPage.Dd3LcMta.css +1 -0
- package/app/_app/immutable/assets/SectionActions.CTkVuNMF.css +1 -0
- package/app/_app/immutable/assets/SectionIcons.5Udq9vN-.css +1 -0
- package/app/_app/immutable/assets/SegmentedControl.B8SrQacd.css +1 -0
- package/app/_app/immutable/assets/dist.C5nHBk_O.css +1 -0
- package/app/_app/immutable/assets/feedback.BVKAwFck.css +1 -0
- package/app/_app/immutable/assets/forms.BChZ2RWM.css +1 -0
- package/app/_app/immutable/assets/inter-latin-ext.B_-bZUTo.woff2 +0 -0
- package/app/_app/immutable/assets/inter-latin.8kRkwJBP.woff2 +0 -0
- package/app/_app/immutable/assets/jetbrains-mono-latin-ext.Bnd2h4Br.woff2 +0 -0
- package/app/_app/immutable/assets/jetbrains-mono-latin.Db4Uuiha.woff2 +0 -0
- package/app/_app/immutable/assets/ort-wasm-simd-threaded.asyncify.CxOG5pUO.wasm +0 -0
- package/app/_app/immutable/assets/percent.LH0z-ozZ.css +1 -0
- package/app/_app/immutable/assets/space-grotesk-latin-ext.wJGaI8U0.woff2 +0 -0
- package/app/_app/immutable/assets/space-grotesk-latin.DPT1xrvW.woff2 +0 -0
- package/app/_app/immutable/assets/store.CGDwHkkF.css +1 -0
- package/app/_app/immutable/assets/ui.B1A1Zl2p.css +1 -0
- package/app/_app/immutable/assets/workspace.BIMkuZDb.css +1 -0
- package/app/_app/immutable/chunks/1okeBSoq.js +1 -0
- package/app/_app/immutable/chunks/B32EWqI8.js +9 -0
- package/app/_app/immutable/chunks/B4Kevpe0.js +1 -0
- package/app/_app/immutable/chunks/BJfAXhak.js +3 -0
- package/app/_app/immutable/chunks/BKwRT_1p.js +1 -0
- package/app/_app/immutable/chunks/BQxY8kkL.js +1 -0
- package/app/_app/immutable/chunks/BS4h9ES-.js +1 -0
- package/app/_app/immutable/chunks/BWPhGFHl.js +1 -0
- package/app/_app/immutable/chunks/BYcBM-fh.js +1 -0
- package/app/_app/immutable/chunks/BYde9M_U.js +1 -0
- package/app/_app/immutable/chunks/BegKiy2G.js +1 -0
- package/app/_app/immutable/chunks/Bjy-W4x2.js +81 -0
- package/app/_app/immutable/chunks/C7zBd-pD.js +1 -0
- package/app/_app/immutable/chunks/CA-A9Ngs.js +1 -0
- package/app/_app/immutable/chunks/CMhpRMKg.js +1 -0
- package/app/_app/immutable/chunks/CPRHZZeW.js +1 -0
- package/app/_app/immutable/chunks/CRQ1Pmzr.js +1 -0
- package/app/_app/immutable/chunks/CV-2zt0K.js +2 -0
- package/app/_app/immutable/chunks/CWtfVMDz.js +1 -0
- package/app/_app/immutable/chunks/CgAkqYsL.js +1 -0
- package/app/_app/immutable/chunks/Chyo8rdT.js +3 -0
- package/app/_app/immutable/chunks/CmmuWmp6.js +2 -0
- package/app/_app/immutable/chunks/CrFNLK0f.js +1 -0
- package/app/_app/immutable/chunks/CrO3W89x.js +1 -0
- package/app/_app/immutable/chunks/CyUMm_Wp.js +1 -0
- package/app/_app/immutable/chunks/CygC84VT.js +2 -0
- package/app/_app/immutable/chunks/D0VgZnk1.js +1 -0
- package/app/_app/immutable/chunks/D333l2GL.js +2 -0
- package/app/_app/immutable/chunks/D71UrO5c.js +1 -0
- package/app/_app/immutable/chunks/D7hhQvDO.js +1 -0
- package/app/_app/immutable/chunks/DD7gpKb2.js +1 -0
- package/app/_app/immutable/chunks/DJtH-lRi.js +3 -0
- package/app/_app/immutable/chunks/DNRgqfTx.js +1 -0
- package/app/_app/immutable/chunks/DRByVC-c.js +1 -0
- package/app/_app/immutable/chunks/DVRKjN-E.js +1 -0
- package/app/_app/immutable/chunks/D_J_XtJy.js +846 -0
- package/app/_app/immutable/chunks/Dbjm4OuC.js +1 -0
- package/app/_app/immutable/chunks/Dc4q22LH.js +42 -0
- package/app/_app/immutable/chunks/Dd_uD5pT.js +1 -0
- package/app/_app/immutable/chunks/Dp9GVO-9.js +1 -0
- package/app/_app/immutable/chunks/DqcD-WtP.js +1 -0
- package/app/_app/immutable/chunks/Dt-HX3Vu.js +1 -0
- package/app/_app/immutable/chunks/DyGfbRG-.js +1 -0
- package/app/_app/immutable/chunks/FbOxj-PF.js +69 -0
- package/app/_app/immutable/chunks/OJ_lLTHH.js +1 -0
- package/app/_app/immutable/chunks/QukgIHDX.js +1 -0
- package/app/_app/immutable/chunks/WxSPP8QW.js +4 -0
- package/app/_app/immutable/chunks/iET62IRm.js +2 -0
- package/app/_app/immutable/chunks/leQCwW2d.js +1 -0
- package/app/_app/immutable/chunks/p6bgzXiY.js +1 -0
- package/app/_app/immutable/chunks/uBIymjUX.js +1 -0
- package/app/_app/immutable/chunks/ufuM4XBq.js +33 -0
- package/app/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/app/_app/immutable/entry/app.D5JJain6.js +2 -0
- package/app/_app/immutable/entry/start.CH9DJLgI.js +1 -0
- package/app/_app/immutable/nodes/0.CL1MxOva.js +10 -0
- package/app/_app/immutable/nodes/1.BO731RRg.js +1 -0
- package/app/_app/immutable/nodes/10.1nQxyH9H.js +4 -0
- package/app/_app/immutable/nodes/11.Cw0JnQF3.js +1 -0
- package/app/_app/immutable/nodes/12.BmZyLHbM.js +1 -0
- package/app/_app/immutable/nodes/2.BEw046av.js +17 -0
- package/app/_app/immutable/nodes/3.DvwpTAQA.js +1 -0
- package/app/_app/immutable/nodes/4.qrT4bnmS.js +1 -0
- package/app/_app/immutable/nodes/5.DDLa2uhV.js +1 -0
- package/app/_app/immutable/nodes/6.DN0QTY6z.js +1 -0
- package/app/_app/immutable/nodes/7.C_8N82Wq.js +1 -0
- package/app/_app/immutable/nodes/8.D2Mszsua.js +3 -0
- package/app/_app/immutable/nodes/9.CLYsywul.js +1 -0
- package/app/_app/immutable/workers/assets/ort-wasm-simd-threaded.asyncify-CxOG5pUO.wasm +0 -0
- package/app/_app/immutable/workers/llm.worker-wfCOG_uk.js +69 -0
- package/app/_app/immutable/workers/local-speech.worker-DWbfmFUk.js +51 -0
- package/app/_app/version.json +1 -0
- package/app/ai/index.html +89 -0
- package/app/blueprint/index.html +87 -0
- package/app/cookbook/index.html +87 -0
- package/app/index.html +103 -0
- package/app/m/ads/AdDeliveryTier/index.html +96 -0
- package/app/m/ads/AdEvent/index.html +96 -0
- package/app/m/ads/AdFormat/index.html +96 -0
- package/app/m/ads/AdGroup/index.html +96 -0
- package/app/m/ads/AdVariation/index.html +96 -0
- package/app/m/analytics/AnalyticsDataStream/index.html +96 -0
- package/app/m/analytics/AnalyticsEvent/index.html +96 -0
- package/app/m/analytics/AnalyticsProperty/index.html +96 -0
- package/app/m/analytics/AnalyticsReport/index.html +96 -0
- package/app/m/approvals/ApprovalEvent/index.html +96 -0
- package/app/m/approvals/ApprovalPolicy/index.html +96 -0
- package/app/m/approvals/ApprovalRequest/index.html +96 -0
- package/app/m/assets/Asset/index.html +96 -0
- package/app/m/assets/AssetAssociation/index.html +97 -0
- package/app/m/assets/AssetMetafield/index.html +96 -0
- package/app/m/assets/AssetStatus/index.html +96 -0
- package/app/m/assets/AssetType/index.html +96 -0
- package/app/m/assets/Folder/index.html +96 -0
- package/app/m/chat/AgentSession/index.html +96 -0
- package/app/m/chat/ChatMessage/index.html +97 -0
- package/app/m/chat/ChatParticipant/index.html +97 -0
- package/app/m/chat/ChatReaction/index.html +96 -0
- package/app/m/chat/ChatRoom/index.html +96 -0
- package/app/m/chat/ChatThread/index.html +97 -0
- package/app/m/chat/VoiceGatewayTurn/index.html +96 -0
- package/app/m/chat/VoiceSession/index.html +96 -0
- package/app/m/commerce/Agreement/index.html +96 -0
- package/app/m/commerce/Cart/index.html +96 -0
- package/app/m/commerce/Contract/index.html +96 -0
- package/app/m/commerce/ContractLineItem/index.html +97 -0
- package/app/m/commerce/Customer/index.html +96 -0
- package/app/m/commerce/Estimate/index.html +96 -0
- package/app/m/commerce/Fulfillment/index.html +96 -0
- package/app/m/commerce/FulfillmentLineItem/index.html +97 -0
- package/app/m/commerce/Invoice/index.html +96 -0
- package/app/m/commerce/InvoiceLineItem/index.html +97 -0
- package/app/m/commerce/Lease/index.html +96 -0
- package/app/m/commerce/LicenseSale/index.html +96 -0
- package/app/m/commerce/Order/index.html +96 -0
- package/app/m/commerce/Payment/index.html +96 -0
- package/app/m/commerce/PaymentAllocation/index.html +97 -0
- package/app/m/commerce/PaymentInstrument/index.html +96 -0
- package/app/m/commerce/PaymentIntent/index.html +96 -0
- package/app/m/commerce/Payout/index.html +96 -0
- package/app/m/commerce/ProductionOrder/index.html +96 -0
- package/app/m/commerce/PurchaseOrder/index.html +96 -0
- package/app/m/commerce/Vendor/index.html +96 -0
- package/app/m/commerce/WholesaleOrder/index.html +96 -0
- package/app/m/content/Content/index.html +96 -0
- package/app/m/content/ContentContribution/index.html +96 -0
- package/app/m/content/ContentContributionAttachment/index.html +96 -0
- package/app/m/content/ContentContributionRevision/index.html +96 -0
- package/app/m/content/ContentContributionType/index.html +96 -0
- package/app/m/content/ContentContributor/index.html +96 -0
- package/app/m/content/ContentCorrection/index.html +96 -0
- package/app/m/content/ContentFeedSource/index.html +96 -0
- package/app/m/content/ContentGovernanceAssignment/index.html +96 -0
- package/app/m/content/ContentGovernancePolicy/index.html +96 -0
- package/app/m/content/ContentGovernanceProfile/index.html +96 -0
- package/app/m/content/ContentReference/index.html +96 -0
- package/app/m/content/ContentReview/index.html +96 -0
- package/app/m/content/ContentVersion/index.html +96 -0
- package/app/m/content/Contents/index.html +96 -0
- package/app/m/events/Event/index.html +96 -0
- package/app/m/events/EventParticipant/index.html +97 -0
- package/app/m/events/EventSeries/index.html +96 -0
- package/app/m/events/EventType/index.html +96 -0
- package/app/m/facts/Fact/index.html +96 -0
- package/app/m/facts/FactContent/index.html +96 -0
- package/app/m/facts/FactEvidence/index.html +96 -0
- package/app/m/facts/FactSource/index.html +96 -0
- package/app/m/facts/FactSubject/index.html +96 -0
- package/app/m/facts/FactTag/index.html +96 -0
- package/app/m/fields/FieldPolicy/index.html +96 -0
- package/app/m/fields/FieldPolicySuggestion/index.html +96 -0
- package/app/m/fields/FieldUsageCounter/index.html +96 -0
- package/app/m/images/Image/index.html +96 -0
- package/app/m/inventory/InventoryLocation/index.html +96 -0
- package/app/m/inventory/StockLevel/index.html +96 -0
- package/app/m/inventory/StockMovement/index.html +96 -0
- package/app/m/ledgers/Account/index.html +96 -0
- package/app/m/ledgers/Journal/index.html +96 -0
- package/app/m/ledgers/JournalEntry/index.html +97 -0
- package/app/m/manufacturing/Assembly/index.html +96 -0
- package/app/m/manufacturing/BillOfMaterials/index.html +96 -0
- package/app/m/manufacturing/BomLine/index.html +96 -0
- package/app/m/manufacturing/Operation/index.html +96 -0
- package/app/m/manufacturing/ProductionRun/index.html +96 -0
- package/app/m/manufacturing/ProductionRunCompletion/index.html +96 -0
- package/app/m/manufacturing/RoutingStep/index.html +96 -0
- package/app/m/marketing/Campaign/index.html +96 -0
- package/app/m/marketing/CampaignChannel/index.html +96 -0
- package/app/m/marketing/CampaignMetricSnapshot/index.html +96 -0
- package/app/m/messages/Account/index.html +96 -0
- package/app/m/messages/Attachment/index.html +96 -0
- package/app/m/messages/Blacklist/index.html +96 -0
- package/app/m/messages/Email/failed-sends/index.html +96 -0
- package/app/m/messages/Email/index.html +96 -0
- package/app/m/messages/Email/mailbox/index.html +96 -0
- package/app/m/messages/EmailAccount/index.html +96 -0
- package/app/m/messages/EmailFolder/index.html +96 -0
- package/app/m/messages/Message/index.html +96 -0
- package/app/m/messages/MessagingEndpoint/index.html +96 -0
- package/app/m/messages/PersonaMessageRoute/index.html +96 -0
- package/app/m/messages/SlackAccount/index.html +96 -0
- package/app/m/messages/SlackMessage/index.html +96 -0
- package/app/m/messages/TelegramAccount/index.html +96 -0
- package/app/m/messages/Tweet/index.html +96 -0
- package/app/m/messages/TwitterAccount/index.html +96 -0
- package/app/m/messages/Whitelist/index.html +96 -0
- package/app/m/messages/ZulipAccount/index.html +96 -0
- package/app/m/places/Place/index.html +96 -0
- package/app/m/places/PlaceType/index.html +96 -0
- package/app/m/preferences/UiPreferenceRecord/index.html +96 -0
- package/app/m/products/Category/index.html +96 -0
- package/app/m/products/Material/index.html +96 -0
- package/app/m/products/Product/index.html +96 -0
- package/app/m/products/Product/ingredients/index.html +96 -0
- package/app/m/products/ProductVariant/index.html +97 -0
- package/app/m/products/Sku/index.html +97 -0
- package/app/m/profiles/ApiKey/index.html +96 -0
- package/app/m/profiles/Bot/index.html +96 -0
- package/app/m/profiles/MagicLinkToken/index.html +96 -0
- package/app/m/profiles/NostrIdentity/index.html +96 -0
- package/app/m/profiles/OidcIdentity/index.html +96 -0
- package/app/m/profiles/Organization/index.html +96 -0
- package/app/m/profiles/Person/index.html +96 -0
- package/app/m/profiles/Profile/index.html +96 -0
- package/app/m/profiles/ProfileMetadata/index.html +96 -0
- package/app/m/profiles/ProfileMetafield/index.html +96 -0
- package/app/m/profiles/ProfileRelationship/index.html +96 -0
- package/app/m/profiles/ProfileRelationshipTerm/index.html +96 -0
- package/app/m/profiles/ProfileRelationshipType/index.html +96 -0
- package/app/m/profiles/ProfileType/index.html +96 -0
- package/app/m/projects/Comment/index.html +97 -0
- package/app/m/projects/Issue/index.html +96 -0
- package/app/m/projects/Label/index.html +96 -0
- package/app/m/projects/Project/index.html +96 -0
- package/app/m/projects/ProjectIntegration/index.html +96 -0
- package/app/m/projects/PullRequest/index.html +96 -0
- package/app/m/projects/Repository/index.html +96 -0
- package/app/m/properties/Property/index.html +96 -0
- package/app/m/properties/Zone/index.html +96 -0
- package/app/m/reports/RuntimeReport/index.html +96 -0
- package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +96 -0
- package/app/m/reports/SmrtReportLock/index.html +96 -0
- package/app/m/reports/SmrtReportRefreshTask/index.html +96 -0
- package/app/m/reports/SmrtReportRun/index.html +96 -0
- package/app/m/reports/SmrtReportSchedule/index.html +96 -0
- package/app/m/reports/SmrtReportWatermark/index.html +96 -0
- package/app/m/sales/AttributionException/index.html +96 -0
- package/app/m/sales/AttributionPolicy/index.html +96 -0
- package/app/m/sales/Commission/index.html +96 -0
- package/app/m/sales/CommissionAdjustment/index.html +96 -0
- package/app/m/sales/CommissionPayout/index.html +96 -0
- package/app/m/sales/CommissionPlan/index.html +96 -0
- package/app/m/sales/Earner/index.html +96 -0
- package/app/m/sales/EarnerSourceAttribution/index.html +96 -0
- package/app/m/sales/EarningEvent/index.html +96 -0
- package/app/m/sales/ExecutedAgreement/index.html +96 -0
- package/app/m/sales/Lead/index.html +96 -0
- package/app/m/sales/Opportunity/index.html +96 -0
- package/app/m/sales/OpportunityConversion/index.html +96 -0
- package/app/m/sales/PipelineDefinition/index.html +96 -0
- package/app/m/sales/PipelineStage/index.html +97 -0
- package/app/m/sales/Referral/index.html +96 -0
- package/app/m/sales/ReferralAgreement/index.html +96 -0
- package/app/m/sales/ReferralLink/index.html +96 -0
- package/app/m/sales/ReferralProgram/index.html +96 -0
- package/app/m/sales/ReferralTermSnapshot/index.html +96 -0
- package/app/m/sales/ReferralTouch/index.html +96 -0
- package/app/m/sales/Referrer/index.html +96 -0
- package/app/m/sales/SalesActivity/index.html +96 -0
- package/app/m/sales/SalesRepresentative/index.html +96 -0
- package/app/m/sites/Site/index.html +96 -0
- package/app/m/sites/SiteAgentBinding/index.html +96 -0
- package/app/m/social/OAuthState/index.html +96 -0
- package/app/m/social/SocialAccount/index.html +96 -0
- package/app/m/social/SocialPost/index.html +96 -0
- package/app/m/social/SocialPostAnalyticsSnapshot/index.html +96 -0
- package/app/m/subscriptions/BillingAdjustment/index.html +96 -0
- package/app/m/subscriptions/ClientCharge/index.html +96 -0
- package/app/m/subscriptions/CreditGrant/index.html +96 -0
- package/app/m/subscriptions/PricingRule/index.html +96 -0
- package/app/m/subscriptions/RetailCharge/index.html +96 -0
- package/app/m/subscriptions/SpendingPolicy/index.html +96 -0
- package/app/m/subscriptions/SubscriptionPlan/index.html +96 -0
- package/app/m/subscriptions/TenantSubscription/index.html +96 -0
- package/app/m/subscriptions/TenantUsageMetric/index.html +96 -0
- package/app/m/support/ServiceTimeEntry/index.html +96 -0
- package/app/m/support/SupportAiRun/index.html +96 -0
- package/app/m/support/SupportAvailability/index.html +96 -0
- package/app/m/support/SupportCase/index.html +96 -0
- package/app/m/support/SupportCaseEvent/index.html +96 -0
- package/app/m/support/SupportChannelBinding/index.html +96 -0
- package/app/m/support/SupportCharge/index.html +96 -0
- package/app/m/support/SupportCompensation/index.html +96 -0
- package/app/m/support/SupportCompensationPlan/index.html +96 -0
- package/app/m/support/SupportEscalation/index.html +96 -0
- package/app/m/support/SupportInteraction/index.html +96 -0
- package/app/m/support/SupportPlan/index.html +96 -0
- package/app/m/support/SupportPolicy/index.html +96 -0
- package/app/m/support/SupportQualification/index.html +96 -0
- package/app/m/support/SupportServiceTarget/index.html +96 -0
- package/app/m/support/SupportSpecialist/index.html +96 -0
- package/app/m/support/SupportWorkLink/index.html +96 -0
- package/app/m/tags/Tag/index.html +96 -0
- package/app/m/tags/TagAlias/index.html +96 -0
- package/app/m/timesheets/AttendanceBreak/index.html +96 -0
- package/app/m/timesheets/AttendancePunch/index.html +96 -0
- package/app/m/timesheets/ServiceChargeSnapshot/index.html +96 -0
- package/app/m/timesheets/ServiceCompensationSnapshot/index.html +96 -0
- package/app/m/timesheets/ServiceTimeEntry/index.html +96 -0
- package/app/m/users/AccessRequest/index.html +96 -0
- package/app/m/users/Group/index.html +96 -0
- package/app/m/users/GroupMember/index.html +96 -0
- package/app/m/users/GroupRole/index.html +96 -0
- package/app/m/users/Membership/index.html +97 -0
- package/app/m/users/MembershipOverride/index.html +96 -0
- package/app/m/users/Permission/index.html +96 -0
- package/app/m/users/ResourceGrant/index.html +96 -0
- package/app/m/users/Role/index.html +96 -0
- package/app/m/users/RolePermission/index.html +96 -0
- package/app/m/users/Session/index.html +96 -0
- package/app/m/users/Tenant/index.html +96 -0
- package/app/m/users/TenantIntegration/index.html +96 -0
- package/app/m/users/TenantPermissionOverride/index.html +96 -0
- package/app/m/users/User/index.html +96 -0
- package/app/m/users/UsersCliAuthRequest/index.html +96 -0
- package/app/m/users/UsersMagicLinkToken/index.html +96 -0
- package/app/m/video/Character/index.html +96 -0
- package/app/m/video/CharacterAsset/index.html +96 -0
- package/app/m/video/CompositeJob/index.html +96 -0
- package/app/m/video/Performer/index.html +96 -0
- package/app/m/video/PerformerAsset/index.html +96 -0
- package/app/m/video/Scene/index.html +96 -0
- package/app/m/video/SceneAsset/index.html +96 -0
- package/app/m/video/VideoComposition/index.html +96 -0
- package/app/m/video/VideoCompositionAsset/index.html +96 -0
- package/app/m/video/VideoSequence/index.html +96 -0
- package/app/m/video/VideoSequenceAsset/index.html +96 -0
- package/app/m/video/VideoShot/index.html +96 -0
- package/app/m/video/VideoShotAsset/index.html +96 -0
- package/app/m/video/VideoShotCharacter/index.html +96 -0
- package/app/m/video/VideoWorkflow/index.html +96 -0
- package/app/m/voice/VoiceOutput/index.html +96 -0
- package/app/m/voice/VoiceProfile/index.html +96 -0
- package/app/m/voice/VoiceSample/index.html +96 -0
- package/app/packages/ads/index.html +92 -0
- package/app/packages/analytics/index.html +92 -0
- package/app/packages/approvals/index.html +92 -0
- package/app/packages/assets/index.html +92 -0
- package/app/packages/chat/index.html +92 -0
- package/app/packages/comments/index.html +92 -0
- package/app/packages/commerce/index.html +92 -0
- package/app/packages/content/index.html +92 -0
- package/app/packages/events/index.html +92 -0
- package/app/packages/expenses/index.html +92 -0
- package/app/packages/facts/index.html +92 -0
- package/app/packages/fields/index.html +92 -0
- package/app/packages/human-resources/index.html +92 -0
- package/app/packages/images/index.html +92 -0
- package/app/packages/index.html +90 -0
- package/app/packages/inventory/index.html +92 -0
- package/app/packages/ledgers/index.html +92 -0
- package/app/packages/manufacturing/index.html +92 -0
- package/app/packages/marketing/index.html +92 -0
- package/app/packages/messages/index.html +92 -0
- package/app/packages/places/index.html +92 -0
- package/app/packages/preferences/index.html +92 -0
- package/app/packages/products/index.html +92 -0
- package/app/packages/profiles/index.html +92 -0
- package/app/packages/projects/index.html +92 -0
- package/app/packages/properties/index.html +92 -0
- package/app/packages/reports/index.html +92 -0
- package/app/packages/sales/index.html +92 -0
- package/app/packages/sites/index.html +92 -0
- package/app/packages/social/index.html +92 -0
- package/app/packages/subscriptions/index.html +92 -0
- package/app/packages/support/index.html +92 -0
- package/app/packages/tags/index.html +92 -0
- package/app/packages/timesheets/index.html +92 -0
- package/app/packages/users/index.html +92 -0
- package/app/packages/video/index.html +92 -0
- package/app/packages/voice/index.html +92 -0
- package/app/recipes/account-access/help/index.html +93 -0
- package/app/recipes/account-access/index.html +95 -0
- package/app/recipes/activity/help/index.html +93 -0
- package/app/recipes/activity/index.html +94 -0
- package/app/recipes/agreements/help/index.html +93 -0
- package/app/recipes/agreements/index.html +96 -0
- package/app/recipes/analytics.reports/help/index.html +93 -0
- package/app/recipes/analytics.reports/index.html +94 -0
- package/app/recipes/assets/help/index.html +93 -0
- package/app/recipes/assets/index.html +95 -0
- package/app/recipes/billing/help/index.html +93 -0
- package/app/recipes/billing/index.html +95 -0
- package/app/recipes/chat.assistant/help/index.html +93 -0
- package/app/recipes/chat.assistant/index.html +94 -0
- package/app/recipes/comments/help/index.html +93 -0
- package/app/recipes/comments/index.html +94 -0
- package/app/recipes/commerce.customers/help/index.html +93 -0
- package/app/recipes/commerce.customers/index.html +94 -0
- package/app/recipes/commerce.estimates/help/index.html +93 -0
- package/app/recipes/commerce.estimates/index.html +94 -0
- package/app/recipes/commerce.purchases/help/index.html +93 -0
- package/app/recipes/commerce.purchases/index.html +94 -0
- package/app/recipes/commerce.sales/help/index.html +93 -0
- package/app/recipes/commerce.sales/index.html +94 -0
- package/app/recipes/commerce.vendors/help/index.html +93 -0
- package/app/recipes/commerce.vendors/index.html +94 -0
- package/app/recipes/commerce.wholesale/help/index.html +93 -0
- package/app/recipes/commerce.wholesale/index.html +94 -0
- package/app/recipes/events.calendar/help/index.html +93 -0
- package/app/recipes/events.calendar/index.html +94 -0
- package/app/recipes/fields.form-customization/help/index.html +93 -0
- package/app/recipes/fields.form-customization/index.html +94 -0
- package/app/recipes/inventory.stock/help/index.html +93 -0
- package/app/recipes/inventory.stock/index.html +94 -0
- package/app/recipes/ledgers.bookkeeping/help/index.html +93 -0
- package/app/recipes/ledgers.bookkeeping/index.html +94 -0
- package/app/recipes/messages/help/index.html +93 -0
- package/app/recipes/messages/index.html +95 -0
- package/app/recipes/products/help/index.html +93 -0
- package/app/recipes/products/index.html +96 -0
- package/app/recipes/projects.tracker/help/index.html +93 -0
- package/app/recipes/projects.tracker/index.html +94 -0
- package/app/recipes/reports.materialized/help/index.html +93 -0
- package/app/recipes/reports.materialized/index.html +94 -0
- package/app/recipes/sales.pipeline/help/index.html +93 -0
- package/app/recipes/sales.pipeline/index.html +94 -0
- package/app/recipes/tags.taxonomy/help/index.html +93 -0
- package/app/recipes/tags.taxonomy/index.html +94 -0
- package/app/recipes/team-collaboration/help/index.html +93 -0
- package/app/recipes/team-collaboration/index.html +94 -0
- package/app/s/custom-billing/index.html +89 -0
- package/app/s/custom-buying/index.html +89 -0
- package/app/s/custom-classes/index.html +89 -0
- package/app/s/custom-jobs/index.html +89 -0
- package/app/s/custom-kitchen/index.html +89 -0
- package/app/s/custom-material/index.html +89 -0
- package/app/s/custom-members/index.html +89 -0
- package/app/s/custom-parts/index.html +89 -0
- package/app/s/custom-schedule/index.html +89 -0
- package/app/s/custom-shop/index.html +89 -0
- package/app/s/custom-wholesale/index.html +89 -0
- package/app/s/section-access-control/index.html +89 -0
- package/app/s/section-account-security/index.html +89 -0
- package/app/s/section-accounting/index.html +89 -0
- package/app/s/section-activity/index.html +89 -0
- package/app/s/section-agreements/index.html +89 -0
- package/app/s/section-analytics/index.html +89 -0
- package/app/s/section-assets/index.html +89 -0
- package/app/s/section-billing/index.html +89 -0
- package/app/s/section-calendar/index.html +89 -0
- package/app/s/section-catalog/index.html +89 -0
- package/app/s/section-chat.assistant/index.html +89 -0
- package/app/s/section-comments/index.html +89 -0
- package/app/s/section-fields.form-customization/index.html +89 -0
- package/app/s/section-messages/index.html +89 -0
- package/app/s/section-more/index.html +89 -0
- package/app/s/section-operations/index.html +89 -0
- package/app/s/section-projects/index.html +89 -0
- package/app/s/section-purchasing/index.html +89 -0
- package/app/s/section-reports.materialized/index.html +89 -0
- package/app/s/section-sales/index.html +89 -0
- package/app/s/section-taxonomy/index.html +89 -0
- package/app/s/section-team/index.html +89 -0
- package/dist/ai/echo-gate.d.ts +13 -0
- package/dist/ai/echo-gate.js +21 -0
- package/dist/ai/icons.d.ts +9 -0
- package/dist/ai/icons.js +9 -0
- package/dist/ai/instance.d.ts +3 -0
- package/dist/ai/instance.js +25 -0
- package/dist/ai/state.svelte.d.ts +125 -0
- package/dist/ai/state.svelte.js +286 -0
- package/dist/ai/status.d.ts +67 -0
- package/dist/ai/status.js +117 -0
- package/dist/assets/smrt-mark.svg +38 -0
- package/dist/assistant/change.d.ts +101 -0
- package/dist/assistant/change.js +209 -0
- package/dist/assistant/engine.d.ts +20 -0
- package/dist/assistant/engine.js +43 -0
- package/dist/assistant/llm.worker.d.ts +1 -0
- package/dist/assistant/llm.worker.js +7 -0
- package/dist/assistant/match.d.ts +59 -0
- package/dist/assistant/match.js +271 -0
- package/dist/assistant/models.d.ts +38 -0
- package/dist/assistant/models.js +57 -0
- package/dist/assistant/offers.svelte.d.ts +36 -0
- package/dist/assistant/offers.svelte.js +59 -0
- package/dist/assistant/prefs.d.ts +14 -0
- package/dist/assistant/prefs.js +32 -0
- package/dist/assistant/prompt.d.ts +23 -0
- package/dist/assistant/prompt.js +163 -0
- package/dist/assistant/session.svelte.d.ts +73 -0
- package/dist/assistant/session.svelte.js +163 -0
- package/dist/assistant/theme-undo.svelte.d.ts +38 -0
- package/dist/assistant/theme-undo.svelte.js +50 -0
- package/dist/assistant/transport.d.ts +73 -0
- package/dist/assistant/transport.js +231 -0
- package/dist/assistant/voice-host.d.ts +10 -0
- package/dist/assistant/voice-host.js +17 -0
- package/dist/assistant/voice.svelte.d.ts +107 -0
- package/dist/assistant/voice.svelte.js +261 -0
- package/dist/catalog/catalog.json +89663 -0
- package/dist/catalog/generate/build.d.ts +33 -0
- package/dist/catalog/generate/build.js +131 -0
- package/dist/catalog/generate/exclusions.d.ts +18 -0
- package/dist/catalog/generate/exclusions.js +33 -0
- package/dist/catalog/generate/extract.d.ts +90 -0
- package/dist/catalog/generate/extract.js +326 -0
- package/dist/catalog/generate/local.d.ts +8 -0
- package/dist/catalog/generate/local.js +45 -0
- package/dist/catalog/generate/recipe-demo.d.ts +11 -0
- package/dist/catalog/generate/recipe-demo.js +29 -0
- package/dist/catalog/generate/recipe-metadata.d.ts +12 -0
- package/dist/catalog/generate/recipe-metadata.js +138 -0
- package/dist/catalog/generate/registry.d.ts +14 -0
- package/dist/catalog/generate/registry.js +83 -0
- package/dist/catalog/index.d.ts +21 -0
- package/dist/catalog/index.js +53 -0
- package/dist/catalog/types.d.ts +141 -0
- package/dist/catalog/types.js +8 -0
- package/dist/components/AiSetup.svelte +499 -0
- package/dist/components/AiSetup.svelte.d.ts +8 -0
- package/dist/components/AiStatusIcons.svelte +86 -0
- package/dist/components/AiStatusIcons.svelte.d.ts +18 -0
- package/dist/components/AppSettings.svelte +100 -0
- package/dist/components/AppSettings.svelte.d.ts +10 -0
- package/dist/components/BrowserAssistant.svelte +314 -0
- package/dist/components/BrowserAssistant.svelte.d.ts +8 -0
- package/dist/components/ChildRecords.svelte +331 -0
- package/dist/components/ChildRecords.svelte.d.ts +15 -0
- package/dist/components/ConnectTools.svelte +145 -0
- package/dist/components/ConnectTools.svelte.d.ts +8 -0
- package/dist/components/CookbooksPanel.svelte +308 -0
- package/dist/components/CookbooksPanel.svelte.d.ts +3 -0
- package/dist/components/ExportPanel.svelte +217 -0
- package/dist/components/ExportPanel.svelte.d.ts +3 -0
- package/dist/components/FeatureCard.svelte +197 -0
- package/dist/components/FeatureCard.svelte.d.ts +13 -0
- package/dist/components/FeaturesPanel.svelte +155 -0
- package/dist/components/FeaturesPanel.svelte.d.ts +3 -0
- package/dist/components/FieldInput.svelte +307 -0
- package/dist/components/FieldInput.svelte.d.ts +24 -0
- package/dist/components/FieldMapForm.svelte +173 -0
- package/dist/components/FieldMapForm.svelte.d.ts +18 -0
- package/dist/components/FormWorkspace.svelte +274 -0
- package/dist/components/FormWorkspace.svelte.d.ts +19 -0
- package/dist/components/HelpView.svelte +129 -0
- package/dist/components/HelpView.svelte.d.ts +12 -0
- package/dist/components/ModelOptions.svelte +239 -0
- package/dist/components/ModelOptions.svelte.d.ts +12 -0
- package/dist/components/ModelPage.svelte +295 -0
- package/dist/components/ModelPage.svelte.d.ts +9 -0
- package/dist/components/ModelWorkspace.svelte +488 -0
- package/dist/components/ModelWorkspace.svelte.d.ts +32 -0
- package/dist/components/PlannerEditBridge.svelte +36 -0
- package/dist/components/PlannerEditBridge.svelte.d.ts +3 -0
- package/dist/components/PlannerPalette.svelte +38 -0
- package/dist/components/PlannerPalette.svelte.d.ts +18 -0
- package/dist/components/RecipeCards.svelte +145 -0
- package/dist/components/RecipeCards.svelte.d.ts +3 -0
- package/dist/components/RecipeHelp.svelte +54 -0
- package/dist/components/RecipeHelp.svelte.d.ts +9 -0
- package/dist/components/RecipeOptions.svelte +160 -0
- package/dist/components/RecipeOptions.svelte.d.ts +9 -0
- package/dist/components/RecordFeatures.svelte +240 -0
- package/dist/components/RecordFeatures.svelte.d.ts +3 -0
- package/dist/components/RelationField.svelte +175 -0
- package/dist/components/RelationField.svelte.d.ts +16 -0
- package/dist/components/SectionActions.svelte +91 -0
- package/dist/components/SectionActions.svelte.d.ts +12 -0
- package/dist/components/SectionIcons.svelte +98 -0
- package/dist/components/SectionIcons.svelte.d.ts +15 -0
- package/dist/components/SectionOverview.svelte +65 -0
- package/dist/components/SectionOverview.svelte.d.ts +14 -0
- package/dist/components/SectionPage.svelte +230 -0
- package/dist/components/SectionPage.svelte.d.ts +7 -0
- package/dist/components/SettingsPanel.svelte +60 -0
- package/dist/components/SettingsPanel.svelte.d.ts +7 -0
- package/dist/components/ThemeBridge.svelte +56 -0
- package/dist/components/ThemeBridge.svelte.d.ts +3 -0
- package/dist/components/ThemeSection.svelte +167 -0
- package/dist/components/ThemeSection.svelte.d.ts +11 -0
- package/dist/components/VariantGridForm.svelte +309 -0
- package/dist/components/VariantGridForm.svelte.d.ts +12 -0
- package/dist/components/VoiceTyping.svelte +108 -0
- package/dist/components/VoiceTyping.svelte.d.ts +7 -0
- package/dist/cookbook/assemble.d.ts +16 -0
- package/dist/cookbook/assemble.js +29 -0
- package/dist/cookbook/file.d.ts +7 -0
- package/dist/cookbook/file.js +25 -0
- package/dist/cookbook/legacy.d.ts +9 -0
- package/dist/cookbook/legacy.js +87 -0
- package/dist/cookbook/migrate.d.ts +22 -0
- package/dist/cookbook/migrate.js +106 -0
- package/dist/cookbook/parse.d.ts +16 -0
- package/dist/cookbook/parse.js +246 -0
- package/dist/cookbook/storage.d.ts +45 -0
- package/dist/cookbook/storage.js +98 -0
- package/dist/cookbook/store.svelte.d.ts +94 -0
- package/dist/cookbook/store.svelte.js +231 -0
- package/dist/cookbook/types.d.ts +76 -0
- package/dist/cookbook/types.js +11 -0
- package/dist/cookbook/validate.d.ts +14 -0
- package/dist/cookbook/validate.js +29 -0
- package/dist/core/app.d.ts +12 -0
- package/dist/core/app.js +15 -0
- package/dist/core/catalog.d.ts +19 -0
- package/dist/core/catalog.js +9 -0
- package/dist/core/headless.d.ts +52 -0
- package/dist/core/headless.js +39 -0
- package/dist/core/index.d.ts +28 -0
- package/dist/core/index.js +28 -0
- package/dist/core/prompt.d.ts +38 -0
- package/dist/core/prompt.js +95 -0
- package/dist/core/reply.d.ts +60 -0
- package/dist/core/reply.js +89 -0
- package/dist/core/request.d.ts +15 -0
- package/dist/core/request.js +55 -0
- package/dist/data/children.d.ts +20 -0
- package/dist/data/children.js +80 -0
- package/dist/data/columns.d.ts +56 -0
- package/dist/data/columns.js +150 -0
- package/dist/data/context.d.ts +8 -0
- package/dist/data/context.js +19 -0
- package/dist/data/derived.d.ts +79 -0
- package/dist/data/derived.js +139 -0
- package/dist/data/display.d.ts +23 -0
- package/dist/data/display.js +84 -0
- package/dist/data/fakes.d.ts +52 -0
- package/dist/data/fakes.js +443 -0
- package/dist/data/format.d.ts +48 -0
- package/dist/data/format.js +121 -0
- package/dist/data/labels.d.ts +45 -0
- package/dist/data/labels.js +179 -0
- package/dist/data/packs.d.ts +95 -0
- package/dist/data/packs.js +830 -0
- package/dist/data/payments.d.ts +17 -0
- package/dist/data/payments.js +60 -0
- package/dist/data/planner-source.d.ts +7 -0
- package/dist/data/planner-source.js +32 -0
- package/dist/data/source.d.ts +119 -0
- package/dist/data/source.js +432 -0
- package/dist/features/catalogue.d.ts +96 -0
- package/dist/features/catalogue.js +225 -0
- package/dist/features/demo.d.ts +36 -0
- package/dist/features/demo.js +66 -0
- package/dist/features/palette.d.ts +39 -0
- package/dist/features/palette.js +53 -0
- package/dist/fields/address.d.ts +23 -0
- package/dist/fields/address.js +39 -0
- package/dist/fields/invalid.d.ts +2 -0
- package/dist/fields/invalid.js +8 -0
- package/dist/fields/modal.d.ts +7 -0
- package/dist/fields/modal.js +14 -0
- package/dist/fields/percent.d.ts +8 -0
- package/dist/fields/percent.js +16 -0
- package/dist/fields/renderer.d.ts +17 -0
- package/dist/fields/renderer.js +43 -0
- package/dist/forms/active.d.ts +16 -0
- package/dist/forms/active.js +24 -0
- package/dist/forms/fieldMap.d.ts +44 -0
- package/dist/forms/fieldMap.js +134 -0
- package/dist/forms/shared.d.ts +41 -0
- package/dist/forms/shared.js +138 -0
- package/dist/forms/stock.d.ts +28 -0
- package/dist/forms/stock.js +104 -0
- package/dist/forms/variantGrid.d.ts +83 -0
- package/dist/forms/variantGrid.js +283 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +16 -0
- package/dist/inference/byo.svelte.d.ts +86 -0
- package/dist/inference/byo.svelte.js +267 -0
- package/dist/inference/config.d.ts +70 -0
- package/dist/inference/config.js +149 -0
- package/dist/inference/host.d.ts +40 -0
- package/dist/inference/host.js +57 -0
- package/dist/inference/openai.d.ts +59 -0
- package/dist/inference/openai.js +202 -0
- package/dist/inference/presets.d.ts +5 -0
- package/dist/inference/presets.js +46 -0
- package/dist/kitchen/client.d.ts +39 -0
- package/dist/kitchen/client.js +109 -0
- package/dist/kitchen/fragment.d.ts +30 -0
- package/dist/kitchen/fragment.js +49 -0
- package/dist/kitchen/state.svelte.d.ts +26 -0
- package/dist/kitchen/state.svelte.js +45 -0
- package/dist/library/apply.d.ts +17 -0
- package/dist/library/apply.js +32 -0
- package/dist/library/document.d.ts +12 -0
- package/dist/library/document.js +27 -0
- package/dist/library/icons.d.ts +6 -0
- package/dist/library/icons.js +26 -0
- package/dist/library/index.d.ts +8 -0
- package/dist/library/index.js +12 -0
- package/dist/library/library.json +788 -0
- package/dist/library/menu.d.ts +18 -0
- package/dist/library/menu.js +72 -0
- package/dist/library/state.svelte.d.ts +10 -0
- package/dist/library/state.svelte.js +28 -0
- package/dist/library/types.d.ts +57 -0
- package/dist/library/types.js +1 -0
- package/dist/overviews/definitions.d.ts +24 -0
- package/dist/overviews/definitions.js +97 -0
- package/dist/overviews/page.d.ts +21 -0
- package/dist/overviews/page.js +36 -0
- package/dist/overviews/registry.d.ts +44 -0
- package/dist/overviews/registry.js +191 -0
- package/dist/overviews/validate.d.ts +32 -0
- package/dist/overviews/validate.js +91 -0
- package/dist/planner/Planner.svelte +204 -0
- package/dist/planner/Planner.svelte.d.ts +4 -0
- package/dist/planner/app.svelte.d.ts +6 -0
- package/dist/planner/app.svelte.js +23 -0
- package/dist/planner/assistant.d.ts +46 -0
- package/dist/planner/assistant.js +122 -0
- package/dist/planner/commands/adapter.d.ts +121 -0
- package/dist/planner/commands/adapter.js +597 -0
- package/dist/planner/commands/catalog.d.ts +19 -0
- package/dist/planner/commands/catalog.js +54 -0
- package/dist/planner/commands/controller.svelte.d.ts +13 -0
- package/dist/planner/commands/controller.svelte.js +77 -0
- package/dist/planner/commands/index.d.ts +15 -0
- package/dist/planner/commands/index.js +15 -0
- package/dist/planner/commands/schemas.d.ts +25 -0
- package/dist/planner/commands/schemas.js +67 -0
- package/dist/planner/commands/slices.d.ts +18 -0
- package/dist/planner/commands/slices.js +49 -0
- package/dist/planner/commands/types.d.ts +80 -0
- package/dist/planner/commands/types.js +18 -0
- package/dist/planner/create.d.ts +4 -0
- package/dist/planner/create.js +22 -0
- package/dist/planner/instance.d.ts +15 -0
- package/dist/planner/instance.js +22 -0
- package/dist/planner/query.d.ts +16 -0
- package/dist/planner/query.js +28 -0
- package/dist/planner/selection.d.ts +15 -0
- package/dist/planner/selection.js +38 -0
- package/dist/planner/selection.svelte.d.ts +29 -0
- package/dist/planner/selection.svelte.js +54 -0
- package/dist/planner/tab.svelte.d.ts +11 -0
- package/dist/planner/tab.svelte.js +22 -0
- package/dist/planner/types.d.ts +41 -0
- package/dist/planner/types.js +1 -0
- package/dist/recipes/cards.d.ts +55 -0
- package/dist/recipes/cards.js +80 -0
- package/dist/recipes/features.d.ts +53 -0
- package/dist/recipes/features.js +97 -0
- package/dist/recipes/help/descriptions.json +373 -0
- package/dist/recipes/help.d.ts +121 -0
- package/dist/recipes/help.js +262 -0
- package/dist/recipes/index.d.ts +65 -0
- package/dist/recipes/index.js +95 -0
- package/dist/recipes/merge.d.ts +26 -0
- package/dist/recipes/merge.js +21 -0
- package/dist/recipes/overlay.json +409 -0
- package/dist/recipes/plan-data.d.ts +41 -0
- package/dist/recipes/plan-data.js +97 -0
- package/dist/recipes/plumbing.d.ts +70 -0
- package/dist/recipes/plumbing.js +185 -0
- package/dist/recipes/policy.d.ts +118 -0
- package/dist/recipes/policy.js +268 -0
- package/dist/recipes/resolve.d.ts +19 -0
- package/dist/recipes/resolve.js +65 -0
- package/dist/recipes/scope.d.ts +25 -0
- package/dist/recipes/scope.js +31 -0
- package/dist/recipes/sections.d.ts +49 -0
- package/dist/recipes/sections.js +84 -0
- package/dist/recipes/state.svelte.d.ts +67 -0
- package/dist/recipes/state.svelte.js +112 -0
- package/dist/recipes/types.d.ts +322 -0
- package/dist/recipes/types.js +8 -0
- package/dist/sections/entries.d.ts +30 -0
- package/dist/sections/entries.js +57 -0
- package/dist/sections/info.d.ts +16 -0
- package/dist/sections/info.js +39 -0
- package/dist/sections/path.d.ts +12 -0
- package/dist/sections/path.js +18 -0
- package/dist/settings/app-settings.d.ts +44 -0
- package/dist/settings/app-settings.js +138 -0
- package/dist/settings/currencies.d.ts +2 -0
- package/dist/settings/currencies.js +8 -0
- package/dist/theme/runtime.d.ts +14 -0
- package/dist/theme/runtime.js +27 -0
- package/dist/theme/theme.d.ts +47 -0
- package/dist/theme/theme.js +122 -0
- package/dist/upstream/CustomerSelect.svelte +60 -0
- package/dist/upstream/CustomerSelect.svelte.d.ts +17 -0
- package/dist/upstream/VendorSelect.svelte +60 -0
- package/dist/upstream/VendorSelect.svelte.d.ts +17 -0
- package/dist/upstream/overlay.d.ts +10 -0
- package/dist/upstream/overlay.js +49 -0
- package/dist/upstream/partySelect.d.ts +8 -0
- package/dist/upstream/partySelect.js +21 -0
- package/dist/upstream/partyTypes.d.ts +64 -0
- package/dist/upstream/partyTypes.js +8 -0
- package/dist/upstream/relations.d.ts +2 -0
- package/dist/upstream/relations.js +24 -0
- package/dist/upstream/selects.d.ts +26 -0
- package/dist/upstream/selects.js +20 -0
- package/dist/upstream/widgets.d.ts +20 -0
- package/dist/upstream/widgets.js +30 -0
- package/package.json +80 -3
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The scope of a page: `view` is the entry key in the path (none for the
|
|
3
|
+
* plain entry); `added` are the nav entries of the added recipes.
|
|
4
|
+
*/
|
|
5
|
+
export function pageScope(modelId, view, added) {
|
|
6
|
+
const here = added.filter((e) => e.model.id === modelId && e.filter);
|
|
7
|
+
if (view) {
|
|
8
|
+
const filter = here.find((e) => e.key === view)?.filter;
|
|
9
|
+
return filter ? { field: filter.field, equals: filter.value } : undefined;
|
|
10
|
+
}
|
|
11
|
+
const first = here[0]?.filter;
|
|
12
|
+
if (!first)
|
|
13
|
+
return undefined;
|
|
14
|
+
const claimed = here
|
|
15
|
+
.map((e) => e.filter)
|
|
16
|
+
.filter((f) => f?.field === first.field)
|
|
17
|
+
.map((f) => String(f?.value));
|
|
18
|
+
return { field: first.field, notIn: [...new Set(claimed)] };
|
|
19
|
+
}
|
|
20
|
+
export function inScope(scope, row) {
|
|
21
|
+
if (!scope)
|
|
22
|
+
return true;
|
|
23
|
+
const value = String(row[scope.field] ?? '');
|
|
24
|
+
if (scope.equals !== undefined)
|
|
25
|
+
return value === scope.equals;
|
|
26
|
+
return !scope.notIn?.includes(value);
|
|
27
|
+
}
|
|
28
|
+
/** Values a row created from the page carries, so it stays in view. */
|
|
29
|
+
export function scopePreset(scope) {
|
|
30
|
+
return scope?.equals !== undefined ? { [scope.field]: scope.equals } : {};
|
|
31
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Recipe, RecipeNavSection } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* A navigation section: one recipe, or the recipes of one `group` (Products
|
|
4
|
+
* from Simple and Clothing). A section owns one Options page and one Help
|
|
5
|
+
* page, at `/recipes/<id>/` and `/recipes/<id>/help/`. For a recipe with no
|
|
6
|
+
* group the id is the recipe id, so those URLs are the recipe's own.
|
|
7
|
+
*/
|
|
8
|
+
export interface RecipeSection {
|
|
9
|
+
/** The group id, or the recipe id for a recipe with no group. */
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
/** In declaration order. */
|
|
13
|
+
recipes: Recipe[];
|
|
14
|
+
}
|
|
15
|
+
/** The id of the section a recipe belongs to. */
|
|
16
|
+
export declare function sectionId(recipe: Recipe): string;
|
|
17
|
+
/** Sections in the order their first recipe is declared. */
|
|
18
|
+
export declare function buildSections(recipes: readonly Recipe[]): RecipeSection[];
|
|
19
|
+
/**
|
|
20
|
+
* The NAV section a recipe's entries sit under by default: the section it
|
|
21
|
+
* suggests, else its group, else the recipe. Not to be confused with
|
|
22
|
+
* {@link RecipeSection} (Options and Help pages), which follows `group`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function navSectionOf(recipe: Recipe): RecipeNavSection;
|
|
25
|
+
/** Nav sections of the given recipes, in the order their first recipe comes. */
|
|
26
|
+
export declare function buildNavSections(recipes: readonly Recipe[]): (RecipeNavSection & {
|
|
27
|
+
recipes: Recipe[];
|
|
28
|
+
})[];
|
|
29
|
+
/**
|
|
30
|
+
* Old nav section key (the `group` id or recipe id that used to name a nav
|
|
31
|
+
* section) to its key now. Only keys that changed appear.
|
|
32
|
+
*/
|
|
33
|
+
export declare function legacyNavSectionKeys(recipes: readonly Recipe[]): Record<string, string>;
|
|
34
|
+
/**
|
|
35
|
+
* The stable layout id of a navigation item: `item:<package>:<Model>`, or
|
|
36
|
+
* `item:<package>:<Model>:<key>` when a model appears twice in the nav and the
|
|
37
|
+
* extra entry declares a fixed `key`. It never names the section, the label or
|
|
38
|
+
* the href, so renaming an entry, moving a recipe's suggested section or
|
|
39
|
+
* changing the selection query leaves saved layouts and cookbooks valid.
|
|
40
|
+
*/
|
|
41
|
+
export declare function navItemId(packageId: string, modelName: string, key?: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* The line under an entry on its section card: the recipe's own text first,
|
|
44
|
+
* then the catalog model's description, then a plain fallback.
|
|
45
|
+
*/
|
|
46
|
+
export declare function entryDescription(own: string | undefined, model: {
|
|
47
|
+
description?: string;
|
|
48
|
+
name: string;
|
|
49
|
+
}): string;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** The id of the section a recipe belongs to. */
|
|
2
|
+
export function sectionId(recipe) {
|
|
3
|
+
return recipe.group?.id ?? recipe.id;
|
|
4
|
+
}
|
|
5
|
+
/** Sections in the order their first recipe is declared. */
|
|
6
|
+
export function buildSections(recipes) {
|
|
7
|
+
const sections = new Map();
|
|
8
|
+
for (const recipe of recipes) {
|
|
9
|
+
const id = sectionId(recipe);
|
|
10
|
+
const existing = sections.get(id);
|
|
11
|
+
if (existing)
|
|
12
|
+
existing.recipes.push(recipe);
|
|
13
|
+
else
|
|
14
|
+
sections.set(id, {
|
|
15
|
+
id,
|
|
16
|
+
label: recipe.group?.label ?? recipe.label,
|
|
17
|
+
recipes: [recipe],
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return [...sections.values()];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The NAV section a recipe's entries sit under by default: the section it
|
|
24
|
+
* suggests, else its group, else the recipe. Not to be confused with
|
|
25
|
+
* {@link RecipeSection} (Options and Help pages), which follows `group`.
|
|
26
|
+
*/
|
|
27
|
+
export function navSectionOf(recipe) {
|
|
28
|
+
return (recipe.section ?? {
|
|
29
|
+
id: sectionId(recipe),
|
|
30
|
+
label: recipe.group?.label ?? recipe.label,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/** Nav sections of the given recipes, in the order their first recipe comes. */
|
|
34
|
+
export function buildNavSections(recipes) {
|
|
35
|
+
const out = new Map();
|
|
36
|
+
for (const recipe of recipes) {
|
|
37
|
+
const nav = navSectionOf(recipe);
|
|
38
|
+
const existing = out.get(nav.id);
|
|
39
|
+
if (existing)
|
|
40
|
+
existing.recipes.push(recipe);
|
|
41
|
+
else
|
|
42
|
+
out.set(nav.id, { ...nav, recipes: [recipe] });
|
|
43
|
+
}
|
|
44
|
+
return [...out.values()];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Old nav section key (the `group` id or recipe id that used to name a nav
|
|
48
|
+
* section) to its key now. Only keys that changed appear.
|
|
49
|
+
*/
|
|
50
|
+
export function legacyNavSectionKeys(recipes) {
|
|
51
|
+
// A key that is still a nav section today (`billing`: the invoicing group id
|
|
52
|
+
// AND its section) is not legacy, whatever another recipe's old key meant.
|
|
53
|
+
const current = new Set(recipes.map((recipe) => navSectionOf(recipe).id));
|
|
54
|
+
const map = {};
|
|
55
|
+
for (const recipe of recipes) {
|
|
56
|
+
const old = sectionId(recipe);
|
|
57
|
+
const now = navSectionOf(recipe).id;
|
|
58
|
+
if (old !== now && !current.has(old))
|
|
59
|
+
map[old] = now;
|
|
60
|
+
}
|
|
61
|
+
return map;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The stable layout id of a navigation item: `item:<package>:<Model>`, or
|
|
65
|
+
* `item:<package>:<Model>:<key>` when a model appears twice in the nav and the
|
|
66
|
+
* extra entry declares a fixed `key`. It never names the section, the label or
|
|
67
|
+
* the href, so renaming an entry, moving a recipe's suggested section or
|
|
68
|
+
* changing the selection query leaves saved layouts and cookbooks valid.
|
|
69
|
+
*/
|
|
70
|
+
export function navItemId(packageId, modelName, key) {
|
|
71
|
+
return `item:${packageId}:${modelName}${key ? `:${key}` : ''}`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The line under an entry on its section card: the recipe's own text first,
|
|
75
|
+
* then the catalog model's description, then a plain fallback.
|
|
76
|
+
*/
|
|
77
|
+
export function entryDescription(own, model) {
|
|
78
|
+
return (own?.trim() ||
|
|
79
|
+
model.description?.trim() ||
|
|
80
|
+
`Your ${humanizeName(model.name)} records, all in one place.`);
|
|
81
|
+
}
|
|
82
|
+
function humanizeName(name) {
|
|
83
|
+
return name.replace(/([a-z0-9])([A-Z])/g, '$1 $2').toLowerCase();
|
|
84
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { CatalogModel } from '../catalog/types.ts';
|
|
2
|
+
import type { Cookbook } from '../cookbook/types.ts';
|
|
3
|
+
import { type PlanData } from './plan-data.ts';
|
|
4
|
+
import { type FieldPolicyRow, type ResolvedField, type ViewField } from './policy.ts';
|
|
5
|
+
import type { ExposureSurface, RecipeModelHints } from './types.ts';
|
|
6
|
+
/** A model as the generated views see it once recipe options are applied. */
|
|
7
|
+
export interface AppliedModel {
|
|
8
|
+
/** The model with narrowed surfaces emptied. */
|
|
9
|
+
model: CatalogModel;
|
|
10
|
+
/** Every field's merged policy, in order. */
|
|
11
|
+
resolved: ResolvedField[];
|
|
12
|
+
/** What lists and forms show. */
|
|
13
|
+
fields: ViewField[];
|
|
14
|
+
/** Defaults for fields that are not shown, so records still carry them. */
|
|
15
|
+
background: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The visitor's added recipes and their saved options. Like the package
|
|
19
|
+
* selection, it is the one store the planner page, navigation and a future
|
|
20
|
+
* chat assistant drive. The cookbook (`cookbook/`) is its persisted form:
|
|
21
|
+
* `snapshot()` and `load()` are the only way in or out. Policy rows live in
|
|
22
|
+
* memory here; smrt-planner#4 makes them real rows.
|
|
23
|
+
*/
|
|
24
|
+
declare class RecipeState {
|
|
25
|
+
ids: string[];
|
|
26
|
+
rows: FieldPolicyRow[];
|
|
27
|
+
narrowed: Record<string, ExposureSurface[]>;
|
|
28
|
+
/** Added feature models (qualified names): models no recipe covers. */
|
|
29
|
+
features: string[];
|
|
30
|
+
/**
|
|
31
|
+
* Recipe and feature ids a loaded cookbook named that this version does not
|
|
32
|
+
* know. Kept so the next save and export carry them; never applied.
|
|
33
|
+
*/
|
|
34
|
+
unavailableRecipes: string[];
|
|
35
|
+
unavailableFeatures: string[];
|
|
36
|
+
/** The rules live in `plan-data.ts`; this holds their data in runes. */
|
|
37
|
+
get data(): PlanData;
|
|
38
|
+
private set;
|
|
39
|
+
/** Forget the ids this version does not know (the visitor's explicit say). */
|
|
40
|
+
removeUnavailable(): void;
|
|
41
|
+
hasFeature(id: string): boolean;
|
|
42
|
+
addFeature(id: string): void;
|
|
43
|
+
removeFeature(id: string): void;
|
|
44
|
+
has(id: string): boolean;
|
|
45
|
+
/** Added recipes that need `id`; non-empty means it cannot be removed. */
|
|
46
|
+
requiredBy(id: string): string[];
|
|
47
|
+
/** Add recipes, pulling in everything they `require`. */
|
|
48
|
+
add(...ids: string[]): void;
|
|
49
|
+
/** Remove recipes; ones other added recipes need are kept. */
|
|
50
|
+
remove(...ids: string[]): void;
|
|
51
|
+
toggle(id: string): void;
|
|
52
|
+
clear(): void;
|
|
53
|
+
/** The hints of the first added recipe that includes this model. */
|
|
54
|
+
hintsFor(modelId: string): RecipeModelHints | undefined;
|
|
55
|
+
/** Apply the added recipes' hints and the saved rows to a catalog model. */
|
|
56
|
+
apply(model: CatalogModel): AppliedModel;
|
|
57
|
+
/** Replace the saved options for one model. */
|
|
58
|
+
save(modelId: string, rows: readonly FieldPolicyRow[], narrowed: readonly ExposureSurface[]): void;
|
|
59
|
+
/** Forget the saved options for one model. */
|
|
60
|
+
reset(modelId: string): void;
|
|
61
|
+
/** The recipes and options as cookbook fields, in a stable order. */
|
|
62
|
+
snapshot(): Pick<Cookbook, 'recipes' | 'features' | 'policies' | 'exposure'>;
|
|
63
|
+
/** Replace everything from a validated cookbook. */
|
|
64
|
+
load(cookbook: Pick<Cookbook, 'recipes' | 'features' | 'policies' | 'exposure'>): void;
|
|
65
|
+
}
|
|
66
|
+
export declare const recipeState: RecipeState;
|
|
67
|
+
export {};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { emptyPlanData, hintsForModel, planFields, planFromCookbook, recipesRequiringId, withFeatureAdded, withFeatureRemoved, withModelOptions, withRecipesAdded, withRecipesRemoved, } from "./plan-data.js";
|
|
2
|
+
import { backgroundDefaults, narrowModel, resolveExposure, resolveFields, viewFields, } from "./policy.js";
|
|
3
|
+
/**
|
|
4
|
+
* The visitor's added recipes and their saved options. Like the package
|
|
5
|
+
* selection, it is the one store the planner page, navigation and a future
|
|
6
|
+
* chat assistant drive. The cookbook (`cookbook/`) is its persisted form:
|
|
7
|
+
* `snapshot()` and `load()` are the only way in or out. Policy rows live in
|
|
8
|
+
* memory here; smrt-planner#4 makes them real rows.
|
|
9
|
+
*/
|
|
10
|
+
class RecipeState {
|
|
11
|
+
ids = $state([]);
|
|
12
|
+
rows = $state([]);
|
|
13
|
+
narrowed = $state({});
|
|
14
|
+
/** Added feature models (qualified names): models no recipe covers. */
|
|
15
|
+
features = $state([]);
|
|
16
|
+
/**
|
|
17
|
+
* Recipe and feature ids a loaded cookbook named that this version does not
|
|
18
|
+
* know. Kept so the next save and export carry them; never applied.
|
|
19
|
+
*/
|
|
20
|
+
unavailableRecipes = $state([]);
|
|
21
|
+
unavailableFeatures = $state([]);
|
|
22
|
+
/** The rules live in `plan-data.ts`; this holds their data in runes. */
|
|
23
|
+
get data() {
|
|
24
|
+
return {
|
|
25
|
+
ids: this.ids,
|
|
26
|
+
rows: this.rows,
|
|
27
|
+
narrowed: this.narrowed,
|
|
28
|
+
features: this.features,
|
|
29
|
+
unavailableRecipes: this.unavailableRecipes,
|
|
30
|
+
unavailableFeatures: this.unavailableFeatures,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
set(next) {
|
|
34
|
+
this.ids = next.ids;
|
|
35
|
+
this.rows = next.rows;
|
|
36
|
+
this.narrowed = next.narrowed;
|
|
37
|
+
this.features = next.features;
|
|
38
|
+
this.unavailableRecipes = next.unavailableRecipes;
|
|
39
|
+
this.unavailableFeatures = next.unavailableFeatures;
|
|
40
|
+
}
|
|
41
|
+
/** Forget the ids this version does not know (the visitor's explicit say). */
|
|
42
|
+
removeUnavailable() {
|
|
43
|
+
this.unavailableRecipes = [];
|
|
44
|
+
this.unavailableFeatures = [];
|
|
45
|
+
}
|
|
46
|
+
hasFeature(id) {
|
|
47
|
+
return this.features.includes(id);
|
|
48
|
+
}
|
|
49
|
+
addFeature(id) {
|
|
50
|
+
this.set(withFeatureAdded(this.data, id));
|
|
51
|
+
}
|
|
52
|
+
removeFeature(id) {
|
|
53
|
+
this.set(withFeatureRemoved(this.data, id));
|
|
54
|
+
}
|
|
55
|
+
has(id) {
|
|
56
|
+
return this.ids.includes(id);
|
|
57
|
+
}
|
|
58
|
+
/** Added recipes that need `id`; non-empty means it cannot be removed. */
|
|
59
|
+
requiredBy(id) {
|
|
60
|
+
return recipesRequiringId(this.data, id);
|
|
61
|
+
}
|
|
62
|
+
/** Add recipes, pulling in everything they `require`. */
|
|
63
|
+
add(...ids) {
|
|
64
|
+
this.set(withRecipesAdded(this.data, ids));
|
|
65
|
+
}
|
|
66
|
+
/** Remove recipes; ones other added recipes need are kept. */
|
|
67
|
+
remove(...ids) {
|
|
68
|
+
this.set(withRecipesRemoved(this.data, ids));
|
|
69
|
+
}
|
|
70
|
+
toggle(id) {
|
|
71
|
+
if (this.has(id))
|
|
72
|
+
this.remove(id);
|
|
73
|
+
else
|
|
74
|
+
this.add(id);
|
|
75
|
+
}
|
|
76
|
+
clear() {
|
|
77
|
+
this.set(emptyPlanData());
|
|
78
|
+
}
|
|
79
|
+
/** The hints of the first added recipe that includes this model. */
|
|
80
|
+
hintsFor(modelId) {
|
|
81
|
+
return hintsForModel(this, modelId);
|
|
82
|
+
}
|
|
83
|
+
/** Apply the added recipes' hints and the saved rows to a catalog model. */
|
|
84
|
+
apply(model) {
|
|
85
|
+
const hints = this.hintsFor(model.id);
|
|
86
|
+
const resolved = resolveFields(model, hints, this.rows);
|
|
87
|
+
const exposure = resolveExposure(model, hints, this.narrowed[model.id] ?? []);
|
|
88
|
+
return {
|
|
89
|
+
model: narrowModel(model, exposure),
|
|
90
|
+
resolved,
|
|
91
|
+
fields: viewFields(resolved),
|
|
92
|
+
background: backgroundDefaults(resolved),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/** Replace the saved options for one model. */
|
|
96
|
+
save(modelId, rows, narrowed) {
|
|
97
|
+
this.set(withModelOptions(this.data, modelId, rows, narrowed));
|
|
98
|
+
}
|
|
99
|
+
/** Forget the saved options for one model. */
|
|
100
|
+
reset(modelId) {
|
|
101
|
+
this.save(modelId, [], []);
|
|
102
|
+
}
|
|
103
|
+
/** The recipes and options as cookbook fields, in a stable order. */
|
|
104
|
+
snapshot() {
|
|
105
|
+
return planFields(this.data);
|
|
106
|
+
}
|
|
107
|
+
/** Replace everything from a validated cookbook. */
|
|
108
|
+
load(cookbook) {
|
|
109
|
+
this.set(planFromCookbook(cookbook));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export const recipeState = new RecipeState();
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shape of a recipe as `SmrtRecipe` (happyvertical/smrt#3590) emits it into
|
|
3
|
+
* `smrt-knowledge.json` under the top-level `recipes` key, and the only place
|
|
4
|
+
* the planner depends on that shape. Until the generator reads recipes from the
|
|
5
|
+
* published packages. The catalog carries them; `overlay.json` adds the
|
|
6
|
+
* planner-local `forms` and `extends`.
|
|
7
|
+
*/
|
|
8
|
+
import type { RecipeHelp } from './help.ts';
|
|
9
|
+
/**
|
|
10
|
+
* Curation hints for one field. The vocabulary is the smrt-fields policy
|
|
11
|
+
* vocabulary (default, visibility, label, help, order, locked), so applying a
|
|
12
|
+
* recipe's options produces smrt-fields policy rows. Hints are never a second
|
|
13
|
+
* schema: they can only name fields the model already declares.
|
|
14
|
+
*/
|
|
15
|
+
export interface RecipeFieldHint {
|
|
16
|
+
/** A different starting value. Present (even `null`) means "override". */
|
|
17
|
+
default?: unknown;
|
|
18
|
+
/** `hidden` removes the parameter from the options form and the views. */
|
|
19
|
+
visibility?: 'basic' | 'advanced' | 'hidden';
|
|
20
|
+
label?: string;
|
|
21
|
+
help?: string;
|
|
22
|
+
order?: number;
|
|
23
|
+
/** The planner may not change this field's policy. */
|
|
24
|
+
locked?: boolean;
|
|
25
|
+
/** The form refuses to save without a value, whatever the catalog says. */
|
|
26
|
+
required?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/** The `@smrt()` surfaces a recipe may narrow. It can never switch one on. */
|
|
29
|
+
export type ExposureSurface = 'api' | 'mcp' | 'cli';
|
|
30
|
+
export interface RecipeModelHints {
|
|
31
|
+
/** Keyed by field name. */
|
|
32
|
+
fields?: Record<string, RecipeFieldHint>;
|
|
33
|
+
/** `false` narrows that surface off; `true` is not allowed. */
|
|
34
|
+
exposure?: Partial<Record<ExposureSurface, false>>;
|
|
35
|
+
}
|
|
36
|
+
export interface RecipeNavEntry {
|
|
37
|
+
label: string;
|
|
38
|
+
/**
|
|
39
|
+
* A shell icon name (`users`, `calendar`...) drawn on the entry's row.
|
|
40
|
+
* Optional in smrt; the planner draws a generic record icon without one.
|
|
41
|
+
*/
|
|
42
|
+
icon?: string;
|
|
43
|
+
/**
|
|
44
|
+
* One friendly line for a business owner, shown on the section card.
|
|
45
|
+
* Optional in smrt; the planner falls back to the model's description.
|
|
46
|
+
*/
|
|
47
|
+
description?: string;
|
|
48
|
+
/** Qualified model name, `@scope/pkg:Class`. */
|
|
49
|
+
model: string;
|
|
50
|
+
/**
|
|
51
|
+
* Fixed key making this entry's layout id `item:<pkg>:<Model>:<key>`. Only
|
|
52
|
+
* for a model that appears twice in the nav; never derived from the label.
|
|
53
|
+
*/
|
|
54
|
+
key?: string;
|
|
55
|
+
/**
|
|
56
|
+
* What New creates, when the label is not a countable noun ("Stock levels"
|
|
57
|
+
* -> "stock entry"). Without it, the label's singular is used.
|
|
58
|
+
*/
|
|
59
|
+
noun?: string;
|
|
60
|
+
/**
|
|
61
|
+
* LOCAL. Narrows the entry to rows whose `field` equals `value` (an
|
|
62
|
+
* Ingredients entry over Products: `productType` = `material`). Needs a
|
|
63
|
+
* `key`, which puts the view at `/m/<pkg>/<Model>/<key>/`. New rows from
|
|
64
|
+
* the view carry the value; the model's plain entry stops listing them
|
|
65
|
+
* while the filtered entry's recipe is added.
|
|
66
|
+
*/
|
|
67
|
+
filter?: {
|
|
68
|
+
field: string;
|
|
69
|
+
value: string;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* LOCAL (not in `SmrtRecipe` yet): recipes with the same `group.id` share one
|
|
74
|
+
* Planner card. The card's switch is on while any of its recipes is, and each
|
|
75
|
+
* recipe is a sub-switch on the card, in declaration order (the first is what
|
|
76
|
+
* turning the card on adds). `label` and `summary` are the card's.
|
|
77
|
+
*/
|
|
78
|
+
export interface RecipeGroup {
|
|
79
|
+
id: string;
|
|
80
|
+
label: string;
|
|
81
|
+
summary?: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* LOCAL, to upstream to `SmrtRecipe` (PR notes): the navigation section a
|
|
85
|
+
* recipe SUGGESTS its `nav` entries sit under, e.g. `{ id: 'sales', label:
|
|
86
|
+
* 'Sales' }`. Distinct from {@link RecipeGroup}, which is the Planner card and
|
|
87
|
+
* the Options/Help pages. The app owns the sections; the user may rename,
|
|
88
|
+
* add or reorder them in the Layout tab, so `id` must be stable (it keys a
|
|
89
|
+
* saved layout). Recipes naming the same `id` share one section. Absent: the
|
|
90
|
+
* recipe's `group`, else the recipe itself.
|
|
91
|
+
*/
|
|
92
|
+
export interface RecipeNavSection {
|
|
93
|
+
id: string;
|
|
94
|
+
label: string;
|
|
95
|
+
/**
|
|
96
|
+
* LOCAL: the section's icon, a shell icon name (`shoppingBag`, `receipt`...).
|
|
97
|
+
* The sidebar shows only sections, so every suggested section has one; the
|
|
98
|
+
* user can change it in edit mode.
|
|
99
|
+
*/
|
|
100
|
+
icon?: string;
|
|
101
|
+
/** LOCAL: one line for the section's page, under its title. */
|
|
102
|
+
description?: string;
|
|
103
|
+
}
|
|
104
|
+
/** A value in a form record: a literal, a `{ref}` to another record's id, or a template. */
|
|
105
|
+
export type RecipeFormValue = string | number | boolean | null | {
|
|
106
|
+
ref: string;
|
|
107
|
+
field?: string;
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* LOCAL. One row a form saves. Records are applied in order, so a record can
|
|
111
|
+
* `{ref}` an earlier one. A record with no `match` is created (or, when the
|
|
112
|
+
* form is editing, is the row being edited, for the first record). With a
|
|
113
|
+
* `match` it is found by those values or created from them, so shared rows
|
|
114
|
+
* such as the default location are never duplicated. A `{ref, field}` is that
|
|
115
|
+
* record's value of `field` rather than its id. A `match` that points at a
|
|
116
|
+
* record LATER in the list (a Profile found by its Customer's `profileId`)
|
|
117
|
+
* locates the row when editing and is ignored when creating. `values` apply when the
|
|
118
|
+
* row is created; fields mapped with `to` apply on every save. A string value
|
|
119
|
+
* may use `{alias.field}` and `{alias.field|slug}` over values the form holds.
|
|
120
|
+
*/
|
|
121
|
+
export interface RecipeFormRecord {
|
|
122
|
+
as: string;
|
|
123
|
+
/** Qualified model name. */
|
|
124
|
+
model: string;
|
|
125
|
+
match?: Record<string, RecipeFormValue>;
|
|
126
|
+
values?: Record<string, RecipeFormValue>;
|
|
127
|
+
}
|
|
128
|
+
/** An input mapped onto `alias.field` of one of the form's records. */
|
|
129
|
+
export interface RecipeFormField {
|
|
130
|
+
id: string;
|
|
131
|
+
label: string;
|
|
132
|
+
/** `alias.field`, e.g. `product.price`. */
|
|
133
|
+
to: string;
|
|
134
|
+
required?: boolean;
|
|
135
|
+
help?: string;
|
|
136
|
+
/** Starting value for a new row. */
|
|
137
|
+
default?: unknown;
|
|
138
|
+
}
|
|
139
|
+
interface RecipeFormBase {
|
|
140
|
+
/** Unique across recipes; `extends` points at it. */
|
|
141
|
+
id: string;
|
|
142
|
+
/** What New offers and the edit form is titled, e.g. "Simple product". */
|
|
143
|
+
label: string;
|
|
144
|
+
/** The Kind column's text for a row this form edits, e.g. "Simple". */
|
|
145
|
+
kindLabel: string;
|
|
146
|
+
/** Qualified model the form creates and edits; its list is the one shown. */
|
|
147
|
+
model: string;
|
|
148
|
+
}
|
|
149
|
+
/** Inputs mapped to fields of related objects, saved together. */
|
|
150
|
+
export interface FieldMapForm extends RecipeFormBase {
|
|
151
|
+
kind: 'field-map';
|
|
152
|
+
records: RecipeFormRecord[];
|
|
153
|
+
fields: RecipeFormField[];
|
|
154
|
+
}
|
|
155
|
+
/** One axis of a variant grid. */
|
|
156
|
+
export interface VariantAxis {
|
|
157
|
+
/** Written to `ProductVariant.axisName` and the keys of `Sku.attributes`. */
|
|
158
|
+
name: string;
|
|
159
|
+
/** Label of the chip input, e.g. "Sizes". */
|
|
160
|
+
label: string;
|
|
161
|
+
/** Values offered to start with. */
|
|
162
|
+
values: string[];
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* A product with axes: name and price, a chip input per axis, then a grid with
|
|
166
|
+
* one cell per combination. Saves the product, a `variants` row per axis and a
|
|
167
|
+
* `skus` row per cell with its `attributes` pinned.
|
|
168
|
+
*/
|
|
169
|
+
export interface VariantGridForm extends RecipeFormBase {
|
|
170
|
+
kind: 'variant-grid';
|
|
171
|
+
/** The product row, as a record the `fields` map onto. */
|
|
172
|
+
product: RecipeFormRecord;
|
|
173
|
+
fields: RecipeFormField[];
|
|
174
|
+
axes: VariantAxis[];
|
|
175
|
+
/** Qualified model of the axis rows. */
|
|
176
|
+
variants: string;
|
|
177
|
+
/** Qualified model of the cell rows. */
|
|
178
|
+
skus: string;
|
|
179
|
+
}
|
|
180
|
+
export type RecipeForm = FieldMapForm | VariantGridForm;
|
|
181
|
+
/**
|
|
182
|
+
* LOCAL. Adds to another recipe's form from a recipe that is switched on
|
|
183
|
+
* alongside it. On a field-map form the `records` and `fields` join the form.
|
|
184
|
+
* On a variant grid they are evaluated once per cell: `product` and `sku` are
|
|
185
|
+
* the cell's rows, and each `fields` entry is one more input in every cell.
|
|
186
|
+
*/
|
|
187
|
+
export interface RecipeFormExtension {
|
|
188
|
+
/** Id of the form being extended. */
|
|
189
|
+
form: string;
|
|
190
|
+
records?: RecipeFormRecord[];
|
|
191
|
+
fields?: RecipeFormField[];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Shell slots a `shell-widget` surface may name (smrt-svelte's `ShellSlot`;
|
|
195
|
+
* kept open here so a slot a newer smrt adds still renders).
|
|
196
|
+
*/
|
|
197
|
+
export type RecipeShellSlot = 'header.start' | 'header.center' | 'header.end' | 'footer.start' | 'footer.center' | 'footer.end' | 'leftSidebar.header' | 'leftSidebar.footer' | 'rightSidebar.header' | 'rightSidebar.footer' | (string & {});
|
|
198
|
+
/** `'<module specifier>#<ExportName>'`; the planner never imports it. */
|
|
199
|
+
export type RecipeExportRef = `${string}#${string}`;
|
|
200
|
+
/**
|
|
201
|
+
* A widget a recipe contributes to customizable overviews (smrt#3727). The
|
|
202
|
+
* planner reads only these keys; the rest of the declaration is carried
|
|
203
|
+
* as authored for the host that registers it.
|
|
204
|
+
*/
|
|
205
|
+
export interface RecipeWidgetSurface {
|
|
206
|
+
kind: 'widget';
|
|
207
|
+
type: string;
|
|
208
|
+
export: RecipeExportRef;
|
|
209
|
+
label: string;
|
|
210
|
+
description?: string;
|
|
211
|
+
icon?: string;
|
|
212
|
+
[key: string]: unknown;
|
|
213
|
+
}
|
|
214
|
+
/** A non-model piece of UI a recipe adds (smrt#3708). */
|
|
215
|
+
export type RecipeSurface = {
|
|
216
|
+
kind: 'shell-widget';
|
|
217
|
+
slot: RecipeShellSlot;
|
|
218
|
+
export: RecipeExportRef;
|
|
219
|
+
label: string;
|
|
220
|
+
icon?: string;
|
|
221
|
+
} | {
|
|
222
|
+
kind: 'route';
|
|
223
|
+
path: string;
|
|
224
|
+
export: RecipeExportRef;
|
|
225
|
+
label: string;
|
|
226
|
+
} | {
|
|
227
|
+
kind: 'settings-panel';
|
|
228
|
+
export: RecipeExportRef;
|
|
229
|
+
label: string;
|
|
230
|
+
} | {
|
|
231
|
+
kind: 'playground';
|
|
232
|
+
export: RecipeExportRef;
|
|
233
|
+
label?: string;
|
|
234
|
+
} | RecipeWidgetSurface;
|
|
235
|
+
/** A provider a recipe needs or can use (email, oauth, storage, llm...). */
|
|
236
|
+
export interface RecipeProvider {
|
|
237
|
+
id: string;
|
|
238
|
+
/** Open slug: `email`, `oauth`, `storage`, `llm`... */
|
|
239
|
+
kind: string;
|
|
240
|
+
/** Supported implementations (`imap`, `smtp`; `openai`, `webllm`). */
|
|
241
|
+
options: string[];
|
|
242
|
+
required: boolean;
|
|
243
|
+
/** Names (never values) of the secrets the provider needs. */
|
|
244
|
+
secrets?: string[];
|
|
245
|
+
/** The `options` that run in a browser with none of the `secrets`. */
|
|
246
|
+
browserOptions?: string[];
|
|
247
|
+
}
|
|
248
|
+
/** Where a recipe's runtime pieces can run. Absent means `both`. */
|
|
249
|
+
export type RecipeRuntime = 'browser' | 'server' | 'both';
|
|
250
|
+
/** A demo fixture: an export reference, or small inline JSON. */
|
|
251
|
+
export type RecipeDemoSeed = {
|
|
252
|
+
export: RecipeExportRef;
|
|
253
|
+
} | {
|
|
254
|
+
data: unknown;
|
|
255
|
+
};
|
|
256
|
+
/**
|
|
257
|
+
* How far a feature runs in a browser-only demo (smrt#3709), derived at smrt
|
|
258
|
+
* build time and never authored: `live` (real browser data layer), `mock` (a
|
|
259
|
+
* provider is faked), `sample` (fixtures only), `server` (needs a server).
|
|
260
|
+
*/
|
|
261
|
+
export type RecipeDemoMode = 'live' | 'mock' | 'sample' | 'server';
|
|
262
|
+
export interface RecipeDemo {
|
|
263
|
+
mode: RecipeDemoMode;
|
|
264
|
+
/** Plain sentences saying why, in the order the rules fired. */
|
|
265
|
+
reasons: string[];
|
|
266
|
+
/** Ids of the providers a demo fakes. */
|
|
267
|
+
mocked?: string[];
|
|
268
|
+
}
|
|
269
|
+
/** Whether a package's root entry builds for a browser (smrt#3709). */
|
|
270
|
+
export interface PackageBrowserCapability {
|
|
271
|
+
status: 'browser-safe' | 'server-only';
|
|
272
|
+
/** Tracking issues (`#3624`); absent when browser-safe. */
|
|
273
|
+
issues?: string[];
|
|
274
|
+
/** What blocks the package itself; absent when only inherited. */
|
|
275
|
+
reason?: string;
|
|
276
|
+
/** Packages it inherits `server-only` from. */
|
|
277
|
+
via?: string[];
|
|
278
|
+
}
|
|
279
|
+
export interface Recipe {
|
|
280
|
+
/** Unique, e.g. `commerce.sales`. */
|
|
281
|
+
id: string;
|
|
282
|
+
label: string;
|
|
283
|
+
summary: string;
|
|
284
|
+
synonyms: string[];
|
|
285
|
+
/** Qualified model names, all owned by the recipe's package. */
|
|
286
|
+
models: string[];
|
|
287
|
+
nav: RecipeNavEntry[];
|
|
288
|
+
/** Ids of other recipes (possibly in other packages). */
|
|
289
|
+
requires: string[];
|
|
290
|
+
/**
|
|
291
|
+
* LOCAL. Alternatives: at least one must be on. Adding the recipe with none
|
|
292
|
+
* on adds the first; the last one on cannot be removed while this is.
|
|
293
|
+
*/
|
|
294
|
+
requiresAny?: string[][];
|
|
295
|
+
/** LOCAL. Card this is a sub-switch of; see {@link RecipeGroup}. */
|
|
296
|
+
group?: RecipeGroup;
|
|
297
|
+
/** LOCAL. Suggested navigation section; see {@link RecipeNavSection}. */
|
|
298
|
+
section?: RecipeNavSection;
|
|
299
|
+
/** LOCAL. Forms that replace the generic one-model form for `nav` models. */
|
|
300
|
+
forms?: RecipeForm[];
|
|
301
|
+
/** LOCAL. Additions to other recipes' forms; see {@link RecipeFormExtension}. */
|
|
302
|
+
extends?: RecipeFormExtension[];
|
|
303
|
+
/** Curation hints keyed by qualified model name. */
|
|
304
|
+
options?: Record<string, RecipeModelHints>;
|
|
305
|
+
/** User-facing help (happyvertical/smrt#3591); see `help.ts`. */
|
|
306
|
+
help?: RecipeHelp;
|
|
307
|
+
/** Non-model surfaces the recipe adds: a shell widget, a route, a panel. */
|
|
308
|
+
surfaces?: RecipeSurface[];
|
|
309
|
+
/** Providers (and secret NAMES) the recipe needs or can use. */
|
|
310
|
+
providers?: RecipeProvider[];
|
|
311
|
+
runtime?: RecipeRuntime;
|
|
312
|
+
demoSeed?: RecipeDemoSeed;
|
|
313
|
+
/** Browser-demo classification of this recipe on its own (smrt#3709). */
|
|
314
|
+
demo?: RecipeDemo;
|
|
315
|
+
/**
|
|
316
|
+
* LOCAL, written by the catalog generator: `demo` once what the recipe
|
|
317
|
+
* requires is counted (smrt-core's `effectiveRecipeDemo`). Present only when
|
|
318
|
+
* it differs from `demo`; read both through `features/demo.ts`.
|
|
319
|
+
*/
|
|
320
|
+
effectiveDemo?: RecipeDemo;
|
|
321
|
+
}
|
|
322
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shape of a recipe as `SmrtRecipe` (happyvertical/smrt#3590) emits it into
|
|
3
|
+
* `smrt-knowledge.json` under the top-level `recipes` key, and the only place
|
|
4
|
+
* the planner depends on that shape. Until the generator reads recipes from the
|
|
5
|
+
* published packages. The catalog carries them; `overlay.json` adds the
|
|
6
|
+
* planner-local `forms` and `extends`.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|