@sonordev/site-kit 8.8.0 → 8.9.0
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/CHANGELOG.md +22 -0
- package/README.md +9 -0
- package/agent-manifest.json +8 -1
- package/dist/AnalyticsProvider-X7JJN3QL.js +19 -0
- package/dist/{ArticleViewTracker-PV2RD3P6.js → ArticleViewTracker-7Q6AMCKX.js} +11 -10
- package/dist/{BlocksPopup-NEEFV2L3.js → BlocksPopup-U5VIYEBA.js} +4 -5
- package/dist/ChatWidget-EAATOFCT.js +30 -0
- package/dist/{FileField-MJ3RCNFJ.js → FileField-YWMSK7RF.js} +1 -3
- package/dist/{FormSpotlight-NQPQFZS7.js → FormSpotlight-MAXDW3TK.js} +1 -1
- package/dist/{FormStage-4T5PJR5K.js → FormStage-VAHRVOIZ.js} +1 -1
- package/dist/ManagedForm-7IZT7ZII.js +29 -0
- package/dist/{ManagedNewsletterForm-TUYGN6O3.js → ManagedNewsletterForm-VVXZSEAL.js} +21 -11
- package/dist/{SignalCore-OW3YIH6M.js → SignalCore-HAN4O7QG.js} +90 -36
- package/dist/{SiteChat-XMKHBSEK.js → SiteChat-3JLCEL2N.js} +2 -2
- package/dist/{SiteDesignReporter-BRH7ORQS.js → SiteDesignReporter-6CCO645E.js} +5 -6
- package/dist/SitePopups-ZGHQNGGH.js +19 -0
- package/dist/SitemapSync-5LSYCBKS.js +7 -0
- package/dist/SitemapSync.d.ts +1 -1
- package/dist/_client/booking-widget.d.ts +1 -1
- package/dist/_client/booking-widget.js +6 -7
- package/dist/_client/reviewed-signal-experiment.d.ts +9 -0
- package/dist/_client/reviewed-signal-experiment.js +89 -0
- package/dist/_client/testimonial-section.d.ts +1 -1
- package/dist/admin-auth/index.d.ts +3 -3
- package/dist/affiliates/AffiliatesWidget.d.ts +1 -1
- package/dist/affiliates/api.d.ts +1 -1
- package/dist/affiliates/index.d.ts +6 -6
- package/dist/affiliates/index.js +1 -3
- package/dist/affiliates/useAffiliates.d.ts +1 -1
- package/dist/analytics/AnalyticsProvider.d.ts +1 -1
- package/dist/analytics/dispatch.d.ts +1 -1
- package/dist/analytics/index.d.ts +6 -6
- package/dist/analytics/index.js +22 -12
- package/dist/analytics/publication-cta.d.ts +1 -1
- package/dist/analytics/send-gate.d.ts +8 -4
- package/dist/articles/Article.d.ts +1 -1
- package/dist/articles/ArticleFAQ.d.ts +1 -1
- package/dist/articles/ArticleFaqSection.d.ts +1 -1
- package/dist/articles/ArticleList.d.ts +1 -1
- package/dist/articles/ArticleViewTracker.d.ts +1 -1
- package/dist/articles/AuthorCard.d.ts +1 -1
- package/dist/articles/AuthorPage.d.ts +1 -1
- package/dist/articles/ClusterLandingPage.d.ts +1 -1
- package/dist/articles/ClusterNavigation.d.ts +1 -1
- package/dist/articles/ManagedNewsletterForm.d.ts +2 -2
- package/dist/articles/NewsletterShell.d.ts +1 -1
- package/dist/articles/NewsletterWidget.d.ts +1 -1
- package/dist/articles/PublicationLayout.d.ts +1 -1
- package/dist/articles/PublicationSidebar.d.ts +1 -1
- package/dist/articles/RelatedPosts.d.ts +1 -1
- package/dist/articles/ServiceCallout.d.ts +1 -1
- package/dist/articles/TableOfContents.d.ts +1 -1
- package/dist/articles/article-photos.d.ts +1 -1
- package/dist/articles/article-styles.d.ts +1 -1
- package/dist/articles/article-tables.d.ts +1 -1
- package/dist/articles/artwork.d.ts +1 -1
- package/dist/articles/author-schema.d.ts +1 -1
- package/dist/articles/author-social.d.ts +1 -1
- package/dist/articles/excerpt.d.ts +1 -1
- package/dist/articles/index.d.ts +1 -1
- package/dist/articles/index.js +3 -3
- package/dist/articles/news-sitemap.d.ts +1 -1
- package/dist/articles/processArticleHtml.d.ts +1 -1
- package/dist/articles/public-reads.d.ts +1 -1
- package/dist/articles/reading-time.d.ts +1 -1
- package/dist/articles/routes.d.ts +1 -1
- package/dist/articles/server-core.d.ts +1 -1
- package/dist/articles/server-ui.d.ts +1 -1
- package/dist/articles/server-ui.js +6 -6
- package/dist/articles/server.d.ts +1 -1
- package/dist/articles/server.js +5 -5
- package/dist/articles/types.d.ts +1 -1
- package/dist/articles/widget-styles.d.ts +1 -1
- package/dist/brand/extract-brand-profile.d.ts +1 -1
- package/dist/chat/ChatWidget.d.ts +1 -1
- package/dist/chat/EchoUiActions.d.ts +1 -1
- package/dist/chat/SiteChat.d.ts +2 -2
- package/dist/chat/chat-messages.d.ts +1 -1
- package/dist/chat/index.d.ts +7 -7
- package/dist/chat/index.js +17 -9
- package/dist/chat/launcher-placement.d.ts +1 -1
- package/dist/{chunk-OPUY4RS6.js → chunk-2LBKIE2K.js} +2 -1
- package/dist/{chunk-XIDWNXZN.js → chunk-3W3MN6Z7.js} +2 -2
- package/dist/{chunk-UPFU63L4.js → chunk-55GFMOI6.js} +1 -1
- package/dist/chunk-5IVD6G77.js +37 -0
- package/dist/{chunk-URLTBVRX.js → chunk-6EDE7BOE.js} +3 -3
- package/dist/{chunk-DYROJGI2.js → chunk-6NLVHTYY.js} +1 -1
- package/dist/{chunk-ZQSCMYZO.js → chunk-7643MCD2.js} +6 -3
- package/dist/chunk-7IZUUXXO.js +1 -0
- package/dist/{chunk-C7TLGL3R.js → chunk-7VMA3KCN.js} +30 -4
- package/dist/{chunk-OWZWRP7Y.js → chunk-ADQ3VCKK.js} +2 -2
- package/dist/chunk-AG2RDHYZ.js +45 -0
- package/dist/chunk-AWLPFFPO.js +36 -0
- package/dist/{chunk-LNSNA3W4.js → chunk-C4XK472G.js} +4 -3
- package/dist/{chunk-TP32MRXV.js → chunk-CJ43K7RA.js} +2 -2
- package/dist/chunk-D4M5K6JN.js +25 -0
- package/dist/{chunk-F6WLHVMQ.js → chunk-DXE6SXWW.js} +1 -1
- package/dist/{chunk-YEX5RAEU.js → chunk-EBEM5BI5.js} +38 -27
- package/dist/chunk-F3RKFGRW.js +2 -0
- package/dist/chunk-FAY6MOLL.js +62 -0
- package/dist/chunk-FRY6PBT6.js +31 -0
- package/dist/{chunk-JYITKUUB.js → chunk-G5WUX7VE.js} +1 -1
- package/dist/chunk-HJD6KXKH.js +147 -0
- package/dist/{chunk-6BFQI3ZE.js → chunk-IO6BWRZ5.js} +2 -2
- package/dist/{chunk-THXELZTQ.js → chunk-ISMHDUBW.js} +1 -1
- package/dist/{chunk-SLFYTELD.js → chunk-J4LJE4NB.js} +1 -1
- package/dist/{chunk-LQJC5S2M.js → chunk-J6D3NEDE.js} +57 -0
- package/dist/chunk-JT7GHHMV.js +56 -0
- package/dist/{chunk-NFGAXWCN.js → chunk-KGIQYVQ2.js} +31 -13
- package/dist/chunk-KMNHNCVG.js +20 -0
- package/dist/chunk-KQKUXIUD.js +25 -0
- package/dist/{chunk-M5JIHQ42.js → chunk-L3S5WH4C.js} +2 -2
- package/dist/chunk-MDBXGN6W.js +13 -0
- package/dist/chunk-MOACHHOJ.js +20 -0
- package/dist/{chunk-6DXQHNZK.js → chunk-MP35JETP.js} +1 -1
- package/dist/chunk-NHDRA4Y5.js +6 -0
- package/dist/{chunk-AYQEIMGS.js → chunk-NZHECYLF.js} +103 -22
- package/dist/{chunk-EATJPSTS.js → chunk-O5LQUBBN.js} +1 -1
- package/dist/{chunk-Y6SHFILE.js → chunk-OEOSR5EG.js} +1 -1
- package/dist/{chunk-GQN4BGK6.js → chunk-OUD4RTBD.js} +1 -1
- package/dist/chunk-PMXQPO5Q.js +78 -0
- package/dist/chunk-PVY7X5UR.js +21 -0
- package/dist/{chunk-KG5IEV7I.js → chunk-QLJ2SC3T.js} +1 -1
- package/dist/{chunk-2WM4TNDF.js → chunk-QXAJPB6O.js} +1 -1
- package/dist/{chunk-2WDWQI7K.js → chunk-RYR6N4X4.js} +1 -1
- package/dist/{chunk-G7BRCSV6.js → chunk-S33CUULL.js} +3 -3
- package/dist/{chunk-YRQS7VAH.js → chunk-S63QY5XW.js} +2 -2
- package/dist/{chunk-GXWM5KNS.js → chunk-SO6RSRUP.js} +40 -45
- package/dist/{chunk-ODOV76VW.js → chunk-STIVFCWM.js} +1 -1
- package/dist/{chunk-SVHPILS3.js → chunk-T4A5J6SJ.js} +1 -1
- package/dist/chunk-TPHOIE4I.js +73 -0
- package/dist/{chunk-IWNJCRXW.js → chunk-UG53ZW7S.js} +125 -118
- package/dist/chunk-VXCUXHZO.js +9 -0
- package/dist/{chunk-SBPUFTMP.js → chunk-WHFWDK2H.js} +2 -2
- package/dist/chunk-WYNDBJG7.js +66 -0
- package/dist/{chunk-HN7GVGWC.js → chunk-XDH5B3PR.js} +3 -3
- package/dist/{chunk-PAYCK7FC.js → chunk-XJZLXUTG.js} +1 -1
- package/dist/{chunk-IDC5CVBR.js → chunk-YVEYO3OD.js} +1 -1
- package/dist/{chunk-PSS6M4CG.js → chunk-ZRSXCT4O.js} +2 -2
- package/dist/client/index.d.ts +8 -8
- package/dist/client/index.js +9 -8
- package/dist/config/index.d.ts +1 -1
- package/dist/contracts/broadcast-layouts.d.ts +8 -0
- package/dist/contracts/crm-disposition.d.ts +87 -0
- package/dist/contracts/decision-roles.d.ts +39 -0
- package/dist/contracts/entries.d.ts +1 -1
- package/dist/contracts/funnels.d.ts +85 -2
- package/dist/contracts/portfolio.d.ts +1 -1
- package/dist/contracts/publication-branding.d.ts +3 -3
- package/dist/contracts/resonance-constants.d.ts +4 -0
- package/dist/contracts/resonance.d.ts +8461 -0
- package/dist/contracts/signal-experiments.d.ts +219 -0
- package/dist/contracts/site-edit.d.ts +2 -2
- package/dist/contracts/sites.d.ts +1 -1
- package/dist/contracts/slots.d.ts +2 -2
- package/dist/contracts/wire-schema.d.ts +36 -0
- package/dist/cta-bar/CtaBar.d.ts +1 -1
- package/dist/cta-bar/client.js +3 -2
- package/dist/cta-bar/index.d.ts +4 -4
- package/dist/cta-bar/index.js +4 -3
- package/dist/fleet/FleetHeartbeat.d.ts +2 -2
- package/dist/fleet/contract.d.ts +1 -1
- package/dist/fleet/heartbeat.d.ts +2 -2
- package/dist/fleet/index.d.ts +6 -6
- package/dist/fleet/index.js +4 -5
- package/dist/forms/FileField.d.ts +1 -1
- package/dist/forms/FormClient.d.ts +2 -2
- package/dist/forms/FormEnhancer.d.ts +1 -1
- package/dist/forms/FormField.d.ts +1 -1
- package/dist/forms/FormSpotlight.d.ts +1 -1
- package/dist/forms/FormStage.d.ts +1 -1
- package/dist/forms/ManagedForm.d.ts +1 -1
- package/dist/forms/PrivateFileField.d.ts +1 -1
- package/dist/forms/ServerForm.d.ts +3 -3
- package/dist/forms/StaticForm.d.ts +1 -1
- package/dist/forms/contract.d.ts +1 -1
- package/dist/forms/experience-plan.d.ts +1 -1
- package/dist/forms/field-autocomplete.d.ts +1 -1
- package/dist/forms/field-controls.d.ts +1 -1
- package/dist/forms/field-rules.d.ts +1 -1
- package/dist/forms/form-dom-values.d.ts +1 -1
- package/dist/forms/index.d.ts +18 -18
- package/dist/forms/index.js +21 -11
- package/dist/forms/normalize-config.d.ts +1 -1
- package/dist/forms/server.d.ts +4 -4
- package/dist/forms/server.js +3 -3
- package/dist/forms/static.d.ts +2 -2
- package/dist/forms/submitForm.d.ts +2 -2
- package/dist/forms/tracking-session.d.ts +1 -1
- package/dist/forms/useForm.d.ts +2 -2
- package/dist/forms/webmcp.d.ts +2 -2
- package/dist/images/api.d.ts +1 -1
- package/dist/images/index.d.ts +6 -6
- package/dist/images/index.js +2 -4
- package/dist/images/server.d.ts +2 -2
- package/dist/index.d.ts +13 -13
- package/dist/index.js +1 -1
- package/dist/landing/contract.d.ts +1 -1
- package/dist/landing/contract.js +2 -1
- package/dist/landing/index.d.ts +3 -3
- package/dist/landing/index.js +3 -2
- package/dist/landing/managed-server.d.ts +2 -2
- package/dist/landing/managed.d.ts +10 -2
- package/dist/landing/server.d.ts +7 -7
- package/dist/landing/server.js +11 -6
- package/dist/layout/AiDiscoveryLinks.d.ts +1 -1
- package/dist/layout/SiteKitClientProviders.d.ts +1 -1
- package/dist/layout/SiteKitLayout.d.ts +2 -2
- package/dist/layout/client.d.ts +1 -1
- package/dist/layout/client.js +15 -11
- package/dist/layout/index.d.ts +5 -5
- package/dist/layout/index.js +17 -13
- package/dist/layout/types.d.ts +2 -2
- package/dist/llms/AEOComponents.d.ts +1 -1
- package/dist/llms/SpeakableSchema.d.ts +1 -1
- package/dist/llms/api.d.ts +1 -1
- package/dist/llms/client.d.ts +3 -3
- package/dist/llms/contract.d.ts +1 -1
- package/dist/llms/generateLLMsTxt.d.ts +1 -1
- package/dist/llms/handlers.d.ts +1 -1
- package/dist/llms/index.d.ts +21 -21
- package/dist/llms/index.js +5 -5
- package/dist/llms/merge.d.ts +1 -1
- package/dist/llms/sourcedFacts.d.ts +1 -1
- package/dist/llms/types.d.ts +5 -5
- package/dist/llms/writeLLMsTxt.d.ts +3 -3
- package/dist/maps/GoogleMap.d.ts +1 -1
- package/dist/maps/NeighborhoodMap.d.ts +1 -1
- package/dist/maps/api.d.ts +1 -1
- package/dist/maps/index.d.ts +5 -5
- package/dist/maps/index.js +1 -3
- package/dist/mcp/WebMcpTools.d.ts +1 -1
- package/dist/mcp/client.d.ts +2 -2
- package/dist/mcp/discovery.d.ts +2 -2
- package/dist/mcp/handlers.d.ts +4 -4
- package/dist/mcp/index.d.ts +12 -12
- package/dist/mcp/protocol.d.ts +1 -1
- package/dist/mcp/report.d.ts +1 -1
- package/dist/mcp/serverCard.d.ts +1 -1
- package/dist/mcp/sonor.d.ts +5 -5
- package/dist/mcp/sonor.js +10 -10
- package/dist/mcp/transport.d.ts +1 -1
- package/dist/motion/Parallax.d.ts +1 -1
- package/dist/motion/ScrollScene.d.ts +1 -1
- package/dist/motion/gsap.d.ts +2 -2
- package/dist/motion/index.d.ts +9 -9
- package/dist/motion/three.d.ts +1 -1
- package/dist/og/index.d.ts +5 -5
- package/dist/og/pages.d.ts +1 -1
- package/dist/og/route-fit.d.ts +17 -0
- package/dist/og/route.d.ts +8 -0
- package/dist/og/route.js +1 -1
- package/dist/og/template.d.ts +1 -1
- package/dist/portfolio/contract.d.ts +1 -1
- package/dist/press-kit/articles/Article.d.ts +2 -2
- package/dist/press-kit/articles/ArticleFaqSection.d.ts +1 -1
- package/dist/press-kit/articles/ArticleList.d.ts +2 -2
- package/dist/press-kit/articles/AuthorCard.d.ts +1 -1
- package/dist/press-kit/articles/AuthorPage.d.ts +1 -1
- package/dist/press-kit/articles/ClusterLandingPage.d.ts +2 -2
- package/dist/press-kit/articles/ClusterNavigation.d.ts +2 -2
- package/dist/press-kit/articles/ManagedNewsletterForm.d.ts +2 -2
- package/dist/press-kit/articles/PublicationLayout.d.ts +2 -2
- package/dist/press-kit/articles/PublicationSidebar.d.ts +1 -1
- package/dist/press-kit/articles/RelatedPosts.d.ts +2 -2
- package/dist/press-kit/articles/TableOfContents.d.ts +1 -1
- package/dist/press-kit/articles/article-body.d.ts +1 -1
- package/dist/press-kit/articles/article-headings.d.ts +1 -1
- package/dist/press-kit/articles/article-photos.d.ts +1 -1
- package/dist/press-kit/articles/artwork.d.ts +2 -2
- package/dist/press-kit/articles/author-schema.d.ts +2 -2
- package/dist/press-kit/articles/author-social.d.ts +1 -1
- package/dist/press-kit/articles/index.d.ts +23 -23
- package/dist/press-kit/articles/news-sitemap.d.ts +2 -2
- package/dist/press-kit/articles/public-reads.d.ts +1 -1
- package/dist/press-kit/articles/publication-reads.d.ts +2 -2
- package/dist/press-kit/articles/reading-time.d.ts +1 -1
- package/dist/press-kit/articles/server-core.d.ts +20 -20
- package/dist/press-kit/articles/server-ui.d.ts +20 -20
- package/dist/press-kit/articles/types.d.ts +1 -1
- package/dist/proxy/index.d.ts +5 -5
- package/dist/proxy/index.js +1 -1
- package/dist/reputation/TestimonialSection.d.ts +1 -1
- package/dist/reputation/VisualReviewCard.d.ts +1 -1
- package/dist/reputation/api.d.ts +1 -1
- package/dist/reputation/index.d.ts +4 -4
- package/dist/reputation/server.d.ts +3 -3
- package/dist/resonance/ResonanceRuntime.d.ts +7 -0
- package/dist/resonance/bridge.d.ts +16 -0
- package/dist/resonance/consent-adapter.d.ts +26 -0
- package/dist/resonance/controller-registry.d.ts +14 -0
- package/dist/resonance/controller.d.ts +103 -0
- package/dist/resonance/form-context.d.ts +5 -0
- package/dist/resonance/index.d.ts +4 -0
- package/dist/resonance/index.js +9 -0
- package/dist/resonance/meta-pixel.d.ts +67 -0
- package/dist/resonance/providers.d.ts +32 -0
- package/dist/resonance/runtime-core.d.ts +5 -0
- package/dist/revalidate/index.d.ts +3 -3
- package/dist/revalidate/index.js +2 -2
- package/dist/robots/index.d.ts +3 -3
- package/dist/robots/indexnow.js +2 -2
- package/dist/runtime/index.d.ts +7 -7
- package/dist/runtime/index.js +4 -5
- package/dist/runtime-core-WT7KKLWQ.js +2213 -0
- package/dist/seo/ManagedFAQ.d.ts +1 -1
- package/dist/seo/ManagedInternalLinks.d.ts +1 -1
- package/dist/seo/ManagedSchema.d.ts +1 -1
- package/dist/seo/ManagedScripts.d.ts +1 -1
- package/dist/seo/client.d.ts +1 -1
- package/dist/seo/client.js +3 -5
- package/dist/seo/entry-indexnow.d.ts +1 -1
- package/dist/seo/entry-llms-client.d.ts +1 -1
- package/dist/seo/entry-llms-contract.d.ts +1 -1
- package/dist/seo/entry-llms.d.ts +1 -1
- package/dist/seo/entry-meta-contract.d.ts +1 -1
- package/dist/seo/entry-og-route.d.ts +1 -1
- package/dist/seo/entry-og.d.ts +1 -1
- package/dist/seo/entry-pages-contract.d.ts +1 -1
- package/dist/seo/entry-redirects.d.ts +1 -1
- package/dist/seo/entry-robots.d.ts +1 -1
- package/dist/seo/entry-sitemap.d.ts +1 -1
- package/dist/seo/getManagedMetadata.d.ts +1 -1
- package/dist/seo/index.d.ts +12 -12
- package/dist/seo/index.js +9 -11
- package/dist/seo/indexnow.d.ts +1 -1
- package/dist/seo/indexnow.js +2 -2
- package/dist/seo/llms/client.d.ts +1 -1
- package/dist/seo/llms/contract.d.ts +1 -1
- package/dist/seo/llms.d.ts +1 -1
- package/dist/seo/llms.js +5 -5
- package/dist/seo/meta/contract.d.ts +1 -1
- package/dist/seo/og/route.d.ts +1 -1
- package/dist/seo/og/route.js +1 -1
- package/dist/seo/og.d.ts +1 -1
- package/dist/seo/pages/contract.d.ts +1 -1
- package/dist/seo/redirects.d.ts +1 -1
- package/dist/seo/register-sitemap-cli-impl.d.ts +1 -1
- package/dist/seo/register-sitemap-cli.js +1 -1
- package/dist/seo/robots.d.ts +1 -1
- package/dist/seo/routing.d.ts +1 -1
- package/dist/seo/server.d.ts +4 -4
- package/dist/seo/server.js +3 -3
- package/dist/seo/sitemap.d.ts +1 -1
- package/dist/seo/sitemap.js +3 -3
- package/dist/seo/types.d.ts +1 -1
- package/dist/seo-meta/contract.d.ts +1 -1
- package/dist/seo-pages/contract.d.ts +1 -1
- package/dist/server/index.d.ts +5 -5
- package/dist/server/index.js +3 -3
- package/dist/server/mint-site-token.d.ts +1 -1
- package/dist/server/server-fetch.d.ts +8 -0
- package/dist/{server-api-XIKDWSNO.js → server-api-A34TABT2.js} +2 -2
- package/dist/shared/build-entries.d.ts +3 -1
- package/dist/shared/color.d.ts +1 -1
- package/dist/shared/fetchWithRetry.d.ts +6 -0
- package/dist/shared/frame.d.ts +1 -1
- package/dist/shared/identity-storage.d.ts +6 -4
- package/dist/shared/identity.d.ts +1 -3
- package/dist/shared/index.d.ts +5 -5
- package/dist/shared/index.js +1 -1
- package/dist/shared/measurement-analytics.d.ts +1 -0
- package/dist/shared/measurement-policy.d.ts +6 -0
- package/dist/shared/measurement-proof.d.ts +5 -0
- package/dist/shared/measurement-store.d.ts +34 -0
- package/dist/shared/measurement-writer.d.ts +6 -0
- package/dist/shared/publishCredential.d.ts +1 -1
- package/dist/shared/reporting-gate.d.ts +3 -1
- package/dist/shared/site-token-claims.d.ts +18 -0
- package/dist/shared/site-token-configuration.d.ts +9 -0
- package/dist/shared/site-token-refresh.d.ts +7 -0
- package/dist/shared/site-token-state.d.ts +23 -0
- package/dist/shared/siteToken.d.ts +5 -39
- package/dist/shared/sonor-auth-state.d.ts +3 -0
- package/dist/shared/sonor-beacon.d.ts +13 -0
- package/dist/shared/sonor-fetch-runtime.d.ts +2 -0
- package/dist/shared/sonor-fetch.d.ts +7 -0
- package/dist/shared/sonorFetch.d.ts +4 -49
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/ReviewedSignalExperiment.d.ts +9 -0
- package/dist/signal/SignalBridge.d.ts +4 -4
- package/dist/signal/SignalCore.d.ts +2 -1
- package/dist/signal/SignalExperiment.d.ts +13 -5
- package/dist/signal/index.d.ts +3 -3
- package/dist/signal/index.js +4 -73
- package/dist/signal/store.d.ts +10 -7
- package/dist/signal/types.d.ts +4 -0
- package/dist/sitemap/index.d.ts +5 -5
- package/dist/sitemap/index.js +3 -3
- package/dist/sites/contract.d.ts +1 -1
- package/dist/sites/normalize.d.ts +1 -1
- package/dist/slots/ManagedLink.d.ts +2 -2
- package/dist/slots/ManagedList.d.ts +2 -2
- package/dist/slots/ManagedRichText.d.ts +1 -1
- package/dist/slots/ManagedSlot.d.ts +1 -1
- package/dist/slots/contract.d.ts +1 -1
- package/dist/slots/edit/locate.d.ts +1 -1
- package/dist/slots/index.d.ts +14 -14
- package/dist/slots/index.js +2 -2
- package/dist/slots/server-api.d.ts +1 -1
- package/dist/{chunk-FLOJUMFR.js → sonor-fetch-runtime-3PFGUXMF.js} +27 -36
- package/dist/sync/AddToCalendar.d.ts +1 -1
- package/dist/sync/BookingWidget.d.ts +1 -1
- package/dist/sync/MeetingFormatStep.d.ts +1 -1
- package/dist/sync/api.d.ts +2 -2
- package/dist/sync/booking-flow.d.ts +1 -1
- package/dist/sync/index.d.ts +3 -3
- package/dist/sync/index.js +6 -7
- package/dist/types.d.ts +6 -6
- package/dist/website/BlocksPopup.d.ts +1 -1
- package/dist/website/PopupBlocks.d.ts +1 -1
- package/dist/website/SiteDesignReporter.d.ts +2 -2
- package/dist/website/SitePopups.d.ts +1 -1
- package/dist/website/contract.d.ts +1 -1
- package/dist/website/cta-bar.d.ts +1 -1
- package/dist/website/cta-bar.js +4 -3
- package/dist/website/design.d.ts +2 -2
- package/dist/website/images/server.d.ts +1 -1
- package/dist/website/images-server.d.ts +1 -1
- package/dist/website/images.d.ts +1 -1
- package/dist/website/images.js +2 -4
- package/dist/website/index.d.ts +4 -4
- package/dist/website/index.js +5 -6
- package/dist/website/landing/server.d.ts +1 -1
- package/dist/website/landing/server.js +11 -6
- package/dist/website/landing-server.d.ts +1 -1
- package/dist/website/landing.d.ts +1 -1
- package/dist/website/landing.js +3 -2
- package/dist/website/popup-rules.d.ts +2 -2
- package/dist/website/popup-types.d.ts +1 -1
- package/dist/website/popups.d.ts +4 -4
- package/dist/website/popups.js +14 -8
- package/dist/website/slots/contract.d.ts +1 -1
- package/dist/website/slots-contract.d.ts +1 -1
- package/dist/website/slots.d.ts +2 -2
- package/dist/website/slots.js +2 -2
- package/dist/{writeLLMsTxt-4HHUAOA6.js → writeLLMsTxt-JUACXQKP.js} +2 -2
- package/docs.json +5 -0
- package/package.json +8 -2
- package/src/analytics/README.md +21 -0
- package/src/cta-bar/README.md +4 -0
- package/src/forms/README.md +29 -0
- package/src/landing/README.md +14 -0
- package/src/layout/README.md +3 -0
- package/src/og/README.md +28 -0
- package/src/resonance/README.md +273 -0
- package/src/runtime/README.md +6 -1
- package/src/signal/README.md +21 -0
- package/src/website/README.md +14 -2
- package/dist/AnalyticsProvider-7SBJ27SI.js +0 -13
- package/dist/ChatWidget-V46UBDOM.js +0 -20
- package/dist/ManagedForm-DDDVMKLJ.js +0 -19
- package/dist/SitePopups-VU2C3Z6B.js +0 -13
- package/dist/SitemapSync-C4H3HF3L.js +0 -9
- package/dist/chunk-5ROTTMBL.js +0 -19
- package/dist/chunk-5TM3WPCI.js +0 -7
- package/dist/chunk-7HW4TZB5.js +0 -148
- package/dist/chunk-IPQKQEWI.js +0 -52
- package/dist/chunk-LCDVPAMR.js +0 -24
- package/dist/chunk-SHAUX2MQ.js +0 -163
- /package/dist/{chunk-3MJNBOUO.js → chunk-2QPVU63T.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @sonordev/site-kit Changelog
|
|
2
2
|
|
|
3
|
+
## 8.9.0
|
|
4
|
+
|
|
5
|
+
- Keep the CTA bar's actions and page content server-rendered on dynamic routes with Next.js Cache Components. Pathname-dependent CTA behavior and the Resonance runtime wait inside their own Suspense boundaries.
|
|
6
|
+
|
|
7
|
+
- Add `@sonordev/site-kit/resonance`, the measurement runtime that connects your site's consent manager to scoped consent receipts and approved advertising destinations. Register one adapter for the consent manager you already use; the runtime reads its current choices, never creates a banner, and keeps the visitor proof in memory only. `SiteKitLayout` mounts it as a childless sibling, so pages and managed forms render the same when measurement is unavailable. Google tags load only after the required advertising grants. Sites that don't configure it behave as before.
|
|
8
|
+
|
|
9
|
+
- Gate analytics collection, identity initialization, Signal and retries by the visitor's current purpose permission. Explicit denial drops pending tracking work, and a later grant starts fresh without replaying what was denied. A site with no configured requirement keeps its first-party analytics behavior, recorded as an unknown policy rather than a consent grant. Forms and chat keep working without optional measurement.
|
|
10
|
+
|
|
11
|
+
- Show an experiment variant as a measured exposure only when the server confirms the visitor's current assignment. Without that confirmation, or without consent, the control content shows. Accepted forms are still recorded as conversions by the server, never by the browser.
|
|
12
|
+
|
|
13
|
+
- Add the Meta browser pixel loader, switched off in this release. 8.9.0 can't start it: this build implements no loader controls revision, so even a capability witness from Sonor's server can't enable it, and a later release turns it on. When it's on, it will load Meta's script only after the three advertising grants, on pages a person has approved, with a clean address, no fragment and a clean referrer, outside frames, previews and signed-in areas. It mints Meta's own first-party cookies and sends no browser events, passes no user data, reads nothing from the page and attaches no listeners. A site that already has a Meta pixel or a tag manager gets a status code instead of a second pixel. Withdrawing consent pauses the pixel and expires `_fbp` and `_fbc`. The same-page cookie observation now also requires the page to be approved. Read `getResonanceMeasurementStatus()` for the current blocker codes, and see the Resonance page for the Content Security Policy hosts a strict site will need.
|
|
14
|
+
|
|
15
|
+
- Attach one optional Google click identifier to a new consented page-view occurrence. Only the current matching address is read, after advertising permission, including when analytics consent is denied. Ambiguous values are rejected, and nothing is kept in query history or browser storage.
|
|
16
|
+
|
|
17
|
+
- Load less for the same behavior: consent state is read through smaller shared readers that keep permission checks synchronous across bundles, and campaign validation schemas stay out of the deferred Signal runtime.
|
|
18
|
+
|
|
19
|
+
- The Resonance schemas and rules this release uses are the ones published in `@sonordev/contracts` 2.22.0.
|
|
20
|
+
|
|
21
|
+
## 8.8.1
|
|
22
|
+
|
|
23
|
+
- Add optional full-wordmark presentation to runtime OG cards. Branded cards keep one photograph while fitting the title, and existing cards retain their layout. Use resolved logo assets and intrinsic dimensions with the metadata-file factory.
|
|
24
|
+
|
|
3
25
|
## 8.8.0
|
|
4
26
|
|
|
5
27
|
- `@sonordev/site-kit/portfolio/contract` adds the verification, a proof-stage case study section for a build a Lighthouse run can't honestly score, such as an app behind a sign-in. It's a short list of checks, each saying what was checked, where, how, when, what came out and what it doesn't cover. New: `portfolioVerification` in `PORTFOLIO_SECTION_TYPES` (in the proof stage), `verificationProblems`, `readVerificationChecks`, `verificationLink`, `isVacuousScope`, `isPlaceholderText`, `isRealDay`, `latestVerificationDay`, `PORTFOLIO_VERIFICATION_JSON_SCHEMA`, the `PortfolioVerificationData` and `VerificationCheck` types and the limits `VERIFICATION_MAX_CHECKS`, `VERIFICATION_FIELD_MAX_CHARS` and `VERIFICATION_EARLIEST_DAY`. Nothing was removed or renamed. A `Record<PortfolioSectionType, ...>` of your own needs an entry for `portfolioVerification` before it type-checks.
|
package/README.md
CHANGED
|
@@ -4,6 +4,15 @@ All-in-one integration kit for [Sonor](https://sonor.io)-powered Next.js sites.
|
|
|
4
4
|
|
|
5
5
|
Articles, publications and Broadcast-powered editorial artwork live in [`@sonordev/press-kit`](https://www.npmjs.com/package/@sonordev/press-kit), a companion built on Site Kit. Legacy article imports remain compatible in 8.x.
|
|
6
6
|
|
|
7
|
+
## Resonance measurement
|
|
8
|
+
|
|
9
|
+
Site Kit 8.9 adds a consent adapter and childless measurement runtime through
|
|
10
|
+
[`@sonordev/site-kit/resonance`](src/resonance/README.md). It uses current server
|
|
11
|
+
receipts for advertising eligibility and keeps the existing analytics provider
|
|
12
|
+
as the pageview counter. Connect your maintained consent manager before enabling
|
|
13
|
+
measurement. Meta browser delivery remains blocked pending verified automatic
|
|
14
|
+
collection controls.
|
|
15
|
+
|
|
7
16
|
## Install
|
|
8
17
|
|
|
9
18
|
```bash
|
package/agent-manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": "@sonordev/site-kit",
|
|
4
|
-
"version": "8.
|
|
4
|
+
"version": "8.9.0",
|
|
5
5
|
"description": "Machine-readable manifest for coding agents integrating a site with Sonor. See AGENTS.md (shipped) and docs/SITE-KIT-AGENT-NATIVE.md.",
|
|
6
6
|
"env": {
|
|
7
7
|
"required": [
|
|
@@ -141,6 +141,13 @@
|
|
|
141
141
|
"purpose": "Page views, scroll depth, web vitals, heatmap clicks.",
|
|
142
142
|
"caution": "SiteKitLayout already mounts this as a deferred, childless sibling (site-kit >=3.0.2); configure it with analytics={{ ... }} rather than mounting it yourself. Never wrap {children} in AnalyticsProvider: it puts analytics in the hydration path, and lazy-loaded with next/dynamic({ ssr: false }) it de-opts the route to client rendering (SSR bailout). Track custom events with the standalone trackEvent / trackConversion (no provider needed); useAnalytics() throws outside a provider."
|
|
143
143
|
},
|
|
144
|
+
{
|
|
145
|
+
"name": "resonance",
|
|
146
|
+
"import": "@sonordev/site-kit/resonance",
|
|
147
|
+
"side": "client",
|
|
148
|
+
"purpose": "Purpose-aware measurement and the maintained CMP adapter. SiteKitLayout mounts its childless runtime. Read getResonanceMeasurementStatus for eligibility and provider blockers.",
|
|
149
|
+
"caution": "Advertising requires current server proof and purpose grants. Unknown is never a grant. Meta browser collection remains blocked pending verified automatic collection controls. Accepted forms are server conversions. Package availability does not establish site installation or provider delivery."
|
|
150
|
+
},
|
|
144
151
|
{
|
|
145
152
|
"name": "signal",
|
|
146
153
|
"import": "@sonordev/site-kit/signal",
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-SO6RSRUP.js';
|
|
2
|
+
import './chunk-AG2RDHYZ.js';
|
|
3
|
+
import './chunk-JT7GHHMV.js';
|
|
4
|
+
import './chunk-L2V5PUFN.js';
|
|
5
|
+
import './chunk-PMXQPO5Q.js';
|
|
6
|
+
import './chunk-NHDRA4Y5.js';
|
|
7
|
+
import './chunk-D4M5K6JN.js';
|
|
8
|
+
import './chunk-GJWI74ZZ.js';
|
|
9
|
+
import './chunk-NZOJHERI.js';
|
|
10
|
+
import './chunk-KMNHNCVG.js';
|
|
11
|
+
import './chunk-5IVD6G77.js';
|
|
12
|
+
import './chunk-DXE6SXWW.js';
|
|
13
|
+
import './chunk-7643MCD2.js';
|
|
14
|
+
import './chunk-64XODP7M.js';
|
|
15
|
+
import './chunk-VXCUXHZO.js';
|
|
16
|
+
import './chunk-W7OPEMGJ.js';
|
|
17
|
+
import './chunk-A4CC4ZG3.js';
|
|
18
|
+
import './chunk-FRY6PBT6.js';
|
|
19
|
+
import './chunk-PKBMQBKP.js';
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import './chunk-
|
|
2
|
+
import './chunk-OEOSR5EG.js';
|
|
3
3
|
import './chunk-B7T2SFUF.js';
|
|
4
|
-
import './chunk-
|
|
4
|
+
import './chunk-2LBKIE2K.js';
|
|
5
|
+
import './chunk-TPHOIE4I.js';
|
|
5
6
|
import './chunk-6T6CQVNL.js';
|
|
6
|
-
import './chunk-
|
|
7
|
+
import './chunk-PVY7X5UR.js';
|
|
7
8
|
import { useDeferredActivation } from './chunk-YC7ELZS3.js';
|
|
8
9
|
import './chunk-H72ZFO3F.js';
|
|
9
10
|
import './chunk-4KZ6W3ZH.js';
|
|
10
11
|
import { withSiteBody } from './chunk-MJP63SSS.js';
|
|
11
12
|
import './chunk-YVKRYQRG.js';
|
|
12
13
|
import './chunk-FESKKJAS.js';
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
import './chunk-
|
|
14
|
+
import './chunk-AG2RDHYZ.js';
|
|
15
|
+
import './chunk-JT7GHHMV.js';
|
|
16
|
+
import './chunk-D4M5K6JN.js';
|
|
16
17
|
import './chunk-GJWI74ZZ.js';
|
|
17
|
-
import './chunk-
|
|
18
|
-
import { sonorFetch } from './chunk-
|
|
19
|
-
import './chunk-7HW4TZB5.js';
|
|
18
|
+
import './chunk-5IVD6G77.js';
|
|
19
|
+
import { sonorFetch } from './chunk-VXCUXHZO.js';
|
|
20
20
|
import { readPublishedApiConfig, readPublishedSite } from './chunk-W7OPEMGJ.js';
|
|
21
|
-
import './chunk-
|
|
21
|
+
import './chunk-A4CC4ZG3.js';
|
|
22
|
+
import './chunk-FRY6PBT6.js';
|
|
22
23
|
import './chunk-PKBMQBKP.js';
|
|
23
24
|
import { useEffect } from 'react';
|
|
24
25
|
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { getSiteDesignTokens } from './chunk-
|
|
2
|
+
import { getSiteDesignTokens } from './chunk-6EDE7BOE.js';
|
|
3
3
|
import { DEFAULT_POPUP_TOKENS, PopupBlocks } from './chunk-52KO4LKD.js';
|
|
4
4
|
import './chunk-XLAHRN4B.js';
|
|
5
5
|
import { normalizePopupBlocks, toHexColor, readableOn } from './chunk-XHYE24HU.js';
|
|
6
6
|
import './chunk-S22FSH7C.js';
|
|
7
|
-
import './chunk-
|
|
7
|
+
import './chunk-DXE6SXWW.js';
|
|
8
|
+
import './chunk-7643MCD2.js';
|
|
8
9
|
import './chunk-64XODP7M.js';
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-7HW4TZB5.js';
|
|
10
|
+
import './chunk-VXCUXHZO.js';
|
|
11
11
|
import './chunk-W7OPEMGJ.js';
|
|
12
|
-
import './chunk-F6WLHVMQ.js';
|
|
13
12
|
import './chunk-PKBMQBKP.js';
|
|
14
13
|
import { useState } from 'react';
|
|
15
14
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export { ChatWidget, EchoChat, isChatEnabled } from './chunk-CJ43K7RA.js';
|
|
2
|
+
import './chunk-6T6CQVNL.js';
|
|
3
|
+
import './chunk-JE4A5S4F.js';
|
|
4
|
+
import './chunk-27FISYK4.js';
|
|
5
|
+
import './chunk-UG53ZW7S.js';
|
|
6
|
+
import './chunk-Q6E4OPGG.js';
|
|
7
|
+
import './chunk-MDBXGN6W.js';
|
|
8
|
+
import './chunk-PVY7X5UR.js';
|
|
9
|
+
import './chunk-C2FZBUSS.js';
|
|
10
|
+
import './chunk-TYSIAWC3.js';
|
|
11
|
+
import './chunk-HW7B43E5.js';
|
|
12
|
+
import './chunk-NJCTQH2P.js';
|
|
13
|
+
import './chunk-S22FSH7C.js';
|
|
14
|
+
import './chunk-L2V5PUFN.js';
|
|
15
|
+
import './chunk-PMXQPO5Q.js';
|
|
16
|
+
import './chunk-NHDRA4Y5.js';
|
|
17
|
+
import './chunk-D4M5K6JN.js';
|
|
18
|
+
import './chunk-GJWI74ZZ.js';
|
|
19
|
+
import './chunk-NZOJHERI.js';
|
|
20
|
+
import './chunk-KMNHNCVG.js';
|
|
21
|
+
import './chunk-5IVD6G77.js';
|
|
22
|
+
import './chunk-DXE6SXWW.js';
|
|
23
|
+
import './chunk-7643MCD2.js';
|
|
24
|
+
import './chunk-64XODP7M.js';
|
|
25
|
+
import './chunk-VXCUXHZO.js';
|
|
26
|
+
import './chunk-W7OPEMGJ.js';
|
|
27
|
+
import './chunk-A4CC4ZG3.js';
|
|
28
|
+
import './chunk-MOACHHOJ.js';
|
|
29
|
+
import './chunk-FRY6PBT6.js';
|
|
30
|
+
import './chunk-PKBMQBKP.js';
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { sonorFetch } from './chunk-
|
|
3
|
-
import './chunk-7HW4TZB5.js';
|
|
2
|
+
import { sonorFetch } from './chunk-VXCUXHZO.js';
|
|
4
3
|
import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
|
|
5
|
-
import './chunk-F6WLHVMQ.js';
|
|
6
4
|
import './chunk-PKBMQBKP.js';
|
|
7
5
|
import React2, { useState, useRef } from 'react';
|
|
8
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { StageStyles, SummaryTick } from './chunk-3YKQLC7J.js';
|
|
3
|
-
import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-
|
|
3
|
+
import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-OUD4RTBD.js';
|
|
4
4
|
import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
|
|
5
5
|
import { isEmptyValue, unseenControlValues, isDisplayOnly } from './chunk-C2FZBUSS.js';
|
|
6
6
|
import { FormField } from './chunk-CVADNHJ4.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { StageStyles, SummaryTick } from './chunk-3YKQLC7J.js';
|
|
3
|
-
import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-
|
|
3
|
+
import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-OUD4RTBD.js';
|
|
4
4
|
import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
|
|
5
5
|
import { isEmptyValue, unseenControlValues } from './chunk-C2FZBUSS.js';
|
|
6
6
|
import { FormField } from './chunk-CVADNHJ4.js';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export { ManagedForm } from './chunk-S33CUULL.js';
|
|
2
|
+
import './chunk-OUD4RTBD.js';
|
|
3
|
+
import './chunk-UG53ZW7S.js';
|
|
4
|
+
import './chunk-Q6E4OPGG.js';
|
|
5
|
+
import './chunk-MDBXGN6W.js';
|
|
6
|
+
import './chunk-PVY7X5UR.js';
|
|
7
|
+
import './chunk-C2FZBUSS.js';
|
|
8
|
+
import './chunk-DXO6SBMD.js';
|
|
9
|
+
import './chunk-CVADNHJ4.js';
|
|
10
|
+
import './chunk-TYSIAWC3.js';
|
|
11
|
+
import './chunk-HW7B43E5.js';
|
|
12
|
+
import './chunk-NJCTQH2P.js';
|
|
13
|
+
import './chunk-L2V5PUFN.js';
|
|
14
|
+
import './chunk-PMXQPO5Q.js';
|
|
15
|
+
import './chunk-NHDRA4Y5.js';
|
|
16
|
+
import './chunk-D4M5K6JN.js';
|
|
17
|
+
import './chunk-GJWI74ZZ.js';
|
|
18
|
+
import './chunk-NZOJHERI.js';
|
|
19
|
+
import './chunk-KMNHNCVG.js';
|
|
20
|
+
import './chunk-5IVD6G77.js';
|
|
21
|
+
import './chunk-DXE6SXWW.js';
|
|
22
|
+
import './chunk-7643MCD2.js';
|
|
23
|
+
import './chunk-64XODP7M.js';
|
|
24
|
+
import './chunk-VXCUXHZO.js';
|
|
25
|
+
import './chunk-W7OPEMGJ.js';
|
|
26
|
+
import './chunk-A4CC4ZG3.js';
|
|
27
|
+
import './chunk-MOACHHOJ.js';
|
|
28
|
+
import './chunk-FRY6PBT6.js';
|
|
29
|
+
import './chunk-PKBMQBKP.js';
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import './chunk-
|
|
2
|
-
import './chunk-YGGDU6C3.js';
|
|
3
|
-
import './chunk-G7BRCSV6.js';
|
|
4
|
-
import './chunk-GQN4BGK6.js';
|
|
1
|
+
import './chunk-6NLVHTYY.js';
|
|
5
2
|
import './chunk-SOD2F6C2.js';
|
|
6
|
-
import
|
|
3
|
+
import './chunk-YGGDU6C3.js';
|
|
4
|
+
import './chunk-S33CUULL.js';
|
|
5
|
+
import './chunk-OUD4RTBD.js';
|
|
6
|
+
import { useForm } from './chunk-UG53ZW7S.js';
|
|
7
7
|
import './chunk-Q6E4OPGG.js';
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
8
|
+
import './chunk-MDBXGN6W.js';
|
|
9
|
+
import './chunk-PVY7X5UR.js';
|
|
10
|
+
import './chunk-J4LJE4NB.js';
|
|
10
11
|
import './chunk-C2FZBUSS.js';
|
|
11
12
|
import './chunk-YC7ELZS3.js';
|
|
12
13
|
import './chunk-DXO6SBMD.js';
|
|
@@ -17,12 +18,21 @@ import './chunk-NJCTQH2P.js';
|
|
|
17
18
|
import { NewsletterShell } from './chunk-JHTPHA2D.js';
|
|
18
19
|
import './chunk-DJAYFHVF.js';
|
|
19
20
|
import './chunk-L2V5PUFN.js';
|
|
21
|
+
import './chunk-PMXQPO5Q.js';
|
|
22
|
+
import './chunk-NHDRA4Y5.js';
|
|
23
|
+
import './chunk-D4M5K6JN.js';
|
|
20
24
|
import './chunk-GJWI74ZZ.js';
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
23
|
-
import './chunk-
|
|
25
|
+
import './chunk-NZOJHERI.js';
|
|
26
|
+
import './chunk-KMNHNCVG.js';
|
|
27
|
+
import './chunk-5IVD6G77.js';
|
|
28
|
+
import './chunk-DXE6SXWW.js';
|
|
29
|
+
import './chunk-7643MCD2.js';
|
|
30
|
+
import './chunk-64XODP7M.js';
|
|
31
|
+
import './chunk-VXCUXHZO.js';
|
|
24
32
|
import './chunk-W7OPEMGJ.js';
|
|
25
|
-
import './chunk-
|
|
33
|
+
import './chunk-A4CC4ZG3.js';
|
|
34
|
+
import './chunk-MOACHHOJ.js';
|
|
35
|
+
import './chunk-FRY6PBT6.js';
|
|
26
36
|
import './chunk-PKBMQBKP.js';
|
|
27
37
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
28
38
|
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { getFreshCredential } from './chunk-FAY6MOLL.js';
|
|
3
|
+
import { isSiteToken } from './chunk-TPHOIE4I.js';
|
|
4
|
+
import { getOrCreateSessionId, getOrCreateVisitorId } from './chunk-JT7GHHMV.js';
|
|
3
5
|
import { onPageLeave } from './chunk-L2V5PUFN.js';
|
|
6
|
+
import { RESONANCE_SUBJECT_HEADER } from './chunk-NHDRA4Y5.js';
|
|
7
|
+
import './chunk-D4M5K6JN.js';
|
|
4
8
|
import './chunk-GJWI74ZZ.js';
|
|
5
|
-
import './chunk-
|
|
6
|
-
import
|
|
9
|
+
import { experimentMeasurementPermitted, currentSubjectProof } from './chunk-KMNHNCVG.js';
|
|
10
|
+
import './chunk-5IVD6G77.js';
|
|
11
|
+
import './chunk-DXE6SXWW.js';
|
|
12
|
+
import { resolveAnalyticsTarget } from './chunk-7643MCD2.js';
|
|
7
13
|
import './chunk-64XODP7M.js';
|
|
8
|
-
import { sonorFetch } from './chunk-
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import './chunk-F6WLHVMQ.js';
|
|
14
|
+
import { sonorFetch } from './chunk-VXCUXHZO.js';
|
|
15
|
+
import { getClientApiConfig, readPublishedSite } from './chunk-W7OPEMGJ.js';
|
|
16
|
+
import { subscribeMeasurementPolicy, measurementPolicySnapshot, serverMeasurementPolicySnapshot, analyticsPurposePermitted } from './chunk-FRY6PBT6.js';
|
|
12
17
|
import './chunk-PKBMQBKP.js';
|
|
13
|
-
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
18
|
+
import { useState, useRef, useSyncExternalStore, useEffect, useCallback } from 'react';
|
|
14
19
|
|
|
20
|
+
var getClientSite = () => readPublishedSite() || (typeof window !== "undefined" ? window.location.host : "");
|
|
15
21
|
function getApiConfig() {
|
|
16
22
|
return getClientApiConfig();
|
|
17
23
|
}
|
|
@@ -56,6 +62,7 @@ function SignalCore({
|
|
|
56
62
|
onState
|
|
57
63
|
}) {
|
|
58
64
|
const [config, setConfig] = useState(null);
|
|
65
|
+
const [assignmentRevision, setAssignmentRevision] = useState(0);
|
|
59
66
|
const [loading, setLoading] = useState(true);
|
|
60
67
|
const [error, setError] = useState(null);
|
|
61
68
|
const eventSourceRef = useRef(null);
|
|
@@ -66,19 +73,53 @@ function SignalCore({
|
|
|
66
73
|
const scrollDepthRef = useRef(0);
|
|
67
74
|
const clickCountRef = useRef(0);
|
|
68
75
|
const { apiUrl, apiKey } = getApiConfig();
|
|
69
|
-
const
|
|
70
|
-
const
|
|
76
|
+
const policy = useSyncExternalStore(subscribeMeasurementPolicy, measurementPolicySnapshot, serverMeasurementPolicySnapshot);
|
|
77
|
+
const [identity, setIdentity] = useState({ visitor: "", session: "" });
|
|
78
|
+
const permitted = () => analyticsPurposePermitted() && !!resolveAnalyticsTarget({ apiUrl, apiKey });
|
|
79
|
+
const epoch = policy.collectionEpoch;
|
|
80
|
+
const allowed = () => permitted() && measurementPolicySnapshot().collectionEpoch === epoch;
|
|
71
81
|
useEffect(() => {
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
if (!permitted()) {
|
|
83
|
+
setIdentity({ visitor: "", session: "" });
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
setIdentity({ visitor: externalVisitorId || getOrCreateVisitorId(), session: externalSessionId || getOrCreateSessionId() });
|
|
87
|
+
}, [epoch, externalVisitorId, externalSessionId, apiUrl, apiKey]);
|
|
88
|
+
const resolvedVisitorId = identity.visitor;
|
|
89
|
+
const resolvedSessionId = identity.session;
|
|
90
|
+
useEffect(() => subscribeMeasurementPolicy(() => {
|
|
91
|
+
if (!allowed()) {
|
|
92
|
+
eventQueueRef.current = [];
|
|
93
|
+
assignmentsRef.current.clear();
|
|
94
|
+
eventSourceRef.current?.close();
|
|
95
|
+
eventSourceRef.current = null;
|
|
96
|
+
if (flushTimeoutRef.current) clearTimeout(flushTimeoutRef.current);
|
|
97
|
+
setConfig(null);
|
|
98
|
+
}
|
|
99
|
+
}), [epoch, apiUrl, apiKey]);
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
onState({ config, loading, error, assignmentRevision });
|
|
102
|
+
}, [config, loading, error, assignmentRevision, onState]);
|
|
74
103
|
const loadExperimentAssignment = useCallback(async (experimentId) => {
|
|
75
|
-
|
|
76
|
-
const
|
|
104
|
+
if (!allowed() || !resolvedVisitorId) return null;
|
|
105
|
+
const managed = measurementPolicySnapshot().policy === "configured";
|
|
106
|
+
if (managed && !experimentMeasurementPermitted()) return null;
|
|
107
|
+
const proof = managed ? currentSubjectProof() : null;
|
|
108
|
+
if (managed && assignmentsRef.current.delete(experimentId)) setAssignmentRevision((value) => value + 1);
|
|
109
|
+
const storageKey = `_sk_signal_exp_${experimentId}`;
|
|
110
|
+
let stored = null;
|
|
111
|
+
if (!managed) {
|
|
112
|
+
try {
|
|
113
|
+
stored = localStorage.getItem(storageKey);
|
|
114
|
+
} catch {
|
|
115
|
+
}
|
|
116
|
+
}
|
|
77
117
|
if (stored) {
|
|
78
118
|
try {
|
|
79
119
|
const assignment = JSON.parse(stored);
|
|
80
120
|
if (assignment.expires > Date.now()) {
|
|
81
121
|
assignmentsRef.current.set(experimentId, assignment);
|
|
122
|
+
setAssignmentRevision((value) => value + 1);
|
|
82
123
|
return assignment;
|
|
83
124
|
}
|
|
84
125
|
} catch {
|
|
@@ -86,29 +127,38 @@ function SignalCore({
|
|
|
86
127
|
}
|
|
87
128
|
try {
|
|
88
129
|
const response = await sonorFetch(
|
|
89
|
-
`${apiUrl}/api/public/signal/experiment/${experimentId}`,
|
|
130
|
+
`${apiUrl}/api/public/signal/experiment/${experimentId}?site=${encodeURIComponent(getClientSite())}`,
|
|
90
131
|
{
|
|
91
132
|
headers: {
|
|
92
|
-
"x-visitor-id": resolvedVisitorId
|
|
133
|
+
"x-visitor-id": resolvedVisitorId,
|
|
134
|
+
...currentSubjectProof() ? { [RESONANCE_SUBJECT_HEADER]: currentSubjectProof().subjectProof } : {}
|
|
93
135
|
}
|
|
94
136
|
},
|
|
95
|
-
{ apiKey }
|
|
137
|
+
{ apiKey, shouldSend: allowed }
|
|
96
138
|
);
|
|
97
139
|
if (!response.ok) return null;
|
|
98
140
|
const assignment = await response.json();
|
|
99
|
-
|
|
141
|
+
if (!allowed() || managed && (!proof || currentSubjectProof()?.subjectProof !== proof.subjectProof || assignment.site !== getClientSite() || !assignment.assignment_id || !assignment.experiment_revision)) return null;
|
|
142
|
+
if (!managed) {
|
|
143
|
+
try {
|
|
144
|
+
localStorage.setItem(storageKey, JSON.stringify(assignment));
|
|
145
|
+
} catch {
|
|
146
|
+
}
|
|
147
|
+
}
|
|
100
148
|
assignmentsRef.current.set(experimentId, assignment);
|
|
149
|
+
setAssignmentRevision((value) => value + 1);
|
|
101
150
|
return assignment;
|
|
102
151
|
} catch (err) {
|
|
103
152
|
if (isDebug()) console.error("[Signal] Experiment assignment error:", err);
|
|
104
153
|
return null;
|
|
105
154
|
}
|
|
106
|
-
}, [apiUrl, apiKey]);
|
|
155
|
+
}, [apiUrl, apiKey, resolvedVisitorId, resolvedSessionId, epoch, policy.proof]);
|
|
107
156
|
const getExperiment = useCallback((experimentId) => {
|
|
157
|
+
if (!permitted() || measurementPolicySnapshot().policy === "configured" && !experimentMeasurementPermitted()) return null;
|
|
108
158
|
return assignmentsRef.current.get(experimentId) || null;
|
|
109
159
|
}, []);
|
|
110
160
|
const fetchConfig = useCallback(async () => {
|
|
111
|
-
if (!apiKey || !enabled ||
|
|
161
|
+
if (!apiKey || !enabled || !allowed() || !resolvedVisitorId) {
|
|
112
162
|
setLoading(false);
|
|
113
163
|
return;
|
|
114
164
|
}
|
|
@@ -117,15 +167,17 @@ function SignalCore({
|
|
|
117
167
|
`${apiUrl}/api/public/signal/config`,
|
|
118
168
|
{
|
|
119
169
|
headers: {
|
|
120
|
-
"x-visitor-id": resolvedVisitorId
|
|
170
|
+
"x-visitor-id": resolvedVisitorId,
|
|
171
|
+
...currentSubjectProof() ? { [RESONANCE_SUBJECT_HEADER]: currentSubjectProof().subjectProof } : {}
|
|
121
172
|
}
|
|
122
173
|
},
|
|
123
|
-
{ apiKey }
|
|
174
|
+
{ apiKey, shouldSend: allowed }
|
|
124
175
|
);
|
|
125
176
|
if (!response.ok) {
|
|
126
177
|
throw new Error(`Failed to fetch Signal config: ${response.statusText}`);
|
|
127
178
|
}
|
|
128
179
|
const data = await response.json();
|
|
180
|
+
if (!allowed()) return;
|
|
129
181
|
setConfig(data.config);
|
|
130
182
|
setError(null);
|
|
131
183
|
if (experiments && data.config?.experiments) {
|
|
@@ -143,7 +195,7 @@ function SignalCore({
|
|
|
143
195
|
}
|
|
144
196
|
}, [apiUrl, apiKey, enabled, experiments, resolvedVisitorId, loadExperimentAssignment]);
|
|
145
197
|
const connectSSE = useCallback(() => {
|
|
146
|
-
if (!apiKey || !enabled || !realtime ||
|
|
198
|
+
if (!apiKey || !enabled || !realtime || !allowed() || measurementPolicySnapshot().policy === "configured") return;
|
|
147
199
|
if (eventSourceRef.current) {
|
|
148
200
|
eventSourceRef.current.close();
|
|
149
201
|
eventSourceRef.current = null;
|
|
@@ -156,7 +208,7 @@ function SignalCore({
|
|
|
156
208
|
}
|
|
157
209
|
return;
|
|
158
210
|
}
|
|
159
|
-
if (eventSourceRef.current) return;
|
|
211
|
+
if (!allowed() || eventSourceRef.current) return;
|
|
160
212
|
const url = `${apiUrl}/api/public/signal/stream?token=${encodeURIComponent(credential)}`;
|
|
161
213
|
connectEventSource(url);
|
|
162
214
|
})();
|
|
@@ -200,7 +252,7 @@ function SignalCore({
|
|
|
200
252
|
}
|
|
201
253
|
}, [apiUrl, apiKey, enabled, realtime, loadExperimentAssignment]);
|
|
202
254
|
const flushEvents = useCallback(async () => {
|
|
203
|
-
if (
|
|
255
|
+
if (!allowed() || !resolvedVisitorId || !resolvedSessionId) {
|
|
204
256
|
eventQueueRef.current = [];
|
|
205
257
|
return;
|
|
206
258
|
}
|
|
@@ -219,15 +271,15 @@ function SignalCore({
|
|
|
219
271
|
events
|
|
220
272
|
})
|
|
221
273
|
},
|
|
222
|
-
{ apiKey, retries: 0 }
|
|
274
|
+
{ apiKey, retries: 0, shouldSend: allowed }
|
|
223
275
|
);
|
|
224
276
|
} catch (err) {
|
|
225
|
-
eventQueueRef.current = [...events, ...eventQueueRef.current];
|
|
277
|
+
if (allowed()) eventQueueRef.current = [...events, ...eventQueueRef.current].slice(0, 100);
|
|
226
278
|
if (isDebug()) console.error("[Signal] Event flush error:", err);
|
|
227
279
|
}
|
|
228
|
-
}, [apiUrl, apiKey]);
|
|
280
|
+
}, [apiUrl, apiKey, resolvedVisitorId, resolvedSessionId, epoch]);
|
|
229
281
|
const trackEvent = useCallback((event) => {
|
|
230
|
-
if (!enabled || !apiKey ||
|
|
282
|
+
if (!enabled || !apiKey || !allowed() || !resolvedVisitorId || !resolvedSessionId) return;
|
|
231
283
|
const enrichedEvent = {
|
|
232
284
|
...event,
|
|
233
285
|
page_url: window.location.href,
|
|
@@ -249,14 +301,14 @@ function SignalCore({
|
|
|
249
301
|
page_metadata: pageMetadataRef?.current ?? void 0,
|
|
250
302
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
251
303
|
};
|
|
252
|
-
eventQueueRef.current.push(enrichedEvent);
|
|
304
|
+
if (eventQueueRef.current.length < 100) eventQueueRef.current.push(enrichedEvent);
|
|
253
305
|
if (flushTimeoutRef.current) {
|
|
254
306
|
clearTimeout(flushTimeoutRef.current);
|
|
255
307
|
}
|
|
256
308
|
flushTimeoutRef.current = setTimeout(flushEvents, 1e3);
|
|
257
|
-
}, [enabled, apiKey, flushEvents]);
|
|
309
|
+
}, [enabled, apiKey, flushEvents, epoch]);
|
|
258
310
|
const trackOutcome = useCallback(async (outcome) => {
|
|
259
|
-
if (!enabled || !apiKey ||
|
|
311
|
+
if (!enabled || !apiKey || !allowed() || !resolvedVisitorId || !resolvedSessionId) return;
|
|
260
312
|
try {
|
|
261
313
|
await sonorFetch(
|
|
262
314
|
`${apiUrl}/api/public/signal/outcome`,
|
|
@@ -272,21 +324,23 @@ function SignalCore({
|
|
|
272
324
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
273
325
|
})
|
|
274
326
|
},
|
|
275
|
-
{ apiKey, retries: 0 }
|
|
327
|
+
{ apiKey, retries: 0, shouldSend: allowed }
|
|
276
328
|
);
|
|
277
329
|
} catch (err) {
|
|
278
330
|
if (isDebug()) console.error("[Signal] Outcome tracking error:", err);
|
|
279
331
|
}
|
|
280
|
-
}, [apiUrl, apiKey, enabled]);
|
|
332
|
+
}, [apiUrl, apiKey, enabled, resolvedVisitorId, resolvedSessionId, epoch]);
|
|
281
333
|
useEffect(() => {
|
|
282
|
-
if (!behaviorTracking || typeof window === "undefined") return;
|
|
334
|
+
if (!behaviorTracking || typeof window === "undefined" || !allowed()) return;
|
|
283
335
|
const handleScroll = () => {
|
|
336
|
+
if (!allowed()) return;
|
|
284
337
|
const scrollTop = window.scrollY;
|
|
285
338
|
const docHeight = document.documentElement.scrollHeight - window.innerHeight;
|
|
286
339
|
const depth = docHeight > 0 ? Math.round(scrollTop / docHeight * 100) : 0;
|
|
287
340
|
scrollDepthRef.current = Math.max(scrollDepthRef.current, depth);
|
|
288
341
|
};
|
|
289
342
|
const handleClick = () => {
|
|
343
|
+
if (!allowed()) return;
|
|
290
344
|
clickCountRef.current++;
|
|
291
345
|
};
|
|
292
346
|
window.addEventListener("scroll", handleScroll, { passive: true });
|
|
@@ -297,7 +351,7 @@ function SignalCore({
|
|
|
297
351
|
window.removeEventListener("click", handleClick);
|
|
298
352
|
stopLeaveListener();
|
|
299
353
|
};
|
|
300
|
-
}, [behaviorTracking, flushEvents]);
|
|
354
|
+
}, [behaviorTracking, flushEvents, epoch]);
|
|
301
355
|
useEffect(() => {
|
|
302
356
|
fetchConfig();
|
|
303
357
|
}, [fetchConfig]);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { SiteChat } from './chunk-
|
|
1
|
+
export { SiteChat } from './chunk-WHFWDK2H.js';
|
|
2
2
|
import './chunk-27FISYK4.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-7643MCD2.js';
|
|
4
4
|
import './chunk-64XODP7M.js';
|
|
5
5
|
import './chunk-W7OPEMGJ.js';
|
|
6
6
|
import './chunk-PKBMQBKP.js';
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
export { SiteDesignReporter } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { SiteDesignReporter } from './chunk-IO6BWRZ5.js';
|
|
2
|
+
import './chunk-6EDE7BOE.js';
|
|
3
3
|
import './chunk-XLAHRN4B.js';
|
|
4
4
|
import './chunk-XHYE24HU.js';
|
|
5
5
|
import './chunk-YC7ELZS3.js';
|
|
6
6
|
import './chunk-S22FSH7C.js';
|
|
7
|
-
import './chunk-
|
|
7
|
+
import './chunk-DXE6SXWW.js';
|
|
8
|
+
import './chunk-7643MCD2.js';
|
|
8
9
|
import './chunk-64XODP7M.js';
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-7HW4TZB5.js';
|
|
10
|
+
import './chunk-VXCUXHZO.js';
|
|
11
11
|
import './chunk-W7OPEMGJ.js';
|
|
12
|
-
import './chunk-F6WLHVMQ.js';
|
|
13
12
|
import './chunk-PKBMQBKP.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { SitePopups } from './chunk-EBEM5BI5.js';
|
|
2
|
+
import './chunk-27FISYK4.js';
|
|
3
|
+
import './chunk-PVY7X5UR.js';
|
|
4
|
+
import './chunk-JT7GHHMV.js';
|
|
5
|
+
import './chunk-PMXQPO5Q.js';
|
|
6
|
+
import './chunk-NHDRA4Y5.js';
|
|
7
|
+
import './chunk-D4M5K6JN.js';
|
|
8
|
+
import './chunk-GJWI74ZZ.js';
|
|
9
|
+
import './chunk-NZOJHERI.js';
|
|
10
|
+
import './chunk-KMNHNCVG.js';
|
|
11
|
+
import './chunk-5IVD6G77.js';
|
|
12
|
+
import './chunk-DXE6SXWW.js';
|
|
13
|
+
import './chunk-7643MCD2.js';
|
|
14
|
+
import './chunk-64XODP7M.js';
|
|
15
|
+
import './chunk-VXCUXHZO.js';
|
|
16
|
+
import './chunk-W7OPEMGJ.js';
|
|
17
|
+
import './chunk-A4CC4ZG3.js';
|
|
18
|
+
import './chunk-FRY6PBT6.js';
|
|
19
|
+
import './chunk-PKBMQBKP.js';
|
package/dist/SitemapSync.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* import { SitemapSync } from '@sonordev/site-kit/seo'
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
|
-
import { type AnalyticsGateOptions } from
|
|
15
|
+
import { type AnalyticsGateOptions } from "./shared/reporting-gate.js";
|
|
16
16
|
interface SitemapSyncProps extends AnalyticsGateOptions {
|
|
17
17
|
/** Custom sitemap URL (defaults to /sitemap.xml) */
|
|
18
18
|
sitemapUrl?: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import type { BookingWidgetProps } from
|
|
2
|
+
import type { BookingWidgetProps } from "../sync/types.js";
|
|
3
3
|
export declare function BookingWidget({ orgSlug, apiKey: propApiKey, apiUrl: propApiUrl, bookingTypeSlug, timezone: propTimezone, className, daysToShow, onBookingComplete, onError, hideTypeSelector, autoSelectFirstDay, styles, }: BookingWidgetProps): React.JSX.Element;
|
|
4
4
|
export default BookingWidget;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { BookingWidget, BookingWidget_default as default } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-7HW4TZB5.js';
|
|
2
|
+
export { BookingWidget, BookingWidget_default as default } from '../chunk-MP35JETP.js';
|
|
3
|
+
import '../chunk-ZRSXCT4O.js';
|
|
4
|
+
import '../chunk-PVY7X5UR.js';
|
|
5
|
+
import '../chunk-5IVD6G77.js';
|
|
6
|
+
import '../chunk-VXCUXHZO.js';
|
|
8
7
|
import '../chunk-W7OPEMGJ.js';
|
|
9
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-FRY6PBT6.js';
|
|
10
9
|
import '../chunk-PKBMQBKP.js';
|