@picked/client 0.0.1-dev.1764626732123 → 0.0.1-dev.1764631564450

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 (44) hide show
  1. package/dist/cjs/index.js +1 -1
  2. package/dist/cjs/plugins/responses-browser-storage/index.js +1 -1
  3. package/dist/esm/index.js +774 -145
  4. package/dist/esm/plugins/responses-browser-storage/index.js +22 -23
  5. package/dist/esm/plugins/single-page-app/index.js +3 -3
  6. package/dist/esm/plugins/web-components/index.js +1 -1
  7. package/dist/esm/plugins/window-object/index.js +1 -1
  8. package/dist/esm/server/index.js +7 -7
  9. package/dist/{experience-instance-C2AnM2J_.js → experience-instance-CMrX6QA2.js} +7 -7
  10. package/dist/{supports-DBMT17KZ.js → supports-BjhuLJ8z.js} +10 -10
  11. package/dist/types/entities/action/action.d.ts +2 -4
  12. package/dist/types/entities/action/action.d.ts.map +1 -1
  13. package/dist/types/entities/feature/feature.d.ts +3 -5
  14. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  15. package/dist/types/entities/field/field.d.ts +7 -0
  16. package/dist/types/entities/field/field.d.ts.map +1 -1
  17. package/dist/types/entities/predicate/predicate.d.ts +5 -4
  18. package/dist/types/entities/predicate/predicate.d.ts.map +1 -1
  19. package/dist/types/entities/response/response.d.ts +1 -4
  20. package/dist/types/entities/response/response.d.ts.map +1 -1
  21. package/dist/types/index.d.ts +0 -1
  22. package/dist/types/index.d.ts.map +1 -1
  23. package/dist/types/picked.d.ts +8 -11
  24. package/dist/types/picked.d.ts.map +1 -1
  25. package/dist/types/plugins/create-experience/create-experience.d.ts +1 -0
  26. package/dist/types/plugins/create-experience/create-experience.d.ts.map +1 -1
  27. package/dist/types/plugins/responses-browser-storage/plugin.d.ts.map +1 -1
  28. package/dist/types/utils/events.d.ts +3 -0
  29. package/dist/types/utils/events.d.ts.map +1 -1
  30. package/package.json +1 -7
  31. package/dist/cjs/plugins/shopify/index.js +0 -1
  32. package/dist/esm/plugins/shopify/index.js +0 -123
  33. package/dist/types/plugins/shopify/global-obj.d.ts +0 -49
  34. package/dist/types/plugins/shopify/global-obj.d.ts.map +0 -1
  35. package/dist/types/plugins/shopify/index.d.ts +0 -6
  36. package/dist/types/plugins/shopify/index.d.ts.map +0 -1
  37. package/dist/types/plugins/shopify/picked-config.d.ts +0 -103
  38. package/dist/types/plugins/shopify/picked-config.d.ts.map +0 -1
  39. package/dist/types/plugins/shopify/plugin.d.ts +0 -3
  40. package/dist/types/plugins/shopify/plugin.d.ts.map +0 -1
  41. package/dist/types/plugins/shopify/predicates.d.ts +0 -42
  42. package/dist/types/plugins/shopify/predicates.d.ts.map +0 -1
  43. package/dist/user-session-BTaOgTo_.cjs +0 -1
  44. package/dist/user-session-YEUZkOjt.js +0 -718
