@picked/client 0.0.1-dev.1778561735098 → 0.0.1-dev.1780446300503

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 (87) hide show
  1. package/dist/{api-XV6bcv_D.cjs → api-Cqg2gPbP.cjs} +1 -1
  2. package/dist/{api-Bzb9pR2r.js → api-qqBYwjhT.js} +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/dom-observer/index.js +1 -0
  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/responses-browser-storage/index.js +1 -1
  10. package/dist/cjs/plugins/responses-indexeddb/index.js +1 -1
  11. package/dist/cjs/plugins/single-page-app/index.js +1 -1
  12. package/dist/cjs/plugins/web-components/index.js +1 -1
  13. package/dist/cjs/plugins/window-object/index.js +1 -1
  14. package/dist/cjs/server/index.js +1 -1
  15. package/dist/docs/image-optimisation-service.md +6 -6
  16. package/dist/docs/sdk/content-security-policy.md +8 -7
  17. package/dist/docs/sdk/fields.md +2 -2
  18. package/dist/docs/workspaces.mdx +1 -1
  19. package/dist/dom-DjfSrkpp.js +84 -0
  20. package/dist/dom-sqnnO-CT.cjs +1 -0
  21. package/dist/esm/index.js +360 -349
  22. package/dist/esm/plugins/create-experience/index.js +1 -1
  23. package/dist/esm/plugins/dom-observer/index.js +87 -0
  24. package/dist/esm/plugins/dynamic-experiences/index.js +3 -163
  25. package/dist/esm/plugins/experience-browser-storage/index.js +2 -2
  26. package/dist/esm/plugins/history-browser-storage/index.js +15 -54
  27. package/dist/esm/plugins/responses-browser-storage/index.js +2 -2
  28. package/dist/esm/plugins/responses-indexeddb/index.js +1 -1
  29. package/dist/esm/plugins/single-page-app/index.js +14 -14
  30. package/dist/esm/plugins/web-components/index.js +2 -2
  31. package/dist/esm/plugins/window-object/index.js +1 -1
  32. package/dist/esm/server/index.js +84 -51
  33. package/dist/experience-instance-B2Xb6TAm.cjs +1 -0
  34. package/dist/experience-instance-Brph8SaR.js +512 -0
  35. package/dist/plugin-7rlBjq6t.js +240 -0
  36. package/dist/plugin-D1FIRtEo.cjs +1 -0
  37. package/dist/preview-bridge-Cv-Fu5Y1.cjs +1 -0
  38. package/dist/preview-bridge-eBbZClad.js +33 -0
  39. package/dist/supports-34OzZK5j.cjs +1 -0
  40. package/dist/{supports-0XIfd4-R.js → supports-BgjwyijI.js} +11 -4
  41. package/dist/types/entities/content/content.d.ts +37 -0
  42. package/dist/types/entities/content/content.d.ts.map +1 -0
  43. package/dist/types/entities/experience/experience.d.ts +22 -2
  44. package/dist/types/entities/experience/experience.d.ts.map +1 -1
  45. package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
  46. package/dist/types/entities/history/history.d.ts +16 -28
  47. package/dist/types/entities/history/history.d.ts.map +1 -1
  48. package/dist/types/entities/step/step.d.ts +17 -2
  49. package/dist/types/entities/step/step.d.ts.map +1 -1
  50. package/dist/types/index.d.ts +2 -0
  51. package/dist/types/index.d.ts.map +1 -1
  52. package/dist/types/lifecycle/condition-selection.d.ts +98 -0
  53. package/dist/types/lifecycle/condition-selection.d.ts.map +1 -0
  54. package/dist/types/lifecycle/lifecycle.d.ts.map +1 -1
  55. package/dist/types/lifecycle/state-snapshot.d.ts.map +1 -1
  56. package/dist/types/picked.d.ts +72 -8
  57. package/dist/types/picked.d.ts.map +1 -1
  58. package/dist/types/plugins/dom-observer/index.d.ts +3 -0
  59. package/dist/types/plugins/dom-observer/index.d.ts.map +1 -0
  60. package/dist/types/plugins/dom-observer/plugin.d.ts +50 -0
  61. package/dist/types/plugins/dom-observer/plugin.d.ts.map +1 -0
  62. package/dist/types/plugins/dynamic-experiences/index.d.ts +2 -1
  63. package/dist/types/plugins/dynamic-experiences/index.d.ts.map +1 -1
  64. package/dist/types/plugins/dynamic-experiences/plugin.d.ts +41 -1
  65. package/dist/types/plugins/dynamic-experiences/plugin.d.ts.map +1 -1
  66. package/dist/types/plugins/dynamic-experiences/types.d.ts +67 -1
  67. package/dist/types/plugins/dynamic-experiences/types.d.ts.map +1 -1
  68. package/dist/types/plugins/history-browser-storage/plugin.d.ts +0 -16
  69. package/dist/types/plugins/history-browser-storage/plugin.d.ts.map +1 -1
  70. package/dist/types/preview-bridge/index.d.ts +14 -0
  71. package/dist/types/preview-bridge/index.d.ts.map +1 -0
  72. package/dist/types/server/index.d.ts +8 -0
  73. package/dist/types/server/index.d.ts.map +1 -1
  74. package/dist/types/server/serialize.d.ts +67 -0
  75. package/dist/types/server/serialize.d.ts.map +1 -0
  76. package/dist/types/utils/dom.d.ts +0 -27
  77. package/dist/types/utils/dom.d.ts.map +1 -1
  78. package/dist/types/utils/supports.d.ts +8 -0
  79. package/dist/types/utils/supports.d.ts.map +1 -1
  80. package/package.json +12 -2
  81. package/dist/experience-instance-B16NqD7y.cjs +0 -1
  82. package/dist/experience-instance-CZC0uPuv.js +0 -513
  83. package/dist/supports-Dsjg-82e.cjs +0 -1
  84. /package/dist/{id-Bv44ilEo.cjs → id-Cg7fVl1O.cjs} +0 -0
  85. /package/dist/{id-CRqy981z.js → id-n2yrHvNo.js} +0 -0
  86. /package/dist/{storage-B6lQtc4-.cjs → storage-BXSlLTRa.cjs} +0 -0
  87. /package/dist/{storage-6Xk0uAxB.js → storage-hOHCCXvP.js} +0 -0
package/dist/esm/index.js CHANGED
@@ -1,35 +1,16 @@
1
1
  import { t as e } from "../object-DvUDOytC.js";
2
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
- 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 _, d as v, i as y, l as b, n as x, o as ee, r as S, s as C, u as w } from "../experience-instance-CZC0uPuv.js";
6
- import { i as T, n as E, r as D, t as O } from "../storage-6Xk0uAxB.js";
7
- import { n as te, r as ne } from "../api-Bzb9pR2r.js";
8
- import { t as re } from "../id-CRqy981z.js";
4
+ import { a as i, c as a, d as o, f as s, i as c, l, m as u, n as d, o as f, r as p, s as m, t as h, u as g } from "../supports-BgjwyijI.js";
5
+ import { a as _, i as v, r as ee, s as y, t as b } from "../dom-DjfSrkpp.js";
6
+ import { c as x, n as S, r as C, s as w } from "../experience-instance-Brph8SaR.js";
7
+ import { i as T, n as E, r as D, t as O } from "../storage-hOHCCXvP.js";
8
+ import { n as te, r as ne } from "../api-qqBYwjhT.js";
9
+ import { t as re } from "../id-n2yrHvNo.js";
9
10
  import { attach as k, combine as A, createApi as j, createDomain as M, createEffect as N, createEvent as P, createStore as F, sample as I } from "effector";
10
11
  import { createFactory as L, invoke as R } from "@withease/factories";
11
12
  //#region src/entities/experience/experience.ts
