@picked/client 0.0.1-dev.1774231221701 → 0.0.1-dev.1774912386475

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 (79) hide show
  1. package/dist/{api-BEXzPJHZ.cjs → api-B-wGEgt8.cjs} +1 -1
  2. package/dist/{api-oudcFuUX.js → api-DwERBrAZ.js} +1 -1
  3. package/dist/cjs/form/index.js +1 -1
  4. package/dist/cjs/index.js +2 -2
  5. package/dist/cjs/plugins/create-experience/index.js +1 -1
  6. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  7. package/dist/cjs/plugins/responses-browser-storage/index.js +1 -1
  8. package/dist/cjs/plugins/web-components/index.js +1 -1
  9. package/dist/cjs/server/index.js +1 -1
  10. package/dist/esm/form/index.js +128 -84
  11. package/dist/esm/index.js +393 -334
  12. package/dist/esm/plugins/create-experience/index.js +183 -151
  13. package/dist/esm/plugins/dynamic-experiences/index.js +52 -30
  14. package/dist/esm/plugins/responses-browser-storage/index.js +47 -20
  15. package/dist/esm/plugins/web-components/index.js +1 -1
  16. package/dist/esm/server/index.js +1 -1
  17. package/dist/{experience-instance-DZiAwXph.js → experience-instance-CwwrKUI8.js} +50 -46
  18. package/dist/experience-instance-DdFUcVRd.cjs +1 -0
  19. package/dist/{rules-logic-B7vJrWyO.js → rules-logic-BIkBWZmf.js} +4 -2
  20. package/dist/rules-logic-DDxCiq4P.cjs +1 -0
  21. package/dist/types/entities/condition/condition.d.ts +17 -0
  22. package/dist/types/entities/condition/condition.d.ts.map +1 -0
  23. package/dist/types/entities/experience/experience.d.ts +40 -35
  24. package/dist/types/entities/experience/experience.d.ts.map +1 -1
  25. package/dist/types/entities/experience-instance/experience-instance.d.ts +21 -2
  26. package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
  27. package/dist/types/entities/field/field.d.ts +13 -2
  28. package/dist/types/entities/field/field.d.ts.map +1 -1
  29. package/dist/types/entities/response/response-validation.d.ts +76 -0
  30. package/dist/types/entities/response/response-validation.d.ts.map +1 -0
  31. package/dist/types/entities/response/response.d.ts +24 -17
  32. package/dist/types/entities/response/response.d.ts.map +1 -1
  33. package/dist/types/entities/step/step.d.ts +36 -0
  34. package/dist/types/entities/step/step.d.ts.map +1 -0
  35. package/dist/types/form/build-responses.d.ts +12 -9
  36. package/dist/types/form/build-responses.d.ts.map +1 -1
  37. package/dist/types/form/create-field-evaluator.d.ts +11 -3
  38. package/dist/types/form/create-field-evaluator.d.ts.map +1 -1
  39. package/dist/types/form/create-field-validation.d.ts +21 -6
  40. package/dist/types/form/create-field-validation.d.ts.map +1 -1
  41. package/dist/types/form/create-form.d.ts +42 -11
  42. package/dist/types/form/create-form.d.ts.map +1 -1
  43. package/dist/types/form/create-submit-pipeline.d.ts +21 -9
  44. package/dist/types/form/create-submit-pipeline.d.ts.map +1 -1
  45. package/dist/types/form/get-step-fields.d.ts +13 -0
  46. package/dist/types/form/get-step-fields.d.ts.map +1 -1
  47. package/dist/types/index.d.ts +2 -0
  48. package/dist/types/index.d.ts.map +1 -1
  49. package/dist/types/logic-engine.d.ts +10 -2
  50. package/dist/types/logic-engine.d.ts.map +1 -1
  51. package/dist/types/picked.d.ts +68 -32
  52. package/dist/types/picked.d.ts.map +1 -1
  53. package/dist/types/plugins/create-experience/create-experience.d.ts +51 -29
  54. package/dist/types/plugins/create-experience/create-experience.d.ts.map +1 -1
  55. package/dist/types/plugins/create-experience/index.d.ts +2 -2
  56. package/dist/types/plugins/create-experience/index.d.ts.map +1 -1
  57. package/dist/types/plugins/create-experience/plugin.d.ts.map +1 -1
  58. package/dist/types/plugins/create-experience/serialization.d.ts +1 -0
  59. package/dist/types/plugins/create-experience/serialization.d.ts.map +1 -1
  60. package/dist/types/plugins/dynamic-experiences/plugin.d.ts +21 -4
  61. package/dist/types/plugins/dynamic-experiences/plugin.d.ts.map +1 -1
  62. package/dist/types/plugins/dynamic-experiences/types.d.ts +41 -0
  63. package/dist/types/plugins/dynamic-experiences/types.d.ts.map +1 -1
  64. package/dist/types/plugins/responses-browser-storage/plugin.d.ts.map +1 -1
  65. package/dist/types/utils/events.d.ts +1 -1
  66. package/dist/types/utils/events.d.ts.map +1 -1
  67. package/dist/types/utils/node-tree/get-next-node-from-condition.d.ts +3 -0
  68. package/dist/types/utils/node-tree/get-next-node-from-condition.d.ts.map +1 -0
  69. package/dist/types/utils/node-tree/next-reachable-step-nodes.d.ts +10 -6
  70. package/dist/types/utils/node-tree/next-reachable-step-nodes.d.ts.map +1 -1
  71. package/dist/types/utils/nodes.d.ts +74 -2
  72. package/dist/types/utils/nodes.d.ts.map +1 -1
  73. package/dist/types/utils/rules-logic.d.ts +31 -0
  74. package/dist/types/utils/rules-logic.d.ts.map +1 -1
  75. package/package.json +32 -6
  76. package/dist/experience-instance-Ddk4Jktn.cjs +0 -1
  77. package/dist/rules-logic-CXr4wXcG.cjs +0 -1
  78. package/dist/types/utils/node-tree/get-next-node-from-conditional.d.ts +0 -3
  79. package/dist/types/utils/node-tree/get-next-node-from-conditional.d.ts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { t as e } from "../../rules-logic-B7vJrWyO.js";
