@levo-so/site-runtime 0.3.20 → 0.3.21

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.
Files changed (53) hide show
  1. package/BillingStep-ByiYjJ0S.js +251 -0
  2. package/BookingCard-DdwLHVGw.js +816 -0
  3. package/CollectionLabel-CmUFfc_7.js +35 -0
  4. package/DateTimeWidget-Bk2tk_CT.js +254 -0
  5. package/{KBChatWidget-BMuZ-VI3.js → KBChatWidget-BXRRgelS.js} +1 -1
  6. package/{PhoneWidget-DPECohGT.js → PhoneWidget-FWE3jD_L.js} +3 -5
  7. package/{Popover-Cr0-X_ch.js → Popover-MSrVDAzg.js} +7 -7
  8. package/PopupBody-DWM55Zh5-B3ysApDM.js +158 -0
  9. package/PopupDialog-DwAAJ8JS-DkxjZaJL.js +260 -0
  10. package/PopupRenderer-BVtV4b9I-Dot4Syse.js +207 -0
  11. package/{RichTextWidget-C1QECDcg.js → RichTextWidget-KnIKESAD.js} +134 -135
  12. package/{RteThemeProvider-CMbSaFRQ.js → RteThemeProvider-DtTXGcCT.js} +2 -3
  13. package/Sonner-BsE4Y_t4.js +21 -0
  14. package/blog-content.js +8 -9
  15. package/dist-BVFCdirT.js +4471 -0
  16. package/dist-DEXGyFeH.js +376 -0
  17. package/index.js +12 -13
  18. package/{themeVars.cssm-ByhhC2Jm.js → inlineBaseTheme-DcNdMEYp.js} +35 -5
  19. package/{inlineCollectionTheme-CWcMCUti.js → inlineCollectionTheme-DjXuH3bK.js} +1 -1
  20. package/{inlineRteTheme-CRPtkNXy.js → inlineRteTheme-BYGIJM7P.js} +1 -1
  21. package/{kbChat-DtZ4vuCZ.js → kbChat-eFsau7hG.js} +2 -2
  22. package/package.json +23 -23
  23. package/{pillChrome-CEpWGNZB.js → pillChrome-Dy3ApFI5.js} +5 -5
  24. package/popups.js +1 -1
  25. package/{react-Cj_U6VZQ.js → react-CENbCy5d.js} +6 -5
  26. package/script.esm-uVCZU25S.js +62 -0
  27. package/start.js +1 -1
  28. package/styles.css +1 -1
  29. package/theme.cssm-iXnQwMCp.js +238 -0
  30. package/CollectionField-DCAXOmBN.js +0 -270
  31. package/CollectionInput-BJ__qcbk.js +0 -147
  32. package/DateTimeWidget-I0LvR-tO.js +0 -255
  33. package/Dialog-D-vRkU9N.js +0 -130
  34. package/LevoProvider-BkbKrvrI.js +0 -20
  35. package/PopupBody-BI-MJqmd-a-l3CaKZ.js +0 -159
  36. package/PopupRenderer-D66Gx63H-DpcNpbtU.js +0 -388
  37. package/ThemeProvider-DlFehjh1.js +0 -116
  38. package/Tooltip-BKQ5rIDh.js +0 -67
  39. package/VerifyButton-D0cj9Z5Q.js +0 -192
  40. package/createThemeExtension-4AUn51iJ.js +0 -15
  41. package/dist-IxiGbP-3.js +0 -3783
  42. package/dist-_lwl0kZw.js +0 -79
  43. package/inlineBaseTheme-BB9e6h5f.js +0 -9
  44. package/popupState-JmpeKzgM-D_77LiAa.js +0 -229
  45. package/react-B9yvlbH0.js +0 -74
  46. package/theme.cssm-DUzmx76l.js +0 -4
  47. package/usePopupRedirect-CAAdcpaW-BDa44PXN.js +0 -82
  48. /package/{content.cssm-XdMsTGIB.js → content.cssm-D_LSloGW.js} +0 -0
  49. /package/{es-CGQflL9T.js → es-CK20DkgT.js} +0 -0
  50. /package/{rolldown-runtime-CAFD8bLK.js → rolldown-runtime-Dy4uBu1J.js} +0 -0
  51. /package/{routes-CyKmkoRM.js → routes-DO1BLfh9.js} +0 -0
  52. /package/{rteTheme.cssm-W4gTOijw.js → rteTheme.cssm-BRxusHY4.js} +0 -0
  53. /package/{script.esm-wR2d7rrv.js → script.esm-D4nvz3-k.js} +0 -0
