@sonordev/site-kit 8.9.0 → 8.11.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 +8 -0
- package/agent-manifest.json +1 -1
- package/dist/AddressAutocomplete-SQDJJOEF.js +241 -0
- package/dist/{AnalyticsProvider-X7JJN3QL.js → AnalyticsProvider-JDVLH5OV.js} +4 -4
- package/dist/{ArticleViewTracker-7Q6AMCKX.js → ArticleViewTracker-L6TFJ35X.js} +1 -1
- package/dist/{BlocksPopup-U5VIYEBA.js → BlocksPopup-5Q47LRN2.js} +3 -3
- package/dist/{ChatWidget-EAATOFCT.js → ChatWidget-4ILVGTK6.js} +5 -5
- package/dist/{FileField-YWMSK7RF.js → FileField-TLS53TPW.js} +1 -1
- package/dist/{FormSpotlight-MAXDW3TK.js → FormSpotlight-JPLIRN3H.js} +5 -4
- package/dist/{FormStage-VAHRVOIZ.js → FormStage-UBP57NY7.js} +5 -4
- package/dist/{ManagedForm-7IZT7ZII.js → ManagedForm-PFGM5X5H.js} +7 -7
- package/dist/{ManagedNewsletterForm-VVXZSEAL.js → ManagedNewsletterForm-GJU5KCGA.js} +10 -10
- package/dist/{SignalCore-HAN4O7QG.js → SignalCore-DGKCVQ74.js} +3 -3
- package/dist/{SiteChat-3JLCEL2N.js → SiteChat-EP25SEMP.js} +1 -1
- package/dist/{SiteDesignReporter-6CCO645E.js → SiteDesignReporter-NE6BQSVZ.js} +4 -4
- package/dist/{SitePopups-ZGHQNGGH.js → SitePopups-XJLZPV4L.js} +4 -4
- package/dist/{SitemapSync-5LSYCBKS.js → SitemapSync-35EAR2YA.js} +2 -2
- package/dist/_client/booking-widget.js +3 -3
- package/dist/_client/reviewed-signal-experiment.js +1 -1
- package/dist/affiliates/index.js +1 -1
- package/dist/analytics/index.js +4 -4
- package/dist/api-AHFVE5HN.js +5 -0
- package/dist/articles/index.js +1 -1
- package/dist/articles/server-ui.js +3 -3
- package/dist/articles/server.js +2 -2
- package/dist/chat/index.js +6 -6
- package/dist/{chunk-IO6BWRZ5.js → chunk-2URLL3Z2.js} +1 -1
- package/dist/{chunk-FAY6MOLL.js → chunk-3LGE3LRC.js} +1 -1
- package/dist/{chunk-MP35JETP.js → chunk-3VKJJNQU.js} +1 -1
- package/dist/{chunk-CVADNHJ4.js → chunk-3WMNHFZH.js} +9 -0
- package/dist/{chunk-T4A5J6SJ.js → chunk-52MFDOBB.js} +1 -1
- package/dist/{chunk-ISMHDUBW.js → chunk-5LCY7QKK.js} +1 -1
- package/dist/{chunk-VXCUXHZO.js → chunk-7OTHRX45.js} +1 -1
- package/dist/{chunk-6NLVHTYY.js → chunk-BHJTT63Y.js} +1 -1
- package/dist/{chunk-EBEM5BI5.js → chunk-CCZHAC4K.js} +3 -3
- package/dist/{chunk-QXAJPB6O.js → chunk-CIZ7Z3NU.js} +1 -1
- package/dist/{chunk-DXE6SXWW.js → chunk-CNQMSQYQ.js} +1 -1
- package/dist/{chunk-OUD4RTBD.js → chunk-DHGOFK5P.js} +2 -31
- package/dist/{chunk-UG53ZW7S.js → chunk-DHMBDPGA.js} +2 -2
- package/dist/chunk-FW63D6W3.js +77 -0
- package/dist/{chunk-S33CUULL.js → chunk-GZYIJ3JI.js} +11 -7
- package/dist/{chunk-VPZJ7ZTL.js → chunk-HHEDRZOJ.js} +1 -1
- package/dist/{chunk-YVEYO3OD.js → chunk-HWYJ3O7D.js} +1 -1
- package/dist/{chunk-KGIQYVQ2.js → chunk-I5S2XA7H.js} +8 -8
- package/dist/{chunk-J4LJE4NB.js → chunk-IDLJEFVB.js} +3 -1
- package/dist/{chunk-CJ43K7RA.js → chunk-JXH56PY3.js} +2 -2
- package/dist/{chunk-ADQ3VCKK.js → chunk-JYRBGL33.js} +1 -1
- package/dist/{chunk-F3RKFGRW.js → chunk-KWHR7PNA.js} +1 -1
- package/dist/{chunk-ZRSXCT4O.js → chunk-LY3Q6RU5.js} +1 -1
- package/dist/{chunk-NZHECYLF.js → chunk-N26GRGIP.js} +2 -2
- package/dist/{chunk-SO6RSRUP.js → chunk-NAO63YOG.js} +1 -1
- package/dist/{chunk-6EDE7BOE.js → chunk-OPJZSLGK.js} +2 -2
- package/dist/{chunk-HJD6KXKH.js → chunk-R53G2IKP.js} +1 -1
- package/dist/{chunk-PMXQPO5Q.js → chunk-UEF4AC76.js} +2 -2
- package/dist/{chunk-L3S5WH4C.js → chunk-UK4ANQUS.js} +1 -1
- package/dist/{chunk-AWLPFFPO.js → chunk-VA5NLFSL.js} +1 -1
- package/dist/{chunk-S63QY5XW.js → chunk-XHEUPCCU.js} +5 -3
- package/dist/{chunk-XDH5B3PR.js → chunk-XVB5V7D3.js} +2 -2
- package/dist/{chunk-WHFWDK2H.js → chunk-ZWTDI2JU.js} +1 -1
- package/dist/contracts/entries.d.ts +1 -1
- package/dist/contracts/property-interest.d.ts +100 -0
- package/dist/contracts/resonance.d.ts +1705 -358
- package/dist/contracts/sales-call-prep.d.ts +666 -0
- package/dist/contracts/signal-experiments.d.ts +0 -1
- package/dist/contracts/wire-uuid.d.ts +5 -0
- package/dist/controls-YQ3MGZJG.js +14 -0
- package/dist/fleet/index.js +3 -3
- package/dist/forms/AddressAutocomplete.d.ts +20 -0
- package/dist/forms/FormClient.d.ts +2 -1
- package/dist/forms/FormEnhancer.d.ts +2 -1
- package/dist/forms/FormField.d.ts +2 -0
- 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/ServerForm.d.ts +2 -1
- package/dist/forms/controls.d.ts +5 -0
- package/dist/forms/field-controls.d.ts +4 -2
- package/dist/forms/index.d.ts +1 -1
- package/dist/forms/index.js +10 -10
- package/dist/forms/server.js +4 -4
- package/dist/forms/static.js +2 -2
- package/dist/forms/types.d.ts +9 -0
- package/dist/images/index.js +2 -2
- package/dist/index.js +1 -1
- package/dist/landing/server.js +7 -7
- package/dist/layout/client.js +6 -6
- package/dist/layout/index.js +7 -7
- package/dist/llms/index.js +4 -4
- package/dist/maps/index.js +8 -78
- package/dist/maps/places-library.d.ts +34 -0
- package/dist/mcp/sonor.js +7 -7
- package/dist/places-library-RU2YNKFK.js +54 -0
- package/dist/resonance/ConsentPreferences.d.ts +8 -0
- package/dist/resonance/consent-adapter.d.ts +3 -0
- package/dist/resonance/first-party-consent.d.ts +22 -0
- package/dist/resonance/index.d.ts +1 -0
- package/dist/resonance/index.js +272 -2
- package/dist/revalidate/index.js +2 -2
- package/dist/runtime/index.js +1 -1
- package/dist/{runtime-core-WT7KKLWQ.js → runtime-core-WSKES5UP.js} +523 -7
- package/dist/seo/client.js +2 -2
- package/dist/seo/index.js +2 -2
- package/dist/seo/llms.js +4 -4
- package/dist/seo/register-sitemap-cli.js +1 -1
- package/dist/seo/sitemap.js +2 -2
- package/dist/server/index.js +2 -2
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/index.js +2 -2
- package/dist/sitemap/index.js +2 -2
- package/dist/{sonor-fetch-runtime-3PFGUXMF.js → sonor-fetch-runtime-JDVDCTKI.js} +2 -2
- package/dist/sync/index.js +3 -3
- package/dist/website/images.js +2 -2
- package/dist/website/index.js +4 -4
- package/dist/website/landing/server.js +7 -7
- package/dist/website/popups.js +4 -4
- package/dist/{writeLLMsTxt-JUACXQKP.js → writeLLMsTxt-SYLPYWUX.js} +1 -1
- package/package.json +1 -1
- package/src/forms/README.md +47 -0
- package/src/resonance/README.md +16 -0
- /package/dist/{chunk-QLJ2SC3T.js → chunk-ES52W5EE.js} +0 -0
|
@@ -458,7 +458,7 @@ async function registerLocalSitemap(options) {
|
|
|
458
458
|
}
|
|
459
459
|
if (options.writeLlms && result.success) {
|
|
460
460
|
try {
|
|
461
|
-
const { writeLLMsTxtToPublic } = await import('../writeLLMsTxt-
|
|
461
|
+
const { writeLLMsTxtToPublic } = await import('../writeLLMsTxt-SYLPYWUX.js');
|
|
462
462
|
const written = await writeLLMsTxtToPublic({
|
|
463
463
|
// Resolved here too: the sync's own `site` is scoped to the branch that
|
|
464
464
|
// posts, and this runs on the skip path as well.
|
package/dist/seo/sitemap.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-HWYJ3O7D.js';
|
|
2
|
+
import '../chunk-ES52W5EE.js';
|
|
3
3
|
import '../chunk-EK7P62DT.js';
|
|
4
4
|
import '../chunk-Z22QVHT4.js';
|
|
5
5
|
import '../chunk-7DYMM6SS.js';
|
package/dist/server/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import '../chunk-34ZYJTQR.js';
|
|
2
|
-
export { resolveClientCredential } from '../chunk-
|
|
2
|
+
export { resolveClientCredential } from '../chunk-UK4ANQUS.js';
|
|
3
3
|
import '../chunk-UAYAJPEP.js';
|
|
4
4
|
export { SITE_CACHE_TAGS } from '../chunk-HY7ZEU2C.js';
|
|
5
5
|
export { isNextControlFlow, requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch } from '../chunk-7VMA3KCN.js';
|
|
6
6
|
import '../chunk-MH2DSGC6.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-CNQMSQYQ.js';
|
|
8
8
|
import '../chunk-PKBMQBKP.js';
|
package/dist/shared/version.d.ts
CHANGED
package/dist/signal/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { ExperimentConversion, SignalExperiment, useExperimentVariant } from '../chunk-
|
|
3
|
-
export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-
|
|
2
|
+
export { ExperimentConversion, SignalExperiment, useExperimentVariant } from '../chunk-KWHR7PNA.js';
|
|
3
|
+
export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-R53G2IKP.js';
|
|
4
4
|
import '../chunk-MOACHHOJ.js';
|
|
5
5
|
import '../chunk-FRY6PBT6.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|
package/dist/sitemap/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-HWYJ3O7D.js';
|
|
2
|
+
import '../chunk-ES52W5EE.js';
|
|
3
3
|
import '../chunk-EK7P62DT.js';
|
|
4
4
|
import '../chunk-Z22QVHT4.js';
|
|
5
5
|
import '../chunk-7DYMM6SS.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { getFreshCredential, refreshSiteToken } from './chunk-
|
|
1
|
+
import { getFreshCredential, refreshSiteToken } from './chunk-3LGE3LRC.js';
|
|
2
2
|
import { isSiteToken, credentialBreakerId } from './chunk-TPHOIE4I.js';
|
|
3
3
|
import { isTokenMode } from './chunk-D4M5K6JN.js';
|
|
4
|
-
import { SITE_KIT_VERSION } from './chunk-
|
|
4
|
+
import { SITE_KIT_VERSION } from './chunk-CNQMSQYQ.js';
|
|
5
5
|
import './chunk-PKBMQBKP.js';
|
|
6
6
|
|
|
7
7
|
// src/shared/fetchWithRetry.ts
|
package/dist/sync/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { BookingWidget } from '../chunk-
|
|
2
|
-
export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-
|
|
1
|
+
export { BookingWidget } from '../chunk-3VKJJNQU.js';
|
|
2
|
+
export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-LY3Q6RU5.js';
|
|
3
3
|
import '../chunk-PVY7X5UR.js';
|
|
4
4
|
import '../chunk-5IVD6G77.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-7OTHRX45.js';
|
|
6
6
|
import '../chunk-W7OPEMGJ.js';
|
|
7
7
|
import '../chunk-FRY6PBT6.js';
|
|
8
8
|
import '../chunk-PKBMQBKP.js';
|
package/dist/website/images.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-
|
|
1
|
+
export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-52MFDOBB.js';
|
|
2
2
|
export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-GW7GSBO7.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-7OTHRX45.js';
|
|
4
4
|
import '../chunk-PKBMQBKP.js';
|
package/dist/website/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SiteDesignReporter } from '../chunk-
|
|
3
|
-
export { SITE_DESIGN_PATH, cleanFontStack, colorToHex, getSiteDesignTokens, measureSiteDesign, readDeclaredDesign, sendSiteDesign } from '../chunk-
|
|
2
|
+
export { SiteDesignReporter } from '../chunk-2URLL3Z2.js';
|
|
3
|
+
export { SITE_DESIGN_PATH, cleanFontStack, colorToHex, getSiteDesignTokens, measureSiteDesign, readDeclaredDesign, sendSiteDesign } from '../chunk-OPJZSLGK.js';
|
|
4
4
|
export { DEFAULT_POPUP_TOKENS, PopupBlocks } from '../chunk-52KO4LKD.js';
|
|
5
5
|
import '../chunk-XLAHRN4B.js';
|
|
6
6
|
import '../chunk-XHYE24HU.js';
|
|
7
7
|
import '../chunk-YC7ELZS3.js';
|
|
8
8
|
import '../chunk-S22FSH7C.js';
|
|
9
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-CNQMSQYQ.js';
|
|
10
10
|
import '../chunk-7643MCD2.js';
|
|
11
11
|
import '../chunk-64XODP7M.js';
|
|
12
|
-
import '../chunk-
|
|
12
|
+
import '../chunk-7OTHRX45.js';
|
|
13
13
|
import '../chunk-W7OPEMGJ.js';
|
|
14
14
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { FunnelPageContent, ManagedFunnelPage, getPublishedFunnelPage, managedFunnelMetadata } from '../../chunk-
|
|
1
|
+
export { FunnelPageContent, ManagedFunnelPage, getPublishedFunnelPage, managedFunnelMetadata } from '../../chunk-N26GRGIP.js';
|
|
2
2
|
import '../../chunk-XS2ORMUG.js';
|
|
3
3
|
import '../../chunk-XJZLXUTG.js';
|
|
4
4
|
import '../../chunk-7IZUUXXO.js';
|
|
5
5
|
export { normalizeCampaignSlug } from '../../chunk-2QPVU63T.js';
|
|
6
6
|
export { landingPageMetadata } from '../../chunk-JESLPEST.js';
|
|
7
7
|
import '../../chunk-XHYE24HU.js';
|
|
8
|
-
import '../../chunk-
|
|
9
|
-
import '../../chunk-
|
|
8
|
+
import '../../chunk-XHEUPCCU.js';
|
|
9
|
+
import '../../chunk-IDLJEFVB.js';
|
|
10
10
|
import '../../chunk-C2FZBUSS.js';
|
|
11
11
|
import '../../chunk-YC7ELZS3.js';
|
|
12
|
-
import '../../chunk-
|
|
12
|
+
import '../../chunk-HHEDRZOJ.js';
|
|
13
13
|
import '../../chunk-DXO6SBMD.js';
|
|
14
|
-
import '../../chunk-
|
|
14
|
+
import '../../chunk-3WMNHFZH.js';
|
|
15
15
|
import '../../chunk-TYSIAWC3.js';
|
|
16
16
|
import '../../chunk-HW7B43E5.js';
|
|
17
17
|
import '../../chunk-NJCTQH2P.js';
|
|
@@ -19,8 +19,8 @@ import '../../chunk-7VMA3KCN.js';
|
|
|
19
19
|
import '../../chunk-MH2DSGC6.js';
|
|
20
20
|
import '../../chunk-S22FSH7C.js';
|
|
21
21
|
import '../../chunk-A4CC4ZG3.js';
|
|
22
|
-
import '../../chunk-
|
|
23
|
-
import '../../chunk-
|
|
22
|
+
import '../../chunk-KWHR7PNA.js';
|
|
23
|
+
import '../../chunk-R53G2IKP.js';
|
|
24
24
|
import '../../chunk-MOACHHOJ.js';
|
|
25
25
|
import '../../chunk-FRY6PBT6.js';
|
|
26
26
|
import '../../chunk-PKBMQBKP.js';
|
package/dist/website/popups.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SitePopups } from '../chunk-
|
|
2
|
+
export { SitePopups } from '../chunk-CCZHAC4K.js';
|
|
3
3
|
import '../chunk-27FISYK4.js';
|
|
4
4
|
export { DEFAULT_POPUP_TOKENS, PopupBlocks } from '../chunk-52KO4LKD.js';
|
|
5
5
|
import '../chunk-XLAHRN4B.js';
|
|
@@ -7,17 +7,17 @@ import '../chunk-XHYE24HU.js';
|
|
|
7
7
|
import '../chunk-PVY7X5UR.js';
|
|
8
8
|
import '../chunk-S22FSH7C.js';
|
|
9
9
|
import '../chunk-JT7GHHMV.js';
|
|
10
|
-
import '../chunk-
|
|
10
|
+
import '../chunk-UEF4AC76.js';
|
|
11
11
|
import '../chunk-NHDRA4Y5.js';
|
|
12
12
|
import '../chunk-D4M5K6JN.js';
|
|
13
13
|
import '../chunk-GJWI74ZZ.js';
|
|
14
14
|
import '../chunk-NZOJHERI.js';
|
|
15
15
|
import '../chunk-KMNHNCVG.js';
|
|
16
16
|
import '../chunk-5IVD6G77.js';
|
|
17
|
-
import '../chunk-
|
|
17
|
+
import '../chunk-CNQMSQYQ.js';
|
|
18
18
|
import '../chunk-7643MCD2.js';
|
|
19
19
|
import '../chunk-64XODP7M.js';
|
|
20
|
-
import '../chunk-
|
|
20
|
+
import '../chunk-7OTHRX45.js';
|
|
21
21
|
import '../chunk-W7OPEMGJ.js';
|
|
22
22
|
import '../chunk-A4CC4ZG3.js';
|
|
23
23
|
import '../chunk-FRY6PBT6.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sonordev/site-kit",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.11.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"packageManager": "pnpm@11.5.3",
|
|
6
6
|
"description": "Sonor's Next.js foundation: SEO, analytics, forms, chat, booking, AI visibility and agent tools. Add @sonordev/press-kit for publications or @sonordev/commerce-kit for selling. Legacy article imports remain compatible in 8.x.",
|
package/src/forms/README.md
CHANGED
|
@@ -101,6 +101,53 @@ export function ContactForm() {
|
|
|
101
101
|
}
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
+
#### Google address suggestions
|
|
105
|
+
|
|
106
|
+
Unreleased: this option is prepared for the next Site Kit release.
|
|
107
|
+
|
|
108
|
+
Opt specific managed text fields into Google address suggestions with their
|
|
109
|
+
exact Sonor slugs. The field must already exist in the form configuration:
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
<ManagedForm
|
|
113
|
+
formId="inquiry"
|
|
114
|
+
addressAutocomplete={{ fields: ['street_address'], includedRegionCodes: ['us'] }}
|
|
115
|
+
/>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`addressAutocomplete` is also available on `ServerForm` and `FormEnhancer`.
|
|
119
|
+
It works in the classic, spotlight and stage experiences. `fields` accepts
|
|
120
|
+
one or more text-field slugs; other field types and unlisted fields keep
|
|
121
|
+
their existing behavior. `includedRegionCodes` optionally restricts
|
|
122
|
+
suggestions to up to 15 two-letter country codes. Omit it for unrestricted
|
|
123
|
+
suggestions. The exported type is `AddressAutocompleteOptions`.
|
|
124
|
+
|
|
125
|
+
The field keeps its label, controlled value, validation and managed
|
|
126
|
+
submission. Choosing a suggestion fills that field with the formatted
|
|
127
|
+
address; it doesn't fill separate city, state or postal-code fields.
|
|
128
|
+
Visitors can keep typing or edit the selected address. Use the arrow keys
|
|
129
|
+
and Enter to choose a suggestion, Escape to dismiss, or touch a result.
|
|
130
|
+
Enter without an active suggestion keeps its normal form behavior.
|
|
131
|
+
|
|
132
|
+
Google code and Sonor's browser-key lookup start after field interaction;
|
|
133
|
+
predictions start at three characters and are debounced. Each field owns
|
|
134
|
+
its search session, and selection requests only the formatted address.
|
|
135
|
+
Missing keys, failed loads, unsupported existing Google scripts and request
|
|
136
|
+
errors leave manual entry available. Suggestions use Google Maps
|
|
137
|
+
attribution and aren't stored in browser persistence. The selected address
|
|
138
|
+
is submitted through the normal managed-form path.
|
|
139
|
+
|
|
140
|
+
Your Sonor installation needs a dedicated Google browser key with the
|
|
141
|
+
site's HTTP referrer allowed and Maps JavaScript API and Places API (New)
|
|
142
|
+
enabled. Sites still use their existing `SONOR_API_KEY`; they don't need
|
|
143
|
+
Sonor's Google server key. Keep your privacy notice consistent with address
|
|
144
|
+
queries being sent to Google. See Google's [Autocomplete data guide](https://developers.google.com/maps/documentation/javascript/place-autocomplete-data).
|
|
145
|
+
|
|
146
|
+
This option enhances the built-in field renderers. A `children` render
|
|
147
|
+
function or a headless `useForm` layout owns its controls, so it doesn't
|
|
148
|
+
automatically receive a suggestion UI. Browser autofill tokens below stay
|
|
149
|
+
available for those controls.
|
|
150
|
+
|
|
104
151
|
#### Autocomplete on your own controls
|
|
105
152
|
|
|
106
153
|
`ManagedForm` puts the right `autocomplete` token on each field that has one, so
|
package/src/resonance/README.md
CHANGED
|
@@ -11,6 +11,22 @@ On dynamic routes with Next.js Cache Components, the layout gives the
|
|
|
11
11
|
pathname-dependent runtime its own Suspense boundary. Measurement stays
|
|
12
12
|
blocked while it's unresolved, and page content renders independently.
|
|
13
13
|
|
|
14
|
+
## First-party privacy preferences
|
|
15
|
+
|
|
16
|
+
For a site without a consent manager, mount `ResonanceConsentPreferences` once alongside `SiteKitLayout`.
|
|
17
|
+
|
|
18
|
+
```tsx
|
|
19
|
+
import { ResonanceConsentPreferences } from '@sonordev/site-kit/resonance'
|
|
20
|
+
|
|
21
|
+
<ResonanceConsentPreferences privacyUrl="/privacy" />
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Visitors can choose visit measurement and advertising separately, decline optional purposes, and reopen Privacy choices to withdraw. Both optional choices start off. The component uses the existing adapter registration and keeps an already registered consent manager in charge.
|
|
25
|
+
|
|
26
|
+
A choice needs a fresh, enabled native configuration. The component waits while settings are unavailable. Stored preferences belong to the exact site, project, configuration and policy revisions. They expire after 180 days by default, with `maxAgeDays` configurable from 1 to 180. Native proof expiry is checked independently. If browser storage is unavailable, the choice lasts for the current tab. Withdrawal and cross-tab changes notify the existing runtime.
|
|
27
|
+
|
|
28
|
+
This component records preferences through the native consent owner. Configure the real page rules, destinations and approved visit feed before verifying advertising delivery.
|
|
29
|
+
|
|
14
30
|
## Connect your consent manager
|
|
15
31
|
|
|
16
32
|
Register one adapter for the consent manager your site already uses. The
|
|
File without changes
|