@sonordev/site-kit 1.5.4 → 2.0.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/dist/AnalyticsProvider-J7UMCBCJ.mjs +4 -0
- package/dist/{AnalyticsProvider-BBLU4U2T.mjs.map → AnalyticsProvider-J7UMCBCJ.mjs.map} +1 -1
- package/dist/AnalyticsProvider-PPDJIGWY.js +25 -0
- package/dist/{AnalyticsProvider-EMDIAAWR.js.map → AnalyticsProvider-PPDJIGWY.js.map} +1 -1
- package/dist/EngageWidget-IDBEBGQR.js +13 -0
- package/dist/{EngageWidget-T2S5WUMJ.js.map → EngageWidget-IDBEBGQR.js.map} +1 -1
- package/dist/EngageWidget-SRRI4W7U.mjs +4 -0
- package/dist/{EngageWidget-RWBCI4RM.mjs.map → EngageWidget-SRRI4W7U.mjs.map} +1 -1
- package/dist/SignalBridge-D6W6OLVG.mjs +4 -0
- package/dist/{SignalBridge-WGHMEILW.mjs.map → SignalBridge-D6W6OLVG.mjs.map} +1 -1
- package/dist/SignalBridge-THATXU2R.js +33 -0
- package/dist/{SignalBridge-6UYUZ2CN.js.map → SignalBridge-THATXU2R.js.map} +1 -1
- package/dist/analytics/index.js +9 -9
- package/dist/analytics/index.mjs +2 -2
- package/dist/blog/index.js +75 -75
- package/dist/blog/index.js.map +1 -1
- package/dist/blog/index.mjs +75 -75
- package/dist/blog/index.mjs.map +1 -1
- package/dist/blog/server.js +2 -2
- package/dist/blog/server.js.map +1 -1
- package/dist/blog/server.mjs +2 -2
- package/dist/blog/server.mjs.map +1 -1
- package/dist/brand.css +87 -0
- package/dist/{chunk-ZU6YPEAF.mjs → chunk-2OJCYWSQ.mjs} +85 -73
- package/dist/chunk-2OJCYWSQ.mjs.map +1 -0
- package/dist/{chunk-PM2KQ6YK.mjs → chunk-3CXAWGUP.mjs} +3 -3
- package/dist/{chunk-PM2KQ6YK.mjs.map → chunk-3CXAWGUP.mjs.map} +1 -1
- package/dist/{chunk-36Y7OWES.mjs → chunk-3YQCPLGP.mjs} +4 -4
- package/dist/chunk-3YQCPLGP.mjs.map +1 -0
- package/dist/{chunk-DK2WNYQA.js → chunk-6ZGM7S5O.js} +108 -86
- package/dist/chunk-6ZGM7S5O.js.map +1 -0
- package/dist/{chunk-XFOL6JDF.mjs → chunk-7LAOWIWE.mjs} +4 -4
- package/dist/chunk-7LAOWIWE.mjs.map +1 -0
- package/dist/{chunk-YBTYDBWY.js → chunk-7M3FNAS5.js} +6 -8
- package/dist/chunk-7M3FNAS5.js.map +1 -0
- package/dist/{chunk-4QHHFCAA.mjs → chunk-AOIG5PVY.mjs} +6 -8
- package/dist/chunk-AOIG5PVY.mjs.map +1 -0
- package/dist/{chunk-VZMDH3R4.mjs → chunk-B22WSN4L.mjs} +4 -4
- package/dist/chunk-B22WSN4L.mjs.map +1 -0
- package/dist/{chunk-ELDJDBQL.js → chunk-BVUOATPG.js} +7 -7
- package/dist/chunk-BVUOATPG.js.map +1 -0
- package/dist/{chunk-N24BPFF6.mjs → chunk-CU6OGBKK.mjs} +6 -6
- package/dist/chunk-CU6OGBKK.mjs.map +1 -0
- package/dist/{chunk-NRNK7LXK.mjs → chunk-DWI5ZKPM.mjs} +4 -4
- package/dist/chunk-DWI5ZKPM.mjs.map +1 -0
- package/dist/{chunk-KRPFLF62.mjs → chunk-F5NXD7VQ.mjs} +10 -12
- package/dist/{chunk-KRPFLF62.mjs.map → chunk-F5NXD7VQ.mjs.map} +1 -1
- package/dist/{chunk-PTTDKFL7.js → chunk-FCXQECM7.js} +6 -6
- package/dist/chunk-FCXQECM7.js.map +1 -0
- package/dist/{chunk-DY4K6X3A.js → chunk-GCPPXUAI.js} +6 -6
- package/dist/chunk-GCPPXUAI.js.map +1 -0
- package/dist/{chunk-KJN2C6YE.js → chunk-I34XL5VJ.js} +5 -5
- package/dist/chunk-I34XL5VJ.js.map +1 -0
- package/dist/{chunk-G6VGUAK2.js → chunk-IFVMZFNT.js} +4 -4
- package/dist/chunk-IFVMZFNT.js.map +1 -0
- package/dist/{chunk-FMB2RZDH.mjs → chunk-J4U3IEXL.mjs} +6 -6
- package/dist/chunk-J4U3IEXL.mjs.map +1 -0
- package/dist/{chunk-EUNL6GAL.js → chunk-JP5WGL75.js} +4 -4
- package/dist/chunk-JP5WGL75.js.map +1 -0
- package/dist/{chunk-MG23BS36.js → chunk-L3UB4B74.js} +5 -5
- package/dist/chunk-L3UB4B74.js.map +1 -0
- package/dist/{chunk-VZMRZQ2D.mjs → chunk-MSRLAD7F.mjs} +107 -86
- package/dist/chunk-MSRLAD7F.mjs.map +1 -0
- package/dist/{chunk-M5FLRLHI.mjs → chunk-OM6R7CDP.mjs} +3 -3
- package/dist/chunk-OM6R7CDP.mjs.map +1 -0
- package/dist/{chunk-4X5TFGKD.mjs → chunk-P3POHQWW.mjs} +422 -426
- package/dist/chunk-P3POHQWW.mjs.map +1 -0
- package/dist/{chunk-GJD4CFHN.js → chunk-RLNG67S5.js} +7 -7
- package/dist/chunk-RLNG67S5.js.map +1 -0
- package/dist/{chunk-FTSXKDP3.js → chunk-RO6DHV6S.js} +10 -12
- package/dist/{chunk-FTSXKDP3.js.map → chunk-RO6DHV6S.js.map} +1 -1
- package/dist/{chunk-WW7UM7XY.js → chunk-TZAD7CZD.js} +424 -428
- package/dist/chunk-TZAD7CZD.js.map +1 -0
- package/dist/{chunk-OE5DEMCV.js → chunk-UD5447TC.js} +13 -15
- package/dist/chunk-UD5447TC.js.map +1 -0
- package/dist/{chunk-TC6TOW2T.js → chunk-UJ757WGI.js} +4 -4
- package/dist/{chunk-TC6TOW2T.js.map → chunk-UJ757WGI.js.map} +1 -1
- package/dist/{chunk-C3A5HXHX.mjs → chunk-V6V6OXS2.mjs} +5 -5
- package/dist/chunk-V6V6OXS2.mjs.map +1 -0
- package/dist/{chunk-X4J33XQD.js → chunk-W6K7MQCC.js} +6 -6
- package/dist/chunk-W6K7MQCC.js.map +1 -0
- package/dist/{chunk-FI2ME55T.mjs → chunk-W7RZ3OTA.mjs} +7 -7
- package/dist/chunk-W7RZ3OTA.mjs.map +1 -0
- package/dist/{chunk-IJ2LWZID.js → chunk-WETCVFIK.js} +85 -73
- package/dist/chunk-WETCVFIK.js.map +1 -0
- package/dist/{chunk-35MALWVX.mjs → chunk-WN2PUL6B.mjs} +13 -15
- package/dist/chunk-WN2PUL6B.mjs.map +1 -0
- package/dist/cli/index.js +19339 -3461
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +19331 -3452
- package/dist/cli/index.mjs.map +1 -1
- package/dist/cms/index.d.mts +1 -1
- package/dist/cms/index.d.ts +1 -1
- package/dist/cms/index.js +3 -3
- package/dist/cms/index.js.map +1 -1
- package/dist/cms/index.mjs +2 -2
- package/dist/cms/index.mjs.map +1 -1
- package/dist/cms/server.js +4 -4
- package/dist/cms/server.mjs +1 -1
- package/dist/commerce/index.js +47 -47
- package/dist/commerce/index.mjs +3 -3
- package/dist/engage/index.d.mts +3 -2
- package/dist/engage/index.d.ts +3 -2
- package/dist/engage/index.js +6 -6
- package/dist/engage/index.js.map +1 -1
- package/dist/engage/index.mjs +3 -3
- package/dist/engage/index.mjs.map +1 -1
- package/dist/forms/index.js +379 -84
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/index.mjs +375 -65
- package/dist/forms/index.mjs.map +1 -1
- package/dist/forms/styles.css +312 -0
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +2 -2
- package/dist/images/server.js +4 -4
- package/dist/images/server.mjs +1 -1
- package/dist/index.d.mts +4 -131
- package/dist/index.d.ts +4 -131
- package/dist/index.js +85 -1373
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -1294
- package/dist/index.mjs.map +1 -1
- package/dist/layout/client.js +2 -2
- package/dist/layout/client.mjs +1 -1
- package/dist/layout/index.js +21 -11
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/index.mjs +17 -7
- package/dist/layout/index.mjs.map +1 -1
- package/dist/llms/index.d.mts +3 -3
- package/dist/llms/index.d.ts +3 -3
- package/dist/llms/index.js +12 -12
- package/dist/llms/index.js.map +1 -1
- package/dist/llms/index.mjs +2 -2
- package/dist/llms/index.mjs.map +1 -1
- package/dist/manifest/index.js +4 -4
- package/dist/manifest/index.js.map +1 -1
- package/dist/manifest/index.mjs +3 -3
- package/dist/manifest/index.mjs.map +1 -1
- package/dist/middleware/index.js +3 -3
- package/dist/middleware/index.mjs +2 -2
- package/dist/redirects/index.js +6 -6
- package/dist/redirects/index.mjs +2 -2
- package/dist/robots/index.js +3 -3
- package/dist/robots/index.js.map +1 -1
- package/dist/robots/index.mjs +2 -2
- package/dist/robots/index.mjs.map +1 -1
- package/dist/{routing-DZYzyDHw.d.ts → routing-DQ_Et-OP.d.mts} +4 -4
- package/dist/{routing-B5XS-6_W.d.mts → routing-IYiJNIIX.d.ts} +4 -4
- package/dist/seo/index.d.mts +3 -5
- package/dist/seo/index.d.ts +3 -5
- package/dist/seo/index.js +77 -76
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/index.mjs +41 -40
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo/register-sitemap-cli.js +3 -3
- package/dist/seo/register-sitemap-cli.js.map +1 -1
- package/dist/seo/register-sitemap-cli.mjs +3 -3
- package/dist/seo/register-sitemap-cli.mjs.map +1 -1
- package/dist/seo/server.d.mts +3 -3
- package/dist/seo/server.d.ts +3 -3
- package/dist/seo/server.js +7 -7
- package/dist/seo/server.js.map +1 -1
- package/dist/seo/server.mjs +5 -5
- package/dist/seo/server.mjs.map +1 -1
- package/dist/{server-api-XGKRGUMG.js → server-api-36R24YWN.js} +21 -21
- package/dist/{server-api-XGKRGUMG.js.map → server-api-36R24YWN.js.map} +1 -1
- package/dist/{server-api-COVFLFZ2.mjs → server-api-UIZU4JM3.mjs} +3 -3
- package/dist/{server-api-COVFLFZ2.mjs.map → server-api-UIZU4JM3.mjs.map} +1 -1
- package/dist/setup/index.d.mts +2 -5
- package/dist/setup/index.d.ts +2 -5
- package/dist/setup/index.js +0 -31
- package/dist/setup/index.mjs +1 -4
- package/dist/site-config/index.js +3 -3
- package/dist/site-config/index.mjs +1 -1
- package/dist/sitemap/index.js +10 -9
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +8 -7
- package/dist/sitemap/index.mjs.map +1 -1
- package/dist/sync/index.js +13 -13
- package/dist/sync/index.mjs +1 -1
- package/dist/{types-KZP_VWZp.d.ts → types-CGkyylOa.d.mts} +2 -2
- package/dist/{types-KZP_VWZp.d.mts → types-CGkyylOa.d.ts} +2 -2
- package/package.json +6 -13
- package/dist/AnalyticsProvider-BBLU4U2T.mjs +0 -4
- package/dist/AnalyticsProvider-EMDIAAWR.js +0 -25
- package/dist/EngageWidget-RWBCI4RM.mjs +0 -4
- package/dist/EngageWidget-T2S5WUMJ.js +0 -13
- package/dist/SetupWizard-Cki06kB0.d.mts +0 -12
- package/dist/SetupWizard-Cki06kB0.d.ts +0 -12
- package/dist/SignalBridge-6UYUZ2CN.js +0 -33
- package/dist/SignalBridge-WGHMEILW.mjs +0 -4
- package/dist/chunk-35MALWVX.mjs.map +0 -1
- package/dist/chunk-36Y7OWES.mjs.map +0 -1
- package/dist/chunk-373TK6TZ.js +0 -321
- package/dist/chunk-373TK6TZ.js.map +0 -1
- package/dist/chunk-4MOJJSNA.js +0 -14867
- package/dist/chunk-4MOJJSNA.js.map +0 -1
- package/dist/chunk-4QHHFCAA.mjs.map +0 -1
- package/dist/chunk-4X5TFGKD.mjs.map +0 -1
- package/dist/chunk-5YDPPOUU.mjs +0 -810
- package/dist/chunk-5YDPPOUU.mjs.map +0 -1
- package/dist/chunk-7FKPJQVS.mjs +0 -289
- package/dist/chunk-7FKPJQVS.mjs.map +0 -1
- package/dist/chunk-C3A5HXHX.mjs.map +0 -1
- package/dist/chunk-DK2WNYQA.js.map +0 -1
- package/dist/chunk-DY4K6X3A.js.map +0 -1
- package/dist/chunk-ELDJDBQL.js.map +0 -1
- package/dist/chunk-EUNL6GAL.js.map +0 -1
- package/dist/chunk-FI2ME55T.mjs.map +0 -1
- package/dist/chunk-FMB2RZDH.mjs.map +0 -1
- package/dist/chunk-G6VGUAK2.js.map +0 -1
- package/dist/chunk-GJD4CFHN.js.map +0 -1
- package/dist/chunk-GVXZWXQ7.js +0 -814
- package/dist/chunk-GVXZWXQ7.js.map +0 -1
- package/dist/chunk-HF2FWDBJ.mjs +0 -968
- package/dist/chunk-HF2FWDBJ.mjs.map +0 -1
- package/dist/chunk-IFAW7JFO.js +0 -1429
- package/dist/chunk-IFAW7JFO.js.map +0 -1
- package/dist/chunk-IJ2LWZID.js.map +0 -1
- package/dist/chunk-IKIJEKU3.mjs +0 -1427
- package/dist/chunk-IKIJEKU3.mjs.map +0 -1
- package/dist/chunk-JFTGG6HK.mjs +0 -14848
- package/dist/chunk-JFTGG6HK.mjs.map +0 -1
- package/dist/chunk-JM3ZR6LB.js +0 -981
- package/dist/chunk-JM3ZR6LB.js.map +0 -1
- package/dist/chunk-KJN2C6YE.js.map +0 -1
- package/dist/chunk-M5FLRLHI.mjs.map +0 -1
- package/dist/chunk-MCGLYYAR.mjs +0 -341
- package/dist/chunk-MCGLYYAR.mjs.map +0 -1
- package/dist/chunk-MG23BS36.js.map +0 -1
- package/dist/chunk-N24BPFF6.mjs.map +0 -1
- package/dist/chunk-NRNK7LXK.mjs.map +0 -1
- package/dist/chunk-OE5DEMCV.js.map +0 -1
- package/dist/chunk-PTTDKFL7.js.map +0 -1
- package/dist/chunk-S7FRYNSU.mjs +0 -315
- package/dist/chunk-S7FRYNSU.mjs.map +0 -1
- package/dist/chunk-SLB5V4RT.js +0 -302
- package/dist/chunk-SLB5V4RT.js.map +0 -1
- package/dist/chunk-VZMDH3R4.mjs.map +0 -1
- package/dist/chunk-VZMRZQ2D.mjs.map +0 -1
- package/dist/chunk-WW7UM7XY.js.map +0 -1
- package/dist/chunk-X4J33XQD.js.map +0 -1
- package/dist/chunk-XFOL6JDF.mjs.map +0 -1
- package/dist/chunk-YBTYDBWY.js.map +0 -1
- package/dist/chunk-ZQO6FZZB.js +0 -343
- package/dist/chunk-ZQO6FZZB.js.map +0 -1
- package/dist/chunk-ZU6YPEAF.mjs.map +0 -1
- package/dist/generators-DOFWGRXS.js +0 -37
- package/dist/generators-DOFWGRXS.js.map +0 -1
- package/dist/generators-R62APO62.mjs +0 -4
- package/dist/generators-R62APO62.mjs.map +0 -1
- package/dist/migrator-3WQB3KQ2.mjs +0 -4
- package/dist/migrator-3WQB3KQ2.mjs.map +0 -1
- package/dist/migrator-HFVQYK5R.js +0 -37
- package/dist/migrator-HFVQYK5R.js.map +0 -1
- package/dist/scanner-AF7YUCFG.mjs +0 -4
- package/dist/scanner-AF7YUCFG.mjs.map +0 -1
- package/dist/scanner-DBD5K6F7.js +0 -53
- package/dist/scanner-DBD5K6F7.js.map +0 -1
- package/dist/setup/client.d.mts +0 -60
- package/dist/setup/client.d.ts +0 -60
- package/dist/setup/client.js +0 -31
- package/dist/setup/client.js.map +0 -1
- package/dist/setup/client.mjs +0 -6
- package/dist/setup/client.mjs.map +0 -1
- package/dist/setup/server.d.mts +0 -14
- package/dist/setup/server.d.ts +0 -14
- package/dist/setup/server.js +0 -13
- package/dist/setup/server.js.map +0 -1
- package/dist/setup/server.mjs +0 -4
- package/dist/setup/server.mjs.map +0 -1
|
@@ -221,7 +221,7 @@ function GlobeIcon() {
|
|
|
221
221
|
}
|
|
222
222
|
function CheckCircleIcon() {
|
|
223
223
|
return /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "56", height: "56", viewBox: "0 0 56 56", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
|
|
224
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "28", cy: "28", r: "28", fill: "var(--
|
|
224
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "28", cy: "28", r: "28", fill: "var(--sk-primary)" }),
|
|
225
225
|
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 28.5L24.5 35L38 21.5", stroke: "white", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
226
226
|
] });
|
|
227
227
|
}
|
|
@@ -412,11 +412,23 @@ function BookingWidget({
|
|
|
412
412
|
return { morning, afternoon, evening };
|
|
413
413
|
}, [slots]);
|
|
414
414
|
const cssVars = {
|
|
415
|
-
"--
|
|
416
|
-
"--
|
|
417
|
-
"--
|
|
418
|
-
"--
|
|
419
|
-
"--
|
|
415
|
+
"--sk-primary": styles.primaryColor || "#0069ff",
|
|
416
|
+
"--sk-primary-hover": styles.primaryColor ? `color-mix(in srgb, ${styles.primaryColor} 90%, black)` : "#0055d4",
|
|
417
|
+
"--sk-primary-light": styles.primaryColor ? `color-mix(in srgb, ${styles.primaryColor} 12%, white)` : "#e8f1ff",
|
|
418
|
+
"--sk-bg": "#ffffff",
|
|
419
|
+
"--sk-bg-elevated": "#f9fafb",
|
|
420
|
+
"--sk-surface": "#f3f4f6",
|
|
421
|
+
"--sk-text-primary": "#1a1a1a",
|
|
422
|
+
"--sk-text-secondary": "#6b7280",
|
|
423
|
+
"--sk-text-tertiary": "#9ca3af",
|
|
424
|
+
"--sk-border": "#e5e7eb",
|
|
425
|
+
"--sk-error": "#ef4444",
|
|
426
|
+
"--sk-success": "#10b981",
|
|
427
|
+
"--sk-warning": "#f59e0b",
|
|
428
|
+
"--sk-radius": styles.borderRadius || "8px",
|
|
429
|
+
"--sk-font": styles.fontFamily || "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
|
|
430
|
+
"--sk-input-border": "#e5e7eb",
|
|
431
|
+
"--sk-input-focus-ring": styles.primaryColor ? `color-mix(in srgb, ${styles.primaryColor} 12%, white)` : "#e8f1ff"
|
|
420
432
|
};
|
|
421
433
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `bw-root ${className}`, style: cssVars, children: [
|
|
422
434
|
error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bw-error", role: "alert", children: [
|
|
@@ -694,8 +706,8 @@ function TimeButton({
|
|
|
694
706
|
var WIDGET_CSS = `
|
|
695
707
|
/* \u2500\u2500 Base \u2500\u2500 */
|
|
696
708
|
.bw-root {
|
|
697
|
-
font-family: var(--
|
|
698
|
-
color:
|
|
709
|
+
font-family: var(--sk-font);
|
|
710
|
+
color: var(--sk-text-primary);
|
|
699
711
|
line-height: 1.5;
|
|
700
712
|
-webkit-font-smoothing: antialiased;
|
|
701
713
|
box-sizing: border-box;
|
|
@@ -713,7 +725,7 @@ var WIDGET_CSS = `
|
|
|
713
725
|
.bw-error {
|
|
714
726
|
display: flex; align-items: center; justify-content: space-between; gap: 12px;
|
|
715
727
|
background: #fef2f2; border: 1px solid #fecaca; color: #b91c1c;
|
|
716
|
-
padding: 10px 14px; border-radius: var(--
|
|
728
|
+
padding: 10px 14px; border-radius: var(--sk-radius); margin-bottom: 16px; font-size: 0.875rem;
|
|
717
729
|
}
|
|
718
730
|
.bw-error button { background: none; border: none; color: inherit; cursor: pointer; font-size: 1.25rem; line-height: 1; padding: 0; }
|
|
719
731
|
|
|
@@ -722,67 +734,67 @@ var WIDGET_CSS = `
|
|
|
722
734
|
.bw-meta-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
|
|
723
735
|
.bw-badge {
|
|
724
736
|
display: inline-flex; align-items: center; gap: 4px;
|
|
725
|
-
font-size: 0.8125rem; color:
|
|
737
|
+
font-size: 0.8125rem; color: var(--sk-text-secondary); font-weight: 400;
|
|
726
738
|
}
|
|
727
739
|
.bw-badge-accent {
|
|
728
740
|
display: inline-flex; align-items: center; gap: 4px;
|
|
729
|
-
font-size: 0.8125rem; color: var(--
|
|
741
|
+
font-size: 0.8125rem; color: var(--sk-primary); font-weight: 500;
|
|
730
742
|
}
|
|
731
743
|
|
|
732
744
|
/* \u2500\u2500 Info Header \u2500\u2500 */
|
|
733
745
|
.bw-info-header { display: flex; align-items: flex-start; gap: 8px; margin-bottom: 20px; }
|
|
734
746
|
.bw-back {
|
|
735
747
|
display: inline-flex; align-items: center; justify-content: center;
|
|
736
|
-
width: 32px; height: 32px; border-radius: 50%; border: 1px solid
|
|
737
|
-
background:
|
|
748
|
+
width: 32px; height: 32px; border-radius: 50%; border: 1px solid var(--sk-border);
|
|
749
|
+
background: var(--sk-bg); cursor: pointer; color: var(--sk-text-secondary); flex-shrink: 0; margin-top: 1px;
|
|
738
750
|
transition: all 0.15s;
|
|
739
751
|
}
|
|
740
|
-
.bw-back:hover { background:
|
|
752
|
+
.bw-back:hover { background: var(--sk-surface); border-color: var(--sk-border); }
|
|
741
753
|
|
|
742
754
|
/* \u2500\u2500 Loading \u2500\u2500 */
|
|
743
755
|
.bw-loading {
|
|
744
756
|
display: flex; align-items: center; justify-content: center; gap: 8px;
|
|
745
|
-
padding: 32px; color:
|
|
757
|
+
padding: 32px; color: var(--sk-text-secondary); font-size: 0.875rem;
|
|
746
758
|
}
|
|
747
759
|
|
|
748
760
|
/* \u2500\u2500 Type Selection \u2500\u2500 */
|
|
749
761
|
.bw-type-list { display: flex; flex-direction: column; gap: 10px; }
|
|
750
762
|
.bw-type-card {
|
|
751
763
|
display: flex; flex-direction: column; text-align: left; gap: 4px;
|
|
752
|
-
padding: 16px; border: 1.5px solid
|
|
753
|
-
background:
|
|
764
|
+
padding: 16px; border: 1.5px solid var(--sk-border); border-radius: var(--sk-radius);
|
|
765
|
+
background: var(--sk-bg); cursor: pointer; transition: all 0.15s;
|
|
754
766
|
}
|
|
755
|
-
.bw-type-card:hover { border-color: var(--
|
|
767
|
+
.bw-type-card:hover { border-color: var(--sk-primary); box-shadow: 0 0 0 3px var(--sk-primary-light); }
|
|
756
768
|
.bw-type-name { font-weight: 600; font-size: 0.9375rem; }
|
|
757
|
-
.bw-type-desc { color:
|
|
758
|
-
.bw-type-meta { display: flex; align-items: center; gap: 4px; font-size: 0.8125rem; color:
|
|
769
|
+
.bw-type-desc { color: var(--sk-text-secondary); font-size: 0.8125rem; }
|
|
770
|
+
.bw-type-meta { display: flex; align-items: center; gap: 4px; font-size: 0.8125rem; color: var(--sk-text-tertiary); margin-top: 4px; }
|
|
759
771
|
|
|
760
772
|
/* \u2500\u2500 Date-Time Layout \u2500\u2500 */
|
|
761
773
|
.bw-datetime-layout {
|
|
762
|
-
display: flex; gap: 0; border-top: 1px solid
|
|
774
|
+
display: flex; gap: 0; border-top: 1px solid var(--sk-border); padding-top: 16px;
|
|
763
775
|
}
|
|
764
776
|
@media (max-width: 559px) {
|
|
765
777
|
.bw-datetime-layout { flex-direction: column; }
|
|
766
778
|
}
|
|
767
779
|
@media (min-width: 560px) {
|
|
768
780
|
.bw-datetime-layout { min-height: 400px; }
|
|
769
|
-
.bw-calendar { flex: 1 1 auto; padding-right: 16px; border-right: 1px solid
|
|
781
|
+
.bw-calendar { flex: 1 1 auto; padding-right: 16px; border-right: 1px solid var(--sk-border); }
|
|
770
782
|
.bw-times { width: 180px; flex-shrink: 0; padding-left: 16px; }
|
|
771
783
|
}
|
|
772
784
|
|
|
773
785
|
/* \u2500\u2500 Calendar \u2500\u2500 */
|
|
774
786
|
.bw-cal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
|
|
775
|
-
.bw-cal-title { font-weight: 600; font-size: 0.9375rem; color:
|
|
787
|
+
.bw-cal-title { font-weight: 600; font-size: 0.9375rem; color: var(--sk-text-primary); }
|
|
776
788
|
.bw-cal-nav {
|
|
777
789
|
display: inline-flex; align-items: center; justify-content: center;
|
|
778
790
|
width: 32px; height: 32px; border-radius: 50%; border: none;
|
|
779
|
-
background: transparent; cursor: pointer; color:
|
|
791
|
+
background: transparent; cursor: pointer; color: var(--sk-text-primary); transition: background 0.15s;
|
|
780
792
|
}
|
|
781
|
-
.bw-cal-nav:hover:not(:disabled) { background:
|
|
793
|
+
.bw-cal-nav:hover:not(:disabled) { background: var(--sk-surface); }
|
|
782
794
|
.bw-cal-nav:disabled { opacity: 0.25; cursor: default; }
|
|
783
795
|
|
|
784
796
|
.bw-cal-weekdays { display: grid; grid-template-columns: repeat(7, 1fr); gap: 0; text-align: center; margin-bottom: 4px; }
|
|
785
|
-
.bw-cal-wd { font-size: 0.6875rem; font-weight: 600; color:
|
|
797
|
+
.bw-cal-wd { font-size: 0.6875rem; font-weight: 600; color: var(--sk-text-tertiary); text-transform: uppercase; letter-spacing: 0.04em; padding: 4px 0; }
|
|
786
798
|
|
|
787
799
|
.bw-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
|
|
788
800
|
.bw-cal-empty { aspect-ratio: 1; }
|
|
@@ -790,19 +802,19 @@ var WIDGET_CSS = `
|
|
|
790
802
|
aspect-ratio: 1; display: flex; align-items: center; justify-content: center;
|
|
791
803
|
border: none; background: none; border-radius: 50%;
|
|
792
804
|
font-size: 0.8125rem; font-weight: 500; cursor: pointer;
|
|
793
|
-
color:
|
|
805
|
+
color: var(--sk-text-primary); transition: all 0.15s; position: relative;
|
|
794
806
|
}
|
|
795
|
-
.bw-cal-day:hover:not(.disabled):not(.selected) { background:
|
|
807
|
+
.bw-cal-day:hover:not(.disabled):not(.selected) { background: var(--sk-surface); }
|
|
796
808
|
.bw-cal-day.today:not(.selected)::after {
|
|
797
809
|
content: ''; position: absolute; bottom: 3px; left: 50%; transform: translateX(-50%);
|
|
798
|
-
width: 4px; height: 4px; border-radius: 50%; background: var(--
|
|
810
|
+
width: 4px; height: 4px; border-radius: 50%; background: var(--sk-primary);
|
|
799
811
|
}
|
|
800
812
|
.bw-cal-day.selected {
|
|
801
|
-
background: var(--
|
|
813
|
+
background: var(--sk-primary); color: #fff; font-weight: 600;
|
|
802
814
|
}
|
|
803
815
|
/* Past / out-of-range: visible on light and dark parent pages */
|
|
804
816
|
.bw-root button.bw-cal-day.disabled {
|
|
805
|
-
color:
|
|
817
|
+
color: var(--sk-text-tertiary);
|
|
806
818
|
cursor: default;
|
|
807
819
|
opacity: 1;
|
|
808
820
|
}
|
|
@@ -813,86 +825,86 @@ var WIDGET_CSS = `
|
|
|
813
825
|
.bw-times.visible { opacity: 1; }
|
|
814
826
|
.bw-times-placeholder {
|
|
815
827
|
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;
|
|
816
|
-
height: 100%; min-height: 160px; color:
|
|
828
|
+
height: 100%; min-height: 160px; color: var(--sk-text-tertiary); font-size: 0.8125rem; text-align: center; padding: 16px;
|
|
817
829
|
}
|
|
818
830
|
.bw-times-empty {
|
|
819
831
|
display: flex; align-items: center; justify-content: center;
|
|
820
|
-
height: 100%; min-height: 160px; color:
|
|
832
|
+
height: 100%; min-height: 160px; color: var(--sk-text-tertiary); font-size: 0.8125rem; text-align: center; padding: 16px;
|
|
821
833
|
}
|
|
822
834
|
.bw-times-scroll { overflow-y: auto; max-height: 400px; overflow-x: hidden; }
|
|
823
|
-
.bw-times-date { font-weight: 600; font-size: 0.8125rem; color:
|
|
835
|
+
.bw-times-date { font-weight: 600; font-size: 0.8125rem; color: var(--sk-text-primary); margin: 0 0 12px 0; }
|
|
824
836
|
.bw-time-group { margin-bottom: 16px; }
|
|
825
837
|
.bw-times-scroll-hint {
|
|
826
|
-
font-size: 0.6875rem; color:
|
|
838
|
+
font-size: 0.6875rem; color: var(--sk-text-tertiary); text-align: center; margin: 8px 0 0 0; padding-bottom: 8px;
|
|
827
839
|
}
|
|
828
|
-
.bw-time-label { display: block; font-size: 0.6875rem; font-weight: 600; color:
|
|
840
|
+
.bw-time-label { display: block; font-size: 0.6875rem; font-weight: 600; color: var(--sk-text-tertiary); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 6px; }
|
|
829
841
|
|
|
830
842
|
.bw-time-btn {
|
|
831
843
|
display: block; width: 100%;
|
|
832
844
|
padding: 10px 12px; margin-bottom: 6px;
|
|
833
|
-
border: 1.5px solid
|
|
834
|
-
background:
|
|
835
|
-
font-size: 0.875rem; font-weight: 500; color: var(--
|
|
845
|
+
border: 1.5px solid var(--sk-border); border-radius: var(--sk-radius);
|
|
846
|
+
background: var(--sk-bg); cursor: pointer;
|
|
847
|
+
font-size: 0.875rem; font-weight: 500; color: var(--sk-primary); text-align: center;
|
|
836
848
|
transition: all 0.15s;
|
|
837
849
|
}
|
|
838
850
|
.bw-time-btn:hover:not(:disabled) {
|
|
839
|
-
border-color: var(--
|
|
851
|
+
border-color: var(--sk-primary); background: var(--sk-primary-light);
|
|
840
852
|
}
|
|
841
853
|
.bw-time-btn.selected {
|
|
842
|
-
border-color: var(--
|
|
854
|
+
border-color: var(--sk-primary); background: var(--sk-primary); color: #fff;
|
|
843
855
|
}
|
|
844
856
|
.bw-time-btn:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
845
857
|
|
|
846
858
|
.bw-time-btn-wrap {
|
|
847
859
|
display: flex; align-items: center; gap: 6px; margin-bottom: 6px;
|
|
848
|
-
border: 1.5px solid var(--
|
|
860
|
+
border: 1.5px solid var(--sk-primary); border-radius: var(--sk-radius); overflow: hidden;
|
|
849
861
|
animation: bw-fade-in 0.15s ease-out;
|
|
850
862
|
}
|
|
851
863
|
.bw-time-btn-wrap .bw-time-text {
|
|
852
|
-
flex: 1; padding: 10px 12px; font-size: 0.875rem; font-weight: 500; color:
|
|
853
|
-
background: var(--
|
|
864
|
+
flex: 1; padding: 10px 12px; font-size: 0.875rem; font-weight: 500; color: var(--sk-text-primary); text-align: center;
|
|
865
|
+
background: var(--sk-primary-light);
|
|
854
866
|
}
|
|
855
867
|
.bw-time-confirm {
|
|
856
868
|
display: inline-flex; align-items: center; justify-content: center; gap: 4px;
|
|
857
869
|
padding: 10px 16px; border: none;
|
|
858
|
-
background: var(--
|
|
870
|
+
background: var(--sk-primary); color: #fff;
|
|
859
871
|
font-size: 0.8125rem; font-weight: 600; cursor: pointer;
|
|
860
872
|
transition: background 0.15s;
|
|
861
873
|
}
|
|
862
|
-
.bw-time-confirm:hover:not(:disabled) { background: var(--
|
|
874
|
+
.bw-time-confirm:hover:not(:disabled) { background: var(--sk-primary-hover); }
|
|
863
875
|
.bw-time-confirm:disabled { opacity: 0.7; cursor: not-allowed; }
|
|
864
876
|
|
|
865
877
|
/* \u2500\u2500 Form \u2500\u2500 */
|
|
866
878
|
.bw-hold-notice {
|
|
867
879
|
display: flex; align-items: center; gap: 8px;
|
|
868
|
-
background: var(--
|
|
869
|
-
padding: 10px 14px; border-radius: var(--
|
|
880
|
+
background: var(--sk-primary-light); color: var(--sk-primary);
|
|
881
|
+
padding: 10px 14px; border-radius: var(--sk-radius);
|
|
870
882
|
font-size: 0.8125rem; font-weight: 500; margin-bottom: 20px;
|
|
871
883
|
}
|
|
872
884
|
.bw-form { display: flex; flex-direction: column; gap: 16px; }
|
|
873
885
|
.bw-field label {
|
|
874
|
-
display: block; font-size: 0.8125rem; font-weight: 500; color:
|
|
886
|
+
display: block; font-size: 0.8125rem; font-weight: 500; color: var(--sk-text-primary); margin-bottom: 4px;
|
|
875
887
|
}
|
|
876
|
-
.bw-req { color:
|
|
888
|
+
.bw-req { color: var(--sk-error); }
|
|
877
889
|
.bw-field input, .bw-field textarea {
|
|
878
890
|
display: block; width: 100%;
|
|
879
|
-
padding: 10px 12px; border: 1.5px solid
|
|
880
|
-
font-size: 0.9375rem; font-family: inherit; color:
|
|
891
|
+
padding: 10px 12px; border: 1.5px solid var(--sk-input-border); border-radius: var(--sk-radius);
|
|
892
|
+
font-size: 0.9375rem; font-family: inherit; color: var(--sk-text-primary); background: var(--sk-bg);
|
|
881
893
|
transition: border-color 0.15s, box-shadow 0.15s;
|
|
882
894
|
}
|
|
883
|
-
.bw-field input::placeholder, .bw-field textarea::placeholder { color:
|
|
895
|
+
.bw-field input::placeholder, .bw-field textarea::placeholder { color: var(--sk-text-tertiary); }
|
|
884
896
|
.bw-field input:focus, .bw-field textarea:focus {
|
|
885
|
-
outline: none; border-color: var(--
|
|
886
|
-
box-shadow: 0 0 0 3px var(--
|
|
897
|
+
outline: none; border-color: var(--sk-primary);
|
|
898
|
+
box-shadow: 0 0 0 3px var(--sk-input-focus-ring);
|
|
887
899
|
}
|
|
888
900
|
.bw-submit {
|
|
889
901
|
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
|
|
890
902
|
width: 100%; padding: 14px; margin-top: 4px;
|
|
891
|
-
background: var(--
|
|
892
|
-
border-radius: var(--
|
|
903
|
+
background: var(--sk-primary); color: #fff; border: none;
|
|
904
|
+
border-radius: var(--sk-radius); font-size: 0.9375rem; font-weight: 600;
|
|
893
905
|
cursor: pointer; transition: background 0.15s;
|
|
894
906
|
}
|
|
895
|
-
.bw-submit:hover:not(:disabled) { background: var(--
|
|
907
|
+
.bw-submit:hover:not(:disabled) { background: var(--sk-primary-hover); }
|
|
896
908
|
.bw-submit:disabled { opacity: 0.55; cursor: not-allowed; }
|
|
897
909
|
|
|
898
910
|
/* \u2500\u2500 Success \u2500\u2500 */
|
|
@@ -900,31 +912,31 @@ var WIDGET_CSS = `
|
|
|
900
912
|
.bw-success-icon { margin: 0 auto 16px; width: 56px; height: 56px; animation: bw-fade-in 0.4s ease-out; }
|
|
901
913
|
.bw-conf-code {
|
|
902
914
|
display: inline-block; font-family: 'SF Mono', 'Fira Code', monospace;
|
|
903
|
-
background:
|
|
904
|
-
font-size: 0.8125rem; color:
|
|
915
|
+
background: var(--sk-surface); padding: 6px 14px; border-radius: 6px;
|
|
916
|
+
font-size: 0.8125rem; color: var(--sk-text-secondary); margin: 4px 0 20px; letter-spacing: 0.04em;
|
|
905
917
|
}
|
|
906
918
|
|
|
907
919
|
.bw-details-card {
|
|
908
|
-
text-align: left; background:
|
|
909
|
-
border-radius: var(--
|
|
920
|
+
text-align: left; background: var(--sk-bg-elevated); border: 1px solid var(--sk-border);
|
|
921
|
+
border-radius: var(--sk-radius); padding: 16px; margin-bottom: 20px;
|
|
910
922
|
}
|
|
911
|
-
.bw-detail-row { display: flex; gap: 12px; padding: 8px 0; border-bottom: 1px solid
|
|
923
|
+
.bw-detail-row { display: flex; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--sk-border); }
|
|
912
924
|
.bw-detail-row:last-child { border-bottom: none; }
|
|
913
|
-
.bw-detail-label { width: 70px; flex-shrink: 0; font-size: 0.8125rem; color:
|
|
914
|
-
.bw-detail-value { font-size: 0.875rem; font-weight: 500; color:
|
|
925
|
+
.bw-detail-label { width: 70px; flex-shrink: 0; font-size: 0.8125rem; color: var(--sk-text-tertiary); font-weight: 500; }
|
|
926
|
+
.bw-detail-value { font-size: 0.875rem; font-weight: 500; color: var(--sk-text-primary); }
|
|
915
927
|
|
|
916
|
-
.bw-cal-links-label { font-size: 0.8125rem; color:
|
|
928
|
+
.bw-cal-links-label { font-size: 0.8125rem; color: var(--sk-text-secondary); margin: 0 0 8px 0; }
|
|
917
929
|
.bw-cal-links { display: flex; gap: 8px; justify-content: center; margin-bottom: 20px; flex-wrap: wrap; }
|
|
918
930
|
.bw-cal-link {
|
|
919
931
|
display: inline-flex; align-items: center; gap: 6px;
|
|
920
|
-
padding: 8px 14px; border: 1.5px solid
|
|
921
|
-
text-decoration: none; color:
|
|
932
|
+
padding: 8px 14px; border: 1.5px solid var(--sk-border); border-radius: var(--sk-radius);
|
|
933
|
+
text-decoration: none; color: var(--sk-text-primary); font-size: 0.8125rem; font-weight: 500;
|
|
922
934
|
transition: all 0.15s;
|
|
923
935
|
}
|
|
924
|
-
.bw-cal-link:hover { border-color: var(--
|
|
936
|
+
.bw-cal-link:hover { border-color: var(--sk-primary); color: var(--sk-primary); }
|
|
925
937
|
|
|
926
|
-
.bw-email-notice { font-size: 0.8125rem; color:
|
|
927
|
-
.bw-email-notice strong { color:
|
|
938
|
+
.bw-email-notice { font-size: 0.8125rem; color: var(--sk-text-tertiary); margin: 0; }
|
|
939
|
+
.bw-email-notice strong { color: var(--sk-text-primary); font-weight: 500; }
|
|
928
940
|
`;
|
|
929
941
|
|
|
930
942
|
exports.BookingWidget = BookingWidget;
|
|
@@ -939,5 +951,5 @@ exports.formatDate = formatDate;
|
|
|
939
951
|
exports.formatDuration = formatDuration;
|
|
940
952
|
exports.formatTime = formatTime;
|
|
941
953
|
exports.releaseSlotHold = releaseSlotHold;
|
|
942
|
-
//# sourceMappingURL=chunk-
|
|
943
|
-
//# sourceMappingURL=chunk-
|
|
954
|
+
//# sourceMappingURL=chunk-WETCVFIK.js.map
|
|
955
|
+
//# sourceMappingURL=chunk-WETCVFIK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sync/api.ts","../src/sync/BookingWidget.tsx"],"names":["DEFAULT_API_URL","jsx","jsxs","useState","useRef","useMemo","useEffect","useCallback","Fragment"],"mappings":"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","file":"chunk-WETCVFIK.js","sourcesContent":["/**\n * Sync API Functions - Client-side API calls for booking widget\n *\n * Two modes:\n * 1. API-key flow (preferred): Uses x-api-key header → /sync/widget/* endpoints.\n * Project is resolved server-side from the key. No orgSlug needed.\n * 2. Public/orgSlug flow (legacy): Uses /sync/public/:org/* endpoints. No auth.\n */\n\nimport type { \n BookingType, \n TimeSlot, \n SlotHold, \n BookingResult,\n GuestInfo,\n} from './types'\n\nconst DEFAULT_API_URL = 'https://api.sonor.io'\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Config helper (same pattern as analytics, commerce, engage)\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction getApiConfig() {\n const apiUrl = typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_API_URL__ || DEFAULT_API_URL\n : DEFAULT_API_URL\n const apiKey = typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_API_KEY__\n : undefined\n return { apiUrl, apiKey }\n}\n\n/** Build headers – always include Content-Type for POSTs; add x-api-key when available */\nfunction buildHeaders(apiKey?: string, isPost = false): Record<string, string> {\n const headers: Record<string, string> = {}\n if (isPost) headers['Content-Type'] = 'application/json'\n if (apiKey) headers['x-api-key'] = apiKey\n return headers\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Read endpoints\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Fetch booking types.\n * - With apiKey → GET /sync/widget/types\n * - With orgSlug → GET /sync/public/:org/types\n */\nexport async function fetchBookingTypes(\n orgSlug?: string,\n apiUrl?: string,\n apiKey?: string,\n): Promise<BookingType[]> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/types`\n : `${url}/sync/public/${orgSlug}/types`\n\n const response = await fetch(endpoint, { headers: buildHeaders(key) })\n \n if (!response.ok) {\n const msg = await response.json().catch(() => ({ message: response.statusText }))\n const detail = (msg && typeof msg.message === 'string') ? msg.message : response.statusText\n throw new Error(`Failed to fetch booking types: ${response.status} ${detail}`)\n }\n \n const data = await response.json()\n return data.types || []\n}\n\n/**\n * Fetch booking type details\n */\nexport async function fetchBookingTypeDetails(\n typeSlug: string,\n orgSlug?: string,\n apiUrl?: string,\n apiKey?: string,\n): Promise<BookingType> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/types/${typeSlug}`\n : `${url}/sync/public/${orgSlug}/types/${typeSlug}`\n\n const response = await fetch(endpoint, { headers: buildHeaders(key) })\n \n if (!response.ok) {\n const msg = await response.json().catch(() => ({ message: response.statusText }))\n const detail = (msg && typeof msg.message === 'string') ? msg.message : response.statusText\n throw new Error(`Failed to fetch booking type: ${response.status} ${detail}`)\n }\n \n return response.json()\n}\n\n/**\n * Fetch available time slots for a specific date\n */\nexport async function fetchAvailability(\n typeSlug: string,\n date: string, // YYYY-MM-DD format\n orgSlug?: string,\n apiUrl?: string,\n apiKey?: string,\n timezone?: string,\n hostId?: string,\n): Promise<TimeSlot[]> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const params = new URLSearchParams({ date })\n if (timezone) params.append('timezone', timezone)\n if (hostId) params.append('hostId', hostId)\n\n const endpoint = key\n ? `${url}/sync/widget/availability/${typeSlug}?${params}`\n : `${url}/sync/public/${orgSlug}/availability/${typeSlug}?${params}`\n\n const response = await fetch(endpoint, { headers: buildHeaders(key) })\n \n if (!response.ok) {\n const msg = await response.json().catch(() => ({ message: response.statusText }))\n let detail = (msg && typeof msg.message === 'string') ? String(msg.message).trim() : (response.statusText || '').trim()\n // Avoid \"404 404\": blank when detail is just the status code or only digits\n if (detail === String(response.status) || /^\\d+$/.test(detail)) detail = ''\n const rest = detail ? `${response.status} ${detail}` : String(response.status)\n const fallback =\n response.status === 404 && !detail\n ? 'No times available. In the Portal, check Sync → Booking Types (Schedule a Tour) has a host assigned and the project API key is set for this site.'\n : null\n throw new Error(fallback || `Failed to fetch availability: ${rest}`.trim())\n }\n \n const data = await response.json()\n const raw = data.slots || []\n // Normalize API shape (startTime/endTime, no available) to widget shape (start/end, available)\n return raw.map((slot: Record<string, unknown>) => ({\n start: slot.startTime ?? slot.start,\n end: slot.endTime ?? slot.end,\n hostId: slot.hostId,\n available: slot.available !== false,\n })) as TimeSlot[]\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Write endpoints\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Hold a time slot temporarily (5-10 minutes)\n */\nexport async function createSlotHold(\n holdData: {\n bookingType: string\n slotStart: string\n slotEnd: string\n hostId: string\n sessionId: string\n guestEmail?: string\n },\n apiUrl?: string,\n apiKey?: string,\n): Promise<SlotHold> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/hold`\n : `${url}/sync/public/hold`\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: buildHeaders(key, true),\n body: JSON.stringify(holdData),\n })\n \n if (!response.ok) {\n throw new Error(`Failed to hold slot: ${response.statusText}`)\n }\n \n return response.json()\n}\n\n/**\n * Release a slot hold\n */\nexport async function releaseSlotHold(\n holdId: string,\n apiUrl?: string,\n apiKey?: string,\n): Promise<void> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/hold/${holdId}`\n : `${url}/sync/public/hold/${holdId}`\n\n await fetch(endpoint, {\n method: 'DELETE',\n headers: buildHeaders(key),\n })\n}\n\n/**\n * Create a booking\n */\nexport async function createBooking(\n bookingData: {\n bookingType: string\n scheduledAt: string\n hostId: string\n name: string\n email: string\n phone?: string\n company?: string\n message?: string\n source: string\n timezone?: string\n holdId?: string\n sessionId?: string\n sourceUrl?: string\n },\n apiUrl?: string,\n apiKey?: string,\n): Promise<BookingResult> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/booking`\n : `${url}/sync/public/booking`\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: buildHeaders(key, true),\n body: JSON.stringify(bookingData),\n })\n \n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.message || `Failed to create booking: ${response.statusText}`)\n }\n \n return response.json()\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Utility helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Get available dates for a month (helper for calendar view)\n * Returns dates that have at least one available slot\n */\nexport async function fetchAvailableDates(\n typeSlug: string,\n startDate: string, // YYYY-MM-DD\n endDate: string, // YYYY-MM-DD\n orgSlug?: string,\n apiUrl?: string,\n apiKey?: string,\n timezone?: string,\n): Promise<string[]> {\n const availableDates: string[] = []\n const start = new Date(startDate)\n const end = new Date(endDate)\n \n const current = new Date(start)\n while (current <= end) {\n const dateStr = current.toISOString().split('T')[0]\n \n try {\n const slots = await fetchAvailability(typeSlug, dateStr, orgSlug, apiUrl, apiKey, timezone)\n if (slots.some(s => s.available)) {\n availableDates.push(dateStr)\n }\n } catch {\n // Skip dates that fail to load\n }\n \n current.setDate(current.getDate() + 1)\n }\n \n return availableDates\n}\n\n/**\n * Detect user's timezone\n */\nexport function detectTimezone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone\n } catch {\n return 'America/New_York'\n }\n}\n\n/**\n * Format time for display\n */\nexport function formatTime(isoString: string, timezone: string): string {\n const date = new Date(isoString)\n return date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n timeZone: timezone,\n })\n}\n\n/**\n * Format date for display\n */\nexport function formatDate(isoString: string, timezone: string): string {\n const date = new Date(isoString)\n return date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n timeZone: timezone,\n })\n}\n\n/**\n * Format duration for display\n */\nexport function formatDuration(minutes: number): string {\n if (minutes < 60) {\n return `${minutes} min`\n }\n const hours = Math.floor(minutes / 60)\n const mins = minutes % 60\n if (mins === 0) {\n return `${hours} hour${hours > 1 ? 's' : ''}`\n }\n return `${hours}h ${mins}m`\n}\n","'use client'\n\n/**\n * BookingWidget - Premium embeddable booking widget for client sites\n *\n * Calendly-inspired scheduling experience:\n * 1. Full month calendar for date selection\n * 2. Scrollable time-slot column\n * 3. Polished guest information form\n * 4. Animated booking confirmation\n *\n * Ships with self-contained CSS (no external deps) so it works on any site.\n *\n * @example\n * ```tsx\n * import { BookingWidget } from '@sonordev/site-kit'\n *\n * <BookingWidget\n * orgSlug=\"manhattan-development-group\"\n * bookingTypeSlug=\"schedule-a-tour\"\n * hideTypeSelector\n * onBookingComplete={(r) => console.log(r)}\n * />\n * ```\n */\n\nimport * as React from 'react'\nimport { useState, useEffect, useCallback, useMemo, useRef } from 'react'\nimport type {\n BookingWidgetProps,\n BookingType,\n TimeSlot,\n GuestInfo,\n BookingResult,\n SlotHold,\n} from './types'\nimport {\n fetchBookingTypes,\n fetchBookingTypeDetails,\n fetchAvailability,\n createSlotHold,\n releaseSlotHold,\n createBooking,\n detectTimezone,\n formatTime,\n formatDate,\n formatDuration,\n} from './api'\n\n// ─── Constants ─────────────────────────────────────────────────────────────────\n\nconst DEFAULT_API_URL = 'https://api.sonor.io'\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] as const\nconst MONTHS = [\n 'January','February','March','April','May','June',\n 'July','August','September','October','November','December',\n] as const\n\ntype BookingStep = 'type' | 'datetime' | 'form' | 'success'\n\n// ─── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction isSameDay(a: Date, b: Date) {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nfunction isBeforeDay(a: Date, b: Date) {\n const ac = new Date(a.getFullYear(), a.getMonth(), a.getDate())\n const bc = new Date(b.getFullYear(), b.getMonth(), b.getDate())\n return ac < bc\n}\n\nfunction calendarDays(year: number, month: number): (Date | null)[] {\n const first = new Date(year, month, 1)\n const last = new Date(year, month + 1, 0)\n const cells: (Date | null)[] = []\n for (let i = 0; i < first.getDay(); i++) cells.push(null) // leading blanks\n for (let d = 1; d <= last.getDate(); d++) cells.push(new Date(year, month, d))\n return cells\n}\n\n// ─── SVG Icons (inline, no deps) ──────────────────────────────────────────────\n\nfunction ChevronLeft() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12.5 15L7.5 10L12.5 5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction ChevronRight() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 5L12.5 10L7.5 15\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction ClockIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M8 4.5V8L10 10\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction GlobeIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M1.5 8H14.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M8 1.5C9.66 3.34 10.61 5.62 10.61 8C10.61 10.38 9.66 12.66 8 14.5C6.34 12.66 5.39 10.38 5.39 8C5.39 5.62 6.34 3.34 8 1.5Z\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n </svg>\n )\n}\n\nfunction CheckCircleIcon() {\n return (\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"28\" cy=\"28\" r=\"28\" fill=\"var(--sk-primary)\"/>\n <path d=\"M18 28.5L24.5 35L38 21.5\" stroke=\"white\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction CalendarPlusIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1.5\" y=\"2.5\" width=\"13\" height=\"12\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M1.5 6.5H14.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M5 1V4M11 1V4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\"/>\n <path d=\"M8 9V12M6.5 10.5H9.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\"/>\n </svg>\n )\n}\n\nfunction ArrowLeftIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L5 8L10 13\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction SpinnerIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className=\"bw-spinner\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeDasharray=\"50.265\" strokeDashoffset=\"25\" opacity=\"0.3\"/>\n <circle cx=\"10\" cy=\"10\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeDasharray=\"50.265\" strokeDashoffset=\"37.7\"/>\n </svg>\n )\n}\n\n// ─── Component ─────────────────────────────────────────────────────────────────\n\nexport function BookingWidget({\n orgSlug,\n apiKey: propApiKey,\n apiUrl: propApiUrl,\n bookingTypeSlug,\n timezone: propTimezone,\n className = '',\n daysToShow = 60,\n onBookingComplete,\n onError,\n hideTypeSelector = false,\n styles = {},\n}: BookingWidgetProps) {\n // Resolve API key: prop > window global\n const apiKey = propApiKey || (typeof window !== 'undefined' ? (window as any).__SITE_KIT_API_KEY__ : undefined)\n const apiUrl = propApiUrl || (typeof window !== 'undefined' ? (window as any).__SITE_KIT_API_URL__ : undefined) || DEFAULT_API_URL\n // ── State ──\n const [step, setStep] = useState<BookingStep>(bookingTypeSlug ? 'datetime' : 'type')\n const [loading, setLoading] = useState(false)\n const [slotsLoading, setSlotsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const [bookingTypes, setBookingTypes] = useState<BookingType[]>([])\n const [selectedType, setSelectedType] = useState<BookingType | null>(null)\n const [viewMonth, setViewMonth] = useState(() => new Date())\n const [selectedDate, setSelectedDate] = useState<Date | null>(null)\n const [slots, setSlots] = useState<TimeSlot[]>([])\n const [selectedSlot, setSelectedSlot] = useState<TimeSlot | null>(null)\n const [confirmedSlot, setConfirmedSlot] = useState(false)\n const [hold, setHold] = useState<SlotHold | null>(null)\n const [guestInfo, setGuestInfo] = useState<GuestInfo>({ name: '', email: '' })\n const [bookingResult, setBookingResult] = useState<BookingResult | null>(null)\n const [submitting, setSubmitting] = useState(false)\n\n const slotsRef = useRef<HTMLDivElement>(null)\n const today = useMemo(() => { const d = new Date(); d.setHours(0,0,0,0); return d }, [])\n const timezone = useMemo(() => propTimezone || detectTimezone(), [propTimezone])\n\n const shortTz = useMemo(() => {\n try {\n const parts = Intl.DateTimeFormat('en-US', { timeZone: timezone, timeZoneName: 'short' })\n .formatToParts(new Date())\n return parts.find(p => p.type === 'timeZoneName')?.value || timezone\n } catch { return timezone }\n }, [timezone])\n\n // Calendar grid for the current view month\n const days = useMemo(() => calendarDays(viewMonth.getFullYear(), viewMonth.getMonth()), [viewMonth])\n const maxDate = useMemo(() => { const d = new Date(today); d.setDate(d.getDate() + daysToShow); return d }, [today, daysToShow])\n\n // ── Data Loading ──\n\n useEffect(() => {\n if (bookingTypeSlug) {\n setLoading(true)\n fetchBookingTypeDetails(bookingTypeSlug, orgSlug, apiUrl, apiKey)\n .then(type => { setSelectedType(type); setStep('datetime') })\n .catch(err => { setError(err.message); onError?.(err) })\n .finally(() => setLoading(false))\n } else {\n setLoading(true)\n fetchBookingTypes(orgSlug, apiUrl, apiKey)\n .then(types => setBookingTypes(types.filter(t => t.is_active)))\n .catch(err => { setError(err.message); onError?.(err) })\n .finally(() => setLoading(false))\n }\n }, [orgSlug, apiKey, bookingTypeSlug, apiUrl, onError])\n\n useEffect(() => {\n if (!selectedDate || !selectedType) return\n const dateStr = selectedDate.toISOString().split('T')[0]\n setSlotsLoading(true)\n setSlots([])\n setSelectedSlot(null)\n setConfirmedSlot(false)\n\n fetchAvailability(selectedType.slug, dateStr, orgSlug, apiUrl, apiKey, timezone)\n .then(s => setSlots(s.filter(slot => slot.available)))\n .catch(err => { setError(err.message); onError?.(err) })\n .finally(() => setSlotsLoading(false))\n }, [selectedDate, selectedType, orgSlug, apiKey, apiUrl, timezone, onError])\n\n // ── Handlers ──\n\n const handleSlotSelect = useCallback((slot: TimeSlot) => {\n setSelectedSlot(slot)\n setConfirmedSlot(false)\n }, [])\n\n const handleSlotConfirm = useCallback(async () => {\n if (!selectedType || !selectedSlot) return\n if (hold) await releaseSlotHold(hold.holdId, apiUrl, apiKey).catch(() => {})\n\n setLoading(true)\n try {\n const newHold = await createSlotHold(\n {\n bookingType: selectedType.slug,\n slotStart: selectedSlot.start,\n slotEnd: selectedSlot.end,\n hostId: selectedSlot.hostId || '',\n sessionId: `bw-${Date.now()}`,\n },\n apiUrl,\n apiKey,\n )\n setHold(newHold)\n setConfirmedSlot(true)\n setStep('form')\n } catch (err: any) {\n setError(err.message)\n onError?.(err)\n } finally {\n setLoading(false)\n }\n }, [selectedType, selectedSlot, hold, timezone, apiUrl, apiKey, onError])\n\n const handleBookingSubmit = useCallback(async (e: React.FormEvent) => {\n e.preventDefault()\n if (!selectedType || !selectedSlot) return\n setSubmitting(true)\n setError(null)\n\n try {\n const result = await createBooking(\n {\n bookingType: selectedType.slug,\n scheduledAt: selectedSlot.start,\n hostId: selectedSlot.hostId || '',\n name: guestInfo.name,\n email: guestInfo.email,\n phone: guestInfo.phone,\n message: guestInfo.notes,\n source: 'main-site',\n timezone,\n holdId: hold?.holdId,\n sessionId: `bw-${Date.now()}`,\n sourceUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n },\n apiUrl,\n apiKey,\n )\n setBookingResult(result)\n setStep('success')\n onBookingComplete?.(result)\n } catch (err: any) {\n setError(err.message)\n onError?.(err)\n } finally {\n setSubmitting(false)\n }\n }, [selectedType, selectedSlot, guestInfo, timezone, hold, apiUrl, apiKey, onBookingComplete, onError])\n\n useEffect(() => {\n return () => { if (hold) releaseSlotHold(hold.holdId, apiUrl, apiKey).catch(() => {}) }\n }, [hold, apiUrl, apiKey])\n\n // ── Month Navigation ──\n\n const canGoPrev = viewMonth.getFullYear() > today.getFullYear() || viewMonth.getMonth() > today.getMonth()\n const canGoNext = viewMonth < maxDate\n\n const goMonth = (dir: -1 | 1) => {\n setViewMonth(prev => new Date(prev.getFullYear(), prev.getMonth() + dir, 1))\n }\n\n // ── Group slots by morning/afternoon ──\n\n const groupedSlots = useMemo(() => {\n const morning: TimeSlot[] = []\n const afternoon: TimeSlot[] = []\n const evening: TimeSlot[] = []\n for (const s of slots) {\n const h = new Date(s.start).getHours()\n if (h < 12) morning.push(s)\n else if (h < 17) afternoon.push(s)\n else evening.push(s)\n }\n return { morning, afternoon, evening }\n }, [slots])\n\n // ── CSS vars ──\n\n const cssVars = {\n '--sk-primary': styles.primaryColor || '#0069ff',\n '--sk-primary-hover': styles.primaryColor\n ? `color-mix(in srgb, ${styles.primaryColor} 90%, black)`\n : '#0055d4',\n '--sk-primary-light': styles.primaryColor\n ? `color-mix(in srgb, ${styles.primaryColor} 12%, white)`\n : '#e8f1ff',\n '--sk-bg': '#ffffff',\n '--sk-bg-elevated': '#f9fafb',\n '--sk-surface': '#f3f4f6',\n '--sk-text-primary': '#1a1a1a',\n '--sk-text-secondary': '#6b7280',\n '--sk-text-tertiary': '#9ca3af',\n '--sk-border': '#e5e7eb',\n '--sk-error': '#ef4444',\n '--sk-success': '#10b981',\n '--sk-warning': '#f59e0b',\n '--sk-radius': styles.borderRadius || '8px',\n '--sk-font': styles.fontFamily || \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n '--sk-input-border': '#e5e7eb',\n '--sk-input-focus-ring': styles.primaryColor\n ? `color-mix(in srgb, ${styles.primaryColor} 12%, white)`\n : '#e8f1ff',\n } as React.CSSProperties\n\n // ── Render ──\n\n return (\n <div className={`bw-root ${className}`} style={cssVars}>\n {/* Error Toast */}\n {error && (\n <div className=\"bw-error\" role=\"alert\">\n <span>{error}</span>\n <button onClick={() => setError(null)} aria-label=\"Dismiss error\">×</button>\n </div>\n )}\n\n {/* ───── Type Selection ───── */}\n {step === 'type' && !hideTypeSelector && (\n <div className=\"bw-step bw-fade-in\">\n <h2 className=\"bw-heading\">Select a Service</h2>\n {loading ? (\n <div className=\"bw-loading\"><SpinnerIcon /> Loading services...</div>\n ) : (\n <div className=\"bw-type-list\">\n {bookingTypes.map(type => (\n <button\n key={type.id}\n className=\"bw-type-card\"\n onClick={() => { setSelectedType(type); setStep('datetime') }}\n >\n <span className=\"bw-type-name\">{type.name}</span>\n {type.description && <span className=\"bw-type-desc\">{type.description}</span>}\n <span className=\"bw-type-meta\">\n <ClockIcon /> {formatDuration(type.duration_minutes)}\n {type.price_cents ? ` · $${(type.price_cents / 100).toFixed(2)}` : ' · Free'}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* ───── Date & Time ───── */}\n {step === 'datetime' && selectedType && (\n <div className=\"bw-step bw-fade-in\">\n {/* Booking info header */}\n <div className=\"bw-info-header\">\n {!bookingTypeSlug && (\n <button className=\"bw-back\" onClick={() => { setSelectedType(null); setStep('type') }}>\n <ArrowLeftIcon />\n </button>\n )}\n <div>\n <h2 className=\"bw-heading\">{selectedType.name}</h2>\n <div className=\"bw-meta-row\">\n <span className=\"bw-badge\"><ClockIcon /> {formatDuration(selectedType.duration_minutes)}</span>\n <span className=\"bw-badge\"><GlobeIcon /> {shortTz}</span>\n </div>\n </div>\n </div>\n\n <div className=\"bw-datetime-layout\">\n {/* Calendar */}\n <div className=\"bw-calendar\">\n <div className=\"bw-cal-header\">\n <button className=\"bw-cal-nav\" onClick={() => goMonth(-1)} disabled={!canGoPrev} aria-label=\"Previous month\">\n <ChevronLeft />\n </button>\n <span className=\"bw-cal-title\">{MONTHS[viewMonth.getMonth()]} {viewMonth.getFullYear()}</span>\n <button className=\"bw-cal-nav\" onClick={() => goMonth(1)} disabled={!canGoNext} aria-label=\"Next month\">\n <ChevronRight />\n </button>\n </div>\n <div className=\"bw-cal-weekdays\">\n {DAYS.map(d => <span key={d} className=\"bw-cal-wd\">{d}</span>)}\n </div>\n <div className=\"bw-cal-grid\">\n {days.map((date, i) => {\n if (!date) return <span key={`e-${i}`} className=\"bw-cal-empty\" />\n const past = isBeforeDay(date, today)\n const future = date > maxDate\n const disabled = past || future\n const sel = selectedDate && isSameDay(date, selectedDate)\n const isToday = isSameDay(date, today)\n return (\n <button\n key={date.toISOString()}\n className={`bw-cal-day${sel ? ' selected' : ''}${isToday ? ' today' : ''}${disabled ? ' disabled' : ''}`}\n onClick={() => !disabled && setSelectedDate(date)}\n disabled={disabled}\n aria-label={date.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric' })}\n aria-pressed={sel || undefined}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Time Slots (appear when date selected) */}\n <div className={`bw-times${selectedDate ? ' visible' : ''}`} ref={slotsRef}>\n {!selectedDate ? (\n <div className=\"bw-times-placeholder\">\n <CalendarPlusIcon />\n <span>Select a date to view available times</span>\n </div>\n ) : slotsLoading ? (\n <div className=\"bw-loading\"><SpinnerIcon /> Loading times...</div>\n ) : slots.length === 0 ? (\n <div className=\"bw-times-empty\">No available times on this date. Try another day.</div>\n ) : (\n <div className=\"bw-times-scroll\">\n <p className=\"bw-times-date\">\n {selectedDate.toLocaleDateString('en-US', { weekday: 'long', month: 'short', day: 'numeric' })}\n </p>\n {groupedSlots.morning.length > 0 && (\n <div className=\"bw-time-group\">\n <span className=\"bw-time-label\">Morning</span>\n {groupedSlots.morning.map(slot => (\n <TimeButton key={slot.start} slot={slot} selected={selectedSlot?.start === slot.start} confirmed={confirmedSlot && selectedSlot?.start === slot.start} onClick={() => handleSlotSelect(slot)} onConfirm={handleSlotConfirm} timezone={timezone} loading={loading} />\n ))}\n </div>\n )}\n {groupedSlots.afternoon.length > 0 && (\n <div className=\"bw-time-group\">\n <span className=\"bw-time-label\">Afternoon</span>\n {groupedSlots.afternoon.map(slot => (\n <TimeButton key={slot.start} slot={slot} selected={selectedSlot?.start === slot.start} confirmed={confirmedSlot && selectedSlot?.start === slot.start} onClick={() => handleSlotSelect(slot)} onConfirm={handleSlotConfirm} timezone={timezone} loading={loading} />\n ))}\n </div>\n )}\n {groupedSlots.evening.length > 0 && (\n <div className=\"bw-time-group\">\n <span className=\"bw-time-label\">Evening</span>\n {groupedSlots.evening.map(slot => (\n <TimeButton key={slot.start} slot={slot} selected={selectedSlot?.start === slot.start} confirmed={confirmedSlot && selectedSlot?.start === slot.start} onClick={() => handleSlotSelect(slot)} onConfirm={handleSlotConfirm} timezone={timezone} loading={loading} />\n ))}\n </div>\n )}\n {(groupedSlots.afternoon.length > 0 || groupedSlots.evening.length > 0) && (\n <p className=\"bw-times-scroll-hint\">Scroll for more times</p>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* ───── Guest Form ───── */}\n {step === 'form' && selectedType && selectedSlot && (\n <div className=\"bw-step bw-fade-in\">\n <div className=\"bw-info-header\">\n <button className=\"bw-back\" onClick={() => setStep('datetime')}>\n <ArrowLeftIcon />\n </button>\n <div>\n <h2 className=\"bw-heading\">Your Details</h2>\n <div className=\"bw-meta-row\">\n <span className=\"bw-badge\"><ClockIcon /> {formatDuration(selectedType.duration_minutes)}</span>\n <span className=\"bw-badge-accent\">\n {formatDate(selectedSlot.start, timezone)} · {formatTime(selectedSlot.start, timezone)}\n </span>\n </div>\n </div>\n </div>\n\n {hold && (\n <div className=\"bw-hold-notice\">\n <SpinnerIcon /> Slot held for you — complete your details to confirm.\n </div>\n )}\n\n <form onSubmit={handleBookingSubmit} className=\"bw-form\">\n <div className=\"bw-field\">\n <label htmlFor=\"bw-name\">Name <span className=\"bw-req\">*</span></label>\n <input\n id=\"bw-name\"\n type=\"text\"\n required\n value={guestInfo.name}\n onChange={e => setGuestInfo(p => ({ ...p, name: e.target.value }))}\n placeholder=\"Jane Smith\"\n autoComplete=\"name\"\n />\n </div>\n <div className=\"bw-field\">\n <label htmlFor=\"bw-email\">Email <span className=\"bw-req\">*</span></label>\n <input\n id=\"bw-email\"\n type=\"email\"\n required\n value={guestInfo.email}\n onChange={e => setGuestInfo(p => ({ ...p, email: e.target.value }))}\n placeholder=\"jane@example.com\"\n autoComplete=\"email\"\n />\n </div>\n <div className=\"bw-field\">\n <label htmlFor=\"bw-phone\">Phone</label>\n <input\n id=\"bw-phone\"\n type=\"tel\"\n value={guestInfo.phone || ''}\n onChange={e => setGuestInfo(p => ({ ...p, phone: e.target.value }))}\n placeholder=\"(555) 123-4567\"\n autoComplete=\"tel\"\n />\n </div>\n <div className=\"bw-field\">\n <label htmlFor=\"bw-notes\">Notes</label>\n <textarea\n id=\"bw-notes\"\n value={guestInfo.notes || ''}\n onChange={e => setGuestInfo(p => ({ ...p, notes: e.target.value }))}\n placeholder=\"Anything you'd like us to know...\"\n rows={3}\n />\n </div>\n <button type=\"submit\" className=\"bw-submit\" disabled={submitting || !guestInfo.name || !guestInfo.email}>\n {submitting ? <><SpinnerIcon /> Confirming...</> : 'Confirm Booking'}\n </button>\n </form>\n </div>\n )}\n\n {/* ───── Success ───── */}\n {step === 'success' && bookingResult && (\n <div className=\"bw-step bw-fade-in bw-success\">\n <div className=\"bw-success-icon\"><CheckCircleIcon /></div>\n <h2 className=\"bw-heading\">You’re Booked!</h2>\n\n <div className=\"bw-details-card\">\n <div className=\"bw-detail-row\">\n <span className=\"bw-detail-label\">When</span>\n <span className=\"bw-detail-value\">\n {formatDate(bookingResult.booking.scheduledAt, timezone)}<br/>\n {formatTime(bookingResult.booking.scheduledAt, timezone)} ({shortTz})\n </span>\n </div>\n <div className=\"bw-detail-row\">\n <span className=\"bw-detail-label\">Duration</span>\n <span className=\"bw-detail-value\">{formatDuration(bookingResult.booking.durationMinutes)}</span>\n </div>\n {bookingResult.booking.hostName && (\n <div className=\"bw-detail-row\">\n <span className=\"bw-detail-label\">With</span>\n <span className=\"bw-detail-value\">{bookingResult.booking.hostName}</span>\n </div>\n )}\n </div>\n\n <p className=\"bw-cal-links-label\">Add to your calendar</p>\n <div className=\"bw-cal-links\">\n <a href={bookingResult.calendarLinks.google} target=\"_blank\" rel=\"noopener noreferrer\" className=\"bw-cal-link\">\n <CalendarPlusIcon /> Google\n </a>\n <a href={bookingResult.calendarLinks.outlook} target=\"_blank\" rel=\"noopener noreferrer\" className=\"bw-cal-link\">\n <CalendarPlusIcon /> Outlook\n </a>\n <a href={bookingResult.calendarLinks.ics} download className=\"bw-cal-link\">\n <CalendarPlusIcon /> iCal\n </a>\n </div>\n\n <p className=\"bw-email-notice\">If your host uses Google Calendar, a calendar invite will be sent to <strong>{guestInfo.email}</strong>.</p>\n </div>\n )}\n\n {/* Loading overlay for initial type load */}\n {loading && step === 'datetime' && !selectedType && (\n <div className=\"bw-loading\"><SpinnerIcon /> Loading...</div>\n )}\n\n <style>{WIDGET_CSS}</style>\n </div>\n )\n}\n\n// ─── TimeButton Sub-component ──────────────────────────────────────────────────\n\nfunction TimeButton({\n slot, selected, confirmed, onClick, onConfirm, timezone, loading,\n}: {\n slot: TimeSlot; selected: boolean; confirmed: boolean; onClick: () => void; onConfirm: () => void; timezone: string; loading: boolean\n}) {\n if (selected && !confirmed) {\n return (\n <div className=\"bw-time-btn-wrap selected\">\n <span className=\"bw-time-text\">{formatTime(slot.start, timezone)}</span>\n <button className=\"bw-time-confirm\" onClick={onConfirm} disabled={loading}>\n {loading ? <SpinnerIcon /> : 'Confirm'}\n </button>\n </div>\n )\n }\n return (\n <button className={`bw-time-btn${selected ? ' selected' : ''}`} onClick={onClick} disabled={loading}>\n {formatTime(slot.start, timezone)}\n </button>\n )\n}\n\n// ─── Styles ────────────────────────────────────────────────────────────────────\n\nconst WIDGET_CSS = `\n/* ── Base ── */\n.bw-root {\n font-family: var(--sk-font);\n color: var(--sk-text-primary);\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n box-sizing: border-box;\n isolation: isolate;\n}\n.bw-root *, .bw-root *::before, .bw-root *::after { box-sizing: border-box; }\n\n/* ── Animation ── */\n@keyframes bw-fade-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }\n@keyframes bw-spin { to { transform: rotate(360deg); } }\n.bw-fade-in { animation: bw-fade-in 0.25s ease-out; }\n.bw-spinner { animation: bw-spin 0.8s linear infinite; }\n\n/* ── Error ── */\n.bw-error {\n display: flex; align-items: center; justify-content: space-between; gap: 12px;\n background: #fef2f2; border: 1px solid #fecaca; color: #b91c1c;\n padding: 10px 14px; border-radius: var(--sk-radius); margin-bottom: 16px; font-size: 0.875rem;\n}\n.bw-error button { background: none; border: none; color: inherit; cursor: pointer; font-size: 1.25rem; line-height: 1; padding: 0; }\n\n/* ── Headings ── */\n.bw-heading { font-size: 1.125rem; font-weight: 600; margin: 0; letter-spacing: -0.01em; }\n.bw-meta-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }\n.bw-badge {\n display: inline-flex; align-items: center; gap: 4px;\n font-size: 0.8125rem; color: var(--sk-text-secondary); font-weight: 400;\n}\n.bw-badge-accent {\n display: inline-flex; align-items: center; gap: 4px;\n font-size: 0.8125rem; color: var(--sk-primary); font-weight: 500;\n}\n\n/* ── Info Header ── */\n.bw-info-header { display: flex; align-items: flex-start; gap: 8px; margin-bottom: 20px; }\n.bw-back {\n display: inline-flex; align-items: center; justify-content: center;\n width: 32px; height: 32px; border-radius: 50%; border: 1px solid var(--sk-border);\n background: var(--sk-bg); cursor: pointer; color: var(--sk-text-secondary); flex-shrink: 0; margin-top: 1px;\n transition: all 0.15s;\n}\n.bw-back:hover { background: var(--sk-surface); border-color: var(--sk-border); }\n\n/* ── Loading ── */\n.bw-loading {\n display: flex; align-items: center; justify-content: center; gap: 8px;\n padding: 32px; color: var(--sk-text-secondary); font-size: 0.875rem;\n}\n\n/* ── Type Selection ── */\n.bw-type-list { display: flex; flex-direction: column; gap: 10px; }\n.bw-type-card {\n display: flex; flex-direction: column; text-align: left; gap: 4px;\n padding: 16px; border: 1.5px solid var(--sk-border); border-radius: var(--sk-radius);\n background: var(--sk-bg); cursor: pointer; transition: all 0.15s;\n}\n.bw-type-card:hover { border-color: var(--sk-primary); box-shadow: 0 0 0 3px var(--sk-primary-light); }\n.bw-type-name { font-weight: 600; font-size: 0.9375rem; }\n.bw-type-desc { color: var(--sk-text-secondary); font-size: 0.8125rem; }\n.bw-type-meta { display: flex; align-items: center; gap: 4px; font-size: 0.8125rem; color: var(--sk-text-tertiary); margin-top: 4px; }\n\n/* ── Date-Time Layout ── */\n.bw-datetime-layout {\n display: flex; gap: 0; border-top: 1px solid var(--sk-border); padding-top: 16px;\n}\n@media (max-width: 559px) {\n .bw-datetime-layout { flex-direction: column; }\n}\n@media (min-width: 560px) {\n .bw-datetime-layout { min-height: 400px; }\n .bw-calendar { flex: 1 1 auto; padding-right: 16px; border-right: 1px solid var(--sk-border); }\n .bw-times { width: 180px; flex-shrink: 0; padding-left: 16px; }\n}\n\n/* ── Calendar ── */\n.bw-cal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }\n.bw-cal-title { font-weight: 600; font-size: 0.9375rem; color: var(--sk-text-primary); }\n.bw-cal-nav {\n display: inline-flex; align-items: center; justify-content: center;\n width: 32px; height: 32px; border-radius: 50%; border: none;\n background: transparent; cursor: pointer; color: var(--sk-text-primary); transition: background 0.15s;\n}\n.bw-cal-nav:hover:not(:disabled) { background: var(--sk-surface); }\n.bw-cal-nav:disabled { opacity: 0.25; cursor: default; }\n\n.bw-cal-weekdays { display: grid; grid-template-columns: repeat(7, 1fr); gap: 0; text-align: center; margin-bottom: 4px; }\n.bw-cal-wd { font-size: 0.6875rem; font-weight: 600; color: var(--sk-text-tertiary); text-transform: uppercase; letter-spacing: 0.04em; padding: 4px 0; }\n\n.bw-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }\n.bw-cal-empty { aspect-ratio: 1; }\n.bw-cal-day {\n aspect-ratio: 1; display: flex; align-items: center; justify-content: center;\n border: none; background: none; border-radius: 50%;\n font-size: 0.8125rem; font-weight: 500; cursor: pointer;\n color: var(--sk-text-primary); transition: all 0.15s; position: relative;\n}\n.bw-cal-day:hover:not(.disabled):not(.selected) { background: var(--sk-surface); }\n.bw-cal-day.today:not(.selected)::after {\n content: ''; position: absolute; bottom: 3px; left: 50%; transform: translateX(-50%);\n width: 4px; height: 4px; border-radius: 50%; background: var(--sk-primary);\n}\n.bw-cal-day.selected {\n background: var(--sk-primary); color: #fff; font-weight: 600;\n}\n/* Past / out-of-range: visible on light and dark parent pages */\n.bw-root button.bw-cal-day.disabled {\n color: var(--sk-text-tertiary);\n cursor: default;\n opacity: 1;\n}\n\n/* ── Time Slots ── */\n.bw-times { transition: opacity 0.2s; }\n.bw-times:not(.visible) { opacity: 0.5; }\n.bw-times.visible { opacity: 1; }\n.bw-times-placeholder {\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;\n height: 100%; min-height: 160px; color: var(--sk-text-tertiary); font-size: 0.8125rem; text-align: center; padding: 16px;\n}\n.bw-times-empty {\n display: flex; align-items: center; justify-content: center;\n height: 100%; min-height: 160px; color: var(--sk-text-tertiary); font-size: 0.8125rem; text-align: center; padding: 16px;\n}\n.bw-times-scroll { overflow-y: auto; max-height: 400px; overflow-x: hidden; }\n.bw-times-date { font-weight: 600; font-size: 0.8125rem; color: var(--sk-text-primary); margin: 0 0 12px 0; }\n.bw-time-group { margin-bottom: 16px; }\n.bw-times-scroll-hint {\n font-size: 0.6875rem; color: var(--sk-text-tertiary); text-align: center; margin: 8px 0 0 0; padding-bottom: 8px;\n}\n.bw-time-label { display: block; font-size: 0.6875rem; font-weight: 600; color: var(--sk-text-tertiary); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 6px; }\n\n.bw-time-btn {\n display: block; width: 100%;\n padding: 10px 12px; margin-bottom: 6px;\n border: 1.5px solid var(--sk-border); border-radius: var(--sk-radius);\n background: var(--sk-bg); cursor: pointer;\n font-size: 0.875rem; font-weight: 500; color: var(--sk-primary); text-align: center;\n transition: all 0.15s;\n}\n.bw-time-btn:hover:not(:disabled) {\n border-color: var(--sk-primary); background: var(--sk-primary-light);\n}\n.bw-time-btn.selected {\n border-color: var(--sk-primary); background: var(--sk-primary); color: #fff;\n}\n.bw-time-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n\n.bw-time-btn-wrap {\n display: flex; align-items: center; gap: 6px; margin-bottom: 6px;\n border: 1.5px solid var(--sk-primary); border-radius: var(--sk-radius); overflow: hidden;\n animation: bw-fade-in 0.15s ease-out;\n}\n.bw-time-btn-wrap .bw-time-text {\n flex: 1; padding: 10px 12px; font-size: 0.875rem; font-weight: 500; color: var(--sk-text-primary); text-align: center;\n background: var(--sk-primary-light);\n}\n.bw-time-confirm {\n display: inline-flex; align-items: center; justify-content: center; gap: 4px;\n padding: 10px 16px; border: none;\n background: var(--sk-primary); color: #fff;\n font-size: 0.8125rem; font-weight: 600; cursor: pointer;\n transition: background 0.15s;\n}\n.bw-time-confirm:hover:not(:disabled) { background: var(--sk-primary-hover); }\n.bw-time-confirm:disabled { opacity: 0.7; cursor: not-allowed; }\n\n/* ── Form ── */\n.bw-hold-notice {\n display: flex; align-items: center; gap: 8px;\n background: var(--sk-primary-light); color: var(--sk-primary);\n padding: 10px 14px; border-radius: var(--sk-radius);\n font-size: 0.8125rem; font-weight: 500; margin-bottom: 20px;\n}\n.bw-form { display: flex; flex-direction: column; gap: 16px; }\n.bw-field label {\n display: block; font-size: 0.8125rem; font-weight: 500; color: var(--sk-text-primary); margin-bottom: 4px;\n}\n.bw-req { color: var(--sk-error); }\n.bw-field input, .bw-field textarea {\n display: block; width: 100%;\n padding: 10px 12px; border: 1.5px solid var(--sk-input-border); border-radius: var(--sk-radius);\n font-size: 0.9375rem; font-family: inherit; color: var(--sk-text-primary); background: var(--sk-bg);\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n.bw-field input::placeholder, .bw-field textarea::placeholder { color: var(--sk-text-tertiary); }\n.bw-field input:focus, .bw-field textarea:focus {\n outline: none; border-color: var(--sk-primary);\n box-shadow: 0 0 0 3px var(--sk-input-focus-ring);\n}\n.bw-submit {\n display: inline-flex; align-items: center; justify-content: center; gap: 8px;\n width: 100%; padding: 14px; margin-top: 4px;\n background: var(--sk-primary); color: #fff; border: none;\n border-radius: var(--sk-radius); font-size: 0.9375rem; font-weight: 600;\n cursor: pointer; transition: background 0.15s;\n}\n.bw-submit:hover:not(:disabled) { background: var(--sk-primary-hover); }\n.bw-submit:disabled { opacity: 0.55; cursor: not-allowed; }\n\n/* ── Success ── */\n.bw-success { text-align: center; }\n.bw-success-icon { margin: 0 auto 16px; width: 56px; height: 56px; animation: bw-fade-in 0.4s ease-out; }\n.bw-conf-code {\n display: inline-block; font-family: 'SF Mono', 'Fira Code', monospace;\n background: var(--sk-surface); padding: 6px 14px; border-radius: 6px;\n font-size: 0.8125rem; color: var(--sk-text-secondary); margin: 4px 0 20px; letter-spacing: 0.04em;\n}\n\n.bw-details-card {\n text-align: left; background: var(--sk-bg-elevated); border: 1px solid var(--sk-border);\n border-radius: var(--sk-radius); padding: 16px; margin-bottom: 20px;\n}\n.bw-detail-row { display: flex; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--sk-border); }\n.bw-detail-row:last-child { border-bottom: none; }\n.bw-detail-label { width: 70px; flex-shrink: 0; font-size: 0.8125rem; color: var(--sk-text-tertiary); font-weight: 500; }\n.bw-detail-value { font-size: 0.875rem; font-weight: 500; color: var(--sk-text-primary); }\n\n.bw-cal-links-label { font-size: 0.8125rem; color: var(--sk-text-secondary); margin: 0 0 8px 0; }\n.bw-cal-links { display: flex; gap: 8px; justify-content: center; margin-bottom: 20px; flex-wrap: wrap; }\n.bw-cal-link {\n display: inline-flex; align-items: center; gap: 6px;\n padding: 8px 14px; border: 1.5px solid var(--sk-border); border-radius: var(--sk-radius);\n text-decoration: none; color: var(--sk-text-primary); font-size: 0.8125rem; font-weight: 500;\n transition: all 0.15s;\n}\n.bw-cal-link:hover { border-color: var(--sk-primary); color: var(--sk-primary); }\n\n.bw-email-notice { font-size: 0.8125rem; color: var(--sk-text-tertiary); margin: 0; }\n.bw-email-notice strong { color: var(--sk-text-primary); font-weight: 500; }\n`\n\nexport default BookingWidget\n"]}
|
|
@@ -15,32 +15,30 @@ function generateId() {
|
|
|
15
15
|
}
|
|
16
16
|
function getOrCreateVisitorId() {
|
|
17
17
|
if (typeof window === "undefined") return "";
|
|
18
|
-
|
|
19
|
-
let visitorId = localStorage.getItem(key);
|
|
18
|
+
let visitorId = localStorage.getItem("_sk_vid");
|
|
20
19
|
if (!visitorId) {
|
|
21
20
|
visitorId = generateId();
|
|
22
|
-
localStorage.setItem(key, visitorId);
|
|
23
21
|
}
|
|
22
|
+
localStorage.setItem("_sk_vid", visitorId);
|
|
24
23
|
return visitorId;
|
|
25
24
|
}
|
|
26
25
|
function getOrCreateSessionId(timeoutMinutes = 30) {
|
|
27
26
|
if (typeof window === "undefined") return "";
|
|
28
|
-
const key = "_uptrade_sid";
|
|
29
|
-
const timeKey = "_uptrade_stime";
|
|
30
27
|
const now = Date.now();
|
|
31
28
|
const timeoutMs = timeoutMinutes * 60 * 1e3;
|
|
32
|
-
const existingSession = sessionStorage.getItem(
|
|
33
|
-
const lastActivity = sessionStorage.getItem(
|
|
29
|
+
const existingSession = sessionStorage.getItem("_sk_sid");
|
|
30
|
+
const lastActivity = sessionStorage.getItem("_sk_stime");
|
|
34
31
|
if (existingSession && lastActivity) {
|
|
35
32
|
const elapsed = now - parseInt(lastActivity, 10);
|
|
36
33
|
if (elapsed < timeoutMs) {
|
|
37
|
-
sessionStorage.setItem(
|
|
34
|
+
sessionStorage.setItem("_sk_stime", now.toString());
|
|
35
|
+
sessionStorage.setItem("_sk_sid", existingSession);
|
|
38
36
|
return existingSession;
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
39
|
const newSession = generateId();
|
|
42
|
-
sessionStorage.setItem(
|
|
43
|
-
sessionStorage.setItem(
|
|
40
|
+
sessionStorage.setItem("_sk_sid", newSession);
|
|
41
|
+
sessionStorage.setItem("_sk_stime", now.toString());
|
|
44
42
|
return newSession;
|
|
45
43
|
}
|
|
46
44
|
var SiteKitIdentityContext = createContext(null);
|
|
@@ -53,15 +51,15 @@ function SiteKitIdentityProvider({
|
|
|
53
51
|
return /* @__PURE__ */ jsx(SiteKitIdentityContext.Provider, { value, children });
|
|
54
52
|
}
|
|
55
53
|
var LazyAnalyticsProvider = dynamic(
|
|
56
|
-
() => import('./AnalyticsProvider-
|
|
54
|
+
() => import('./AnalyticsProvider-J7UMCBCJ.mjs').then((m) => ({ default: m.AnalyticsProvider })),
|
|
57
55
|
{ ssr: false }
|
|
58
56
|
);
|
|
59
57
|
var LazyEngageWidget = dynamic(
|
|
60
|
-
() => import('./EngageWidget-
|
|
58
|
+
() => import('./EngageWidget-SRRI4W7U.mjs').then((m) => ({ default: m.EngageWidget })),
|
|
61
59
|
{ ssr: false }
|
|
62
60
|
);
|
|
63
61
|
var LazySignalBridge = dynamic(
|
|
64
|
-
() => import('./SignalBridge-
|
|
62
|
+
() => import('./SignalBridge-D6W6OLVG.mjs').then((m) => ({ default: m.SignalBridge })),
|
|
65
63
|
{ ssr: false }
|
|
66
64
|
);
|
|
67
65
|
var LazySitemapSync = dynamic(
|
|
@@ -152,5 +150,5 @@ function SiteKitClientProviders({
|
|
|
152
150
|
}
|
|
153
151
|
|
|
154
152
|
export { SiteKitClientProviders };
|
|
155
|
-
//# sourceMappingURL=chunk-
|
|
156
|
-
//# sourceMappingURL=chunk-
|
|
153
|
+
//# sourceMappingURL=chunk-WN2PUL6B.mjs.map
|
|
154
|
+
//# sourceMappingURL=chunk-WN2PUL6B.mjs.map
|