@happyvertical/smrt-planner 0.57.3 → 0.57.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/assistant.md +8 -1
- package/agents/cookbook.md +8 -2
- package/app/404.html +21 -21
- package/app/_app/immutable/assets/2.CdEXvRg0.css +1 -0
- package/app/_app/immutable/assets/{feedback.DePeap37.css → feedback.qFktqYFY.css} +1 -1
- package/app/_app/immutable/chunks/{DveAWx7t.js → 5ukUzDcw.js} +1 -1
- package/app/_app/immutable/chunks/{DR_9YSDq.js → BDbFl7UA.js} +1 -1
- package/app/_app/immutable/chunks/{rkUL-DlL.js → BG9Gz_25.js} +25 -25
- package/app/_app/immutable/chunks/{BfPYbnRI.js → Bal1oPZu.js} +1 -1
- package/app/_app/immutable/chunks/BhU_yBI_.js +1 -0
- package/app/_app/immutable/chunks/{CZwkvsZI.js → BiEOJeYb.js} +1 -1
- package/app/_app/immutable/chunks/{DsY7g8iJ.js → Bsn3IIve.js} +3 -3
- package/app/_app/immutable/chunks/{PJY04JNF.js → BybfWt-B.js} +1 -1
- package/app/_app/immutable/chunks/{CF503c7E.js → C1VofLtR.js} +1 -1
- package/app/_app/immutable/chunks/{2l76O8yg.js → C3sRGrYK.js} +1 -1
- package/app/_app/immutable/chunks/{Bz0ybtg3.js → CTlMHIE6.js} +1 -1
- package/app/_app/immutable/chunks/C_3CJO_1.js +1 -0
- package/app/_app/immutable/chunks/Cga8zF3r.js +1 -0
- package/app/_app/immutable/chunks/Cr4byQts.js +24 -0
- package/app/_app/immutable/chunks/{U6_OBRq_.js → CtjBwCj8.js} +1 -1
- package/app/_app/immutable/chunks/CyUSxz1P.js +4 -0
- package/app/_app/immutable/chunks/{BAeyjCL_.js → DTWraE40.js} +1 -1
- package/app/_app/immutable/chunks/{Cfd9dmBM.js → DjJovMrk.js} +1 -1
- package/app/_app/immutable/chunks/{BJKoxDbG.js → DuZeZzOA.js} +1 -1
- package/app/_app/immutable/chunks/{C-DLpfU4.js → J9kOiFLO.js} +1 -1
- package/app/_app/immutable/chunks/NppCG--v.js +1 -0
- package/app/_app/immutable/chunks/{EZsakmZX.js → O8DAZ_le.js} +1 -1
- package/app/_app/immutable/chunks/{Dq8aYheE.js → YGONf0jr.js} +1 -1
- package/app/_app/immutable/chunks/d_dqmeIr.js +1 -0
- package/app/_app/immutable/chunks/{Bb0f-PWY.js → gCpxN2IC.js} +1 -1
- package/app/_app/immutable/chunks/nphy1MQF.js +1 -0
- package/app/_app/immutable/entry/{app.BOdcGXnx.js → app.B4gMiHwR.js} +2 -2
- package/app/_app/immutable/entry/start.BXkBl20Z.js +1 -0
- package/app/_app/immutable/nodes/0.2MYMg80l.js +9 -0
- package/app/_app/immutable/nodes/{1.CULLAAlp.js → 1.DKP901Gn.js} +1 -1
- package/app/_app/immutable/nodes/{10.D3aS_KZl.js → 10.DNN0cVai.js} +1 -1
- package/app/_app/immutable/nodes/{11.C92xaiTE.js → 11.DgbmegX3.js} +1 -1
- package/app/_app/immutable/nodes/{12.D1Lzt56L.js → 12.D5MtnJoE.js} +1 -1
- package/app/_app/immutable/nodes/{13.Bx4rov-F.js → 13._rY66Xa_.js} +1 -1
- package/app/_app/immutable/nodes/{14.CEBy0En2.js → 14.B6TD25VU.js} +1 -1
- package/app/_app/immutable/nodes/2.x9WyxQ1S.js +24 -0
- package/app/_app/immutable/nodes/{3.C8f09BsJ.js → 3.V5uGCpGb.js} +1 -1
- package/app/_app/immutable/nodes/{4.Z1MwZ_rU.js → 4.CCwzLrgu.js} +1 -1
- package/app/_app/immutable/nodes/{5.BnknP-NB.js → 5.CgHzwpns.js} +1 -1
- package/app/_app/immutable/nodes/{6.B0InO4bR.js → 6.CvQHLh_u.js} +1 -1
- package/app/_app/immutable/nodes/{7.CLnj1BGB.js → 7.7EIrly34.js} +1 -1
- package/app/_app/immutable/nodes/{8.BmZYIUmz.js → 8.DyyRBuTw.js} +1 -1
- package/app/_app/immutable/nodes/{9.BKWSHjz-.js → 9.DcURs0gN.js} +1 -1
- package/app/_app/version.json +1 -1
- package/app/advanced-styles/index.html +24 -24
- package/app/ai/index.html +28 -33
- package/app/blueprint/index.html +22 -22
- package/app/cookbook/index.html +22 -22
- package/app/index.html +38 -38
- package/app/m/ads/AdDeliveryTier/index.html +25 -25
- package/app/m/ads/AdEvent/index.html +25 -25
- package/app/m/ads/AdFormat/index.html +25 -25
- package/app/m/ads/AdGroup/index.html +25 -25
- package/app/m/ads/AdVariation/index.html +25 -25
- package/app/m/analytics/AnalyticsDataStream/index.html +25 -25
- package/app/m/analytics/AnalyticsEvent/index.html +25 -25
- package/app/m/analytics/AnalyticsProperty/index.html +25 -25
- package/app/m/analytics/AnalyticsReport/index.html +25 -25
- package/app/m/approvals/ApprovalEvent/index.html +25 -25
- package/app/m/approvals/ApprovalPolicy/index.html +25 -25
- package/app/m/approvals/ApprovalRequest/index.html +25 -25
- package/app/m/assets/Asset/attachments/index.html +26 -26
- package/app/m/assets/Asset/index.html +25 -25
- package/app/m/assets/AssetAssociation/index.html +25 -25
- package/app/m/assets/AssetMetafield/index.html +25 -25
- package/app/m/assets/AssetStatus/index.html +25 -25
- package/app/m/assets/AssetType/index.html +25 -25
- package/app/m/assets/Folder/index.html +25 -25
- package/app/m/chat/AgentSession/index.html +25 -25
- package/app/m/chat/ChatMessage/index.html +25 -25
- package/app/m/chat/ChatParticipant/index.html +25 -25
- package/app/m/chat/ChatReaction/index.html +25 -25
- package/app/m/chat/ChatRoom/index.html +25 -25
- package/app/m/chat/ChatThread/index.html +25 -25
- package/app/m/chat/VoiceGatewayTurn/index.html +25 -25
- package/app/m/chat/VoiceSession/index.html +25 -25
- package/app/m/commerce/Agreement/index.html +25 -25
- package/app/m/commerce/Cart/index.html +25 -25
- package/app/m/commerce/Contract/index.html +25 -25
- package/app/m/commerce/ContractLineItem/index.html +26 -26
- package/app/m/commerce/Customer/index.html +25 -25
- package/app/m/commerce/DocumentTax/index.html +25 -25
- package/app/m/commerce/Estimate/index.html +25 -25
- package/app/m/commerce/Fulfillment/index.html +25 -25
- package/app/m/commerce/FulfillmentLineItem/index.html +25 -25
- package/app/m/commerce/HistoricalCustomerFunds/index.html +89 -0
- package/app/m/commerce/HistoricalCustomerFundsAllocation/index.html +89 -0
- package/app/m/commerce/HistoricalSalesLine/index.html +89 -0
- package/app/m/commerce/Invoice/index.html +25 -25
- package/app/m/commerce/InvoiceLineItem/index.html +25 -25
- package/app/m/commerce/Lease/index.html +25 -25
- package/app/m/commerce/LicenseSale/index.html +25 -25
- package/app/m/commerce/Order/index.html +25 -25
- package/app/m/commerce/Payment/index.html +25 -25
- package/app/m/commerce/PaymentAllocation/index.html +25 -25
- package/app/m/commerce/PaymentInstrument/index.html +25 -25
- package/app/m/commerce/PaymentIntent/index.html +25 -25
- package/app/m/commerce/Payout/index.html +25 -25
- package/app/m/commerce/ProductionOrder/index.html +25 -25
- package/app/m/commerce/PurchaseContract/index.html +25 -25
- package/app/m/commerce/PurchaseOrder/index.html +25 -25
- package/app/m/commerce/SalesContract/index.html +25 -25
- package/app/m/commerce/SupplierQuote/index.html +25 -25
- package/app/m/commerce/TaxCode/index.html +25 -25
- package/app/m/commerce/TaxComponent/index.html +25 -25
- package/app/m/commerce/TaxSettings/index.html +25 -25
- package/app/m/commerce/TaxSummaryReport/index.html +25 -25
- package/app/m/commerce/Vendor/index.html +25 -25
- package/app/m/commerce/WholesaleOrder/index.html +25 -25
- package/app/m/content/Content/index.html +25 -25
- package/app/m/content/ContentContribution/index.html +25 -25
- package/app/m/content/ContentContributionAttachment/index.html +25 -25
- package/app/m/content/ContentContributionRevision/index.html +25 -25
- package/app/m/content/ContentContributionType/index.html +25 -25
- package/app/m/content/ContentContributor/index.html +25 -25
- package/app/m/content/ContentCorrection/index.html +25 -25
- package/app/m/content/ContentFeedSource/index.html +25 -25
- package/app/m/content/ContentGovernanceAssignment/index.html +25 -25
- package/app/m/content/ContentGovernancePolicy/index.html +25 -25
- package/app/m/content/ContentGovernanceProfile/index.html +25 -25
- package/app/m/content/ContentReference/index.html +25 -25
- package/app/m/content/ContentReview/index.html +25 -25
- package/app/m/content/ContentVersion/index.html +25 -25
- package/app/m/events/Event/index.html +25 -25
- package/app/m/events/EventParticipant/index.html +25 -25
- package/app/m/events/EventSeries/index.html +26 -26
- package/app/m/events/EventType/index.html +25 -25
- package/app/m/expenses/Expense/index.html +25 -25
- package/app/m/facts/Fact/index.html +25 -25
- package/app/m/facts/FactContent/index.html +25 -25
- package/app/m/facts/FactEvidence/index.html +25 -25
- package/app/m/facts/FactSource/index.html +25 -25
- package/app/m/facts/FactSubject/index.html +25 -25
- package/app/m/facts/FactTag/index.html +25 -25
- package/app/m/fields/FieldPolicy/index.html +25 -25
- package/app/m/fields/FieldPolicySuggestion/index.html +25 -25
- package/app/m/fields/FieldUsageCounter/index.html +25 -25
- package/app/m/images/Image/index.html +25 -25
- package/app/m/inventory/InventoryLocation/index.html +25 -25
- package/app/m/inventory/StockLevel/index.html +25 -25
- package/app/m/inventory/StockMovement/index.html +25 -25
- package/app/m/ledgers/Account/index.html +25 -25
- package/app/m/ledgers/Journal/index.html +25 -25
- package/app/m/ledgers/JournalEntry/index.html +25 -25
- package/app/m/ledgers/Ledger/index.html +25 -25
- package/app/m/manufacturing/Assembly/index.html +25 -25
- package/app/m/manufacturing/BillOfMaterials/index.html +25 -25
- package/app/m/manufacturing/BomLine/index.html +25 -25
- package/app/m/manufacturing/Operation/index.html +25 -25
- package/app/m/manufacturing/ProductionRun/index.html +25 -25
- package/app/m/manufacturing/ProductionRunCompletion/index.html +25 -25
- package/app/m/manufacturing/RoutingStep/index.html +25 -25
- package/app/m/marketing/Campaign/index.html +25 -25
- package/app/m/marketing/CampaignChannel/index.html +25 -25
- package/app/m/marketing/CampaignMetricSnapshot/index.html +25 -25
- package/app/m/messages/Account/index.html +25 -25
- package/app/m/messages/Attachment/index.html +25 -25
- package/app/m/messages/Blacklist/index.html +25 -25
- package/app/m/messages/Email/failed-sends/index.html +26 -26
- package/app/m/messages/Email/index.html +25 -25
- package/app/m/messages/Email/mailbox/index.html +26 -26
- package/app/m/messages/EmailAccount/index.html +25 -25
- package/app/m/messages/EmailAttachment/index.html +25 -25
- package/app/m/messages/EmailFolder/index.html +25 -25
- package/app/m/messages/Message/index.html +25 -25
- package/app/m/messages/MessagingEndpoint/index.html +25 -25
- package/app/m/messages/PersonaMessageRoute/index.html +25 -25
- package/app/m/messages/SlackAccount/index.html +25 -25
- package/app/m/messages/SlackMessage/index.html +25 -25
- package/app/m/messages/TelegramAccount/index.html +25 -25
- package/app/m/messages/Tweet/index.html +25 -25
- package/app/m/messages/TwitterAccount/index.html +25 -25
- package/app/m/messages/Whitelist/index.html +25 -25
- package/app/m/messages/ZulipAccount/index.html +25 -25
- package/app/m/places/Place/index.html +25 -25
- package/app/m/places/PlaceType/index.html +25 -25
- package/app/m/products/Category/index.html +25 -25
- package/app/m/products/Material/index.html +25 -25
- package/app/m/products/Product/index.html +25 -25
- package/app/m/products/Product/ingredients/index.html +26 -26
- package/app/m/products/ProductVariant/index.html +25 -25
- package/app/m/products/Sku/index.html +25 -25
- package/app/m/profiles/ApiKey/index.html +25 -25
- package/app/m/profiles/Bot/index.html +25 -25
- package/app/m/profiles/MagicLinkToken/index.html +25 -25
- package/app/m/profiles/NostrIdentity/index.html +25 -25
- package/app/m/profiles/OidcIdentity/index.html +25 -25
- package/app/m/profiles/Organization/index.html +25 -25
- package/app/m/profiles/Person/index.html +25 -25
- package/app/m/profiles/Profile/index.html +25 -25
- package/app/m/profiles/ProfileMetadata/index.html +25 -25
- package/app/m/profiles/ProfileMetafield/index.html +25 -25
- package/app/m/profiles/ProfileRelationship/index.html +25 -25
- package/app/m/profiles/ProfileRelationshipTerm/index.html +25 -25
- package/app/m/profiles/ProfileRelationshipType/index.html +25 -25
- package/app/m/profiles/ProfileType/index.html +25 -25
- package/app/m/projects/Comment/index.html +25 -25
- package/app/m/projects/Issue/index.html +25 -25
- package/app/m/projects/Label/index.html +25 -25
- package/app/m/projects/Project/index.html +25 -25
- package/app/m/projects/ProjectIntegration/index.html +25 -25
- package/app/m/projects/PullRequest/index.html +25 -25
- package/app/m/projects/Repository/index.html +25 -25
- package/app/m/properties/Property/index.html +25 -25
- package/app/m/properties/Zone/index.html +25 -25
- package/app/m/reports/RuntimeReport/index.html +25 -25
- package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +26 -26
- package/app/m/reports/SmrtReportLock/index.html +26 -26
- package/app/m/reports/SmrtReportRefreshTask/index.html +26 -26
- package/app/m/reports/SmrtReportRun/index.html +26 -26
- package/app/m/reports/SmrtReportSchedule/index.html +26 -26
- package/app/m/reports/SmrtReportWatermark/index.html +26 -26
- package/app/m/sales/Agreement/index.html +25 -25
- package/app/m/sales/AttributionException/index.html +25 -25
- package/app/m/sales/AttributionPolicy/index.html +25 -25
- package/app/m/sales/Commission/index.html +25 -25
- package/app/m/sales/CommissionAdjustment/index.html +25 -25
- package/app/m/sales/CommissionPayout/index.html +25 -25
- package/app/m/sales/CommissionPlan/index.html +25 -25
- package/app/m/sales/Earner/index.html +25 -25
- package/app/m/sales/EarnerSourceAttribution/index.html +25 -25
- package/app/m/sales/EarningEvent/index.html +25 -25
- package/app/m/sales/ExecutedAgreement/index.html +25 -25
- package/app/m/sales/Lead/index.html +25 -25
- package/app/m/sales/Opportunity/index.html +25 -25
- package/app/m/sales/OpportunityConversion/index.html +25 -25
- package/app/m/sales/PipelineDefinition/index.html +25 -25
- package/app/m/sales/PipelineStage/index.html +25 -25
- package/app/m/sales/Referral/index.html +25 -25
- package/app/m/sales/ReferralAgreement/index.html +25 -25
- package/app/m/sales/ReferralLink/index.html +25 -25
- package/app/m/sales/ReferralProgram/index.html +25 -25
- package/app/m/sales/ReferralTermSnapshot/index.html +25 -25
- package/app/m/sales/ReferralTouch/index.html +25 -25
- package/app/m/sales/Referrer/index.html +25 -25
- package/app/m/sales/SalesActivity/index.html +25 -25
- package/app/m/sales/SalesRepresentative/index.html +25 -25
- package/app/m/sites/Site/index.html +25 -25
- package/app/m/sites/SiteAgentBinding/index.html +25 -25
- package/app/m/social/OAuthState/index.html +25 -25
- package/app/m/social/SocialAccount/index.html +25 -25
- package/app/m/social/SocialPost/index.html +25 -25
- package/app/m/social/SocialPostAnalyticsSnapshot/index.html +25 -25
- package/app/m/subscriptions/BillingAdjustment/index.html +25 -25
- package/app/m/subscriptions/ClientCharge/index.html +25 -25
- package/app/m/subscriptions/CreditGrant/index.html +25 -25
- package/app/m/subscriptions/PricingRule/index.html +25 -25
- package/app/m/subscriptions/RetailCharge/index.html +25 -25
- package/app/m/subscriptions/SpendingPolicy/index.html +25 -25
- package/app/m/subscriptions/SubscriptionPlan/index.html +25 -25
- package/app/m/subscriptions/TenantSubscription/index.html +25 -25
- package/app/m/subscriptions/TenantUsageMetric/index.html +25 -25
- package/app/m/support/ServiceTimeEntry/index.html +25 -25
- package/app/m/support/SupportAiRun/index.html +25 -25
- package/app/m/support/SupportAvailability/index.html +25 -25
- package/app/m/support/SupportCase/index.html +25 -25
- package/app/m/support/SupportCaseEvent/index.html +25 -25
- package/app/m/support/SupportChannelBinding/index.html +25 -25
- package/app/m/support/SupportCharge/index.html +25 -25
- package/app/m/support/SupportCompensation/index.html +25 -25
- package/app/m/support/SupportCompensationPlan/index.html +25 -25
- package/app/m/support/SupportEscalation/index.html +25 -25
- package/app/m/support/SupportInteraction/index.html +25 -25
- package/app/m/support/SupportPlan/index.html +25 -25
- package/app/m/support/SupportPolicy/index.html +25 -25
- package/app/m/support/SupportQualification/index.html +25 -25
- package/app/m/support/SupportServiceTarget/index.html +25 -25
- package/app/m/support/SupportSpecialist/index.html +25 -25
- package/app/m/support/SupportWorkLink/index.html +25 -25
- package/app/m/tags/Tag/index.html +25 -25
- package/app/m/tags/TagAlias/index.html +25 -25
- package/app/m/timesheets/AttendanceBreak/index.html +25 -25
- package/app/m/timesheets/AttendancePunch/index.html +25 -25
- package/app/m/timesheets/AttendanceSegment/index.html +25 -25
- package/app/m/timesheets/ServiceChargeSnapshot/index.html +25 -25
- package/app/m/timesheets/ServiceCompensationSnapshot/index.html +25 -25
- package/app/m/timesheets/ServiceTimeEntry/index.html +25 -25
- package/app/m/users/Group/index.html +25 -25
- package/app/m/users/GroupMember/index.html +25 -25
- package/app/m/users/GroupRole/index.html +25 -25
- package/app/m/users/Membership/index.html +25 -25
- package/app/m/users/MembershipOverride/index.html +25 -25
- package/app/m/users/Permission/index.html +25 -25
- package/app/m/users/Role/index.html +25 -25
- package/app/m/users/RolePermission/index.html +25 -25
- package/app/m/users/Session/index.html +25 -25
- package/app/m/users/Tenant/index.html +25 -25
- package/app/m/users/TenantIntegration/index.html +25 -25
- package/app/m/users/TenantPermissionOverride/index.html +25 -25
- package/app/m/users/User/index.html +25 -25
- package/app/m/video/Character/index.html +25 -25
- package/app/m/video/CharacterAsset/index.html +25 -25
- package/app/m/video/CompositeJob/index.html +25 -25
- package/app/m/video/Performer/index.html +25 -25
- package/app/m/video/PerformerAsset/index.html +25 -25
- package/app/m/video/Scene/index.html +25 -25
- package/app/m/video/SceneAsset/index.html +25 -25
- package/app/m/video/VideoComposition/index.html +25 -25
- package/app/m/video/VideoCompositionAsset/index.html +25 -25
- package/app/m/video/VideoSequence/index.html +25 -25
- package/app/m/video/VideoSequenceAsset/index.html +25 -25
- package/app/m/video/VideoShot/index.html +25 -25
- package/app/m/video/VideoShotAsset/index.html +25 -25
- package/app/m/video/VideoShotCharacter/index.html +25 -25
- package/app/m/video/VideoWorkflow/index.html +25 -25
- package/app/m/voice/VoiceOutput/index.html +25 -25
- package/app/m/voice/VoiceProfile/index.html +25 -25
- package/app/m/voice/VoiceSample/index.html +25 -25
- package/app/mcp.html +2 -2
- package/app/packages/ads/index.html +24 -24
- package/app/packages/analytics/index.html +24 -24
- package/app/packages/approvals/index.html +24 -24
- package/app/packages/assets/index.html +24 -24
- package/app/packages/chat/index.html +24 -24
- package/app/packages/comments/index.html +24 -24
- package/app/packages/commerce/index.html +25 -25
- package/app/packages/content/index.html +24 -24
- package/app/packages/events/index.html +24 -24
- package/app/packages/expenses/index.html +25 -25
- package/app/packages/facts/index.html +24 -24
- package/app/packages/fields/index.html +24 -24
- package/app/packages/human-resources/index.html +24 -24
- package/app/packages/images/index.html +24 -24
- package/app/packages/index.html +24 -24
- package/app/packages/ingestion/index.html +24 -24
- package/app/packages/inventory/index.html +24 -24
- package/app/packages/ledgers/index.html +24 -24
- package/app/packages/manufacturing/index.html +24 -24
- package/app/packages/marketing/index.html +24 -24
- package/app/packages/messages/index.html +24 -24
- package/app/packages/places/index.html +24 -24
- package/app/packages/preferences/index.html +24 -24
- package/app/packages/products/index.html +24 -24
- package/app/packages/profiles/index.html +24 -24
- package/app/packages/projects/index.html +24 -24
- package/app/packages/properties/index.html +24 -24
- package/app/packages/reports/index.html +24 -24
- package/app/packages/sales/index.html +24 -24
- package/app/packages/sites/index.html +24 -24
- package/app/packages/social/index.html +24 -24
- package/app/packages/subscriptions/index.html +24 -24
- package/app/packages/support/index.html +24 -24
- package/app/packages/tags/index.html +24 -24
- package/app/packages/timesheets/index.html +24 -24
- package/app/packages/users/index.html +24 -24
- package/app/packages/video/index.html +24 -24
- package/app/packages/voice/index.html +24 -24
- package/app/packages/webhooks/index.html +24 -24
- package/app/recipes/account-access/help/index.html +24 -24
- package/app/recipes/account-access/index.html +26 -26
- package/app/recipes/activity/help/index.html +24 -24
- package/app/recipes/activity/index.html +26 -26
- package/app/recipes/agreements/help/index.html +26 -26
- package/app/recipes/agreements/index.html +27 -27
- package/app/recipes/analytics.reports/help/index.html +24 -24
- package/app/recipes/analytics.reports/index.html +26 -26
- package/app/recipes/assets/help/index.html +24 -24
- package/app/recipes/assets/index.html +27 -27
- package/app/recipes/billing/help/index.html +26 -26
- package/app/recipes/billing/index.html +26 -26
- package/app/recipes/chat.assistant/help/index.html +24 -24
- package/app/recipes/chat.assistant/index.html +26 -26
- package/app/recipes/comments/help/index.html +24 -24
- package/app/recipes/comments/index.html +26 -26
- package/app/recipes/commerce.customers/help/index.html +24 -24
- package/app/recipes/commerce.customers/index.html +26 -26
- package/app/recipes/commerce.estimates/help/index.html +26 -26
- package/app/recipes/commerce.estimates/index.html +26 -26
- package/app/recipes/commerce.purchases/help/index.html +26 -26
- package/app/recipes/commerce.purchases/index.html +26 -26
- package/app/recipes/commerce.sales/help/index.html +26 -26
- package/app/recipes/commerce.sales/index.html +26 -26
- package/app/recipes/commerce.vendors/help/index.html +24 -24
- package/app/recipes/commerce.vendors/index.html +26 -26
- package/app/recipes/commerce.wholesale/help/index.html +26 -26
- package/app/recipes/commerce.wholesale/index.html +26 -26
- package/app/recipes/events.calendar/help/index.html +24 -24
- package/app/recipes/events.calendar/index.html +26 -26
- package/app/recipes/expenses.tracking/help/index.html +26 -26
- package/app/recipes/expenses.tracking/index.html +26 -26
- package/app/recipes/fields.form-customization/help/index.html +24 -24
- package/app/recipes/fields.form-customization/index.html +26 -26
- package/app/recipes/ingestion/help/index.html +24 -24
- package/app/recipes/ingestion/index.html +26 -26
- package/app/recipes/integrations/help/index.html +24 -24
- package/app/recipes/integrations/index.html +26 -26
- package/app/recipes/inventory.stock/help/index.html +24 -24
- package/app/recipes/inventory.stock/index.html +26 -26
- package/app/recipes/ledgers.bookkeeping/help/index.html +24 -24
- package/app/recipes/ledgers.bookkeeping/index.html +26 -26
- package/app/recipes/messages/help/index.html +24 -24
- package/app/recipes/messages/index.html +26 -26
- package/app/recipes/products/help/index.html +24 -24
- package/app/recipes/products/index.html +26 -26
- package/app/recipes/projects.tracker/help/index.html +24 -24
- package/app/recipes/projects.tracker/index.html +27 -27
- package/app/recipes/reports.materialized/help/index.html +26 -26
- package/app/recipes/reports.materialized/index.html +29 -29
- package/app/recipes/reports.runtime/help/index.html +24 -24
- package/app/recipes/reports.runtime/index.html +27 -27
- package/app/recipes/sales.pipeline/help/index.html +24 -24
- package/app/recipes/sales.pipeline/index.html +26 -26
- package/app/recipes/tags.taxonomy/help/index.html +24 -24
- package/app/recipes/tags.taxonomy/index.html +26 -26
- package/app/recipes/team-collaboration/help/index.html +24 -24
- package/app/recipes/team-collaboration/index.html +26 -26
- package/app/recipes/timesheets.time-entries/help/index.html +24 -24
- package/app/recipes/timesheets.time-entries/index.html +26 -26
- package/app/s/custom-accounts/index.html +22 -22
- package/app/s/custom-appointments/index.html +22 -22
- package/app/s/custom-billing/index.html +22 -22
- package/app/s/custom-buying/index.html +22 -22
- package/app/s/custom-checkout/index.html +22 -22
- package/app/s/custom-classes/index.html +22 -22
- package/app/s/custom-clients/index.html +22 -22
- package/app/s/custom-events/index.html +22 -22
- package/app/s/custom-fleet/index.html +22 -22
- package/app/s/custom-giving/index.html +22 -22
- package/app/s/custom-jobs/index.html +22 -22
- package/app/s/custom-kitchen/index.html +22 -22
- package/app/s/custom-material/index.html +22 -22
- package/app/s/custom-meetings/index.html +22 -22
- package/app/s/custom-members/index.html +22 -22
- package/app/s/custom-paint/index.html +82 -0
- package/app/s/custom-parts/index.html +22 -22
- package/app/s/custom-rentals/index.html +22 -22
- package/app/s/custom-roastery/index.html +22 -22
- package/app/s/custom-schedule/index.html +22 -22
- package/app/s/custom-shelf/index.html +22 -22
- package/app/s/custom-shop/index.html +22 -22
- package/app/s/custom-wholesale/index.html +22 -22
- package/app/s/custom-work/index.html +22 -22
- package/app/s/custom-yard/index.html +22 -22
- package/app/s/section-access-control/index.html +22 -22
- package/app/s/section-account-security/index.html +22 -22
- package/app/s/section-accounting/index.html +22 -22
- package/app/s/section-activity/index.html +22 -22
- package/app/s/section-agreements/index.html +22 -22
- package/app/s/section-analytics/index.html +22 -22
- package/app/s/section-assets/index.html +22 -22
- package/app/s/section-billing/index.html +22 -22
- package/app/s/section-calendar/index.html +22 -22
- package/app/s/section-catalog/index.html +22 -22
- package/app/s/section-chat.assistant/index.html +22 -22
- package/app/s/section-comments/index.html +22 -22
- package/app/s/section-fields.form-customization/index.html +22 -22
- package/app/s/section-ingestion/index.html +22 -22
- package/app/s/section-integrations/index.html +22 -22
- package/app/s/section-messages/index.html +22 -22
- package/app/s/section-more/index.html +22 -22
- package/app/s/section-operations/index.html +22 -22
- package/app/s/section-projects/index.html +22 -22
- package/app/s/section-purchasing/index.html +22 -22
- package/app/s/section-reports.materialized/index.html +22 -22
- package/app/s/section-reports.runtime/index.html +22 -22
- package/app/s/section-sales/index.html +22 -22
- package/app/s/section-taxonomy/index.html +22 -22
- package/app/s/section-team/index.html +22 -22
- package/app/s/section-work/index.html +22 -22
- package/dist/ai/instance.d.ts.map +1 -1
- package/dist/ai/instance.js +9 -1
- package/dist/assistant/change.d.ts +13 -3
- package/dist/assistant/change.d.ts.map +1 -1
- package/dist/assistant/change.js +18 -3
- package/dist/assistant/prompt.d.ts +6 -1
- package/dist/assistant/prompt.d.ts.map +1 -1
- package/dist/assistant/prompt.js +13 -1
- package/dist/assistant/session.svelte.d.ts +5 -0
- package/dist/assistant/session.svelte.d.ts.map +1 -1
- package/dist/assistant/session.svelte.js +1 -0
- package/dist/assistant/transport.d.ts +24 -1
- package/dist/assistant/transport.d.ts.map +1 -1
- package/dist/assistant/transport.js +57 -8
- package/dist/catalog/catalog.json +1366 -51
- package/dist/components/BrowserAssistant.svelte +0 -2
- package/dist/components/BrowserAssistant.svelte.d.ts.map +1 -1
- package/dist/components/CookbooksPanel.svelte +101 -21
- package/dist/components/CookbooksPanel.svelte.d.ts.map +1 -1
- package/dist/data/format.d.ts.map +1 -1
- package/dist/data/format.js +3 -0
- package/dist/data/money.d.ts +1 -1
- package/dist/data/money.js +2 -2
- package/dist/data/packs.d.ts +0 -1
- package/dist/data/packs.d.ts.map +1 -1
- package/dist/data/packs.js +835 -1
- package/dist/library/apply.d.ts +7 -3
- package/dist/library/apply.d.ts.map +1 -1
- package/dist/library/apply.js +19 -6
- package/dist/library/document.d.ts +9 -0
- package/dist/library/document.d.ts.map +1 -1
- package/dist/library/document.js +29 -0
- package/dist/library/icons.d.ts.map +1 -1
- package/dist/library/icons.js +15 -0
- package/dist/library/index.d.ts +4 -1
- package/dist/library/index.d.ts.map +1 -1
- package/dist/library/index.js +9 -2
- package/dist/library/library.json +919 -14
- package/dist/library/state.svelte.d.ts +5 -1
- package/dist/library/state.svelte.d.ts.map +1 -1
- package/dist/library/state.svelte.js +12 -1
- package/dist/library/view.svelte.d.ts +41 -0
- package/dist/library/view.svelte.d.ts.map +1 -0
- package/dist/library/view.svelte.js +67 -0
- package/dist/planner/Planner.svelte +79 -2
- package/dist/planner/Planner.svelte.d.ts.map +1 -1
- package/dist/planner/PlannerControls.svelte +21 -2
- package/dist/planner/PlannerControls.svelte.d.ts.map +1 -1
- package/dist/planner/assistant.d.ts.map +1 -1
- package/dist/planner/assistant.js +9 -0
- package/dist/planner/commands/adapter.d.ts.map +1 -1
- package/dist/planner/commands/adapter.js +10 -3
- package/dist/planner/commands/controller.svelte.d.ts.map +1 -1
- package/dist/planner/commands/controller.svelte.js +2 -1
- package/dist/recipes/scope.d.ts +23 -0
- package/dist/recipes/scope.d.ts.map +1 -1
- package/dist/recipes/scope.js +20 -0
- package/dist/smrt-version.d.ts +1 -1
- package/dist/smrt-version.js +1 -1
- package/package.json +56 -56
- package/app/_app/immutable/assets/2.Djk1H2wk.css +0 -1
- package/app/_app/immutable/chunks/BV_A2GBw.js +0 -24
- package/app/_app/immutable/chunks/CbCYY1ps.js +0 -1
- package/app/_app/immutable/chunks/DD4mX3od.js +0 -1
- package/app/_app/immutable/chunks/DgkBKeKW.js +0 -4
- package/app/_app/immutable/chunks/DvUWb_GS.js +0 -1
- package/app/_app/immutable/chunks/M81UeXT1.js +0 -1
- package/app/_app/immutable/chunks/g7M7feZg.js +0 -1
- package/app/_app/immutable/chunks/r7IFcw-O.js +0 -1
- package/app/_app/immutable/entry/start.BixveMT0.js +0 -1
- package/app/_app/immutable/nodes/0._WFh95JB.js +0 -9
- package/app/_app/immutable/nodes/2.D3Lg90Nn.js +0 -24
- /package/app/_app/immutable/chunks/{DVQPWAnI.js → Bv5jGtB8.js} +0 -0
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
/** Which cookbook the visitor last applied; a UI note, not part of the cookbook. */
|
|
2
2
|
export declare const COOKBOOK_KEY = "smrt-planner:cookbook";
|
|
3
|
+
/** The `workFingerprint` of the document the visitor last applied, as applied. */
|
|
4
|
+
export declare const APPLIED_WORK_KEY = "smrt-planner:cookbook-applied";
|
|
3
5
|
declare class CookbookState {
|
|
4
6
|
active: string | null;
|
|
7
|
+
/** What applying `active` set up, to tell later edits from none. */
|
|
8
|
+
appliedWork: string | null;
|
|
5
9
|
/** Read the remembered cookbook (browser only; never throws). */
|
|
6
10
|
load(storage?: Storage | null): void;
|
|
7
|
-
select(id: string, storage?: Storage | null): void;
|
|
11
|
+
select(id: string, work?: string | null, storage?: Storage | null): void;
|
|
8
12
|
}
|
|
9
13
|
export declare const libraryState: CookbookState;
|
|
10
14
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/library/state.svelte.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,eAAO,MAAM,YAAY,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"state.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/library/state.svelte.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,eAAO,MAAM,YAAY,0BAA0B,CAAC;AACpD,kFAAkF;AAClF,eAAO,MAAM,gBAAgB,kCAAkC,CAAC;AAEhE,cAAM,aAAa;IACjB,MAAM,gBAA+B;IACrC,oEAAoE;IACpE,WAAW,gBAA+B;IAE1C,iEAAiE;IACjE,IAAI,CAAC,OAAO,GAAE,OAAO,GAAG,IAAuB,GAAG,IAAI;IAYtD,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAM,GAAG,IAAW,EAC1B,OAAO,GAAE,OAAO,GAAG,IAAuB,GACzC,IAAI;CAWR;AAED,eAAO,MAAM,YAAY,eAAsB,CAAC"}
|
|
@@ -2,23 +2,34 @@ import { browserStorage } from "../cookbook/storage.js";
|
|
|
2
2
|
import { setSamplePack } from "../data/packs.js";
|
|
3
3
|
/** Which cookbook the visitor last applied; a UI note, not part of the cookbook. */
|
|
4
4
|
export const COOKBOOK_KEY = 'smrt-planner:cookbook';
|
|
5
|
+
/** The `workFingerprint` of the document the visitor last applied, as applied. */
|
|
6
|
+
export const APPLIED_WORK_KEY = 'smrt-planner:cookbook-applied';
|
|
5
7
|
class CookbookState {
|
|
6
8
|
active = $state(null);
|
|
9
|
+
/** What applying `active` set up, to tell later edits from none. */
|
|
10
|
+
appliedWork = $state(null);
|
|
7
11
|
/** Read the remembered cookbook (browser only; never throws). */
|
|
8
12
|
load(storage = browserStorage()) {
|
|
9
13
|
try {
|
|
10
14
|
this.active = storage?.getItem(COOKBOOK_KEY) ?? null;
|
|
15
|
+
this.appliedWork = storage?.getItem(APPLIED_WORK_KEY) ?? null;
|
|
11
16
|
}
|
|
12
17
|
catch {
|
|
13
18
|
this.active = null;
|
|
19
|
+
this.appliedWork = null;
|
|
14
20
|
}
|
|
15
21
|
// The sample data follows the cookbook the visitor last applied.
|
|
16
22
|
setSamplePack(this.active);
|
|
17
23
|
}
|
|
18
|
-
select(id, storage = browserStorage()) {
|
|
24
|
+
select(id, work = null, storage = browserStorage()) {
|
|
19
25
|
this.active = id;
|
|
26
|
+
this.appliedWork = work;
|
|
20
27
|
try {
|
|
21
28
|
storage?.setItem(COOKBOOK_KEY, id);
|
|
29
|
+
if (work === null)
|
|
30
|
+
storage?.removeItem(APPLIED_WORK_KEY);
|
|
31
|
+
else
|
|
32
|
+
storage?.setItem(APPLIED_WORK_KEY, work);
|
|
22
33
|
}
|
|
23
34
|
catch {
|
|
24
35
|
// Remembered in memory only.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** The query parameter naming the open cookbook: `?tab=cookbooks&cookbook=mechanic`. */
|
|
2
|
+
export declare const COOKBOOK_PARAM = "cookbook";
|
|
3
|
+
/**
|
|
4
|
+
* How a host keeps the open cookbook in its address, so browser Back returns
|
|
5
|
+
* to the grid and a link opens the detail. The static app pushes a shallow
|
|
6
|
+
* history entry (`?cookbook=`); the mounted Planner a fragment route
|
|
7
|
+
* (`#/configure/cookbooks/<id>/`). Each one ends by calling `cookbookView.set`.
|
|
8
|
+
*/
|
|
9
|
+
export interface CookbookNavigator {
|
|
10
|
+
open(id: string): void;
|
|
11
|
+
close(): void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The Cookbooks tab's view: the grid, or one cookbook's detail in its place.
|
|
15
|
+
* A UI note like the active tab, never part of the cookbook document.
|
|
16
|
+
*/
|
|
17
|
+
declare class CookbookView {
|
|
18
|
+
/** The cookbook whose detail is shown; null shows the grid. */
|
|
19
|
+
open: string | null;
|
|
20
|
+
/** The card the visitor opened, to take focus back to on the way out. */
|
|
21
|
+
returnTo: string | null;
|
|
22
|
+
/** Set by a host that keeps the open cookbook in its address. */
|
|
23
|
+
navigator: CookbookNavigator | null;
|
|
24
|
+
/** Open a cookbook's detail in place of the grid. */
|
|
25
|
+
show(id: string): void;
|
|
26
|
+
/** Back to the grid. */
|
|
27
|
+
back(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Swap the view. A view transition crossfades the grid and the detail (the
|
|
30
|
+
* shell's helper: none under reduced motion, an instant swap). `transition:
|
|
31
|
+
* false` for a host whose own router already runs one, and for a page load.
|
|
32
|
+
*/
|
|
33
|
+
set(id: string | null, transition?: boolean): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
export declare const cookbookView: CookbookView;
|
|
36
|
+
/** The cookbook a query string opens (`?cookbook=`), when it is one of `ids`. */
|
|
37
|
+
export declare function cookbookFromSearch(search: string, ids: readonly string[]): string | null;
|
|
38
|
+
/** Set or drop `?cookbook=` in a query string, keeping every other parameter. */
|
|
39
|
+
export declare function withCookbook(query: string, id: string | null): string;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=view.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/library/view.svelte.ts"],"names":[],"mappings":"AAGA,wFAAwF;AACxF,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;GAGG;AACH,cAAM,YAAY;IAChB,+DAA+D;IAC/D,IAAI,gBAA+B;IACnC,yEAAyE;IACzE,QAAQ,gBAA+B;IACvC,iEAAiE;IACjE,SAAS,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAE3C,qDAAqD;IACrD,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMtB,wBAAwB;IACxB,IAAI,IAAI,IAAI;IAOZ;;;;OAIG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAW/D;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC;AAE/C,iFAAiF;AACjF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,MAAM,EAAE,GACrB,MAAM,GAAG,IAAI,CAGf;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMrE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { tick } from 'svelte';
|
|
2
|
+
import { runViewTransition } from "../motion/view-transition.js";
|
|
3
|
+
/** The query parameter naming the open cookbook: `?tab=cookbooks&cookbook=mechanic`. */
|
|
4
|
+
export const COOKBOOK_PARAM = 'cookbook';
|
|
5
|
+
/**
|
|
6
|
+
* The Cookbooks tab's view: the grid, or one cookbook's detail in its place.
|
|
7
|
+
* A UI note like the active tab, never part of the cookbook document.
|
|
8
|
+
*/
|
|
9
|
+
class CookbookView {
|
|
10
|
+
/** The cookbook whose detail is shown; null shows the grid. */
|
|
11
|
+
open = $state(null);
|
|
12
|
+
/** The card the visitor opened, to take focus back to on the way out. */
|
|
13
|
+
returnTo = $state(null);
|
|
14
|
+
/** Set by a host that keeps the open cookbook in its address. */
|
|
15
|
+
navigator = null;
|
|
16
|
+
/** Open a cookbook's detail in place of the grid. */
|
|
17
|
+
show(id) {
|
|
18
|
+
this.returnTo = id;
|
|
19
|
+
if (this.navigator)
|
|
20
|
+
this.navigator.open(id);
|
|
21
|
+
else
|
|
22
|
+
void this.set(id);
|
|
23
|
+
}
|
|
24
|
+
/** Back to the grid. */
|
|
25
|
+
back() {
|
|
26
|
+
// A link that opened the detail came from no card: its own card it is.
|
|
27
|
+
if (this.open)
|
|
28
|
+
this.returnTo = this.open;
|
|
29
|
+
if (this.navigator)
|
|
30
|
+
this.navigator.close();
|
|
31
|
+
else
|
|
32
|
+
void this.set(null);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Swap the view. A view transition crossfades the grid and the detail (the
|
|
36
|
+
* shell's helper: none under reduced motion, an instant swap). `transition:
|
|
37
|
+
* false` for a host whose own router already runs one, and for a page load.
|
|
38
|
+
*/
|
|
39
|
+
async set(id, transition = true) {
|
|
40
|
+
if (this.open === id)
|
|
41
|
+
return;
|
|
42
|
+
if (!transition) {
|
|
43
|
+
this.open = id;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
await runViewTransition(async () => {
|
|
47
|
+
this.open = id;
|
|
48
|
+
await tick();
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export const cookbookView = new CookbookView();
|
|
53
|
+
/** The cookbook a query string opens (`?cookbook=`), when it is one of `ids`. */
|
|
54
|
+
export function cookbookFromSearch(search, ids) {
|
|
55
|
+
const id = new URLSearchParams(search).get(COOKBOOK_PARAM);
|
|
56
|
+
return id && ids.includes(id) ? id : null;
|
|
57
|
+
}
|
|
58
|
+
/** Set or drop `?cookbook=` in a query string, keeping every other parameter. */
|
|
59
|
+
export function withCookbook(query, id) {
|
|
60
|
+
const params = new URLSearchParams(query);
|
|
61
|
+
if (id)
|
|
62
|
+
params.set(COOKBOOK_PARAM, id);
|
|
63
|
+
else
|
|
64
|
+
params.delete(COOKBOOK_PARAM);
|
|
65
|
+
const out = params.toString().replace(/%2C/gi, ',');
|
|
66
|
+
return out ? `?${out}` : '';
|
|
67
|
+
}
|
|
@@ -25,8 +25,10 @@ import ThemeBridge from '../components/ThemeBridge.svelte';
|
|
|
25
25
|
import { cookbookStore, SHELL_STORAGE_KEY } from '../cookbook/store.svelte.js';
|
|
26
26
|
import type { Cookbook } from '../cookbook/types.js';
|
|
27
27
|
import { provideDataSource, tryUseDataSource } from '../data/context.js';
|
|
28
|
+
import { humanize, navNoun, pluralize } from '../data/format.js';
|
|
28
29
|
import { createPlannerDataSource } from '../data/planner-source.js';
|
|
29
30
|
import { activeForms } from '../forms/active.js';
|
|
31
|
+
import { cookbookView } from '../library/view.svelte.js';
|
|
30
32
|
import { runViewTransition } from '../motion/view-transition.js';
|
|
31
33
|
import { plannerLoaders, resolveRecipeExport } from '../overviews/registry.js';
|
|
32
34
|
import {
|
|
@@ -35,7 +37,8 @@ import {
|
|
|
35
37
|
recipes,
|
|
36
38
|
recipesById,
|
|
37
39
|
} from '../recipes/index.js';
|
|
38
|
-
import { pageScope, scopePreset } from '../recipes/scope.js';
|
|
40
|
+
import { menuEntryWords, pageScope, scopePreset } from '../recipes/scope.js';
|
|
41
|
+
import { navItemId } from '../recipes/sections.js';
|
|
39
42
|
import { recipeState } from '../recipes/state.svelte.js';
|
|
40
43
|
import { entryIndex } from '../sections/entries.js';
|
|
41
44
|
import { sectionInfo, sectionTitle } from '../sections/info.js';
|
|
@@ -44,6 +47,7 @@ import { DEFAULT_PRESET } from '../theme/theme.js';
|
|
|
44
47
|
import { appHref, setBasePath } from './app.svelte.js';
|
|
45
48
|
import { PLANNER_TAB_IDS } from './commands/index.js';
|
|
46
49
|
import { CHEF_HAT_ICON, EXPORT_ICON } from './header-icons.js';
|
|
50
|
+
import { plannerRuntime } from './instance.js';
|
|
47
51
|
import PlannerControls from './PlannerControls.svelte';
|
|
48
52
|
import PlannerLifecycle from './PlannerLifecycle.svelte';
|
|
49
53
|
import { parseModelRoute, recordFilter, splitRoute } from './routes.js';
|
|
@@ -211,6 +215,34 @@ const scope = $derived.by(() => {
|
|
|
211
215
|
);
|
|
212
216
|
});
|
|
213
217
|
const preset = $derived(scopePreset(scope));
|
|
218
|
+
// The list's heading and New noun follow its menu entry, as the static app's.
|
|
219
|
+
const entryWords = $derived.by(() => {
|
|
220
|
+
if (!model || !modelRoute) return {};
|
|
221
|
+
return menuEntryWords(
|
|
222
|
+
model,
|
|
223
|
+
navItemId(modelRoute.packageId, modelRoute.modelName, modelRoute.view),
|
|
224
|
+
modelRoute.view,
|
|
225
|
+
recipeState.ids.flatMap((id) => {
|
|
226
|
+
const recipe = recipes.find((r) => r.id === id);
|
|
227
|
+
return recipe ? recipeNav(recipe) : [];
|
|
228
|
+
}),
|
|
229
|
+
cookbookStore.layout,
|
|
230
|
+
humanize,
|
|
231
|
+
);
|
|
232
|
+
});
|
|
233
|
+
// The document title for every route a section page does not title itself
|
|
234
|
+
// (`CookbookSectionPage` sets its own): set as the route changes, so the
|
|
235
|
+
// previous page's title never lingers.
|
|
236
|
+
const pageTitle = $derived.by(() => {
|
|
237
|
+
if (model) return entryWords.label ?? pluralize(humanize(model.name));
|
|
238
|
+
if (packageId) return humanize(packageId);
|
|
239
|
+
if (pathParts[0] === 'advanced-styles') return 'Advanced styles';
|
|
240
|
+
if (pathParts[0] === 'ai') return 'AI models';
|
|
241
|
+
return title;
|
|
242
|
+
});
|
|
243
|
+
const listNoun = $derived(
|
|
244
|
+
entryWords.label ? navNoun(entryWords.label, entryWords.noun) : undefined,
|
|
245
|
+
);
|
|
214
246
|
// The planner's own pages (`#/configure/`, and any route no page above
|
|
215
247
|
// claims) show the customization controls; the header marks them current.
|
|
216
248
|
const configuring = $derived(
|
|
@@ -230,6 +262,47 @@ const routeTab = $derived(
|
|
|
230
262
|
$effect(() => {
|
|
231
263
|
if (routeTab) plannerTab.active = routeTab;
|
|
232
264
|
});
|
|
265
|
+
// `#/configure/cookbooks/<id>/` opens that cookbook's detail on the Cookbooks
|
|
266
|
+
// tab; the hash router's own view transition is the swap, so none here.
|
|
267
|
+
// Opening one pushes the route, so browser Back returns to the grid.
|
|
268
|
+
// Any other configure route (`#/configure/`, where the header's Planner link
|
|
269
|
+
// and an empty app land, or another tab's) is the grid.
|
|
270
|
+
const routeCookbook = $derived(
|
|
271
|
+
pathParts[0] === 'configure'
|
|
272
|
+
? pathParts[1] === 'cookbooks'
|
|
273
|
+
? (pathParts[2] ?? null)
|
|
274
|
+
: null
|
|
275
|
+
: undefined,
|
|
276
|
+
);
|
|
277
|
+
$effect(() => {
|
|
278
|
+
if (routeCookbook !== undefined) void cookbookView.set(routeCookbook, false);
|
|
279
|
+
});
|
|
280
|
+
let openedHere = false;
|
|
281
|
+
onMount(() => {
|
|
282
|
+
// The controller's `focus` (the assistant's "take me to it") opens a
|
|
283
|
+
// section through this, as the static layout's does with its router.
|
|
284
|
+
const previousOpen = plannerRuntime.openSection;
|
|
285
|
+
plannerRuntime.openSection = (id) => {
|
|
286
|
+
location.hash = `#${shell.sectionPath(id)}`;
|
|
287
|
+
};
|
|
288
|
+
const previous = cookbookView.navigator;
|
|
289
|
+
cookbookView.navigator = {
|
|
290
|
+
open(id) {
|
|
291
|
+
openedHere = true;
|
|
292
|
+
location.hash = `#/configure/cookbooks/${encodeURIComponent(id)}/`;
|
|
293
|
+
},
|
|
294
|
+
close() {
|
|
295
|
+
if (openedHere) {
|
|
296
|
+
openedHere = false;
|
|
297
|
+
history.back();
|
|
298
|
+
} else location.replace('#/configure/cookbooks/');
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
return () => {
|
|
302
|
+
cookbookView.navigator = previous;
|
|
303
|
+
plannerRuntime.openSection = previousOpen;
|
|
304
|
+
};
|
|
305
|
+
});
|
|
233
306
|
const exporting = $derived(configuring && plannerTab.active === 'export');
|
|
234
307
|
/** The mount's own way around: a fragment route. */
|
|
235
308
|
const navigate = (path: string) => {
|
|
@@ -335,6 +408,10 @@ const dockToggles = $derived(
|
|
|
335
408
|
(`CookbookSectionPage`, drawn `plain` with the planner's heading) to the
|
|
336
409
|
sample data; `loaders.shortcuts` adds the record counts.
|
|
337
410
|
-->
|
|
411
|
+
<svelte:head>
|
|
412
|
+
{#if !sectionSlug}<title>{pageTitle}</title>{/if}
|
|
413
|
+
</svelte:head>
|
|
414
|
+
|
|
338
415
|
<CookbookApp
|
|
339
416
|
cookbook={cookbook as ComponentProps<typeof CookbookApp>['cookbook']}
|
|
340
417
|
catalog={shellCatalog}
|
|
@@ -385,7 +462,7 @@ const dockToggles = $derived(
|
|
|
385
462
|
/>
|
|
386
463
|
{/key}
|
|
387
464
|
{:else if applied && model}
|
|
388
|
-
<ModelWorkspace model={applied.model} fields={applied.fields} {forms} {scope} {preset} href={hashHref} />
|
|
465
|
+
<ModelWorkspace model={applied.model} fields={applied.fields} {forms} {scope} {preset} title={entryWords.heading} noun={listNoun} href={hashHref} />
|
|
389
466
|
{:else}
|
|
390
467
|
<PlannerControls {controller} {basePath} {inference} {persistence} {themeControls} {tabs} managedByParent layout="shell" advancedStylesHref="#/advanced-styles/" />
|
|
391
468
|
{/if}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Planner.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/planner/Planner.svelte.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Planner.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/planner/Planner.svelte.ts"],"names":[],"mappings":"AA2DA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAwZ/C,QAAA,MAAM,OAAO,kDAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
useShellLayout,
|
|
7
7
|
} from '@happyvertical/smrt-svelte/workspace';
|
|
8
8
|
import { Tabs } from '@happyvertical/smrt-ui';
|
|
9
|
-
import { onMount, untrack } from 'svelte';
|
|
9
|
+
import { onMount, tick, untrack } from 'svelte';
|
|
10
10
|
import CookbooksPanel from '../components/CookbooksPanel.svelte';
|
|
11
11
|
import ExportPanel from '../components/ExportPanel.svelte';
|
|
12
12
|
import FeaturesPanel from '../components/FeaturesPanel.svelte';
|
|
@@ -125,6 +125,25 @@ onMount(() => {
|
|
|
125
125
|
});
|
|
126
126
|
return stop;
|
|
127
127
|
});
|
|
128
|
+
// A tab opened while the page is scrolled down (from the header's links, the
|
|
129
|
+
// palette, a focus command, or a long Recipes list) would show the new panel
|
|
130
|
+
// at the old offset, with the tab strip out of sight. Bring the strip back
|
|
131
|
+
// into view on a change; nothing moves when it is already visible.
|
|
132
|
+
let root = $state<HTMLElement | null>(null);
|
|
133
|
+
let shownTab: string | undefined;
|
|
134
|
+
$effect(() => {
|
|
135
|
+
const tab = active;
|
|
136
|
+
if (shownTab === undefined || shownTab === tab) {
|
|
137
|
+
shownTab = tab;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
shownTab = tab;
|
|
141
|
+
void tick().then(() => {
|
|
142
|
+
root
|
|
143
|
+
?.querySelector<HTMLElement>('[role="tablist"]')
|
|
144
|
+
?.scrollIntoView({ block: 'nearest' });
|
|
145
|
+
});
|
|
146
|
+
});
|
|
128
147
|
$effect(() => {
|
|
129
148
|
const tab = plannerTab.active;
|
|
130
149
|
untrack(() => {
|
|
@@ -140,7 +159,7 @@ $effect(() => {
|
|
|
140
159
|
{/if}
|
|
141
160
|
|
|
142
161
|
{#snippet view()}
|
|
143
|
-
<div class="planner">
|
|
162
|
+
<div class="planner" bind:this={root}>
|
|
144
163
|
<Tabs tabs={items} {active} onchange={select} aria-label="Planner">
|
|
145
164
|
{#if reachable.includes('cookbooks')}
|
|
146
165
|
<div hidden={active !== 'cookbooks'}><CookbooksPanel /></div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlannerControls.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/planner/PlannerControls.svelte.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;;GAIG;AACH,UAAU,oBAAqB,SAAQ,YAAY;IACjD;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"PlannerControls.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/planner/PlannerControls.svelte.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;;GAIG;AACH,UAAU,oBAAqB,SAAQ,YAAY;IACjD;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA4LD,QAAA,MAAM,eAAe,0DAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../src/lib/planner/assistant.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,SAAS,EAEf,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"assistant.d.ts","sourceRoot":"","sources":["../../src/lib/planner/assistant.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,SAAS,EAEf,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC;IAC3C,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG;IACrD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAE7E,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,SAAS,EAAE,yBAAyB,CAAC;IACrC,4EAA4E;IAC5E,UAAU,EAAE,UAAU,CAAC;IACvB,uBAAuB;IACvB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9B,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyFD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,iBAAiB,EAC7B,SAAS,EAAE,gBAAgB,GAC1B,gBAAgB,CAyDlB"}
|
|
@@ -5,6 +5,7 @@ import { savedByoChat } from "../inference/byo.svelte.js";
|
|
|
5
5
|
import { configFromProp } from "../inference/config.js";
|
|
6
6
|
import { createHostChat } from "../inference/host.js";
|
|
7
7
|
import { recipes } from "../recipes/index.js";
|
|
8
|
+
import { plannerController, plannerRuntime } from "./instance.js";
|
|
8
9
|
/** The controller's recipes as the store the assistant reads. Changes are commands. */
|
|
9
10
|
function recipeStoreOf(controller) {
|
|
10
11
|
return {
|
|
@@ -135,6 +136,14 @@ export function createPlannerAssistant(controller, inference) {
|
|
|
135
136
|
themeUndos,
|
|
136
137
|
controller,
|
|
137
138
|
onReply: inference.onReply,
|
|
139
|
+
// Navigation goes through the app's own controller only (its `focus`
|
|
140
|
+
// reaches `plannerRuntime.openSection`); a host's controller may not.
|
|
141
|
+
menu: () => controller === plannerController && plannerRuntime.openSection
|
|
142
|
+
? controller
|
|
143
|
+
.snapshot()
|
|
144
|
+
.sections.filter((section) => !section.hidden)
|
|
145
|
+
.map(({ id, label }) => ({ id, label }))
|
|
146
|
+
: [],
|
|
138
147
|
});
|
|
139
148
|
return { transport, themeUndos, mode, ...(notice ? { notice } : {}) };
|
|
140
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/lib/planner/commands/adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/lib/planner/commands/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,aAAa,EAElB,KAAK,WAAW,EAEjB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAe,QAAQ,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACL,KAAK,WAAW,EAGhB,KAAK,aAAa,EAElB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AAmBpB,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,YAAY,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;IAChC,oEAAoE;IACpE,UAAU,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,uEAAuE;IACvE,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,IAAI,CAAC,IAAI,OAAO,CAAC;IACjB,+EAA+E;IAC/E,OAAO,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC;IAC1B,sEAAsE;IACtE,KAAK,CAAC,CACJ,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE;QACN,qEAAqE;QACrE,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;QAC5B;;;;WAIG;QACH,QAAQ,EAAE,OAAO,CAAC;QAClB,uEAAuE;QACvE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,2EAA2E;QAC3E,cAAc,EAAE,OAAO,CAAC;KACzB,GACA,IAAI,CAAC;IACR,+EAA+E;IAC/E,aAAa,CAAC,CAAC,QAAQ,EAAE,OAAO,GAAG,cAAc,CAAC;CACnD;AAED,wEAAwE;AACxE,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,GAAG,IAAI,CAAC,CAAC;IACT,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACrB;AAED,oBAAoB;AACpB,wBAAgB,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAQ3C;AAED,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChC,mFAAmF;IACnF,KAAK,CAAC,EAAE;QAAE,KAAK,IAAI,IAAI,CAAC;QAAC,IAAI,IAAI,IAAI,CAAA;KAAE,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IAClE,2EAA2E;IAC3E,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC;IAC3D;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC;IACnC,+CAA+C;IAC/C,QAAQ,IAAI,YAAY,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACnE;AAED,qEAAqE;AACrE,MAAM,WAAW,cAAe,SAAQ,iBAAiB;IACvD,uCAAuC;IACvC,QAAQ,IAAI,QAAQ,CAAC;IACrB,4EAA4E;IAC5E,IAAI,IAAI,aAAa,CAAC;IACtB,sDAAsD;IACtD,KAAK,IAAI,WAAW,CAAC;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;IAC5C,wCAAwC;IACxC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IAChD;;;OAGG;IACH,OAAO,IAAI,MAAM,CAAC;IAClB,gFAAgF;IAChF,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,aAAa,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB;AA4BD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,qBAAqB,GAC5B,cAAc,CAipBhB"}
|
|
@@ -411,19 +411,26 @@ export function createPlannerAdapter(config) {
|
|
|
411
411
|
/**
|
|
412
412
|
* Applying a library cookbook that sets no theme keeps the person's own look
|
|
413
413
|
* (as the Cookbooks tab does): the preset, brand colour, colour scheme,
|
|
414
|
-
* corner radius, density and contrast (the font is not carried).
|
|
415
|
-
* the
|
|
414
|
+
* corner radius, density and contrast (the font is not carried). One that
|
|
415
|
+
* sets a theme without a colour scheme keeps the person's light or dark.
|
|
416
|
+
* Returns the patch.
|
|
416
417
|
*/
|
|
417
418
|
function themeToKeep(raw) {
|
|
418
419
|
const input = raw.input;
|
|
419
420
|
if (raw.name !== 'apply_cookbook' || !isObject(input))
|
|
420
421
|
return undefined;
|
|
421
422
|
const book = catalog.cookbooks?.find((c) => c.id === input.id);
|
|
422
|
-
if (!book
|
|
423
|
+
if (!book)
|
|
423
424
|
return undefined;
|
|
424
425
|
const theme = engine.cookbook().theme;
|
|
425
426
|
if (!theme)
|
|
426
427
|
return undefined;
|
|
428
|
+
const own = book.document.theme;
|
|
429
|
+
if (own) {
|
|
430
|
+
return own.colorScheme || !theme.colorScheme
|
|
431
|
+
? undefined
|
|
432
|
+
: { colorScheme: theme.colorScheme };
|
|
433
|
+
}
|
|
427
434
|
const patch = {};
|
|
428
435
|
if (theme.preset)
|
|
429
436
|
patch.preset = theme.preset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/planner/commands/controller.svelte.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"controller.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/planner/commands/controller.svelte.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAItB,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAatB,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,WAAW,CAmB/D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,GAAE,aAA6B,EACpC,OAAO,GAAE,wBAA6B,GACrC,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,CA4BzE"}
|
|
@@ -2,6 +2,7 @@ import { untrack } from 'svelte';
|
|
|
2
2
|
import { cookbookStore, } from "../../cookbook/store.svelte.js";
|
|
3
3
|
import { parseCookbook } from "../../cookbook/validate.js";
|
|
4
4
|
import { setSamplePack } from "../../data/packs.js";
|
|
5
|
+
import { workFingerprint } from "../../library/document.js";
|
|
5
6
|
import { libraryState } from "../../library/state.svelte.js";
|
|
6
7
|
import { createPlannerAdapter, } from "./adapter.js";
|
|
7
8
|
import { engineCatalog } from "./catalog.js";
|
|
@@ -32,7 +33,7 @@ export function portFromStore(store) {
|
|
|
32
33
|
else
|
|
33
34
|
store.apply(next);
|
|
34
35
|
if (libraryApplied && applied) {
|
|
35
|
-
libraryState.select(applied);
|
|
36
|
+
libraryState.select(applied, workFingerprint(store.snapshot()));
|
|
36
37
|
setSamplePack(applied);
|
|
37
38
|
}
|
|
38
39
|
},
|
package/dist/recipes/scope.d.ts
CHANGED
|
@@ -22,5 +22,28 @@ export declare function pageScope(modelId: string, view: string | undefined, add
|
|
|
22
22
|
export declare function inScope(scope: RowScope | undefined, row: Record<string, unknown>): boolean;
|
|
23
23
|
/** Values a row created from the page carries, so it stays in view. */
|
|
24
24
|
export declare function scopePreset(scope: RowScope | undefined): Record<string, unknown>;
|
|
25
|
+
/**
|
|
26
|
+
* A model page's menu words: the label its menu entry shows (the layout's
|
|
27
|
+
* rename, a cookbook's or the visitor's, else the added recipe entry's own)
|
|
28
|
+
* and its declared New noun. `heading` is that label unless it only repeats
|
|
29
|
+
* the model's name. The static app reads the rendered menu (`ModelPage`); the
|
|
30
|
+
* mount, outside the shell's context, reads the same sources here.
|
|
31
|
+
*/
|
|
32
|
+
export declare function menuEntryWords(model: {
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
}, itemId: string, view: string | undefined, added: readonly (Pick<RecipeNavTarget, 'key' | 'label' | 'noun'> & {
|
|
36
|
+
model: {
|
|
37
|
+
id: string;
|
|
38
|
+
};
|
|
39
|
+
})[], layout: {
|
|
40
|
+
items?: Record<string, {
|
|
41
|
+
label?: string;
|
|
42
|
+
} | undefined>;
|
|
43
|
+
} | undefined, humanize: (name: string) => string): {
|
|
44
|
+
label?: string;
|
|
45
|
+
heading?: string;
|
|
46
|
+
noun?: string;
|
|
47
|
+
};
|
|
25
48
|
export {};
|
|
26
49
|
//# sourceMappingURL=scope.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/lib/recipes/scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,KAAK,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG;IAC3D,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,SAAS,WAAW,EAAE,GAC5B,QAAQ,GAAG,SAAS,CAatB;AAED,wBAAgB,OAAO,CACrB,KAAK,EAAE,QAAQ,GAAG,SAAS,EAC3B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAKT;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,GAAG,SAAS,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB"}
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/lib/recipes/scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,KAAK,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG;IAC3D,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,SAAS,WAAW,EAAE,GAC5B,QAAQ,GAAG,SAAS,CAatB;AAED,wBAAgB,OAAO,CACrB,KAAK,EAAE,QAAQ,GAAG,SAAS,EAC3B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAKT;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CACzB,KAAK,EAAE,QAAQ,GAAG,SAAS,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG;IACjE,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACvB,CAAC,EAAE,EACJ,MAAM,EACF;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;CAAE,GAC1D,SAAS,EACb,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACjC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAYrD"}
|
package/dist/recipes/scope.js
CHANGED
|
@@ -29,3 +29,23 @@ export function inScope(scope, row) {
|
|
|
29
29
|
export function scopePreset(scope) {
|
|
30
30
|
return scope?.equals !== undefined ? { [scope.field]: scope.equals } : {};
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* A model page's menu words: the label its menu entry shows (the layout's
|
|
34
|
+
* rename, a cookbook's or the visitor's, else the added recipe entry's own)
|
|
35
|
+
* and its declared New noun. `heading` is that label unless it only repeats
|
|
36
|
+
* the model's name. The static app reads the rendered menu (`ModelPage`); the
|
|
37
|
+
* mount, outside the shell's context, reads the same sources here.
|
|
38
|
+
*/
|
|
39
|
+
export function menuEntryWords(model, itemId, view, added, layout, humanize) {
|
|
40
|
+
const entry = added.find((e) => e.model.id === model.id && e.key === view);
|
|
41
|
+
const label = layout?.items?.[itemId]?.label?.trim() || entry?.label;
|
|
42
|
+
if (!label)
|
|
43
|
+
return {};
|
|
44
|
+
return {
|
|
45
|
+
label,
|
|
46
|
+
heading: label.toLowerCase() === humanize(model.name).toLowerCase()
|
|
47
|
+
? undefined
|
|
48
|
+
: label,
|
|
49
|
+
...(entry?.noun ? { noun: entry.noun } : {}),
|
|
50
|
+
};
|
|
51
|
+
}
|
package/dist/smrt-version.d.ts
CHANGED
package/dist/smrt-version.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Generated by scripts/write-smrt-version.ts from the installed
|
|
2
2
|
// @happyvertical/smrt-core; do not edit. `pnpm version:smrt` refreshes it.
|
|
3
3
|
/** The released smrt line the planner is built against (the `smrt` CLI version its commands name). */
|
|
4
|
-
export const SMRT_VERSION = '0.57.
|
|
4
|
+
export const SMRT_VERSION = '0.57.5';
|