@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
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ResonanceConsentAdapter } from "./consent-adapter.js";
|
|
2
|
+
export interface ConsentPreferencesSnapshot {
|
|
3
|
+
contextReady: boolean;
|
|
4
|
+
hasPreference: boolean;
|
|
5
|
+
analytics: boolean;
|
|
6
|
+
advertising: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface Options {
|
|
9
|
+
maxAgeDays?: number;
|
|
10
|
+
now?: () => number;
|
|
11
|
+
storage?: Pick<Storage, 'getItem' | 'setItem'> | null;
|
|
12
|
+
}
|
|
13
|
+
/** Optional first-party CMP owner. Sites with an existing CMP retain their registered adapter. */
|
|
14
|
+
export declare function createFirstPartyConsentAdapter(options?: Options): {
|
|
15
|
+
adapter: ResonanceConsentAdapter;
|
|
16
|
+
getSnapshot: () => ConsentPreferencesSnapshot;
|
|
17
|
+
getServerSnapshot: () => ConsentPreferencesSnapshot;
|
|
18
|
+
subscribe(listener: () => void): () => void;
|
|
19
|
+
save(analytics: boolean, advertising: boolean): boolean;
|
|
20
|
+
connect(): () => void;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -2,3 +2,4 @@ export { ResonanceRuntime, type ResonanceRuntimeProps } from "./ResonanceRuntime
|
|
|
2
2
|
export { registerResonanceConsentAdapter, type ResonanceConsentAdapter, type ConsentObservation, type ConsentReadContext } from "./consent-adapter.js";
|
|
3
3
|
export { recordResonanceExposure, getResonanceMeasurementStatus } from "./bridge.js";
|
|
4
4
|
export type { MeasurementPurpose, PurposeChoice, PurposeChoices } from "../shared/measurement-policy.js";
|
|
5
|
+
export { ResonanceConsentPreferences, type ResonanceConsentPreferencesProps } from "./ConsentPreferences.js";
|
package/dist/resonance/index.js
CHANGED
|
@@ -1,9 +1,279 @@
|
|
|
1
1
|
'use client';
|
|
2
|
+
import { getConsentAdapter, registerResonanceConsentAdapter } from '../chunk-WYNDBJG7.js';
|
|
2
3
|
export { getResonanceMeasurementStatus, recordResonanceExposure, registerResonanceConsentAdapter } from '../chunk-WYNDBJG7.js';
|
|
3
|
-
export { ResonanceRuntime } from '../chunk-
|
|
4
|
+
export { ResonanceRuntime } from '../chunk-VA5NLFSL.js';
|
|
4
5
|
import '../chunk-MDBXGN6W.js';
|
|
5
6
|
import '../chunk-YC7ELZS3.js';
|
|
6
7
|
import '../chunk-KMNHNCVG.js';
|
|
7
8
|
import '../chunk-MOACHHOJ.js';
|
|
8
|
-
import '../chunk-FRY6PBT6.js';
|
|
9
|
+
import { MEASUREMENT_PURPOSES, unknownChoices } from '../chunk-FRY6PBT6.js';
|
|
9
10
|
import '../chunk-PKBMQBKP.js';
|
|
11
|
+
import { useState, useSyncExternalStore, useRef, useId, useEffect } from 'react';
|
|
12
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
13
|
+
|
|
14
|
+
// src/resonance/first-party-consent.ts
|
|
15
|
+
var storageKey = "sonor:privacy-preference:v1";
|
|
16
|
+
var dayMs = 864e5;
|
|
17
|
+
var initial = { contextReady: false, hasPreference: false, analytics: false, advertising: false };
|
|
18
|
+
function createFirstPartyConsentAdapter(options = {}) {
|
|
19
|
+
const days = options.maxAgeDays ?? 180;
|
|
20
|
+
if (!Number.isInteger(days) || days < 1 || days > 180) throw new Error("Consent preference lifetime must be 1\u2013180 days");
|
|
21
|
+
const now = options.now ?? Date.now;
|
|
22
|
+
let context;
|
|
23
|
+
let preference = null;
|
|
24
|
+
let snapshot = initial;
|
|
25
|
+
let timer;
|
|
26
|
+
const viewListeners = /* @__PURE__ */ new Set();
|
|
27
|
+
const adapterListeners = /* @__PURE__ */ new Set();
|
|
28
|
+
function storage() {
|
|
29
|
+
if (options.storage !== void 0) return options.storage;
|
|
30
|
+
try {
|
|
31
|
+
return typeof window === "undefined" ? null : window.localStorage;
|
|
32
|
+
} catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function scope() {
|
|
37
|
+
if (!context?.configEnabled || !context.projectId || !context.configRevision || !context.policyRevision || !context.configExpiresAt || Date.parse(context.configExpiresAt) <= now() || !Number.isFinite(Date.parse(context.configExpiresAt))) return null;
|
|
38
|
+
return JSON.stringify([context.projectId, context.site, context.configRevision, context.policyRevision]);
|
|
39
|
+
}
|
|
40
|
+
function current() {
|
|
41
|
+
return preference && preference.scope === scope() && Date.parse(preference.expiresAt) > now() ? preference : null;
|
|
42
|
+
}
|
|
43
|
+
function publish() {
|
|
44
|
+
const selected = current();
|
|
45
|
+
const next = {
|
|
46
|
+
contextReady: scope() !== null,
|
|
47
|
+
hasPreference: selected !== null,
|
|
48
|
+
analytics: selected?.choices.analytics_storage === "granted",
|
|
49
|
+
advertising: !!selected && ["ad_storage", "ad_user_data", "ad_personalization"].every((p) => selected.choices[p] === "granted")
|
|
50
|
+
};
|
|
51
|
+
if (Object.keys(next).some((key) => next[key] !== snapshot[key])) {
|
|
52
|
+
snapshot = next;
|
|
53
|
+
for (const listener of viewListeners) listener();
|
|
54
|
+
}
|
|
55
|
+
clearTimeout(timer);
|
|
56
|
+
const expiry = Math.min(Date.parse(context?.configExpiresAt ?? ""), Date.parse(selected?.expiresAt ?? ""));
|
|
57
|
+
if (Number.isFinite(expiry) && expiry > now()) {
|
|
58
|
+
timer = setTimeout(() => {
|
|
59
|
+
publish();
|
|
60
|
+
for (const listener of adapterListeners) listener();
|
|
61
|
+
}, Math.min(expiry - now(), 2147483647));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function load() {
|
|
65
|
+
try {
|
|
66
|
+
const raw = storage()?.getItem(storageKey);
|
|
67
|
+
if (!raw || raw.length > 2e3) {
|
|
68
|
+
preference = null;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const value = JSON.parse(raw);
|
|
72
|
+
if (!value || Object.keys(value).sort().join(",") !== "choices,expiresAt,observedAt,scope,version" || value.version !== 1 || typeof value.scope !== "string" || !value.choices || Object.keys(value.choices).sort().join(",") !== [...MEASUREMENT_PURPOSES].sort().join(",") || !MEASUREMENT_PURPOSES.every((p) => ["granted", "denied", "withdrawn"].includes(value.choices[p])) || !Number.isFinite(Date.parse(value.observedAt)) || !Number.isFinite(Date.parse(value.expiresAt)) || Date.parse(value.observedAt) > now() || Date.parse(value.expiresAt) <= Date.parse(value.observedAt) || Date.parse(value.expiresAt) - Date.parse(value.observedAt) > days * dayMs) {
|
|
73
|
+
preference = null;
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
preference = value;
|
|
77
|
+
} catch {
|
|
78
|
+
preference = null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const adapter = {
|
|
82
|
+
requiredPurposes: MEASUREMENT_PURPOSES,
|
|
83
|
+
read(next) {
|
|
84
|
+
context = next;
|
|
85
|
+
if (!preference) load();
|
|
86
|
+
publish();
|
|
87
|
+
const selected = current();
|
|
88
|
+
return {
|
|
89
|
+
valid: selected !== null,
|
|
90
|
+
choices: selected ? { ...selected.choices } : unknownChoices(),
|
|
91
|
+
observedAt: selected?.observedAt ?? new Date(now()).toISOString(),
|
|
92
|
+
source: "user_preference"
|
|
93
|
+
};
|
|
94
|
+
},
|
|
95
|
+
subscribe(listener) {
|
|
96
|
+
adapterListeners.add(listener);
|
|
97
|
+
return () => {
|
|
98
|
+
adapterListeners.delete(listener);
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return {
|
|
103
|
+
adapter,
|
|
104
|
+
getSnapshot: () => snapshot,
|
|
105
|
+
getServerSnapshot: () => initial,
|
|
106
|
+
subscribe(listener) {
|
|
107
|
+
viewListeners.add(listener);
|
|
108
|
+
return () => {
|
|
109
|
+
viewListeners.delete(listener);
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
save(analytics, advertising) {
|
|
113
|
+
const actualScope = scope();
|
|
114
|
+
if (!actualScope) return false;
|
|
115
|
+
const before = current()?.choices;
|
|
116
|
+
const choices = Object.fromEntries(MEASUREMENT_PURPOSES.map((purpose) => {
|
|
117
|
+
const granted = purpose === "analytics_storage" ? analytics : advertising;
|
|
118
|
+
return [purpose, granted ? "granted" : before?.[purpose] === "granted" ? "withdrawn" : "denied"];
|
|
119
|
+
}));
|
|
120
|
+
preference = {
|
|
121
|
+
version: 1,
|
|
122
|
+
scope: actualScope,
|
|
123
|
+
observedAt: new Date(now()).toISOString(),
|
|
124
|
+
expiresAt: new Date(now() + days * dayMs).toISOString(),
|
|
125
|
+
choices
|
|
126
|
+
};
|
|
127
|
+
try {
|
|
128
|
+
storage()?.setItem(storageKey, JSON.stringify(preference));
|
|
129
|
+
} catch {
|
|
130
|
+
}
|
|
131
|
+
publish();
|
|
132
|
+
for (const listener of adapterListeners) listener();
|
|
133
|
+
return true;
|
|
134
|
+
},
|
|
135
|
+
connect() {
|
|
136
|
+
const onStorage = (event) => {
|
|
137
|
+
if (event.key !== storageKey && event.key !== null) return;
|
|
138
|
+
load();
|
|
139
|
+
publish();
|
|
140
|
+
for (const listener of adapterListeners) listener();
|
|
141
|
+
};
|
|
142
|
+
if (typeof window !== "undefined") window.addEventListener("storage", onStorage);
|
|
143
|
+
return () => {
|
|
144
|
+
clearTimeout(timer);
|
|
145
|
+
if (typeof window !== "undefined") window.removeEventListener("storage", onStorage);
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
var buttonStyle = { border: "1px solid currentColor", borderRadius: 6, padding: "10px 14px", cursor: "pointer", minHeight: 44 };
|
|
151
|
+
function ResonanceConsentPreferences({ privacyUrl = "/privacy", maxAgeDays = 180 }) {
|
|
152
|
+
const [owner] = useState(() => createFirstPartyConsentAdapter({ maxAgeDays }));
|
|
153
|
+
const status = useSyncExternalStore(owner.subscribe, owner.getSnapshot, owner.getServerSnapshot);
|
|
154
|
+
const [active, setActive] = useState(false);
|
|
155
|
+
const [open, setOpen] = useState(false);
|
|
156
|
+
const [analytics, setAnalytics] = useState(false);
|
|
157
|
+
const [advertising, setAdvertising] = useState(false);
|
|
158
|
+
const dialog = useRef(null);
|
|
159
|
+
const launcher = useRef(null);
|
|
160
|
+
const titleId = useId();
|
|
161
|
+
const descriptionId = useId();
|
|
162
|
+
useEffect(() => {
|
|
163
|
+
if (getConsentAdapter()) return;
|
|
164
|
+
const unregister = registerResonanceConsentAdapter(owner.adapter);
|
|
165
|
+
const disconnect = owner.connect();
|
|
166
|
+
setActive(true);
|
|
167
|
+
return () => {
|
|
168
|
+
disconnect();
|
|
169
|
+
unregister();
|
|
170
|
+
};
|
|
171
|
+
}, [owner]);
|
|
172
|
+
useEffect(() => {
|
|
173
|
+
setAnalytics(status.analytics);
|
|
174
|
+
setAdvertising(status.advertising);
|
|
175
|
+
if (status.contextReady && !status.hasPreference) setOpen(true);
|
|
176
|
+
}, [status]);
|
|
177
|
+
useEffect(() => {
|
|
178
|
+
const element = dialog.current;
|
|
179
|
+
if (!element || !active) return;
|
|
180
|
+
if (open && !element.open) element.showModal();
|
|
181
|
+
else if (!open && element.open) element.close();
|
|
182
|
+
}, [active, open]);
|
|
183
|
+
function restoreFocus() {
|
|
184
|
+
if (launcher.current?.isConnected) launcher.current.focus({ preventScroll: true });
|
|
185
|
+
}
|
|
186
|
+
function close() {
|
|
187
|
+
dialog.current?.close();
|
|
188
|
+
setOpen(false);
|
|
189
|
+
restoreFocus();
|
|
190
|
+
}
|
|
191
|
+
function save(nextAnalytics, nextAdvertising) {
|
|
192
|
+
if (owner.save(nextAnalytics, nextAdvertising)) close();
|
|
193
|
+
}
|
|
194
|
+
if (!active) return null;
|
|
195
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
196
|
+
/* @__PURE__ */ jsx(
|
|
197
|
+
"button",
|
|
198
|
+
{
|
|
199
|
+
ref: launcher,
|
|
200
|
+
type: "button",
|
|
201
|
+
onClick: () => setOpen(true),
|
|
202
|
+
"aria-haspopup": "dialog",
|
|
203
|
+
style: {
|
|
204
|
+
...buttonStyle,
|
|
205
|
+
position: "fixed",
|
|
206
|
+
bottom: "max(12px, env(safe-area-inset-bottom))",
|
|
207
|
+
left: 12,
|
|
208
|
+
zIndex: 1e3,
|
|
209
|
+
background: "#fff",
|
|
210
|
+
color: "#222",
|
|
211
|
+
font: "inherit"
|
|
212
|
+
},
|
|
213
|
+
children: "Privacy choices"
|
|
214
|
+
}
|
|
215
|
+
),
|
|
216
|
+
/* @__PURE__ */ jsxs(
|
|
217
|
+
"dialog",
|
|
218
|
+
{
|
|
219
|
+
ref: dialog,
|
|
220
|
+
"aria-labelledby": titleId,
|
|
221
|
+
"aria-describedby": descriptionId,
|
|
222
|
+
onCancel: (event) => {
|
|
223
|
+
event.preventDefault();
|
|
224
|
+
close();
|
|
225
|
+
},
|
|
226
|
+
onClose: (event) => {
|
|
227
|
+
if (event.currentTarget.open) return;
|
|
228
|
+
setOpen(false);
|
|
229
|
+
restoreFocus();
|
|
230
|
+
},
|
|
231
|
+
style: {
|
|
232
|
+
maxWidth: 460,
|
|
233
|
+
width: "calc(100% - 32px)",
|
|
234
|
+
maxHeight: "calc(100dvh - 32px)",
|
|
235
|
+
overflowY: "auto",
|
|
236
|
+
margin: "auto",
|
|
237
|
+
padding: 24,
|
|
238
|
+
border: "1px solid #777",
|
|
239
|
+
borderRadius: 10,
|
|
240
|
+
background: "#fff",
|
|
241
|
+
color: "#222",
|
|
242
|
+
font: "16px/1.5 system-ui, sans-serif"
|
|
243
|
+
},
|
|
244
|
+
children: [
|
|
245
|
+
/* @__PURE__ */ jsx("h2", { id: titleId, style: { fontSize: 22, margin: "0 0 12px" }, children: "Your privacy choices" }),
|
|
246
|
+
/* @__PURE__ */ jsx("p", { id: descriptionId, children: "Choose whether this site may measure visits and use advertising services. You can change your choices here at any time." }),
|
|
247
|
+
!status.contextReady && /* @__PURE__ */ jsx("p", { role: "status", children: "Optional measurement settings are unavailable right now. Advertising stays off while settings load." }),
|
|
248
|
+
/* @__PURE__ */ jsxs("fieldset", { disabled: !status.contextReady, style: { border: 0, margin: "16px 0", padding: 0 }, children: [
|
|
249
|
+
/* @__PURE__ */ jsx("legend", { style: { fontWeight: 600 }, children: "Optional purposes" }),
|
|
250
|
+
/* @__PURE__ */ jsxs("label", { style: { display: "flex", alignItems: "start", gap: 10, padding: "12px 0", minHeight: 44 }, children: [
|
|
251
|
+
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: analytics, onChange: (event) => setAnalytics(event.target.checked) }),
|
|
252
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
253
|
+
"Visit measurement",
|
|
254
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
255
|
+
/* @__PURE__ */ jsx("small", { children: "Help this site understand page views and interactions." })
|
|
256
|
+
] })
|
|
257
|
+
] }),
|
|
258
|
+
/* @__PURE__ */ jsxs("label", { style: { display: "flex", alignItems: "start", gap: 10, padding: "12px 0", minHeight: 44 }, children: [
|
|
259
|
+
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: advertising, onChange: (event) => setAdvertising(event.target.checked) }),
|
|
260
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
261
|
+
"Advertising",
|
|
262
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
263
|
+
/* @__PURE__ */ jsx("small", { children: "Allow advertising storage, matching and personalization for this site." })
|
|
264
|
+
] })
|
|
265
|
+
] })
|
|
266
|
+
] }),
|
|
267
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", flexWrap: "wrap", gap: 10 }, children: [
|
|
268
|
+
/* @__PURE__ */ jsx("button", { type: "button", style: buttonStyle, disabled: !status.contextReady, onClick: () => save(analytics, advertising), children: "Save choices" }),
|
|
269
|
+
/* @__PURE__ */ jsx("button", { type: "button", style: buttonStyle, disabled: !status.contextReady, onClick: () => save(false, false), children: "Decline optional" }),
|
|
270
|
+
/* @__PURE__ */ jsx("button", { type: "button", style: buttonStyle, onClick: close, children: "Close" })
|
|
271
|
+
] }),
|
|
272
|
+
/* @__PURE__ */ jsx("p", { style: { marginBottom: 0 }, children: /* @__PURE__ */ jsx("a", { href: privacyUrl, children: "Read our privacy policy" }) })
|
|
273
|
+
]
|
|
274
|
+
}
|
|
275
|
+
)
|
|
276
|
+
] });
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
export { ResonanceConsentPreferences };
|
package/dist/revalidate/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createSeoRevalidationHandler } from '../chunk-
|
|
1
|
+
import { createSeoRevalidationHandler } from '../chunk-5LCY7QKK.js';
|
|
2
2
|
import '../chunk-XTRZGXB2.js';
|
|
3
3
|
export { SITE_CACHE_TAGS, SITE_REVALIDATE_PATH, isSiteRevalidatePong } from '../chunk-HY7ZEU2C.js';
|
|
4
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-CNQMSQYQ.js';
|
|
5
5
|
import '../chunk-PKBMQBKP.js';
|
|
6
6
|
|
|
7
7
|
// src/revalidate/index.ts
|
package/dist/runtime/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '../chunk-B7T2SFUF.js';
|
|
2
2
|
export { readAnalyticsIdentity } from '../chunk-PVY7X5UR.js';
|
|
3
3
|
import '../chunk-5IVD6G77.js';
|
|
4
|
-
export { sonorFetch } from '../chunk-
|
|
4
|
+
export { sonorFetch } from '../chunk-7OTHRX45.js';
|
|
5
5
|
export { DEFAULT_SONOR_API_URL, getClientApiConfig, readPublishedApiConfig } from '../chunk-W7OPEMGJ.js';
|
|
6
6
|
import '../chunk-FRY6PBT6.js';
|
|
7
7
|
import '../chunk-PKBMQBKP.js';
|