@picked/client 0.0.1-dev.1777938796953 → 0.0.1-dev.1778136207545

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 (102) hide show
  1. package/README.md +0 -8
  2. package/dist/{api-Bn4z854o.js → api-Crj5wFbR.js} +1 -1
  3. package/dist/{api-GE6C0lxp.cjs → api-NcKXNrkY.cjs} +1 -1
  4. package/dist/cjs/form/index.js +1 -1
  5. package/dist/cjs/index.js +4 -4
  6. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  7. package/dist/cjs/plugins/experience-browser-storage/index.js +1 -1
  8. package/dist/cjs/plugins/history-browser-storage/index.js +1 -1
  9. package/dist/cjs/plugins/single-page-app/index.js +1 -1
  10. package/dist/cjs/plugins/web-components/index.js +1 -1
  11. package/dist/cjs/server/index.js +1 -1
  12. package/dist/docs/actions.mdx +0 -1
  13. package/dist/docs/index.md +0 -2
  14. package/dist/docs/pickedql/dimensions.md +2 -0
  15. package/dist/docs/pickedql/virtual-functions.md +27 -0
  16. package/dist/docs/sdk/actions.md +0 -1
  17. package/dist/docs/sdk/features.md +0 -1
  18. package/dist/docs/sdk/index.md +0 -1
  19. package/dist/docs/sdk/plugins/create-experience.md +0 -1
  20. package/dist/docs/sdk/plugins/dynamic-experiences.md +0 -1
  21. package/dist/docs/sdk/plugins/window-object.md +0 -1
  22. package/dist/docs/sdk/predicates.md +0 -1
  23. package/dist/esm/form/index.js +1 -1
  24. package/dist/esm/index.js +1011 -533
  25. package/dist/esm/plugins/dynamic-experiences/index.js +127 -60
  26. package/dist/esm/plugins/experience-browser-storage/index.js +8 -5
  27. package/dist/esm/plugins/history-browser-storage/index.js +3 -3
  28. package/dist/esm/plugins/single-page-app/index.js +1 -1
  29. package/dist/esm/plugins/web-components/index.js +1 -1
  30. package/dist/esm/server/index.js +23 -13
  31. package/dist/{experience-instance-CWYRLfFM.js → experience-instance-BrLWgVAN.js} +135 -127
  32. package/dist/experience-instance-Ct3ogC7n.cjs +1 -0
  33. package/dist/rules-logic-D_CVBuv7.js +13 -0
  34. package/dist/rules-logic-H6P8xwHF.cjs +1 -0
  35. package/dist/types/client.d.ts +2 -2
  36. package/dist/types/entities/action/action.d.ts +6 -3
  37. package/dist/types/entities/action/action.d.ts.map +1 -1
  38. package/dist/types/entities/component/component.d.ts +39 -2
  39. package/dist/types/entities/component/component.d.ts.map +1 -1
  40. package/dist/types/entities/content/content.d.ts +37 -0
  41. package/dist/types/entities/content/content.d.ts.map +1 -0
  42. package/dist/types/entities/experience/experience.d.ts +69 -112
  43. package/dist/types/entities/experience/experience.d.ts.map +1 -1
  44. package/dist/types/entities/experience-instance/experience-instance.d.ts +17 -2
  45. package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
  46. package/dist/types/entities/feature/feature.d.ts +26 -2
  47. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  48. package/dist/types/entities/field/field.d.ts.map +1 -1
  49. package/dist/types/entities/framework/framework.d.ts +24 -3
  50. package/dist/types/entities/framework/framework.d.ts.map +1 -1
  51. package/dist/types/entities/history/history.d.ts +15 -27
  52. package/dist/types/entities/history/history.d.ts.map +1 -1
  53. package/dist/types/entities/plugin/plugin.d.ts +32 -1
  54. package/dist/types/entities/plugin/plugin.d.ts.map +1 -1
  55. package/dist/types/entities/predicate/predicate.d.ts +24 -3
  56. package/dist/types/entities/predicate/predicate.d.ts.map +1 -1
  57. package/dist/types/entities/session/session.d.ts +45 -0
  58. package/dist/types/entities/session/session.d.ts.map +1 -0
  59. package/dist/types/entities/step/step.d.ts +14 -0
  60. package/dist/types/entities/step/step.d.ts.map +1 -1
  61. package/dist/types/exports.d.ts +9 -3
  62. package/dist/types/exports.d.ts.map +1 -1
  63. package/dist/types/index.d.ts +3 -1
  64. package/dist/types/index.d.ts.map +1 -1
  65. package/dist/types/lifecycle/lifecycle.d.ts +47 -0
  66. package/dist/types/lifecycle/lifecycle.d.ts.map +1 -0
  67. package/dist/types/lifecycle/rules-logic.d.ts +24 -0
  68. package/dist/types/lifecycle/rules-logic.d.ts.map +1 -0
  69. package/dist/types/lifecycle/state-snapshot.d.ts +37 -0
  70. package/dist/types/lifecycle/state-snapshot.d.ts.map +1 -0
  71. package/dist/types/logic-engine.d.ts +1 -1
  72. package/dist/types/logic-engine.d.ts.map +1 -1
  73. package/dist/types/picked.d.ts +149 -190
  74. package/dist/types/picked.d.ts.map +1 -1
  75. package/dist/types/plugins/dynamic-experiences/index.d.ts +2 -1
  76. package/dist/types/plugins/dynamic-experiences/index.d.ts.map +1 -1
  77. package/dist/types/plugins/dynamic-experiences/plugin.d.ts +18 -1
  78. package/dist/types/plugins/dynamic-experiences/plugin.d.ts.map +1 -1
  79. package/dist/types/plugins/dynamic-experiences/types.d.ts +62 -1
  80. package/dist/types/plugins/dynamic-experiences/types.d.ts.map +1 -1
  81. package/dist/types/plugins/experience-browser-storage/plugin.d.ts.map +1 -1
  82. package/dist/types/plugins/history-browser-storage/plugin.d.ts +0 -14
  83. package/dist/types/plugins/history-browser-storage/plugin.d.ts.map +1 -1
  84. package/dist/types/plugins/web-components/plugin.d.ts.map +1 -1
  85. package/dist/types/server/index.d.ts +7 -0
  86. package/dist/types/server/index.d.ts.map +1 -1
  87. package/dist/types/utils/events.d.ts +1 -1
  88. package/dist/types/utils/events.d.ts.map +1 -1
  89. package/dist/types/utils/picked-config.d.ts +12 -4
  90. package/dist/types/utils/picked-config.d.ts.map +1 -1
  91. package/dist/types/utils/rules-logic.d.ts +4 -9
  92. package/dist/types/utils/rules-logic.d.ts.map +1 -1
  93. package/package.json +2 -2
  94. package/dist/experience-instance-BDTNGT8a.cjs +0 -1
  95. package/dist/rules-logic-BTIxfrJJ.js +0 -240
  96. package/dist/rules-logic-DNLOv90w.cjs +0 -1
  97. package/dist/types/utils/state-snaphot.d.ts +0 -26
  98. package/dist/types/utils/state-snaphot.d.ts.map +0 -1
  99. package/dist/types/utils/user-session.d.ts +0 -12
  100. package/dist/types/utils/user-session.d.ts.map +0 -1
  101. /package/dist/{object-C82v79xc.js → object-DvUDOytC.js} +0 -0
  102. /package/dist/{object-CUJOjanb.cjs → object-ThO1DEyl.cjs} +0 -0
package/dist/esm/index.js CHANGED
@@ -1,78 +1,109 @@
1
- import { n as e, t } from "../rules-logic-BTIxfrJJ.js";
2
- import { t as n } from "../object-C82v79xc.js";
1
+ import { t as e } from "../object-DvUDOytC.js";
2
+ import { n as t, t as n } from "../rules-logic-D_CVBuv7.js";
3
3
  import { t as r } from "../logger-6z_gb4rA.js";
