@levo-so/site-runtime 0.3.1 → 0.3.8

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 (45) hide show
  1. package/CollectionField-C-6a1ud4.js +270 -0
  2. package/{CollectionInput-B1qV4QEH.js → CollectionInput-BJ__qcbk.js} +40 -40
  3. package/DateTimeWidget-hFjcn3o6.js +255 -0
  4. package/Dialog-dT7y641z.js +130 -0
  5. package/KBChatWidget-ClHFDgJ5.js +1026 -0
  6. package/LevoProvider-Bsjkcwc8.js +20 -0
  7. package/PhoneWidget-BmBO-kvA.js +99 -0
  8. package/{Popover-q5dL7y0W.js → Popover-3N88sRp4.js} +20 -20
  9. package/{PopupRenderer-Bncp54gB-DuCULkBK.js → PopupBody-DZVwDLkg-Cfy3lWGs.js} +201 -910
  10. package/PopupRenderer-BjW1jg70-W2y-PEPH.js +387 -0
  11. package/{RichTextWidget-D-mGlES0.js → RichTextWidget-DkKHEq4j.js} +142 -141
  12. package/ThemeProvider-DutrjSTF.js +116 -0
  13. package/{Tooltip-BIgrpetu.js → Tooltip-CQB0LyxK.js} +20 -20
  14. package/VerifyButton-BUT70lgz.js +192 -0
  15. package/{theme.cssm-2YTdd8Yh.js → createThemeExtension-4AUn51iJ.js} +2 -2
  16. package/dist-CRDgdAkQ.js +3631 -0
  17. package/dist-DPmVG7VB.js +79 -0
  18. package/index.d.ts +575 -3
  19. package/index.js +1217 -722
  20. package/inlineBaseTheme-BB9e6h5f.js +9 -0
  21. package/inlineCollectionTheme-CWcMCUti.js +19 -0
  22. package/{kbChat-AUJxjURc.js → kbChat-C00LVlxP.js} +53 -48
  23. package/{nodeAlignment-Cn6xNtOP.js → nodeAlignment-BnJljFlw.js} +13 -13
  24. package/package.json +9 -9
  25. package/pillChrome-BAu5AfCT.js +30 -0
  26. package/popupState-JmpeKzgM-qhNTV79U.js +229 -0
  27. package/popups.js +1 -1
  28. package/react-CV3jf2mc.js +74 -0
  29. package/rteTheme.cssm-xg0gJ28J.js +4 -0
  30. package/styles.css +1 -1
  31. package/theme.cssm-DUzmx76l.js +4 -0
  32. package/{inlineCollectionTheme-D2w17LHX.js → themeVars.cssm-ByhhC2Jm.js} +18 -33
  33. package/usePopupRedirect-BThP_YPW-COUseDik.js +80 -0
  34. package/CollectionField-CzS-34zx.js +0 -270
  35. package/DateTimeWidget-C1jHOtz7.js +0 -255
  36. package/Dialog-CzVhHLEY.js +0 -145
  37. package/KBChatWidget-D7F9LRwI.js +0 -1078
  38. package/PhoneWidget-_nw97rkI.js +0 -99
  39. package/ThemeProvider-BQmIB5tr.js +0 -116
  40. package/VerifyButton-BkP98H17.js +0 -191
  41. package/dist-CJknSbJK.js +0 -80
  42. package/dist-DBbiX2ST.js +0 -3556
  43. package/inlineBaseTheme-DS-AfUHi.js +0 -9
  44. package/pillChrome-AhXOWXIb.js +0 -20
  45. /package/{es-iCqKQf1c.js → es-CztjLuNy.js} +0 -0