@@ -0,0 +1,376 @@
1
+ import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
2
+ import { a as t, t as n } from "./inlineBaseTheme-DcNdMEYp.js";
3
+ import { c as r } from "react/compiler-runtime";
4
+ import { Suspense as i, lazy as a, useCallback as o, useEffect as s, useRef as c, useState as l, useSyncExternalStore as u } from "react";
5
+ import { jsx as d } from "react/jsx-runtime";
6
+ import { $isIdentityContextReady as f } from "@levo-so/insights/stores";
7
+ //#region ../../node_modules/.pnpm/nanostores@0.11.4/node_modules/nanostores/clean-stores/index.js
8
+ var p = Symbol("clean"), m = [], h = 0, g = 4, _ = 0, v = (e) => {
9
+ let t = [], n = {
10
+ get() {
11
+ return n.lc || n.listen(() => {})(), n.value;
12
+ },
13
+ lc: 0,
14
+ listen(e) {
15
+ return n.lc = t.push(e), () => {
16
+ for (let t = h + g; t < m.length;) m[t] === e ? m.splice(t, g) : t += g;
17
+ let r = t.indexOf(e);
18
+ ~r && (t.splice(r, 1), --n.lc || n.off());
19
+ };
20
+ },
21
+ notify(e, r) {
22
+ _++;
23
+ let i = !m.length;
24
+ for (let i of t) m.push(i, n.value, e, r);
25
+ if (i) {
26
+ for (h = 0; h < m.length; h += g) m[h](m[h + 1], m[h + 2], m[h + 3]);
27
+ m.length = 0;
28
+ }
29
+ },
30
+ off() {},
31
+ set(e) {
32
+ let t = n.value;
33
+ t !== e && (n.value = e, n.notify(t));
34
+ },
35
+ subscribe(e) {
36
+ let t = n.listen(e);
37
+ return e(n.value), t;
38
+ },
39
+ value: e
40
+ };
41
+ return process.env.NODE_ENV !== "production" && (n[p] = () => {
42
+ t = [], n.lc = 0, n.off();
43
+ }), n;
44
+ }, y = 5, b = 6, x = 10, ee = (e, t, n, r) => (e.events = e.events || {}, e.events[n + x] || (e.events[n + x] = r((t) => {
45
+ e.events[n].reduceRight((e, t) => (t(e), e), {
46
+ shared: {},
47
+ ...t
48
+ });
49
+ })), e.events[n] = e.events[n] || [], e.events[n].push(t), () => {
50
+ let r = e.events[n], i = r.indexOf(t);
51
+ r.splice(i, 1), r.length || (delete e.events[n], e.events[n + x](), delete e.events[n + x]);
52
+ }), te = 1e3, S = (e, t) => ee(e, (n) => {
53
+ let r = t(n);
54
+ r && e.events[b].push(r);
55
+ }, y, (t) => {
56
+ let n = e.listen;
57
+ e.listen = (...r) => (!e.lc && !e.active && (e.active = !0, t()), n(...r));
58
+ let r = e.off;
59
+ if (e.events[b] = [], e.off = () => {
60
+ r(), setTimeout(() => {
61
+ if (e.active && !e.lc) {
62
+ e.active = !1;
63
+ for (let t of e.events[b]) t();
64
+ e.events[b] = [];
65
+ }
66
+ }, te);
67
+ }, process.env.NODE_ENV !== "production") {
68
+ let t = e[p];
69
+ e[p] = () => {
70
+ for (let t of e.events[b]) t();
71
+ e.events[b] = [], e.active = !1, t();
72
+ };
73
+ }
74
+ return () => {
75
+ e.listen = n, e.off = r;
76
+ };
77
+ }), ne = (e, t, n) => {
78
+ Array.isArray(e) || (e = [e]);
79
+ let r, i, a = () => {
80
+ if (i === _) return;
81
+ i = _;
82
+ let n = e.map((e) => e.get());
83
+ if (!r || n.some((e, t) => e !== r[t])) {
84
+ r = n;
85
+ let e = t(...n);
86
+ e && e.then && e.t ? e.then((e) => {
87
+ r === n && o.set(e);
88
+ }) : (o.set(e), i = _);
89
+ }
90
+ }, o = v(void 0), s = o.get;
91
+ o.get = () => (a(), s());
92
+ let c, l = n ? () => {
93
+ clearTimeout(c), c = setTimeout(a);
94
+ } : a;
95
+ return S(o, () => {
96
+ let t = e.map((e) => e.listen(l));
97
+ return a(), () => {
98
+ for (let e of t) e();
99
+ };
100
+ }), o;
101
+ }, C = (e, t) => ne(e, t);
102
+ //#endregion
103
+ //#region ../../node_modules/.pnpm/nanostores@0.11.4/node_modules/nanostores/listen-keys/index.js
104
+ function re(e, t, n) {
105
+ let r = new Set(t).add(void 0);
106
+ return e.listen((e, t, i) => {
107
+ r.has(i) && n(e, t, i);
108
+ });
109
+ }
110
+ //#endregion
111
+ //#region ../../node_modules/.pnpm/@nanostores+persistent@1.3.3_nanostores@0.11.4/node_modules/@nanostores/persistent/index.js
112
+ var w = (e) => e, T = {}, E = {
113
+ addEventListener() {},
114
+ removeEventListener() {}
115
+ };
116
+ function ie() {
117
+ try {
118
+ return typeof localStorage < "u";
119
+ } catch {
120
+ return !1;
121
+ }
122
+ }
123
+ ie() && (T = localStorage), typeof window < "u" && (E = {
124
+ addEventListener(e, t, n) {
125
+ window.addEventListener("storage", t), window.addEventListener("pageshow", n);
126
+ },
127
+ removeEventListener(e, t, n) {
128
+ window.removeEventListener("storage", t), window.removeEventListener("pageshow", n);
129
+ }
130
+ });
131
+ function D(e, t = void 0, n = {}) {
132
+ let r = n.encode || w, i = n.decode || w, a = T[e], o = v(e in T ? i(a) : t), s = o.set;
133
+ o.set = (t) => {
134
+ a = r(t), a === void 0 ? delete T[e] : T[e] = a, s(t);
135
+ };
136
+ function c(n) {
137
+ n.key === e ? n.newValue === null ? s(t) : s(i(n.newValue)) : T[e] || s(t);
138
+ }
139
+ function l() {
140
+ a !== T[e] && o.set(e in T ? i(T[e]) : t);
141
+ }
142
+ return S(o, () => {
143
+ if (l(), n.listen !== !1) return E.addEventListener(e, c, l), () => {
144
+ E.removeEventListener(e, c, l);
145
+ };
146
+ }), o;
147
+ }
148
+ //#endregion
149
+ //#region ../../libraries/popups/dist/themeMapping-DH_NoXK8.js
150
+ var O = 6e4, k = "lv_popups_session", A = {
151
+ active_popup_id: null,
152
+ shown_popup_ids: [],
153
+ last_closed_at: null
154
+ }, j = D("lv_popups_state", {}, {
155
+ encode: JSON.stringify,
156
+ decode: JSON.parse
157
+ }), ae = (e) => {
158
+ if (!e) return A;
159
+ try {
160
+ return {
161
+ ...JSON.parse(e),
162
+ active_popup_id: null
163
+ };
164
+ } catch {
165
+ return A;
166
+ }
167
+ }, M = v((() => {
168
+ if (typeof sessionStorage > "u") return A;
169
+ try {
170
+ return ae(sessionStorage.getItem(k));
171
+ } catch {
172
+ return A;
173
+ }
174
+ })()), N = M.set;
175
+ M.set = (e) => {
176
+ N(e);
177
+ try {
178
+ sessionStorage.setItem(k, JSON.stringify(e));
179
+ } catch {}
180
+ };
181
+ var P = C([M, j], (e, t) => ({
182
+ active_popup_id: e.active_popup_id,
183
+ shown_popup_ids: e.shown_popup_ids,
184
+ last_closed_at: e.last_closed_at,
185
+ previous_popups: t
186
+ })), F = v([]), I = (e) => {
187
+ F.set(e);
188
+ }, L = v(!0), R = (e) => {
189
+ L.set(e);
190
+ }, z = () => P.get(), oe = (e, t) => e.includes(t) ? e : [...e, t], B = "manual", se = () => B, V = null, ce = () => V, H = [], U = null, W = () => {
191
+ if (U) return;
192
+ let { last_closed_at: e } = M.get();
193
+ if (!e) return;
194
+ let t = O - (Date.now() - e);
195
+ if (t <= 0) {
196
+ G();
197
+ return;
198
+ }
199
+ U = setTimeout(() => {
200
+ U = null, G();
201
+ }, t);
202
+ }, G = () => {
203
+ let e = M.get();
204
+ if (!e.active_popup_id) {
205
+ if (e.last_closed_at && Date.now() - e.last_closed_at < 6e4) {
206
+ W();
207
+ return;
208
+ }
209
+ for (; H.length > 0;) {
210
+ let e = H.shift();
211
+ if (q(e.popup, { trigger_type: e.trigger_type })) return;
212
+ }
213
+ }
214
+ }, le = (e, t) => {
215
+ H.some((t) => t.popup.id === e.id) || (H.push({
216
+ popup: e,
217
+ trigger_type: t
218
+ }), W());
219
+ }, K = (e, t) => {
220
+ let n = z();
221
+ if (t?.type === "always") return !n.shown_popup_ids.includes(e);
222
+ let r = n.previous_popups[e];
223
+ return r ? !t || t.type === "once" ? !1 : t.type === "interval" && t.interval_ms ? Date.now() - r.triggered_at >= t.interval_ms : !0 : !0;
224
+ }, q = (e, t = {}) => {
225
+ let { force: n = !1, trigger_type: r = "manual" } = t, i = e.id, a = e.settings?.display_frequency, o = M.get();
226
+ return o.active_popup_id === i ? !0 : !n && (o.active_popup_id || o.last_closed_at && Date.now() - o.last_closed_at < 6e4 || !K(i, a)) ? !1 : (U &&= (clearTimeout(U), null), B = r, V = Date.now(), M.set({
227
+ active_popup_id: i,
228
+ shown_popup_ids: oe(o.shown_popup_ids, i),
229
+ last_closed_at: o.last_closed_at
230
+ }), a?.type !== "always" && j.set({
231
+ ...j.get(),
232
+ [i]: { triggered_at: Date.now() }
233
+ }), !0);
234
+ }, ue = (e, t = {}) => {
235
+ let { trigger_type: n = "manual" } = t;
236
+ return q(e, { trigger_type: n }) ? !0 : (K(e.id, e.settings?.display_frequency) && le(e, n), !1);
237
+ }, J = (e) => {
238
+ let t = M.get();
239
+ t.active_popup_id === e && (B = "manual", V = null, M.set({
240
+ ...t,
241
+ active_popup_id: null,
242
+ last_closed_at: Date.now()
243
+ }), setTimeout(G, 0));
244
+ }, Y = (e) => {
245
+ if (e == null) return;
246
+ if (typeof e == "string") return e;
247
+ if (typeof e != "object") return;
248
+ let t = e;
249
+ if (typeof t.l != "number" || typeof t.c != "number" || typeof t.h != "number") return;
250
+ let n = (e) => Math.round(e * 1e4) / 1e4, r = n(t.l), i = n(t.c), a = n(t.h), o = typeof t.alpha == "number" ? n(t.alpha) : 1;
251
+ return o < 1 ? `oklch(${r} ${i} ${a} / ${o})` : `oklch(${r} ${i} ${a})`;
252
+ }, de = (e) => {
253
+ let t = e.colors;
254
+ return !t || typeof t != "object" ? !1 : Object.values(t).some((e) => e != null);
255
+ }, fe = (e) => {
256
+ if (!e || !de(e)) return null;
257
+ let t = e.colors, n = t?.brand ?? {}, r = e.fonts, i = e.sizes;
258
+ return {
259
+ colors: {
260
+ brand: {
261
+ main: Y(n.main) ?? "",
262
+ foreground: Y(n.foreground) ?? ""
263
+ },
264
+ text1: Y(t.text1) ?? "",
265
+ text2: Y(t.text2) ?? "",
266
+ page: Y(t.page) ?? "",
267
+ border: Y(t.border) ?? ""
268
+ },
269
+ fonts: {
270
+ heading: r?.heading ?? "inherit",
271
+ body: r?.body ?? "inherit"
272
+ },
273
+ sizes: { radius: i?.radius ?? "4px" }
274
+ };
275
+ }, pe = (e) => {
276
+ if (e) return {
277
+ colors: {
278
+ primary: e.colors?.brand?.main,
279
+ primaryForeground: e.colors?.brand?.foreground,
280
+ foreground: e.colors?.text1,
281
+ text: e.colors?.text1,
282
+ heading: e.colors?.text1,
283
+ mutedForeground: e.colors?.text2,
284
+ background: e.colors?.page,
285
+ card: e.colors?.page,
286
+ cardForeground: e.colors?.text1,
287
+ popover: e.colors?.page,
288
+ popoverForeground: e.colors?.text1,
289
+ border: e.colors?.border,
290
+ input: e.colors?.page,
291
+ inputForeground: e.colors?.text1
292
+ },
293
+ fonts: e.fonts,
294
+ radius: e.sizes?.radius
295
+ };
296
+ }, me = (e) => n(pe(e)), X = (e, t) => (n) => {
297
+ e.current !== n && (e.current = n, t());
298
+ };
299
+ function Z(e, { keys: t, deps: n = [e, t] } = {}) {
300
+ let r = c();
301
+ r.current = e.get();
302
+ let i = o((n) => (X(r, n)(e.value), t?.length > 0 ? re(e, t, X(r, n)) : e.listen(X(r, n))), n), a = () => r.current;
303
+ return u(i, a, a);
304
+ }
305
+ //#endregion
306
+ //#region ../../libraries/popups/dist/index.js
307
+ var he = /* @__PURE__ */ e({
308
+ PopupLoader: () => _e,
309
+ fetchActivePopups: () => Q,
310
+ usePopup: () => $
311
+ }), Q = async (e, t) => {
312
+ let n = {};
313
+ return t?.site_id && (n.site_id = t.site_id), t?.locale && (n.locale = t.locale), t?.country && (n.country = t.country), (await e.url("/v1/studio/popup/list-active").query(n).get().json())?.content?.data ?? [];
314
+ }, ge = a(() => import("./PopupRenderer-BVtV4b9I-Dot4Syse.js").then((e) => e.t).then((e) => ({ default: e.PopupRenderer }))), _e = (e) => {
315
+ let n = r(9), { siteId: a, pageId: o } = e, { fetch: u, logger: p } = t(), [m, h] = l(null), g = c(!1), _, v;
316
+ if (n[0] !== u || n[1] !== p || n[2] !== a ? (_ = () => {
317
+ if (g.current) return;
318
+ let e = () => {
319
+ g.current || (g.current = !0, Q(u, a ? { site_id: a } : void 0).then((e) => {
320
+ I(e), h(e);
321
+ }).catch((e) => {
322
+ p?.error("Failed to fetch popups", { exception: e }), I([]), h([]);
323
+ }).finally(ve));
324
+ };
325
+ if (f.get()) {
326
+ e();
327
+ return;
328
+ }
329
+ let t = f.listen((n) => {
330
+ n && (t(), e());
331
+ });
332
+ return () => t();
333
+ }, v = [
334
+ u,
335
+ p,
336
+ a
337
+ ], n[0] = u, n[1] = p, n[2] = a, n[3] = _, n[4] = v) : (_ = n[3], v = n[4]), s(_, v), !m || m.length === 0) return null;
338
+ let y;
339
+ n[5] === Symbol.for("react.memo_cache_sentinel") ? (y = {
340
+ position: "relative",
341
+ zIndex: 99999
342
+ }, n[5] = y) : y = n[5];
343
+ let b;
344
+ return n[6] !== o || n[7] !== m ? (b = /* @__PURE__ */ d("div", {
345
+ style: y,
346
+ children: /* @__PURE__ */ d(i, { children: /* @__PURE__ */ d(ge, {
347
+ popups: m,
348
+ pageId: o
349
+ }) })
350
+ }), n[6] = o, n[7] = m, n[8] = b) : b = n[8], b;
351
+ };
352
+ function ve() {
353
+ return R(!1);
354
+ }
355
+ var $ = () => {
356
+ let e = r(3), t = Z(F), n = Z(L), i = ye, a = be, o;
357
+ return e[0] !== n || e[1] !== t ? (o = {
358
+ popups: t,
359
+ isLoading: n,
360
+ openPopup: i,
361
+ closePopup: a
362
+ }, e[0] = n, e[1] = t, e[2] = o) : o = e[2], o;
363
+ };
364
+ function ye(e) {
365
+ let t = F.get().find((t) => t.id === e);
366
+ t && q(t, {
367
+ force: !0,
368
+ trigger_type: "manual"
369
+ });
370
+ }
371
+ function be() {
372
+ let e = M.get().active_popup_id;
373
+ e && J(e);
374
+ }
375
+ //#endregion
376
+ export { me as a, z as c, I as d, ce as f, J as i, R as l, he as n, fe as o, se as p, Z as r, P as s, $ as t, ue as u };
package/index.js CHANGED
@@ -1,9 +1,8 @@
1
1
  "use client";
