@picked/client 0.0.1-dev.1773371977114 → 0.0.1-dev.1773724362573

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 (88) hide show
  1. package/dist/{api-CLwLE-DW.js → api-B3x8PEp4.js} +1 -1
  2. package/dist/{api-Cn-rv5A5.cjs → api-Z3Hn2Kw-.cjs} +1 -1
  3. package/dist/cjs/index.js +2 -2
  4. package/dist/cjs/plugins/create-experience/index.js +1 -1
  5. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  6. package/dist/cjs/plugins/experience-browser-storage/index.js +1 -1
  7. package/dist/cjs/plugins/history-browser-storage/index.js +1 -1
  8. package/dist/cjs/plugins/responses-browser-storage/index.js +1 -1
  9. package/dist/cjs/plugins/responses-indexeddb/index.js +1 -1
  10. package/dist/cjs/plugins/single-page-app/index.js +1 -1
  11. package/dist/cjs/server/index.js +1 -1
  12. package/dist/esm/index.js +723 -662
  13. package/dist/esm/plugins/create-experience/index.js +238 -279
  14. package/dist/esm/plugins/dynamic-experiences/index.js +12 -12
  15. package/dist/esm/plugins/experience-browser-storage/index.js +1 -1
  16. package/dist/esm/plugins/history-browser-storage/index.js +1 -1
  17. package/dist/esm/plugins/responses-browser-storage/index.js +17 -18
  18. package/dist/esm/plugins/responses-indexeddb/index.js +51 -46
  19. package/dist/esm/plugins/single-page-app/index.js +24 -24
  20. package/dist/esm/server/index.js +1 -1
  21. package/dist/experience-instance-BX0aqKsC.cjs +1 -0
  22. package/dist/{experience-instance-fvSEb72i.js → experience-instance-DTyL1fNb.js} +205 -199
  23. package/dist/{object-JwZ58NOH.js → object-CJssU1Pm.js} +1 -1
  24. package/dist/object-mwaxtjLG.cjs +1 -0
  25. package/dist/storage-58NoTSsc.cjs +1 -0
  26. package/dist/{storage-Co_LbKr_.js → storage-B2d81EOI.js} +35 -30
  27. package/dist/types/entities/action/action.d.ts +5 -2
  28. package/dist/types/entities/action/action.d.ts.map +1 -1
  29. package/dist/types/entities/experience/experience.d.ts +2 -3
  30. package/dist/types/entities/experience/experience.d.ts.map +1 -1
  31. package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
  32. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  33. package/dist/types/entities/field/field.d.ts +52 -36
  34. package/dist/types/entities/field/field.d.ts.map +1 -1
  35. package/dist/types/entities/history/history.d.ts.map +1 -1
  36. package/dist/types/entities/project/project.d.ts.map +1 -1
  37. package/dist/types/entities/response/response.d.ts +6 -10
  38. package/dist/types/entities/response/response.d.ts.map +1 -1
  39. package/dist/types/exports.d.ts +0 -1
  40. package/dist/types/exports.d.ts.map +1 -1
  41. package/dist/types/index.d.ts +1 -0
  42. package/dist/types/index.d.ts.map +1 -1
  43. package/dist/types/logic-engine.d.ts +2 -8
  44. package/dist/types/logic-engine.d.ts.map +1 -1
  45. package/dist/types/picked.d.ts +18 -14
  46. package/dist/types/picked.d.ts.map +1 -1
  47. package/dist/types/plugins/create-experience/create-experience.d.ts +26 -36
  48. package/dist/types/plugins/create-experience/create-experience.d.ts.map +1 -1
  49. package/dist/types/plugins/dynamic-experiences/types.d.ts +1 -3
  50. package/dist/types/plugins/dynamic-experiences/types.d.ts.map +1 -1
  51. package/dist/types/plugins/experience-browser-storage/plugin.d.ts +2 -1
  52. package/dist/types/plugins/experience-browser-storage/plugin.d.ts.map +1 -1
  53. package/dist/types/plugins/history-browser-storage/plugin.d.ts +2 -1
  54. package/dist/types/plugins/history-browser-storage/plugin.d.ts.map +1 -1
  55. package/dist/types/plugins/responses-browser-storage/plugin.d.ts +2 -1
  56. package/dist/types/plugins/responses-browser-storage/plugin.d.ts.map +1 -1
  57. package/dist/types/plugins/responses-indexeddb/plugin.d.ts.map +1 -1
  58. package/dist/types/plugins/single-page-app/plugin.d.ts +1 -1
  59. package/dist/types/plugins/single-page-app/plugin.d.ts.map +1 -1
  60. package/dist/types/utils/dom.d.ts +0 -3
  61. package/dist/types/utils/dom.d.ts.map +1 -1
  62. package/dist/types/utils/events.d.ts +1 -1
  63. package/dist/types/utils/events.d.ts.map +1 -1
  64. package/dist/types/utils/global-obj.d.ts +0 -1
  65. package/dist/types/utils/global-obj.d.ts.map +1 -1
  66. package/dist/types/utils/indexed-db.d.ts +2 -1
  67. package/dist/types/utils/indexed-db.d.ts.map +1 -1
  68. package/dist/types/utils/logger.d.ts.map +1 -1
  69. package/dist/types/utils/node-tree/min-max-steps-to-leaf.d.ts.map +1 -1
  70. package/dist/types/utils/node-tree/min-max-steps-to-origin.d.ts.map +1 -1
  71. package/dist/types/utils/node-tree/next-reachable-step-nodes.d.ts.map +1 -1
  72. package/dist/types/utils/object.d.ts +0 -8
  73. package/dist/types/utils/object.d.ts.map +1 -1
  74. package/dist/types/utils/picked-config.d.ts +1 -1
  75. package/dist/types/utils/picked-config.d.ts.map +1 -1
  76. package/dist/types/utils/rules-logic.d.ts.map +1 -1
  77. package/dist/types/utils/search-params.d.ts.map +1 -1
  78. package/dist/types/utils/storage.d.ts.map +1 -1
  79. package/package.json +10 -14
  80. package/dist/experience-instance-BsXG5XJ4.cjs +0 -1
  81. package/dist/object-BbFTsGh3.cjs +0 -1
  82. package/dist/storage-Be5xWNPC.cjs +0 -1
  83. package/dist/to-kebab-case-BPnCZjhB.js +0 -6
  84. package/dist/to-kebab-case-BsOQ8CON.cjs +0 -1
  85. package/dist/types/utils/get-step-fields.d.ts +0 -4
  86. package/dist/types/utils/get-step-fields.d.ts.map +0 -1
  87. package/dist/types/utils/to-kebab-case.d.ts +0 -9
  88. package/dist/types/utils/to-kebab-case.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
