@happyvertical/smrt-planner 0.0.1 → 0.0.2
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/app/404.html +12 -12
- package/app/_app/immutable/chunks/2jFBkS1C.js +1 -0
- package/app/_app/immutable/chunks/6P9zxrzU.js +1 -0
- package/app/_app/immutable/chunks/{DyGfbRG-.js → BnRri03M.js} +1 -1
- package/app/_app/immutable/chunks/Ci0DUht6.js +34 -0
- package/app/_app/immutable/chunks/{CV-2zt0K.js → CsprTb3f.js} +2 -2
- package/app/_app/immutable/chunks/{D333l2GL.js → DkR8_Ws6.js} +1 -1
- package/app/_app/immutable/chunks/{DJtH-lRi.js → Xp1g1t4n.js} +1 -1
- package/app/_app/immutable/entry/{app.D5JJain6.js → app.IZIJXhgq.js} +2 -2
- package/app/_app/immutable/entry/start.BuaYHD1N.js +1 -0
- package/app/_app/immutable/nodes/{0.CL1MxOva.js → 0.m_U8WC7E.js} +3 -3
- package/app/_app/immutable/nodes/{1.BO731RRg.js → 1.Crw8ULhB.js} +1 -1
- package/app/_app/immutable/nodes/{12.BmZyLHbM.js → 12.BIocA1aI.js} +1 -1
- package/app/_app/immutable/nodes/{2.BEw046av.js → 2.CR5BwGnt.js} +2 -2
- package/app/_app/immutable/nodes/{3.DvwpTAQA.js → 3.1B56hgAG.js} +1 -1
- package/app/_app/immutable/nodes/{4.qrT4bnmS.js → 4.SSIC7sUh.js} +1 -1
- package/app/_app/immutable/nodes/{5.DDLa2uhV.js → 5.DgdwleDQ.js} +1 -1
- package/app/_app/immutable/nodes/{6.DN0QTY6z.js → 6.DmD9rqLU.js} +1 -1
- package/app/_app/immutable/nodes/{7.C_8N82Wq.js → 7.DdngsBmo.js} +1 -1
- package/app/_app/version.json +1 -1
- package/app/ai/index.html +14 -14
- package/app/blueprint/index.html +13 -13
- package/app/cookbook/index.html +13 -13
- package/app/index.html +13 -13
- package/app/m/ads/AdDeliveryTier/index.html +14 -14
- package/app/m/ads/AdEvent/index.html +14 -14
- package/app/m/ads/AdFormat/index.html +14 -14
- package/app/m/ads/AdGroup/index.html +14 -14
- package/app/m/ads/AdVariation/index.html +14 -14
- package/app/m/analytics/AnalyticsDataStream/index.html +14 -14
- package/app/m/analytics/AnalyticsEvent/index.html +14 -14
- package/app/m/analytics/AnalyticsProperty/index.html +14 -14
- package/app/m/analytics/AnalyticsReport/index.html +14 -14
- package/app/m/approvals/ApprovalEvent/index.html +14 -14
- package/app/m/approvals/ApprovalPolicy/index.html +14 -14
- package/app/m/approvals/ApprovalRequest/index.html +14 -14
- package/app/m/assets/Asset/index.html +14 -14
- package/app/m/assets/AssetAssociation/index.html +14 -14
- package/app/m/assets/AssetMetafield/index.html +14 -14
- package/app/m/assets/AssetStatus/index.html +14 -14
- package/app/m/assets/AssetType/index.html +14 -14
- package/app/m/assets/Folder/index.html +14 -14
- package/app/m/chat/AgentSession/index.html +14 -14
- package/app/m/chat/ChatMessage/index.html +14 -14
- package/app/m/chat/ChatParticipant/index.html +14 -14
- package/app/m/chat/ChatReaction/index.html +14 -14
- package/app/m/chat/ChatRoom/index.html +14 -14
- package/app/m/chat/ChatThread/index.html +14 -14
- package/app/m/chat/VoiceGatewayTurn/index.html +14 -14
- package/app/m/chat/VoiceSession/index.html +14 -14
- package/app/m/commerce/Agreement/index.html +14 -14
- package/app/m/commerce/Cart/index.html +14 -14
- package/app/m/commerce/Contract/index.html +14 -14
- package/app/m/commerce/ContractLineItem/index.html +14 -14
- package/app/m/commerce/Customer/index.html +14 -14
- package/app/m/commerce/Estimate/index.html +14 -14
- package/app/m/commerce/Fulfillment/index.html +14 -14
- package/app/m/commerce/FulfillmentLineItem/index.html +14 -14
- package/app/m/commerce/Invoice/index.html +14 -14
- package/app/m/commerce/InvoiceLineItem/index.html +14 -14
- package/app/m/commerce/Lease/index.html +14 -14
- package/app/m/commerce/LicenseSale/index.html +14 -14
- package/app/m/commerce/Order/index.html +14 -14
- package/app/m/commerce/Payment/index.html +14 -14
- package/app/m/commerce/PaymentAllocation/index.html +14 -14
- package/app/m/commerce/PaymentInstrument/index.html +14 -14
- package/app/m/commerce/PaymentIntent/index.html +14 -14
- package/app/m/commerce/Payout/index.html +14 -14
- package/app/m/commerce/ProductionOrder/index.html +14 -14
- package/app/m/commerce/PurchaseOrder/index.html +14 -14
- package/app/m/commerce/Vendor/index.html +14 -14
- package/app/m/commerce/WholesaleOrder/index.html +14 -14
- package/app/m/content/Content/index.html +14 -14
- package/app/m/content/ContentContribution/index.html +14 -14
- package/app/m/content/ContentContributionAttachment/index.html +14 -14
- package/app/m/content/ContentContributionRevision/index.html +14 -14
- package/app/m/content/ContentContributionType/index.html +14 -14
- package/app/m/content/ContentContributor/index.html +14 -14
- package/app/m/content/ContentCorrection/index.html +14 -14
- package/app/m/content/ContentFeedSource/index.html +14 -14
- package/app/m/content/ContentGovernanceAssignment/index.html +14 -14
- package/app/m/content/ContentGovernancePolicy/index.html +14 -14
- package/app/m/content/ContentGovernanceProfile/index.html +14 -14
- package/app/m/content/ContentReference/index.html +14 -14
- package/app/m/content/ContentReview/index.html +14 -14
- package/app/m/content/ContentVersion/index.html +14 -14
- package/app/m/content/Contents/index.html +14 -14
- package/app/m/events/Event/index.html +14 -14
- package/app/m/events/EventParticipant/index.html +14 -14
- package/app/m/events/EventSeries/index.html +14 -14
- package/app/m/events/EventType/index.html +14 -14
- package/app/m/facts/Fact/index.html +14 -14
- package/app/m/facts/FactContent/index.html +14 -14
- package/app/m/facts/FactEvidence/index.html +14 -14
- package/app/m/facts/FactSource/index.html +14 -14
- package/app/m/facts/FactSubject/index.html +14 -14
- package/app/m/facts/FactTag/index.html +14 -14
- package/app/m/fields/FieldPolicy/index.html +14 -14
- package/app/m/fields/FieldPolicySuggestion/index.html +14 -14
- package/app/m/fields/FieldUsageCounter/index.html +14 -14
- package/app/m/images/Image/index.html +14 -14
- package/app/m/inventory/InventoryLocation/index.html +14 -14
- package/app/m/inventory/StockLevel/index.html +14 -14
- package/app/m/inventory/StockMovement/index.html +14 -14
- package/app/m/ledgers/Account/index.html +14 -14
- package/app/m/ledgers/Journal/index.html +14 -14
- package/app/m/ledgers/JournalEntry/index.html +14 -14
- package/app/m/manufacturing/Assembly/index.html +14 -14
- package/app/m/manufacturing/BillOfMaterials/index.html +14 -14
- package/app/m/manufacturing/BomLine/index.html +14 -14
- package/app/m/manufacturing/Operation/index.html +14 -14
- package/app/m/manufacturing/ProductionRun/index.html +14 -14
- package/app/m/manufacturing/ProductionRunCompletion/index.html +14 -14
- package/app/m/manufacturing/RoutingStep/index.html +14 -14
- package/app/m/marketing/Campaign/index.html +14 -14
- package/app/m/marketing/CampaignChannel/index.html +14 -14
- package/app/m/marketing/CampaignMetricSnapshot/index.html +14 -14
- package/app/m/messages/Account/index.html +14 -14
- package/app/m/messages/Attachment/index.html +14 -14
- package/app/m/messages/Blacklist/index.html +14 -14
- package/app/m/messages/Email/failed-sends/index.html +14 -14
- package/app/m/messages/Email/index.html +14 -14
- package/app/m/messages/Email/mailbox/index.html +14 -14
- package/app/m/messages/EmailAccount/index.html +14 -14
- package/app/m/messages/EmailFolder/index.html +14 -14
- package/app/m/messages/Message/index.html +14 -14
- package/app/m/messages/MessagingEndpoint/index.html +14 -14
- package/app/m/messages/PersonaMessageRoute/index.html +14 -14
- package/app/m/messages/SlackAccount/index.html +14 -14
- package/app/m/messages/SlackMessage/index.html +14 -14
- package/app/m/messages/TelegramAccount/index.html +14 -14
- package/app/m/messages/Tweet/index.html +14 -14
- package/app/m/messages/TwitterAccount/index.html +14 -14
- package/app/m/messages/Whitelist/index.html +14 -14
- package/app/m/messages/ZulipAccount/index.html +14 -14
- package/app/m/places/Place/index.html +14 -14
- package/app/m/places/PlaceType/index.html +14 -14
- package/app/m/preferences/UiPreferenceRecord/index.html +14 -14
- package/app/m/products/Category/index.html +14 -14
- package/app/m/products/Material/index.html +14 -14
- package/app/m/products/Product/index.html +14 -14
- package/app/m/products/Product/ingredients/index.html +14 -14
- package/app/m/products/ProductVariant/index.html +14 -14
- package/app/m/products/Sku/index.html +14 -14
- package/app/m/profiles/ApiKey/index.html +14 -14
- package/app/m/profiles/Bot/index.html +14 -14
- package/app/m/profiles/MagicLinkToken/index.html +14 -14
- package/app/m/profiles/NostrIdentity/index.html +14 -14
- package/app/m/profiles/OidcIdentity/index.html +14 -14
- package/app/m/profiles/Organization/index.html +14 -14
- package/app/m/profiles/Person/index.html +14 -14
- package/app/m/profiles/Profile/index.html +14 -14
- package/app/m/profiles/ProfileMetadata/index.html +14 -14
- package/app/m/profiles/ProfileMetafield/index.html +14 -14
- package/app/m/profiles/ProfileRelationship/index.html +14 -14
- package/app/m/profiles/ProfileRelationshipTerm/index.html +14 -14
- package/app/m/profiles/ProfileRelationshipType/index.html +14 -14
- package/app/m/profiles/ProfileType/index.html +14 -14
- package/app/m/projects/Comment/index.html +14 -14
- package/app/m/projects/Issue/index.html +14 -14
- package/app/m/projects/Label/index.html +14 -14
- package/app/m/projects/Project/index.html +14 -14
- package/app/m/projects/ProjectIntegration/index.html +14 -14
- package/app/m/projects/PullRequest/index.html +14 -14
- package/app/m/projects/Repository/index.html +14 -14
- package/app/m/properties/Property/index.html +14 -14
- package/app/m/properties/Zone/index.html +14 -14
- package/app/m/reports/RuntimeReport/index.html +14 -14
- package/app/m/reports/SmrtPrincipalReportRefreshTask/index.html +14 -14
- package/app/m/reports/SmrtReportLock/index.html +14 -14
- package/app/m/reports/SmrtReportRefreshTask/index.html +14 -14
- package/app/m/reports/SmrtReportRun/index.html +14 -14
- package/app/m/reports/SmrtReportSchedule/index.html +14 -14
- package/app/m/reports/SmrtReportWatermark/index.html +14 -14
- package/app/m/sales/AttributionException/index.html +14 -14
- package/app/m/sales/AttributionPolicy/index.html +14 -14
- package/app/m/sales/Commission/index.html +14 -14
- package/app/m/sales/CommissionAdjustment/index.html +14 -14
- package/app/m/sales/CommissionPayout/index.html +14 -14
- package/app/m/sales/CommissionPlan/index.html +14 -14
- package/app/m/sales/Earner/index.html +14 -14
- package/app/m/sales/EarnerSourceAttribution/index.html +14 -14
- package/app/m/sales/EarningEvent/index.html +14 -14
- package/app/m/sales/ExecutedAgreement/index.html +14 -14
- package/app/m/sales/Lead/index.html +14 -14
- package/app/m/sales/Opportunity/index.html +14 -14
- package/app/m/sales/OpportunityConversion/index.html +14 -14
- package/app/m/sales/PipelineDefinition/index.html +14 -14
- package/app/m/sales/PipelineStage/index.html +14 -14
- package/app/m/sales/Referral/index.html +14 -14
- package/app/m/sales/ReferralAgreement/index.html +14 -14
- package/app/m/sales/ReferralLink/index.html +14 -14
- package/app/m/sales/ReferralProgram/index.html +14 -14
- package/app/m/sales/ReferralTermSnapshot/index.html +14 -14
- package/app/m/sales/ReferralTouch/index.html +14 -14
- package/app/m/sales/Referrer/index.html +14 -14
- package/app/m/sales/SalesActivity/index.html +14 -14
- package/app/m/sales/SalesRepresentative/index.html +14 -14
- package/app/m/sites/Site/index.html +14 -14
- package/app/m/sites/SiteAgentBinding/index.html +14 -14
- package/app/m/social/OAuthState/index.html +14 -14
- package/app/m/social/SocialAccount/index.html +14 -14
- package/app/m/social/SocialPost/index.html +14 -14
- package/app/m/social/SocialPostAnalyticsSnapshot/index.html +14 -14
- package/app/m/subscriptions/BillingAdjustment/index.html +14 -14
- package/app/m/subscriptions/ClientCharge/index.html +14 -14
- package/app/m/subscriptions/CreditGrant/index.html +14 -14
- package/app/m/subscriptions/PricingRule/index.html +14 -14
- package/app/m/subscriptions/RetailCharge/index.html +14 -14
- package/app/m/subscriptions/SpendingPolicy/index.html +14 -14
- package/app/m/subscriptions/SubscriptionPlan/index.html +14 -14
- package/app/m/subscriptions/TenantSubscription/index.html +14 -14
- package/app/m/subscriptions/TenantUsageMetric/index.html +14 -14
- package/app/m/support/ServiceTimeEntry/index.html +14 -14
- package/app/m/support/SupportAiRun/index.html +14 -14
- package/app/m/support/SupportAvailability/index.html +14 -14
- package/app/m/support/SupportCase/index.html +14 -14
- package/app/m/support/SupportCaseEvent/index.html +14 -14
- package/app/m/support/SupportChannelBinding/index.html +14 -14
- package/app/m/support/SupportCharge/index.html +14 -14
- package/app/m/support/SupportCompensation/index.html +14 -14
- package/app/m/support/SupportCompensationPlan/index.html +14 -14
- package/app/m/support/SupportEscalation/index.html +14 -14
- package/app/m/support/SupportInteraction/index.html +14 -14
- package/app/m/support/SupportPlan/index.html +14 -14
- package/app/m/support/SupportPolicy/index.html +14 -14
- package/app/m/support/SupportQualification/index.html +14 -14
- package/app/m/support/SupportServiceTarget/index.html +14 -14
- package/app/m/support/SupportSpecialist/index.html +14 -14
- package/app/m/support/SupportWorkLink/index.html +14 -14
- package/app/m/tags/Tag/index.html +14 -14
- package/app/m/tags/TagAlias/index.html +14 -14
- package/app/m/timesheets/AttendanceBreak/index.html +14 -14
- package/app/m/timesheets/AttendancePunch/index.html +14 -14
- package/app/m/timesheets/ServiceChargeSnapshot/index.html +14 -14
- package/app/m/timesheets/ServiceCompensationSnapshot/index.html +14 -14
- package/app/m/timesheets/ServiceTimeEntry/index.html +14 -14
- package/app/m/users/AccessRequest/index.html +14 -14
- package/app/m/users/Group/index.html +14 -14
- package/app/m/users/GroupMember/index.html +14 -14
- package/app/m/users/GroupRole/index.html +14 -14
- package/app/m/users/Membership/index.html +14 -14
- package/app/m/users/MembershipOverride/index.html +14 -14
- package/app/m/users/Permission/index.html +14 -14
- package/app/m/users/ResourceGrant/index.html +14 -14
- package/app/m/users/Role/index.html +14 -14
- package/app/m/users/RolePermission/index.html +14 -14
- package/app/m/users/Session/index.html +14 -14
- package/app/m/users/Tenant/index.html +14 -14
- package/app/m/users/TenantIntegration/index.html +14 -14
- package/app/m/users/TenantPermissionOverride/index.html +14 -14
- package/app/m/users/User/index.html +14 -14
- package/app/m/users/UsersCliAuthRequest/index.html +14 -14
- package/app/m/users/UsersMagicLinkToken/index.html +14 -14
- package/app/m/video/Character/index.html +14 -14
- package/app/m/video/CharacterAsset/index.html +14 -14
- package/app/m/video/CompositeJob/index.html +14 -14
- package/app/m/video/Performer/index.html +14 -14
- package/app/m/video/PerformerAsset/index.html +14 -14
- package/app/m/video/Scene/index.html +14 -14
- package/app/m/video/SceneAsset/index.html +14 -14
- package/app/m/video/VideoComposition/index.html +14 -14
- package/app/m/video/VideoCompositionAsset/index.html +14 -14
- package/app/m/video/VideoSequence/index.html +14 -14
- package/app/m/video/VideoSequenceAsset/index.html +14 -14
- package/app/m/video/VideoShot/index.html +14 -14
- package/app/m/video/VideoShotAsset/index.html +14 -14
- package/app/m/video/VideoShotCharacter/index.html +14 -14
- package/app/m/video/VideoWorkflow/index.html +14 -14
- package/app/m/voice/VoiceOutput/index.html +14 -14
- package/app/m/voice/VoiceProfile/index.html +14 -14
- package/app/m/voice/VoiceSample/index.html +14 -14
- package/app/packages/ads/index.html +12 -12
- package/app/packages/analytics/index.html +12 -12
- package/app/packages/approvals/index.html +12 -12
- package/app/packages/assets/index.html +12 -12
- package/app/packages/chat/index.html +12 -12
- package/app/packages/comments/index.html +12 -12
- package/app/packages/commerce/index.html +12 -12
- package/app/packages/content/index.html +12 -12
- package/app/packages/events/index.html +12 -12
- package/app/packages/expenses/index.html +12 -12
- package/app/packages/facts/index.html +12 -12
- package/app/packages/fields/index.html +12 -12
- package/app/packages/human-resources/index.html +12 -12
- package/app/packages/images/index.html +12 -12
- package/app/packages/index.html +12 -12
- package/app/packages/inventory/index.html +12 -12
- package/app/packages/ledgers/index.html +12 -12
- package/app/packages/manufacturing/index.html +12 -12
- package/app/packages/marketing/index.html +12 -12
- package/app/packages/messages/index.html +12 -12
- package/app/packages/places/index.html +12 -12
- package/app/packages/preferences/index.html +12 -12
- package/app/packages/products/index.html +12 -12
- package/app/packages/profiles/index.html +12 -12
- package/app/packages/projects/index.html +12 -12
- package/app/packages/properties/index.html +12 -12
- package/app/packages/reports/index.html +12 -12
- package/app/packages/sales/index.html +12 -12
- package/app/packages/sites/index.html +12 -12
- package/app/packages/social/index.html +12 -12
- package/app/packages/subscriptions/index.html +12 -12
- package/app/packages/support/index.html +12 -12
- package/app/packages/tags/index.html +12 -12
- package/app/packages/timesheets/index.html +12 -12
- package/app/packages/users/index.html +12 -12
- package/app/packages/video/index.html +12 -12
- package/app/packages/voice/index.html +12 -12
- package/app/recipes/account-access/help/index.html +12 -12
- package/app/recipes/account-access/index.html +12 -12
- package/app/recipes/activity/help/index.html +12 -12
- package/app/recipes/activity/index.html +12 -12
- package/app/recipes/agreements/help/index.html +12 -12
- package/app/recipes/agreements/index.html +12 -12
- package/app/recipes/analytics.reports/help/index.html +12 -12
- package/app/recipes/analytics.reports/index.html +12 -12
- package/app/recipes/assets/help/index.html +12 -12
- package/app/recipes/assets/index.html +12 -12
- package/app/recipes/billing/help/index.html +12 -12
- package/app/recipes/billing/index.html +12 -12
- package/app/recipes/chat.assistant/help/index.html +12 -12
- package/app/recipes/chat.assistant/index.html +12 -12
- package/app/recipes/comments/help/index.html +12 -12
- package/app/recipes/comments/index.html +12 -12
- package/app/recipes/commerce.customers/help/index.html +12 -12
- package/app/recipes/commerce.customers/index.html +12 -12
- package/app/recipes/commerce.estimates/help/index.html +12 -12
- package/app/recipes/commerce.estimates/index.html +12 -12
- package/app/recipes/commerce.purchases/help/index.html +12 -12
- package/app/recipes/commerce.purchases/index.html +12 -12
- package/app/recipes/commerce.sales/help/index.html +12 -12
- package/app/recipes/commerce.sales/index.html +12 -12
- package/app/recipes/commerce.vendors/help/index.html +12 -12
- package/app/recipes/commerce.vendors/index.html +12 -12
- package/app/recipes/commerce.wholesale/help/index.html +12 -12
- package/app/recipes/commerce.wholesale/index.html +12 -12
- package/app/recipes/events.calendar/help/index.html +12 -12
- package/app/recipes/events.calendar/index.html +12 -12
- package/app/recipes/fields.form-customization/help/index.html +12 -12
- package/app/recipes/fields.form-customization/index.html +12 -12
- package/app/recipes/inventory.stock/help/index.html +12 -12
- package/app/recipes/inventory.stock/index.html +12 -12
- package/app/recipes/ledgers.bookkeeping/help/index.html +12 -12
- package/app/recipes/ledgers.bookkeeping/index.html +12 -12
- package/app/recipes/messages/help/index.html +12 -12
- package/app/recipes/messages/index.html +12 -12
- package/app/recipes/products/help/index.html +12 -12
- package/app/recipes/products/index.html +12 -12
- package/app/recipes/projects.tracker/help/index.html +12 -12
- package/app/recipes/projects.tracker/index.html +12 -12
- package/app/recipes/reports.materialized/help/index.html +12 -12
- package/app/recipes/reports.materialized/index.html +12 -12
- package/app/recipes/sales.pipeline/help/index.html +12 -12
- package/app/recipes/sales.pipeline/index.html +12 -12
- package/app/recipes/tags.taxonomy/help/index.html +12 -12
- package/app/recipes/tags.taxonomy/index.html +12 -12
- package/app/recipes/team-collaboration/help/index.html +12 -12
- package/app/recipes/team-collaboration/index.html +12 -12
- package/app/s/custom-billing/index.html +13 -13
- package/app/s/custom-buying/index.html +13 -13
- package/app/s/custom-classes/index.html +13 -13
- package/app/s/custom-jobs/index.html +13 -13
- package/app/s/custom-kitchen/index.html +13 -13
- package/app/s/custom-material/index.html +13 -13
- package/app/s/custom-members/index.html +13 -13
- package/app/s/custom-parts/index.html +13 -13
- package/app/s/custom-schedule/index.html +13 -13
- package/app/s/custom-shop/index.html +13 -13
- package/app/s/custom-wholesale/index.html +13 -13
- package/app/s/section-access-control/index.html +13 -13
- package/app/s/section-account-security/index.html +13 -13
- package/app/s/section-accounting/index.html +13 -13
- package/app/s/section-activity/index.html +13 -13
- package/app/s/section-agreements/index.html +13 -13
- package/app/s/section-analytics/index.html +13 -13
- package/app/s/section-assets/index.html +13 -13
- package/app/s/section-billing/index.html +13 -13
- package/app/s/section-calendar/index.html +13 -13
- package/app/s/section-catalog/index.html +13 -13
- package/app/s/section-chat.assistant/index.html +13 -13
- package/app/s/section-comments/index.html +13 -13
- package/app/s/section-fields.form-customization/index.html +13 -13
- package/app/s/section-messages/index.html +13 -13
- package/app/s/section-more/index.html +13 -13
- package/app/s/section-operations/index.html +13 -13
- package/app/s/section-projects/index.html +13 -13
- package/app/s/section-purchasing/index.html +13 -13
- package/app/s/section-reports.materialized/index.html +13 -13
- package/app/s/section-sales/index.html +13 -13
- package/app/s/section-taxonomy/index.html +13 -13
- package/app/s/section-team/index.html +13 -13
- package/dist/ai/state.svelte.d.ts +9 -4
- package/dist/ai/state.svelte.js +46 -16
- package/dist/ai/status.js +8 -0
- package/dist/assistant/session.svelte.d.ts +1 -0
- package/dist/assistant/session.svelte.js +22 -4
- package/dist/components/AiSetup.svelte +31 -2
- package/dist/components/BrowserAssistant.svelte +12 -8
- package/dist/core/app.d.ts +33 -8
- package/dist/core/app.js +112 -8
- package/dist/index.d.ts +1 -1
- package/dist/inference/byo.svelte.d.ts +8 -4
- package/dist/inference/byo.svelte.js +36 -8
- package/dist/inference/config.d.ts +12 -5
- package/dist/inference/config.js +96 -40
- package/dist/inference/openai.js +5 -0
- package/dist/kitchen/client.js +10 -4
- package/dist/planner/assistant.js +1 -1
- package/package.json +2 -1
- package/app/_app/immutable/chunks/BYde9M_U.js +0 -1
- package/app/_app/immutable/chunks/OJ_lLTHH.js +0 -1
- package/app/_app/immutable/chunks/ufuM4XBq.js +0 -33
- package/app/_app/immutable/entry/start.CH9DJLgI.js +0 -1
|
@@ -17,15 +17,22 @@ export function loadByoPrefs(storage) {
|
|
|
17
17
|
if (typeof value.preset === 'string')
|
|
18
18
|
prefs.preset = value.preset;
|
|
19
19
|
prefs.active = value.active === true;
|
|
20
|
+
let sanitized = false;
|
|
20
21
|
if (isObject(value.entries)) {
|
|
21
22
|
for (const [id, entry] of Object.entries(value.entries)) {
|
|
22
23
|
if (isObject(entry) &&
|
|
23
24
|
typeof entry.baseUrl === 'string' &&
|
|
24
25
|
typeof entry.model === 'string') {
|
|
25
|
-
|
|
26
|
+
const baseUrl = normalizeBaseUrl(entry.baseUrl) ?? '';
|
|
27
|
+
sanitized ||= baseUrl !== entry.baseUrl;
|
|
28
|
+
prefs.entries[id] = { baseUrl, model: entry.model };
|
|
26
29
|
}
|
|
27
30
|
}
|
|
28
31
|
}
|
|
32
|
+
if (sanitized) {
|
|
33
|
+
prefs.active = false;
|
|
34
|
+
storage?.setItem(BYO_PREFS_KEY, JSON.stringify(prefs));
|
|
35
|
+
}
|
|
29
36
|
}
|
|
30
37
|
catch {
|
|
31
38
|
// Unreadable or unavailable: start empty.
|
|
@@ -59,8 +66,9 @@ export function loadByoKeys(storage) {
|
|
|
59
66
|
/**
|
|
60
67
|
* The visitor's own OpenAI-compatible endpoint: the preset they picked, its
|
|
61
68
|
* address, model and key, a connection test, and whether the assistant uses
|
|
62
|
-
* it. The key lives
|
|
63
|
-
*
|
|
69
|
+
* it. The key lives in the configured credential store (tab memory for hosted
|
|
70
|
+
* policies, localStorage for the compatible standalone default) and is only
|
|
71
|
+
* ever sent as the Authorization header to the chosen address.
|
|
64
72
|
*/
|
|
65
73
|
export class ByoModel {
|
|
66
74
|
presets;
|
|
@@ -71,11 +79,24 @@ export class ByoModel {
|
|
|
71
79
|
testStatus = $state('idle');
|
|
72
80
|
testMessage = $state('');
|
|
73
81
|
options;
|
|
82
|
+
credentialStorage;
|
|
74
83
|
constructor(options) {
|
|
75
84
|
this.options = options;
|
|
85
|
+
this.credentialStorage =
|
|
86
|
+
options.credentialPersistence === 'memory' ? null : options.storage;
|
|
87
|
+
if (options.credentialPersistence === 'memory') {
|
|
88
|
+
// A hosted memory-only policy also removes a key an older local policy
|
|
89
|
+
// may have left on this origin. Endpoint/model preferences stay put.
|
|
90
|
+
try {
|
|
91
|
+
options.storage?.removeItem(BYO_KEYS_KEY);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// Storage can be unavailable; memory-only behavior still holds.
|
|
95
|
+
}
|
|
96
|
+
}
|
|
76
97
|
this.presets = resolvePresets(options.presets);
|
|
77
98
|
const prefs = loadByoPrefs(options.storage);
|
|
78
|
-
this.keys = loadByoKeys(
|
|
99
|
+
this.keys = loadByoKeys(this.credentialStorage);
|
|
79
100
|
this.entries = prefs.entries;
|
|
80
101
|
this.presetId = this.presets.some((p) => p.id === prefs.preset)
|
|
81
102
|
? prefs.preset
|
|
@@ -226,13 +247,20 @@ export class ByoModel {
|
|
|
226
247
|
}
|
|
227
248
|
save() {
|
|
228
249
|
try {
|
|
250
|
+
const entries = Object.fromEntries(Object.entries(this.entries).map(([id, entry]) => [
|
|
251
|
+
id,
|
|
252
|
+
{
|
|
253
|
+
baseUrl: normalizeBaseUrl(entry.baseUrl) ?? '',
|
|
254
|
+
model: entry.model,
|
|
255
|
+
},
|
|
256
|
+
]));
|
|
229
257
|
const prefs = {
|
|
230
258
|
preset: this.presetId,
|
|
231
259
|
active: this.active,
|
|
232
|
-
entries
|
|
260
|
+
entries,
|
|
233
261
|
};
|
|
234
262
|
this.options.storage?.setItem(BYO_PREFS_KEY, JSON.stringify(prefs));
|
|
235
|
-
this.
|
|
263
|
+
this.credentialStorage?.setItem(BYO_KEYS_KEY, JSON.stringify(this.keys));
|
|
236
264
|
}
|
|
237
265
|
catch {
|
|
238
266
|
// Not saved; the choice still holds for this visit.
|
|
@@ -244,7 +272,7 @@ export class ByoModel {
|
|
|
244
272
|
* (a mounted `Planner` in byo mode has no AI page of its own). Null when none
|
|
245
273
|
* is connected or what was saved is incomplete.
|
|
246
274
|
*/
|
|
247
|
-
export function savedByoChat(storage, presets, fetcher) {
|
|
275
|
+
export function savedByoChat(storage, presets, fetcher, credentialPersistence = 'local') {
|
|
248
276
|
const prefs = loadByoPrefs(storage);
|
|
249
277
|
if (!prefs.active)
|
|
250
278
|
return null;
|
|
@@ -252,7 +280,7 @@ export function savedByoChat(storage, presets, fetcher) {
|
|
|
252
280
|
const entry = prefs.entries[prefs.preset];
|
|
253
281
|
const baseUrl = normalizeBaseUrl(entry?.baseUrl ?? preset?.baseUrl ?? '');
|
|
254
282
|
const model = (entry?.model ?? preset?.model ?? '').trim();
|
|
255
|
-
const saved = loadByoKeys(storage)[prefs.preset];
|
|
283
|
+
const saved = loadByoKeys(credentialPersistence === 'memory' ? null : storage)[prefs.preset];
|
|
256
284
|
const key = saved && saved.origin === originOf(baseUrl ?? '') ? saved.key : '';
|
|
257
285
|
if (!preset || !baseUrl || !model)
|
|
258
286
|
return null;
|
|
@@ -9,7 +9,9 @@ import { type KitchenEndpoint } from '../kitchen/client.ts';
|
|
|
9
9
|
* - `byo`: the visitor's own OpenAI-compatible endpoint (Ollama, OpenRouter,
|
|
10
10
|
* OpenAI, custom), configured on the AI page.
|
|
11
11
|
*/
|
|
12
|
-
export type InferenceMode = 'browser' | 'host' | 'byo';
|
|
12
|
+
export type InferenceMode = 'manual' | 'browser' | 'host' | 'byo';
|
|
13
|
+
/** Where BYO provider credentials may live. Preferences are always separate. */
|
|
14
|
+
export type CredentialPersistence = 'local' | 'memory';
|
|
13
15
|
export declare const INFERENCE_MODES: readonly InferenceMode[];
|
|
14
16
|
/** A bring-your-own endpoint the AI page offers. */
|
|
15
17
|
export interface ByoPresetDefinition {
|
|
@@ -28,6 +30,10 @@ export interface ByoPresetDefinition {
|
|
|
28
30
|
}
|
|
29
31
|
export interface InferenceConfig {
|
|
30
32
|
mode: InferenceMode;
|
|
33
|
+
/** Other modes the visitor may deliberately select, in display order. */
|
|
34
|
+
alternatives?: InferenceMode[];
|
|
35
|
+
/** Defaults to `local` for compatibility. Hosted apps should use `memory`. */
|
|
36
|
+
credentialPersistence?: CredentialPersistence;
|
|
31
37
|
host?: {
|
|
32
38
|
endpoint: string;
|
|
33
39
|
};
|
|
@@ -41,21 +47,22 @@ export interface InferenceConfig {
|
|
|
41
47
|
};
|
|
42
48
|
}
|
|
43
49
|
export declare const DEFAULT_INFERENCE: InferenceConfig;
|
|
50
|
+
export declare const MANUAL_INFERENCE: InferenceConfig;
|
|
44
51
|
/** The file name, served at `${base}/planner.config.json`. */
|
|
45
52
|
export declare const CONFIG_FILE = "planner.config.json";
|
|
46
53
|
export interface ConfigResult {
|
|
47
54
|
config: InferenceConfig;
|
|
48
55
|
/** The `kitchen` block (`smrt kitchen`), when the file has a usable one. */
|
|
49
56
|
kitchen?: KitchenEndpoint;
|
|
50
|
-
/** Shown
|
|
57
|
+
/** Shown when a present config was unusable and inference was disabled. */
|
|
51
58
|
notice?: string;
|
|
52
59
|
}
|
|
53
60
|
/** http(s) only; a path-only endpoint (`/api/planner/chat`) is the host's own origin. */
|
|
54
61
|
export declare function isUsableEndpoint(value: unknown): value is string;
|
|
55
62
|
/**
|
|
56
|
-
* Validate a parsed config.
|
|
57
|
-
*
|
|
58
|
-
* notice
|
|
63
|
+
* Validate a parsed config. A missing config keeps the standalone browser
|
|
64
|
+
* default. A present but invalid config fails closed to manual planning with a
|
|
65
|
+
* visible notice; it never selects a provider or downloads a model.
|
|
59
66
|
*/
|
|
60
67
|
export declare function validateInferenceConfig(value: unknown): ConfigResult;
|
|
61
68
|
/** Parse the file's text. */
|
package/dist/inference/config.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { parseKitchenConfig } from "../kitchen/client.js";
|
|
2
2
|
export const INFERENCE_MODES = [
|
|
3
|
+
'manual',
|
|
3
4
|
'browser',
|
|
4
5
|
'host',
|
|
5
6
|
'byo',
|
|
6
7
|
];
|
|
7
8
|
export const DEFAULT_INFERENCE = { mode: 'browser' };
|
|
9
|
+
export const MANUAL_INFERENCE = { mode: 'manual' };
|
|
8
10
|
/** The file name, served at `${base}/planner.config.json`. */
|
|
9
11
|
export const CONFIG_FILE = 'planner.config.json';
|
|
10
12
|
const isObject = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
@@ -15,11 +17,22 @@ export function isUsableEndpoint(value) {
|
|
|
15
17
|
const text = value.trim();
|
|
16
18
|
if (!text)
|
|
17
19
|
return false;
|
|
18
|
-
if (text.startsWith('/') && !text.startsWith('//'))
|
|
19
|
-
return true;
|
|
20
20
|
try {
|
|
21
|
-
const
|
|
22
|
-
|
|
21
|
+
const relative = text.startsWith('/') && !text.startsWith('//');
|
|
22
|
+
const url = new URL(text, relative ? 'https://planner.invalid' : undefined);
|
|
23
|
+
if (!relative && url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (url.username || url.password)
|
|
27
|
+
return false;
|
|
28
|
+
if (url.hash)
|
|
29
|
+
return false;
|
|
30
|
+
for (const name of url.searchParams.keys()) {
|
|
31
|
+
if (/^(?:api[-_]?key|key|token|authorization|secret|password)$/i.test(name)) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
23
36
|
}
|
|
24
37
|
catch {
|
|
25
38
|
return false;
|
|
@@ -48,13 +61,52 @@ function parsePresetDefinition(value) {
|
|
|
48
61
|
};
|
|
49
62
|
}
|
|
50
63
|
const fallback = (why) => ({
|
|
51
|
-
config:
|
|
52
|
-
notice: `The assistant settings could not be used (${why}), so
|
|
64
|
+
config: MANUAL_INFERENCE,
|
|
65
|
+
notice: `The assistant settings could not be used (${why}), so inference is off. The planner still works manually.`,
|
|
53
66
|
});
|
|
67
|
+
function parseAlternatives(value, initial) {
|
|
68
|
+
if (value === undefined)
|
|
69
|
+
return [];
|
|
70
|
+
if (!Array.isArray(value) || value.length === 0)
|
|
71
|
+
return null;
|
|
72
|
+
const modes = [];
|
|
73
|
+
for (const entry of value) {
|
|
74
|
+
if (typeof entry !== 'string' ||
|
|
75
|
+
!INFERENCE_MODES.includes(entry) ||
|
|
76
|
+
entry === initial ||
|
|
77
|
+
modes.includes(entry)) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
modes.push(entry);
|
|
81
|
+
}
|
|
82
|
+
return modes;
|
|
83
|
+
}
|
|
84
|
+
function parseByo(value) {
|
|
85
|
+
if (value === undefined)
|
|
86
|
+
return {};
|
|
87
|
+
if (!isObject(value))
|
|
88
|
+
return null;
|
|
89
|
+
if (value.presets === undefined)
|
|
90
|
+
return {};
|
|
91
|
+
if (!Array.isArray(value.presets) || value.presets.length === 0)
|
|
92
|
+
return null;
|
|
93
|
+
const presets = [];
|
|
94
|
+
for (const entry of value.presets) {
|
|
95
|
+
if (typeof entry === 'string' && entry.trim()) {
|
|
96
|
+
presets.push(entry.trim());
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const definition = parsePresetDefinition(entry);
|
|
100
|
+
if (!definition)
|
|
101
|
+
return null;
|
|
102
|
+
presets.push(definition);
|
|
103
|
+
}
|
|
104
|
+
return { presets };
|
|
105
|
+
}
|
|
54
106
|
/**
|
|
55
|
-
* Validate a parsed config.
|
|
56
|
-
*
|
|
57
|
-
* notice
|
|
107
|
+
* Validate a parsed config. A missing config keeps the standalone browser
|
|
108
|
+
* default. A present but invalid config fails closed to manual planning with a
|
|
109
|
+
* visible notice; it never selects a provider or downloads a model.
|
|
58
110
|
*/
|
|
59
111
|
export function validateInferenceConfig(value) {
|
|
60
112
|
if (!isObject(value))
|
|
@@ -65,43 +117,47 @@ export function validateInferenceConfig(value) {
|
|
|
65
117
|
if (!isObject(inference))
|
|
66
118
|
return fallback('"inference" is not an object');
|
|
67
119
|
const mode = inference.mode;
|
|
68
|
-
if (mode === undefined
|
|
120
|
+
if (mode === undefined)
|
|
69
121
|
return { config: DEFAULT_INFERENCE };
|
|
122
|
+
if (!INFERENCE_MODES.includes(mode)) {
|
|
123
|
+
return fallback(`unknown mode "${String(mode)}"`);
|
|
124
|
+
}
|
|
125
|
+
const selected = mode;
|
|
126
|
+
const alternatives = parseAlternatives(inference.alternatives, selected);
|
|
127
|
+
if (!alternatives) {
|
|
128
|
+
return fallback('alternatives must be unique supported modes other than mode');
|
|
129
|
+
}
|
|
130
|
+
const credentialPersistence = inference.credentialPersistence;
|
|
131
|
+
if (credentialPersistence !== undefined &&
|
|
132
|
+
credentialPersistence !== 'local' &&
|
|
133
|
+
credentialPersistence !== 'memory') {
|
|
134
|
+
return fallback('credentialPersistence must be "local" or "memory"');
|
|
70
135
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
136
|
+
const modes = [selected, ...alternatives];
|
|
137
|
+
let host;
|
|
138
|
+
if (modes.includes('host')) {
|
|
139
|
+
const configuredHost = inference.host;
|
|
140
|
+
if (!isObject(configuredHost) ||
|
|
141
|
+
!isUsableEndpoint(configuredHost.endpoint)) {
|
|
74
142
|
return fallback('host mode needs host.endpoint, an http(s) URL or path');
|
|
75
143
|
}
|
|
76
|
-
|
|
77
|
-
config: { mode: 'host', host: { endpoint: host.endpoint.trim() } },
|
|
78
|
-
};
|
|
144
|
+
host = { endpoint: configuredHost.endpoint.trim() };
|
|
79
145
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return fallback('"byo" is not an object');
|
|
86
|
-
if (byo.presets === undefined)
|
|
87
|
-
return { config: { mode: 'byo', byo: {} } };
|
|
88
|
-
if (!Array.isArray(byo.presets) || byo.presets.length === 0) {
|
|
89
|
-
return fallback('byo.presets must be a non-empty list');
|
|
90
|
-
}
|
|
91
|
-
const presets = [];
|
|
92
|
-
for (const entry of byo.presets) {
|
|
93
|
-
if (typeof entry === 'string' && entry.trim()) {
|
|
94
|
-
presets.push(entry.trim());
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
const definition = parsePresetDefinition(entry);
|
|
98
|
-
if (!definition)
|
|
99
|
-
return fallback('a byo preset is malformed');
|
|
100
|
-
presets.push(definition);
|
|
101
|
-
}
|
|
102
|
-
return { config: { mode: 'byo', byo: { presets } } };
|
|
146
|
+
let byo;
|
|
147
|
+
if (modes.includes('byo')) {
|
|
148
|
+
byo = parseByo(inference.byo) ?? undefined;
|
|
149
|
+
if (!byo)
|
|
150
|
+
return fallback('byo.presets must be a non-empty valid list');
|
|
103
151
|
}
|
|
104
|
-
return
|
|
152
|
+
return {
|
|
153
|
+
config: {
|
|
154
|
+
mode: selected,
|
|
155
|
+
...(alternatives.length ? { alternatives } : {}),
|
|
156
|
+
...(credentialPersistence ? { credentialPersistence } : {}),
|
|
157
|
+
...(host ? { host } : {}),
|
|
158
|
+
...(byo ? { byo } : {}),
|
|
159
|
+
},
|
|
160
|
+
};
|
|
105
161
|
}
|
|
106
162
|
/** Parse the file's text. */
|
|
107
163
|
export function parseInferenceConfig(text) {
|
package/dist/inference/openai.js
CHANGED
|
@@ -9,6 +9,11 @@ export function normalizeBaseUrl(value) {
|
|
|
9
9
|
// Credentials in a URL would travel in the clear as part of it.
|
|
10
10
|
if (url.username || url.password)
|
|
11
11
|
return null;
|
|
12
|
+
for (const name of url.searchParams.keys()) {
|
|
13
|
+
if (/^(?:api[-_]?key|key|token|authorization|secret|password)$/i.test(name)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
12
17
|
return `${url.origin}${url.pathname.replace(/\/+$/, '')}`;
|
|
13
18
|
}
|
|
14
19
|
catch {
|
package/dist/kitchen/client.js
CHANGED
|
@@ -27,11 +27,17 @@ function usableEndpoint(value) {
|
|
|
27
27
|
if (typeof value !== 'string')
|
|
28
28
|
return false;
|
|
29
29
|
const text = value.trim();
|
|
30
|
-
if (text.startsWith('/') && !text.startsWith('//'))
|
|
31
|
-
return true;
|
|
32
30
|
try {
|
|
33
|
-
const
|
|
34
|
-
|
|
31
|
+
const relative = text.startsWith('/') && !text.startsWith('//');
|
|
32
|
+
const url = new URL(text, relative ? 'https://planner.invalid' : undefined);
|
|
33
|
+
if (!relative && url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if (url.username || url.password)
|
|
37
|
+
return false;
|
|
38
|
+
if (url.hash)
|
|
39
|
+
return false;
|
|
40
|
+
return ![...url.searchParams.keys()].some((name) => /^(?:api[-_]?key|key|token|authorization|secret|password)$/i.test(name));
|
|
35
41
|
}
|
|
36
42
|
catch {
|
|
37
43
|
return false;
|
|
@@ -98,7 +98,7 @@ export function createPlannerAssistant(controller, inference) {
|
|
|
98
98
|
}
|
|
99
99
|
else if (result.config.mode === 'byo') {
|
|
100
100
|
const presets = result.config.byo?.presets;
|
|
101
|
-
chat = () => savedByoChat(browserStorage(), presets);
|
|
101
|
+
chat = () => savedByoChat(browserStorage(), presets, undefined, result.config.credentialPersistence);
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
const themeUndos = new ThemeUndos(theme, controller);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-planner",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "The smrt planner as a mountable Svelte component with a typed command set and plan snapshot.",
|
|
@@ -61,6 +61,7 @@
|
|
|
61
61
|
"@sveltejs/package": "^3.0.0",
|
|
62
62
|
"@sveltejs/vite-plugin-svelte": "^7.3.0",
|
|
63
63
|
"@types/node": "^24.13.6",
|
|
64
|
+
"playwright-core": "^1.64.0",
|
|
64
65
|
"publint": "^0.3.25",
|
|
65
66
|
"svelte": "^5.57.1",
|
|
66
67
|
"svelte-check": "^4.7.6",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./OJ_lLTHH.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,Q as t,Z as n,c as r,et as i,gt as a,r as o,t as s,vt as c}from"./Chyo8rdT.js";import{i as l,n as u,r as d,t as f}from"./Dt-HX3Vu.js";new URL(`sveltekit-internal://`);function p(e,t){return e===`/`||t===`ignore`?e:t===`never`?e.endsWith(`/`)?e.slice(0,-1):e:t===`always`&&!e.endsWith(`/`)?e+`/`:e}function ee(e){return e.split(`%25`).map(decodeURI).join(`%25`)}function te(e){for(let t in e)e[t]=decodeURIComponent(e[t]);return e}function m({href:e}){return e.split(`#`)[0]}function h(e,t,n,r=!1){let i=new URL(e);Object.defineProperty(i,"searchParams",{value:new Proxy(i.searchParams,{get(e,r){if(r===`get`||r===`getAll`||r===`has`)return(t,...i)=>(n(t),e[r](t,...i));t();let i=Reflect.get(e,r);return typeof i==`function`?i.bind(e):i}}),enumerable:!0,configurable:!0});let a=[`href`,`pathname`,`search`,`toString`,`toJSON`];r&&a.push(`hash`);for(let n of a)Object.defineProperty(i,n,{get(){return t(),e[n]},enumerable:!0,configurable:!0});return i}function g(){}function ne(...e){let t=5381;for(let n of e)if(typeof n==`string`){let e=n.length;for(;e;)t=t*33^n.charCodeAt(--e)}else if(ArrayBuffer.isView(n)){let e=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),r=e.length;for(;r;)t=t*33^e[--r]}else throw TypeError(`value must be a string or TypedArray`);return(t>>>0).toString(36)}var re=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||`GET`)!==`GET`&&_.delete(v(e)),re(e,t));var _=new Map;function ie(e,t){let n=v(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:e,...t}=JSON.parse(r.textContent);r.getAttribute(`data-b64`)!==null&&(e=f(e));let i=r.getAttribute(`data-ttl`);return i&&_.set(n,{body:e,init:t,ttl:1e3*Number(i)}),Promise.resolve(new Response(e,t))}return window.fetch(e,t)}function ae(e,t,n){if(_.size>0){let t=v(e,n),r=_.get(t);if(r){if(performance.now()<r.ttl&&[`default`,`force-cache`,`only-if-cached`,void 0].includes(n?.cache))return new Response(r.body,r.init);_.delete(t)}}return window.fetch(t,n)}function v(e,t){let n=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){let e=[];t.headers&&e.push([...new Headers(t.headers)].join(`,`)),t.body&&(typeof t.body==`string`||ArrayBuffer.isView(t.body))&&e.push(t.body),n+=`[data-hash="${ne(...e)}"]`}return n}var y=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,oe=/^\/\((?:[^)]+)\)$/;function se(e){let t=[];return{pattern:e===`/`||oe.test(e)?/^\/$/:RegExp(`^${le(e).map(e=>{let n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(e);if(n)return t.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),`(?:/([^]*))?`;let r=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(e);if(r)return t.push({name:r[1],matcher:r[2],optional:!0,rest:!1,chained:!0}),`(?:/([^/]+))?`;if(!e)return;let i=e.split(/\[(.+?)\](?!\])/);return`/`+i.map((e,n)=>{if(n%2){if(e.startsWith(`x+`))return de(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith(`u+`))return de(String.fromCharCode(...e.slice(2).split(`-`).map(e=>parseInt(e,16))));let[,r,a,o,s]=y.exec(e);return t.push({name:o,matcher:s,optional:!!r,rest:!!a,chained:a?n===1&&i[0]===``:!1}),a?`([^]*?)`:r?`([^/]*)?`:`([^/]+?)`}return de(e)}).join(``)}).join(``)}/?$`),params:t}}function ce(e){return e!==``&&!/^\([^)]+\)$/.test(e)}function le(e){return e.slice(1).split(`/`).filter(ce)}function ue(e,t,n){let r={},i=e.slice(1),a=i.filter(e=>e!==void 0),o=0;for(let e=0;e<t.length;e+=1){let s=t[e],c=i[e-o];if(s.chained&&s.rest&&o&&(c=i.slice(e-o,e+1).filter(e=>e).join(`/`),o=0),c===void 0){if(s.rest)c=``;else continue}if(!s.matcher||n[s.matcher](c)){r[s.name]=c;let n=t[e+1],l=i[e+1];n&&!n.rest&&n.optional&&l&&s.chained&&(o=0),!n&&!l&&Object.keys(r).length===a.length&&(o=0);continue}if(s.optional&&s.chained){o++;continue}return}if(!o)return r}function de(e){return e.normalize().replace(/[[\]]/g,`\\$&`).replace(/%/g,`%25`).replace(/\//g,`%2[Ff]`).replace(/\?/g,`%3[Ff]`).replace(/#/g,`%23`).replace(/[.*+?^${}()|\\]/g,`\\$&`)}function fe({nodes:e,server_loads:t,dictionary:n,matchers:r}){let i=new Set(t);return Object.entries(n).map(([t,[n,i,s]])=>{let{pattern:c,params:l}=se(t),u={id:t,exec:e=>{let t=c.exec(e);if(t)return ue(t,l,r)},errors:[1,...s||[]].map(t=>e[t]),layouts:[0,...i||[]].map(o),leaf:a(n)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function a(t){let n=t<0;return n&&(t=~t),[n,e[t]]}function o(t){return t===void 0?t:[i.has(t),e[t]]}}function pe(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function me(e,t,n=JSON.stringify){let r=n(t);try{sessionStorage[e]=r}catch{}}var b=globalThis.__sveltekit_1i3quer?.base??``,he=globalThis.__sveltekit_1i3quer?.assets??b??``,ge=`1791696288726`,_e=`sveltekit:snapshot`,ve=`sveltekit:scroll`,ye=`sveltekit:states`,be=`sveltekit:pageurl`,x=`sveltekit:history`,S=`sveltekit:navigation`,C={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},w=location.origin;function T(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){let e=document.getElementsByTagName(`base`);t=e.length?e[0].href:document.URL}return new URL(e,t)}function E(){return{x:pageXOffset,y:pageYOffset}}function D(e,t){return e.getAttribute(`data-sveltekit-${t}`)}var xe={...C,"":C.hover};function Se(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Ce(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()===`A`&&e.hasAttribute(`href`))return e;e=Se(e)}}function we(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){let e=location.hash.split(`#`)[1]||`/`;r.hash=`#${e}${r.hash}`}}catch{}let i=e instanceof SVGAElement?e.target.baseVal:e.target,a=!r||!!i||Oe(r,t,n)||(e.getAttribute(`rel`)||``).split(/\s+/).includes(`external`),o=r?.origin===w&&e.hasAttribute(`download`);return{url:r,external:a,target:i,download:o}}function O(e){let t=null,n=null,r=null,i=null,a=null,o=null,s=e;for(;s&&s!==document.documentElement;)r===null&&(r=D(s,`preload-code`)),i===null&&(i=D(s,`preload-data`)),t===null&&(t=D(s,`keepfocus`)),n===null&&(n=D(s,`noscroll`)),a===null&&(a=D(s,`reload`)),o===null&&(o=D(s,`replacestate`)),s=Se(s);function c(e){switch(e){case``:case`true`:return!0;case`off`:case`false`:return!1;default:return}}return{preload_code:xe[r??`off`],preload_data:xe[i??`off`],keepfocus:c(t),noscroll:c(n),reload:c(a),replace_state:c(o)}}function Te(e){let t=r(e),n=!0;function i(){n=!0,t.update(e=>e)}function a(e){n=!1,t.set(e)}function o(e){let r;return t.subscribe(t=>{(r===void 0||n&&t!==r)&&e(r=t)})}return{notify:i,set:a,subscribe:o}}var Ee={v:g};function De(){let{set:e,subscribe:t}=r(!1),n;async function i(){clearTimeout(n);try{let t=await fetch(`${he}/_app/version.json`,{headers:{pragma:`no-cache`,"cache-control":`no-cache`}});if(!t.ok)return!1;let r=(await t.json()).version!==ge;return r&&(e(!0),Ee.v(),clearTimeout(n)),r}catch{return!1}}return{subscribe:t,check:i}}function Oe(e,t,n){return e.origin!==w||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function ke(e){}Uint8Array.fromBase64,typeof process==`object`&&process.versions?.node,Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,`byteLength`).get,typeof SharedArrayBuffer>`u`||Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype,`byteLength`).get;var Ae=new Set([`load`,`prerender`,`csr`,`ssr`,`trailingSlash`,`config`]);[...Ae],[...new Set([...Ae])];function je(e){return e.filter(e=>e!=null)}function Me(e,t){return e+`/`+t}function Ne(e){return e instanceof u||e instanceof l?e.status:500}function Pe(e){return e instanceof l?e.text:`Internal Error`}var k,A,Fe,Ie=o.toString().includes(`$$`)||/function \w+\(\) \{\}/.test(o.toString()),Le=`a:`;Ie?(k={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(Le)},A={current:null},Fe={current:!1}):(k=new class{#e=c({});get data(){return n(this.#e)}set data(e){a(this.#e,e)}#t=c(null);get form(){return n(this.#t)}set form(e){a(this.#t,e)}#n=c(null);get error(){return n(this.#n)}set error(e){a(this.#n,e)}#r=c({});get params(){return n(this.#r)}set params(e){a(this.#r,e)}#i=c({id:null});get route(){return n(this.#i)}set route(e){a(this.#i,e)}#a=c({});get state(){return n(this.#a)}set state(e){a(this.#a,e)}#o=c(-1);get status(){return n(this.#o)}set status(e){a(this.#o,e)}#s=c(new URL(Le));get url(){return n(this.#s)}set url(e){a(this.#s,e)}},A=new class{#e=c(null);get current(){return n(this.#e)}set current(e){a(this.#e,e)}},Fe=new class{#e=c(!1);get current(){return n(this.#e)}set current(e){a(this.#e,e)}},Ee.v=()=>Fe.current=!0);function Re(e){Object.assign(k,e)}var ze={spanContext(){return Be},setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},Be={traceId:``,spanId:``,traceFlags:0},{onMount:Ve,tick:He}=s,Ue=i??(e=>e()),We=new Set([`icon`,`shortcut icon`,`apple-touch-icon`]),j=null,M=pe(`sveltekit:scroll`)??{},N=pe(`sveltekit:snapshot`)??{},P={url:Te({}),page:Te({}),navigating:r(null),updated:De()};function Ge(e){M[e]=E()}function Ke(e,t){let n=e+1;for(;M[n];)delete M[n],n+=1;for(n=t+1;N[n];)delete N[n],n+=1}function F(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(g)}async function qe(){if(`serviceWorker`in navigator){let e=await navigator.serviceWorker.getRegistration(b||`/`);e&&await e.update()}}var Je,Ye,I,L,Xe,R,Ze={},Qe={},z=[],B=[],V=null;function H(){V?.fork?.then(e=>e?.discard()),V=null,Q={element:void 0,href:void 0}}var U=new Map,$e=new Set,et=new Set,W=new Set,G={branch:[],error:null,url:null,nav:null},tt=!1,nt=!1,rt=!0,K=!1,q=!1,it=!1,at=!1,ot,J,Y,X,st=new Set,ct=new Map,lt=new Map;async function ut(e,t,n){if(globalThis.__sveltekit_1i3quer.data){let{q:e={},p:t={},l:n={},f:r={}}=globalThis.__sveltekit_1i3quer.data;for(let t in e)Ze[t]=e[t];for(let e in n)Ze[e]=n[e];for(let e in r)Ze[e]=r[e];for(let e in t)Qe[e]=t[e]}document.URL!==location.href&&(location.href=location.href),R=e,await e.hooks.init?.(),Je=fe(e),L=document.documentElement,Xe=t,Ye=e.nodes[0],I=e.nodes[1],Ye(),I(),J=history.state?.[x],Y=history.state?.[S],J||(J=Y=Date.now(),history.replaceState({...history.state,[x]:J,[S]:Y},``));let r=M[J];function i(){r&&(history.scrollRestoration=`manual`,scrollTo(r.x,r.y))}n?(i(),await Ht(Xe,n)):(await Z({type:`enter`,url:T(R.hash?Jt(new URL(location.href)):location.href),replace_state:!0}),i()),Vt()}function dt(){z.length=0,at=!1}function ft(e){B.some(e=>e?.snapshot)&&(N[e]=B.map(e=>e?.snapshot?.capture()))}function pt(e){N[e]?.forEach((e,t)=>{B[t]?.snapshot?.restore(e)})}function mt(){Ge(J),me(ve,M),ft(Y),me(_e,N)}async function ht(t,n,r,i){let a,o;n.invalidateAll&&H(),await Z({type:`goto`,url:T(t),keepfocus:n.keepFocus,noscroll:n.noScroll,replace_state:n.replaceState,state:n.state,redirect_count:r,nav_token:i,accept:()=>{if(n.invalidateAll){at=!0,a=new Set;for(let[e,t]of ct)for(let[n,r]of t)r.resource?.reset(),a.add(Me(e,n));o=new Set;for(let[e,t]of lt)for(let n of t.keys())o.add(Me(e,n))}n.invalidate&&n.invalidate.forEach(zt)}}),n.invalidateAll&&e().then(e).then(()=>{for(let[e,t]of ct)for(let[n,{resource:r}]of t)a?.has(Me(e,n))&&r.start();for(let[e,t]of lt)for(let[n,{resource:r}]of t)o?.has(Me(e,n))&&r.reconnect()})}async function gt(e){if(e.id!==V?.id){H();let t={};st.add(t),V={id:e.id,token:t,promise:Et({...e,preload:t}).then(e=>(st.delete(t),e.type===`loaded`&&e.state.error&&H(),e)),fork:null}}return V.promise}async function _t(e){let t=(await At(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(e=>e[1]()))}async function vt(e,t,n){let r={params:G.params,route:{id:G.route?.id??null},url:new URL(location.href)};if(G={...e.state,nav:r},Re(e.props.page),ot=new R.root({target:t,props:{...e.props,stores:P,components:B},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),n){let e={from:null,to:{...r,scroll:M[J]??E()},willUnload:!1,type:`enter`,complete:Promise.resolve()};W.forEach(t=>t(e))}pt(Y),nt=!0}async function yt({url:e,params:t,branch:n,errors:r,status:i,error:a,route:o,form:s}){let c=`never`;if(b&&(e.pathname===b||e.pathname===b+`/`))c=`always`;else for(let e of n)e?.slash!==void 0&&(c=e.slash);e.pathname=p(e.pathname,c),e.search=e.search;let l={type:`loaded`,state:{url:e,params:t,branch:n,error:a,route:o},props:{constructors:je(n).map(e=>e.node.component),page:qt(k)}};s!==void 0&&(l.props.form=s);let u={},d=!k,f=0;for(let e=0;e<Math.max(n.length,G.branch.length);e+=1){let t=n[e],r=G.branch[e];t?.data!==r?.data&&(d=!0),t&&(u={...u,...t.data},d&&(l.props[`data_${f}`]=u),f+=1)}return(!G.url||e.href!==G.url.href||G.error!==a||s!==void 0&&s!==k.form||d)&&(l.props.page={error:a,params:t,route:{id:o?.id??null},state:{},status:i,url:new URL(e),form:s??null,data:d?u:k.data}),l}async function bt({loader:e,parent:t,url:n,params:r,route:i,server_data_node:a}){let o=null,s=!0,c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await e();if(l.universal?.load){function e(...e){for(let t of e){let{href:e}=new URL(t,n);c.dependencies.add(e)}}let u={tracing:{enabled:!1,root:ze,current:ze},route:new Proxy(i,{get:(e,t)=>(s&&(c.route=!0),e[t])}),params:new Proxy(r,{get:(e,t)=>(s&&c.params.add(t),e[t])}),data:a?.data??null,url:h(n,()=>{s&&(c.url=!0)},e=>{s&&c.search_params.add(e)},R.hash),async fetch(t,r){t instanceof Request&&(r={body:t.method===`GET`||t.method===`HEAD`?void 0:await t.blob(),cache:t.cache,credentials:t.credentials,headers:[...t.headers].length>0?t?.headers:void 0,integrity:t.integrity,keepalive:t.keepalive,method:t.method,mode:t.mode,redirect:t.redirect,referrer:t.referrer,referrerPolicy:t.referrerPolicy,signal:t.signal,...r});let{resolved:i,promise:a}=xt(t,r,n);return s&&e(i.href),a},setHeaders:g,depends:e,parent(){return s&&(c.parent=!0),t()},untrack(e){s=!1;try{return e()}finally{s=!0}}};o=await l.universal.load.call(null,u)??null}return{node:l,loader:e,server:a,universal:l.universal?.load?{type:`data`,data:o,uses:c}:null,data:o??a?.data??null,slash:l.universal?.trailingSlash??a?.slash}}function xt(e,t,n){let r=e instanceof Request?e.url:e,i=new URL(r,n);return i.origin===n.origin&&(r=i.href.slice(n.origin.length)),{resolved:i,promise:nt?ae(r,i.href,t):ie(r,t)}}function St(e,t,n,r,i,a){if(at)return!0;if(!i)return!1;if(i.parent&&e||i.route&&t||i.url&&n)return!0;for(let e of i.search_params)if(r.has(e))return!0;for(let e of i.params)if(a[e]!==G.params[e])return!0;for(let e of i.dependencies)if(z.some(t=>t(new URL(e))))return!0;return!1}function Ct(e,t){return e?.type===`data`?e:e?.type===`skip`?t??null:null}function wt(e,t){if(!e)return new Set(t.searchParams.keys());let n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(let r of n){let i=e.searchParams.getAll(r),a=t.searchParams.getAll(r);i.every(e=>a.includes(e))&&a.every(e=>i.includes(e))&&n.delete(r)}return n}function Tt({error:e,url:t,route:n,params:r}){return{type:`loaded`,state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:qt(k),constructors:[]}}}async function Et({id:e,invalidating:t,url:n,params:r,route:i,preload:a}){if(V?.id===e)return st.delete(V.token),V.promise;let{errors:o,layouts:s,leaf:c}=i,l=[...s,c];o.forEach(e=>e?.().catch(g)),l.forEach(e=>e?.[1]().catch(g));let f=G.url?e!==Mt(G.url):!1,p=G.route?i.id!==G.route.id:!1,ee=wt(G.url,n),te=!1,m=l.map(async(e,t)=>{if(!e)return;let a=G.branch[t];return e[1]===a?.loader&&!St(te,p,f,ee,a.universal?.uses,r)?a:(te=!0,bt({loader:e[1],url:n,params:r,route:i,parent:async()=>{let e={};for(let n=0;n<t;n+=1)Object.assign(e,(await m[n])?.data);return e},server_data_node:Ct(e[0]?{type:`skip`}:null,e[0]?a?.server:void 0)}))});for(let e of m)e.catch(g);let h=[];for(let e=0;e<l.length;e+=1)if(l[e])try{h.push(await m[e])}catch(t){if(t instanceof d)return{type:`redirect`,location:t.location};if(a&&st.has(a))return Tt({error:await $(t,{params:r,url:n,route:{id:i.id}}),url:n,params:r,route:i});let s=Ne(t),c;if(t instanceof u)c=t.body;else{if(await P.updated.check())return await qe(),await F(n);c=await $(t,{params:r,url:n,route:{id:i.id}})}let l=await Dt(e,h,o);return l?yt({url:n,params:r,branch:h.slice(0,l.idx).concat(l.node),errors:o,status:s,error:c,route:i}):await Pt(n,{id:i.id},c,s)}else h.push(void 0);return yt({url:n,params:r,branch:h,errors:o,status:200,error:null,route:i,form:t?void 0:null})}async function Dt(e,t,n){for(;e--;)if(n[e]){let r=e;for(;!t[r];)--r;try{return{idx:r+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function Ot({status:e,error:t,url:n,route:r}){let i={};try{return yt({url:n,params:i,branch:[await bt({loader:Ye,url:n,params:i,route:r,parent:()=>Promise.resolve({}),server_data_node:Ct(null)}),{node:await I(),loader:I,universal:null,server:null,data:null}],status:e,error:t,errors:[],route:null})}catch(t){if(t instanceof d){await ht(new URL(t.location,location.href),{},0);return}let a=await R.get_error_template(),o=await $(t,{url:n,params:i,route:r}),s=a({status:e,message:String(o?.message??``).replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`)}),c=new DOMParser().parseFromString(s,`text/html`);throw document.documentElement.replaceChild(document.adoptNode(c.head),document.head),document.documentElement.replaceChild(document.adoptNode(c.body),document.body),t}}async function kt(e){let t=e.href;if(U.has(t))return U.get(t);let n;try{let r=(async()=>{let t=await R.hooks.reroute({url:new URL(e),fetch:async(t,n)=>xt(t,n,e).promise})??e;if(typeof t==`string`){let n=new URL(e);R.hash?n.hash=t:n.pathname=t,t=n}return t})();U.set(t,r),n=await r}catch{U.delete(t);return}return n}async function At(e,t){if(e&&!Oe(e,b,R.hash)){let n=await kt(e);if(!n)return;let r=jt(n);for(let n of Je){let i=n.exec(r);if(i)return{id:Mt(e),invalidating:t,route:n,params:te(i),url:e}}}}function jt(e){return ee(R.hash?e.hash.replace(/^#/,``).replace(/[?#].+/,``):e.pathname.slice(b.length))||`/`}function Mt(e){return(R.hash?e.hash.replace(/^#/,``):e.pathname)+e.search}function Nt({url:e,type:t,intent:n,delta:r,event:i,scroll:a}){let o=!1,s=Kt(G,n,e,t,a??null);r!==void 0&&(s.navigation.delta=r),i!==void 0&&(s.navigation.event=i);let c={...s.navigation,cancel:()=>{o=!0,s.reject(Error(`navigation cancelled`))}};return K||$e.forEach(e=>e(c)),o?null:s}async function Z({type:n,url:r,popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c={},redirect_count:u=0,nav_token:d={},accept:f=g,block:p=g,event:ee}){let te=X;X=d;let m=await At(r,!1),h=n===`enter`?Kt(G,m,r,n):Nt({url:r,type:n,delta:i?.delta,intent:m,scroll:i?.scroll,event:ee});if(!h){p(),X===d&&(X=te);return}let ne=J,re=Y;f(),K=!0,nt&&h.navigation.type!==`enter`&&P.navigating.set(A.current=h.navigation);let _=m&&await Et(m);if(!_){if(Oe(r,b,R.hash))return await F(r,s);_=await Pt(r,{id:null},await $(new l(404,`Not Found`,`Not found: ${r.pathname}`),{url:r,params:{},route:{id:null}}),404,s)}if(r=m?.url||r,X!==d){h.reject(Error(`navigation aborted`));return}if(!_)return;if(_.type===`redirect`){if(u<20){await Z({type:n,url:new URL(_.location,r),popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c,redirect_count:u+1,nav_token:d}),h.fulfil(void 0);return}if(_=await Ot({status:500,error:await $(Error(`Redirect loop`),{url:r,params:{},route:{id:null}}),url:r,route:{id:null}}),!_)return}else if(_.props.page.status>=400&&await P.updated.check())return await qe(),await F(r,s);if(dt(),Ge(ne),ft(re),_.props.page.url.pathname!==r.pathname&&(r.pathname=_.props.page.url.pathname),c=i?i.state:c,!i){let e=+!s,t={[x]:J+=e,[S]:Y+=e,[ye]:c};(s?history.replaceState:history.pushState).call(history,t,``,r),s||Ke(J,Y)}let ie=m&&V?.id===m.id?V.fork:null;V?.fork&&!ie?H():(V=null,Q={element:void 0,href:void 0}),_.props.page.state=c;let ae;if(nt){let e=(await Promise.all(Array.from(et,e=>e(h.navigation)))).filter(e=>typeof e==`function`);if(e.length>0){function t(){e.forEach(e=>{W.delete(e)})}e.push(t),e.forEach(e=>{W.add(e)})}let n=h.navigation.to;G={..._.state,nav:{params:n.params,route:n.route,url:n.url}},_.props.page&&(_.props.page.url=r),!a&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&document.activeElement.blur();let i=ie&&await ie;i?ae=i.commit():(j=null,ot.$set(_.props),j&&Object.assign(_.props.page,j),Re(_.props.page),ae=t?.()),it=!0}else await vt(_,Xe,!1);let{activeElement:v}=document;if(await ae,await e(),await e(),X!==d){h.reject(Error(`navigation aborted`));return}_.props.page&&j&&Object.assign(_.props.page,j);let y=null;if(rt){let e=i?i.scroll:o?E():null;e?scrollTo(e.x,e.y):(y=r.hash&&document.getElementById(Yt(r)))?y.scrollIntoView():scrollTo(0,0)}let oe=document.activeElement!==v&&document.activeElement!==document.body;!a&&!oe&&Gt(r,!y),rt=!0,K=!1,h.fulfil(void 0),h.navigation.to&&(h.navigation.to.scroll=E()),W.forEach(e=>e(h.navigation)),n===`popstate`&&pt(Y),P.navigating.set(A.current=null)}async function Pt(e,t,n,r,i){return e.origin===w&&e.pathname===location.pathname&&!tt?await Ot({status:r,error:n,url:e,route:t}):await F(e,i)}var Q={element:void 0,href:void 0};function Ft(){let e,t;L.addEventListener(`mousemove`,t=>{let n=t.target;clearTimeout(e),e=setTimeout(()=>{i(n,C.hover)},20)});function n(e){e.defaultPrevented||i(e.composedPath()[0],C.tap)}L.addEventListener(`mousedown`,n),L.addEventListener(`touchstart`,n,{passive:!0});let r=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&(_t(new URL(t.target.href)),r.unobserve(t.target))},{threshold:0});async function i(e,n){let r=Ce(e,L),i=r===Q.element&&r?.href===Q.href&&n>=t;if(!r||i)return;let{url:a,external:o,download:s}=we(r,b,R.hash);if(o||s)return;let c=O(r),l=a&&Mt(G.url)===Mt(a);if(!(c.reload||l)){if(n<=c.preload_data){Q={element:r,href:r.href},t=C.tap;let e=await At(a,!1);if(!e)return;gt(e)}else n<=c.preload_code&&(Q={element:r,href:r.href},t=n,_t(a))}}function a(){r.disconnect();for(let e of L.querySelectorAll(`a`)){let{url:t,external:n,download:i}=we(e,b,R.hash);if(n||i)continue;let a=O(e);a.reload||(a.preload_code===C.viewport&&r.observe(e),a.preload_code===C.eager&&_t(t))}}W.add(a),a()}function $(e,t){if(e instanceof u)return e.body;let n=Ne(e),r=Pe(e);return R.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function It(e,t){Ve(()=>(e.add(t),()=>{e.delete(t)}))}function Lt(e){It(W,e)}function Rt(e,t={}){return e=new URL(T(e)),e.origin===w?ht(e,t,0):Promise.reject(Error(`goto: invalid URL`))}function zt(e){if(typeof e==`function`)z.push(e);else{let{href:t}=new URL(e,location.href);z.push(e=>e.href===t)}}function Bt(e,t){let n={[x]:J,[S]:Y,[be]:k.url.href,[ye]:t};history.replaceState(n,``,T(e)),k.state=t,ot.$set({page:Ue(()=>qt(k))})}function Vt(){history.scrollRestoration=`manual`,addEventListener(`beforeunload`,e=>{let t=!1;if(mt(),!K){let e=Kt(G,void 0,null,`leave`),n={...e.navigation,cancel:()=>{t=!0,e.reject(Error(`navigation cancelled`))}};$e.forEach(e=>e(n))}t?(e.preventDefault(),e.returnValue=``):history.scrollRestoration=`auto`}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&mt()}),navigator.connection?.saveData||Ft(),L.addEventListener(`click`,async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;let n=Ce(t.composedPath()[0],L);if(!n)return;let{url:r,external:i,target:a,download:o}=we(n,b,R.hash);if(!r)return;if(a===`_parent`||a===`_top`){if(window.parent!==window)return}else if(a&&a!==`_self`)return;let s=O(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&r.protocol!==`https:`&&r.protocol!==`http:`||o)return;let[c,l]=(R.hash?r.hash.replace(/^#/,``):r.href).split(`#`),u=c===m(location);if(i||s.reload&&(!u||!l)){Nt({url:r,type:`link`,event:t})?K=!0:t.preventDefault();return}if(l!==void 0&&u){let[,i]=G.url.href.split(`#`);if(i===l){if(t.preventDefault(),l===``||l===`top`&&n.ownerDocument.getElementById(`top`)===null)scrollTo({top:0});else{let e=n.ownerDocument.getElementById(decodeURIComponent(l));e&&(e.scrollIntoView(),e.focus())}return}if(q=!0,Ge(J),e(r),!s.replace_state)return;q=!1}t.preventDefault(),await new Promise(e=>{requestAnimationFrame(()=>{setTimeout(e,0)}),setTimeout(e,100)}),await Z({type:`link`,url:r,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??r.href===location.href,event:t})}),L.addEventListener(`submit`,e=>{if(e.defaultPrevented)return;let t=HTMLFormElement.prototype.cloneNode.call(e.target),n=e.submitter;if((n?.formTarget||t.target)===`_blank`||(n?.formMethod||t.method)!==`get`)return;let r=new URL(n?.hasAttribute(`formaction`)&&n?.formAction||t.action);if(Oe(r,b,!1))return;let i=e.target,a=O(i);if(a.reload)return;e.preventDefault(),e.stopPropagation();let o=new FormData(i,n);r.search=new URLSearchParams(o).toString(),Z({type:`form`,url:r,keepfocus:a.keepfocus,noscroll:a.noscroll,replace_state:a.replace_state??r.href===location.href,event:e})}),addEventListener(`popstate`,async t=>{if(!Wt){if(t.state?.[`sveltekit:history`]){let n=t.state[x];if(X={},n===J)return;let r=M[n],i=t.state[`sveltekit:states`]??{},a=new URL(t.state[`sveltekit:pageurl`]??location.href),o=t.state[S],s=G.url?m(location)===m(G.url):!1;if(o===Y&&(it||s)){i!==k.state&&(k.state=i),e(a),M[J]=E(),r&&scrollTo(r.x,r.y),J=n;return}let c=n-J;await Z({type:`popstate`,url:a,popped:{state:i,scroll:r,delta:c},accept:()=>{J=n,Y=o},block:()=>{history.go(-c)},nav_token:X,event:t})}else q||(e(new URL(location.href)),R.hash&&location.reload())}}),addEventListener(`hashchange`,()=>{q&&(q=!1,history.replaceState({...history.state,[x]:++J,[S]:Y},``,location.href))});for(let e of document.querySelectorAll(`link`))We.has(e.rel)&&(e.href=e.href);addEventListener(`pageshow`,e=>{e.persisted&&P.navigating.set(A.current=null)});function e(e){G.url=k.url=e,P.page.set(qt(k)),P.page.notify()}}async function Ht(e,{status:t=200,error:n,node_ids:r,params:i,route:a,server_route:o,data:s,form:c}){tt=!0;let l=new URL(location.href),u;({params:i={},route:a={id:null}}=await At(l,!1)||{}),u=Je.find(({id:e})=>e===a.id);let f,p=!0;try{let e=r.map(async(t,n)=>{let r=s[n];return r?.uses&&(r.uses=Ut(r.uses)),bt({loader:R.nodes[t],url:l,params:i,route:a,parent:async()=>{let t={};for(let r=0;r<n;r+=1)Object.assign(t,(await e[r]).data);return t},server_data_node:Ct(r)})}),o=await Promise.all(e);if(u){let e=u.layouts;for(let t=0;t<e.length;t++)e[t]||o.splice(t,0,void 0)}f=await yt({url:l,params:i,branch:o,status:t,error:n,errors:u?.errors,form:c,route:u??null})}catch(t){if(t instanceof d)return await F(new URL(t.location,location.href));f=await Ot({status:Ne(t),error:await $(t,{url:l,params:i,route:a}),url:l,route:a}),e.textContent=``,p=!1}f&&(f.props.page&&(f.props.page.state={}),await vt(f,e,p))}function Ut(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}var Wt=!1;function Gt(e,t=!0){let n=document.querySelector(`[autofocus]`);if(n)n.focus();else{let n=Yt(e);if(n&&document.getElementById(n)){let{x:r,y:i}=E();setTimeout(()=>{let a=history.state;Wt=!0,location.replace(new URL(`#${n}`,location.href)),history.replaceState(a,``,e),t&&scrollTo(r,i),Wt=!1})}else{let e=document.body,t=e.getAttribute(`tabindex`);e.tabIndex=-1,e.focus({preventScroll:!0,focusVisible:!1}),t===null?e.removeAttribute(`tabindex`):e.setAttribute(`tabindex`,t)}let r=getSelection();if(r&&r.type!==`None`){let e=[];for(let t=0;t<r.rangeCount;t+=1)e.push(r.getRangeAt(t));setTimeout(()=>{if(r.rangeCount===e.length){for(let t=0;t<r.rangeCount;t+=1){let n=e[t],i=r.getRangeAt(t);if(n.commonAncestorContainer!==i.commonAncestorContainer||n.startContainer!==i.startContainer||n.endContainer!==i.endContainer||n.startOffset!==i.startOffset||n.endOffset!==i.endOffset)return}r.removeAllRanges()}})}}}function Kt(e,t,n,r,i=null){let a,o,s=new Promise((e,t)=>{a=e,o=t});return s.catch(g),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:E()},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n,scroll:i},willUnload:!t,type:r,complete:s},fulfil:a,reject:o}}function qt(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Jt(e){let t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function Yt(e){let t;if(R.hash){let[,,n]=e.hash.split(`#`,3);t=n??``}else t=e.hash.slice(1);return decodeURIComponent(t)}export{A as a,b as c,ut as i,Rt as n,k as o,Bt as r,ke as s,Lt as t};
|