2
- import { i as e, n as t } from "./dist-IxiGbP-3.js";
3
- import { i as n, n as r, r as i } from "./LevoProvider-BkbKrvrI.js";
4
- import { t as a } from "./inlineCollectionTheme-CWcMCUti.js";
5
- import { t as o } from "./inlineBaseTheme-BB9e6h5f.js";
6
- import { a as s, c, d as l, f as u, i as d, l as f, n as p, o as m, r as h, s as g, t as _, u as v } from "./routes-CyKmkoRM.js";
2
+ import { a as e, n as t } from "./dist-BVFCdirT.js";
3
+ import { c as n, o as r, s as i, t as a } from "./inlineBaseTheme-DcNdMEYp.js";
4
+ import { t as o } from "./inlineCollectionTheme-DjXuH3bK.js";
5
+ import { a as s, c, d as l, f as u, i as d, l as f, n as p, o as m, r as h, s as g, t as _, u as v } from "./routes-DO1BLfh9.js";
7
6
  import { createLevoClient as y, getLevoError as b } from "@levo-so/core";
8
7
  import { Suspense as x, createContext as S, lazy as C, useCallback as w, useContext as T, useEffect as E, useLayoutEffect as D, useMemo as O, useRef as k, useState as A, useSyncExternalStore as j } from "react";