- import { a as l } from "../../../api-CLwLE-DW.js";
2
- import { c as S } from "../../../api-CLwLE-DW.js";
1
+ import { a as l } from "../../../api-B3x8PEp4.js";
2
+ import { c as S } from "../../../api-B3x8PEp4.js";
3
3
  import { l as a } from "../../../logger-C9a75KZn.js";
4
4
  function d(e) {
5
5
  let r = 2166136261;
@@ -14,7 +14,7 @@ function g(e, r) {
14
14
  return r <= 0 ? !1 : r >= 100 ? !0 : e < r;
15
15
  }
16
16
  function h(e) {
17
- return typeof e != "object" || e === null || !("key" in e && "name" in e && "enabled" in e && "weight" in e && "version" in e) ? !1 : typeof e.key == "string" && typeof e.name == "string" && typeof e.enabled == "boolean" && typeof e.weight == "number" && typeof e.version == "number";
17
+ return typeof e != "object" || e === null || !("id" in e && "name" in e && "enabled" in e && "weight" in e && "version" in e) ? !1 : typeof e.id == "string" && typeof e.name == "string" && typeof e.enabled == "boolean" && typeof e.weight == "number" && typeof e.version == "number";
18
18
  }
19
19
  function f(e) {
20
20
  return typeof e != "object" || e === null || !("features" in e) || !Array.isArray(e.features) ? !1 : e.features.every(h);
@@ -24,7 +24,7 @@ function m(e) {
24
24
  if (r && r.length > 0)
25
25
  return r[0];
26
26
  }
27
- function y(e) {
27
+ function w(e) {
28
28
  const r = /* @__PURE__ */ new Set(), n = e.searchParams.feature;
29
29
  if (!n)
30
30
  return r;
@@ -35,15 +35,15 @@ function y(e) {
35
35
  return r;
36
36
  }
37
37
  function c(e, r, n) {
38
- const o = y(e), t = e.session?.id;
38
+ const o = w(e), t = e.session?.id;
39
39
  if (!t)
40
40
  throw new Error("Session ID is required for feature registration");
41
41
  const i = p(t);
42
42
  for (const s of r.features)
43
- o.has(s.key) || w(e, s, n, i);
43
+ o.has(s.id) || y(e, s, n, i);
44
44
  }
45
- function w(e, r, n, o) {
46
- e.registerFeature(r.key, {
45
+ function y(e, r, n, o) {
46
+ e.registerFeature(r.id, {
47
47
  key: `v${r.version}`,
48
48
  name: r.name,
49
49
  storage: n ? "session" : "local",
@@ -81,7 +81,7 @@ function j(e) {
81
81
  return !1;
82
82
  }
83
83
  }
84
- function k(e) {
84
+ function b(e) {
85
85
  if (typeof e != "object" || e === null || !("cause" in e))
86
86
  return !1;
87
87
  const { cause: r } = e;
@@ -93,7 +93,7 @@ async function u(e, r, n) {
93
93
  try {
94
94
  t = await l(e, o, n?.headers);
95
95
  } catch (s) {
96
- return j(e) && k(s) || a("warn", "Failed to fetch project config", s), null;
96
+ return j(e) && b(s) || a("warn", "Failed to fetch project config", s), null;
97
97
  }
98
98
  if (!t.ok)
99
99
  return a("warn", `Project config request failed with status ${t.status.toString()}`), null;
@@ -105,7 +105,7 @@ async function u(e, r, n) {
105
105
  }
106
106
  return f(i) ? i : (a("warn", "Invalid project config response shape"), null);
107
107
  }
108
- function P(e) {
108
+ function k(e) {
109
109
  return {
110
110
  name: "dynamic-experiences",
111
111
  setup: (r) => {
@@ -132,6 +132,6 @@ function P(e) {
132
132
  }
133
133
  export {
134
134
  S as createClientHeaders,
135
- P as dynamicExperiencesPlugin,
135
+ k as dynamicExperiencesPlugin,
136
136
  u as fetchProject
137
137
  };
@@ -1,5 +1,5 @@
1
1
  import { createEffect as n, sample as i } from "effector";
2
- import { c, l as g, s as S } from "../../../storage-Co_LbKr_.js";
2
+ import { c, l as g, s as S } from "../../../storage-B2d81EOI.js";
3
3
  import { l as f } from "../../../logger-C9a75KZn.js";
4
4
  const y = ({
5
5
  storage: a = "local"
@@ -1,5 +1,5 @@
1
1
  import { createEffect as s, sample as r } from "effector";
2
- import { c as l, l as y, s as g } from "../../../storage-Co_LbKr_.js";
2
+ import { c as l, l as y, s as g } from "../../../storage-B2d81EOI.js";
3
3
  const a = l("history", "global"), f = ({
4
4
  storage: i = "local"
5
5
  } = {}) => ({
@@ -1,41 +1,40 @@
1
- import { createEffect as i, attach as f, sample as p } from "effector";
2
- import { c as u, l as g, s as m } from "../../../storage-Co_LbKr_.js";
3
- import { t as S } from "../../../to-kebab-case-BPnCZjhB.js";
4
- const c = u("responses", "global"), b = (n, s) => {
1
+ import { createEffect as i, attach as f, sample as c } from "effector";
2
+ import { c as u, l as g, s as d } from "../../../storage-B2d81EOI.js";
3
+ const p = u("responses", "global"), S = (r, s) => {
5
4
  const o = {};
6
- return Object.entries(n).forEach(([t, a]) => {
7
- !s.find((r) => (r.key ?? S(r.name)) === t)?.policies?.doNotStoreValue && (o[t] = a);
5
+ return Object.entries(r).forEach(([t, n]) => {
6
+ !s.find((l) => l.id === t)?.policies?.doNotStoreValue && (o[t] = n);
8
7
  }), o;
9
- }, y = ({
10
- storage: n = "local"
8
+ }, R = ({
9
+ storage: r = "local"
11
10
  } = {}) => ({
12
11
  name: "responses-browser-storage-plugin",
13
12
  setup: (s) => {
14
- const o = n === "local" ? g : m, t = i(async () => {
15
- const e = o.get(c).json();
13
+ const o = r === "local" ? g : d, t = i(async () => {
14
+ const e = o.get(p).json();
16
15
  if (!e)
17
16
  return null;
18
17
  s.responses.register(e);
19
- }), a = f({
18
+ }), n = f({
20
19
  source: {
21
20
  responses: s.responses.getAllStore,
22
21
  fields: s.fields.listStore
23
22
  },
24
- effect: ({ responses: e, fields: l }) => {
25
- const r = b(e, l);
26
- o.set(c, r);
23
+ effect: ({ responses: e, fields: a }) => {
24
+ const l = S(e, a);
25
+ o.set(p, l);
27
26
  }
28
27
  });
29
- p({
28
+ c({
30
29
  source: s.eventBus,
31
30
  filter: (e) => e.type === "load",
32
31
  target: t
33
- }), p({
32
+ }), c({
34
33
  source: s.responses.getAllStore,
35
- target: a
34
+ target: n
36
35
  });
37
36
  }
38
37
  });
39
38
  export {
40
- y as responsesBrowserStoragePlugin
39
+ R as responsesBrowserStoragePlugin
41
40
  };
@@ -1,86 +1,91 @@
1
1
  import { createEffect as u, sample as d } from "effector";
2
2
  const x = "picked";
3
- async function p(r) {
4
- const { storeName: o, version: c = 1, keyPath: n = "id" } = r;
5
- return new Promise((a, t) => {
3
+ async function p(s) {
4
+ const { storeName: t, version: c = 1, keyPath: n = "id" } = s;
5
+ return new Promise((a, r) => {
6
6
  const e = indexedDB.open(x, c);
7
7
  e.onupgradeneeded = () => {
8
- const s = e.result;
9
- s.objectStoreNames.contains(o) || s.createObjectStore(o, n ? { keyPath: n } : void 0);
10
- }, e.onsuccess = () => a(e.result), e.onerror = () => t(new Error(e.error?.message));
8
+ const o = e.result;
9
+ o.objectStoreNames.contains(t) || o.createObjectStore(t, n ? { keyPath: n } : void 0);
10
+ }, e.onsuccess = () => a(e.result), e.onerror = () => r(new Error(e.error?.message));
11
11
  });
12
12
  }
13
- async function g(r, o) {
13
+ async function g(s, t) {
14
14
  return new Promise((c, n) => {
15
- const e = r.transaction(o, "readonly").objectStore(o).getAll();
15
+ const e = s.transaction(t, "readonly").objectStore(t).getAll();
16
16
  e.onsuccess = () => c(e.result), e.onerror = () => n(new Error(e.error?.message));
17
17
  });
18
18
  }
19
- async function y(r, o, c) {
19
+ async function y(s, t, c) {
20
20
  return new Promise((n, a) => {
21
- const s = r.transaction(o, "readwrite").objectStore(o).put(c);
22
- s.onsuccess = () => n(), s.onerror = () => a(new Error(s.error?.message));
21
+ const o = s.transaction(t, "readwrite").objectStore(t).put(c);
22
+ o.onsuccess = () => n(), o.onerror = () => a(new Error(o.error?.message));
23
23
  });
24
24
  }
25
- async function b(r, o, c) {
25
+ async function S(s, t, c) {
26
26
  return new Promise((n, a) => {
27
- const s = r.transaction(o, "readwrite").objectStore(o).delete(c);
28
- s.onsuccess = () => n(), s.onerror = () => a(new Error(s.error?.message));
27
+ const o = s.transaction(t, "readwrite").objectStore(t).delete(c);
28
+ o.onsuccess = () => n(), o.onerror = () => a(new Error(o.error?.message));
29
29
  });
30
30
  }
31
- async function S(r, o) {
31
+ async function b(s, t) {
32
32
  return new Promise((c, n) => {
33
- const e = r.transaction(o, "readwrite").objectStore(o).clear();
33
+ const e = s.transaction(t, "readwrite").objectStore(t).clear();
34
34
  e.onsuccess = () => c(), e.onerror = () => n(new Error(e.error?.message));
35
35
  });
36
36
  }
37
- const l = "responses", m = { storeName: l, keyPath: "fieldId" }, I = () => ({
37
+ const l = "responses", w = { storeName: l, keyPath: "fieldId" }, E = () => ({
38
38
  name: "responses-indexdb-plugin",
39
- setup: (r) => {
40
- const o = u(async () => {
41
- const t = await p(m), s = (await g(t, l)).reduce(
42
- (i, { fieldId: w, value: f }) => (i[w] = f, i),
39
+ setup: (s) => {
40
+ const t = u(async () => {
41
+ const r = await p(w), o = (await g(r, l)).reduce(
42
+ (i, { fieldId: m, value: f }) => (i[m] = f, i),
43
43
  {}
44
44
  );
45
- await r.responses.commit(s);
45
+ await s.responses.commit(o);
46
46
  }), c = u(
47
- async (t) => {
48
- t.forEach((e) => {
49
- p(m).then((s) => {
50
- y(s, l, e);
51
- }).catch((s) => {
52
- console.error("Failed to store response in IndexedDB:", s);
53
- });
54
- });
47
+ async (r) => {
48
+ await Promise.allSettled(
49
+ r.map(async (e) => {
50
+ const o = await p(w);
51
+ await y(
52
+ o,
53
+ l,
54
+ e
55
+ );
56
+ })
57
+ );
55
58
  }
56
59
  ), n = u(async () => {
57
- const t = await p(m);
58
- await S(t, l);
59
- }), a = u(async (t) => {
60
- const e = await p(m);
61
- await b(e, l, t);
60
+ const r = await p(w);
61
+ await b(r, l);
62
+ }), a = u(async (r) => {
63
+ const e = await p(w);
64
+ await S(e, l, r);
62
65
  });
63
66
  d({
64
- source: r.eventBus,
65
- filter: (t) => t.type === "load",
66
- target: o
67
+ source: s.eventBus,
68
+ filter: (r) => r.type === "load",
69
+ target: t
67
70
  }), d({
68
- clock: r.responses.listStore,
69
- source: { responses: r.responses.listStore, fields: r.fields.listStore },
70
- fn: ({ responses: t, fields: e }) => {
71
- const s = e.filter((i) => !i.policies?.doNotStoreValue);
72
- return t.filter((i) => s.some((w) => w.key === i.fieldId));
71
+ clock: s.responses.listStore,
72
+ source: { responses: s.responses.listStore, fields: s.fields.listStore },
73
+ fn: ({ responses: r, fields: e }) => {
74
+ const o = new Set(
75
+ e.filter((i) => !i.policies?.doNotStoreValue).map((i) => i.id)
76
+ );
77
+ return r.filter((i) => o.has(i.fieldId));
73
78
  },
74
79
  target: c
75
80
  }), d({
76
- clock: r.responses.clearAll,
81
+ clock: s.responses.clearAll,
77
82
  target: n
78
83
  }), d({
79
- clock: r.responses.clear,
84
+ clock: s.responses.clear,
80
85
  target: a
81
86
  });
82
87
  }
83
88
  });
84
89
  export {
85
- I as responsesIndexedDBPlugin
90
+ E as responsesIndexedDBPlugin
86
91
  };
@@ -1,37 +1,37 @@
1
- import { a as f, G as c, f as m } from "../../../supports-8YT4QKI7.js";
2
- import { p as a } from "../../../object-JwZ58NOH.js";
3
- const o = c;
4
- let s;
5
- const d = (r) => ({
1
+ import { a as c, G as h, f as l } from "../../../supports-8YT4QKI7.js";
2
+ import { p as u } from "../../../object-CJssU1Pm.js";
3
+ const r = h;
4
+ let n;
5
+ const H = (s) => ({
6
6
  name: "single-page-app",
7
- setup: (n) => {
8
- r.instrumentHistory && f() && h(() => {
7
+ setup: (e) => {
8
+ c() && m(() => {
9
9
  requestAnimationFrame(() => {
10
- n.start();
10
+ e.start();
11
11
  });
12
12
  });
13
13
  }
14
14
  });
15
- function h(r) {
16
- if (o.addEventListener("popstate", () => {
17
- const e = o.location.href, t = s;
18
- s = e, t !== e && r();
19
- }), !m())
15
+ function m(s) {
16
+ if (r.addEventListener("popstate", () => {
17
+ const t = r.location.href, i = n;
18
+ n = t, i !== t && s();
19
+ }), !l())
20
20
  return;
21
- function n(e) {
22
- return function(...t) {
23
- const i = t.length > 2 ? t[2] : void 0;
24
- if (i) {
25
- const u = s, p = String(i);
26
- if (s = p, u === p)
27
- return e.apply(this, t);
28
- r();
21
+ function e(t) {
22
+ return function(...o) {
23
+ const p = o.length > 2 ? o[2] : void 0;
24
+ if (p) {
25
+ const f = n, a = String(p);
26
+ if (n = a, f === a)
27
+ return t.apply(this, o);
28
+ s();
29
29
  }
30
- return e.apply(this, t);
30
+ return t.apply(this, o);
31
31
  };
32
32
  }
33
- a(o.history, "pushState", n), a(o.history, "replaceState", n);
33
+ u(r.history, "pushState", e), u(r.history, "replaceState", e);
34
34
  }
35
35
  export {
36
- d as singlePageAppPlugin
36
+ H as singlePageAppPlugin
37
37
  };
@@ -1,5 +1,5 @@
1
1
  import { createEvent as i, createStore as v, createEffect as C, sample as n, attach as S } from "effector";
2
- import { h as F } from "../../experience-instance-fvSEb72i.js";
2
+ import { h as F } from "../../experience-instance-DTyL1fNb.js";
3
3
  function R() {
4
4
  let c, p;
5
5
  return {
@@ -0,0 +1 @@
1
+ "use strict";const s=require("effector"),W=require("@withease/factories"),j=require("./supports-YvpQZxbh.cjs"),I=require("./logger-BsmHUUw1.cjs"),xe=require("./object-mwaxtjLG.cjs");function Ne(e){return typeof e=="number"&&!isNaN(e)}function R(e){return typeof e=="string"}function N(e){return Array.isArray(e)}function ue(e){return e instanceof Promise}function ie(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function S(e){if(Ne(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function M(e){return`${e}`}const Ie={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>S(e)>S(t),">=":(e,t)=>S(e)>=S(t),"<":(e,t,r)=>{const n=S(e),c=S(t);if(r===void 0)return n<c;const a=S(r);return n<c&&c<a},"<=":(e,t,r)=>{const n=S(e),c=S(t);if(r===void 0)return n<=c;const a=S(r);return n<=c&&c<=a},"!!":async e=>await v(e),"!":async e=>!await v(e),"%":(e,t)=>S(e)%S(t),log:e=>(console.log(e),e),in:(e,t)=>t?R(t)?t.indexOf(M(e))!==-1:N(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(M).join(""),substr:(e,t,r)=>{const n=M(e),c=S(t);if(r===void 0)return n.substr(c);const a=S(r);if(a<0){const o=n.substr(c);return o.substr(0,o.length+a)}return n.substr(c,a)},"+":(...e)=>e.reduce((t,r)=>S(t)+S(r),0),"*":(...e)=>e.reduce((t,r)=>S(t)*S(r),1),"-":(e,t)=>{const r=S(e);return t===void 0?-r:r-S(t)},"/":(e,t)=>S(e)/S(t),min:(...e)=>Math.min(...e.map(S)),max:(...e)=>Math.max(...e.map(S)),merge:(...e)=>e.reduce((t,r)=>N(r)?t.concat(r):t.concat([r]),[]),var(e,t){const r=arguments.length>1?t:null;if(e===""||e==="."||e===null||e===void 0)return this;if(typeof e=="number"&&Array.isArray(this))return e>=0&&e<this.length?this[e]:r;const n=M(e);if(n===""||n===".")return this;const c=n.split(".");let a=this;for(const o of c){if(a==null)return r;if(Array.isArray(a)){const l=parseInt(o,10);isNaN(l)?a=a[o]:a=a[l]}else a=a[o]}return a!==void 0?a:r},async missing(...e){const t=N(e[0])?e[0]:e,r=[];for(const n of t){const c=await g({var:n},this);(c===null||c==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await g({missing:t},this);if(!N(r)||!N(t))return[];const n=r.filter(R);return t.filter(R).length-n.length>=S(e)?[]:n},invoke(...e){const[t,...r]=e;return typeof t!="function"?null:Reflect.apply(t,null,r)},regexp_matches(e,t){let r=e,n="";if(N(e)){const[a,o]=e;r=a,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(M(t))},throw(e){throw new Error(M(e))}};async function g(e,t){if(!e)return e;if(ue(e))return g(await e,t);if(N(e))return Promise.all(e.map(o=>g(o,t)));if(!ie(e))return e;const r=ke(e);let n=r?e[r]??[]:[];switch(N(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await v(await g(n[o],t)))return g(n[o+1],t);return n.length%2===1?g(n[n.length-1],t):null;case"and":{let o=null;for(const l of n)if(o=await g(l,t),!await v(o))return o;return o}case"or":{let o=null;for(const l of n)if(o=await g(l,t),await v(o))return o;return o}case"map":{const o=await g(n[0],t);return N(o)?await Promise.all(o.map(l=>g(n[1],l))):[]}case"filter":{const o=await g(n[0],t);return N(o)?(await Promise.all(o.map(async p=>{const m=await v(await g(n[1],p));return{item:p,shouldInclude:m}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],t);if(!N(o))return n.length>2?await g(n[2],t):null;const l=n[1];let m=n.length>2?await g(n[2],t):null;for(const E of o)m=await g(l,{current:E,accumulator:m});return m}case"all":{const o=await g(n[0],t);if(!N(o)||o.length===0)return!1;for(const l of o)if(!await v(await g(n[1],l)))return!1;return!0}case"some":{const o=await g(n[0],t);if(!N(o))return!1;for(const l of o)if(await v(await g(n[1],l)))return!0;return!1}case"none":{const o=await g(n[0],t);if(!N(o))return!0;for(const l of o)if(await v(await g(n[1],l)))return!1;return!0}case"catch":try{return await g(n[0],t)}catch(o){return ie(o)?await g(o,t):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const c=await Promise.all(n.map(o=>g(o,t))),a=r?Ie[r]:void 0;if(!a)throw new Error(`Unrecognized operation ${r}`);return a.apply(t,c)}async function v(e){return ue(e)?v(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function ke(e){return Object.keys(e)[0]}function fe(e){return!xe.isEmpty(e)}async function Y(e,t,r){const n=e.getStateSnapshot(),c=e.predicates.listStore.getState().reduce((p,m)=>({...p,[m.name]:(...E)=>m.predicate({...n,args:E})}),{}),a=e.features.listStore.getState().reduce((p,m)=>({...p,[m.id]:async()=>{const{bucket:E}=await m.getBucket();return E}}),{}),o=e.actions.listStore.getState().reduce((p,m)=>({...p,[m.name]:E=>m.action(E)}),{}),l={responses:e.responses.getAllStore.getState(),location:typeof n.location=="object"?{hash:n.location.hash,host:n.location.host,hostname:n.location.hostname,href:n.location.href,origin:n.location.origin,pathname:n.location.pathname,port:n.location.port,protocol:n.location.protocol,search:n.location.search}:void 0,predicates:c,features:a,actions:o,...r};return await g(t,l)}function ve(e){return!j.supportsWindow()||!j.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}const be="open";function Ae(e){if(!j.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:be})}function Oe(){return new Promise((e,t)=>{if(!j.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Fe(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const q="picked-root",U="picked-target",_e="picked-root";function Be(e,t){return[...e,{selector:`${_e}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const c=ve(n.selector).filter(a=>!Me(a,t)&&!le(a,t));return{...n,elements:c}})}function $e(e,t){return e.flatMap(r=>r.elements.map(n=>De(n,r.placement,t)))}function Te(e,t){e.classList.add(U),e.classList.add(`${U}-${t}`)}function Me(e,t){return t?e.classList.contains(`${U}-${t}`):e.classList.contains(`${U}`)}function le(e,t){return t?e.classList.contains(`${q}-${t}`):e.classList.contains(q)}function Le(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(q),t.classList.add(`${q}-${e}`),t}function De(e,t,r){let n;const c=Le(r);if(e instanceof Document)n=e.body.appendChild(c);else{switch(t){case"replace":e.replaceWith(c);break;case"before":e.before(c);break;case"after":e.after(c);break;case"prepend":e.prepend(c);break;case"append":e.append(c);break}n=c}return n}function se(e){return e.type==="conditional"}function _(e){return e.type==="step"}function ce(e){return e.type==="experience"}function J(e){return e.type==="origin"}function ae(e){return e.type==="action"}const de=(e,t,r,n,c=new Set)=>c.has(r.id)?[]:(c.add(r.id),_(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const l=e.find(p=>p.id===o.destinationNodeId);return l?de(e,t,l,!1,c):[]})),Re=(e,t,r)=>de(e,t,r,!0,new Set),pe=(e,t,r,n,c=new Set)=>{if(c.has(r.id))return[-1,-1];c.add(r.id);const a=t.filter(p=>p.sourceNodeId===r.id);if(a.length===0)return[0,0];let o=1/0,l=-1/0;for(const p of a){const m=e.find(B=>B.id===p.destinationNodeId);if(!m)continue;const[E,A]=pe(e,t,m,!1,new Set(c));E!==-1&&(o=Math.min(o,E+1),l=Math.max(l,A+1))}return o===1/0?[-1,-1]:[o,l]},Pe=(e,t,r)=>pe(e,t,r,!0,new Set),ge=(e,t,r,n=new Set)=>{if(n.has(r.id))return[-1,-1];if(n.add(r.id),r.type==="origin")return[0,0];const c=t.filter(l=>l.destinationNodeId===r.id);if(c.length===0)return[-1,-1];let a=1/0,o=-1/0;for(const l of c){const p=e.find(A=>A.id===l.sourceNodeId);if(!p)continue;const[m,E]=ge(e,t,p,new Set(n));m!==-1&&(a=Math.min(a,m+1),o=Math.max(o,E+1))}return a===1/0?[-1,-1]:[a,o]},He=(e,t,r)=>ge(e,t,r,new Set),me=e=>e.find(r=>r.type==="origin")||null,Q=(e,t,r)=>{if(!e)return me(t);const n=r.find(a=>a.sourceNodeId===e.id);if(!n)return null;const c=t.find(a=>a.id===n.destinationNodeId);return c||null};async function Ce(e,t,r,n){const c=e?"true":"false",a=n.find(o=>o.sourceNodeHandle===c&&o.sourceNodeId===t);return r.find(o=>o.id===a?.destinationNodeId)}const Z=s.createDomain("experience-instance"),je=W.createFactory(({client:e,experience:t,target:r,options:n})=>{const c=s.createEvent(),a=s.createEvent(),o=s.createEvent(),l=s.createEvent(),p=s.createEvent(),m=s.createEvent(),E=t.componentStore,A=Z.store("transitioning"),B=e.history.entriesStore.map(i=>i.filter(d=>d.experienceId===t.id)),P=B.map(i=>i.filter(d=>_(d.node))),u=B.map(i=>i.at(-1)?.node||null),h=s.combine(t.treeStore,u,({steps:i},d)=>i.find(f=>d&&_(d)&&f.id===d.stepId)||null),x=s.combine(t.treeStore,P,({steps:i},d)=>{const f=d.at(-2);if(!f||!_(f.node))return null;const y=f.node;return i.find(O=>O.id===y.stepId)||null}),$=s.combine(t.treeStore,u,({nodes:i,edges:d},f)=>f?Re(i,d,f):[]),L=s.combine(t.treeStore,u,({nodes:i,edges:d},f)=>f?He(i,d,f):[-1,-1]),G=s.combine(t.treeStore,u,({nodes:i,edges:d},f)=>f?Pe(i,d,f):[-1,-1]),T=Z.store(!1),H=s.createApi(T,{open:()=>!0,close:()=>!1,toggle:i=>!i,set:(i,d)=>d}),he=s.createEffect(async()=>{e.history.back({experienceId:t.id})}),ye=s.attach({source:t.treeStore,effect:async(i,d)=>{const f=i.nodes.find(y=>_(y)&&y.stepId===d);f&&e.history.push({experienceId:t.id,node:f})}}),ee=s.attach({source:u,effect:i=>{}}),K=s.attach({source:t.treeStore,effect:async({nodes:i})=>me(i)}),V=s.attach({source:t.treeStore,effect:async({nodes:i,edges:d},f)=>{if(J(f))return Q(f,i,d)}}),z=s.attach({source:t.treeStore,effect:async({nodes:i,edges:d,conditionals:f},y)=>{if(!se(y))return;const O=f.find(b=>b.id===y.conditionalId);if(!O)return;const k=y.id,w=await Y(e,O.condition);return Ce(!!w,k,i,d)}}),te=s.attach({source:t.treeStore,effect:async({nodes:i,edges:d},f)=>{if(!ae(f))return;const y=f.action;if(!y){I.logger("warn",`Action node ${f.id} has no action name`);return}const O=e.actions.getByName(y).getState();if(!O){I.logger("warn",`Action '${y}' not registered on client`);const k=d.find(w=>w.sourceNodeId===f.id&&w.sourceNodeHandle==="false");return k?i.find(w=>w.id===k.destinationNodeId):null}if(typeof O.action!="function"){I.logger("warn",`Action '${y}' is not a function`);const k=d.find(w=>w.sourceNodeId===f.id&&w.sourceNodeHandle==="false");return k?i.find(w=>w.id===k.destinationNodeId):null}try{I.logger("info",`Executing action: ${y}`),await O.action(y);const k=d.find(b=>b.sourceNodeId===f.id&&b.sourceNodeHandle==="true");if(!k)return I.logger("warn",`No 'true' edge found for action node ${f.id}`),null;const w=i.find(b=>b.id===k.destinationNodeId);return I.logger("info",`Action '${y}' succeeded, moving to node ${w?.id}`),w||null}catch(k){I.logger("warn",`Action '${y}' failed:`,k);const w=d.find(C=>C.sourceNodeId===f.id&&C.sourceNodeHandle==="false");if(!w)return I.logger("warn",`No 'false' edge found for action node ${f.id}`),null;const b=i.find(C=>C.id===w.destinationNodeId);return I.logger("info",`Action '${y}' failed, moving to node ${b?.id}`),b||null}}}),we=s.createEffect(i=>{ce(i)&&e.experiences.launch({id:i.experienceId})}),ne=s.attach({source:[u,t.treeStore],effect:async([i,{nodes:d,edges:f}])=>Q(i,d,f)}),D=s.attach({source:[u,t.treeStore],effect:async([i,{nodes:d,edges:f}])=>Q(i,d,f)}),Ee=s.createEffect(i=>{e.history.push({experienceId:t.id,node:i})}),re=s.attach({source:t.configStore,effect:async({initializeOpenLogic:i})=>n?.initialiseOpen!==void 0?n.initialiseOpen:fe(i)?!!await Y(e,i):i??!1}),F=Object.freeze({id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:E,stateStore:A,isOpenStore:T,open:H.open,close:H.close,toggleOpen:H.toggle,setOpen:H.set,treeStore:t.treeStore,fieldsStore:t.fieldsStore,currentNodeStore:u,currentStepStore:h,previousStepStore:x,nextReachableStepNodesStore:$,stepsToOriginStore:L,stepsToLeafStore:G,goToNextStep:a,goToPreviousStep:o,goToStepById:l,stepsHistoryStore:P}),X=s.createEvent(),oe=s.createEvent();return s.sample({source:u,target:X}),s.sample({clock:X,filter:i=>i===null,target:K}),s.sample({clock:X,filter:i=>i!==null,target:oe}),s.split({source:oe,match:i=>se(i)?"condition":_(i)?"step":ce(i)?"launchExperience":J(i)?"origin":ae(i)?"action":"other",cases:{origin:V,condition:z,step:ee,launchExperience:we,action:te,__:s.createEvent()}}),s.sample({clock:[z.doneData,V.doneData,K.doneData,D.doneData,ne.doneData,te.doneData],filter:Boolean,target:Ee}),s.sample({clock:a,target:D}),s.sample({clock:a,source:h,filter:Boolean,target:e.eventBus.prepend(i=>({type:"step_submit",step:i,experience:F}))}),s.sample({clock:D.done,source:h,filter:Boolean,target:e.eventBus.prepend(i=>({type:"step_submit_success",step:i,experience:F}))}),s.sample({clock:D.fail,source:h,filter:Boolean,target:e.eventBus.prepend(i=>({type:"step_submit_error",step:i,experience:F}))}),s.sample({clock:o,target:he}),s.sample({clock:l,target:ye}),s.sample({source:s.combine([z.pending,V.pending,K.pending,D.pending]),fn:i=>i.some(Boolean)?"transitioning":"ready",target:A}),s.sample({clock:ee.doneData,source:h,filter:Boolean,target:e.eventBus.prepend(i=>({type:"step_enter",step:i,experience:F}))}),s.sample({clock:m,target:re}),s.sample({source:re.doneData,fn:Boolean,target:T}),s.sample({source:u,clock:c,filter:i=>i?J(i):!0,target:ne}),s.sample({source:T,filter:Boolean,target:c}),s.sample({source:T,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:F}))}),s.sample({source:T,filter:i=>!i,target:e.eventBus.prepend(()=>({type:"experience_close",experience:F}))}),s.sample({clock:p,target:[m]}),p(),F});function Se(e){return W.invoke(je,e)}const qe=W.createFactory(({client:e})=>{const t=Z.store({}),r=s.createEvent(),n=s.createEvent(),c=s.createEvent(),a=s.createApi(t,{register(u,h){const x=[...u[h.experienceId]??[]];return x.push(h),{...u,[h.experienceId]:x}},unregister(u,h){const x=h.experienceId,$=u[x]?.filter(L=>L!==h);return{...u,[x]:$??[]}}}),o=s.createEffect(({experience:u,target:h,options:x})=>Se({client:e,experience:u,target:h,options:x})),l=s.createEffect(u=>{a.register(u)}),p=s.createEffect(u=>{u.target&&Fe(u.target,()=>{c(u)})}),m=s.createEffect(u=>{a.unregister(u)}),E=s.createEffect(u=>{const h=u.componentStore.getState();if(!h){I.logger("warn","No app component registered. Skipping init.");return}const x=h.frameworkStore.getState();if(!x){I.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const $=u.target;if(!$){I.logger("error",`No target element registered for experience '${u.experienceId}'. Skipping rendering.`);return}const L=Ae($);try{x.render(L,h.component,e,u)}catch(G){I.logger("error",G)}});s.sample({clock:r,target:o}),s.sample({clock:c,target:m}),s.sample({clock:o.doneData,target:[l,p,n]}),s.sample({clock:o.doneData,target:e.eventBus.prepend(u=>({type:"experience_initialize",experience:u}))}),s.sample({clock:n,target:E});function A(u,h,x){r({experience:u,target:h,options:x})}const B=t.map(u=>Object.values(u).flat());function P(u){return t.map(h=>h[u]||[],{skipVoid:!1})}return{spawn:A,getByExperienceId:P,listStore:B}});function Ue(e){return W.invoke(qe,e)}exports.createAppHosts=$e;exports.createExperienceInstance=Se;exports.createExperienceInstanceIndex=Ue;exports.domInteractive=Oe;exports.evaluateRuleLogic=Y;exports.getTargetElements=Be;exports.isPickedRoot=le;exports.isRulesLogic=fe;exports.isStepNode=_;exports.tagTargetElement=Te;