12
- var z = M("experience");
13
- function ie(e, t) {
14
- let n = /* @__PURE__ */ new Map();
15
- for (let r of e) if (r.placement === "replace") for (let e of r.elements) {
16
- let i = _(e, t);
17
- if (i) {
18
- n.set(r.selector, i);
19
- break;
20
- }
21
- }
22
- for (let [e, r] of n) `${e}${r}${t}`;
23
- }
24
- function ae(e, t, n) {
25
- let r = new Set(t.filter((e) => e.elements.length > 0).map((e) => e.selector));
26
- for (let t of e) {
27
- if (t.placement !== "replace" || r.has(t.selector)) continue;
28
- let e = C(t.selector);
29
- !e || e === n || `${t.selector}${e}${n}`;
30
- }
31
- }
32
- var oe = L(({ client: e, experience: r }) => {
13
+ var z = M("experience"), ie = L(({ client: e, experience: r }) => {
33
14
  let i = z.store(r), a = j(i, { merge(e, t) {
34
15
  return {
35
16
  ...e,
@@ -41,7 +22,7 @@ var oe = L(({ client: e, experience: r }) => {
41
22
  targetSelectors: e.targets,
42
23
  initializeOpenLogic: e.initializeOpen
43
24
  })), s = A(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 = A(i, e.steps.indexStore, e.conditions.indexStore, (e, t, n) => {
44
- let r = e.nodes.filter(y).map((e) => t[e.stepId]).filter((e) => e !== void 0), i = e.nodes.filter(S).map((e) => n[e.conditionId]).filter((e) => e !== void 0);
25
+ let r = e.nodes.filter(x).map((e) => t[e.stepId]).filter((e) => e !== void 0), i = e.nodes.filter(w).map((e) => n[e.conditionId]).filter((e) => e !== void 0);
45
26
  return {
46
27
  steps: r,
47
28
  nodes: e.nodes,
@@ -51,10 +32,10 @@ var oe = L(({ client: e, experience: r }) => {
51
32
  }), l = r.actions ?? [], u, d = k({
52
33
  source: o,
53
34
  effect: (t, n) => {
54
- let i = b(t.targetSelectors, r.id);
55
- i.forEach(({ elements: e }) => e.forEach((e) => v(e, r.id))), ie(i, r.id), g(i, r.id, r.key).forEach((t) => {
35
+ let i = v(t.targetSelectors, r.id);
36
+ i.forEach(({ elements: e }) => e.forEach((e) => y(e, r.id))), b(i, r.id, r.key).forEach((t) => {
56
37
  n ? e.experienceInstances.spawn(u, t, n) : e.experienceInstances.spawn(u, t);
57
- }), ae(t.targetSelectors, i, r.id);
38
+ });
58
39
  }
59
40
  }), f = k({
60
41
  source: A({
@@ -65,10 +46,42 @@ var oe = L(({ client: e, experience: r }) => {
65
46
  effect: async ({ preconditionPassed: i, isUser: a, config: o }) => {
66
47
  if (!i || !a) return !1;
67
48
  let { decisionLogic: s, targetSelectors: c } = o;
68
- return c.length === 0 || b(c, r.id).length < 1 ? !1 : s === void 0 ? !0 : t(s) ? await n(e, s) === !0 : !0;
49
+ return c.length === 0 || v(c, r.id).length < 1 ? !1 : s === void 0 ? !0 : t(s) ? await n(e, s) === !0 : !0;
69
50
  }
70
- });
71
- return u = {
51
+ }), p = N(async () => {
52
+ if (!e.contentLoader) return !0;
53
+ try {
54
+ await e.contentLoader({
55
+ id: r.id,
56
+ key: r.key
57
+ });
58
+ } catch {
59
+ `${r.id}`;
60
+ }
61
+ return !0;
62
+ }), m = P(), h = P(), g = z.createStore(void 0, { skipVoid: !1 }).on(m, (e, t) => t).on(h, (e, t) => t);
63
+ return I({
64
+ clock: m,
65
+ target: f
66
+ }), I({
67
+ clock: f.doneData,
68
+ source: g,
69
+ filter: (e, t) => t,
70
+ fn: (e) => e,
71
+ target: d
72
+ }), I({
73
+ clock: f.doneData,
74
+ filter: Boolean,
75
+ target: p
76
+ }), I({
77
+ clock: h,
78
+ source: g,
79
+ fn: (e) => e,
80
+ target: d
81
+ }), I({
82
+ clock: h,
83
+ target: p
84
+ }), u = {
72
85
  id: r.id,
73
86
  key: r.key,
74
87
  name: r.name,
@@ -78,20 +91,23 @@ var oe = L(({ client: e, experience: r }) => {
78
91
  actions: l,
79
92
  merge: a.merge,
80
93
  initialiseFx: d,
81
- shouldInitialiseFx: f
94
+ shouldInitialiseFx: f,
95
+ initialiseRequested: m,
96
+ initialiseDirectly: h,
97
+ prepareExperienceContentFx: p
82
98
  }, u;
83
99
  });
84
- function se(e) {
85
- return R(oe, e);
100
+ function ae(e) {
101
+ return R(ie, e);
86
102
  }
87
- var ce = L(({ client: e }) => {
103
+ var oe = L(({ client: e }) => {
88
104
  let t = z.store({}), n = j(t, { register(e, t) {
89
105
  return {
90
106
  ...e,
91
107
  [t.id]: t
92
108
  };
93
109
  } }), r = P(), i = N((t) => {
94
- n.register(se({
110
+ n.register(ae({
95
111
  client: e,
96
112
  experience: t
97
113
  }));
@@ -125,18 +141,14 @@ var ce = L(({ client: e }) => {
125
141
  }
126
142
  let c = k({
127
143
  source: t,
128
- effect: async (e, t) => {
144
+ effect: (e, t) => {
129
145
  let n = "key" in t ? Object.values(e).find((e) => e.key === t.key) : e[t.id];
130
146
  if (!n) {
131
147
  "key" in t ? `${t.key}` : `${t.id}`;
132
148
  return;
133
149
  }
134
150
  let { options: r } = t;
135
- if (r?.bypassCondition) {
136
- await n.initialiseFx(r);
137
- return;
138
- }
139
- await n.shouldInitialiseFx() && await n.initialiseFx(r);
151
+ r?.bypassCondition ? n.initialiseDirectly(r) : n.initialiseRequested(r);
140
152
  }
141
153
  });
142
154
  return {
@@ -151,7 +163,7 @@ var ce = L(({ client: e }) => {
151
163
  instances: e.experienceInstances.listStore
152
164
  },
153
165
  effect: async ({ experiences: e, instances: t }, n) => {
154
- 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);
166
+ let r = "key" in n ? Object.values(e).find((e) => e.key === n.key) : e[n.id], i = t.filter((e) => e.experienceId === r?.id);
155
167
  if (i.length > 0) {
156
168
  for (let e of i) e.open();
157
169
  return;
@@ -174,30 +186,26 @@ var ce = L(({ client: e }) => {
174
186
  listStore: a,
175
187
  initialiseExperiencesFx: k({
176
188
  source: a,
177
- effect: async (e) => {
178
- for (let t of e) try {
179
- await t.shouldInitialiseFx() && await t.initialiseFx(void 0);
180
- } catch {
181
- `${t.id}`;
182
- }
189
+ effect: (e) => {
190
+ for (let t of e) t.initialiseRequested(void 0);
183
191
  }
184
192
  })
185
193
  };
186
194
  });
187
- function le(e) {
188
- return R(ce, e);
195
+ function se(e) {
196
+ return R(oe, e);
189
197
  }
190
- var ue = async (e) => {
198
+ var ce = async (e) => {
191
199
  await e.experiences.initialiseExperiencesFx();
192
200
  };
193
201
  //#endregion
194
202
  //#region src/entities/plugin/plugin.ts
195
- function de(e) {
203
+ function le(e) {
196
204
  return N(async () => {
197
205
  await e();
198
206
  });
199
207
  }
200
- var fe = (e, t, n) => {
208
+ var ue = (e, t, n) => {
201
209
  let r = t.name, i = t.setup(e);
202
210
  if (i) {
203
211
  let e = n[r] ?? {};
@@ -206,16 +214,16 @@ var fe = (e, t, n) => {
206
214
  ...i
207
215
  });
208
216
  }
209
- }, pe = M("component"), me = L(({ client: e, component: t, name: n }) => ({
217
+ }, de = M("component"), fe = L(({ client: e, component: t, name: n }) => ({
210
218
  name: n,
211
219
  component: t,
212
220
  frameworkStore: e.frameworks.getByName(t.frameworkName)
213
221
  }));
214
- function he(e) {
215
- return R(me, e);
222
+ function pe(e) {
223
+ return R(fe, e);
216
224
  }
217
- var ge = L(({ client: e }) => {
218
- let t = pe.store({}), n = j(t, { register(e, t) {
225
+ var me = L(({ client: e }) => {
226
+ let t = de.store({}), n = j(t, { register(e, t) {
219
227
  return {
220
228
  ...e,
221
229
  [t.name]: t
@@ -228,7 +236,7 @@ var ge = L(({ client: e }) => {
228
236
  fn: (e, { name: t }) => `Component '${t}' already registered. Registering again will override the previous registration.`
229
237
  }).watch((e) => /* @__PURE__ */ r("warn", e)), I({
230
238
  clock: i,
231
- fn: ({ name: t, component: n }) => he({
239
+ fn: ({ name: t, component: n }) => pe({
232
240
  client: e,
233
241
  name: t,
234
242
  component: n
@@ -245,16 +253,16 @@ var ge = L(({ client: e }) => {
245
253
  listStore: a
246
254
  };
247
255
  });
248
- function _e(e) {
249
- return R(ge, e);
256
+ function he(e) {
257
+ return R(me, e);
250
258
  }
251
259
  var B = (e, t, n) => {
252
260
  n.register({
253
261
  name: e,
254
262
  component: t
255
263
  });
256
- }, ve = M("framework"), ye = L((e) => {
257
- let t = ve.store({}), n = j(t, { register(e, t) {
264
+ }, ge = M("framework"), _e = L((e) => {
265
+ let t = ge.store({}), n = j(t, { register(e, t) {
258
266
  return {
259
267
  ...e,
260
268
  [t.name]: t.framework
@@ -279,20 +287,20 @@ var B = (e, t, n) => {
279
287
  listStore: a
280
288
  };
281
289
  });
282
- function be(e) {
283
- return R(ye, e);
290
+ function ve(e) {
291
+ return R(_e, e);
284
292
  }
285
- var xe = (e, t) => {
293
+ var ye = (e, t) => {
286
294
  t.register({
287
295
  name: e.name,
288
296
  framework: e
289
297
  });
290
- }, Se = L(({ client: e }) => {
291
- let t = typeof window < "u", n = {
292
- location: t ? window.location : void 0,
293
- document: t ? window.document : void 0,
294
- sessionStorage: t ? window.sessionStorage : void 0,
295
- localStorage: t ? window.localStorage : void 0
298
+ }, be = L(({ client: e }) => {
299
+ let t = "window" in globalThis, n = {
300
+ location: t ? globalThis.location : void 0,
301
+ document: t ? globalThis.document : void 0,
302
+ sessionStorage: t ? globalThis.sessionStorage : void 0,
303
+ localStorage: t ? globalThis.localStorage : void 0
296
304
  };
297
305
  return A(e.responses.listStore, e.fields.listStore, (t, r) => Object.freeze({
298
306
  client: e,
@@ -301,12 +309,12 @@ var xe = (e, t) => {
301
309
  ...n
302
310
  }));
303
311
  });
304
- function Ce(e) {
305
- return R(Se, e);
312
+ function xe(e) {
313
+ return R(be, e);
306
314
  }
307
315
  //#endregion
308
316
  //#region src/logic-engine.ts
309
- function we(e) {
317
+ function Se(e) {
310
318
  return typeof e == "number" && !isNaN(e);
311
319
  }
312
320
  function V(e) {
@@ -315,18 +323,18 @@ function V(e) {
315
323
  function H(e) {
316
324
  return Array.isArray(e);
317
325
  }
318
- function U(e) {
326
+ function Ce(e) {
319
327
  return e instanceof Promise;
320
328
  }
321
- function W(e) {
329
+ function we(e) {
322
330
  return typeof e == "object" && !!e && !Array.isArray(e) && Object.keys(e).length === 1;
323
331
  }
324
- function G(e) {
325
- if (we(e)) return e;
332
+ function U(e) {
333
+ if (Se(e)) return e;
326
334
  let t = parseFloat(`${e}`);
327
335
  return isNaN(t) ? 0 : t;
328
336
  }
329
- function K(e) {
337
+ function W(e) {
330
338
  return `${e}`;
331
339
  }
332
340
  var Te = {
@@ -334,51 +342,51 @@ var Te = {
334
342
  "===": (e, t) => e === t,
335
343
  "!=": (e, t) => e != t,
336
344
  "!==": (e, t) => e !== t,
337
- ">": (e, t) => G(e) > G(t),
338
- ">=": (e, t) => G(e) >= G(t),
345
+ ">": (e, t) => U(e) > U(t),
346
+ ">=": (e, t) => U(e) >= U(t),
339
347
  "<": (e, t, n) => {
340
- let r = G(e), i = G(t);
348
+ let r = U(e), i = U(t);
341
349
  if (n === void 0) return r < i;
342
- let a = G(n);
350
+ let a = U(n);
343
351
  return r < i && i < a;
344
352
  },
345
353
  "<=": (e, t, n) => {
346
- let r = G(e), i = G(t);
354
+ let r = U(e), i = U(t);
347
355
  if (n === void 0) return r <= i;
348
- let a = G(n);
356
+ let a = U(n);
349
357
  return r <= i && i <= a;
350
358
  },
351
- "!!": async (e) => await J(e),
352
- "!": async (e) => !await J(e),
353
- "%": (e, t) => G(e) % G(t),
359
+ "!!": async (e) => await K(e),
360
+ "!": async (e) => !await K(e),
361
+ "%": (e, t) => U(e) % U(t),
354
362
  log: (e) => (console.log(e), e),
355
- in: (e, t) => t ? V(t) ? t.indexOf(K(e)) !== -1 : H(t) ? t.includes(e) : !1 : !1,
356
- cat: (...e) => e.map(K).join(""),
363
+ in: (e, t) => t ? V(t) ? t.indexOf(W(e)) !== -1 : H(t) ? t.includes(e) : !1 : !1,
364
+ cat: (...e) => e.map(W).join(""),
357
365
  substr: (e, t, n) => {
358
- let r = K(e), i = G(t);
366
+ let r = W(e), i = U(t);
359
367
  if (n === void 0) return r.substr(i);
360
- let a = G(n);
368
+ let a = U(n);
361
369
  if (a < 0) {
362
370
  let e = r.substr(i);
363
371
  return e.substr(0, e.length + a);
364
372
  }
365
373
  return r.substr(i, a);
366
374
  },
367
- "+": (...e) => e.reduce((e, t) => G(e) + G(t), 0),
368
- "*": (...e) => e.reduce((e, t) => G(e) * G(t), 1),
375
+ "+": (...e) => e.reduce((e, t) => U(e) + U(t), 0),
376
+ "*": (...e) => e.reduce((e, t) => U(e) * U(t), 1),
369
377
  "-": (e, t) => {
370
- let n = G(e);
371
- return t === void 0 ? -n : n - G(t);
378
+ let n = U(e);
379
+ return t === void 0 ? -n : n - U(t);
372
380
  },
373
- "/": (e, t) => G(e) / G(t),
374
- min: (...e) => Math.min(...e.map(G)),
375
- max: (...e) => Math.max(...e.map(G)),
381
+ "/": (e, t) => U(e) / U(t),
382
+ min: (...e) => Math.min(...e.map(U)),
383
+ max: (...e) => Math.max(...e.map(U)),
376
384
  merge: (...e) => e.reduce((e, t) => H(t) ? e.concat(t) : e.concat([t]), []),
377
385
  var(e, t) {
378
386
  let n = arguments.length > 1 ? t : null;
379
387
  if (e === "" || e === "." || e == null) return this;
380
388
  if (typeof e == "number" && Array.isArray(this)) return e >= 0 && e < this.length ? this[e] : n;
381
- let r = K(e);
389
+ let r = W(e);
382
390
  if (r === "" || r === ".") return this;
383
391
  let i = r.split("."), a = this;
384
392
  for (let e of i) {
@@ -393,16 +401,16 @@ var Te = {
393
401
  async missing(...e) {
394
402
  let t = H(e[0]) ? e[0] : e, n = [];
395
403
  for (let e of t) {
396
- let t = await q({ var: e }, this);
404
+ let t = await G({ var: e }, this);
397
405
  (t === null || t === "") && n.push(`${e}`);
398
406
  }
399
407
  return n;
400
408
  },
401
409
  async missing_some(e, t) {
402
- let n = await q({ missing: t }, this);
410
+ let n = await G({ missing: t }, this);
403
411
  if (!H(n) || !H(t)) return [];
404
412
  let r = n.filter(V);
405
- return t.filter(V).length - r.length >= G(e) ? [] : r;
413
+ return t.filter(V).length - r.length >= U(e) ? [] : r;
406
414
  },
407
415
  invoke(...e) {
408
416
  let [t, ...n] = e;
@@ -416,84 +424,84 @@ var Te = {
416
424
  let [t, i] = e;
417
425
  n = t, r = i;
418
426
  }
419
- return !V(n) || !V(r) ? !1 : new RegExp(n, r).test(K(t));
427
+ return !V(n) || !V(r) ? !1 : new RegExp(n, r).test(W(t));
420
428
  },
421
429
  throw(e) {
422
- throw Error(K(e));
430
+ throw Error(W(e));
423
431
  }
424
432
  };
425
- async function q(e, t) {
433
+ async function G(e, t) {
426
434
  if (!e) return e;
427
- if (U(e)) return q(await e, t);
428
- if (H(e)) return Promise.all(e.map((e) => q(e, t)));
429
- if (!W(e)) return e;
435
+ if (Ce(e)) return G(await e, t);
436
+ if (H(e)) return Promise.all(e.map((e) => G(e, t)));
437
+ if (!we(e)) return e;
430
438
  let n = Ee(e), r = n ? e[n] ?? [] : [];
431
439
  switch (H(r) || (r = [r]), n) {
432
440
  case "if":
433
441
  case "?:":
434
- for (let e = 0; e < r.length - 1; e += 2) if (await J(await q(r[e], t))) return q(r[e + 1], t);
435
- return r.length % 2 == 1 ? q(r[r.length - 1], t) : null;
442
+ for (let e = 0; e < r.length - 1; e += 2) if (await K(await G(r[e], t))) return G(r[e + 1], t);
443
+ return r.length % 2 == 1 ? G(r[r.length - 1], t) : null;
436
444
  case "and": {
437
445
  let e = null;
438
- for (let n of r) if (e = await q(n, t), !await J(e)) return e;
446
+ for (let n of r) if (e = await G(n, t), !await K(e)) return e;
439
447
  return e;
440
448
  }
441
449
  case "or": {
442
450
  let e = null;
443
- for (let n of r) if (e = await q(n, t), await J(e)) return e;
451
+ for (let n of r) if (e = await G(n, t), await K(e)) return e;
444
452
  return e;
445
453
  }
446
454
  case "map": {
447
- let e = await q(r[0], t);
448
- return H(e) ? await Promise.all(e.map((e) => q(r[1], e))) : [];
455
+ let e = await G(r[0], t);
456
+ return H(e) ? await Promise.all(e.map((e) => G(r[1], e))) : [];
449
457
  }
450
458
  case "filter": {
451
- let e = await q(r[0], t);
459
+ let e = await G(r[0], t);
452
460
  return H(e) ? (await Promise.all(e.map(async (e) => ({
453
461
  item: e,
454
- shouldInclude: await J(await q(r[1], e))
462
+ shouldInclude: await K(await G(r[1], e))
455
463
  })))).filter(({ shouldInclude: e }) => e).map(({ item: e }) => e) : [];
456
464
  }
457
465
  case "reduce": {
458
- let e = await q(r[0], t);
459
- if (!H(e)) return r.length > 2 ? await q(r[2], t) : null;
460
- let n = r[1], i = r.length > 2 ? await q(r[2], t) : null;
461
- for (let t of e) i = await q(n, {
466
+ let e = await G(r[0], t);
467
+ if (!H(e)) return r.length > 2 ? await G(r[2], t) : null;
468
+ let n = r[1], i = r.length > 2 ? await G(r[2], t) : null;
469
+ for (let t of e) i = await G(n, {
462
470
  current: t,
463
471
  accumulator: i
464
472
  });
465
473
  return i;
466
474
  }
467
475
  case "all": {
468
- let e = await q(r[0], t);
476
+ let e = await G(r[0], t);
469
477
  if (!H(e) || e.length === 0) return !1;
470
- for (let t of e) if (!await J(await q(r[1], t))) return !1;
478
+ for (let t of e) if (!await K(await G(r[1], t))) return !1;
471
479
  return !0;
472
480
  }
473
481
  case "some": {
474
- let e = await q(r[0], t);
482
+ let e = await G(r[0], t);
475
483
  if (!H(e)) return !1;
476
- for (let t of e) if (await J(await q(r[1], t))) return !0;
484
+ for (let t of e) if (await K(await G(r[1], t))) return !0;
477
485
  return !1;
478
486
  }
479
487
  case "none": {
480
- let e = await q(r[0], t);
488
+ let e = await G(r[0], t);
481
489
  if (!H(e)) return !0;
482
- for (let t of e) if (await J(await q(r[1], t))) return !1;
490
+ for (let t of e) if (await K(await G(r[1], t))) return !1;
483
491
  return !0;
484
492
  }
485
493
  case "catch": try {
486
- return await q(r[0], t);
494
+ return await G(r[0], t);
487
495
  } catch (e) {
488
- return W(e) ? await q(e, t) : r[1] ? await q(r[1], e) : e instanceof Error ? e.message : e;
496
+ return we(e) ? await G(e, t) : r[1] ? await G(r[1], e) : e instanceof Error ? e.message : e;
489
497
  }
490
498
  }
491
- let i = await Promise.all(r.map((e) => q(e, t))), a = n ? Te[n] : void 0;
499
+ let i = await Promise.all(r.map((e) => G(e, t))), a = n ? Te[n] : void 0;
492
500
  if (!a) throw Error(`Unrecognized operation ${n}`);
493
501
  return a.apply(t, i);
494
502
  }
495
- async function J(e) {
496
- return U(e) ? J(await e) : !(Array.isArray(e) && e.length === 0) && !!e;
503
+ async function K(e) {
504
+ return Ce(e) ? K(await e) : !(Array.isArray(e) && e.length === 0) && !!e;
497
505
  }
498
506
  function Ee(e) {
499
507
  return Object.keys(e)[0];
@@ -519,7 +527,7 @@ var De = L(({ client: e }) => k({
519
527
  let { bucket: e } = await t.getBucket();
520
528
  return e;
521
529
  }, e), {});
522
- return await q(a, {
530
+ return await G(a, {
523
531
  responses: i,
524
532
  location: typeof e.location == "object" ? {
525
533
  hash: e.location.hash,
@@ -558,27 +566,27 @@ var ke = 6e3, Ae = O("last_ping", "global"), je = async (e) => {
558
566
  } catch {
559
567
  return !1;
560
568
  }
561
- }, Y = M("lifecycle"), Me = L(({ client: e }) => {
562
- let t = Y.store(!1), r = F(void 0, {
569
+ }, q = M("lifecycle"), Me = L(({ client: e }) => {
570
+ let t = q.store(!1), r = F(void 0, {
563
571
  skipVoid: !1,
564
- domain: Y
572
+ domain: q
565
573
  }), i = F(void 0, {
566
574
  skipVoid: !1,
567
- domain: Y
568
- }), a = Y.store("idle"), o = Y.store([]), s = F(void 0, {
575
+ domain: q
576
+ }), a = q.store("idle"), o = q.store([]), s = F(void 0, {
569
577
  skipVoid: !1,
570
- domain: Y
571
- }), c = F(void 0, {
578
+ domain: q
579
+ }), l = F(void 0, {
572
580
  skipVoid: !1,
573
- domain: Y
574
- }), l = P(), u = P(), d = P(), p = P(), m = P(), h = P();
575
- o.on(p, (e, t) => [...e, t]), s.on(m, (e, t) => t), c.on(h, (e, t) => t), t.on(u, () => !0);
581
+ domain: q
582
+ }), u = P(), d = P(), f = P(), p = P(), m = P(), h = P();
583
+ o.on(p, (e, t) => [...e, t]), s.on(m, (e, t) => t), l.on(h, (e, t) => t), t.on(d, () => !0);
576
584
  let g = N(() => {
577
585
  je(e);
578
586
  }), _ = N(async () => {
579
587
  await ee();
580
588
  }), v = N(async () => {
581
- await ue(e);
589
+ await ce(e);
582
590
  }), y = k({ effect: v }), b = k({
583
591
  source: o,
584
592
  effect: async (e) => {
@@ -588,11 +596,13 @@ var ke = 6e3, Ae = O("last_ping", "global"), je = async (e) => {
588
596
  source: s,
589
597
  effect: async (t) => t === void 0 ? !0 : typeof t == "boolean" ? t : await n(e, t) === !0
590
598
  }), S = k({
591
- source: c,
599
+ source: l,
592
600
  effect: async (t) => t === void 0 ? !0 : typeof t == "boolean" ? t : await n(e, t) === !0
593
601
  }), C = I({
594
- clock: l,
595
- filter: () => f()
602
+ clock: u,
603
+ source: a,
604
+ filter: (e) => e === "idle" && c(),
605
+ fn: () => void 0
596
606
  });
597
607
  I({
598
608
  clock: C,
@@ -634,19 +644,19 @@ var ke = 6e3, Ae = O("last_ping", "global"), je = async (e) => {
634
644
  clock: x.doneData,
635
645
  filter: (e) => !e,
636
646
  fn: () => void 0,
637
- target: d
647
+ target: f
638
648
  }), I({
639
649
  clock: S.doneData,
640
650
  fn: () => void 0,
641
- target: d
651
+ target: f
642
652
  }), I({
643
- clock: d,
653
+ clock: f,
644
654
  fn: () => ({ type: "initialize" }),
645
655
  target: e.eventBus
646
656
  });
647
- let w = F(!1).on(_.done, () => !0), T = F(!1).on(d, () => !0), E = F(!1).on(y.done, () => !0), D = A(r, i, (e, t) => e === !0 && t === !0);
657
+ let w = F(!1).on(_.done, () => !0), T = F(!1).on(f, () => !0), E = F(!1).on(y.done, () => !0), D = A(r, i, (e, t) => e === !0 && t === !0);
648
658
  return I({
649
- clock: d,
659
+ clock: f,
650
660
  source: D,
651
661
  filter: (e) => e,
652
662
  fn: () => void 0,
@@ -660,17 +670,17 @@ var ke = 6e3, Ae = O("last_ping", "global"), je = async (e) => {
660
670
  clock: A(w, T, D, E, (e, t, n, r) => e && t && (!n || r)),
661
671
  filter: (e) => e,
662
672
  fn: () => void 0,
663
- target: u
673
+ target: d
664
674
  }), I({
665
- clock: u,
675
+ clock: d,
666
676
  fn: () => "ready",
667
677
  target: a
668
678
  }), I({
669
- clock: u,
679
+ clock: d,
670
680
  fn: () => ({ type: "ready" }),
671
681
  target: e.eventBus
672
682
  }), I({
673
- clock: u,
683
+ clock: d,
674
684
  source: e.session.store,
675
685
  fn: ({ id: e, isUser: t, identifiers: n }) => ({
676
686
  type: "session",
@@ -691,7 +701,7 @@ var ke = 6e3, Ae = O("last_ping", "global"), je = async (e) => {
691
701
  fn: () => "failed",
692
702
  target: a
693
703
  }), {
694
- start: l,
704
+ start: u,
695
705
  readyStore: t,
696
706
  preconditionPassedStore: r,
697
707
  conditionPassedStore: i,
@@ -773,8 +783,8 @@ var Le = (e, t, n) => {
773
783
  name: e,
774
784
  predicate: t
775
785
  });
776
- }, Re = M("feature"), ze = L(({ client: e }) => {
777
- let t = Re.store({}), n = Re.store([]), i = j(t, { register(e, t) {
786
+ }, J = M("feature"), Re = L(({ client: e }) => {
787
+ let t = J.store({}), n = J.store([]), i = j(t, { register(e, t) {
778
788
  return {
779
789
  ...e,
780
790
  [t.id]: t.feature
@@ -935,107 +945,69 @@ var Le = (e, t, n) => {
935
945
  getEvokableFeature: p
936
946
  };
937
947
  });
938
- function Be(e) {
939
- return R(ze, e);
948
+ function ze(e) {
949
+ return R(Re, e);
940
950
  }
941
- var Ve = (e, t, n) => {
951
+ var Be = (e, t, n) => {
942
952
  n.register({
943
953
  id: e,
944
954
  feature: t
945
955
  });
946
- }, X = M("history");
947
- function He(e, t, n) {
956
+ }, Y = M("history");
957
+ function Ve(e, t) {
948
958
  return {
949
- id: re("history-entry"),
950
- node: n,
959
+ id: re(`history-entry-${Date.now()}-${Math.random()}}`),
960
+ node: t,
951
961
  at: Date.now(),
952
- instanceId: e,
953
- experienceId: t
962
+ experienceId: e
954
963
  };
955
964
  }
956
- function Ue(e) {
957
- for (let t = e.length - 1; t >= 0; t--) {
958
- let n = e[t];
959
- if (n && y(n.node)) return e.slice(0, t + 1);
960
- }
961
- return [];
962
- }
963
- var We = L(() => {
964
- let e = X.store([]), t = X.event(), n = X.event(), r = X.event(), i = X.event(), a = X.event(), o = X.event();
965
- e.on(t, (e, t) => [...e, He(t.instanceId, t.experienceId, t.node)]), e.on(n, (e, t) => {
966
- let n = He(t.instanceId, t.experienceId, t.node), r = -1;
967
- for (let n = e.length - 1; n >= 0; n--) if (e[n]?.instanceId === t.instanceId) {
968
- r = n;
969
- break;
970
- }
971
- return r === -1 ? [...e, n] : [
972
- ...e.slice(0, r),
973
- n,
974
- ...e.slice(r + 1)
975
- ];
976
- }), e.on(r, (e, { instanceId: t }) => {
977
- let n = 0, r = -1;
978
- for (let i = e.length - 1; i >= 0; i--) {
979
- let a = e[i];
980
- if (!(a?.instanceId !== t || !y(a.node)) && (n += 1, n === 2)) {
981
- r = i;
965
+ var He = L(() => {
966
+ let e = Y.store({ entries: [] }), t = Y.event(), n = Y.event(), r = Y.event(), i = Y.event();
967
+ e.on(t, (e, t) => ({ entries: [...e.entries, Ve(t.experienceId, t.node)] })), e.on(n, (e, t) => ({ entries: [...e.entries.slice(0, -1), Ve(t.experienceId, t.node)] })), e.on(i, (e, t) => t);
968
+ function a(e, t) {
969
+ let n = {
970
+ lastStepIndex: -1,
971
+ secondLastStepIndex: -1
972
+ };
973
+ for (let r = e.length - 1; r >= 0; r--) {
974
+ let i = e[r], a = i?.node;
975
+ if (!(!a || !x(a)) && !(t && i.experienceId !== t)) if (n.lastStepIndex === -1) n.lastStepIndex = r;
976
+ else {
977
+ n.secondLastStepIndex = r;
982
978
  break;
983
979
  }
984
980
  }
985
- return r === -1 ? e : e.filter((e, n) => e.instanceId !== t || n <= r);
986
- }), e.on(i, (e, { snapshots: t }) => {
987
- let n = new Set(e.map((e) => e.experienceId)), r = [];
988
- for (let e of Object.keys(t)) {
989
- if (n.has(e)) continue;
990
- let i = t[e];
991
- i && r.push(...i);
992
- }
993
- return r.length === 0 ? e : [...e, ...r];
994
- }), e.on(o, (e, t) => [...e, ...t]);
995
- let s = e.map((e) => {
996
- let t = /* @__PURE__ */ new Map();
997
- for (let n of e) t.set(n.experienceId, n.instanceId);
998
- let n = {};
999
- for (let r of e) {
1000
- if (t.get(r.experienceId) !== r.instanceId) continue;
1001
- let e = n[r.experienceId] ?? [];
1002
- e.push(r), n[r.experienceId] = e;
1003
- }
1004
981
  return n;
1005
- });
1006
- return I({
1007
- clock: a,
1008
- source: s,
1009
- fn: (e, { instanceId: t, experienceId: n }) => Ue(e[n] ?? []).map((e) => ({
982
+ }
983
+ return e.on(r, (e, t) => {
984
+ let { secondLastStepIndex: n } = a(e.entries, t.experienceId), r = n === -1 ? e.entries : e.entries.slice(0, n + 1);
985
+ return {
1010
986
  ...e,
1011
- id: re("history-entry"),
1012
- instanceId: t
1013
- })),
1014
- target: o
987
+ entries: r
988
+ };
1015
989
  }), {
1016
990
  push: t,
1017
991
  replace: n,
1018
992
  back: r,
1019
- restoreSnapshots: i,
1020
- seedInstanceFromSnapshot: a,
1021
- entriesStore: e,
1022
- snapshotStore: s
993
+ restore: i,
994
+ entriesStore: e.map((e) => e.entries)
1023
995
  };
1024
996
  });
1025
- function Ge() {
1026
- return R(We);
997
+ function Ue() {
998
+ return R(He);
1027
999
  }
1028
1000
  //#endregion
1029
1001
  //#region src/utils/events.ts
1030
- var Ke = 0, qe = (e) => {
1002
+ var We = 0, Ge = (e) => {
1031
1003
  let t = F([]);
1032
1004
  return t.on(e, (e, t) => [...e, {
1033
- id: Ke++,
1005
+ id: We++,
1034
1006
  at: /* @__PURE__ */ new Date(),
1035
1007
  payload: t
1036
1008
  }]), t;
1037
- }, Je = M("field"), Ye = L(() => {
1038
- let e = Je.store({}), t = j(e, {
1009
+ }, Ke = M("field"), qe = L(() => {
1010
+ let e = Ke.store({}), t = j(e, {
1039
1011
  register(e, t) {
1040
1012
  return {
1041
1013
  ...e,
@@ -1083,13 +1055,13 @@ var Ke = 0, qe = (e) => {
1083
1055
  getByName: c
1084
1056
  };
1085
1057
  });
1086
- function Xe() {
1087
- return R(Ye);
1058
+ function Je() {
1059
+ return R(qe);
1088
1060
  }
1089
1061
  //#endregion
1090
1062
  //#region src/entities/step/step.ts
1091
- var Ze = M("step"), Qe = L(() => {
1092
- let e = Ze.store({}), t = j(e, { register(e, t) {
1063
+ var Ye = M("step"), Xe = L(() => {
1064
+ let e = Ye.store({}), t = j(e, { register(e, t) {
1093
1065
  return {
1094
1066
  ...e,
1095
1067
  [t.step.id]: t.step
@@ -1113,16 +1085,45 @@ var Ze = M("step"), Qe = L(() => {
1113
1085
  indexStore: e
1114
1086
  };
1115
1087
  });
1116
- function $e() {
1117
- return R(Qe);
1088
+ function Ze() {
1089
+ return R(Xe);
1118
1090
  }
1119
- function et(e, t) {
1091
+ function Qe(e, t) {
1092
+ t.register(e);
1093
+ }
1094
+ //#endregion
1095
+ //#region src/entities/content/content.ts
1096
+ var $e = M("content"), et = L(() => {
1097
+ let e = $e.store({}), t = j(e, { register(e, t) {
1098
+ return {
1099
+ ...e,
1100
+ [t.content.id]: t.content
1101
+ };
1102
+ } });
1103
+ function n(e) {
1104
+ t.register({ content: e });
1105
+ }
1106
+ let r = e.map((e) => Object.values(e));
1107
+ function i(t) {
1108
+ return e.map((e) => e[t] ?? null, { skipVoid: !1 });
1109
+ }
1110
+ return {
1111
+ register: n,
1112
+ getById: i,
1113
+ listStore: r,
1114
+ indexStore: e
1115
+ };
1116
+ });
1117
+ function tt() {
1118
+ return R(et);
1119
+ }
1120
+ function nt(e, t) {
1120
1121
  t.register(e);
1121
1122
  }
1122
1123
  //#endregion
1123
1124
  //#region src/entities/action/action.ts
1124
- var tt = M("action"), nt = L(({ client: e }) => {
1125
- let t = tt.store({}), n = j(t, { register(e, t) {
1125
+ var rt = M("action"), it = L(({ client: e }) => {
1126
+ let t = rt.store({}), n = j(t, { register(e, t) {
1126
1127
  return {
1127
1128
  ...e,
1128
1129
  [t.key]: {
@@ -1180,10 +1181,10 @@ var tt = M("action"), nt = L(({ client: e }) => {
1180
1181
  getEvokableAction: s
1181
1182
  };
1182
1183
  });
1183
- function rt(e) {
1184
- return R(nt, e);
1184
+ function at(e) {
1185
+ return R(it, e);
1185
1186
  }
1186
- var it = (e, t, n) => {
1187
+ var ot = (e, t, n) => {
1187
1188
  n.register({
1188
1189
  key: e,
1189
1190
  action: t
@@ -1191,7 +1192,7 @@ var it = (e, t, n) => {
1191
1192
  };
1192
1193
  //#endregion
1193
1194
  //#region src/entities/response/response-validation.ts
1194
- function Z(e, t, n, r) {
1195
+ function X(e, t, n, r) {
1195
1196
  return {
1196
1197
  fieldKey: e.key,
1197
1198
  userMessage: n,
@@ -1199,62 +1200,62 @@ function Z(e, t, n, r) {
1199
1200
  value: t
1200
1201
  };
1201
1202
  }
1202
- function Q(e) {
1203
+ function Z(e) {
1203
1204
  return e === null || e === "" || Array.isArray(e) && !e.length;
1204
1205
  }
1205
- function at(e) {
1206
+ function st(e) {
1206
1207
  return typeof e == "string" || typeof e == "number" || typeof e == "boolean" || e === null;
1207
1208
  }
1208
- function ot(e) {
1209
+ function ct(e) {
1209
1210
  try {
1210
1211
  return JSON.stringify(e), !0;
1211
1212
  } catch {
1212
1213
  return !1;
1213
1214
  }
1214
1215
  }
1215
- function st(e, t) {
1216
+ function lt(e, t) {
1216
1217
  return t.find((t) => t.key === e) ?? null;
1217
1218
  }
1218
- function ct(e, t) {
1219
+ function ut(e, t) {
1219
1220
  return e.multiple && (typeof t == "string" || typeof t == "number" || typeof t == "boolean") ? [t] : t;
1220
1221
  }
1221
- function lt(e, t) {
1222
- if (e.type !== "object" || Q(t)) return null;
1222
+ function dt(e, t) {
1223
+ if (e.type !== "object" || Z(t)) return null;
1223
1224
  if (e.multiple) {
1224
- if (!Array.isArray(t)) return Z(e, t, "This field expects multiple values", "Field expects an array of objects.");
1225
+ if (!Array.isArray(t)) return X(e, t, "This field expects multiple values", "Field expects an array of objects.");
1225
1226
  for (let n of t) {
1226
- if (typeof n != "object" || !n) return Z(e, t, "This field expects object values", "Field expects an array of objects, but received non-object value.");
1227
- if (!ot(n)) return Z(e, t, "This field contains non-serializable data", "Field value contains non-JSON-serializable data (functions, circular references, etc.).");
1227
+ 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.");
1228
+ if (!ct(n)) return X(e, t, "This field contains non-serializable data", "Field value contains non-JSON-serializable data (functions, circular references, etc.).");
1228
1229
  }
1229
1230
  return null;
1230
1231
  }
1231
- return Array.isArray(t) ? Z(e, t, "This field expects a single value", "Field expects a single object, not an array.") : typeof t != "object" || !t ? Z(e, t, "This field expects an object value", "Field expects an object value.") : ot(t) ? null : Z(e, t, "This field contains non-serializable data", "Field value contains non-JSON-serializable data (functions, circular references, etc.).");
1232
+ 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.") : ct(t) ? null : X(e, t, "This field contains non-serializable data", "Field value contains non-JSON-serializable data (functions, circular references, etc.).");
1232
1233
  }
1233
- function ut(e, t) {
1234
- if (Q(t) || !Array.isArray(e.options) || e.options.length === 0) return null;
1234
+ function ft(e, t) {
1235
+ if (Z(t) || !Array.isArray(e.options) || e.options.length === 0) return null;
1235
1236
  let n = Array.isArray(t) ? t : [t];
1236
1237
  if (e.type === "object") {
1237
1238
  let r = new Set(e.options.map((e) => JSON.stringify(e.value)));
1238
- return n.every((e) => r.has(JSON.stringify(e))) ? null : Z(e, t, "This field expects a valid option", "Field expects a valid option from the defined choices.");
1239
+ 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.");
1239
1240
  }
1240
1241
  let r = e.options.map((e) => e.value);
1241
- return n.every((e) => !at(e) || e === null ? !1 : r.includes(e)) ? null : Z(e, t, "This field expects a valid option", `Field expects a valid option. Valid options are: ${r.join(", ")}`);
1242
+ return n.every((e) => !st(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(", ")}`);
1242
1243
  }
1243
- async function dt(t, n, r, i) {
1244
- if (n.validation && !e(n.validation) && !Q(r)) {
1244
+ async function pt(t, n, r, i) {
1245
+ if (n.validation && !e(n.validation) && !Z(r)) {
1245
1246
  let e = i ? {
1246
1247
  $input: r,
1247
1248
  responses: i
1248
1249
  } : { $input: r }, a = await t(n.validation, e);
1249
- if (typeof a == "string") return Z(n, r, a, `Field validation resulted in an error: ${a}.`);
1250
- if (a === !1) return Z(n, r, "This field is invalid", "Field validation resulted in an unspecified error.");
1250
+ if (typeof a == "string") return X(n, r, a, `Field validation resulted in an error: ${a}.`);
1251
+ if (a === !1) return X(n, r, "This field is invalid", "Field validation resulted in an unspecified error.");
1251
1252
  }
1252
- return n.required && Q(r) ? Z(n, r, "This field is required", "Field is required.") : !n.multiple && Array.isArray(r) && r.length > 1 ? Z(n, r, "This field expects a single response", "Field expects a single response.") : null;
1253
+ 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;
1253
1254
  }
1254
1255
  //#endregion
1255
1256
  //#region src/entities/response/response.ts
1256
- var ft = M("response"), pt = L(({ client: e }) => {
1257
- let t = ft.store({}), r = P(), i = P(), a = j(t, {
1257
+ var mt = M("response"), ht = L(({ client: e }) => {
1258
+ let t = mt.store({}), r = P(), i = P(), a = j(t, {
1258
1259
  register(e, t) {
1259
1260
  return {
1260
1261
  ...e,
@@ -1293,7 +1294,7 @@ var ft = M("response"), pt = L(({ client: e }) => {
1293
1294
  ...t,
1294
1295
  ...n
1295
1296
  }, o = Object.entries(n), c = await Promise.allSettled(o.map(async ([t, n]) => {
1296
- let o = st(t, e);
1297
+ let o = lt(t, e);
1297
1298
  if (!o) {
1298
1299
  r.push({
1299
1300
  fieldKey: t,
@@ -1303,17 +1304,17 @@ var ft = M("response"), pt = L(({ client: e }) => {
1303
1304
  });
1304
1305
  return;
1305
1306
  }
1306
- let c = ct(o, n), l = await dt(s, o, c, a);
1307
+ let c = ut(o, n), l = await pt(s, o, c, a);
1307
1308
  if (l) {
1308
1309
  r.push(l);
1309
1310
  return;
1310
1311
  }
1311
- let u = lt(o, c);
1312
+ let u = dt(o, c);
1312
1313
  if (u) {
1313
1314
  r.push(u);
1314
1315
  return;
1315
1316
  }
1316
- let d = ut(o, c);
1317
+ let d = ft(o, c);
1317
1318
  if (d) {
1318
1319
  r.push(d);
1319
1320
  return;
@@ -1392,13 +1393,13 @@ var ft = M("response"), pt = L(({ client: e }) => {
1392
1393
  getByFieldName: _
1393
1394
  };
1394
1395
  });
1395
- function mt(e) {
1396
- return R(pt, e);
1396
+ function gt(e) {
1397
+ return R(ht, e);
1397
1398
  }
1398
1399
  //#endregion
1399
1400
  //#region src/entities/condition/condition.ts
1400
- var ht = M("condition"), gt = L(() => {
1401
- let e = ht.store({}), t = j(e, { register(e, t) {
1401
+ var _t = M("condition"), vt = L(() => {
1402
+ let e = _t.store({}), t = j(e, { register(e, t) {
1402
1403
  return {
1403
1404
  ...e,
1404
1405
  [t.condition.id]: t.condition
@@ -1422,13 +1423,13 @@ var ht = M("condition"), gt = L(() => {
1422
1423
  indexStore: e
1423
1424
  };
1424
1425
  });
1425
- function _t() {
1426
- return R(gt);
1426
+ function yt() {
1427
+ return R(vt);
1427
1428
  }
1428
1429
  //#endregion
1429
1430
  //#region src/utils/api-url.ts
1430
- function vt() {
1431
- if (f()) {
1431
+ function bt() {
1432
+ if (c()) {
1432
1433
  let e = [
1433
1434
  document.currentScript,
1434
1435
  document.getElementById("picked_script"),
@@ -1442,8 +1443,8 @@ function vt() {
1442
1443
  }
1443
1444
  //#endregion
1444
1445
  //#region src/utils/search-params.ts
1445
- function yt() {
1446
- if (!o()) return {};
1446
+ function xt() {
1447
+ if (!s()) return {};
1447
1448
  let e = new URLSearchParams(window.location.search), t = {}, n = /* @__PURE__ */ new Set();
1448
1449
  for (let [t] of e.entries()) t.startsWith("picked-") && n.add(t);
1449
1450
  for (let r of n) {
@@ -1460,13 +1461,13 @@ function yt() {
1460
1461
  }
1461
1462
  //#endregion
1462
1463
  //#region src/entities/session/session.ts
1463
- var bt = O("session", "global");
1464
- function xt() {
1465
- 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)}`;
1464
+ var St = O("session", "global");
1465
+ function Ct() {
1466
+ return p() ? 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)}`;
1466
1467
  }
1467
- function St() {
1468
- if (!u()) return null;
1469
- let e = E.get(bt);
1468
+ function wt() {
1469
+ if (!m()) return null;
1470
+ let e = E.get(St);
1470
1471
  if (!e.isSet()) return null;
1471
1472
  try {
1472
1473
  return e.json();
@@ -1474,8 +1475,8 @@ function St() {
1474
1475
  return null;
1475
1476
  }
1476
1477
  }
1477
- var Ct = L(() => {
1478
- let e = St(), t = { id: e?.id ?? xt() };
1478
+ var Tt = L(() => {
1479
+ let e = wt(), t = { id: e?.id ?? Ct() };
1479
1480
  e?.isUser !== void 0 && (t.isUser = e.isUser), e?.identifiers && Object.keys(e.identifiers).length > 0 && (t.identifiers = e.identifiers);
1480
1481
  let n = F(t), r = j(n, {
1481
1482
  setIsUser: (e, t) => ({
@@ -1503,8 +1504,8 @@ var Ct = L(() => {
1503
1504
  target: k({
1504
1505
  source: n,
1505
1506
  effect: (e) => {
1506
- if (u()) try {
1507
- E.get(bt).set(e);
1507
+ if (m()) try {
1508
+ E.get(St).set(e);
1508
1509
  } catch {}
1509
1510
  }
1510
1511
  })
@@ -1515,39 +1516,39 @@ var Ct = L(() => {
1515
1516
  removeIdentifier: r.removeIdentifier
1516
1517
  };
1517
1518
  });
1518
- function wt() {
1519
- return R(Ct, void 0);
1519
+ function Et() {
1520
+ return R(Tt, void 0);
1520
1521
  }
1521
1522
  //#endregion
1522
1523
  //#region src/utils/picked-config.ts
1523
- function Tt() {
1524
- if (o()) return globalThis.window.pickedConfig;
1524
+ function Dt() {
1525
+ if (s()) return globalThis.window.pickedConfig;
1525
1526
  }
1526
- function Et() {
1527
- if (o()) return Tt()?.projectId;
1527
+ function Ot() {
1528
+ if (s()) return Dt()?.projectId;
1528
1529
  }
1529
- function Dt() {
1530
- if (!f()) return;
1530
+ function kt() {
1531
+ if (!c()) return;
1531
1532
  let e = document.getElementById("picked_script") || document.querySelector("script#picked") || document.getElementById("cvly");
1532
1533
  if (e) return e.dataset.projectid || e.getAttribute("project-id") || void 0;
1533
1534
  }
1534
- function Ot(e) {
1535
+ function At(e) {
1535
1536
  if (e.projectId) return e.projectId;
1536
- let t = Et();
1537
+ let t = Ot();
1537
1538
  if (t) return t;
1538
- let n = Dt();
1539
+ let n = kt();
1539
1540
  if (n) return n;
1540
1541
  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.");
1541
1542
  }
1542
1543
  //#endregion
1543
1544
  //#region src/utils/render-string.ts
1544
- function $(e) {
1545
+ function Q(e) {
1545
1546
  return e == null || e === "" || Number.isNaN(e);
1546
1547
  }
1547
- var kt = {
1548
- default: (e, t) => $(e) ? String(t ?? "") : String(e),
1549
- append: (e, t) => t && !$(e) ? `${e} ${t}` : e,
1550
- prepend: (e, t) => t && !$(e) ? `${t} ${e}` : e,
1548
+ var jt = {
1549
+ default: (e, t) => Q(e) ? String(t ?? "") : String(e),
1550
+ append: (e, t) => t && !Q(e) ? `${e} ${t}` : e,
1551
+ prepend: (e, t) => t && !Q(e) ? `${t} ${e}` : e,
1551
1552
  upper: (e) => typeof e == "string" ? e.toUpperCase() : e,
1552
1553
  lower: (e) => typeof e == "string" ? e.toLowerCase() : e,
1553
1554
  capitalize: (e) => typeof e == "string" ? e.charAt(0).toUpperCase() + e.slice(1) : e,
@@ -1565,24 +1566,24 @@ var kt = {
1565
1566
  return e instanceof Set ? t.format(Array.from(e).map(String)) : e;
1566
1567
  }
1567
1568
  };
1568
- function At(e) {
1569
+ function Mt(e) {
1569
1570
  return typeof e == "object" && !!e;
1570
1571
  }
1571
- function jt(e, t) {
1572
+ function Nt(e, t) {
1572
1573
  let n = t;
1573
- for (let t of e.split(".")) if (At(n) && t in n) n = n[t];
1574
+ for (let t of e.split(".")) if (Mt(n) && t in n) n = n[t];
1574
1575
  else return;
1575
1576
  return typeof n == "function" ? n() : n;
1576
1577
  }
1577
- function Mt(e, t) {
1578
- let n = e.split("|").map((e) => e.trim()), r = jt(n.shift() ?? "", t);
1578
+ function Pt(e, t) {
1579
+ let n = e.split("|").map((e) => e.trim()), r = Nt(n.shift() ?? "", t);
1579
1580
  for (let e of n) {
1580
- let [t, ...n] = e.split(":"), i = t?.trim() ?? "", a = n.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g, ""), o = kt[i];
1581
+ let [t, ...n] = e.split(":"), i = t?.trim() ?? "", a = n.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g, ""), o = jt[i];
1581
1582
  o && (r = o(r, a));
1582
1583
  }
1583
- return $(r) ? "" : typeof r == "object" ? JSON.stringify(r) : String(r);
1584
+ return Q(r) ? "" : typeof r == "object" ? JSON.stringify(r) : String(r);
1584
1585
  }
1585
- function Nt(e, t) {
1586
+ function Ft(e, t) {
1586
1587
  let n = "", r = 0;
1587
1588
  for (; r < e.length;) if (e[r] === "{" && e[r + 1] === "{") {
1588
1589
  r += 2;
@@ -1594,15 +1595,17 @@ function Nt(e, t) {
1594
1595
  }
1595
1596
  i += e[r++];
1596
1597
  }
1597
- n += Mt(i.trim(), t);
1598
+ n += Pt(i.trim(), t);
1598
1599
  } else n += e[r++];
1599
1600
  return n;
1600
1601
  }
1601
1602
  //#endregion
1602
1603
  //#region src/picked.ts
1603
- var Pt = class {
1604
+ var $ = class {
1604
1605
  static logger = r;
1605
1606
  options;
1607
+ dataSource = null;
1608
+ contentLoader;
1606
1609
  plugins = {};
1607
1610
  eventBus = P();
1608
1611
  events;
@@ -1610,21 +1613,23 @@ var Pt = class {
1610
1613
  apiUrl;
1611
1614
  dashboardUrl;
1612
1615
  documentationSiteUrl;
1613
- session = wt();
1614
- searchParams = yt();
1615
- history = Ge();
1616
- components = _e({ client: this });
1617
- experienceInstances = x({ client: this });
1618
- experiences = le({ client: this });
1619
- frameworks = be({ client: this });
1616
+ session = Et();
1617
+ searchParams = xt();
1618
+ history = Ue();
1619
+ components = he({ client: this });
1620
+ experienceInstances = S({ client: this });
1621
+ experiences = se({ client: this });
1622
+ frameworks = ve({ client: this });
1620
1623
  predicates = Ie({ client: this });
1621
- features = Be({ client: this });
1622
- conditions = _t();
1623
- fields = Xe();
1624
- responses = mt({ client: this });
1625
- steps = $e();
1626
- actions = rt({ client: this });
1627
- stateSnapshotStore = Ce({ client: this });
1624
+ features = ze({ client: this });
1625
+ conditions = yt();
1626
+ fields = Je();
1627
+ responses = gt({ client: this });
1628
+ steps = Ze();
1629
+ contents = tt();
1630
+ actions = at({ client: this });
1631
+ conditionResults = C();
1632
+ stateSnapshotStore = xe({ client: this });
1628
1633
  evaluateRuleLogicFx = Oe({ client: this });
1629
1634
  start;
1630
1635
  readyStore;
@@ -1637,31 +1642,34 @@ var Pt = class {
1637
1642
  effect: (e, { template: t, context: n }) => {
1638
1643
  let r = {};
1639
1644
  for (let t of e) r[t.fieldKey] = t.value;
1640
- return Nt(t, {
1645
+ return Ft(t, {
1641
1646
  ...n,
1642
1647
  responses: r
1643
1648
  });
1644
1649
  }
1645
1650
  });
1646
1651
  constructor(e) {
1647
- this.events = qe(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({
1652
+ this.events = Ge(this.eventBus), this.projectId = At(e), this.options = Object.freeze(e), this.apiUrl = e.apiUrl || bt(), 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({
1648
1653
  type: "load",
1649
1654
  version: ne()
1650
- });
1655
+ }), this.maybeStartPreviewBridge();
1656
+ }
1657
+ maybeStartPreviewBridge() {
1658
+ !s() || !h() || this.searchParams["preview-token"]?.[0] && import("../preview-bridge-eBbZClad.js").then((e) => e.initPreviewBridge()).catch(() => void 0);
1651
1659
  }
1652
1660
  registerFramework = (e) => {
1653
- xe(e, this.frameworks);
1661
+ ye(e, this.frameworks);
1654
1662
  };
1655
1663
  registerComponent = (e, t) => {
1656
1664
  B(e, t, this.components);
1657
1665
  };
1658
1666
  registerPlugin = (e) => {
1659
- fe(this, e, this.plugins);
1667
+ ue(this, e, this.plugins);
1660
1668
  let t = this.plugins[e.name];
1661
1669
  t?.onStart && this.lifecycle.registerPluginStartHook(t.onStart);
1662
1670
  };
1663
1671
  registerFeature = (e, t) => {
1664
- Ve(e, t, this.features);
1672
+ Be(e, t, this.features);
1665
1673
  };
1666
1674
  registerPredicate = (e, t) => {
1667
1675
  Le(e, t, this.predicates);
@@ -1673,10 +1681,13 @@ var Pt = class {
1673
1681
  this.fields.register(e);
1674
1682
  };
1675
1683
  registerStep = (e) => {
1676
- et(e, this.steps);
1684
+ Qe(e, this.steps);
1685
+ };
1686
+ registerContent = (e) => {
1687
+ nt(e, this.contents);
1677
1688
  };
1678
1689
  registerAction = (e, t) => {
1679
- it(e, t, this.actions);
1690
+ ot(e, t, this.actions);
1680
1691
  };
1681
1692
  registerExperience = (e) => {
1682
1693
  e.component && B(`experience:${e.id}`, e.component, this.components), this.experiences.register(e);
@@ -1764,20 +1775,20 @@ var Pt = class {
1764
1775
  };
1765
1776
  //#endregion
1766
1777
  //#region src/entities/component/lazyComponent.ts
1767
- function Ft(e) {
1778
+ function It(e) {
1768
1779
  return {
1769
1780
  $$type: "lazy-component",
1770
1781
  load: e
1771
1782
  };
1772
1783
  }
1773
- function It(e) {
1784
+ function Lt(e) {
1774
1785
  return typeof e == "object" && !!e && "$$type" in e && e.$$type === "lazy-component";
1775
1786
  }
1776
1787
  //#endregion
1777
1788
  //#region src/exports.ts
1778
- var Lt = (e) => {
1779
- let t = new Pt(e);
1780
- return d(t), t;
1789
+ var Rt = (e) => {
1790
+ let t = new $(e);
1791
+ return u(t), t;
1781
1792
  };
1782
1793
  //#endregion
1783
- export { Pt as Picked, Lt as createClient, de as createPluginEffect, O as createStorageKey, n as evaluateRuleLogic, Tt as getPickedConfig, It as isLazyLoader, w as isPickedRoot, Ft as lazyComponent, E as localStore, D as sessionStore, T 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 };
1794
+ export { $ as Picked, Rt as createClient, le as createPluginEffect, O as createStorageKey, n as evaluateRuleLogic, Dt as getPickedConfig, h as isInsideIframe, Lt as isLazyLoader, _ as isPickedRoot, It as lazyComponent, E as localStore, D as sessionStore, T as subscribe, d as supportsCookies, p as supportsCryptoRandomUUID, c as supportsDocument, i as supportsHistory, f as supportsIntersectionObserver, m as supportsLocalStorage, a as supportsLocation, l as supportsSessionStorage, g as supportsShadowRoot, o as supportsWebComponents, s as supportsWindow };