9
8
  import { Fragment as M, jsx as N, jsxs as P } from "react/jsx-runtime";
@@ -260,7 +259,7 @@ var H = [
260
259
  inputForeground: "var(--color-ink)",
261
260
  ring: "var(--color-brand)"
262
261
  }, Ue = (e) => O(() => ({
263
- ...o({
262
+ ...a({
264
263
  colors: {
265
264
  ...He,
266
265
  ...e?.colors
@@ -271,7 +270,7 @@ var H = [
271
270
  heading: "var(--font-heading)"
272
271
  }
273
272
  }),
274
- ...e?.gap ? a({ form: { gap: e.gap } }) : {}
273
+ ...e?.gap ? o({ form: { gap: e.gap } }) : {}
275
274
  }), [e]);
276
275
  //#endregion
277
276
  //#region src/hooks/useMounted.ts
@@ -613,7 +612,7 @@ var K = ["levo-auth", "session"], We = () => {
613
612
  error: u,
614
613
  clearError: w(() => d(null), [])
615
614
  };
616
- }, pt = 4, mt = (e) => /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(e.trim()), ht = (e) => RegExp("^\\d{4}$").test(e.trim()), gt = (e) => {
615
+ }, pt = 4, mt = (e) => /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/.test(e.trim()), ht = (e) => (/* @__PURE__ */ RegExp("^\\d{4}$")).test(e.trim()), gt = (e) => {
617
616
  let t = e.replace(/\D/g, "").replace(/^0+/, "");
618
617
  return t ? `+${t}` : "";
619
618
  }, _t = (e) => /^\+[1-9]\d{7,14}$/.test(gt(e)), vt = ({ value: e, onChange: t, length: n = 4, onComplete: r, autoFocus: i, disabled: a }) => {
@@ -700,7 +699,7 @@ var K = ["levo-auth", "session"], We = () => {
700
699
  },
701
700
  clear: w(() => f("", 0), [f])
702
701
  };
703
- }, yt = C(() => import("./kbChat-DtZ4vuCZ.js")), bt = ({ site: e, path: t }) => {
702
+ }, yt = C(() => import("./kbChat-eFsau7hG.js")), bt = ({ site: e, path: t }) => {
704
703
  let n = G(), r = e.workspace_id || void 0;
705
704
  return !n || !r ? null : /* @__PURE__ */ N(x, {
706
705
  fallback: null,
@@ -811,7 +810,7 @@ var At = ({ source: e, submitLabel: n = "Submit", hiddenFields: r, formVariant:
811
810
  }
812
811
  return "#ffffff";
813
812
  }, Lt = async (e, t) => {
814
- let { toPng: n } = await import("./es-CGQflL9T.js"), r = e.getBoundingClientRect(), i = Math.max(r.width, r.height, 1), a = Math.min(2, Math.max(.4, jt / i)), o = await n(e, {
813
+ let { toPng: n } = await import("./es-CK20DkgT.js"), r = e.getBoundingClientRect(), i = Math.max(r.width, r.height, 1), a = Math.min(2, Math.max(.4, jt / i)), o = await n(e, {
815
814
  ...Pt,
816
815
  pixelRatio: a,
817
816
  backgroundColor: It(e),
@@ -840,7 +839,7 @@ var At = ({ source: e, submitLabel: n = "Submit", hiddenFields: r, formVariant:
840
839
  }
841
840
  return a;
842
841
  }, Vt = async (e, t) => {
843
- let { toCanvas: n } = await import("./es-CGQflL9T.js"), r = Bt(e, t), i = r.getBoundingClientRect(), a = Math.max(e.width, e.height, 1), o = Math.min(2, Math.max(.4, jt / a)), s = Math.max(i.width, i.height, 1);
842
+ let { toCanvas: n } = await import("./es-CK20DkgT.js"), r = Bt(e, t), i = r.getBoundingClientRect(), a = Math.max(e.width, e.height, 1), o = Math.min(2, Math.max(.4, jt / a)), s = Math.max(i.width, i.height, 1);
844
843
  o = Math.min(o, zt / s);
845
844
  let c = await n(r, {
846
845
  ...Pt,
@@ -1817,7 +1816,7 @@ var Ln = "levo-made-with", Rn = `.${Ln}{opacity:.2;transition:opacity 150ms,tran
1817
1816
  if (typeof document > "u") return null;
1818
1817
  let e = document.querySelectorAll(`meta[name="${Bn}"]`);
1819
1818
  return e[e.length - 1]?.getAttribute("content")?.trim() || null;
1820
- }, Hn = C(() => import("./dist-_lwl0kZw.js").then((e) => e.n).then((e) => ({ default: e.PopupLoader }))), Un = ({ siteId: e, pageId: t }) => {
1819
+ }, Hn = C(() => import("./dist-DEXGyFeH.js").then((e) => e.n).then((e) => ({ default: e.PopupLoader }))), Un = ({ siteId: e, pageId: t }) => {
1821
1820
  let n = G(), r = i();
1822
1821
  return !n || !r ? null : /* @__PURE__ */ N(x, {
1823
1822
  fallback: null,
@@ -3085,7 +3084,7 @@ var Z = (...e) => e.filter(Boolean).join(" "), fr = ({ open: e, className: t, ch
3085
3084
  }, oi = async (e) => {
3086
3085
  let { payment_session_id: t, order_id: n } = e;
3087
3086
  if (!t || !n) throw Error("Cashfree payment session missing");
3088
- let { load: r } = await import("./script.esm-wR2d7rrv.js"), i = await r({ mode: e.environment || "production" });
3087
+ let { load: r } = await import("./script.esm-D4nvz3-k.js"), i = await r({ mode: e.environment || "production" });
3089
3088
  if (!i) throw Error("Cashfree checkout failed to load");
3090
3089
  let a = await i.checkout({
3091
3090
  paymentSessionId: t,
@@ -1,5 +1,32 @@
1
- //#region ../../libraries/levocn/dist/theme/utils/generateRadiusScale.js
2
- var e = (e) => ({
1
+ "use client";
2
+ import { createContext as e, useContext as t } from "react";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ import { assignInlineVars as r } from "@vanilla-extract/dynamic";
5
+ //#region ../react/dist/providers/LevoProvider.js
6
+ var i = e({
7
+ client: null,
8
+ insights: null
9
+ }), a = ({ children: e, client: t, insights: r = null }) => /* @__PURE__ */ n(i.Provider, {
10
+ value: {
11
+ client: t,
12
+ insights: r
13
+ },
14
+ children: e
15
+ }), o = () => {
16
+ let e = t(i);
17
+ if (!e.client) throw Error("useLevo must be used within a LevoProvider. Please ensure you have wrapped your component tree with LevoProvider.");
18
+ return e.client;
19
+ }, s = () => t(i).client, c = () => t(i).insights, l = (e, t) => {
20
+ let n = {};
21
+ for (let r of Object.keys(t)) {
22
+ let i = t[r], a = e[r];
23
+ if (!(i === void 0 || a === void 0)) if (typeof i == "object" && i && !Array.isArray(i)) {
24
+ let e = l(a, i);
25
+ Object.assign(n, e);
26
+ } else typeof a == "string" && (n[a] = String(i));
27
+ }
28
+ return n;
29
+ }, u = (e) => (t) => t ? r(l(e, t)) : {}, d = (e) => ({
3
30
  sm: `calc(${e} * 0.5)`,
4
31
  base: e,
5
32
  md: `calc(${e} * 1.5)`,
@@ -13,7 +40,7 @@ var e = (e) => ({
13
40
  "7xl": `calc(${e} * 20)`,
14
41
  "8xl": `calc(${e} * 24)`,
15
42
  full: "100%"
16
- }), t = {
43
+ }), f = {
17
44
  colors: {
18
45
  background: "var(--_1i5egzy0)",
19
46
  foreground: "var(--_1i5egzy1)",
@@ -66,6 +93,9 @@ var e = (e) => ({
66
93
  xl: "var(--_1i5egzy16)",
67
94
  inner: "var(--_1i5egzy17)"
68
95
  }
69
- };
96
+ }, p = u(f), m = (e) => e ? e.radius && !e.radiusScale ? p({
97
+ ...e,
98
+ radiusScale: d(e.radius)
99
+ }) : p(e) : {};
70
100
  //#endregion
71
- export { e as n, t };
101
+ export { o as a, c, u as i, f as n, a as o, d as r, s, m as t };
@@ -1,4 +1,4 @@
1
- import { t as e } from "./createThemeExtension-4AUn51iJ.js";
1
+ import { i as e } from "./inlineBaseTheme-DcNdMEYp.js";
2
2
  //#region ../../libraries/react-collection/dist/theme/collectionThemeVars.cssm.js
3
3
  var t = {
4
4
  form: {
@@ -1,4 +1,4 @@
1
- import { t as e } from "./createThemeExtension-4AUn51iJ.js";
1
+ import { i as e } from "./inlineBaseTheme-DcNdMEYp.js";
2
2
  //#endregion
3
3
  //#region ../../libraries/editor-core/dist/theme/inlineRteTheme.js
4
4
  var t = e({
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { C as e, a as t, c as n, f as r, g as i, h as a, l as o, m as s, n as c, o as l, p as u, r as d, t as f, u as p } from "./pillChrome-CEpWGNZB.js";
2
+ import { C as e, a as t, c as n, f as r, g as i, h as a, l as o, m as s, n as c, o as l, p as u, r as d, t as f, u as p } from "./pillChrome-Dy3ApFI5.js";
3
3
  import { useEffect as m, useRef as h, useState as g } from "react";
4
4
  import { jsx as _, jsxs as v } from "react/jsx-runtime";
5
5
  import { ArrowUp as y, Sparkles as b } from "lucide-react";
@@ -64,7 +64,7 @@ var x = (t) => e("active_agent", t), S = (e) => {
64
64
  e,
65
65
  r
66
66
  ]), i;
67
- }, T = (...e) => e.filter(Boolean).join(" "), E = () => import("./KBChatWidget-BMuZ-VI3.js"), D = (e) => {
67
+ }, T = (...e) => e.filter(Boolean).join(" "), E = () => import("./KBChatWidget-BXRRgelS.js"), D = (e) => {
68
68
  let [t, n] = g(null), [r, i] = g(!1), [a, o] = g("");
69
69
  return t ? /* @__PURE__ */ _(t, {
70
70
  initialOpen: !0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levo-so/site-runtime",
3
- "version": "0.3.20",
3
+ "version": "0.3.21",
4
4
  "description": "Runtime for Levo Studio v3 sites — the editor preview inspector, page head metadata, and the Levo data client.",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -39,15 +39,15 @@
39
39
  "dependencies": {
40
40
  "@tabler/icons-react": "3.34.1",
41
41
  "@theinternetfolks/snowflake": "1.3.0",
42
- "@tiptap/core": "3.30.0",
43
- "@tiptap/extension-subscript": "3.30.0",
44
- "@tiptap/extension-superscript": "3.30.0",
45
- "@tiptap/extension-typography": "3.30.0",
46
- "@tiptap/extension-unique-id": "3.30.0",
47
- "@tiptap/extensions": "3.30.0",
48
- "@tiptap/pm": "3.30.0",
49
- "@tiptap/react": "3.30.0",
50
- "@tiptap/starter-kit": "3.30.0",
42
+ "@tiptap/core": "3.30.6",
43
+ "@tiptap/extension-subscript": "3.30.6",
44
+ "@tiptap/extension-superscript": "3.30.6",
45
+ "@tiptap/extension-typography": "3.30.6",
46
+ "@tiptap/extension-unique-id": "3.30.6",
47
+ "@tiptap/extensions": "3.30.6",
48
+ "@tiptap/pm": "3.30.6",
49
+ "@tiptap/react": "3.30.6",
50
+ "@tiptap/starter-kit": "3.30.6",
51
51
  "altcha": "2.0.2",
52
52
  "clsx": "2.1.1",
53
53
  "dayjs": "1.11.13",
@@ -60,17 +60,17 @@
60
60
  "react-select-async-paginate": "0.7.5",
61
61
  "use-debounce": "10.0.2",
62
62
  "yup": "1.7.1",
63
- "@tiptap/extension-blockquote": "3.30.0",
64
- "@tiptap/extension-code-block": "3.30.0",
65
- "@tiptap/extension-details": "3.30.0",
66
- "@tiptap/extension-document": "3.30.0",
67
- "@tiptap/extension-horizontal-rule": "3.30.0",
68
- "@tiptap/extension-image": "3.30.0",
69
- "@tiptap/extension-link": "3.30.0",
70
- "@tiptap/extension-list": "3.30.0",
71
- "@tiptap/extension-mention": "3.30.0",
72
- "@tiptap/extension-table": "3.30.0",
73
- "@tiptap/extension-text-style": "3.30.0",
63
+ "@tiptap/extension-blockquote": "3.30.6",
64
+ "@tiptap/extension-code-block": "3.30.6",
65
+ "@tiptap/extension-details": "3.30.6",
66
+ "@tiptap/extension-document": "3.30.6",
67
+ "@tiptap/extension-horizontal-rule": "3.30.6",
68
+ "@tiptap/extension-image": "3.30.6",
69
+ "@tiptap/extension-link": "3.30.6",
70
+ "@tiptap/extension-list": "3.30.6",
71
+ "@tiptap/extension-mention": "3.30.6",
72
+ "@tiptap/extension-table": "3.30.6",
73
+ "@tiptap/extension-text-style": "3.30.6",
74
74
  "@vanilla-extract/recipes": "0.5.7",
75
75
  "lowlight": "3.1.0",
76
76
  "@vanilla-extract/dynamic": "2.1.5",
@@ -82,8 +82,8 @@
82
82
  "@assistant-ui/store": "0.3.13",
83
83
  "@assistant-ui/tap": "0.9.17",
84
84
  "remark-gfm": "4.0.1",
85
- "@levo-so/core": "0.3.20",
86
- "@levo-so/insights": "0.3.20",
85
+ "@levo-so/core": "0.3.21",
86
+ "@levo-so/insights": "0.3.21",
87
87
  "@stripe/react-stripe-js": "3.1.1",
88
88
  "@stripe/stripe-js": "5.5.0",
89
89
  "react-razorpay": "3.0.1"
@@ -38,13 +38,13 @@ var e = "disabled:cursor-not-allowed disabled:opacity-40", t = (e) => {
38
38
  let t = e.value.length;
39
39
  e.setSelectionRange(t, t);
40
40
  });
41
- }, l = (e) => typeof e == "function" ? e() : e ?? {}, u = "w-72", d = "ai-chat-pill-gradient relative rounded-[30px] p-[2px] transition-shadow duration-300", f = "shadow-lg shadow-zinc-950/10", p = "shadow-md", m = "ai-chat-pill-surface min-h-14 w-full rounded-[28px] bg-white p-1.5", h = "ai-chat-pill-surface--stacked", g = "ai-chat-pill-input relative min-w-0", _ = "ai-chat-pill-actions flex items-center gap-1.5", v = "ai-chat-pill-spark flex h-11 w-11 flex-shrink-0 items-center justify-center rounded-full text-blue-500 transition-[background-color,transform] duration-150 hover:bg-zinc-50 active:scale-95", y = "flex h-11 w-11 flex-shrink-0 items-center justify-center rounded-full shadow-sm transition-[transform,box-shadow] duration-150 hover:scale-105 hover:shadow-md active:scale-95", b = "block h-6 max-h-[120px] w-full resize-none overflow-y-auto bg-transparent text-base text-zinc-900 leading-6 placeholder:text-zinc-400 focus:outline-none", x = 24, S = (e, t) => {
41
+ }, l = (e) => typeof e == "function" ? e() : e ?? {}, u = "w-72", d = "ai-chat-pill-gradient relative rounded-[30px] p-[2px] transition-shadow duration-300", f = "shadow-lg shadow-zinc-950/10", p = "shadow-md", m = "ai-chat-pill-surface min-h-14 w-full rounded-[28px] bg-white p-1.5", h = "ai-chat-pill-surface--stacked", g = "ai-chat-pill-input relative min-w-0", _ = "ai-chat-pill-actions flex items-center gap-1.5", v = "ai-chat-pill-spark flex h-11 w-11 flex-shrink-0 items-center justify-center rounded-full text-blue-500 transition-[background-color,transform] duration-150 hover:bg-zinc-50 active:scale-95", y = "flex h-11 w-11 flex-shrink-0 items-center justify-center rounded-full shadow-sm transition-[transform,box-shadow] duration-150 hover:scale-105 hover:shadow-md active:scale-95", b = "block h-6 max-h-[120px] w-full resize-none overflow-y-auto bg-transparent text-base text-zinc-900 leading-6 placeholder:text-zinc-400 focus:outline-none", x = (e, t) => {
42
42
  e.classList.remove(h), t.style.height = "auto";
43
- let n = t.scrollHeight > x + 4;
43
+ let n = t.scrollHeight > 28;
44
44
  return e.classList.toggle(h, n), s(t, 120), n;
45
- }, C = "ai-chat-pill-label pointer-events-none absolute inset-y-0 left-0 flex max-w-full items-center truncate bg-clip-text font-semibold text-[15px] text-transparent", w = {
45
+ }, S = "ai-chat-pill-label pointer-events-none absolute inset-y-0 left-0 flex max-w-full items-center truncate bg-clip-text font-semibold text-[15px] text-transparent", C = {
46
46
  backgroundColor: "var(--color-brand, #0a0a0a)",
47
47
  color: "var(--color-brand-foreground, #fff)"
48
- }, T = (e) => e ? `Ask ${e}` : "Ask AI";
48
+ }, w = (e) => e ? `Ask ${e}` : "Ask AI";
49
49
  //#endregion
50
- export { o as C, a as S, e as _, y as a, i as b, f as c, h as d, b as f, l as g, T as h, C as i, v as l, S as m, d as n, w as o, u as p, g as r, p as s, _ as t, m as u, s as v, r as x, c as y };
50
+ export { o as C, a as S, e as _, y as a, i as b, f as c, h as d, b as f, l as g, w as h, S as i, v as l, x as m, d as n, C as o, u as p, g as r, p as s, _ as t, m as u, s as v, r as x, c as y };
package/popups.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./dist-_lwl0kZw.js";
1
+ import { t as e } from "./dist-DEXGyFeH.js";
2
2
  //#region src/popups/usePopup.ts
3
3
  var t = () => e();
4
4
  //#endregion