@@ -0,0 +1,9 @@
1
+ import { t as e } from "./createThemeExtension-4AUn51iJ.js";
2
+ import { n as t, t as n } from "./themeVars.cssm-ByhhC2Jm.js";
3
+ //#region ../../libraries/levocn/dist/styles/inlineBaseTheme.js
4
+ var r = e(n), i = (e) => e ? e.radius && !e.radiusScale ? r({
5
+ ...e,
6
+ radiusScale: t(e.radius)
7
+ }) : r(e) : {};
8
+ //#endregion
9
+ export { i as t };
@@ -0,0 +1,19 @@
1
+ import { t as e } from "./createThemeExtension-4AUn51iJ.js";
2
+ //#region ../../libraries/react-collection/dist/theme/collectionThemeVars.cssm.js
3
+ var t = {
4
+ form: {
5
+ maxWidth: "var(--_1092q7b0)",
6
+ gap: "var(--_1092q7b1)",
7
+ borderRadius: "var(--_1092q7b2)",
8
+ labelFontSize: "var(--_1092q7b3)",
9
+ helpFontSize: "var(--_1092q7b4)"
10
+ },
11
+ input: {
12
+ fontSize: "var(--_1092q7b5)",
13
+ height: "var(--_1092q7b6)",
14
+ borderRadius: "var(--_1092q7b7)"
15
+ },
16
+ checkbox: { labelFontSize: "var(--_1092q7b8)" }
17
+ }, n = e(t);
18
+ //#endregion
19
+ export { t as n, n as t };
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { a as e, c as t, f as n, h as r, l as i, m as a, n as o, o as s, p as c, r as l, t as u, u as d, v as f } from "./pillChrome-AhXOWXIb.js";
3
- import { useEffect as p, useRef as m, useState as h } from "react";
4
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
2
+ import { a as e, c as t, f as n, h as r, l as i, m as a, n as o, o as s, p as c, r as l, t as u, u as d, y as f } from "./pillChrome-BAu5AfCT.js";
3
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
4
+ import { useEffect as h, useRef as g, useState as _ } from "react";
5
5
  import { ArrowUp as v, Sparkles as y } from "lucide-react";
6
6
  //#region ../../libraries/ai-chat/src/useActiveAgent.ts