1
+ import { t as e } from "../../rules-logic-BIkBWZmf.js";
2
2
  import { attach as t, combine as n, createEffect as r, createEvent as i, createStore as a, sample as o, split as s } from "effector";
3
3
  //#region src/form/build-responses.ts
4
4
  function c(e, t, n) {
@@ -16,22 +16,22 @@ function c(e, t, n) {
16
16
  function l(e, t) {
17
17
  let n = Array.from(t.entries()), r = {};
18
18
  return e.forEach((e) => {
19
- let t = n.filter(([t]) => t === e.id);
20
- t.length === 0 && (t = [[e.id, ""]]), t.forEach(([, t]) => {
19
+ let t = n.filter(([t]) => t === e.key);
20
+ t.length === 0 && (t = [[e.key, ""]]), t.forEach(([, t]) => {
21
21
  if (t === "") {
22
- c(r, e.id, null);
22
+ c(r, e.key, null);
23
23
  return;
24
24
  }
25
25
  switch (e.type) {
26
26
  case "text":
27
27
  case "object":
28
- c(r, e.id, e.multiple ? [String(t)] : String(t));
28
+ c(r, e.key, e.multiple ? [String(t)] : String(t));
29
29
  break;
30
30
  case "number":
31
- c(r, e.id, e.multiple ? [Number(t)] : Number(t));
31
+ c(r, e.key, e.multiple ? [Number(t)] : Number(t));
32
32
  break;
33
33
  case "boolean":
34
- c(r, e.id, e.multiple ? [t === "true"] : t === "true");
34
+ c(r, e.key, e.multiple ? [t === "true"] : t === "true");
35
35
  break;
36
36
  }
37
37
  });
@@ -45,20 +45,24 @@ function u(e) {
45
45
  function d(e) {
46
46
  return e.some((e) => e.condition || u(e));
47
47
  }
48
- async function f(t, n, r) {
48
+ function f(e) {
49
+ return e.condition ?? null;
50
+ }
51
+ async function p(t, n, r) {
49
52
  return n.length === 0 || !d(n) ? n : (await Promise.all(n.map(async (n) => {
50
- if (!(!n.condition || await e(t, n.condition, r))) return null;
53
+ let i = f(n);
54
+ if (!(!i || await e(t, i, r))) return null;
51
55
  if (!Array.isArray(n.options) || !u(n)) return n;
52
- let i = (await Promise.all(n.options.map(async (n) => n.condition ? await e(t, n.condition, r) ? n : null : n))).filter((e) => e !== null);
53
- return i.length === n.options.length ? n : i.length === 0 ? null : {
56
+ let a = (await Promise.all(n.options.map(async (n) => n.condition ? await e(t, n.condition, r) ? n : null : n))).filter((e) => e !== null);
57
+ return a.length === n.options.length ? n : a.length === 0 ? null : {
54
58
  ...n,
55
- options: i
59
+ options: a
56
60
  };
57
61
  }))).filter((e) => e !== null);
58
62
  }
59
63
  //#endregion
60
64
  //#region src/form/create-field-evaluator.ts
61
- function p(e, n, i) {
65
+ function m(e, n, i) {
62
66
  let s = a([]), c = t({
63
67
  source: {
64
68
  allFields: e.fields.listStore,
@@ -66,7 +70,7 @@ function p(e, n, i) {
66
70
  staged: i,
67
71
  committed: e.responses.getAllStore
68
72
  },
69
- effect: r(async ({ allFields: t, fieldIds: n, staged: r, committed: i }) => await f(e, t.filter((e) => n.includes(e.id)), { responses: {
73
+ effect: r(async ({ allFields: t, fieldIds: n, staged: r, committed: i }) => await p(e, t.filter((e) => n.includes(e.key) || n.includes(e.id)), { responses: {
70
74
  ...i,
71
75
  ...r
72
76
  } }))
@@ -86,21 +90,21 @@ function p(e, n, i) {
86
90
  }
87
91
  //#endregion
88
92
  //#region src/form/create-field-validation.ts
89
- function m(e) {
93
+ function h(e) {
90
94
  return e === null || e === "" || Array.isArray(e) && e.length === 0;
91
95
  }
92
- function h(n, r, s) {
93
- let c = i(), l = i(), u = a({});
96
+ function g(n, r, s) {
97
+ let c = i(), l = i(), u = i(), d = a({});
94
98
  o({
95
- clock: l,
96
- source: u,
99
+ clock: u,
100
+ source: d,
97
101
  fn: (e, { fieldId: t }) => ({
98
102
  ...e,
99
103
  [t]: !0
100
104
  }),
101
- target: u
105
+ target: d
102
106
  });
103
- let d = a({}), f = d.map((e) => Object.values(e).filter((e) => e !== void 0)), p = t({
107
+ let f = a({}), p = f.map((e) => Object.values(e).filter((e) => e !== void 0)), m = t({
104
108
  source: {
105
109
  fields: r,
106
110
  staged: s,
@@ -123,7 +127,7 @@ function h(n, r, s) {
123
127
  if (typeof s == "string") return {
124
128
  fieldId: a,
125
129
  error: {
126
- fieldId: a,
130
+ fieldKey: c.key,
127
131
  userMessage: s,
128
132
  systemMessage: s,
129
133
  value: o
@@ -132,17 +136,17 @@ function h(n, r, s) {
132
136
  if (s === !1) return {
133
137
  fieldId: a,
134
138
  error: {
135
- fieldId: a,
139
+ fieldKey: c.key,
136
140
  userMessage: "This field is invalid",
137
141
  systemMessage: "Field validation rule returned false.",
138
142
  value: o
139
143
  }
140
144
  };
141
145
  }
142
- return s && c.required && m(o) ? {
146
+ return s && c.required && h(o) ? {
143
147
  fieldId: a,
144
148
  error: {
145
- fieldId: a,
149
+ fieldKey: c.key,
146
150
  userMessage: "This field is required",
147
151
  systemMessage: "Field is required.",
148
152
  value: o
@@ -155,29 +159,42 @@ function h(n, r, s) {
155
159
  });
156
160
  return o({
157
161
  clock: c,
158
- source: u,
162
+ source: d,
159
163
  filter: (e, { fieldId: t }) => e[t] === !0,
160
164
  fn: (e, { fieldId: t, value: n }) => ({
161
165
  fieldId: t,
162
166
  value: n,
163
167
  checkRequired: !1
164
168
  }),
165
- target: p
169
+ target: m
166
170
  }), o({
167
171
  clock: l,
172
+ source: d,
173
+ filter: (e, { fieldId: t }) => e[t] === !0,
174
+ fn: (e, { fieldId: t, value: n }) => ({
175
+ fieldId: t,
176
+ value: n,
177
+ checkRequired: !1
178
+ }),
179
+ target: m
180
+ }), o({
181
+ clock: u,
168
182
  fn: ({ fieldId: e, value: t }) => ({
169
183
  fieldId: e,
170
184
  value: t,
171
185
  checkRequired: !0
172
186
  }),
173
- target: p
187
+ target: m
174
188
  }), s.on(c, (e, { fieldId: t, value: n }) => ({
175
189
  ...e,
176
190
  [t]: n
177
191
  })), s.on(l, (e, { fieldId: t, value: n }) => ({
178
192
  ...e,
179
193
  [t]: n
180
- })), d.on(p.doneData, (e, { fieldId: t, error: n }) => {
194
+ })), s.on(u, (e, { fieldId: t, value: n }) => ({
195
+ ...e,
196
+ [t]: n
197
+ })), f.on(m.doneData, (e, { fieldId: t, error: n }) => {
181
198
  if (n === null) {
182
199
  let n = { ...e };
183
200
  return delete n[t], n;
@@ -187,17 +204,18 @@ function h(n, r, s) {
187
204
  [t]: n
188
205
  };
189
206
  }), {
190
- fieldChangeEvent: c,
191
- fieldBlurEvent: l,
192
- touchedStore: u,
193
- fieldErrorsStore: d,
194
- formErrorsStore: f,
207
+ fieldInputEvent: c,
208
+ fieldChangeEvent: l,
209
+ fieldBlurEvent: u,
210
+ touchedStore: d,
211
+ fieldErrorsStore: f,
212
+ formErrorsStore: p,
195
213
  stagedValuesStore: s
196
214
  };
197
215
  }
198
216
  //#endregion
199
217
  //#region src/form/create-submit-pipeline.ts
200
- function g(e) {
218
+ function _(e) {
201
219
  let t = [];
202
220
  return {
203
221
  executeFx: r(async (...n) => await e(t, ...n)),
@@ -206,14 +224,14 @@ function g(e) {
206
224
  })
207
225
  };
208
226
  }
209
- function _({ client: e, experienceInstance: n, formId: c, title: u, stepStore: d, fieldsStore: f, goToNextStep: p }) {
210
- let m = i(), h = i(), _ = i(), v = i(), y = i(), b = a(!1), x = a(!1);
227
+ function v({ client: e, experienceInstance: n, formId: c, title: u, stepStore: d, fieldsStore: f, goToNextStep: p }) {
228
+ let m = i(), h = i(), g = i(), v = i(), y = i(), b = a(!1), x = a(!1);
211
229
  x.on(v, () => !0).on(m, () => !1);
212
- let S = m.map(() => void 0), C = g(async (e, t) => {
230
+ let S = m.map(() => void 0), C = _(async (e, t) => {
213
231
  await Promise.all(e.map((e) => Promise.resolve(e(t))));
214
- }), w = g(async (e, t) => {
232
+ }), w = _(async (e, t) => {
215
233
  await Promise.all(e.map((e) => Promise.resolve(e(t))));
216
- }), T = g(async (e, t) => {
234
+ }), T = _(async (e, t) => {
217
235
  let n = t;
218
236
  for (let t of e) {
219
237
  let e = await Promise.resolve(t(n));
@@ -331,9 +349,9 @@ function _({ client: e, experienceInstance: n, formId: c, title: u, stepStore: d
331
349
  target: p
332
350
  }), o({
333
351
  clock: O.doneData,
334
- target: _
352
+ target: g
335
353
  }), o({
336
- clock: _,
354
+ clock: g,
337
355
  target: w.executeFx
338
356
  }), o({
339
357
  clock: [y, w.executeFx.done],
@@ -342,87 +360,113 @@ function _({ client: e, experienceInstance: n, formId: c, title: u, stepStore: d
342
360
  }), {
343
361
  submitEvent: m,
344
362
  isFormSubmitting: b,
345
- onSubmit: T.register,
363
+ onBeforeSubmit: T.register,
346
364
  onSuccess: C.register,
347
365
  onError: w.register,
348
366
  submitStarted: S,
349
- validationErrorsReceived: _
367
+ validationErrorsReceived: g
350
368
  };
351
369
  }
352
370
  //#endregion
353
371
  //#region src/form/create-form.ts
354
- function v(e) {
372
+ function y(e) {
355
373
  let t = e.currentTarget;
356
374
  if (t instanceof HTMLInputElement) return t.type === "checkbox" ? t.checked : t.value;
357
375
  if (t instanceof HTMLSelectElement || t instanceof HTMLTextAreaElement) return t.value;
358
376
  }
359
- function y(e, t, r, i) {
360
- let { client: s, experienceInstance: c } = e, { currentStepStore: l, goToNextStep: u } = c, d = a({}), { fieldsStore: f } = p(s, i, d), { fieldChangeEvent: m, fieldBlurEvent: g, touchedStore: y, fieldErrorsStore: b, formErrorsStore: x } = h(s, f, d), S = n({
361
- fields: f,
377
+ function b(e, t, r, i) {
378
+ let { client: s, experienceInstance: c } = e, { currentStepStore: l, goToNextStep: u } = c, d = n(l, c, (e, t) => ({
379
+ stepId: e?.id,
380
+ experienceId: t.id
381
+ })), f = a({}), { fieldsStore: p } = m(s, i, f);
382
+ o({
383
+ clock: p,
384
+ source: f,
385
+ fn: (e, t) => {
386
+ let n = !1, r = { ...e };
387
+ for (let e of t) e.defaultValue != null && !(e.id in r) && (r[e.id] = e.defaultValue, n = !0);
388
+ return n ? r : e;
389
+ },
390
+ target: f
391
+ });
392
+ let { fieldInputEvent: h, fieldChangeEvent: _, fieldBlurEvent: b, touchedStore: x, fieldErrorsStore: S, formErrorsStore: C } = g(s, p, f), w = n({
393
+ fields: p,
362
394
  responses: s.responses.listStore,
363
- staged: d,
364
- fieldErrors: b,
365
- touched: y
366
- }, ({ fields: e, responses: t, staged: n, fieldErrors: r, touched: i }) => e.map((e) => {
367
- let a = (t) => {
368
- let n = v(t);
369
- n !== void 0 && m({
395
+ staged: f,
396
+ fieldErrors: S,
397
+ touched: x,
398
+ experienceAndStepId: d
399
+ }, ({ fields: e, responses: t, staged: n, fieldErrors: r, touched: i, experienceAndStepId: a }) => e.map((e) => {
400
+ let o = (t) => {
401
+ let n = y(t);
402
+ n !== void 0 && h({
370
403
  fieldId: e.id,
371
404
  value: n
372
405
  });
373
- }, o = (t) => {
374
- let n = v(t);
375
- n !== void 0 && g({
406
+ }, s = (t) => {
407
+ let n = y(t);
408
+ n !== void 0 && _({
376
409
  fieldId: e.id,
377
410
  value: n
378
411
  });
379
- };
412
+ }, c = (t) => {
413
+ let n = y(t);
414
+ n !== void 0 && b({
415
+ fieldId: e.id,
416
+ value: n
417
+ });
418
+ }, l = n[e.id] ?? t.find((t) => t.fieldId === e.id)?.value ?? e.defaultValue, u = r[e.id], d = e.type === "number" ? "number" : "text", f = e.type === "boolean" ? "checkbox" : d, { experienceId: p, stepId: m } = a, g = `${p}-${m ?? "step"}-${e.id}`;
380
419
  return {
381
420
  ...e,
382
- value: n[e.id] ?? t.find((t) => t.fieldId === e.id)?.value,
383
- error: r[e.id],
421
+ value: l,
422
+ error: u,
384
423
  touched: i[e.id] ?? !1,
385
- onChange: a,
386
- onBlur: o,
387
424
  props: {
388
- name: e.id,
389
- id: e.id,
390
- oninput: a,
391
- onblur: o
425
+ id: g,
426
+ name: e.key,
427
+ key: e.key,
428
+ value: l,
429
+ type: f,
430
+ required: e.required,
431
+ placeholder: e.placeholder,
432
+ oninput: o,
433
+ onchange: s,
434
+ onblur: c
392
435
  }
393
436
  };
394
- })), { submitEvent: C, isFormSubmitting: w, onSubmit: T, onSuccess: E, onError: D, submitStarted: O, validationErrorsReceived: k } = _({
437
+ })), { submitEvent: T, isFormSubmitting: E, onBeforeSubmit: D, onSuccess: O, onError: k, submitStarted: A, validationErrorsReceived: j } = v({
395
438
  client: s,
396
439
  experienceInstance: c,
397
440
  formId: t,
398
441
  title: r,
399
442
  stepStore: l,
400
- fieldsStore: f,
443
+ fieldsStore: p,
401
444
  goToNextStep: u
402
445
  });
403
446
  return o({
404
- clock: O,
447
+ clock: A,
405
448
  fn: () => ({}),
406
- target: y
449
+ target: x
407
450
  }), o({
408
- clock: O,
451
+ clock: A,
409
452
  fn: () => ({}),
410
- target: b
453
+ target: S
411
454
  }), o({
412
- clock: k,
413
- fn: (e) => Object.fromEntries(e.map((e) => [e.fieldId, e])),
414
- target: b
455
+ clock: j,
456
+ source: p,
457
+ fn: (e, t) => Object.fromEntries(t.map((t) => [e.find((e) => e.key === t.fieldKey)?.id ?? t.fieldKey, t])),
458
+ target: S
415
459
  }), {
416
460
  form: {
417
- props: { onsubmit: C },
418
- errors: x,
419
- submitting: w,
420
- onSubmit: T,
421
- onSuccess: E,
422
- onError: D
461
+ props: { onsubmit: T },
462
+ errors: C,
463
+ submitting: E,
464
+ onBeforeSubmit: D,
465
+ onSuccess: O,
466
+ onError: k
423
467
  },
424
- fields: S
468
+ fields: w
425
469
  };
426
470
  }
427
471
  //#endregion
428
- export { l as buildResponsesFromFormData, p as createFieldEvaluator, h as createFieldValidation, y as createForm, _ as createSubmitPipeline, v as getEventValue, f as getStepFields };
472
+ export { l as buildResponsesFromFormData, m as createFieldEvaluator, g as createFieldValidation, b as createForm, v as createSubmitPipeline, y as getEventValue, p as getStepFields };