4
4
  import { a as i, c as a, d as o, i as s, l as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "../supports-0XIfd4-R.js";
5
- import { a as g, c as _, i as v, l as ee, n as te, o as ne, r as re, s as y } from "../experience-instance-CWYRLfFM.js";
6
- import { i as ie, n as b, r as x, t as S } from "../storage-6Xk0uAxB.js";
7
- import { n as ae, r as oe } from "../api-Bn4z854o.js";
8
- import { t as C } from "../id-CRqy981z.js";
9
- import { attach as w, combine as T, createApi as E, createDomain as D, createEffect as O, createEvent as k, createStore as A, sample as j } from "effector";
10
- import { createFactory as M, invoke as N } from "@withease/factories";
5
+ import { a as g, c as _, i as v, l as y, n as b, o as ee, r as x, s as S } from "../experience-instance-BrLWgVAN.js";
6
+ import { i as C, n as w, r as T, t as E } from "../storage-6Xk0uAxB.js";
7
+ import { n as D, r as te } from "../api-Crj5wFbR.js";
8
+ import { t as ne } from "../id-CRqy981z.js";
9
+ import { attach as O, combine as k, createApi as A, createDomain as j, createEffect as M, createEvent as N, createStore as P, sample as F } from "effector";
10
+ import { createFactory as I, invoke as L } from "@withease/factories";
11
11
  //#region src/entities/experience/experience.ts
12
- var P = D("experience"), se = M(({ client: e, experience: t }) => {
13
- let n = P.store(t), r = E(n, { merge(e, t) {
12
+ var re = j("experience"), ie = I(({ client: e, experience: r }) => {
13
+ let i = re.store(r), a = A(i, { merge(e, t) {
14
14
  return {
15
15
  ...e,
16
16
  ...t.experience
17
17
  };
18
- } }), i = n.map((e) => ({
18
+ } }), o = i.map((e) => ({
19
19
  name: e.name,
20
20
  decisionLogic: e.condition,
21
21
  targetSelectors: e.targets,
22
22
  initializeOpenLogic: e.initializeOpen
23
- })), a = T(n, e.components.listStore, (e, t) => (e.componentName ? t.find((t) => t.name === e.componentName) : void 0) || t.find((t) => t.name === `experience:${e.id}`) || t.find((e) => e.name === "experience"), { skipVoid: !1 }), o = T(n, e.steps.indexStore, e.conditions.indexStore, (e, t, n) => {
24
- let r = e.nodes.filter(v).map((e) => t[e.stepId]).filter((e) => e !== void 0), i = e.nodes.filter(re).map((e) => n[e.conditionId]).filter((e) => e !== void 0);
23
+ })), s = k(i, e.components.listStore, (e, t) => (e.componentName ? t.find((t) => t.name === e.componentName) : void 0) || t.find((t) => t.name === `experience:${e.id}`) || t.find((e) => e.name === "experience"), { skipVoid: !1 }), c = k(i, e.steps.indexStore, e.conditions.indexStore, (e, t, n) => {
24
+ let r = e.nodes.filter(v).map((e) => t[e.stepId]).filter((e) => e !== void 0), i = e.nodes.filter(x).map((e) => n[e.conditionId]).filter((e) => e !== void 0);
25
25
  return {
26
26
  steps: r,
27
27
  nodes: e.nodes,
28
28
  edges: e.edges,
29
29
  conditions: i
30
30
  };
31
- }), s = t.actions ?? [];
32
- return {
33
- id: t.id,
34
- key: t.key,
35
- name: t.name,
36
- configStore: i,
37
- treeStore: o,
38
- componentStore: a,
39
- actions: s,
40
- merge: r.merge
41
- };
31
+ }), l = r.actions ?? [], u, d = O({
32
+ source: o,
33
+ effect: (t, n) => {
34
+ let i = S(t.targetSelectors, r.id);
35
+ i.forEach(({ elements: e }) => e.forEach((e) => y(e, r.id))), g(i, r.id, r.key).forEach((t) => {
36
+ n ? e.experienceInstances.spawn(u, t, n) : e.experienceInstances.spawn(u, t);
37
+ });
38
+ }
39
+ }), f = O({
40
+ source: k({
41
+ preconditionPassed: e.preconditionPassedStore,
42
+ isUser: e.session.store.map((e) => e.isUser, { skipVoid: !1 }),
43
+ config: o
44
+ }),
45
+ effect: async ({ preconditionPassed: i, isUser: a, config: o }) => {
46
+ if (!i || !a) return !1;
47
+ let { decisionLogic: s, targetSelectors: c } = o;
48
+ return c.length === 0 || S(c, r.id).length < 1 ? !1 : s === void 0 ? !0 : t(s) ? await n(e, s) === !0 : !0;
49
+ }
50
+ });
51
+ return u = {
52
+ id: r.id,
53
+ key: r.key,
54
+ name: r.name,
55
+ configStore: o,
56
+ treeStore: c,
57
+ componentStore: s,
58
+ actions: l,
59
+ merge: a.merge,
60
+ initialiseFx: d,
61
+ shouldInitialiseFx: f
62
+ }, u;
42
63
  });
43
- function ce(e) {
44
- return N(se, e);
64
+ function ae(e) {
65
+ return L(ie, e);
45
66
  }
46
- var le = M(({ client: e }) => {
47
- let t = P.store({}), n = E(t, { register(e, t) {
67
+ var oe = I(({ client: e }) => {
68
+ let t = re.store({}), n = A(t, { register(e, t) {
48
69
  return {
49
70
  ...e,
50
71
  [t.id]: t
51
72
  };
52
- } });
53
- function r(r) {
54
- let i = t.getState()[r.id];
55
- if (i) {
56
- i.merge({
57
- experience: r,
58
- strategy: "override"
59
- });
60
- return;
61
- }
62
- let a = ce({
73
+ } }), r = N(), i = M((t) => {
74
+ n.register(ae({
63
75
  client: e,
64
- experience: r
76
+ experience: t
77
+ }));
78
+ });
79
+ F({
80
+ clock: r,
81
+ source: t,
82
+ filter: (e, t) => e[t.id] !== void 0,
83
+ fn: (e, t) => ({
84
+ existing: e[t.id],
85
+ experience: t
86
+ })
87
+ }).watch(({ existing: e, experience: t }) => {
88
+ e?.merge({
89
+ experience: t,
90
+ strategy: "override"
65
91
  });
66
- n.register(a);
67
- }
68
- let i = t.map((e) => Object.values(e));
69
- function a(e) {
92
+ }), F({
93
+ clock: r,
94
+ source: t,
95
+ filter: (e, t) => e[t.id] === void 0,
96
+ fn: (e, t) => t,
97
+ target: i
98
+ });
99
+ let a = t.map((e) => Object.values(e));
100
+ function o(e) {
70
101
  return t.map((t) => t[e], { skipVoid: !1 });
71
102
  }
72
- function o(e) {
103
+ function s(e) {
73
104
  return t.map((t) => Object.values(t).find((t) => t.key === e) ?? t[e], { skipVoid: !1 });
74
105
  }
75
- let s = w({
106
+ let c = O({
76
107
  source: t,
77
108
  effect: async (t, n) => {
78
109
  let r = "key" in n ? Object.values(t).find((e) => e.key === n.key) : t[n.id];
@@ -82,27 +113,30 @@ var le = M(({ client: e }) => {
82
113
  }
83
114
  let { options: i } = n;
84
115
  if (i?.bypassCondition) {
85
- F(e, r, i);
116
+ await R(e, r), await r.initialiseFx(i);
86
117
  return;
87
118
  }
88
- await L(e, r) && F(e, r, i);
119
+ await r.shouldInitialiseFx() && (await R(e, r), await r.initialiseFx(i));
89
120
  }
90
121
  });
91
122
  return {
92
123
  register: r,
93
- get: a,
94
- getById: a,
95
- getByKey: o,
96
- launch: s,
97
- open: w({
124
+ get: o,
125
+ getById: o,
126
+ getByKey: s,
127
+ launch: c,
128
+ open: O({
98
129
  source: {
99
130
  experiences: t,
100
131
  instances: e.experienceInstances.listStore
101
132
  },
102
- effect: ({ experiences: e, instances: t }, n) => {
133
+ effect: async ({ experiences: e, instances: t }, n) => {
103
134
  let r = "key" in n ? Object.values(e).find((e) => e.key === n.key) : e[n.id], i = t.filter((e) => r && e.experienceId === r.id);
104
- if (i.length > 0) for (let e of i) e.open();
105
- else s("key" in n ? {
135
+ if (i.length > 0) {
136
+ for (let e of i) e.open();
137
+ return;
138
+ }
139
+ await c("key" in n ? {
106
140
  key: n.key,
107
141
  options: {
108
142
  ...n.options,
@@ -117,26 +151,42 @@ var le = M(({ client: e }) => {
117
151
  });
118
152
  }
119
153
  }),
120
- listStore: i
154
+ listStore: a,
155
+ initialiseExperiencesFx: O({
156
+ source: a,
157
+ effect: async (t) => {
158
+ await Promise.all(t.map(async (t) => {
159
+ await t.shouldInitialiseFx() && (await R(e, t), await t.initialiseFx(void 0));
160
+ }));
161
+ }
162
+ })
121
163
  };
122
164
  });
123
- function ue(e) {
124
- return N(le, e);
165
+ function se(e) {
166
+ return L(oe, e);
125
167
  }
126
- var F = (e, t, n) => {
127
- let { targetSelectors: r } = t.configStore.getState(), i = y(r, t.id);
128
- i.forEach(({ elements: e }) => e.forEach((e) => ee(e, t.id))), g(i, t.id, t.key).forEach((r) => {
129
- n ? e.experienceInstances.spawn(t, r, n) : e.experienceInstances.spawn(t, r);
168
+ var ce = async (e) => {
169
+ await e.experiences.initialiseExperiencesFx();
170
+ }, R = async (e, t) => {
171
+ if (!e.contentLoader) return !0;
172
+ try {
173
+ await e.contentLoader({
174
+ id: t.id,
175
+ key: t.key
176
+ });
177
+ } catch {
178
+ `${t.id}`;
179
+ }
180
+ return !0;
181
+ };
182
+ //#endregion
183
+ //#region src/entities/plugin/plugin.ts
184
+ function le(e) {
185
+ return M(async () => {
186
+ await e();
130
187
  });
131
- }, I = async (e) => {
132
- await Promise.all(e.experiences.listStore.getState().map(async (t) => {
133
- await L(e, t) && F(e, t);
134
- }));
135
- }, L = async (n, r) => {
136
- if (!n.preconditionPassed || !n.session?.isUser) return !1;
137
- let { decisionLogic: i, targetSelectors: a } = r.configStore.getState();
138
- return y(a, r.id).length < 1 || a.length === 0 ? !1 : i === void 0 ? !0 : e(i) ? await t(n, i) === !0 : !0;
139
- }, de = (e, t, n) => {
188
+ }
189
+ var ue = (e, t, n) => {
140
190
  let r = t.name, i = t.setup(e);
141
191
  if (i) {
142
192
  let e = n[r] ?? {};
@@ -145,106 +195,508 @@ var F = (e, t, n) => {
145
195
  ...i
146
196
  });
147
197
  }
148
- }, fe = D("component"), R = M(({ client: e, component: t, name: n }) => ({
198
+ }, de = j("component"), fe = I(({ client: e, component: t, name: n }) => ({
149
199
  name: n,
150
200
  component: t,
151
201
  frameworkStore: e.frameworks.getByName(t.frameworkName)
152
202
  }));
153
- function z(e) {
154
- return N(R, e);
203
+ function pe(e) {
204
+ return L(fe, e);
155
205
  }
156
- var B = M(({ client: e }) => {
157
- let t = fe.store({}), n = E(t, { register(e, t) {
206
+ var me = I(({ client: e }) => {
207
+ let t = de.store({}), n = A(t, { register(e, t) {
158
208
  return {
159
209
  ...e,
160
210
  [t.name]: t
161
211
  };
162
- } });
163
- function r(r, i) {
164
- t.getState()[r] && `${r}`;
165
- let a = z({
212
+ } }), i = N();
213
+ F({
214
+ clock: i,
215
+ source: t,
216
+ filter: (e, { name: t }) => e[t] !== void 0,
217
+ fn: (e, { name: t }) => `Component '${t}' already registered. Registering again will override the previous registration.`
218
+ }).watch((e) => /* @__PURE__ */ r("warn", e)), F({
219
+ clock: i,
220
+ fn: ({ name: t, component: n }) => pe({
166
221
  client: e,
167
- name: r,
168
- component: i
169
- });
170
- n.register(a);
171
- }
172
- let i = t.map((e) => Object.values(e));
173
- function a(e) {
222
+ name: t,
223
+ component: n
224
+ }),
225
+ target: n.register
226
+ });
227
+ let a = t.map((e) => Object.values(e));
228
+ function o(e) {
174
229
  return t.map((t) => t[e], { skipVoid: !1 });
175
230
  }
176
231
  return {
177
- register: r,
178
- getByName: a,
179
- listStore: i
232
+ register: i,
233
+ getByName: o,
234
+ listStore: a
180
235
  };
181
236
  });
182
- function V(e) {
183
- return N(B, e);
237
+ function he(e) {
238
+ return L(me, e);
184
239
  }
185
- var H = (e, t, n) => {
186
- n.register(e, t);
187
- }, pe = D("framework"), me = M(({ client: e }) => {
188
- let t = pe.store({}), n = E(t, { register(e, t) {
240
+ var ge = (e, t, n) => {
241
+ n.register({
242
+ name: e,
243
+ component: t
244
+ });
245
+ }, _e = j("framework"), ve = I((e) => {
246
+ let t = _e.store({}), n = A(t, { register(e, t) {
189
247
  return {
190
248
  ...e,
191
249
  [t.name]: t.framework
192
250
  };
193
- } });
194
- function r(e, r) {
195
- t.getState()[e] && `${e}`, n.register({
196
- name: e,
197
- framework: r
198
- });
199
- }
200
- let i = t.map((e) => Object.values(e));
201
- function a(e) {
251
+ } }), i = N();
252
+ F({
253
+ clock: i,
254
+ source: t,
255
+ filter: (e, { name: t }) => e[t] !== void 0,
256
+ fn: (e, { name: t }) => `Framework '${t}' already registered. Registering again will override the previous registration.`
257
+ }).watch((e) => /* @__PURE__ */ r("warn", e)), F({
258
+ clock: i,
259
+ target: n.register
260
+ });
261
+ let a = t.map((e) => Object.values(e));
262
+ function o(e) {
202
263
  return t.map((t) => t[e], { skipVoid: !1 });
203
264
  }
204
265
  return {
205
- register: r,
206
- getByName: a,
207
- listStore: i
266
+ register: i,
267
+ getByName: o,
268
+ listStore: a
208
269
  };
209
270
  });
210
- function he(e) {
211
- return N(me, e);
271
+ function ye(e) {
272
+ return L(ve, e);
273
+ }
274
+ var be = (e, t) => {
275
+ t.register({
276
+ name: e.name,
277
+ framework: e
278
+ });
279
+ }, xe = I(({ client: e }) => {
280
+ let t = typeof window < "u", n = {
281
+ location: t ? window.location : void 0,
282
+ document: t ? window.document : void 0,
283
+ sessionStorage: t ? window.sessionStorage : void 0,
284
+ localStorage: t ? window.localStorage : void 0
285
+ };
286
+ return k(e.responses.listStore, e.fields.listStore, (t, r) => Object.freeze({
287
+ client: e,
288
+ responses: t,
289
+ fields: r,
290
+ ...n
291
+ }));
292
+ });
293
+ function Se(e) {
294
+ return L(xe, e);
295
+ }
296
+ //#endregion
297
+ //#region src/logic-engine.ts
298
+ function Ce(e) {
299
+ return typeof e == "number" && !isNaN(e);
300
+ }
301
+ function z(e) {
302
+ return typeof e == "string";
303
+ }
304
+ function B(e) {
305
+ return Array.isArray(e);
306
+ }
307
+ function V(e) {
308
+ return e instanceof Promise;
309
+ }
310
+ function H(e) {
311
+ return typeof e == "object" && !!e && !Array.isArray(e) && Object.keys(e).length === 1;
312
+ }
313
+ function U(e) {
314
+ if (Ce(e)) return e;
315
+ let t = parseFloat(`${e}`);
316
+ return isNaN(t) ? 0 : t;
317
+ }
318
+ function W(e) {
319
+ return `${e}`;
320
+ }
321
+ var we = {
322
+ "==": (e, t) => e == t,
323
+ "===": (e, t) => e === t,
324
+ "!=": (e, t) => e != t,
325
+ "!==": (e, t) => e !== t,
326
+ ">": (e, t) => U(e) > U(t),
327
+ ">=": (e, t) => U(e) >= U(t),
328
+ "<": (e, t, n) => {
329
+ let r = U(e), i = U(t);
330
+ if (n === void 0) return r < i;
331
+ let a = U(n);
332
+ return r < i && i < a;
333
+ },
334
+ "<=": (e, t, n) => {
335
+ let r = U(e), i = U(t);
336
+ if (n === void 0) return r <= i;
337
+ let a = U(n);
338
+ return r <= i && i <= a;
339
+ },
340
+ "!!": async (e) => await K(e),
341
+ "!": async (e) => !await K(e),
342
+ "%": (e, t) => U(e) % U(t),
343
+ log: (e) => (console.log(e), e),
344
+ in: (e, t) => t ? z(t) ? t.indexOf(W(e)) !== -1 : B(t) ? t.includes(e) : !1 : !1,
345
+ cat: (...e) => e.map(W).join(""),
346
+ substr: (e, t, n) => {
347
+ let r = W(e), i = U(t);
348
+ if (n === void 0) return r.substr(i);
349
+ let a = U(n);
350
+ if (a < 0) {
351
+ let e = r.substr(i);
352
+ return e.substr(0, e.length + a);
353
+ }
354
+ return r.substr(i, a);
355
+ },
356
+ "+": (...e) => e.reduce((e, t) => U(e) + U(t), 0),
357
+ "*": (...e) => e.reduce((e, t) => U(e) * U(t), 1),
358
+ "-": (e, t) => {
359
+ let n = U(e);
360
+ return t === void 0 ? -n : n - U(t);
361
+ },
362
+ "/": (e, t) => U(e) / U(t),
363
+ min: (...e) => Math.min(...e.map(U)),
364
+ max: (...e) => Math.max(...e.map(U)),
365
+ merge: (...e) => e.reduce((e, t) => B(t) ? e.concat(t) : e.concat([t]), []),
366
+ var(e, t) {
367
+ let n = arguments.length > 1 ? t : null;
368
+ if (e === "" || e === "." || e == null) return this;
369
+ if (typeof e == "number" && Array.isArray(this)) return e >= 0 && e < this.length ? this[e] : n;
370
+ let r = W(e);
371
+ if (r === "" || r === ".") return this;
372
+ let i = r.split("."), a = this;
373
+ for (let e of i) {
374
+ if (a == null) return n;
375
+ if (Array.isArray(a)) {
376
+ let t = parseInt(e, 10);
377
+ a = isNaN(t) ? a[e] : a[t];
378
+ } else a = a[e];
379
+ }
380
+ return a === void 0 ? n : a;
381
+ },
382
+ async missing(...e) {
383
+ let t = B(e[0]) ? e[0] : e, n = [];
384
+ for (let e of t) {
385
+ let t = await G({ var: e }, this);
386
+ (t === null || t === "") && n.push(`${e}`);
387
+ }
388
+ return n;
389
+ },
390
+ async missing_some(e, t) {
391
+ let n = await G({ missing: t }, this);
392
+ if (!B(n) || !B(t)) return [];
393
+ let r = n.filter(z);
394
+ return t.filter(z).length - r.length >= U(e) ? [] : r;
395
+ },
396
+ invoke(...e) {
397
+ let [t, ...n] = e;
398
+ return typeof t == "function" ? Reflect.apply(t, null, n) : null;
399
+ },
400
+ startsWith: (e, t) => z(e) && z(t) && e.startsWith(t),
401
+ endsWith: (e, t) => z(e) && z(t) && e.endsWith(t),
402
+ regexp_matches(e, t) {
403
+ let n = e, r = "";
404
+ if (B(e)) {
405
+ let [t, i] = e;
406
+ n = t, r = i;
407
+ }
408
+ return !z(n) || !z(r) ? !1 : new RegExp(n, r).test(W(t));
409
+ },
410
+ throw(e) {
411
+ throw Error(W(e));
412
+ }
413
+ };
414
+ async function G(e, t) {
415
+ if (!e) return e;
416
+ if (V(e)) return G(await e, t);
417
+ if (B(e)) return Promise.all(e.map((e) => G(e, t)));
418
+ if (!H(e)) return e;
419
+ let n = Te(e), r = n ? e[n] ?? [] : [];
420
+ switch (B(r) || (r = [r]), n) {
421
+ case "if":
422
+ case "?:":
423
+ for (let e = 0; e < r.length - 1; e += 2) if (await K(await G(r[e], t))) return G(r[e + 1], t);
424
+ return r.length % 2 == 1 ? G(r[r.length - 1], t) : null;
425
+ case "and": {
426
+ let e = null;
427
+ for (let n of r) if (e = await G(n, t), !await K(e)) return e;
428
+ return e;
429
+ }
430
+ case "or": {
431
+ let e = null;
432
+ for (let n of r) if (e = await G(n, t), await K(e)) return e;
433
+ return e;
434
+ }
435
+ case "map": {
436
+ let e = await G(r[0], t);
437
+ return B(e) ? await Promise.all(e.map((e) => G(r[1], e))) : [];
438
+ }
439
+ case "filter": {
440
+ let e = await G(r[0], t);
441
+ return B(e) ? (await Promise.all(e.map(async (e) => ({
442
+ item: e,
443
+ shouldInclude: await K(await G(r[1], e))
444
+ })))).filter(({ shouldInclude: e }) => e).map(({ item: e }) => e) : [];
445
+ }
446
+ case "reduce": {
447
+ let e = await G(r[0], t);
448
+ if (!B(e)) return r.length > 2 ? await G(r[2], t) : null;
449
+ let n = r[1], i = r.length > 2 ? await G(r[2], t) : null;
450
+ for (let t of e) i = await G(n, {
451
+ current: t,
452
+ accumulator: i
453
+ });
454
+ return i;
455
+ }
456
+ case "all": {
457
+ let e = await G(r[0], t);
458
+ if (!B(e) || e.length === 0) return !1;
459
+ for (let t of e) if (!await K(await G(r[1], t))) return !1;
460
+ return !0;
461
+ }
462
+ case "some": {
463
+ let e = await G(r[0], t);
464
+ if (!B(e)) return !1;
465
+ for (let t of e) if (await K(await G(r[1], t))) return !0;
466
+ return !1;
467
+ }
468
+ case "none": {
469
+ let e = await G(r[0], t);
470
+ if (!B(e)) return !0;
471
+ for (let t of e) if (await K(await G(r[1], t))) return !1;
472
+ return !0;
473
+ }
474
+ case "catch": try {
475
+ return await G(r[0], t);
476
+ } catch (e) {
477
+ return H(e) ? await G(e, t) : r[1] ? await G(r[1], e) : e instanceof Error ? e.message : e;
478
+ }
479
+ }
480
+ let i = await Promise.all(r.map((e) => G(e, t))), a = n ? we[n] : void 0;
481
+ if (!a) throw Error(`Unrecognized operation ${n}`);
482
+ return a.apply(t, i);
212
483
  }
213
- var ge = (e, t) => {
214
- t.register(e.name, e);
215
- }, _e = 6e3, ve = S("last_ping", "global"), ye = async (e) => {
484
+ async function K(e) {
485
+ return V(e) ? K(await e) : !(Array.isArray(e) && e.length === 0) && !!e;
486
+ }
487
+ function Te(e) {
488
+ return Object.keys(e)[0];
489
+ }
490
+ //#endregion
491
+ //#region src/lifecycle/rules-logic.ts
492
+ var Ee = I(({ client: e }) => O({
493
+ source: {
494
+ stateSnapshot: e.stateSnapshotStore,
495
+ predicates: e.predicates.listStore,
496
+ actions: e.actions.listStore,
497
+ features: e.features.listStore,
498
+ responses: e.responses.getAllStore
499
+ },
500
+ effect: async ({ stateSnapshot: e, predicates: t, actions: n, features: r, responses: i }, { rule: a, context: o }) => {
501
+ let s = t.reduce((t, n) => (t[n.name] = async (...t) => await n.predicate({
502
+ ...e,
503
+ args: t
504
+ }), t), {}), c = n.reduce((t, n) => (t[n.key] = async (...t) => await n.action({
505
+ ...e,
506
+ args: t
507
+ }, null) ?? void 0, t), {}), l = r.reduce((e, t) => (e[t.id] = async () => {
508
+ let { bucket: e } = await t.getBucket();
509
+ return e;
510
+ }, e), {});
511
+ return await G(a, {
512
+ responses: i,
513
+ location: typeof e.location == "object" ? {
514
+ hash: e.location.hash,
515
+ host: e.location.host,
516
+ hostname: e.location.hostname,
517
+ href: e.location.href,
518
+ origin: e.location.origin,
519
+ pathname: e.location.pathname,
520
+ port: e.location.port,
521
+ protocol: e.location.protocol,
522
+ search: e.location.search
523
+ } : void 0,
524
+ predicates: s,
525
+ actions: c,
526
+ features: l,
527
+ ...o
528
+ });
529
+ }
530
+ }));
531
+ function De(e) {
532
+ return L(Ee, e);
533
+ }
534
+ //#endregion
535
+ //#region src/ping.ts
536
+ var Oe = 6e3, ke = E("last_ping", "global"), Ae = async (e) => {
216
537
  try {
217
- let t = Date.now(), n = b.get(ve), r = 0;
218
- if (n.isSet() && (r = n.json() ?? 0), r && t - r < _e) return !0;
538
+ let t = Date.now(), n = w.get(ke), r = 0;
539
+ if (n.isSet() && (r = n.json() ?? 0), r && t - r < Oe) return !0;
219
540
  let i = {
220
541
  projectId: e.projectId,
221
542
  path: window.location.pathname
222
543
  }, a = {}, o = document.getElementById("picked_script")?.dataset.verceltoken;
223
544
  o && (a["x-vercel-protection-bypass"] = o);
224
- let s = (await ae(e.apiUrl, "ping", i, a)).ok;
545
+ let s = (await D(e.apiUrl, "ping", i, a)).ok;
225
546
  return s && n.set(t), s;
226
547
  } catch {
227
548
  return !1;
228
549
  }
229
- };
230
- //#endregion
231
- //#region src/utils/state-snaphot.ts
232
- function U(e) {
233
- let t = typeof window < "u", n = {
234
- client: e,
235
- responses: e.responses.listStore.getState(),
236
- fields: e.fields.listStore.getState(),
237
- location: t ? window.location : void 0,
238
- document: t ? window.document : void 0,
239
- sessionStorage: t ? window.sessionStorage : void 0,
240
- localStorage: t ? window.localStorage : void 0
550
+ }, q = j("lifecycle"), je = I(({ client: e }) => {
551
+ let t = q.store(!1), r = P(void 0, {
552
+ skipVoid: !1,
553
+ domain: q
554
+ }), i = P(void 0, {
555
+ skipVoid: !1,
556
+ domain: q
557
+ }), a = q.store("idle"), o = q.store([]), s = P(void 0, {
558
+ skipVoid: !1,
559
+ domain: q
560
+ }), c = P(void 0, {
561
+ skipVoid: !1,
562
+ domain: q
563
+ }), l = N(), u = N(), d = N(), p = N(), m = N(), h = N();
564
+ o.on(p, (e, t) => [...e, t]), s.on(m, (e, t) => t), c.on(h, (e, t) => t), t.on(u, () => !0);
565
+ let g = M(() => {
566
+ Ae(e);
567
+ }), _ = M(async () => {
568
+ await ee();
569
+ }), v = M(async () => {
570
+ await ce(e);
571
+ }), y = O({ effect: v }), b = O({
572
+ source: o,
573
+ effect: async (e) => {
574
+ for (let t of e) await t();
575
+ }
576
+ }), x = O({
577
+ source: s,
578
+ effect: async (t) => t === void 0 ? !0 : typeof t == "boolean" ? t : await n(e, t) === !0
579
+ }), S = O({
580
+ source: c,
581
+ effect: async (t) => t === void 0 ? !0 : typeof t == "boolean" ? t : await n(e, t) === !0
582
+ }), C = F({
583
+ clock: l,
584
+ filter: () => f()
585
+ });
586
+ F({
587
+ clock: C,
588
+ fn: () => "starting",
589
+ target: a
590
+ }), F({
591
+ clock: C,
592
+ target: g
593
+ }), F({
594
+ clock: C,
595
+ target: b
596
+ }), F({
597
+ clock: C,
598
+ target: _
599
+ }), F({
600
+ clock: b.done,
601
+ target: x
602
+ }), F({
603
+ clock: x.doneData,
604
+ target: r
605
+ }), F({
606
+ clock: S.doneData,
607
+ target: i
608
+ }), F({
609
+ clock: x.doneData,
610
+ filter: (e) => e,
611
+ target: S
612
+ }), F({
613
+ clock: S.doneData,
614
+ target: e.session.setIsUser
615
+ }), F({
616
+ clock: S.doneData,
617
+ fn: (e) => ({
618
+ type: "user_decide",
619
+ value: e
620
+ }),
621
+ target: e.eventBus
622
+ }), F({
623
+ clock: x.doneData,
624
+ filter: (e) => !e,
625
+ fn: () => void 0,
626
+ target: d
627
+ }), F({
628
+ clock: S.doneData,
629
+ fn: () => void 0,
630
+ target: d
631
+ }), F({
632
+ clock: d,
633
+ fn: () => ({ type: "initialize" }),
634
+ target: e.eventBus
635
+ });
636
+ let w = P(!1).on(_.done, () => !0), T = P(!1).on(d, () => !0), E = P(!1).on(y.done, () => !0), D = k(r, i, (e, t) => e === !0 && t === !0);
637
+ return F({
638
+ clock: d,
639
+ source: D,
640
+ filter: (e) => e,
641
+ fn: () => void 0,
642
+ target: v
643
+ }), F({
644
+ clock: k(w, T, D, (e, t, n) => e && t && n),
645
+ filter: (e) => e,
646
+ fn: () => void 0,
647
+ target: y
648
+ }), F({
649
+ clock: k(w, T, D, E, (e, t, n, r) => e && t && (!n || r)),
650
+ filter: (e) => e,
651
+ fn: () => void 0,
652
+ target: u
653
+ }), F({
654
+ clock: u,
655
+ fn: () => "ready",
656
+ target: a
657
+ }), F({
658
+ clock: u,
659
+ fn: () => ({ type: "ready" }),
660
+ target: e.eventBus
661
+ }), F({
662
+ clock: u,
663
+ source: e.session.store,
664
+ fn: ({ id: e, isUser: t, identifiers: n }) => ({
665
+ type: "session",
666
+ id: e,
667
+ isUser: t,
668
+ identifiers: n
669
+ }),
670
+ target: e.eventBus
671
+ }), F({
672
+ clock: [
673
+ b.fail,
674
+ x.fail,
675
+ S.fail,
676
+ v.fail,
677
+ y.fail,
678
+ _.fail
679
+ ],
680
+ fn: () => "failed",
681
+ target: a
682
+ }), {
683
+ start: l,
684
+ readyStore: t,
685
+ preconditionPassedStore: r,
686
+ conditionPassedStore: i,
687
+ lifecycleStageStore: a,
688
+ registerPluginStartHook: p,
689
+ setPrecondition: m,
690
+ setCondition: h
241
691
  };
242
- return Object.freeze(n);
692
+ });
693
+ function Me(e) {
694
+ return L(je, e);
243
695
  }
244
696
  //#endregion
245
697
  //#region src/entities/predicate/predicate.ts
246
- var be = D("predicate"), xe = M(({ client: e }) => {
247
- let t = be.store({}), n = E(t, { register(e, t) {
698
+ var Ne = j("predicate"), Pe = I(({ client: e }) => {
699
+ let t = Ne.store({}), n = A(t, { register(e, t) {
248
700
  return {
249
701
  ...e,
250
702
  [t.name]: {
@@ -252,85 +704,103 @@ var be = D("predicate"), xe = M(({ client: e }) => {
252
704
  predicate: t.predicate
253
705
  }
254
706
  };
255
- } });
256
- function r(e, r) {
257
- t.getState()[e] && `${e}`, n.register(Object.freeze({
707
+ } }), i = N();
708
+ F({
709
+ clock: i,
710
+ source: t,
711
+ filter: (e, { name: t }) => e[t] !== void 0,
712
+ fn: (e, { name: t }) => `Predicate '${t}' already registered. Registering again will override the previous registration.`
713
+ }).watch((e) => /* @__PURE__ */ r("warn", e)), F({
714
+ clock: i,
715
+ fn: ({ name: e, predicate: t }) => Object.freeze({
258
716
  name: e,
259
- predicate: r
260
- }));
261
- }
262
- let i = t.map((e) => Object.values(e));
263
- function a(e) {
717
+ predicate: t
718
+ }),
719
+ target: n.register
720
+ });
721
+ let a = t.map((e) => Object.values(e));
722
+ function o(e) {
264
723
  return t.map((t) => t[e]?.predicate, { skipVoid: !1 });
265
724
  }
266
- function o(t) {
267
- let n = A(() => void 0, { skipVoid: !1 }), r = O(async () => {
268
- let n = a(t).getState();
269
- if (!n) return;
270
- let r = U(e);
271
- return (...e) => n({
272
- ...r,
273
- args: e
274
- });
725
+ function s(t) {
726
+ let n = P(() => void 0, { skipVoid: !1 }), r = O({
727
+ source: {
728
+ predicate: o(t),
729
+ snapshot: e.stateSnapshotStore
730
+ },
731
+ effect: ({ predicate: e, snapshot: t }) => {
732
+ if (e) return (...n) => e({
733
+ ...t,
734
+ args: n
735
+ });
736
+ }
275
737
  });
276
- return j({
738
+ return F({
277
739
  source: {
278
740
  responses: e.responses.listStore,
279
741
  fields: e.fields.listStore
280
742
  },
281
743
  target: r
282
- }), j({
744
+ }), F({
283
745
  clock: r.doneData,
284
746
  filter: (e) => e !== void 0,
285
747
  target: n
286
748
  }), r(), n;
287
749
  }
288
750
  return {
289
- register: r,
290
- getByName: a,
291
- listStore: i,
292
- getEvokablePredicate: o
751
+ register: i,
752
+ getByName: o,
753
+ listStore: a,
754
+ getEvokablePredicate: s
293
755
  };
294
756
  });
295
- function Se(e) {
296
- return N(xe, e);
757
+ function Fe(e) {
758
+ return L(Pe, e);
297
759
  }
298
- var Ce = (e, t, n) => {
299
- n.register(e, t);
300
- }, W = D("feature"), we = M(({ client: e }) => {
301
- let t = W.store({}), n = W.store([]), r = E(t, { register(e, t) {
760
+ var Ie = (e, t, n) => {
761
+ n.register({
762
+ name: e,
763
+ predicate: t
764
+ });
765
+ }, Le = j("feature"), Re = I(({ client: e }) => {
766
+ let t = Le.store({}), n = Le.store([]), i = A(t, { register(e, t) {
302
767
  return {
303
768
  ...e,
304
769
  [t.id]: t.feature
305
770
  };
306
- } });
307
- function i(e, n) {
308
- t.getState()[e] && `${e}`;
309
- let i = {
771
+ } }), a = N();
772
+ F({
773
+ clock: a,
774
+ source: t,
775
+ filter: (e, { id: t }) => e[t] !== void 0,
776
+ fn: (e, { id: t }) => `Feature '${t}' already registered. Registering again will override the previous registration.`
777
+ }).watch((e) => /* @__PURE__ */ r("warn", e)), F({
778
+ clock: a,
779
+ fn: ({ id: e, feature: t }) => Object.freeze({
310
780
  id: e,
311
781
  feature: {
312
- ...n,
313
- id: e
782
+ id: e,
783
+ feature: {
784
+ ...t,
785
+ id: e
786
+ }
314
787
  }
315
- };
316
- r.register(Object.freeze({
317
- id: e,
318
- feature: i
319
- }));
320
- }
321
- let a = O(async ({ id: e, key: t, storage: n = "local" }) => {
322
- let r = S(`feature:${e}:${t}`, "global"), i = (n === "session" ? x : b).get(r).boolean();
788
+ }),
789
+ target: i.register
790
+ });
791
+ let o = M(async ({ id: e, key: t, storage: n = "local" }) => {
792
+ let r = E(`feature:${e}:${t}`, "global"), i = (n === "session" ? T : w).get(r).boolean();
323
793
  return i === null ? null : {
324
794
  id: e,
325
795
  key: t,
326
796
  bucket: i,
327
797
  storage: n
328
798
  };
329
- }), o = O((e) => {
799
+ }), s = M((e) => {
330
800
  if (!e) return null;
331
- let t = S(`feature:${e.id}:${e.key}`, "global");
332
- (e.storage === "session" ? x : b).set(t, e.bucket);
333
- }), s = /* @__PURE__ */ new Map(), c = w({
801
+ let t = E(`feature:${e.id}:${e.key}`, "global");
802
+ (e.storage === "session" ? T : w).set(t, e.bucket);
803
+ }), c = /* @__PURE__ */ new Map(), l = O({
334
804
  source: {
335
805
  allFeaturesStore: t,
336
806
  resolvedFeaturesStore: n
@@ -340,9 +810,9 @@ var Ce = (e, t, n) => {
340
810
  if (a) return a;
341
811
  let o = e[n];
342
812
  if (!o) throw Error(`Feature with id '${n}' not found`);
343
- let c = s.get(`${n}:${i}`);
344
- if (c !== void 0) {
345
- let e = await c;
813
+ let s = c.get(`${n}:${i}`);
814
+ if (s !== void 0) {
815
+ let e = await s;
346
816
  return {
347
817
  id: o.id,
348
818
  bucket: e,
@@ -351,7 +821,7 @@ var Ce = (e, t, n) => {
351
821
  };
352
822
  }
353
823
  let l = r();
354
- s.set(`${n}:${i}`, l);
824
+ c.set(`${n}:${i}`, l);
355
825
  let u = await l;
356
826
  return {
357
827
  id: o.id,
@@ -361,8 +831,8 @@ var Ce = (e, t, n) => {
361
831
  };
362
832
  }
363
833
  });
364
- j({
365
- clock: r.register,
834
+ F({
835
+ clock: i.register,
366
836
  fn: (e) => {
367
837
  let { id: t, feature: n } = e;
368
838
  return {
@@ -371,10 +841,10 @@ var Ce = (e, t, n) => {
371
841
  storage: n.feature.storage
372
842
  };
373
843
  },
374
- target: a
375
- }), j({
844
+ target: o
845
+ }), F({
376
846
  source: t,
377
- clock: c.doneData,
847
+ clock: l.doneData,
378
848
  fn: (e, t) => {
379
849
  let { id: n, bucket: r, storage: i } = t, a = e[n]?.feature.key;
380
850
  return a ? {
@@ -384,9 +854,9 @@ var Ce = (e, t, n) => {
384
854
  storage: i
385
855
  } : null;
386
856
  },
387
- target: o
857
+ target: s
388
858
  });
389
- let l = T({
859
+ let u = k({
390
860
  allFeaturesStore: t,
391
861
  resolvedFeaturesStore: n
392
862
  }).map(({ allFeaturesStore: e, resolvedFeaturesStore: t }) => Object.values(e).map((e) => {
@@ -404,12 +874,12 @@ var Ce = (e, t, n) => {
404
874
  id: e.id,
405
875
  name: e.feature.name,
406
876
  key: e.feature.key,
407
- getBucket: async () => await c(e.feature),
877
+ getBucket: async () => await l(e.feature),
408
878
  isResolved: !1
409
879
  };
410
880
  }));
411
- j({
412
- clock: c.doneData,
881
+ F({
882
+ clock: l.doneData,
413
883
  source: { resolvedFeatures: n },
414
884
  filter: ({ resolvedFeatures: e }, { id: t, key: n }) => !e.some((e) => e.id === t && e.key === n),
415
885
  fn: (e, t) => t,
@@ -417,135 +887,106 @@ var Ce = (e, t, n) => {
417
887
  type: "feature_decide",
418
888
  feature: e
419
889
  }))
420
- }), j({
421
- clock: [a.doneData, c.doneData],
890
+ }), F({
891
+ clock: [o.doneData, l.doneData],
422
892
  source: n,
423
893
  fn: (e, t) => !t || e.some((e) => e.id === t.id && e.key === t.key) ? e : [...e, t],
424
894
  target: n
425
895
  });
426
- function u(e) {
427
- return l.map((t) => t.find((t) => t.id === e));
428
- }
429
896
  function d(e) {
430
- return t.map((t) => t[e], { skipVoid: !1 });
897
+ return u.map((t) => t.find((t) => t.id === e));
431
898
  }
432
899
  function f(e) {
433
- let t = A(async () => void 0, { skipVoid: !1 }), r = O(async () => {
434
- let t = u(e).getState();
435
- if (t) return async () => (await t.getBucket()).bucket;
900
+ return t.map((t) => t[e], { skipVoid: !1 });
901
+ }
902
+ function p(e) {
903
+ let t = P(async () => void 0, { skipVoid: !1 }), r = O({
904
+ source: d(e),
905
+ effect: async (e) => {
906
+ if (e) return async () => (await e.getBucket()).bucket;
907
+ }
436
908
  });
437
- return j({
909
+ return F({
438
910
  source: n,
439
911
  filter: (t) => t.some((t) => t.id === e),
440
912
  target: r
441
- }), j({
913
+ }), F({
442
914
  clock: r.doneData,
443
915
  filter: (e) => e !== void 0,
444
916
  target: t
445
917
  }), r(), t;
446
918
  }
447
919
  return {
448
- register: i,
449
- getById: u,
450
- getByName: d,
451
- listStore: l,
452
- getEvokableFeature: f
920
+ register: a,
921
+ getById: d,
922
+ getByName: f,
923
+ listStore: u,
924
+ getEvokableFeature: p
453
925
  };
454
926
  });
455
- function Te(e) {
456
- return N(we, e);
927
+ function ze(e) {
928
+ return L(Re, e);
457
929
  }
458
- var Ee = (e, t, n) => {
459
- n.register(e, t);
460
- }, G = D("history");
461
- function K(e, t, n) {
930
+ var Be = (e, t, n) => {
931
+ n.register({
932
+ id: e,
933
+ feature: t
934
+ });
935
+ }, J = j("history");
936
+ function Y(e, t) {
462
937
  return {
463
- id: C(`history-entry-${Date.now()}-${Math.random()}}`),
464
- node: n,
938
+ id: ne(`history-entry-${Date.now()}-${Math.random()}}`),
939
+ node: t,
465
940
  at: Date.now(),
466
- instanceId: e,
467
- experienceId: t
941
+ experienceId: e
468
942
  };
469
943
  }
470
- function De(e) {
471
- for (let t = e.length - 1; t >= 0; t--) {
472
- let n = e[t];
473
- if (n && v(n.node)) return e.slice(0, t + 1);
474
- }
475
- return [];
476
- }
477
- var Oe = M(() => {
478
- let e = G.store([]), t = G.event(), n = G.event(), r = G.event(), i = G.event(), a = G.event(), o = G.event();
479
- e.on(t, (e, t) => [...e, K(t.instanceId, t.experienceId, t.node)]), e.on(n, (e, t) => {
480
- let n = -1;
481
- for (let r = e.length - 1; r >= 0; r--) if (e[r]?.instanceId === t.instanceId) {
482
- n = r;
483
- break;
484
- }
485
- let r = K(t.instanceId, t.experienceId, t.node);
486
- return n === -1 ? [...e, r] : e.map((e, t) => t === n ? r : e);
487
- }), e.on(r, (e, { instanceId: t }) => {
488
- let n = 0, r = -1;
489
- for (let i = e.length - 1; i >= 0; i--) {
490
- let a = e[i];
491
- if (!(a?.instanceId !== t || !v(a.node)) && (n += 1, n === 2)) {
492
- r = i;
944
+ var Ve = I(() => {
945
+ let e = J.store({ entries: [] }), t = J.event(), n = J.event(), r = J.event(), i = J.event();
946
+ e.on(t, (e, t) => ({ entries: [...e.entries, Y(t.experienceId, t.node)] })), e.on(n, (e, t) => ({ entries: [...e.entries.slice(0, -1), Y(t.experienceId, t.node)] })), e.on(i, (e, t) => t);
947
+ function a(e, t) {
948
+ let n = {
949
+ lastStepIndex: -1,
950
+ secondLastStepIndex: -1
951
+ };
952
+ for (let r = e.length - 1; r >= 0; r--) {
953
+ let i = e[r], a = i?.node;
954
+ if (!(!a || !v(a)) && !(t && i.experienceId !== t)) if (n.lastStepIndex === -1) n.lastStepIndex = r;
955
+ else {
956
+ n.secondLastStepIndex = r;
493
957
  break;
494
958
  }
495
959
  }
496
- return r === -1 ? e : e.filter((e, n) => e.instanceId !== t || n <= r);
497
- }), e.on(i, (e, { snapshots: t }) => {
498
- let n = [];
499
- for (let e of Object.values(t)) n.push(...e);
500
960
  return n;
501
- }), e.on(o, (e, t) => [...e, ...t]);
502
- let s = e.map((e) => {
503
- let t = {};
504
- for (let n of e) {
505
- let e = t[n.experienceId];
506
- e ? e.push(n) : t[n.experienceId] = [n];
507
- }
508
- return t;
509
- });
510
- return j({
511
- clock: a,
512
- source: s,
513
- fn: (e, { instanceId: t, experienceId: n }) => De(e[n] ?? []).map((e) => ({
961
+ }
962
+ return e.on(r, (e, t) => {
963
+ let { secondLastStepIndex: n } = a(e.entries, t.experienceId), r = n === -1 ? e.entries : e.entries.slice(0, n + 1);
964
+ return {
514
965
  ...e,
515
- id: C(`history-entry-${Date.now()}-${Math.random()}}`),
516
- instanceId: t,
517
- at: Date.now()
518
- })),
519
- target: o
966
+ entries: r
967
+ };
520
968
  }), {
521
969
  push: t,
522
970
  replace: n,
523
971
  back: r,
524
- restoreSnapshots: i,
525
- seedInstanceFromSnapshot: a,
526
- entriesStore: e.map((e) => e),
527
- snapshotStore: s
972
+ restore: i,
973
+ entriesStore: e.map((e) => e.entries)
528
974
  };
529
975
  });
530
- function ke() {
531
- return N(Oe);
976
+ function He() {
977
+ return L(Ve);
532
978
  }
533
979
  //#endregion
534
980
  //#region src/utils/events.ts
535
- var Ae = 0, je = (e) => {
536
- let t = A([]);
537
- return j({
538
- clock: e,
539
- source: t,
540
- fn: (e, t) => [...e, {
541
- id: Ae++,
542
- at: /* @__PURE__ */ new Date(),
543
- payload: t
544
- }],
545
- target: t
546
- }), t;
547
- }, Me = D("field"), Ne = M(() => {
548
- let e = Me.store({}), t = E(e, {
981
+ var Ue = 0, We = (e) => {
982
+ let t = P([]);
983
+ return t.on(e, (e, t) => [...e, {
984
+ id: Ue++,
985
+ at: /* @__PURE__ */ new Date(),
986
+ payload: t
987
+ }]), t;
988
+ }, Ge = j("field"), Ke = I(() => {
989
+ let e = Ge.store({}), t = A(e, {
549
990
  register(e, t) {
550
991
  return {
551
992
  ...e,
@@ -563,39 +1004,43 @@ var Ae = 0, je = (e) => {
563
1004
  function n(e) {
564
1005
  t.register({ field: e });
565
1006
  }
566
- function r(n, r) {
567
- let i = e.getState(), a = Object.values(i).find((e) => e.key === n)?.key;
568
- a && t.updateByKey({
569
- fieldKey: a,
570
- updates: r
1007
+ let r = {};
1008
+ e.watch((e) => {
1009
+ r = e;
1010
+ });
1011
+ function i(e, n) {
1012
+ let i = Object.values(r).find((t) => t.key === e)?.key;
1013
+ i && t.updateByKey({
1014
+ fieldKey: i,
1015
+ updates: n
571
1016
  });
572
1017
  }
573
- let i = e.map((e) => Object.values(e));
574
- function a(t) {
1018
+ let a = e.map((e) => Object.values(e));
1019
+ function o(t) {
575
1020
  return e.map((e) => e[t] ?? null, { skipVoid: !1 });
576
1021
  }
577
- function o(t) {
1022
+ function s(t) {
578
1023
  return e.map((e) => Object.values(e).find((e) => e.key === t) ?? null, { skipVoid: !1 });
579
1024
  }
580
- function s(t) {
1025
+ function c(t) {
581
1026
  return e.map((e) => Object.values(e).find((e) => e.name === t) ?? null, { skipVoid: !1 });
582
1027
  }
583
1028
  return {
584
1029
  register: n,
585
- update: r,
586
- getById: a,
587
- getByKey: o,
588
- listStore: i,
589
- getByName: s
1030
+ update: i,
1031
+ getById: o,
1032
+ getByKey: s,
1033
+ listStore: a,
1034
+ getByName: c
590
1035
  };
591
1036
  });
592
- function Pe() {
593
- return N(Ne);
1037
+ function qe() {
1038
+ return L(Ke);
594
1039
  }
595
1040
  //#endregion
596
1041
  //#region src/entities/step/step.ts
597
- var Fe = D("step"), Ie = M(() => {
598
- let e = Fe.store({}), t = E(e, { register(e, t) {
1042
+ var Je = j("step"), Ye = I(() => {
1043
+ let e = Je.store({}), t = A(e, { register(e, t) {
599
1044
  return {
600
1045
  ...e,
601
1046
  [t.step.id]: t.step
@@ -619,16 +1064,45 @@ var Fe = D("step"), Ie = M(() => {
619
1064
  indexStore: e
620
1065
  };
621
1066
  });
622
- function Le() {
623
- return N(Ie);
1067
+ function Xe() {
1068
+ return L(Ye);
624
1069
  }
625
- function Re(e, t) {
1070
+ function Ze(e, t) {
1071
+ t.register(e);
1072
+ }
1073
+ //#endregion
1074
+ //#region src/entities/content/content.ts
1075
+ var Qe = j("content"), $e = I(() => {
1076
+ let e = Qe.store({}), t = A(e, { register(e, t) {
1077
+ return {
1078
+ ...e,
1079
+ [t.content.id]: t.content
1080
+ };
1081
+ } });
1082
+ function n(e) {
1083
+ t.register({ content: e });
1084
+ }
1085
+ let r = e.map((e) => Object.values(e));
1086
+ function i(t) {
1087
+ return e.map((e) => e[t] ?? null, { skipVoid: !1 });
1088
+ }
1089
+ return {
1090
+ register: n,
1091
+ getById: i,
1092
+ listStore: r,
1093
+ indexStore: e
1094
+ };
1095
+ });
1096
+ function et() {
1097
+ return L($e);
1098
+ }
1099
+ function tt(e, t) {
626
1100
  t.register(e);
627
1101
  }
628
1102
  //#endregion
629
1103
  //#region src/entities/action/action.ts
630
- var ze = D("action"), Be = M(({ client: e }) => {
631
- let t = ze.store({}), n = E(t, { register(e, t) {
1104
+ var nt = j("action"), rt = I(({ client: e }) => {
1105
+ let t = nt.store({}), n = A(t, { register(e, t) {
632
1106
  return {
633
1107
  ...e,
634
1108
  [t.key]: {
@@ -636,55 +1110,68 @@ var ze = D("action"), Be = M(({ client: e }) => {
636
1110
  action: t.action
637
1111
  }
638
1112
  };
639
- } });
640
- function r(e, r) {
641
- t.getState()[e] && `${e}`, n.register(Object.freeze({
1113
+ } }), i = N();
1114
+ F({
1115
+ clock: i,
1116
+ source: t,
1117
+ filter: (e, { key: t }) => e[t] !== void 0,
1118
+ fn: (e, { key: t }) => `Action '${t}' already registered. Registering again will override the previous registration.`
1119
+ }).watch((e) => /* @__PURE__ */ r("warn", e)), F({
1120
+ clock: i,
1121
+ fn: ({ key: e, action: t }) => Object.freeze({
642
1122
  key: e,
643
- action: r
644
- }));
645
- }
646
- let i = t.map((e) => Object.values(e));
647
- function a(e) {
1123
+ action: t
1124
+ }),
1125
+ target: n.register
1126
+ });
1127
+ let a = t.map((e) => Object.values(e));
1128
+ function o(e) {
648
1129
  return t.map((t) => t[e]?.action, { skipVoid: !1 });
649
1130
  }
650
- function o(t, n) {
651
- let r = A(() => void 0, { skipVoid: !1 }), i = n ? { experience: n.experience } : null, o = O(async () => {
652
- let n = a(t).getState();
653
- if (!n) return;
654
- let r = U(e);
655
- return (...e) => n({
656
- ...r,
657
- args: e
658
- }, i);
1131
+ function s(t, n) {
1132
+ let r = P(() => void 0, { skipVoid: !1 }), i = n ? { experience: n.experience } : null, a = O({
1133
+ source: {
1134
+ action: o(t),
1135
+ snapshot: e.stateSnapshotStore
1136
+ },
1137
+ effect: ({ action: e, snapshot: t }) => {
1138
+ if (e) return (...n) => e({
1139
+ ...t,
1140
+ args: n
1141
+ }, i);
1142
+ }
659
1143
  });
660
- return j({
1144
+ return F({
661
1145
  source: {
662
1146
  responses: e.responses.listStore,
663
1147
  fields: e.fields.listStore
664
1148
  },
665
- target: o
666
- }), j({
667
- clock: o.doneData,
1149
+ target: a
1150
+ }), F({
1151
+ clock: a.doneData,
668
1152
  filter: (e) => e !== void 0,
669
1153
  target: r
670
- }), o(), r;
1154
+ }), a(), r;
671
1155
  }
672
1156
  return {
673
- register: r,
674
- getByKey: a,
675
- listStore: i,
676
- getEvokableAction: o
1157
+ register: i,
1158
+ getByKey: o,
1159
+ listStore: a,
1160
+ getEvokableAction: s
677
1161
  };
678
1162
  });
679
- function Ve(e) {
680
- return N(Be, e);
1163
+ function it(e) {
1164
+ return L(rt, e);
681
1165
  }
682
- var He = (e, t, n) => {
683
- n.register(e, t);
1166
+ var at = (e, t, n) => {
1167
+ n.register({
1168
+ key: e,
1169
+ action: t
1170
+ });
684
1171
  };
685
1172
  //#endregion
686
1173
  //#region src/entities/response/response-validation.ts
687
- function q(e, t, n, r) {
1174
+ function X(e, t, n, r) {
688
1175
  return {
689
1176
  fieldKey: e.key,
690
1177
  userMessage: n,
@@ -692,62 +1179,62 @@ function q(e, t, n, r) {
692
1179
  value: t
693
1180
  };
694
1181
  }
695
- function J(e) {
1182
+ function Z(e) {
696
1183
  return e === null || e === "" || Array.isArray(e) && !e.length;
697
1184
  }
698
- function Ue(e) {
1185
+ function ot(e) {
699
1186
  return typeof e == "string" || typeof e == "number" || typeof e == "boolean" || e === null;
700
1187
  }
701
- function Y(e) {
1188
+ function Q(e) {
702
1189
  try {
703
1190
  return JSON.stringify(e), !0;
704
1191
  } catch {
705
1192
  return !1;
706
1193
  }
707
1194
  }
708
- function We(e, t) {
1195
+ function st(e, t) {
709
1196
  return t.find((t) => t.key === e) ?? null;
710
1197
  }
711
- function Ge(e, t) {
1198
+ function ct(e, t) {
712
1199
  return e.multiple && (typeof t == "string" || typeof t == "number" || typeof t == "boolean") ? [t] : t;
713
1200
  }
714
- function Ke(e, t) {
715
- if (e.type !== "object" || J(t)) return null;
1201
+ function lt(e, t) {
1202
+ if (e.type !== "object" || Z(t)) return null;
716
1203
  if (e.multiple) {
717
- if (!Array.isArray(t)) return q(e, t, "This field expects multiple values", "Field expects an array of objects.");
1204
+ if (!Array.isArray(t)) return X(e, t, "This field expects multiple values", "Field expects an array of objects.");
718
1205
  for (let n of t) {
719
- if (typeof n != "object" || !n) return q(e, t, "This field expects object values", "Field expects an array of objects, but received non-object value.");
720
- if (!Y(n)) return q(e, t, "This field contains non-serializable data", "Field value contains non-JSON-serializable data (functions, circular references, etc.).");
1206
+ if (typeof n != "object" || !n) return X(e, t, "This field expects object values", "Field expects an array of objects, but received non-object value.");
1207
+ if (!Q(n)) return X(e, t, "This field contains non-serializable data", "Field value contains non-JSON-serializable data (functions, circular references, etc.).");
721
1208
  }
722
1209
  return null;
723
1210
  }
724
- return Array.isArray(t) ? q(e, t, "This field expects a single value", "Field expects a single object, not an array.") : typeof t != "object" || !t ? q(e, t, "This field expects an object value", "Field expects an object value.") : Y(t) ? null : q(e, t, "This field contains non-serializable data", "Field value contains non-JSON-serializable data (functions, circular references, etc.).");
1211
+ return Array.isArray(t) ? X(e, t, "This field expects a single value", "Field expects a single object, not an array.") : typeof t != "object" || !t ? X(e, t, "This field expects an object value", "Field expects an object value.") : Q(t) ? null : X(e, t, "This field contains non-serializable data", "Field value contains non-JSON-serializable data (functions, circular references, etc.).");
725
1212
  }
726
- function qe(e, t) {
727
- if (J(t) || !Array.isArray(e.options) || e.options.length === 0) return null;
1213
+ function ut(e, t) {
1214
+ if (Z(t) || !Array.isArray(e.options) || e.options.length === 0) return null;
728
1215
  let n = Array.isArray(t) ? t : [t];
729
1216
  if (e.type === "object") {
730
1217
  let r = new Set(e.options.map((e) => JSON.stringify(e.value)));
731
- return n.every((e) => r.has(JSON.stringify(e))) ? null : q(e, t, "This field expects a valid option", "Field expects a valid option from the defined choices.");
1218
+ return n.every((e) => r.has(JSON.stringify(e))) ? null : X(e, t, "This field expects a valid option", "Field expects a valid option from the defined choices.");
732
1219
  }
733
1220
  let r = e.options.map((e) => e.value);
734
- return n.every((e) => !Ue(e) || e === null ? !1 : r.includes(e)) ? null : q(e, t, "This field expects a valid option", `Field expects a valid option. Valid options are: ${r.join(", ")}`);
1221
+ return n.every((e) => !ot(e) || e === null ? !1 : r.includes(e)) ? null : X(e, t, "This field expects a valid option", `Field expects a valid option. Valid options are: ${r.join(", ")}`);
735
1222
  }
736
- async function Je(e, t, r, i) {
737
- if (t.validation && !n(t.validation) && !J(r)) {
738
- let n = i ? {
1223
+ async function dt(t, n, r, i) {
1224
+ if (n.validation && !e(n.validation) && !Z(r)) {
1225
+ let e = i ? {
739
1226
  $input: r,
740
1227
  responses: i
741
- } : { $input: r }, a = await e(t.validation, n);
742
- if (typeof a == "string") return q(t, r, a, `Field validation resulted in an error: ${a}.`);
743
- if (a === !1) return q(t, r, "This field is invalid", "Field validation resulted in an unspecified error.");
1228
+ } : { $input: r }, a = await t(n.validation, e);
1229
+ if (typeof a == "string") return X(n, r, a, `Field validation resulted in an error: ${a}.`);
1230
+ if (a === !1) return X(n, r, "This field is invalid", "Field validation resulted in an unspecified error.");
744
1231
  }
745
- return t.required && J(r) ? q(t, r, "This field is required", "Field is required.") : !t.multiple && Array.isArray(r) && r.length > 1 ? q(t, r, "This field expects a single response", "Field expects a single response.") : null;
1232
+ return n.required && Z(r) ? X(n, r, "This field is required", "Field is required.") : !n.multiple && Array.isArray(r) && r.length > 1 ? X(n, r, "This field expects a single response", "Field expects a single response.") : null;
746
1233
  }
747
1234
  //#endregion
748
1235
  //#region src/entities/response/response.ts
749
- var Ye = D("response"), Xe = M(({ client: e }) => {
750
- let n = Ye.store({}), r = k(), i = k(), a = E(n, {
1236
+ var ft = j("response"), pt = I(({ client: e }) => {
1237
+ let t = ft.store({}), r = N(), i = N(), a = A(t, {
751
1238
  register(e, t) {
752
1239
  return {
753
1240
  ...e,
@@ -776,17 +1263,17 @@ var Ye = D("response"), Xe = M(({ client: e }) => {
776
1263
  });
777
1264
  } else a.registerBatch(e);
778
1265
  }
779
- let s = (n, r) => t(e, n, r), c = w({
1266
+ let s = (t, r) => n(e, t, r), c = O({
780
1267
  source: {
781
1268
  allFields: e.fields.listStore,
782
- existingResponses: n
1269
+ existingResponses: t
783
1270
  },
784
1271
  effect: async ({ allFields: e, existingResponses: t }, n) => {
785
1272
  let r = [], i = {}, a = {
786
1273
  ...t,
787
1274
  ...n
788
1275
  }, o = Object.entries(n), c = await Promise.allSettled(o.map(async ([t, n]) => {
789
- let o = We(t, e);
1276
+ let o = st(t, e);
790
1277
  if (!o) {
791
1278
  r.push({
792
1279
  fieldKey: t,
@@ -796,17 +1283,17 @@ var Ye = D("response"), Xe = M(({ client: e }) => {
796
1283
  });
797
1284
  return;
798
1285
  }
799
- let c = Ge(o, n), l = await Je(s, o, c, a);
1286
+ let c = ct(o, n), l = await dt(s, o, c, a);
800
1287
  if (l) {
801
1288
  r.push(l);
802
1289
  return;
803
1290
  }
804
- let u = Ke(o, c);
1291
+ let u = lt(o, c);
805
1292
  if (u) {
806
1293
  r.push(u);
807
1294
  return;
808
1295
  }
809
- let d = qe(o, c);
1296
+ let d = ut(o, c);
810
1297
  if (d) {
811
1298
  r.push(d);
812
1299
  return;
@@ -834,8 +1321,8 @@ var Ye = D("response"), Xe = M(({ client: e }) => {
834
1321
  async function l(e) {
835
1322
  return c(e);
836
1323
  }
837
- let u = w({
838
- source: n,
1324
+ let u = O({
1325
+ source: t,
839
1326
  effect: async (e, t) => {
840
1327
  let { responsesToCommit: n, validationErrors: r } = await c(t);
841
1328
  return r.length ? { errors: r } : (a.registerBatch(n), { errors: [] });
@@ -844,14 +1331,14 @@ var Ye = D("response"), Xe = M(({ client: e }) => {
844
1331
  async function d(e) {
845
1332
  return u(e);
846
1333
  }
847
- let f = n.map((e) => e), p = n.map((e) => Object.entries(e).map(([e, t]) => ({
1334
+ let f = t.map((e) => e), p = t.map((e) => Object.entries(e).map(([e, t]) => ({
848
1335
  fieldKey: e,
849
1336
  value: t
850
1337
  })));
851
1338
  function m(e) {
852
- return T({
1339
+ return k({
853
1340
  f: e,
854
- s: n
1341
+ s: t
855
1342
  }, ({ f: e, s: t }) => {
856
1343
  let n = e ? t[e.key] ?? null : null;
857
1344
  return n === null ? e?.defaultValue !== void 0 && e.defaultValue !== null ? e.defaultValue : null : n;
@@ -866,10 +1353,10 @@ var Ye = D("response"), Xe = M(({ client: e }) => {
866
1353
  function _(t) {
867
1354
  return m(e.fields.getByName(t));
868
1355
  }
869
- return j({
1356
+ return F({
870
1357
  clock: r,
871
1358
  target: a.clearAll
872
- }), j({
1359
+ }), F({
873
1360
  clock: i,
874
1361
  target: a.clear
875
1362
  }), {
@@ -885,13 +1372,13 @@ var Ye = D("response"), Xe = M(({ client: e }) => {
885
1372
  getByFieldName: _
886
1373
  };
887
1374
  });
888
- function Ze(e) {
889
- return N(Xe, e);
1375
+ function mt(e) {
1376
+ return L(pt, e);
890
1377
  }
891
1378
  //#endregion
892
1379
  //#region src/entities/condition/condition.ts
893
- var Qe = D("condition"), $e = M(() => {
894
- let e = Qe.store({}), t = E(e, { register(e, t) {
1380
+ var ht = j("condition"), gt = I(() => {
1381
+ let e = ht.store({}), t = A(e, { register(e, t) {
895
1382
  return {
896
1383
  ...e,
897
1384
  [t.condition.id]: t.condition
@@ -915,12 +1402,12 @@ var Qe = D("condition"), $e = M(() => {
915
1402
  indexStore: e
916
1403
  };
917
1404
  });
918
- function et() {
919
- return N($e);
1405
+ function _t() {
1406
+ return L(gt);
920
1407
  }
921
1408
  //#endregion
922
1409
  //#region src/utils/api-url.ts
923
- function tt() {
1410
+ function vt() {
924
1411
  if (f()) {
925
1412
  let e = [
926
1413
  document.currentScript,
@@ -935,7 +1422,7 @@ function tt() {
935
1422
  }
936
1423
  //#endregion
937
1424
  //#region src/utils/search-params.ts
938
- function nt() {
1425
+ function yt() {
939
1426
  if (!o()) return {};
940
1427
  let e = new URLSearchParams(window.location.search), t = {}, n = /* @__PURE__ */ new Set();
941
1428
  for (let [t] of e.entries()) t.startsWith("picked-") && n.add(t);
@@ -943,89 +1430,104 @@ function nt() {
943
1430
  let n = r.replace("picked-", "");
944
1431
  t[n] = e.getAll(r);
945
1432
  }
946
- let r = S("s");
947
- if (n.size > 0) x.set(r, t);
1433
+ let r = E("s");
1434
+ if (n.size > 0) T.set(r, t);
948
1435
  else {
949
- let e = x.get(r);
1436
+ let e = T.get(r);
950
1437
  if (e) return e.json() || {};
951
1438
  }
952
1439
  return t;
953
1440
  }
954
1441
  //#endregion
955
- //#region src/utils/user-session.ts
956
- function rt() {
1442
+ //#region src/entities/session/session.ts
1443
+ var bt = E("session", "global");
1444
+ function xt() {
957
1445
  return l() ? crypto.randomUUID() : `${Date.now().toString(36)}-${Math.random().toString(36).substring(2, 15)}-${Math.random().toString(36).substring(2, 15)}-${Math.random().toString(36).substring(2, 15)}`;
958
1446
  }
959
- var it = S("session", "global"), X = () => {
960
- let e = b.get(it), t;
961
- e.isSet() && (t = e.json());
962
- let n = (t) => e.set({
963
- id: t.id,
964
- isUser: t.isUser,
965
- identifiers: t.identifiers
966
- }), r = {
967
- id: t?.id ?? rt(),
968
- isUser: t?.isUser ?? void 0,
969
- identifiers: t?.identifiers ?? void 0,
970
- setIsUser(e) {
971
- this.isUser = e, n(this);
972
- },
973
- setIdentifier(e, t) {
974
- this.identifiers = {
975
- ...this.identifiers,
976
- [e]: t
977
- }, n(this);
978
- },
979
- removeIdentifier(e) {
980
- this.identifiers && (this.identifiers = Object.fromEntries(Object.entries(this.identifiers).filter(([t]) => t !== e)), this.identifiers = Object.keys(this.identifiers).length ? this.identifiers : void 0, n(this));
1447
+ function St() {
1448
+ if (!u()) return null;
1449
+ let e = w.get(bt);
1450
+ if (!e.isSet()) return null;
1451
+ try {
1452
+ return e.json();
1453
+ } catch {
1454
+ return null;
1455
+ }
1456
+ }
1457
+ var Ct = I(() => {
1458
+ let e = St(), t = { id: e?.id ?? xt() };
1459
+ e?.isUser !== void 0 && (t.isUser = e.isUser), e?.identifiers && Object.keys(e.identifiers).length > 0 && (t.identifiers = e.identifiers);
1460
+ let n = P(t), r = A(n, {
1461
+ setIsUser: (e, t) => ({
1462
+ ...e,
1463
+ isUser: t
1464
+ }),
1465
+ setIdentifier: (e, { key: t, value: n }) => ({
1466
+ ...e,
1467
+ identifiers: {
1468
+ ...e.identifiers ?? {},
1469
+ [t]: n
1470
+ }
1471
+ }),
1472
+ removeIdentifier: (e, t) => {
1473
+ let n = e.identifiers;
1474
+ if (!n || !(t in n)) return e;
1475
+ let r = {};
1476
+ for (let [e, i] of Object.entries(n)) e !== t && (r[e] = i);
1477
+ let i = { id: e.id };
1478
+ return e.isUser !== void 0 && (i.isUser = e.isUser), Object.keys(r).length > 0 && (i.identifiers = r), i;
981
1479
  }
1480
+ });
1481
+ return F({
1482
+ source: n,
1483
+ target: O({
1484
+ source: n,
1485
+ effect: (e) => {
1486
+ if (u()) try {
1487
+ w.get(bt).set(e);
1488
+ } catch {}
1489
+ }
1490
+ })
1491
+ }), {
1492
+ store: n,
1493
+ setIsUser: r.setIsUser,
1494
+ setIdentifier: r.setIdentifier,
1495
+ removeIdentifier: r.removeIdentifier
982
1496
  };
983
- return n(r), r;
984
- }, at = () => u() ? X() : null;
1497
+ });
1498
+ function wt() {
1499
+ return L(Ct, void 0);
1500
+ }
985
1501
  //#endregion
986
1502
  //#region src/utils/picked-config.ts
987
- function Z() {
1503
+ function Tt() {
988
1504
  if (o()) return globalThis.window.pickedConfig;
989
1505
  }
990
- function ot() {
991
- if (!o()) return;
992
- let e = Z(), t = e?.organizationId, n = e?.projectId;
993
- return t && n ? {
994
- organizationId: t,
995
- projectId: n
996
- } : void 0;
1506
+ function Et() {
1507
+ if (o()) return Tt()?.projectId;
997
1508
  }
998
- function st() {
1509
+ function Dt() {
999
1510
  if (!f()) return;
1000
1511
  let e = document.getElementById("picked_script") || document.querySelector("script#picked") || document.getElementById("cvly");
1001
- if (!e) return;
1002
- let t = e.dataset.organizationid || e.getAttribute("organization-id"), n = e.dataset.projectid || e.getAttribute("project-id");
1003
- return t && n ? {
1004
- organizationId: t,
1005
- projectId: n
1006
- } : void 0;
1512
+ if (e) return e.dataset.projectid || e.getAttribute("project-id") || void 0;
1007
1513
  }
1008
- function ct(e) {
1009
- let { organizationId: t, projectId: n } = e;
1010
- if (t && n) return {
1011
- organizationId: t,
1012
- projectId: n
1013
- };
1014
- let r = ot();
1015
- if (r) return r;
1016
- let i = st();
1017
- if (i) return i;
1018
- throw Error("organizationId and projectId are required. You can provide them via one of:\n (1) createClient({ organizationId, projectId }) options;\n (2) window.pickedConfig = { organizationId, projectId };\n (3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes data-organizationid/data-projectid (or organization-id/project-id) attributes.");
1514
+ function Ot(e) {
1515
+ if (e.projectId) return e.projectId;
1516
+ let t = Et();
1517
+ if (t) return t;
1518
+ let n = Dt();
1519
+ if (n) return n;
1520
+ throw Error("projectId is required. You can provide it via one of:\n (1) createClient({ projectId }) options;\n (2) window.pickedConfig = { projectId };\n (3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes a data-projectid (or project-id) attribute.");
1019
1521
  }
1020
1522
  //#endregion
1021
1523
  //#region src/utils/render-string.ts
1022
- function Q(e) {
1524
+ function $(e) {
1023
1525
  return e == null || e === "" || Number.isNaN(e);
1024
1526
  }
1025
- var lt = {
1026
- default: (e, t) => Q(e) ? String(t ?? "") : String(e),
1027
- append: (e, t) => t && !Q(e) ? `${e} ${t}` : e,
1028
- prepend: (e, t) => t && !Q(e) ? `${t} ${e}` : e,
1527
+ var kt = {
1528
+ default: (e, t) => $(e) ? String(t ?? "") : String(e),
1529
+ append: (e, t) => t && !$(e) ? `${e} ${t}` : e,
1530
+ prepend: (e, t) => t && !$(e) ? `${t} ${e}` : e,
1029
1531
  upper: (e) => typeof e == "string" ? e.toUpperCase() : e,
1030
1532
  lower: (e) => typeof e == "string" ? e.toLowerCase() : e,
1031
1533
  capitalize: (e) => typeof e == "string" ? e.charAt(0).toUpperCase() + e.slice(1) : e,
@@ -1043,24 +1545,24 @@ var lt = {
1043
1545
  return e instanceof Set ? t.format(Array.from(e).map(String)) : e;
1044
1546
  }
1045
1547
  };
1046
- function ut(e) {
1548
+ function At(e) {
1047
1549
  return typeof e == "object" && !!e;
1048
1550
  }
1049
- function dt(e, t) {
1551
+ function jt(e, t) {
1050
1552
  let n = t;
1051
- for (let t of e.split(".")) if (ut(n) && t in n) n = n[t];
1553
+ for (let t of e.split(".")) if (At(n) && t in n) n = n[t];
1052
1554
  else return;
1053
1555
  return typeof n == "function" ? n() : n;
1054
1556
  }
1055
- function ft(e, t) {
1056
- let n = e.split("|").map((e) => e.trim()), r = dt(n.shift() ?? "", t);
1557
+ function Mt(e, t) {
1558
+ let n = e.split("|").map((e) => e.trim()), r = jt(n.shift() ?? "", t);
1057
1559
  for (let e of n) {
1058
- let [t, ...n] = e.split(":"), i = t?.trim() ?? "", a = n.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g, ""), o = lt[i];
1560
+ let [t, ...n] = e.split(":"), i = t?.trim() ?? "", a = n.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g, ""), o = kt[i];
1059
1561
  o && (r = o(r, a));
1060
1562
  }
1061
- return Q(r) ? "" : typeof r == "object" ? JSON.stringify(r) : String(r);
1563
+ return $(r) ? "" : typeof r == "object" ? JSON.stringify(r) : String(r);
1062
1564
  }
1063
- function pt(e, t) {
1565
+ function Nt(e, t) {
1064
1566
  let n = "", r = 0;
1065
1567
  for (; r < e.length;) if (e[r] === "{" && e[r + 1] === "{") {
1066
1568
  r += 2;
@@ -1072,93 +1574,80 @@ function pt(e, t) {
1072
1574
  }
1073
1575
  i += e[r++];
1074
1576
  }
1075
- n += ft(i.trim(), t);
1577
+ n += Mt(i.trim(), t);
1076
1578
  } else n += e[r++];
1077
1579
  return n;
1078
1580
  }
1079
1581
  //#endregion
1080
1582
  //#region src/picked.ts
1081
- var $ = class {
1583
+ var Pt = class {
1082
1584
  static logger = r;
1083
1585
  options;
1084
- isReady = !1;
1586
+ dataSource = null;
1587
+ contentLoader;
1085
1588
  plugins = {};
1086
- pluginStartHooks = [];
1087
- eventBus = k();
1589
+ eventBus = N();
1088
1590
  events;
1089
- organizationId;
1090
1591
  projectId;
1091
1592
  apiUrl;
1092
1593
  dashboardUrl;
1093
1594
  documentationSiteUrl;
1094
- session;
1095
- precondition;
1096
- condition;
1097
- preconditionPassed;
1098
- searchParams = nt();
1099
- history = ke();
1100
- components = V({ client: this });
1101
- experienceInstances = te({ client: this });
1102
- experiences = ue({ client: this });
1103
- frameworks = he({ client: this });
1104
- predicates = Se({ client: this });
1105
- features = Te({ client: this });
1106
- conditions = et();
1107
- fields = Pe();
1108
- responses = Ze({ client: this });
1109
- steps = Le();
1110
- actions = Ve({ client: this });
1595
+ session = wt();
1596
+ searchParams = yt();
1597
+ history = He();
1598
+ components = he({ client: this });
1599
+ experienceInstances = b({ client: this });
1600
+ experiences = se({ client: this });
1601
+ frameworks = ye({ client: this });
1602
+ predicates = Fe({ client: this });
1603
+ features = ze({ client: this });
1604
+ conditions = _t();
1605
+ fields = qe();
1606
+ responses = mt({ client: this });
1607
+ steps = Xe();
1608
+ contents = et();
1609
+ actions = it({ client: this });
1610
+ stateSnapshotStore = Se({ client: this });
1611
+ evaluateRuleLogicFx = De({ client: this });
1612
+ start;
1613
+ readyStore;
1614
+ preconditionPassedStore;
1615
+ conditionPassedStore;
1616
+ lifecycleStageStore;
1617
+ lifecycle = Me({ client: this });
1618
+ renderStringFx = O({
1619
+ source: this.responses.listStore,
1620
+ effect: (e, { template: t, context: n }) => {
1621
+ let r = {};
1622
+ for (let t of e) r[t.fieldKey] = t.value;
1623
+ return Nt(t, {
1624
+ ...n,
1625
+ responses: r
1626
+ });
1627
+ }
1628
+ });
1111
1629
  constructor(e) {
1112
- this.events = je(this.eventBus);
1113
- let { organizationId: t, projectId: n } = ct(e);
1114
- this.organizationId = t, this.projectId = n, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || tt(), this.dashboardUrl = e.dashboardUrl ?? "https://dashboard.picked.app", this.documentationSiteUrl = e.documentationSiteUrl ?? "https://docs.picked.app", this.session = at(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.setupComponents(), this.precondition = e.precondition, this.condition = e.condition, this.eventBus({
1630
+ this.events = We(this.eventBus), this.projectId = Ot(e), this.options = Object.freeze(e), this.apiUrl = e.apiUrl || vt(), this.dashboardUrl = e.dashboardUrl ?? "https://dashboard.picked.app", this.documentationSiteUrl = e.documentationSiteUrl ?? "https://docs.picked.app", this.start = this.lifecycle.start, this.readyStore = this.lifecycle.readyStore, this.preconditionPassedStore = this.lifecycle.preconditionPassedStore, this.conditionPassedStore = this.lifecycle.conditionPassedStore, this.lifecycleStageStore = this.lifecycle.lifecycleStageStore, this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.setupComponents(), this.lifecycle.setPrecondition(e.precondition), this.lifecycle.setCondition(e.condition), this.eventBus({
1115
1631
  type: "load",
1116
- version: oe()
1632
+ version: te()
1117
1633
  });
1118
1634
  }
1119
- start = () => {
1120
- ye(this), (async () => {
1121
- if (!f()) return;
1122
- await this.runPluginStartHooks();
1123
- let e = await this.evaluateGate(this.precondition);
1124
- this.preconditionPassed = e;
1125
- let t;
1126
- e && (t = await this.evaluateGate(this.condition));
1127
- let n = e && t === !0;
1128
- if (typeof t == "boolean" && this.session) {
1129
- let e = t;
1130
- this.session.setIsUser(e), this.eventBus({
1131
- type: "user_decide",
1132
- value: e
1133
- });
1134
- }
1135
- if (this.eventBus({ type: "initialize" }), n && I(this), await ne(), n && I(this), this.eventBus({ type: "ready" }), this.isReady = !0, this.session) {
1136
- let { id: e, isUser: t, identifiers: n } = this.session;
1137
- this.eventBus({
1138
- type: "session",
1139
- id: e,
1140
- isUser: t,
1141
- identifiers: n
1142
- });
1143
- }
1144
- })();
1145
- };
1146
1635
  registerFramework = (e) => {
1147
- ge(e, this.frameworks);
1636
+ be(e, this.frameworks);
1148
1637
  };
1149
1638
  registerComponent = (e, t) => {
1150
- H(e, t, this.components);
1639
+ ge(e, t, this.components);
1151
1640
  };
1152
1641
  registerPlugin = (e) => {
1153
- de(this, e, this.plugins);
1642
+ ue(this, e, this.plugins);
1154
1643
  let t = this.plugins[e.name];
1155
- t?.onStart && this.pluginStartHooks.push(t.onStart);
1644
+ t?.onStart && this.lifecycle.registerPluginStartHook(t.onStart);
1156
1645
  };
1157
1646
  registerFeature = (e, t) => {
1158
- Ee(e, t, this.features);
1647
+ Be(e, t, this.features);
1159
1648
  };
1160
1649
  registerPredicate = (e, t) => {
1161
- Ce(e, t, this.predicates);
1650
+ Ie(e, t, this.predicates);
1162
1651
  };
1163
1652
  registerCondition = (e) => {
1164
1653
  this.conditions.register(e);
@@ -1167,15 +1656,17 @@ var $ = class {
1167
1656
  this.fields.register(e);
1168
1657
  };
1169
1658
  registerStep = (e) => {
1170
- Re(e, this.steps);
1659
+ Ze(e, this.steps);
1660
+ };
1661
+ registerContent = (e) => {
1662
+ tt(e, this.contents);
1171
1663
  };
1172
1664
  registerAction = (e, t) => {
1173
- He(e, t, this.actions);
1665
+ at(e, t, this.actions);
1174
1666
  };
1175
1667
  registerExperience = (e) => {
1176
- e.component && H(`experience:${e.id}`, e.component, this.components), this.experiences.register(e);
1668
+ e.component && ge(`experience:${e.id}`, e.component, this.components), this.experiences.register(e);
1177
1669
  };
1178
- getStateSnapshot = () => U(this);
1179
1670
  launchExperienceById = async (e, t) => {
1180
1671
  this.experiences.launch({
1181
1672
  id: e,
@@ -1194,12 +1685,6 @@ var $ = class {
1194
1685
  openExperienceByKey = async (e) => {
1195
1686
  this.experiences.open({ key: e });
1196
1687
  };
1197
- async runPluginStartHooks() {
1198
- for (let e of this.pluginStartHooks) await e();
1199
- }
1200
- async evaluateGate(e) {
1201
- return e === void 0 ? !0 : typeof e == "boolean" ? e : await t(this, e) === !0;
1202
- }
1203
1688
  setupPlugins() {
1204
1689
  this.options.plugins?.forEach((e) => {
1205
1690
  if (Array.isArray(e)) {
@@ -1262,30 +1747,23 @@ var $ = class {
1262
1747
  });
1263
1748
  }
1264
1749
  getPluginConfig = (e) => this.plugins[e] ?? {};
1265
- renderString = (e, t) => {
1266
- let n = this.responses.listStore.getState().reduce((e, t) => (e[t.fieldKey] = t.value, e), {});
1267
- return pt(e, {
1268
- ...t,
1269
- responses: n
1270
- });
1271
- };
1272
1750
  };
1273
1751
  //#endregion
1274
1752
  //#region src/entities/component/lazyComponent.ts
1275
- function mt(e) {
1753
+ function Ft(e) {
1276
1754
  return {
1277
1755
  $$type: "lazy-component",
1278
1756
  load: e
1279
1757
  };
1280
1758
  }
1281
- function ht(e) {
1759
+ function It(e) {
1282
1760
  return typeof e == "object" && !!e && "$$type" in e && e.$$type === "lazy-component";
1283
1761
  }
1284
1762
  //#endregion
1285
1763
  //#region src/exports.ts
1286
- var gt = (e) => {
1287
- let t = new $(e);
1764
+ var Lt = (e) => {
1765
+ let t = new Pt(e);
1288
1766
  return d(t), t;
1289
1767
  };
1290
1768
  //#endregion
1291
- export { $ as Picked, gt as createClient, S as createStorageKey, t as evaluateRuleLogic, Z as getPickedConfig, ht as isLazyLoader, _ as isPickedRoot, mt as lazyComponent, b as localStore, x as sessionStore, ie as subscribe, m as supportsCookies, l as supportsCryptoRandomUUID, f as supportsDocument, s as supportsHistory, i as supportsIntersectionObserver, u as supportsLocalStorage, p as supportsLocation, a as supportsSessionStorage, c as supportsShadowRoot, h as supportsWebComponents, o as supportsWindow };
1769
+ export { Pt as Picked, Lt as createClient, le as createPluginEffect, E as createStorageKey, n as evaluateRuleLogic, Tt as getPickedConfig, It as isLazyLoader, _ as isPickedRoot, Ft as lazyComponent, w as localStore, T as sessionStore, C as subscribe, m as supportsCookies, l as supportsCryptoRandomUUID, f as supportsDocument, s as supportsHistory, i as supportsIntersectionObserver, u as supportsLocalStorage, p as supportsLocation, a as supportsSessionStorage, c as supportsShadowRoot, h as supportsWebComponents, o as supportsWindow };