7
7
  var b = (e) => f("active_agent", e), x = (e) => {
@@ -20,53 +20,57 @@ var b = (e) => f("active_agent", e), x = (e) => {
20
20
  if (!(!n || typeof window > "u")) try {
21
21
  t === null ? window.sessionStorage.removeItem(n) : window.sessionStorage.setItem(n, JSON.stringify(t));
22
22
  } catch {}
23
- }, C = ({ url: e, workspaceId: t, headers: n }) => {
24
- let [r, i] = h({ status: "loading" });
25
- p(() => {
23
+ }, C = ({ url: e, workspaceId: t, headers: n, path: r }) => {
24
+ let [i, a] = _({ status: "loading" });
25
+ h(() => {
26
26
  let e = x(t);
27
- i(e ? {
27
+ a(e ? {
28
28
  status: "ready",
29
29
  agent: e
30
30
  } : (e) => e.status === "ready" ? { status: "loading" } : e);
31
31
  }, [t]);
32
- let a = m(n);
33
- return a.current = n, p(() => {
32
+ let o = g(n);
33
+ return o.current = n, h(() => {
34
34
  if (!t || !e) return;
35
- let n = new AbortController();
35
+ let n = r ? `${e}${e.includes("?") ? "&" : "?"}path=${encodeURIComponent(r)}` : e, i = new AbortController();
36
36
  return (async () => {
37
37
  try {
38
- let r = await fetch(e, {
38
+ let e = await fetch(n, {
39
39
  method: "GET",
40
40
  credentials: "include",
41
- headers: a.current,
42
- signal: n.signal
41
+ headers: o.current,
42
+ signal: i.signal
43
43
  });
44
- if (!r.ok) {
45
- S(t, null), i({ status: "missing" });
44
+ if (!e.ok) {
45
+ S(t, null), a({ status: "missing" });
46
46
  return;
47
47
  }
48
- let o = (await r.json())?.content?.data;
49
- if (!o || typeof o.id != "string" || o.id.length === 0) {
50
- S(t, null), i({ status: "missing" });
48
+ let r = (await e.json())?.content?.data;
49
+ if (!r || typeof r.id != "string" || r.id.length === 0) {
50
+ S(t, null), a({ status: "missing" });
51
51
  return;
52
52
  }
53
- S(t, o), i({
53
+ S(t, r), a({
54
54
  status: "ready",
55
- agent: o
55
+ agent: r
56
56
  });
57
57
  } catch (e) {
58
58
  if (e?.name === "AbortError") return;
59
- console.warn("[levo-kb-chat] active-agent boot failed:", e), i({ status: "error" });
59
+ console.warn("[levo-kb-chat] active-agent boot failed:", e), a({ status: "error" });
60
60
  }
61
- })(), () => n.abort();
62
- }, [t, e]), r;
63
- }, w = (...e) => e.filter(Boolean).join(" "), T = () => import("./KBChatWidget-D7F9LRwI.js"), E = (e) => {
64
- let [t, n] = h(null), [r, i] = h(!1), [a, o] = h("");
65
- return t ? /* @__PURE__ */ g(t, {
61
+ })(), () => i.abort();
62
+ }, [
63
+ t,
64
+ e,
65
+ r
66
+ ]), i;
67
+ }, w = (...e) => e.filter(Boolean).join(" "), T = () => import("./KBChatWidget-ClHFDgJ5.js"), E = (e) => {
68
+ let [t, n] = _(null), [r, i] = _(!1), [a, o] = _("");
69
+ return t ? /* @__PURE__ */ p(t, {
66
70
  initialOpen: !0,
67
71
  initialDraft: a,
68
72
  ...e
69
- }) : /* @__PURE__ */ g(O, {
73
+ }) : /* @__PURE__ */ p(O, {
70
74
  siteName: e.siteName,
71
75
  draft: a,
72
76
  loading: r,
@@ -80,38 +84,38 @@ var b = (e) => f("active_agent", e), x = (e) => {
80
84
  T().catch(() => {});
81
85
  }
82
86
  });
83
- }, D = () => /* @__PURE__ */ g("span", {
87
+ }, D = () => /* @__PURE__ */ p("span", {
84
88
  "aria-hidden": !0,
85
89
  className: "h-5 w-5 animate-spin rounded-full border-2 border-current border-t-transparent"
86
- }), O = ({ siteName: f, draft: p, loading: b, onDraftChange: x, onActivate: S, onPrefetch: C }) => {
87
- let T = m(null), E = m(null), O = r(f), [k, A] = h(!1);
88
- return /* @__PURE__ */ g("div", {
90
+ }), O = ({ siteName: f, draft: h, loading: b, onDraftChange: x, onActivate: S, onPrefetch: C }) => {
91
+ let T = g(null), E = g(null), O = r(f), [k, A] = _(!1);
92
+ return /* @__PURE__ */ p("div", {
89
93
  onPointerEnter: C,
90
94
  className: w("ai-chat-launcher fixed bottom-8 left-1/2 z-[60] -translate-x-1/2", c),
91
- children: /* @__PURE__ */ g("div", {
95
+ children: /* @__PURE__ */ p("div", {
92
96
  className: w(o, t, "ai-chat-intro-morph"),
93
- children: /* @__PURE__ */ _("div", {
97
+ children: /* @__PURE__ */ m("div", {
94
98
  ref: E,
95
99
  className: w(d, k && "ai-chat-pill-surface--stacked"),
96
100
  children: [
97
- /* @__PURE__ */ g("button", {
101
+ /* @__PURE__ */ p("button", {
98
102
  type: "button",
99
103
  onClick: S,
100
104
  onFocus: C,
101
105
  "aria-label": "Open AI chat",
102
106
  className: i,
103
- children: b ? /* @__PURE__ */ g(D, {}) : /* @__PURE__ */ g(y, { className: "h-5 w-5" })
107
+ children: b ? /* @__PURE__ */ p(D, {}) : /* @__PURE__ */ p(y, { className: "h-5 w-5" })
104
108
  }),
105
- /* @__PURE__ */ _("div", {
109
+ /* @__PURE__ */ m("div", {
106
110
  className: l,
107
- children: [/* @__PURE__ */ g("textarea", {
111
+ children: [/* @__PURE__ */ p("textarea", {
108
112
  ref: T,
109
113
  rows: 1,
110
114
  autoComplete: "off",
111
115
  autoCorrect: "off",
112
116
  autoCapitalize: "none",
113
117
  inputMode: "text",
114
- value: p,
118
+ value: h,
115
119
  "aria-label": O,
116
120
  onFocus: S,
117
121
  onChange: (e) => {
@@ -119,44 +123,45 @@ var b = (e) => f("active_agent", e), x = (e) => {
119
123
  x(t.value), E.current && A(a(E.current, t));
120
124
  },
121
125
  className: n
122
- }), !p && /* @__PURE__ */ g("span", {
126
+ }), !h && /* @__PURE__ */ p("span", {
123
127
  className: w("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", "ai-chat-intro-label"),
124
128
  "aria-hidden": !0,
125
129
  children: O
126
130
  })]
127
131
  }),
128
- /* @__PURE__ */ g("div", {
132
+ /* @__PURE__ */ p("div", {
129
133
  className: u,
130
- children: /* @__PURE__ */ g("button", {
134
+ children: /* @__PURE__ */ p("button", {
131
135
  type: "button",
132
136
  onClick: S,
133
137
  "aria-label": "Open AI chat",
134
138
  className: e,
135
139
  style: s,
136
- children: b ? /* @__PURE__ */ g(D, {}) : /* @__PURE__ */ g(v, { className: "h-5 w-5 stroke-[2.5px]" })
140
+ children: b ? /* @__PURE__ */ p(D, {}) : /* @__PURE__ */ p(v, { className: "h-5 w-5 stroke-[2.5px]" })
137
141
  })
138
142
  })
139
143
  ]
140
144
  })
141
145
  })
142
146
  });
143
- }, k = "/.levo/public/api/v1/agents/kb-chat/public", A = (e) => e.replace(/\/v1\/agents\/kb-chat\/public\/?$/, ""), j = ({ workspaceId: e, siteName: t, siteLogo: n, siteIcon: r, apiBaseUrl: i = k, authHeaders: a, showBranding: o, siteSlug: s }) => {
144
- let c = C({
147
+ }, k = "/.levo/public/api/v1/agents/kb-chat/public", A = (e) => e.replace(/\/v1\/agents\/kb-chat\/public\/?$/, ""), j = ({ workspaceId: e, siteName: t, siteLogo: n, siteIcon: r, apiBaseUrl: i = k, authHeaders: a, showBranding: o, siteSlug: s, path: c }) => {
148
+ let l = C({
145
149
  url: `${A(i)}/v1/intelligence/site-agent/get-active`,
146
150
  workspaceId: e,
147
151
  headers: e ? {
148
152
  ...a,
149
153
  "Levo-Workspace": e
150
- } : a
154
+ } : a,
155
+ path: c
151
156
  });
152
- return c.status === "ready" ? /* @__PURE__ */ g("div", {
157
+ return l.status === "ready" ? /* @__PURE__ */ p("div", {
153
158
  "data-ai-chat-root": !0,
154
- children: /* @__PURE__ */ g(E, {
159
+ children: /* @__PURE__ */ p(E, {
155
160
  workspaceId: e,
156
161
  siteName: t,
157
162
  siteLogo: n,
158
163
  siteIcon: r,
159
- agentId: c.agent.id,
164
+ agentId: l.agent.id,
160
165
  apiBaseUrl: i,
161
166
  authHeaders: a,
162
167
  showBranding: o,
@@ -1,16 +1,16 @@
1
- import { n as e } from "./theme.cssm-2YTdd8Yh.js";
1
+ import { t as e } from "./createThemeExtension-4AUn51iJ.js";
2
2
  import { Extension as t, findParentNodeClosestToPos as n } from "@tiptap/core";
3
3
  import { NodeSelection as r } from "@tiptap/pm/state";
4
4
  import { CellSelection as i, cellAround as a } from "@tiptap/pm/tables";
5
5
  //#region ../../libraries/editor-core/dist/styles/content.cssm.js
6
- var o = "_12oclrg0", s = "u2k86a0", c = e({
6
+ var o = "_12oclrg0", s = e({
7
7
  baseSpacing: "var(--_1q6hy0o0)",
8
8
  highlight: "var(--_1q6hy0o1)",
9
9
  highlightForeground: "var(--_1q6hy0o2)"
10
10
  });
11
11
  //#endregion
12
12
  //#region ../../libraries/editor-core/dist/utils/getSelectedNodeOfType.js
13
- function l(e, t) {
13
+ function c(e, t) {
14
14
  let o = [], s = new Set(t);
15
15
  if (e instanceof i) return e.forEachCell((e, t) => {
16
16
  s.has(e.type.name) && o.push({
@@ -41,7 +41,7 @@ function l(e, t) {
41
41
  }
42
42
  //#endregion
43
43
  //#region ../../libraries/editor-core/dist/utils/updateNodesAttr.js
44
- function u(e, t, n, r) {
44
+ function l(e, t, n, r) {
45
45
  if (!t.length) return !1;
46
46
  let i = !1;
47
47
  for (let { pos: a } of t) {
@@ -56,12 +56,12 @@ function u(e, t, n, r) {
56
56
  }
57
57
  //#endregion
58
58
  //#region ../../libraries/editor-core/dist/extensions/nodeStyling/nodeAlignment.js
59
- function d(e, t, n) {
59
+ function u(e, t, n) {
60
60
  if (e.length === 0) return null;
61
61
  for (let r of e) if ((r.node.attrs?.[t] ?? null) !== n) return n;
62
62
  return null;
63
63
  }
64
- var f = t.create({
64
+ var d = t.create({
65
65
  name: "textAlign",
66
66
  addOptions() {
67
67
  return {
@@ -122,18 +122,18 @@ var f = t.create({
122
122
  },
123
123
  addCommands() {
124
124
  let e = (e, t) => (n) => ({ state: r, tr: i }) => {
125
- let a = l(r.selection, this.options.types);
126
- return a.length === 0 ? !1 : u(i, a, e, t(a, n));
125
+ let a = c(r.selection, this.options.types);
126
+ return a.length === 0 ? !1 : l(i, a, e, t(a, n));
127
127
  };
128
128
  return {
129
129
  setNodeTextAlign: e("textAlign", (e, t) => !t || !this.options.textAlignValues.includes(t) ? null : t),
130
130
  unsetNodeTextAlign: e("textAlign", () => null),
131
- toggleNodeTextAlign: e("textAlign", (e, t) => !t || !this.options.textAlignValues.includes(t) ? null : d(e, "textAlign", t)),
131
+ toggleNodeTextAlign: e("textAlign", (e, t) => !t || !this.options.textAlignValues.includes(t) ? null : u(e, "textAlign", t)),
132
132
  setNodeVAlign: e("nodeVerticalAlign", (e, t) => !t || !this.options.verticalAlignValues.includes(t) ? null : t),
133
133
  unsetNodeVAlign: e("nodeVerticalAlign", () => null),
134
- toggleNodeVAlign: e("nodeVerticalAlign", (e, t) => !t || !this.options.verticalAlignValues.includes(t) ? null : d(e, "nodeVerticalAlign", t)),
134
+ toggleNodeVAlign: e("nodeVerticalAlign", (e, t) => !t || !this.options.verticalAlignValues.includes(t) ? null : u(e, "nodeVerticalAlign", t)),
135
135
  setNodeAlignment: (e, t) => ({ state: n, tr: r }) => {
136
- let i = l(n.selection, this.options.types);
136
+ let i = c(n.selection, this.options.types);
137
137
  if (i.length === 0) return !1;
138
138
  let a = !1;
139
139
  for (let { node: n, pos: o } of i) {
@@ -143,7 +143,7 @@ var f = t.create({
143
143
  return a;
144
144
  },
145
145
  unsetNodeAlignment: () => ({ state: e, tr: t }) => {
146
- let n = l(e.selection, this.options.types);
146
+ let n = c(e.selection, this.options.types);
147
147
  if (n.length === 0) return !1;
148
148
  let r = !1;
149
149
  for (let { node: e, pos: i } of n) {
@@ -163,4 +163,4 @@ var f = t.create({
163
163
  }
164
164
  });
165
165
  //#endregion
166
- export { o as i, c as n, s as r, f as t };
166
+ export { s as n, o as r, d as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@levo-so/site-runtime",
3
- "version": "0.3.1",
3
+ "version": "0.3.8",
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": [
@@ -67,18 +67,18 @@
67
67
  "lowlight": "3.1.0",
68
68
  "@vanilla-extract/dynamic": "2.1.5",
69
69
  "sonner": "2.0.7",
70
- "@assistant-ui/react": "0.12.14",
71
- "@assistant-ui/react-ai-sdk": "1.3.10",
72
- "@assistant-ui/react-markdown": "0.12.5",
73
- "@assistant-ui/core": "0.1.5",
74
- "@assistant-ui/store": "0.2.2",
75
- "@assistant-ui/tap": "0.5.2",
70
+ "@assistant-ui/react": "0.15.10",
71
+ "@assistant-ui/react-ai-sdk": "1.4.4",
72
+ "@assistant-ui/react-markdown": "0.14.9",
73
+ "@assistant-ui/core": "0.3.9",
74
+ "@assistant-ui/store": "0.3.7",
75
+ "@assistant-ui/tap": "0.9.10",
76
76
  "remark-gfm": "4.0.1",
77
77
  "@stripe/react-stripe-js": "^3.1.1",
78
78
  "@stripe/stripe-js": "^5.5.0",
79
79
  "react-razorpay": "^3.0.1",
80
- "@levo-so/core": "0.2.1",
81
- "@levo-so/insights": "0.2.1"
80
+ "@levo-so/core": "0.3.8",
81
+ "@levo-so/insights": "0.3.8"
82
82
  },
83
83
  "peerDependencies": {
84
84
  "@base-ui/react": "^1.5.0",
@@ -0,0 +1,30 @@
1
+ //#region ../../libraries/ai-chat/src/helpers.ts
2
+ var e = (e, t = {
3
+ hour: "numeric",
4
+ minute: "2-digit"
5
+ }) => {
6
+ if (!e) return "";
7
+ let n = e instanceof Date ? e : new Date(e);
8
+ return Number.isNaN(n.getTime()) ? "" : n.toLocaleTimeString([], t);
9
+ }, t = (e, t) => t ? `levo.site_chat.${e}.${t}` : null, n = (e, t) => {
10
+ e.style.height = "auto", e.style.height = t === void 0 ? `${e.scrollHeight}px` : `${Math.min(e.scrollHeight, t)}px`;
11
+ }, r = (e, t) => {
12
+ e.setText(t);
13
+ let n = document.activeElement?.closest("[data-ai-chat-root]") ?? document;
14
+ requestAnimationFrame(() => {
15
+ let e = n.querySelector("textarea[data-ai-chat-composer]");
16
+ if (!e) return;
17
+ e.focus();
18
+ let t = e.value.length;
19
+ e.setSelectionRange(t, t);
20
+ });
21
+ }, i = "w-72", a = "ai-chat-pill-gradient relative rounded-[30px] p-[2px] transition-shadow duration-300", o = "shadow-lg shadow-zinc-950/10", s = "shadow-md", c = "ai-chat-pill-surface min-h-14 w-full rounded-[28px] bg-white p-1.5", l = "ai-chat-pill-surface--stacked", u = "ai-chat-pill-input relative min-w-0", d = "ai-chat-pill-actions flex items-center gap-1.5", f = "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", p = "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", m = "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", h = 24, g = (e, t) => {
22
+ e.classList.remove(l), t.style.height = "auto";
23
+ let r = t.scrollHeight > h + 4;
24
+ return e.classList.toggle(l, r), n(t, 120), r;
25
+ }, _ = "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", v = {
26
+ backgroundColor: "var(--color-brand, #0a0a0a)",
27
+ color: "var(--color-brand-foreground, #fff)"
28
+ }, y = (e) => e ? `Ask ${e}` : "Ask AI";
29
+ //#endregion
30
+ export { r as _, p as a, o as c, l as d, m as f, n as g, y as h, _ as i, f as l, g as m, a as n, v as o, i as p, u as r, s, d as t, c as u, e as v, t as y };
@@ -0,0 +1,229 @@
1
+ //#region ../../node_modules/.pnpm/nanostores@0.11.4/node_modules/nanostores/clean-stores/index.js
2
+ var e = Symbol("clean"), t = [], n = 0, r = 4, i = 0, a = (a) => {
3
+ let o = [], s = {
4
+ get() {
5
+ return s.lc || s.listen(() => {})(), s.value;
6
+ },
7
+ lc: 0,
8
+ listen(e) {
9
+ return s.lc = o.push(e), () => {
10
+ for (let i = n + r; i < t.length;) t[i] === e ? t.splice(i, r) : i += r;
11
+ let i = o.indexOf(e);
12
+ ~i && (o.splice(i, 1), --s.lc || s.off());
13
+ };
14
+ },
15
+ notify(e, a) {
16
+ i++;
17
+ let c = !t.length;
18
+ for (let n of o) t.push(n, s.value, e, a);
19
+ if (c) {
20
+ for (n = 0; n < t.length; n += r) t[n](t[n + 1], t[n + 2], t[n + 3]);
21
+ t.length = 0;
22
+ }
23
+ },
24
+ off() {},
25
+ set(e) {
26
+ let t = s.value;
27
+ t !== e && (s.value = e, s.notify(t));
28
+ },
29
+ subscribe(e) {
30
+ let t = s.listen(e);
31
+ return e(s.value), t;
32
+ },
33
+ value: a
34
+ };
35
+ return process.env.NODE_ENV !== "production" && (s[e] = () => {
36
+ o = [], s.lc = 0, s.off();
37
+ }), s;
38
+ }, o = 5, s = 6, c = 10, l = (e, t, n, r) => (e.events = e.events || {}, e.events[n + c] || (e.events[n + c] = r((t) => {
39
+ e.events[n].reduceRight((e, t) => (t(e), e), {
40
+ shared: {},
41
+ ...t
42
+ });
43
+ })), e.events[n] = e.events[n] || [], e.events[n].push(t), () => {
44
+ let r = e.events[n], i = r.indexOf(t);
45
+ r.splice(i, 1), r.length || (delete e.events[n], e.events[n + c](), delete e.events[n + c]);
46
+ }), u = 1e3, d = (t, n) => l(t, (e) => {
47
+ let r = n(e);
48
+ r && t.events[s].push(r);
49
+ }, o, (n) => {
50
+ let r = t.listen;
51
+ t.listen = (...e) => (!t.lc && !t.active && (t.active = !0, n()), r(...e));
52
+ let i = t.off;
53
+ if (t.events[s] = [], t.off = () => {
54
+ i(), setTimeout(() => {
55
+ if (t.active && !t.lc) {
56
+ t.active = !1;
57
+ for (let e of t.events[s]) e();
58
+ t.events[s] = [];
59
+ }
60
+ }, u);
61
+ }, process.env.NODE_ENV !== "production") {
62
+ let n = t[e];
63
+ t[e] = () => {
64
+ for (let e of t.events[s]) e();
65
+ t.events[s] = [], t.active = !1, n();
66
+ };
67
+ }
68
+ return () => {
69
+ t.listen = r, t.off = i;
70
+ };
71
+ }), f = (e, t, n) => {
72
+ Array.isArray(e) || (e = [e]);
73
+ let r, o, s = () => {
74
+ if (o === i) return;
75
+ o = i;
76
+ let n = e.map((e) => e.get());
77
+ if (!r || n.some((e, t) => e !== r[t])) {
78
+ r = n;
79
+ let e = t(...n);
80
+ e && e.then && e.t ? e.then((e) => {
81
+ r === n && c.set(e);
82
+ }) : (c.set(e), o = i);
83
+ }
84
+ }, c = a(void 0), l = c.get;
85
+ c.get = () => (s(), l());
86
+ let u, f = n ? () => {
87
+ clearTimeout(u), u = setTimeout(s);
88
+ } : s;
89
+ return d(c, () => {
90
+ let t = e.map((e) => e.listen(f));
91
+ return s(), () => {
92
+ for (let e of t) e();
93
+ };
94
+ }), c;
95
+ }, p = (e, t) => f(e, t), m = (e) => e, h = {}, g = {
96
+ addEventListener() {},
97
+ removeEventListener() {}
98
+ };
99
+ function _() {
100
+ try {
101
+ return typeof localStorage < "u";
102
+ } catch {
103
+ return !1;
104
+ }
105
+ }
106
+ _() && (h = localStorage), typeof window < "u" && (g = {
107
+ addEventListener(e, t, n) {
108
+ window.addEventListener("storage", t), window.addEventListener("pageshow", n);
109
+ },
110
+ removeEventListener(e, t, n) {
111
+ window.removeEventListener("storage", t), window.removeEventListener("pageshow", n);
112
+ }
113
+ });
114
+ function v(e, t = void 0, n = {}) {
115
+ let r = n.encode || m, i = n.decode || m, o = h[e], s = a(e in h ? i(o) : t), c = s.set;
116
+ s.set = (t) => {
117
+ o = r(t), o === void 0 ? delete h[e] : h[e] = o, c(t);
118
+ };
119
+ function l(n) {
120
+ n.key === e ? n.newValue === null ? c(t) : c(i(n.newValue)) : h[e] || c(t);
121
+ }
122
+ function u() {
123
+ o !== h[e] && s.set(e in h ? i(h[e]) : t);
124
+ }
125
+ return d(s, () => {
126
+ if (u(), n.listen !== !1) return g.addEventListener(e, l, u), () => {
127
+ g.removeEventListener(e, l, u);
128
+ };
129
+ }), s;
130
+ }
131
+ //#endregion
132
+ //#region ../../libraries/popups/dist/popupState-JmpeKzgM.js
133
+ var y = 6e4, b = "lv_popups_session", x = {
134
+ active_popup_id: null,
135
+ shown_popup_ids: [],
136
+ last_closed_at: null
137
+ }, S = v("lv_popups_state", {}, {
138
+ encode: JSON.stringify,
139
+ decode: JSON.parse
140
+ }), C = (e) => {
141
+ if (!e) return x;
142
+ try {
143
+ return {
144
+ ...JSON.parse(e),
145
+ active_popup_id: null
146
+ };
147
+ } catch {
148
+ return x;
149
+ }
150
+ }, w = a((() => {
151
+ if (typeof sessionStorage > "u") return x;
152
+ try {
153
+ return C(sessionStorage.getItem(b));
154
+ } catch {
155
+ return x;
156
+ }
157
+ })()), T = w.set;
158
+ w.set = (e) => {
159
+ T(e);
160
+ try {
161
+ sessionStorage.setItem(b, JSON.stringify(e));
162
+ } catch {}
163
+ };
164
+ var E = p([w, S], (e, t) => ({
165
+ active_popup_id: e.active_popup_id,
166
+ shown_popup_ids: e.shown_popup_ids,
167
+ last_closed_at: e.last_closed_at,
168
+ previous_popups: t
169
+ })), D = a([]), O = (e) => {
170
+ D.set(e);
171
+ }, k = a(!0), A = (e) => {
172
+ k.set(e);
173
+ }, j = () => E.get(), M = (e, t) => e.includes(t) ? e : [...e, t], N = "manual", P = () => N, F = null, I = () => F, L = [], R = null, z = () => {
174
+ if (R) return;
175
+ let { last_closed_at: e } = w.get();
176
+ if (!e) return;
177
+ let t = y - (Date.now() - e);
178
+ if (t <= 0) {
179
+ B();
180
+ return;
181
+ }
182
+ R = setTimeout(() => {
183
+ R = null, B();
184
+ }, t);
185
+ }, B = () => {
186
+ let e = w.get();
187
+ if (!e.active_popup_id) {
188
+ if (e.last_closed_at && Date.now() - e.last_closed_at < 6e4) {
189
+ z();
190
+ return;
191
+ }
192
+ for (; L.length > 0;) {
193
+ let e = L.shift();
194
+ if (U(e.popup, { trigger_type: e.trigger_type })) return;
195
+ }
196
+ }
197
+ }, V = (e, t) => {
198
+ L.some((t) => t.popup.id === e.id) || (L.push({
199
+ popup: e,
200
+ trigger_type: t
201
+ }), z());
202
+ }, H = (e, t) => {
203
+ let n = j();
204
+ if (t?.type === "always") return !n.shown_popup_ids.includes(e);
205
+ let r = n.previous_popups[e];
206
+ return r ? !t || t.type === "once" ? !1 : t.type === "interval" && t.interval_ms ? Date.now() - r.triggered_at >= t.interval_ms : !0 : !0;
207
+ }, U = (e, t = {}) => {
208
+ let { force: n = !1, trigger_type: r = "manual" } = t, i = e.id, a = e.settings?.display_frequency, o = w.get();
209
+ return o.active_popup_id === i ? !0 : !n && (o.active_popup_id || o.last_closed_at && Date.now() - o.last_closed_at < 6e4 || !H(i, a)) ? !1 : (R &&= (clearTimeout(R), null), N = r, F = Date.now(), w.set({
210
+ active_popup_id: i,
211
+ shown_popup_ids: M(o.shown_popup_ids, i),
212
+ last_closed_at: o.last_closed_at
213
+ }), a?.type !== "always" && S.set({
214
+ ...S.get(),
215
+ [i]: { triggered_at: Date.now() }
216
+ }), !0);
217
+ }, W = (e, t = {}) => {
218
+ let { trigger_type: n = "manual" } = t;
219
+ return U(e, { trigger_type: n }) ? !0 : (H(e.id, e.settings?.display_frequency) && V(e, n), !1);
220
+ }, G = (e) => {
221
+ let t = w.get();
222
+ t.active_popup_id === e && (N = "manual", F = null, w.set({
223
+ ...t,
224
+ active_popup_id: null,
225
+ last_closed_at: Date.now()
226
+ }), setTimeout(B, 0));
227
+ };
228
+ //#endregion
229
+ export { D as a, G as c, E as d, P as f, w as i, A as l, W as n, O as o, I as r, j as s, U as t, k as u };
package/popups.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "./dist-CJknSbJK.js";
1
+ import { t as e } from "./dist-DPmVG7VB.js";
2
2
  //#region src/popups/usePopup.ts
3
3
  var t = () => e();
4
4
  //#endregion