@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,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Send to kitchen: the hand-off to `smrt kitchen`, the CLI that serves this
|
|
3
|
+
* app on localhost and turns the cookbook into a project. The CLI announces
|
|
4
|
+
* itself in `planner.config.json` with where to send, and in the address it
|
|
5
|
+
* opens with the one-time token, as a fragment (`fragment.ts`):
|
|
6
|
+
*
|
|
7
|
+
* planner.config.json { "kitchen": { "endpoint": "/api/kitchen/cookbook" } }
|
|
8
|
+
* address http://127.0.0.1:<port>/#kitchen=<token>
|
|
9
|
+
*
|
|
10
|
+
* The config never carries a token (any local process sending the right Host
|
|
11
|
+
* header could read it); a `token` in the file is ignored (and reported, see
|
|
12
|
+
* `tokenInConfig`). The page POSTs the
|
|
13
|
+
* cookbook to the endpoint with the token in `x-kitchen-token`. Wire contract,
|
|
14
|
+
* version 1:
|
|
15
|
+
*
|
|
16
|
+
* - `200 { ok: true, dir, mode, installed, added, nextSteps }`: the project
|
|
17
|
+
* was written (`mode` is `new` or `update`).
|
|
18
|
+
* - `4xx/5xx { ok: false, errors: string[] }`: the cookbook was not applied;
|
|
19
|
+
* the server keeps listening, so the visitor can fix it and send again.
|
|
20
|
+
*/
|
|
21
|
+
import { serializeCookbook } from "../cookbook/file.js";
|
|
22
|
+
/** The header the CLI checks the one-time token in. */
|
|
23
|
+
export const KITCHEN_TOKEN_HEADER = 'x-kitchen-token';
|
|
24
|
+
const isObject = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
25
|
+
/** An http(s) URL, or a path on the page's own origin. */
|
|
26
|
+
function usableEndpoint(value) {
|
|
27
|
+
if (typeof value !== 'string')
|
|
28
|
+
return false;
|
|
29
|
+
const text = value.trim();
|
|
30
|
+
if (text.startsWith('/') && !text.startsWith('//'))
|
|
31
|
+
return true;
|
|
32
|
+
try {
|
|
33
|
+
const url = new URL(text);
|
|
34
|
+
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Validate the config's `kitchen` block. Anything unusable means no kitchen.
|
|
42
|
+
* Only the endpoint is read: a `token` here is ignored, never used.
|
|
43
|
+
*/
|
|
44
|
+
export function parseKitchenConfig(value) {
|
|
45
|
+
if (!isObject(value))
|
|
46
|
+
return undefined;
|
|
47
|
+
const { endpoint } = value;
|
|
48
|
+
if (!usableEndpoint(endpoint))
|
|
49
|
+
return undefined;
|
|
50
|
+
return {
|
|
51
|
+
endpoint: endpoint.trim(),
|
|
52
|
+
...(Object.hasOwn(value, 'token') ? { tokenInConfig: true } : {}),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const strings = (value) => Array.isArray(value)
|
|
56
|
+
? value.filter((x) => typeof x === 'string')
|
|
57
|
+
: [];
|
|
58
|
+
/** POST the cookbook to the kitchen. Never throws; a failure is an outcome. */
|
|
59
|
+
export async function sendToKitchen(config, cookbook, fetcher = fetch) {
|
|
60
|
+
let response;
|
|
61
|
+
try {
|
|
62
|
+
response = await fetcher(config.endpoint, {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
headers: {
|
|
65
|
+
'content-type': 'application/json',
|
|
66
|
+
accept: 'application/json',
|
|
67
|
+
[KITCHEN_TOKEN_HEADER]: config.token,
|
|
68
|
+
},
|
|
69
|
+
body: serializeCookbook(cookbook),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return {
|
|
74
|
+
ok: false,
|
|
75
|
+
errors: [
|
|
76
|
+
'The kitchen could not be reached. Is `smrt kitchen` still running?',
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
let body;
|
|
81
|
+
try {
|
|
82
|
+
body = await response.json();
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
body = undefined;
|
|
86
|
+
}
|
|
87
|
+
if (response.ok && isObject(body) && body.ok === true) {
|
|
88
|
+
return {
|
|
89
|
+
ok: true,
|
|
90
|
+
result: {
|
|
91
|
+
dir: typeof body.dir === 'string' ? body.dir : '',
|
|
92
|
+
mode: body.mode === 'update' ? 'update' : 'new',
|
|
93
|
+
installed: body.installed === true,
|
|
94
|
+
added: strings(body.added),
|
|
95
|
+
nextSteps: strings(body.nextSteps),
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const errors = isObject(body) ? strings(body.errors) : [];
|
|
100
|
+
if (isObject(body) && typeof body.error === 'string') {
|
|
101
|
+
errors.push(body.error);
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
ok: false,
|
|
105
|
+
errors: errors.length
|
|
106
|
+
? errors
|
|
107
|
+
: [`The kitchen answered ${response.status}.`],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The kitchen token arrives in the address, never in a file the server serves.
|
|
3
|
+
* `smrt kitchen` opens `http://127.0.0.1:<port>/#kitchen=<token>`: a fragment is
|
|
4
|
+
* never sent to a server, so no endpoint (and no other local process sending
|
|
5
|
+
* the right `Host`) can read it from `planner.config.json`. The page reads the
|
|
6
|
+
* fragment once at startup, keeps the token in memory only, and removes the
|
|
7
|
+
* `kitchen` parameter from the address (`replaceState`) so it is not left in
|
|
8
|
+
* the history entry either.
|
|
9
|
+
*/
|
|
10
|
+
/** The fragment key the token is under. */
|
|
11
|
+
export declare const KITCHEN_FRAGMENT_KEY = "kitchen";
|
|
12
|
+
export interface KitchenFragment {
|
|
13
|
+
/** The token, when the fragment carried a usable one. */
|
|
14
|
+
token?: string;
|
|
15
|
+
/** True when the fragment had a `kitchen` parameter (usable or not) to strip. */
|
|
16
|
+
present: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* The fragment without the `kitchen` parameter, as it belongs in the address:
|
|
19
|
+
* `''` or `#other=1`. Other parameters are kept.
|
|
20
|
+
*/
|
|
21
|
+
hash: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Read `location.hash` (with or without the `#`). Never throws. Only the
|
|
25
|
+
* `kitchen` parameter is touched: every other part of the fragment is returned
|
|
26
|
+
* exactly as it was (no re-encoding), so an in-page anchor survives. The token
|
|
27
|
+
* is read raw (it must already be URL-safe), so a percent-encoded or `+`-spaced
|
|
28
|
+
* value is not a token; the parameter is removed all the same.
|
|
29
|
+
*/
|
|
30
|
+
export declare function readKitchenFragment(hash: string): KitchenFragment;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The kitchen token arrives in the address, never in a file the server serves.
|
|
3
|
+
* `smrt kitchen` opens `http://127.0.0.1:<port>/#kitchen=<token>`: a fragment is
|
|
4
|
+
* never sent to a server, so no endpoint (and no other local process sending
|
|
5
|
+
* the right `Host`) can read it from `planner.config.json`. The page reads the
|
|
6
|
+
* fragment once at startup, keeps the token in memory only, and removes the
|
|
7
|
+
* `kitchen` parameter from the address (`replaceState`) so it is not left in
|
|
8
|
+
* the history entry either.
|
|
9
|
+
*/
|
|
10
|
+
/** The fragment key the token is under. */
|
|
11
|
+
export const KITCHEN_FRAGMENT_KEY = 'kitchen';
|
|
12
|
+
/** URL-safe characters only (RFC 3986 unreserved): what `base64url` and hex produce. */
|
|
13
|
+
const TOKEN = /^[A-Za-z0-9._~-]{1,256}$/;
|
|
14
|
+
/**
|
|
15
|
+
* Read `location.hash` (with or without the `#`). Never throws. Only the
|
|
16
|
+
* `kitchen` parameter is touched: every other part of the fragment is returned
|
|
17
|
+
* exactly as it was (no re-encoding), so an in-page anchor survives. The token
|
|
18
|
+
* is read raw (it must already be URL-safe), so a percent-encoded or `+`-spaced
|
|
19
|
+
* value is not a token; the parameter is removed all the same.
|
|
20
|
+
*/
|
|
21
|
+
export function readKitchenFragment(hash) {
|
|
22
|
+
const text = hash.startsWith('#') ? hash.slice(1) : hash;
|
|
23
|
+
if (!text)
|
|
24
|
+
return { present: false, hash: '' };
|
|
25
|
+
let token;
|
|
26
|
+
let present = false;
|
|
27
|
+
const kept = [];
|
|
28
|
+
for (const part of text.split('&')) {
|
|
29
|
+
const equals = part.indexOf('=');
|
|
30
|
+
const key = equals < 0 ? part : part.slice(0, equals);
|
|
31
|
+
if (key !== KITCHEN_FRAGMENT_KEY) {
|
|
32
|
+
kept.push(part);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
// The first `kitchen` wins; all of them are removed.
|
|
36
|
+
if (!present && equals >= 0) {
|
|
37
|
+
const value = part.slice(equals + 1);
|
|
38
|
+
if (TOKEN.test(value))
|
|
39
|
+
token = value;
|
|
40
|
+
}
|
|
41
|
+
present = true;
|
|
42
|
+
}
|
|
43
|
+
const rest = kept.filter((part) => part !== '').join('&');
|
|
44
|
+
return {
|
|
45
|
+
...(token ? { token } : {}),
|
|
46
|
+
present,
|
|
47
|
+
hash: rest ? `#${rest}` : '',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Cookbook } from '../cookbook/types.ts';
|
|
2
|
+
import { type KitchenConfig, type KitchenEndpoint, type KitchenOutcome } from './client.ts';
|
|
3
|
+
export type KitchenStatus = 'idle' | 'sending' | 'sent' | 'failed';
|
|
4
|
+
/** Whether a kitchen is listening, and the state of the current send. */
|
|
5
|
+
export declare class KitchenState {
|
|
6
|
+
/** Where the kitchen listens, from `planner.config.json`. */
|
|
7
|
+
endpoint: string | undefined;
|
|
8
|
+
/** An older CLI still puts its token in the config: never used, and sending is off. */
|
|
9
|
+
tokenInConfig: boolean;
|
|
10
|
+
/** The one-time token, from the address's fragment. Memory only. */
|
|
11
|
+
private token;
|
|
12
|
+
status: KitchenStatus;
|
|
13
|
+
outcome: KitchenOutcome | undefined;
|
|
14
|
+
/** A kitchen is listening and this page holds its token: sending is possible. */
|
|
15
|
+
get config(): KitchenConfig | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* A kitchen is listening but this page was opened without its token (the
|
|
18
|
+
* address had no `#kitchen=` fragment, or the page was reloaded after the
|
|
19
|
+
* fragment was removed): the person needs the address `smrt kitchen` printed.
|
|
20
|
+
*/
|
|
21
|
+
get needsLink(): boolean;
|
|
22
|
+
configure(config: KitchenEndpoint | undefined, token?: string): void;
|
|
23
|
+
send(cookbook: Cookbook, fetcher?: typeof fetch): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
/** The app's one kitchen state, set from `planner.config.json`. */
|
|
26
|
+
export declare const kitchenState: KitchenState;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { sendToKitchen, } from "./client.js";
|
|
2
|
+
/** Whether a kitchen is listening, and the state of the current send. */
|
|
3
|
+
export class KitchenState {
|
|
4
|
+
/** Where the kitchen listens, from `planner.config.json`. */
|
|
5
|
+
endpoint = $state(undefined);
|
|
6
|
+
/** An older CLI still puts its token in the config: never used, and sending is off. */
|
|
7
|
+
tokenInConfig = $state(false);
|
|
8
|
+
/** The one-time token, from the address's fragment. Memory only. */
|
|
9
|
+
token = $state(undefined);
|
|
10
|
+
status = $state('idle');
|
|
11
|
+
outcome = $state(undefined);
|
|
12
|
+
/** A kitchen is listening and this page holds its token: sending is possible. */
|
|
13
|
+
get config() {
|
|
14
|
+
return this.endpoint && this.token && !this.tokenInConfig
|
|
15
|
+
? { endpoint: this.endpoint, token: this.token }
|
|
16
|
+
: undefined;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A kitchen is listening but this page was opened without its token (the
|
|
20
|
+
* address had no `#kitchen=` fragment, or the page was reloaded after the
|
|
21
|
+
* fragment was removed): the person needs the address `smrt kitchen` printed.
|
|
22
|
+
*/
|
|
23
|
+
get needsLink() {
|
|
24
|
+
return !!this.endpoint && !this.token && !this.tokenInConfig;
|
|
25
|
+
}
|
|
26
|
+
configure(config, token) {
|
|
27
|
+
this.endpoint = config?.endpoint;
|
|
28
|
+
this.tokenInConfig = config?.tokenInConfig === true;
|
|
29
|
+
this.token = config ? token : undefined;
|
|
30
|
+
this.status = 'idle';
|
|
31
|
+
this.outcome = undefined;
|
|
32
|
+
}
|
|
33
|
+
async send(cookbook, fetcher) {
|
|
34
|
+
const config = this.config;
|
|
35
|
+
if (!config || this.status === 'sending')
|
|
36
|
+
return;
|
|
37
|
+
this.status = 'sending';
|
|
38
|
+
this.outcome = undefined;
|
|
39
|
+
const outcome = await sendToKitchen(config, cookbook, fetcher);
|
|
40
|
+
this.outcome = outcome;
|
|
41
|
+
this.status = outcome.ok ? 'sent' : 'failed';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** The app's one kitchen state, set from `planner.config.json`. */
|
|
45
|
+
export const kitchenState = new KitchenState();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CookbookStore } from '../cookbook/store.svelte.ts';
|
|
2
|
+
import type { Cookbook, CookbookResult } from '../cookbook/types.ts';
|
|
3
|
+
import type { AppSettings } from '../settings/app-settings.ts';
|
|
4
|
+
import type { LibraryCookbook } from './types.ts';
|
|
5
|
+
export { isCookbookEmpty } from './document.ts';
|
|
6
|
+
/** Applying replaces the current recipes and menu, so it asks first unless empty. */
|
|
7
|
+
export declare function needsConfirm(store: Pick<CookbookStore, 'snapshot'>): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Replace the cookbook with the cookbook's: recipes, features, options,
|
|
10
|
+
* exposure and layout. Goes through the same strict check an import does, and
|
|
11
|
+
* applies nothing on failure. Also switches the sample-data pack to the
|
|
12
|
+
* cookbook's; rows already generated are regenerated by the caller resetting
|
|
13
|
+
* the data source (records are not part of a cookbook).
|
|
14
|
+
*/
|
|
15
|
+
export declare function applyLibraryCookbook(cookbook: LibraryCookbook, store: Pick<CookbookStore, 'replace'> & Partial<Pick<CookbookStore, 'theme'>>, settings?: AppSettings): CookbookResult;
|
|
16
|
+
/** Does the current cookbook still hold everything the cookbook added? */
|
|
17
|
+
export declare function holdsCookbook(cookbook: LibraryCookbook, current: Pick<Cookbook, 'recipes' | 'features'>): boolean;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { parseCookbook } from "../cookbook/validate.js";
|
|
2
|
+
import { setSamplePack } from "../data/packs.js";
|
|
3
|
+
import { isCookbookEmpty, resolveLibraryCookbook } from "./document.js";
|
|
4
|
+
export { isCookbookEmpty } from "./document.js";
|
|
5
|
+
/** Applying replaces the current recipes and menu, so it asks first unless empty. */
|
|
6
|
+
export function needsConfirm(store) {
|
|
7
|
+
return !isCookbookEmpty(store.snapshot());
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Replace the cookbook with the cookbook's: recipes, features, options,
|
|
11
|
+
* exposure and layout. Goes through the same strict check an import does, and
|
|
12
|
+
* applies nothing on failure. Also switches the sample-data pack to the
|
|
13
|
+
* cookbook's; rows already generated are regenerated by the caller resetting
|
|
14
|
+
* the data source (records are not part of a cookbook).
|
|
15
|
+
*/
|
|
16
|
+
export function applyLibraryCookbook(cookbook, store, settings) {
|
|
17
|
+
const result = resolveLibraryCookbook(cookbook, parseCookbook, settings);
|
|
18
|
+
if (result.ok) {
|
|
19
|
+
// A cookbook without a theme leaves the visitor's own look alone.
|
|
20
|
+
const keep = result.cookbook.theme ? undefined : store.theme;
|
|
21
|
+
store.replace(result.cookbook);
|
|
22
|
+
if (keep)
|
|
23
|
+
store.theme = keep;
|
|
24
|
+
setSamplePack(cookbook.id);
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
/** Does the current cookbook still hold everything the cookbook added? */
|
|
29
|
+
export function holdsCookbook(cookbook, current) {
|
|
30
|
+
return (cookbook.document.recipes.every((id) => current.recipes.includes(id)) &&
|
|
31
|
+
cookbook.document.features.every((id) => current.features.includes(id)));
|
|
32
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Cookbook, CookbookResult } from '../cookbook/types.ts';
|
|
2
|
+
import { type AppSettings } from '../settings/app-settings.ts';
|
|
3
|
+
import type { LibraryCookbook } from './types.ts';
|
|
4
|
+
/** Nothing built yet: no recipes, features, saved options, narrowing, layout or theme. */
|
|
5
|
+
export declare function isCookbookEmpty(cookbook: Cookbook): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* The document a library cookbook sets up, through the given strict check
|
|
8
|
+
* (`parseCookbook` in the browser). `settings` are the visitor's edits of the
|
|
9
|
+
* cookbook's starting values; the cookbook's own data is never changed
|
|
10
|
+
* (writeSettings returns a copy).
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveLibraryCookbook(cookbook: LibraryCookbook, parse: (input: unknown) => CookbookResult, settings?: AppSettings): CookbookResult;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { isShellLayoutEmpty } from '@happyvertical/smrt-svelte/workspace/layout';
|
|
2
|
+
import { writeSettings } from "../settings/app-settings.js";
|
|
3
|
+
/*
|
|
4
|
+
* The parts of applying a library cookbook that need no browser and no
|
|
5
|
+
* validator import: `apply.ts` (the browser store) and the headless planner
|
|
6
|
+
* both build on them.
|
|
7
|
+
*/
|
|
8
|
+
/** Nothing built yet: no recipes, features, saved options, narrowing, layout or theme. */
|
|
9
|
+
export function isCookbookEmpty(cookbook) {
|
|
10
|
+
return (cookbook.recipes.length === 0 &&
|
|
11
|
+
cookbook.features.length === 0 &&
|
|
12
|
+
cookbook.policies.length === 0 &&
|
|
13
|
+
Object.keys(cookbook.exposure ?? {}).length === 0 &&
|
|
14
|
+
cookbook.theme === undefined &&
|
|
15
|
+
isShellLayoutEmpty(cookbook.layout));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The document a library cookbook sets up, through the given strict check
|
|
19
|
+
* (`parseCookbook` in the browser). `settings` are the visitor's edits of the
|
|
20
|
+
* cookbook's starting values; the cookbook's own data is never changed
|
|
21
|
+
* (writeSettings returns a copy).
|
|
22
|
+
*/
|
|
23
|
+
export function resolveLibraryCookbook(cookbook, parse, settings) {
|
|
24
|
+
return parse(settings
|
|
25
|
+
? writeSettings(structuredClone(cookbook.document), settings)
|
|
26
|
+
: cookbook.document);
|
|
27
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LibraryCookbook icons as Tabler-style stroke paths (24x24 viewBox, `currentColor`,
|
|
3
|
+
* stroke width 2, round caps). The planner has no icon library; these few are
|
|
4
|
+
* inline so the cookbook data names an icon instead of carrying markup.
|
|
5
|
+
*/
|
|
6
|
+
export declare const COOKBOOK_ICONS: Record<string, readonly string[]>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LibraryCookbook icons as Tabler-style stroke paths (24x24 viewBox, `currentColor`,
|
|
3
|
+
* stroke width 2, round caps). The planner has no icon library; these few are
|
|
4
|
+
* inline so the cookbook data names an icon instead of carrying markup.
|
|
5
|
+
*/
|
|
6
|
+
export const COOKBOOK_ICONS = {
|
|
7
|
+
bread: [
|
|
8
|
+
'M7 3h10a4 4 0 0 1 2.4 7.2L20 19a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2l.6-8.8A4 4 0 0 1 7 3z',
|
|
9
|
+
'M9 13l1 3',
|
|
10
|
+
'M14 13l1 3',
|
|
11
|
+
],
|
|
12
|
+
car: [
|
|
13
|
+
'M5 17a2 2 0 1 0 4 0a2 2 0 1 0-4 0',
|
|
14
|
+
'M15 17a2 2 0 1 0 4 0a2 2 0 1 0-4 0',
|
|
15
|
+
'M5 17h-2v-6l2-5h9l4 5h1a2 2 0 0 1 2 2v4h-2m-4 0h-6m-6-6h15m-6 0v-5',
|
|
16
|
+
],
|
|
17
|
+
flame: [
|
|
18
|
+
'M12 12c2-2.96 0-7-1-8 0 3.038-1.773 4.741-3 6-1.226 1.26-2 3.24-2 5a6 6 0 1 0 12 0c0-1.532-1.056-3.94-2-5-1.786 3-2.791 3-4 2z',
|
|
19
|
+
],
|
|
20
|
+
yoga: [
|
|
21
|
+
'M11 4a1 1 0 1 0 2 0a1 1 0 1 0-2 0',
|
|
22
|
+
'M4 20h4l1.5-3',
|
|
23
|
+
'M17 20l-1-5h-5l1-7',
|
|
24
|
+
'M4 10l4-1l4-1l4 1.5l4 1.5',
|
|
25
|
+
],
|
|
26
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LibraryCookbook } from './types.ts';
|
|
2
|
+
export { COOKBOOK_ICONS } from './icons.ts';
|
|
3
|
+
export type * from './types.ts';
|
|
4
|
+
/** The curated cookbooks, in the order the tab shows them. */
|
|
5
|
+
export declare const libraryCookbooks: readonly LibraryCookbook[];
|
|
6
|
+
export declare function getLibraryCookbook(id: string): LibraryCookbook | undefined;
|
|
7
|
+
/** Recipe labels for the preview's chips, in the cookbook's (sorted) order. */
|
|
8
|
+
export declare function libraryRecipeLabels(cookbook: LibraryCookbook): string[];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { recipesById } from "../recipes/index.js";
|
|
2
|
+
import raw from './library.json' with { type: 'json' };
|
|
3
|
+
export { COOKBOOK_ICONS } from "./icons.js";
|
|
4
|
+
/** The curated cookbooks, in the order the tab shows them. */
|
|
5
|
+
export const libraryCookbooks = raw.cookbooks;
|
|
6
|
+
export function getLibraryCookbook(id) {
|
|
7
|
+
return libraryCookbooks.find((cookbook) => cookbook.id === id);
|
|
8
|
+
}
|
|
9
|
+
/** Recipe labels for the preview's chips, in the cookbook's (sorted) order. */
|
|
10
|
+
export function libraryRecipeLabels(cookbook) {
|
|
11
|
+
return cookbook.document.recipes.map((id) => recipesById.get(id)?.label ?? id);
|
|
12
|
+
}
|