package/dist/esm/index.js CHANGED
@@ -1,120 +1,749 @@
1
- var y = Object.defineProperty;
2
- var x = (i, e, t) => e in i ? y(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t;
3
- var n = (i, e, t) => x(i, typeof e != "symbol" ? e + "" : e, t);
4
- import { c as I, a as P, b as k, d as w, e as E, f as v, g as S, h as F, i as C, j as b, p as A, s as R, k as u, l as j, m as B, n as z, o as U, q as $, r as K, t as L, u as d } from "../user-session-YEUZkOjt.js";
5
- import { l as c } from "../logger-C9a75KZn.js";
6
- import { c as O, d as W, e as l } from "../experience-instance-C2AnM2J_.js";
7
- import { i as pe } from "../experience-instance-C2AnM2J_.js";
8
- import { createEvent as _ } from "effector";
9
- import { s as f, a as D, b as H } from "../supports-DBMT17KZ.js";
10
- import { g as de, k as le, d as he, i as fe, e as me, c as ge, f as ye, h as xe, j as Ie } from "../supports-DBMT17KZ.js";
11
- import { c as q, s as h } from "../storage-Cb_71y48.js";
12
- import { l as ke, a as we } from "../storage-Cb_71y48.js";
13
- const N = (i, e, t) => {
14
- const s = e.name, r = e.setup(i);
15
- if (r) {
16
- const o = t[s] ?? {};
17
- t[s] = Object.freeze({ ...o, ...r });
18
- }
19
- }, T = () => _(), V = () => "0.0.1-dev.1764626732123";
20
- function G() {
21
- if (f()) {
22
- const i = [
1
+ var Y = Object.defineProperty;
2
+ var J = (t, e, r) => e in t ? Y(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
3
+ var m = (t, e, r) => J(t, typeof e != "symbol" ? e + "" : e, r);
4
+ import { createDomain as b, createApi as I, createEffect as M, attach as Q, sample as x, combine as O, createEvent as C } from "effector";
5
+ import { createFactory as v, invoke as w } from "@withease/factories";
6
+ import { g as _, t as X, c as Z, i as ee, e as $, a as te, b as re, d as se } from "../experience-instance-CMrX6QA2.js";
7
+ import { f as kt } from "../experience-instance-CMrX6QA2.js";
8
+ import { l as k } from "../logger-C9a75KZn.js";
9
+ import { c as R, s as j, l as D } from "../storage-Cb_71y48.js";
10
+ import { a as wt } from "../storage-Cb_71y48.js";
11
+ import { g as ne } from "../id-BW-g3y32.js";
12
+ import { i as oe } from "../object-JwZ58NOH.js";
13
+ import { s as H, a as ie, b as ae, c as ce, d as ue } from "../supports-BjhuLJ8z.js";
14
+ import { h as bt, f as It, j as xt, e as Et, g as Pt, i as Rt, k as Bt } from "../supports-BjhuLJ8z.js";
15
+ const K = b("experience"), le = v(
16
+ ({ client: t, experience: e }) => {
17
+ const r = K.store(e), n = I(r, {
18
+ merge(l, h) {
19
+ return {
20
+ ...l,
21
+ ...h.experience
22
+ };
23
+ }
24
+ }), c = r.map((l) => ({
25
+ name: l.name,
26
+ decisionLogic: l.decide,
27
+ targetSelectors: l.targets,
28
+ initializeOpenLogic: e.initializeOpen
29
+ })), u = t.components.listStore.map(
30
+ (l) => l.find((h) => h.name === `experience:${e.id}`) || l.find((h) => h.name === "experience"),
31
+ { skipVoid: !1 }
32
+ ), s = r.map((l) => ({
33
+ steps: l.steps,
34
+ nodes: l.nodes,
35
+ edges: l.edges,
36
+ conditionals: l.conditionals
37
+ })), o = e.actions ?? [];
38
+ return {
39
+ id: e.id,
40
+ configStore: c,
41
+ treeStore: s,
42
+ componentStore: u,
43
+ actions: o,
44
+ merge: n.merge
45
+ };
46
+ }
47
+ );
48
+ function de(t) {
49
+ return w(le, t);
50
+ }
51
+ const pe = v(({ client: t }) => {
52
+ const e = K.store({}), r = I(e, {
53
+ register(s, o) {
54
+ return {
55
+ ...s,
56
+ [o.id]: o
57
+ };
58
+ }
59
+ });
60
+ function n(s) {
61
+ const o = e.getState()[s.id];
62
+ if (o) {
63
+ o.merge({ experience: s, strategy: "override" });
64
+ return;
65
+ }
66
+ const l = de({ client: t, experience: s });
67
+ r.register(l);
68
+ }
69
+ const c = e.map((s) => Object.values(s));
70
+ function u(s) {
71
+ return e.map((o) => o[s], { skipVoid: !1 });
72
+ }
73
+ return {
74
+ register: n,
75
+ getById: u,
76
+ listStore: c
77
+ };
78
+ });
79
+ function ge(t) {
80
+ return w(pe, t);
81
+ }
82
+ const fe = (t, e) => {
83
+ e.register(t);
84
+ }, q = (t, e) => {
85
+ const { targetSelectors: r } = e.configStore.getState(), n = _(r, e.id);
86
+ n.forEach(
87
+ ({ elements: u }) => u.forEach((s) => X(s, e.id))
88
+ ), Z(n, e.id).forEach((u) => {
89
+ t.experienceInstances.spawn(e, u);
90
+ });
91
+ }, V = async (t) => {
92
+ await Promise.all(
93
+ t.experiences.listStore.getState().map(async (e) => {
94
+ await me(t, e) && q(t, e);
95
+ })
96
+ );
97
+ }, me = async (t, e) => {
98
+ const { decisionLogic: r, targetSelectors: n } = e.configStore.getState();
99
+ return _(n, e.id).length < 1 || n.length === 0 ? !1 : r && ee(r) ? await $(t, r) === !0 : !0;
100
+ }, he = (t, e, r) => {
101
+ const n = e.name, c = e.setup(t);
102
+ if (c) {
103
+ const u = r[n] ?? {};
104
+ r[n] = Object.freeze({ ...u, ...c });
105
+ }
106
+ }, ye = b("component"), Se = v(
107
+ ({ client: t, component: e, name: r }) => {
108
+ const n = t.frameworks.getByName(e.frameworkName);
109
+ return {
110
+ name: r,
111
+ component: e,
112
+ frameworkStore: n
113
+ };
114
+ }
115
+ );
116
+ function ke(t) {
117
+ return w(Se, t);
118
+ }
119
+ const ve = v(({ client: t }) => {
120
+ const e = ye.store({}), r = I(e, {
121
+ register(s, o) {
122
+ return {
123
+ ...s,
124
+ [o.name]: o
125
+ };
126
+ }
127
+ });
128
+ function n(s, o) {
129
+ e.getState()[s] && k(
130
+ "warn",
131
+ `Component '${s}' already registered. Registering again will override the previous registration.`
132
+ );
133
+ const h = ke({ client: t, name: s, component: o });
134
+ r.register(h);
135
+ }
136
+ const c = e.map((s) => Object.values(s));
137
+ function u(s) {
138
+ return e.map((o) => o[s], { skipVoid: !1 });
139
+ }
140
+ return {
141
+ register: n,
142
+ getByName: u,
143
+ listStore: c
144
+ };
145
+ });
146
+ function we(t) {
147
+ return w(ve, t);
148
+ }
149
+ const T = (t, e, r) => {
150
+ r.register(t, e);
151
+ }, Fe = b("framework"), be = v(({ client: t }) => {
152
+ const e = Fe.store({}), r = I(e, {
153
+ register(s, o) {
154
+ return {
155
+ ...s,
156
+ [o.name]: o.framework
157
+ };
158
+ }
159
+ });
160
+ function n(s, o) {
161
+ e.getState()[s] && k(
162
+ "warn",
163
+ `Framework '${s}' already registered. Registering again will override the previous registration.`
164
+ ), r.register({ name: s, framework: o });
165
+ }
166
+ const c = e.map((s) => Object.values(s));
167
+ function u(s) {
168
+ return e.map((o) => o[s], { skipVoid: !1 });
169
+ }
170
+ return {
171
+ register: n,
172
+ getByName: u,
173
+ listStore: c
174
+ };
175
+ });
176
+ function Ie(t) {
177
+ return w(be, t);
178
+ }
179
+ const xe = (t, e) => {
180
+ e.register(t.name, t);
181
+ }, Ee = 6e3, N = R("last_ping", "global"), Pe = (t) => `${t}/api/v1/ping`, Re = async (t) => {
182
+ try {
183
+ const e = Date.now(), r = localStorage.getItem(N);
184
+ if (r && e - parseInt(r) < Ee)
185
+ return !0;
186
+ const n = Pe(t.apiUrl), c = {
187
+ projectId: t.projectId,
188
+ path: window.location.pathname
189
+ }, u = JSON.stringify(c), s = {
190
+ "Content-Type": "application/json"
191
+ }, o = document.getElementById("picked_script"), l = o == null ? void 0 : o.dataset.verceltoken;
192
+ l && (s["x-vercel-protection-bypass"] = l);
193
+ const S = (await fetch(n, {
194
+ method: "POST",
195
+ headers: s,
196
+ body: u
197
+ })).ok;
198
+ return S && localStorage.setItem(N, e.toString()), S;
199
+ } catch (e) {
200
+ return k("error", e), !1;
201
+ }
202
+ };
203
+ function Be(t) {
204
+ const e = typeof window < "u", r = {
205
+ client: t,
206
+ responses: t.responses.listStore.getState(),
207
+ fields: t.fields.listStore.getState(),
208
+ location: e ? window.location : void 0,
209
+ document: e ? window.document : void 0,
210
+ sessionStorage: e ? window.sessionStorage : void 0,
211
+ localStorage: e ? window.localStorage : void 0
212
+ };
213
+ return Object.freeze(r);
214
+ }
215
+ const Ae = b("predicate"), $e = v(({ client: t }) => {
216
+ const e = Ae.store({}), r = I(e, {
217
+ register(s, o) {
218
+ return {
219
+ ...s,
220
+ [o.name]: {
221
+ name: o.name,
222
+ predicate: o.predicate
223
+ }
224
+ };
225
+ }
226
+ });
227
+ function n(s, o) {
228
+ e.getState()[s] && k(
229
+ "warn",
230
+ `Predicate '${s}' already registered. Registering again will override the previous registration.`
231
+ ), r.register(Object.freeze({ name: s, predicate: o }));
232
+ }
233
+ const c = e.map((s) => Object.values(s));
234
+ function u(s) {
235
+ return e.map((o) => o[s], { skipVoid: !1 });
236
+ }
237
+ return {
238
+ register: n,
239
+ getByName: u,
240
+ listStore: c
241
+ };
242
+ });
243
+ function je(t) {
244
+ return w($e, t);
245
+ }
246
+ const Oe = (t, e, r) => {
247
+ r.register(t, e);
248
+ }, z = b("feature"), Ce = v(({ client: t }) => {
249
+ const e = z.store({}), r = z.store([]), n = I(e, {
250
+ register(d, a) {
251
+ return {
252
+ ...d,
253
+ [a.id]: a.feature
254
+ };
255
+ }
256
+ });
257
+ function c(d, a) {
258
+ e.getState()[d] && k(
259
+ "warn",
260
+ `Feature '${d}' already registered. Registering again will override the previous registration.`
261
+ );
262
+ const p = {
263
+ id: d,
264
+ feature: {
265
+ ...a,
266
+ id: d
267
+ }
268
+ };
269
+ n.register(
270
+ Object.freeze({
271
+ id: d,
272
+ feature: p
273
+ })
274
+ );
275
+ }
276
+ const u = M(
277
+ async ({
278
+ id: d,
279
+ key: a,
280
+ storage: i = "local"
281
+ }) => {
282
+ const p = R(`feature:${d}:${a}`, "global"), g = (i === "session" ? j : D).get(p).boolean();
283
+ return g === null ? null : { id: d, key: a, bucket: g, storage: i };
284
+ }
285
+ ), s = M((d) => {
286
+ if (!d)
287
+ return null;
288
+ const a = R(`feature:${d.id}:${d.key}`, "global");
289
+ (d.storage === "session" ? j : D).set(a, d.bucket);
290
+ }), o = /* @__PURE__ */ new Map(), l = Q({
291
+ source: { allFeaturesStore: e, resolvedFeaturesStore: r },
292
+ effect: async ({ allFeaturesStore: d, resolvedFeaturesStore: a }, { id: i, decide: p, key: f }) => {
293
+ const g = a.find(
294
+ (A) => A.id === i && A.key === f
295
+ );
296
+ if (g)
297
+ return g;
298
+ const y = d[i];
299
+ if (!y)
300
+ throw new Error(`Feature with id '${i}' not found`);
301
+ const F = o.get(`${i}:${f}`);
302
+ if (F !== void 0) {
303
+ const A = await F;
304
+ return { id: y.id, bucket: A, key: f, storage: y.feature.storage };
305
+ }
306
+ const B = p();
307
+ o.set(`${i}:${f}`, B);
308
+ const E = await B;
309
+ return { id: y.id, bucket: E, key: f, storage: y.feature.storage };
310
+ }
311
+ });
312
+ x({
313
+ clock: n.register,
314
+ fn: (d) => {
315
+ const { id: a, feature: i } = d;
316
+ return { id: a, key: i.feature.key, storage: i.feature.storage };
317
+ },
318
+ target: u
319
+ }), x({
320
+ source: e,
321
+ clock: l.doneData,
322
+ fn: (d, a) => {
323
+ var y;
324
+ const { id: i, bucket: p, storage: f } = a, g = (y = d[i]) == null ? void 0 : y.feature.key;
325
+ return g ? { key: g, id: i, bucket: p, storage: f } : null;
326
+ },
327
+ target: s
328
+ });
329
+ const h = O({ allFeaturesStore: e, resolvedFeaturesStore: r }).map(
330
+ ({
331
+ allFeaturesStore: d,
332
+ resolvedFeaturesStore: a
333
+ }) => Object.values(d).map((i) => {
334
+ const p = a.find(
335
+ (f) => f.id === i.id && f.key === i.feature.key
336
+ );
337
+ return p ? {
338
+ id: i.id,
339
+ name: i.feature.name,
340
+ key: i.feature.key,
341
+ getBucket: () => ({ id: i.id, bucket: p.bucket }),
342
+ isResolved: !0
343
+ } : {
344
+ id: i.id,
345
+ name: i.feature.name,
346
+ key: i.feature.key,
347
+ getBucket: async () => await l(i.feature),
348
+ isResolved: !1
349
+ };
350
+ })
351
+ );
352
+ x({
353
+ clock: l.doneData,
354
+ source: { resolvedFeatures: r },
355
+ filter: ({ resolvedFeatures: d }, { id: a, key: i }) => !d.some(
356
+ (f) => f.id === a && f.key === i
357
+ ),
358
+ fn: (d, a) => a,
359
+ target: t.eventBus.prepend((d) => ({
360
+ type: "feature_decide",
361
+ feature: d
362
+ }))
363
+ }), x({
364
+ clock: [u.doneData, l.doneData],
365
+ source: r,
366
+ fn: (d, a) => !a || d.some(
367
+ (p) => p.id === a.id && p.key === a.key
368
+ ) ? d : [...d, a],
369
+ target: r
370
+ });
371
+ function S(d) {
372
+ return e.map((a) => a[d], { skipVoid: !1 });
373
+ }
374
+ return {
375
+ register: c,
376
+ getByName: S,
377
+ listStore: h
378
+ };
379
+ });
380
+ function De(t) {
381
+ return w(Ce, t);
382
+ }
383
+ const Me = (t, e, r) => {
384
+ r.register(t, e);
385
+ }, P = b("history");
386
+ function L(t, e) {
387
+ return {
388
+ // eslint-disable-next-line sonarjs/pseudo-random
389
+ id: ne(`history-entry-${Date.now()}-${Math.random()}}`),
390
+ node: e,
391
+ at: Date.now(),
392
+ experienceId: t
393
+ };
394
+ }
395
+ const Ve = v(() => {
396
+ const t = P.store({ entries: [] }), e = P.event(), r = P.event(), n = P.event(), c = P.event();
397
+ t.on(e, (s, o) => ({
398
+ entries: [...s.entries, L(o.experienceId, o.node)]
399
+ })), t.on(r, (s, o) => ({
400
+ entries: [
401
+ ...s.entries.slice(0, -1),
402
+ L(o.experienceId, o.node)
403
+ ]
404
+ })), t.on(c, (s, o) => o);
405
+ function u(s, o) {
406
+ const l = { lastStepIndex: -1, secondLastStepIndex: -1 };
407
+ for (let h = s.length - 1; h >= 0; h--) {
408
+ const S = s[h], d = S == null ? void 0 : S.node;
409
+ if (!(!d || !te(d)) && !(o && (S == null ? void 0 : S.experienceId) !== o))
410
+ if (l.lastStepIndex === -1)
411
+ l.lastStepIndex = h;
412
+ else {
413
+ l.secondLastStepIndex = h;
414
+ break;
415
+ }
416
+ }
417
+ return l;
418
+ }
419
+ return t.on(n, (s, o) => {
420
+ const { secondLastStepIndex: l } = u(s.entries, o.experienceId), h = l !== -1 ? s.entries.slice(0, l + 1) : s.entries;
421
+ return {
422
+ ...s,
423
+ entries: h
424
+ };
425
+ }), {
426
+ push: e,
427
+ replace: r,
428
+ back: n,
429
+ restore: c,
430
+ entriesStore: t.map((s) => s.entries)
431
+ };
432
+ });
433
+ function Te() {
434
+ return w(Ve);
435
+ }
436
+ const Ne = () => C(), ze = b("field"), Le = v(() => {
437
+ const t = ze.store({}), e = I(t, {
438
+ register(s, o) {
439
+ return {
440
+ ...s,
441
+ [o.field.id]: o.field
442
+ };
443
+ }
444
+ });
445
+ function r(s) {
446
+ e.register({ field: s });
447
+ }
448
+ const n = t.map((s) => Object.values(s));
449
+ function c(s) {
450
+ return t.map((o) => o[s] || null);
451
+ }
452
+ function u(s) {
453
+ return t.map((o) => Object.values(o).find((l) => l.name === s) || null);
454
+ }
455
+ return {
456
+ register: r,
457
+ getById: c,
458
+ listStore: n,
459
+ getByName: u
460
+ };
461
+ });
462
+ function Ue() {
463
+ return w(Le);
464
+ }
465
+ const _e = (t, e) => {
466
+ e.register(t);
467
+ }, He = b("action"), Ke = v(() => {
468
+ const t = He.store({}), e = I(t, {
469
+ register(u, s) {
470
+ return {
471
+ ...u,
472
+ [s.name]: {
473
+ name: s.name,
474
+ action: s.action
475
+ }
476
+ };
477
+ }
478
+ });
479
+ function r(u, s) {
480
+ e.register({ name: u, action: s });
481
+ }
482
+ const n = t.map((u) => Object.values(u));
483
+ function c(u) {
484
+ return t.map((s) => s[u], { skipVoid: !1 });
485
+ }
486
+ return {
487
+ register: r,
488
+ getByName: c,
489
+ listStore: n
490
+ };
491
+ });
492
+ function qe() {
493
+ return w(Ke);
494
+ }
495
+ const Ge = (t, e, r) => {
496
+ r.register(t, e);
497
+ };
498
+ function U(t) {
499
+ return typeof t > "u" || t === null || t === "" || Array.isArray(t) && !t.length;
500
+ }
501
+ const We = b("response"), Ye = v(({ client: t }) => {
502
+ const e = We.store({}), r = C(), n = C(), c = I(e, {
503
+ register(a, i) {
504
+ return {
505
+ ...a,
506
+ [i.fieldId]: i.response
507
+ };
508
+ },
509
+ registerBatch(a, i) {
510
+ return {
511
+ ...a,
512
+ ...i
513
+ };
514
+ },
515
+ clear(a, i) {
516
+ const { [i]: p, ...f } = a;
517
+ return f;
518
+ },
519
+ clearAll() {
520
+ return {};
521
+ }
522
+ });
523
+ function u(a, i) {
524
+ c.register({ fieldId: a, response: i });
525
+ }
526
+ async function s(a) {
527
+ const i = [];
528
+ return await Promise.allSettled(
529
+ Object.entries(a).map(async ([p, f]) => {
530
+ let g = f;
531
+ const y = t.fields.getById(p).getState();
532
+ if (!y) {
533
+ i.push({
534
+ fieldId: p,
535
+ userMessage: `Field '${p}' not found`,
536
+ systemMessage: `No field with ID '${p}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,
537
+ value: g
538
+ });
539
+ return;
540
+ }
541
+ if (y.multiple && (typeof g == "string" || typeof g == "number" || typeof g == "boolean") && (g = [g]), y.validation && !oe(y.validation) && !U(g)) {
542
+ const F = await $(t, y.validation, {
543
+ $input: g
544
+ });
545
+ if (typeof F == "string") {
546
+ i.push({
547
+ fieldId: p,
548
+ userMessage: F,
549
+ systemMessage: `Field validation resulted in an error: ${F}.`,
550
+ value: g
551
+ });
552
+ return;
553
+ }
554
+ if (F === !1) {
555
+ i.push({
556
+ fieldId: p,
557
+ userMessage: "This field is invalid",
558
+ systemMessage: "Field validation resulted in an unspecified error.",
559
+ value: g
560
+ });
561
+ return;
562
+ }
563
+ }
564
+ if (y.required && U(g)) {
565
+ i.push({
566
+ fieldId: p,
567
+ userMessage: "This field is required",
568
+ systemMessage: "Field is required.",
569
+ value: g
570
+ });
571
+ return;
572
+ }
573
+ if (!y.multiple && Array.isArray(g) && g.length > 1) {
574
+ i.push({
575
+ fieldId: p,
576
+ userMessage: "This field expects a single response",
577
+ systemMessage: "Field expects a single response.",
578
+ value: g
579
+ });
580
+ return;
581
+ }
582
+ if (y.options) {
583
+ const F = y.options.map((E) => E.value), B = Array.isArray(g) ? g : [g];
584
+ Array.isArray(g) && (B.every((E) => F.includes(E)) || i.push({
585
+ fieldId: p,
586
+ userMessage: "This field expects a valid option",
587
+ systemMessage: `Field expects a valid option. Valid options are: ${F.join(", ")}`,
588
+ value: g
589
+ }));
590
+ }
591
+ })
592
+ ), { responsesToCommit: a, validationErrors: i };
593
+ }
594
+ async function o(a) {
595
+ const { responsesToCommit: i, validationErrors: p } = await s(a);
596
+ return p.length ? { errors: p } : (c.registerBatch(i), { errors: [] });
597
+ }
598
+ const l = e.map((a) => a), h = e.map((a) => Object.keys(a).map((p) => ({
599
+ fieldId: p,
600
+ value: a[p]
601
+ })));
602
+ function S(a) {
603
+ const i = t.fields.getById(a), p = e.map((f) => f[a] || null);
604
+ return O({ f: i, r: p }, ({ f, r: g }) => g || (f != null && f.defaultValue ? f.defaultValue : null));
605
+ }
606
+ function d(a) {
607
+ const i = t.fields.getByName(a);
608
+ return O({ f: i, s: e }, ({ f: p, s: f }) => {
609
+ const g = p && f[p.id] || null;
610
+ return g || (p != null && p.defaultValue ? p.defaultValue : null);
611
+ });
612
+ }
613
+ return x({
614
+ clock: r,
615
+ target: c.clearAll
616
+ }), x({
617
+ clock: n,
618
+ target: c.clear
619
+ }), {
620
+ register: u,
621
+ clearAll: r,
622
+ clear: n,
623
+ commit: o,
624
+ getResponsesToCommit: s,
625
+ listStore: h,
626
+ getAllStore: l,
627
+ getByFieldId: S,
628
+ getByFieldName: d
629
+ };
630
+ });
631
+ function Je(t) {
632
+ return w(Ye, t);
633
+ }
634
+ const Qe = () => "0.0.1-dev.1764631564450";
635
+ function Xe() {
636
+ if (H()) {
637
+ const t = [
23
638
  document.currentScript,
24
639
  document.getElementById("picked_script"),
25
640
  document.getElementById("picked"),
26
641
  document.getElementById("cvly"),
27
642
  document.getElementById("cvly-x")
28
643
  ];
29
- for (const e of i)
644
+ for (const e of t)
30
645
  if (e != null && e.dataset.api)
31
646
  return e.dataset.api;
32
647
  }
33
648
  return "https://api.picked.app";
34
649
  }
35
- function J() {
36
- if (!D())
650
+ function Ze() {
651
+ if (!ie())
37
652
  return {};
38
- const i = new URLSearchParams(window.location.search), e = {}, t = /* @__PURE__ */ new Set();
39
- for (const [r] of i.entries())
40
- r.startsWith("picked-") && t.add(r);
41
- for (const r of t) {
42
- const o = r.replace("picked-", "");
43
- e[o] = i.getAll(r);
44
- }
45
- const s = q("s");
46
- if (t.size > 0)
47
- h.set(s, e);
653
+ const t = new URLSearchParams(window.location.search), e = {}, r = /* @__PURE__ */ new Set();
654
+ for (const [c] of t.entries())
655
+ c.startsWith("picked-") && r.add(c);
656
+ for (const c of r) {
657
+ const u = c.replace("picked-", "");
658
+ e[u] = t.getAll(c);
659
+ }
660
+ const n = R("s");
661
+ if (r.size > 0)
662
+ j.set(n, e);
48
663
  else {
49
- const r = h.get(s);
50
- if (r)
51
- return r.json() || {};
664
+ const c = j.get(n);
665
+ if (c)
666
+ return c.json() || {};
52
667
  }
53
668
  return e;
54
669
  }
55
- class m {
670
+ function et() {
671
+ if (ce())
672
+ return crypto.randomUUID();
673
+ const t = Date.now().toString(36), e = Math.random().toString(36).substring(2, 15), r = Math.random().toString(36).substring(2, 15), n = Math.random().toString(36).substring(2, 15);
674
+ return `${t}-${e}-${r}-${n}`;
675
+ }
676
+ const tt = () => ({
677
+ id: et()
678
+ }), rt = R("session", "global"), st = () => {
679
+ if (!ae()) return null;
680
+ const t = D.get(rt);
681
+ let e = t.isSet() ? t.json() : null;
682
+ return e || (e = tt(), t.set(e)), e;
683
+ }, nt = () => st();
684
+ class G {
56
685
  constructor(e) {
57
- n(this, "options");
58
- n(this, "isReady", !1);
59
- n(this, "project");
60
- n(this, "plugins", {});
61
- n(this, "eventBus", T());
62
- n(this, "organizationId");
63
- n(this, "projectId");
64
- n(this, "apiUrl");
65
- n(this, "session");
66
- n(this, "searchParams", J());
67
- n(this, "history", I());
68
- n(this, "components", P({ client: this }));
69
- n(this, "experienceInstances", O({ client: this }));
70
- n(this, "experiences", k({ client: this }));
71
- n(this, "frameworks", w({ client: this }));
72
- n(this, "predicates", E({ client: this }));
73
- n(this, "features", v({ client: this }));
74
- n(this, "responses", S({ client: this }));
75
- n(this, "fields", F());
76
- n(this, "actions", C());
77
- c("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || G(), this.session = b(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.eventBus({ type: "initialized", version: V() }), c("info", "Picked client initialized.");
686
+ m(this, "options");
687
+ m(this, "isReady", !1);
688
+ m(this, "project");
689
+ m(this, "plugins", {});
690
+ m(this, "eventBus", Ne());
691
+ m(this, "organizationId");
692
+ m(this, "projectId");
693
+ m(this, "apiUrl");
694
+ m(this, "session");
695
+ m(this, "searchParams", Ze());
696
+ m(this, "history", Te());
697
+ m(this, "components", we({ client: this }));
698
+ m(this, "experienceInstances", re({ client: this }));
699
+ m(this, "experiences", ge({ client: this }));
700
+ m(this, "frameworks", Ie({ client: this }));
701
+ m(this, "predicates", je({ client: this }));
702
+ m(this, "features", De({ client: this }));
703
+ m(this, "responses", Je({ client: this }));
704
+ m(this, "fields", Ue());
705
+ m(this, "actions", qe());
706
+ k("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || Xe(), this.session = nt(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.eventBus({ type: "initialized", version: Qe() }), k("info", "Picked client initialized.");
78
707
  }
79
708
  start() {
80
- A(this), (async () => {
81
- f() && (document.body && d(this), await W(), d(this), this.eventBus({ type: "ready" }), this.isReady = !0, this.session && this.eventBus({ type: "session", ...this.session }));
709
+ Re(this), (async () => {
710
+ H() && (document.body && V(this), await se(), V(this), this.eventBus({ type: "ready" }), this.isReady = !0, this.session && this.eventBus({ type: "session", ...this.session }));
82
711
  })();
83
712
  }
84
713
  registerFramework(e) {
85
- R(e, this.frameworks);
714
+ xe(e, this.frameworks);
86
715
  }
87
- registerComponent(e, t) {
88
- u(e, t, this.components);
716
+ registerComponent(e, r) {
717
+ T(e, r, this.components);
89
718
  }
90
719
  registerPlugin(e) {
91
- N(this, e, this.plugins);
720
+ he(this, e, this.plugins);
92
721
  }
93
- registerFeature(e, t) {
94
- j(e, t, this.features);
722
+ registerFeature(e, r) {
723
+ Me(e, r, this.features);
95
724
  }
96
- registerPredicate(e, t) {
97
- B(e, t, this.predicates);
725
+ registerPredicate(e, r) {
726
+ Oe(e, r, this.predicates);
98
727
  }
99
728
  registerField(e) {
100
- z(e, this.fields);
729
+ _e(e, this.fields);
101
730
  }
102
- registerAction(e, t) {
103
- U(e, t, this.actions);
731
+ registerAction(e, r) {
732
+ Ge(e, r, this.actions);
104
733
  }
105
734
  registerExperience(e) {
106
- e.component && u(`experience:${e.id}`, e.component, this.components), $(e, this.experiences);
735
+ e.component && T(`experience:${e.id}`, e.component, this.components), fe(e, this.experiences);
107
736
  }
108
737
  getStateSnapshot() {
109
- return K(this);
738
+ return Be(this);
110
739
  }
111
740
  async launchExperienceById(e) {
112
- const t = this.experiences.getById(e).getState();
113
- if (!t) {
114
- c("warn", `Experience with id '${e}' not found.`);
741
+ const r = this.experiences.getById(e).getState();
742
+ if (!r) {
743
+ k("warn", `Experience with id '${e}' not found.`);
115
744
  return;
116
745
  }
117
- L(this, t);
746
+ q(this, r);
118
747
  }
119
748
  // private async fetchProject() {
120
749
  // if (this.project) {
@@ -127,38 +756,38 @@ class m {
127
756
  // }
128
757
  setupPlugins() {
129
758
  var e;
130
- (e = this.options.plugins) == null || e.forEach((t) => {
131
- if (Array.isArray(t)) {
132
- t.forEach((r) => {
133
- this.registerPlugin(r);
759
+ (e = this.options.plugins) == null || e.forEach((r) => {
760
+ if (Array.isArray(r)) {
761
+ r.forEach((c) => {
762
+ this.registerPlugin(c);
134
763
  });
135
764
  return;
136
765
  }
137
- const s = typeof t == "function" ? t() : t;
138
- if (Array.isArray(s)) {
139
- s.forEach((r) => this.registerPlugin(r));
766
+ const n = typeof r == "function" ? r() : r;
767
+ if (Array.isArray(n)) {
768
+ n.forEach((c) => this.registerPlugin(c));
140
769
  return;
141
770
  }
142
- this.registerPlugin(s);
771
+ this.registerPlugin(n);
143
772
  });
144
773
  }
145
774
  setupFeatures() {
146
775
  const e = this.options.features;
147
- e && (Object.entries(e).forEach(([t, s]) => {
148
- const r = typeof s == "function" ? s() : s;
149
- this.registerFeature(t, r);
150
- }), this.searchParams.feature && this.searchParams.feature.forEach((t) => {
776
+ e && (Object.entries(e).forEach(([r, n]) => {
777
+ const c = typeof n == "function" ? n() : n;
778
+ this.registerFeature(r, c);
779
+ }), this.searchParams.feature && this.searchParams.feature.forEach((r) => {
151
780
  try {
152
- const [s, r] = t.split(":");
153
- if (!s || !r)
781
+ const [n, c] = r.split(":");
782
+ if (!n || !c)
154
783
  return;
155
- let o = r;
156
- o === "true" && (o = !0), o === "false" && (o = !1), this.registerFeature(s, {
157
- key: `${o}`,
784
+ let u = c;
785
+ u === "true" && (u = !0), u === "false" && (u = !1), this.registerFeature(n, {
786
+ key: `${u}`,
158
787
  // use the assigned bucket value as the key
159
- name: s,
788
+ name: n,
160
789
  // eslint-disable-next-line sonarjs/function-return-type
161
- decide: () => o,
790
+ decide: () => u,
162
791
  storage: "session"
163
792
  });
164
793
  } catch {
@@ -167,73 +796,73 @@ class m {
167
796
  }
168
797
  setupPredicates() {
169
798
  const e = this.options.predicates;
170
- e && Object.entries(e).forEach(([t, s]) => {
171
- if (typeof s != "function") {
172
- c("warn", `Predicate "${t}" is not a function.`);
799
+ e && Object.entries(e).forEach(([r, n]) => {
800
+ if (typeof n != "function") {
801
+ k("warn", `Predicate "${r}" is not a function.`);
173
802
  return;
174
803
  }
175
- this.registerPredicate(t, s);
804
+ this.registerPredicate(r, n);
176
805
  });
177
806
  }
178
807
  setupActions() {
179
808
  const e = this.options.actions;
180
- e && Object.entries(e).forEach(([t, s]) => {
181
- if (typeof s != "function") {
182
- c("warn", `Action "${t}" is not a function.`);
809
+ e && Object.entries(e).forEach(([r, n]) => {
810
+ if (typeof n != "function") {
811
+ k("warn", `Action "${r}" is not a function.`);
183
812
  return;
184
813
  }
185
- this.registerAction(t, s);
814
+ this.registerAction(r, n);
186
815
  });
187
816
  }
188
817
  getPluginConfig(e) {
189
818
  return this.plugins[e] ?? {};
190
819
  }
191
820
  }
192
- n(m, "logger", c);
193
- function g(i) {
821
+ m(G, "logger", k);
822
+ function W(t) {
194
823
  var e;
195
- return ((e = i.options) == null ? void 0 : e.some((t) => "condition" in t)) ?? !1;
824
+ return ((e = t.options) == null ? void 0 : e.some((r) => "condition" in r)) ?? !1;
196
825
  }
197
- function M(i) {
198
- return i.some((e) => e.condition || g(e));
826
+ function ot(t) {
827
+ return t.some((e) => e.condition || W(e));
199
828
  }
200
- async function re(i, e) {
201
- return e.length === 0 || !M(e) ? e : (await Promise.all(
202
- e.map(async (s) => {
203
- if (!(s.condition ? await l(i, s.condition) : !0))
829
+ async function mt(t, e) {
830
+ return e.length === 0 || !ot(e) ? e : (await Promise.all(
831
+ e.map(async (n) => {
832
+ if (!(n.condition ? await $(t, n.condition) : !0))
204
833
  return null;
205
- if (!s.options || !g(s))
206
- return s;
207
- const p = (await Promise.all(
208
- s.options.map(async (a) => a.condition ? await l(i, a.condition) ? a : null : a)
209
- )).filter((a) => a !== null);
210
- return p.length === s.options.length ? s : p.length === 0 ? null : { ...s, options: p };
834
+ if (!n.options || !W(n))
835
+ return n;
836
+ const s = (await Promise.all(
837
+ n.options.map(async (l) => l.condition ? await $(t, l.condition) ? l : null : l)
838
+ )).filter((l) => l !== null);
839
+ return s.length === n.options.length ? n : s.length === 0 ? null : { ...n, options: s };
211
840
  })
212
- )).filter((s) => s !== null);
841
+ )).filter((n) => n !== null);
213
842
  }
214
- const oe = (i) => {
215
- const e = new m(i);
216
- return H(e), e;
843
+ const ht = (t) => {
844
+ const e = new G(t);
845
+ return ue(e), e;
217
846
  };
218
847
  export {
219
- m as Picked,
220
- oe as createClient,
221
- q as createStorageKey,
222
- l as evaluateRuleLogic,
223
- re as getStepFields,
224
- pe as isPickedRoot,
225
- ke as localStore,
226
- h as sessionStore,
227
- we as subscribe,
228
- de as supportsCookies,
229
- le as supportsCryptoRandomUUID,
230
- f as supportsDocument,
231
- he as supportsHistory,
232
- fe as supportsIntersectionObserver,
233
- me as supportsLocalStorage,
234
- ge as supportsLocation,
235
- ye as supportsSessionStorage,
236
- xe as supportsShadowRoot,
237
- Ie as supportsWebComponents,
238
- D as supportsWindow
848
+ G as Picked,
849
+ ht as createClient,
850
+ R as createStorageKey,
851
+ $ as evaluateRuleLogic,
852
+ mt as getStepFields,
853
+ kt as isPickedRoot,
854
+ D as localStore,
855
+ j as sessionStore,
856
+ wt as subscribe,
857
+ bt as supportsCookies,
858
+ ce as supportsCryptoRandomUUID,
859
+ H as supportsDocument,
860
+ It as supportsHistory,
861
+ xt as supportsIntersectionObserver,
862
+ ae as supportsLocalStorage,
863
+ Et as supportsLocation,
864
+ Pt as supportsSessionStorage,
865
+ Rt as supportsShadowRoot,
866
+ Bt as supportsWebComponents,
867
+ ie as supportsWindow
239
868
  };