@feedmepos/mf-connect 0.0.8 → 0.0.9

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 (77) hide show
  1. package/dist/{Analytic-BxRuK2P2.js → Analytic-CwaN0mge.js} +68 -69
  2. package/dist/{Broadcast-BqGojAWW.js → Broadcast-Cjx5xzUC.js} +27 -28
  3. package/dist/{CampaignTypeDialog.vue_vue_type_script_setup_true_lang-B-VzcVMS.js → CampaignTypeDialog.vue_vue_type_script_setup_true_lang-D4mO5aik.js} +34 -34
  4. package/dist/Card-DbY6YaXk.js +827 -0
  5. package/dist/{Collections-DvdDRozp.js → Collections-DRN2gzwh.js} +158 -168
  6. package/dist/{Credit-BeHm7_2S.js → Credit-DOcrzykJ.js} +11 -12
  7. package/dist/{EditCampaignSheet.vue_vue_type_script_setup_true_lang-BsbgHsah.js → EditCampaignSheet.vue_vue_type_script_setup_true_lang-CUxfXaro.js} +359 -333
  8. package/dist/{EffectSheet.vue_vue_type_style_index_0_lang-hwXvdiut.js → EffectSheet.vue_vue_type_style_index_0_lang-EF_rHfwT.js} +5 -5
  9. package/dist/{Experience-CtDY9u4Y.js → Experience-aQj-3H2Y.js} +11 -12
  10. package/dist/{Game-DjaYuqcb.js → Game-Cnje-m_M.js} +22 -23
  11. package/dist/{ImageInput.vue_vue_type_script_setup_true_lang-Bq5-Gl9N.js → ImageInput.vue_vue_type_script_setup_true_lang-CG-GBVMP.js} +8 -8
  12. package/dist/{MainLayout-B-iAZM2k.js → MainLayout-Cxl9yLPs.js} +1 -1
  13. package/dist/{Marketing-BJJltAh-.js → Marketing-BYUcbcMU.js} +19 -20
  14. package/dist/{Member-eJ9Pdi5w.js → Member-D7K9fm_Q.js} +2 -2
  15. package/dist/MemberList-DbXkxUzF.js +1717 -0
  16. package/dist/{MemberTransactions-DRET8mSQ.js → MemberTransactions-DED1SYwX.js} +4 -4
  17. package/dist/MessageInput.vue_vue_type_script_setup_true_lang-CLqIp5wR.js +203 -0
  18. package/dist/{Point-DPTOgJbC.js → Point-CQm8whVQ.js} +11 -12
  19. package/dist/{Promotion-wzkRuNqO.js → Promotion-DzVXy_C9.js} +42 -44
  20. package/dist/{RuleGroup.vue_vue_type_script_setup_true_lang-Z06eB5i5.js → RuleGroup.vue_vue_type_script_setup_true_lang-CeS6KlhP.js} +12 -12
  21. package/dist/Segment-D3o0D3Uv.js +407 -0
  22. package/dist/{Setting-CXuZu0-m.js → Setting-pCzenLoL.js} +17 -18
  23. package/dist/{Store-4Um9keEp.js → Store-DEwEIFYD.js} +18 -19
  24. package/dist/{StoreRewards-B-UFeyQM.js → StoreRewards-D7vnZN4f.js} +86 -87
  25. package/dist/StoreTransactions.vue_vue_type_script_setup_true_lang-ALzQU3th.js +793 -0
  26. package/dist/{TargetLocationInput.vue_vue_type_script_setup_true_lang-I_XFpctY.js → TargetLocationInput.vue_vue_type_script_setup_true_lang-GMIztWCj.js} +1 -1
  27. package/dist/{Tier-C6KVsxGO.js → Tier-BJbX5CPB.js} +401 -377
  28. package/dist/{Title-DuN1ahIM.js → Title-C9xV6rBg.js} +274 -248
  29. package/dist/Transaction-C8OHlhzR.js +36 -0
  30. package/dist/Voucher-eZwm7N1D.js +481 -0
  31. package/dist/{app-CxBTTB31.js → app-DgbDbhL-.js} +34 -34
  32. package/dist/app.js +1 -1
  33. package/dist/{campaign-B0aXkadj.js → campaign-BkvrUTEJ.js} +2 -2
  34. package/dist/{dto-BtdVC-Ab.js → dto-YYVhW73A.js} +52 -53
  35. package/dist/{effect-BUN6rkQM.js → effect-f7DAPYC8.js} +1 -1
  36. package/dist/export-BXbCXTfd.js +97 -0
  37. package/dist/{helper-Cpq3x8K5.js → helper-BhvQ9m6d.js} +1 -1
  38. package/dist/{index-D2Juhkdw.js → index-BhacKx5B.js} +85 -83
  39. package/dist/{index-DDSLx7vu.js → index-BsEqtUmY.js} +2 -2
  40. package/dist/{index-0GYrZr4L.js → index-CdtrQ9tR.js} +5 -5
  41. package/dist/{index-8clzk3uX.js → index-Cfo2A0Se.js} +1 -1
  42. package/dist/index-Cz5RZlYh.js +73 -0
  43. package/dist/{index-BTntbYTS.js → index-DQC_1tRF.js} +1 -1
  44. package/dist/{index-DysVCkrx.js → index-Dd3hrFcQ.js} +3 -3
  45. package/dist/{index-CK9yJMj7.js → index-FWp9M1yS.js} +5 -5
  46. package/dist/{index-C6NgUSl2.js → index-VmFlM704.js} +1 -1
  47. package/dist/{index-BvnZdJBY.js → index-oQLJE4Uw.js} +2 -2
  48. package/dist/libs/packages/core/src/collectible/collectible.dto.d.ts +6 -0
  49. package/dist/{plugins-B_d-WFtN.js → loading-DQaawbHE.js} +8204 -8108
  50. package/dist/{lodash-DsT1nK-T.js → lodash-DzdmTD20.js} +1 -1
  51. package/dist/{membership-DtD45RXh.js → membership-Dq2-b-S_.js} +3 -3
  52. package/dist/{money-CFI1TMCS.js → money-vzwOUBrp.js} +1 -1
  53. package/dist/{number-BBtf4fYz.js → number-CBzs6rfW.js} +1 -1
  54. package/dist/packages/connect/src/components/campaign/CampaignSummary.vue.d.ts +13 -0
  55. package/dist/packages/connect/src/composables/export.d.ts +11 -0
  56. package/dist/packages/connect/src/export/base.export.d.ts +7 -0
  57. package/dist/packages/connect/src/export/card.export.d.ts +5 -6
  58. package/dist/packages/connect/src/export/collection-transaction.export.d.ts +14 -0
  59. package/dist/packages/connect/src/export/index.d.ts +1 -0
  60. package/dist/packages/connect/src/export/store-transaction.export.d.ts +14 -0
  61. package/dist/packages/connect/src/helpers/user.d.ts +6 -0
  62. package/dist/{rule-CB9Qlcx1.js → rule-BR5rrmUV.js} +2 -2
  63. package/dist/{rule-builder-BIKcA4Bg.js → rule-builder-7GBNrPXt.js} +1 -1
  64. package/dist/{template-qlb46PGl.js → template-CETJ6lkf.js} +5 -5
  65. package/dist/{usePagination-CX66ab1Y.js → usePagination-DdZeE4Tt.js} +57 -56
  66. package/dist/user-Bm4KttFq.js +37 -0
  67. package/dist/{xlsx-DMaFso0k.js → xlsx-CDAKxZE_.js} +1 -1
  68. package/package.json +1 -1
  69. package/dist/Card-Dlj5jQp4.js +0 -792
  70. package/dist/MemberList-CrhMqUfJ.js +0 -1664
  71. package/dist/MessageInput.vue_vue_type_script_setup_true_lang-D-ttMwn2.js +0 -166
  72. package/dist/Segment-DnsPrP7Q.js +0 -371
  73. package/dist/StoreTransactions.vue_vue_type_script_setup_true_lang-BAyotuXd.js +0 -660
  74. package/dist/Transaction-DdfX7Xfe.js +0 -34
  75. package/dist/Voucher-DarXrxZr.js +0 -454
  76. package/dist/index-Dg-PMgXV.js +0 -64
  77. package/dist/loading-Cxp7sI5p.js +0 -100
@@ -1,17 +1,16 @@
1
- import { defineComponent as I, openBlock as l, createElementBlock as h, Fragment as V, renderList as P, createElementVNode as a, toDisplayString as U, createCommentVNode as B, resolveComponent as S, createBlock as F, withCtx as O, createVNode as p, unref as n, ref as C, computed as G, onMounted as q, watch as X, isRef as N, createSlots as Y, createTextVNode as ee, reactive as te, onBeforeMount as ae, normalizeClass as ne } from "vue";
2
- import { _ as oe } from "./campaign-CpzFl8Vr.js";
3
- import { f as le } from "./number-BBtf4fYz.js";
4
- import { C as se, F as ie, a as re } from "./dto-BtdVC-Ab.js";
1
+ import { defineComponent as I, openBlock as o, createElementBlock as h, Fragment as V, renderList as P, createElementVNode as a, toDisplayString as U, createCommentVNode as B, resolveComponent as S, createBlock as F, withCtx as O, createVNode as p, unref as n, ref as C, computed as G, onMounted as q, watch as X, isRef as N, createSlots as Y, createTextVNode as ee, reactive as te, onBeforeMount as ae, normalizeClass as ne } from "vue";
2
+ import { _ as le } from "./campaign-CpzFl8Vr.js";
3
+ import { f as oe } from "./number-CBzs6rfW.js";
4
+ import { C as se, F as ie, a as re } from "./dto-YYVhW73A.js";
5
5
  import { useRouter as ce } from "vue-router";
6
- import { c as T } from "./index-BTntbYTS.js";
6
+ import { c as T } from "./index-DQC_1tRF.js";
7
7
  import { _ as ue, Z as de } from "./ZodTextField.vue_vue_type_script_setup_true_lang-3LlSDiq0.js";
8
- import { J as me, u as pe } from "./app-CxBTTB31.js";
9
- import "./plugins-B_d-WFtN.js";
10
- import { useSnackbar as fe } from "@feedmepos/ui-library";
11
- import { u as ve } from "./loading-Cxp7sI5p.js";
8
+ import { J as me, u as pe } from "./app-DgbDbhL-.js";
9
+ import { u as fe } from "./loading-DQaawbHE.js";
10
+ import { useSnackbar as ve } from "@feedmepos/ui-library";
12
11
  import { g as ye } from "./object-qECH92oz.js";
13
- import { u as _e } from "./campaign-B0aXkadj.js";
14
- import { m as ge } from "./index-Dg-PMgXV.js";
12
+ import { u as _e } from "./campaign-BkvrUTEJ.js";
13
+ import { m as ge } from "./index-Cz5RZlYh.js";
15
14
  const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-md-400 mb-2 text-fm-color-typo-secondary" }, xe = { class: "fm-typo-en-title-sm-800" }, Ce = /* @__PURE__ */ I({
16
15
  __name: "CampaignStat",
17
16
  props: {
@@ -31,11 +30,11 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
31
30
  ];
32
31
  function u(_) {
33
32
  var r;
34
- return le((r = R.data) == null ? void 0 : r[_], 2, !0) || 0;
33
+ return oe((r = R.data) == null ? void 0 : r[_], 2, !0) || 0;
35
34
  }
36
- return (_, r) => (l(), h("div", he, [
37
- (l(), h(V, null, P(i, (e) => (l(), h(V, null, [
38
- e.key in m.data ? (l(), h("div", {
35
+ return (_, r) => (o(), h("div", he, [
36
+ (o(), h(V, null, P(i, (e) => (o(), h(V, null, [
37
+ e.key in m.data ? (o(), h("div", {
39
38
  key: e.key,
40
39
  class: "px-16"
41
40
  }, [
@@ -62,7 +61,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
62
61
  const i = se[m.type];
63
62
  return (u, _) => {
64
63
  const r = S("FmIcon"), e = S("FmTooltip");
65
- return l(), F(e, {
64
+ return o(), F(e, {
66
65
  variant: "plain",
67
66
  placement: "top",
68
67
  content: m.label
@@ -118,8 +117,8 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
118
117
  groupId: i.group._id.toString()
119
118
  });
120
119
  }), (e, c) => {
121
- const s = S("FmButton"), o = S("FmCard");
122
- return l(), F(o, {
120
+ const s = S("FmButton"), l = S("FmCard");
121
+ return o(), F(l, {
123
122
  class: "mb-24 p-24",
124
123
  variant: "outlined"
125
124
  }, {
@@ -136,7 +135,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
136
135
  ])
137
136
  ]),
138
137
  a("div", Ae, [
139
- (l(!0), h(V, null, P(n(r), (f) => (l(), F(we, {
138
+ (o(!0), h(V, null, P(n(r), (f) => (o(), F(we, {
140
139
  key: e.index,
141
140
  type: f.campaign.type,
142
141
  label: f.label
@@ -159,7 +158,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
159
158
  emits: ["update:model-value"],
160
159
  setup(m, { emit: R }) {
161
160
  const i = m, u = R, _ = (s) => {
162
- s ? c.value = i.items.map((o) => o.value) : c.value = [], e.value = s, u("update:model-value", c.value);
161
+ s ? c.value = i.items.map((l) => l.value) : c.value = [], e.value = s, u("update:model-value", c.value);
163
162
  }, r = (s) => {
164
163
  c.value = s, e.value = s.length === i.items.length, u("update:model-value", s);
165
164
  }, e = C(!1), c = C([]);
@@ -167,16 +166,16 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
167
166
  () => i.modelValue,
168
167
  () => {
169
168
  c.value = i.modelValue.filter(
170
- (s) => i.items.find((o) => o.value === s)
169
+ (s) => i.items.find((l) => l.value === s)
171
170
  );
172
171
  }
173
172
  ), q(() => {
174
173
  c.value = i.modelValue.filter(
175
- (s) => i.items.find((o) => o.value === s)
174
+ (s) => i.items.find((l) => l.value === s)
176
175
  );
177
- }), (s, o) => {
176
+ }), (s, l) => {
178
177
  const f = S("FmCheckbox"), b = S("FmCard");
179
- return l(), F(b, {
178
+ return o(), F(b, {
180
179
  variant: "outlined",
181
180
  class: "p-16 space-y-8 h-full cursor-pointer select-none xs:col-span-3"
182
181
  }, {
@@ -189,7 +188,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
189
188
  "onUpdate:modelValue": _
190
189
  }, null, 8, ["model-value", "label", "indeterminate"]),
191
190
  a("div", Oe, [
192
- (l(!0), h(V, null, P(i.items, (g, w) => (l(), F(f, {
191
+ (o(!0), h(V, null, P(i.items, (g, w) => (o(), F(f, {
193
192
  key: w,
194
193
  "model-value": n(c),
195
194
  label: g.label,
@@ -216,36 +215,36 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
216
215
  },
217
216
  emits: ["update:model-value"],
218
217
  setup(m, { emit: R }) {
219
- const i = C(""), u = C([]), _ = m, r = R, e = G(() => Object.entries(_.campaigns).reduce((s, [o, f]) => {
218
+ const i = C(""), u = C([]), _ = m, r = R, e = G(() => Object.entries(_.campaigns).reduce((s, [l, f]) => {
220
219
  const b = f.filter(
221
220
  (g) => g.label.toLowerCase().includes(i.value.toLowerCase())
222
221
  );
223
- return b.length > 0 && (s[o] = b), s;
222
+ return b.length > 0 && (s[l] = b), s;
224
223
  }, {}));
225
- function c(s, o) {
224
+ function c(s, l) {
226
225
  u.value = u.value.filter(
227
- (f) => !o.map((b) => b.value).includes(f)
226
+ (f) => !l.map((b) => b.value).includes(f)
228
227
  ), u.value = [.../* @__PURE__ */ new Set([...u.value, ...s])], r("update:model-value", u.value);
229
228
  }
230
229
  return q(() => {
231
230
  u.value = _.modelValue;
232
- }), (s, o) => {
231
+ }), (s, l) => {
233
232
  const f = S("FmTextField");
234
- return l(), h(V, null, [
233
+ return o(), h(V, null, [
235
234
  p(me, { json: m.campaigns }, null, 8, ["json"]),
236
235
  a("div", Be, [
237
236
  a("div", Pe, [
238
237
  a("div", Te, U(n(u).length) + " campaign(s) linked ", 1),
239
238
  p(f, {
240
239
  modelValue: n(i),
241
- "onUpdate:modelValue": o[0] || (o[0] = (b) => N(i) ? i.value = b : null),
240
+ "onUpdate:modelValue": l[0] || (l[0] = (b) => N(i) ? i.value = b : null),
242
241
  "prepend-icon": "search",
243
242
  placeholder: "Search",
244
243
  class: "w-full"
245
244
  }, null, 8, ["modelValue"])
246
245
  ]),
247
246
  a("div", Ge, [
248
- (l(!0), h(V, null, P(n(e), (b, g) => (l(), F(Ee, {
247
+ (o(!0), h(V, null, P(n(e), (b, g) => (o(), F(Ee, {
249
248
  "model-value": n(u),
250
249
  title: g,
251
250
  items: b,
@@ -264,18 +263,18 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
264
263
  emits: ["success"],
265
264
  setup(m, { expose: R, emit: i }) {
266
265
  const u = i, _ = pe();
267
- fe();
266
+ ve();
268
267
  const r = C(!1), e = C(!1), c = {
269
268
  name: "",
270
269
  campaigns: []
271
- }, s = C(""), o = C({ ...c }), f = ie.superRefine((d, t) => {
272
- }), b = C([]), g = C(null), { global: w, minor: v } = ve, E = G(() => {
273
- const d = f.safeParse(o.value);
270
+ }, s = C(""), l = C({ ...c }), f = ie.superRefine((d, t) => {
271
+ }), b = C([]), g = C(null), { global: w, minor: v } = fe, E = G(() => {
272
+ const d = f.safeParse(l.value);
274
273
  return d.success ? [] : d.error.errors;
275
274
  });
276
275
  function L(d) {
277
276
  var t;
278
- r.value = !0, d ? (g.value = { ...d }, o.value = { ...d, campaigns: (t = d.pf_campaigns) == null ? void 0 : t.map((y) => y._id) }) : (g.value = null, o.value = { ...c });
277
+ r.value = !0, d ? (g.value = { ...d }, l.value = { ...d, campaigns: (t = d.pf_campaigns) == null ? void 0 : t.map((y) => y._id) }) : (g.value = null, l.value = { ...c });
279
278
  }
280
279
  function k() {
281
280
  r.value = !1, g.value = null;
@@ -309,7 +308,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
309
308
  (d, [t, y]) => {
310
309
  const A = y.filter((j) => {
311
310
  var D, x;
312
- return (x = (D = o.value) == null ? void 0 : D.campaigns) == null ? void 0 : x.includes(j.value);
311
+ return (x = (D = l.value) == null ? void 0 : D.campaigns) == null ? void 0 : x.includes(j.value);
313
312
  }).filter(
314
313
  (j) => j.label.toLowerCase().includes(s.value.toLowerCase())
315
314
  );
@@ -319,17 +318,17 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
319
318
  ));
320
319
  function J(d) {
321
320
  var y, A;
322
- const t = (y = o.value.campaigns) == null ? void 0 : y.indexOf(d);
323
- t != null && t > -1 && ((A = o.value.campaigns) == null || A.splice(t, 1));
321
+ const t = (y = l.value.campaigns) == null ? void 0 : y.indexOf(d);
322
+ t != null && t > -1 && ((A = l.value.campaigns) == null || A.splice(t, 1));
324
323
  }
325
324
  async function W() {
326
- f.safeParse(o.value).success && await v(
325
+ f.safeParse(l.value).success && await v(
327
326
  async () => {
328
327
  var t;
329
328
  g.value ? await T.updateGroup(
330
329
  (t = g.value) == null ? void 0 : t._id,
331
- o.value
332
- ) : await T.createGroup(o.value), u("success"), k();
330
+ l.value
331
+ ) : await T.createGroup(l.value), u("success"), k();
333
332
  },
334
333
  {
335
334
  message: "Saving group",
@@ -356,7 +355,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
356
355
  hideSheet: k
357
356
  }), (d, t) => {
358
357
  const y = S("FmButton"), A = S("FmTextField"), j = S("FmList"), D = S("FmSideSheet");
359
- return l(), F(D, {
358
+ return o(), F(D, {
360
359
  modelValue: n(r),
361
360
  "onUpdate:modelValue": t[7] || (t[7] = (x) => N(r) ? r.value = x : null),
362
361
  header: n(g) ? "Edit group" : "Add group",
@@ -366,7 +365,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
366
365
  }, Y({
367
366
  "side-sheet-footer": O(() => [
368
367
  a("div", Je, [
369
- n(e) ? B("", !0) : (l(), h(V, { key: 0 }, [
368
+ n(e) ? B("", !0) : (o(), h(V, { key: 0 }, [
370
369
  p(y, {
371
370
  label: "Submit",
372
371
  onClick: W,
@@ -377,7 +376,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
377
376
  onClick: t[4] || (t[4] = (x) => k()),
378
377
  variant: "tertiary"
379
378
  }),
380
- n(g) ? (l(), F(y, {
379
+ n(g) ? (o(), F(y, {
381
380
  key: 0,
382
381
  label: "Delete",
383
382
  variant: "plain",
@@ -385,7 +384,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
385
384
  onClick: t[5] || (t[5] = (x) => Z())
386
385
  })) : B("", !0)
387
386
  ], 64)),
388
- n(e) ? (l(), F(y, {
387
+ n(e) ? (o(), F(y, {
389
388
  key: 1,
390
389
  label: "Confirm",
391
390
  onClick: t[6] || (t[6] = (x) => e.value = !1)
@@ -393,17 +392,17 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
393
392
  ])
394
393
  ]),
395
394
  default: O(() => [
396
- n(e) ? B("", !0) : (l(), h("div", je, [
395
+ n(e) ? B("", !0) : (o(), h("div", je, [
397
396
  Me,
398
397
  p(ue, {
399
- modelValue: n(o).name,
400
- "onUpdate:modelValue": t[1] || (t[1] = (x) => n(o).name = x),
398
+ modelValue: n(l).name,
399
+ "onUpdate:modelValue": t[1] || (t[1] = (x) => n(l).name = x),
401
400
  label: "Name",
402
401
  schema: n(de).typeAtPath(n(f), "name")
403
402
  }, null, 8, ["modelValue", "schema"]),
404
403
  De,
405
404
  a("div", Ne, [
406
- a("div", qe, U(n(o).campaigns.length) + " campaign(s) linked ", 1),
405
+ a("div", qe, U(n(l).campaigns.length) + " campaign(s) linked ", 1),
407
406
  p(A, {
408
407
  modelValue: n(s),
409
408
  "onUpdate:modelValue": t[2] || (t[2] = (x) => N(s) ? s.value = x : null),
@@ -419,18 +418,18 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
419
418
  onClick: H
420
419
  })
421
420
  ])),
422
- n(e) ? (l(), F(Ie, {
421
+ n(e) ? (o(), F(Ie, {
423
422
  key: 1,
424
- modelValue: n(o).campaigns,
425
- "onUpdate:modelValue": t[3] || (t[3] = (x) => n(o).campaigns = x),
423
+ modelValue: n(l).campaigns,
424
+ "onUpdate:modelValue": t[3] || (t[3] = (x) => n(l).campaigns = x),
426
425
  campaigns: n(M)
427
426
  }, null, 8, ["modelValue", "campaigns"])) : B("", !0),
428
427
  a("div", He, [
429
- n(e) ? B("", !0) : (l(!0), h(V, { key: 0 }, P(n(K), (x, Q) => (l(), h("div", null, [
428
+ n(e) ? B("", !0) : (o(!0), h(V, { key: 0 }, P(n(K), (x, Q) => (o(), h("div", null, [
430
429
  a("div", ze, U(Q), 1),
431
430
  p(j, { separator: !0 }, {
432
431
  default: O(() => [
433
- (l(!0), h(V, null, P(x, (z) => (l(), h("div", Ke, [
432
+ (o(!0), h(V, null, P(x, (z) => (o(), h("div", Ke, [
434
433
  a("div", null, U(z.label), 1),
435
434
  a("div", null, [
436
435
  p(y, {
@@ -466,9 +465,9 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
466
465
  };
467
466
  }
468
467
  }), Ze = { class: "px-24 flex flex-col gap-y-32 pb-24" }, Qe = { class: "space-y-16" }, Xe = { class: "flex items-center justify-end" }, Ye = /* @__PURE__ */ a("div", { class: "fm-typo-en-body-lg-600" }, "Connect summary", -1), et = { class: "grid grid-cols-4 xs:grid-cols-2 gap-4 divide-x xs:divide-x-0" }, tt = { class: "fm-typo-body-md-400 fm-typo-en-body-md-400 mb-2 text-fm-color-typo-secondary" }, at = { class: "fm-typo-en-title-sm-800" }, nt = /* @__PURE__ */ a("img", {
469
- src: oe,
468
+ src: le,
470
469
  class: "w-[150px]"
471
- }, null, -1), ot = /* @__PURE__ */ a("div", { class: "fm-typo-en-title-sm-800 text-center" }, " Create campaign group to track performance ", -1), lt = /* @__PURE__ */ a("div", { class: "fm-typo-body-en-md-400 text-center text-fm-color-typo-secondary" }, " Start organizing your campaigns and promotions by creating groups. Groups allow you to aggregate performance metrics across multiple vouchers, promotions, or other rewards. ", -1), st = { class: "flex gap-16 items-center" }, Ct = /* @__PURE__ */ I({
470
+ }, null, -1), lt = /* @__PURE__ */ a("div", { class: "fm-typo-en-title-sm-800 text-center" }, " Create campaign group to track performance ", -1), ot = /* @__PURE__ */ a("div", { class: "fm-typo-body-en-md-400 text-center text-fm-color-typo-secondary" }, " Start organizing your campaigns and promotions by creating groups. Groups allow you to aggregate performance metrics across multiple vouchers, promotions, or other rewards. ", -1), st = { class: "flex gap-16 items-center" }, xt = /* @__PURE__ */ I({
472
471
  __name: "Analytic",
473
472
  setup(m) {
474
473
  const R = {
@@ -494,7 +493,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
494
493
  value: () => e.totalMember
495
494
  }
496
495
  ];
497
- function o(w) {
496
+ function l(w) {
498
497
  var v;
499
498
  c.value = (/* @__PURE__ */ new Date()).toISOString(), (v = u.value) == null || v.showSheet(w);
500
499
  }
@@ -538,11 +537,11 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
538
537
  await f(), await b();
539
538
  }), (w, v) => {
540
539
  const E = S("FmPageHead"), L = S("FmSearch"), k = S("FmCard"), H = S("FmButton");
541
- return l(), h(V, null, [
540
+ return o(), h(V, null, [
542
541
  p(E, {
543
542
  title: "Analytic",
544
543
  actions: n(_).length > 0 ? [R] : [],
545
- "onClick:action": v[0] || (v[0] = ($) => o())
544
+ "onClick:action": v[0] || (v[0] = ($) => l())
546
545
  }, null, 8, ["actions"]),
547
546
  a("div", Ze, [
548
547
  a("div", Qe, [
@@ -562,7 +561,7 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
562
561
  default: O(() => [
563
562
  Ye,
564
563
  a("div", et, [
565
- (l(), h(V, null, P(s, ($, M) => a("div", {
564
+ (o(), h(V, null, P(s, ($, M) => a("div", {
566
565
  key: $.key,
567
566
  class: ne(["px-8", { "xs:!border-r": M % 2 == 0 }])
568
567
  }, [
@@ -574,29 +573,29 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
574
573
  _: 1
575
574
  })
576
575
  ]),
577
- n(_).length ? B("", !0) : (l(), F(k, {
576
+ n(_).length ? B("", !0) : (o(), F(k, {
578
577
  key: 0,
579
578
  variant: "outlined",
580
579
  class: "flex flex-col gap-y-24 items-center p-16"
581
580
  }, {
582
581
  default: O(() => [
583
582
  nt,
584
- ot,
585
583
  lt,
584
+ ot,
586
585
  a("div", st, [
587
586
  p(H, {
588
587
  label: "Create group",
589
588
  icon: "add",
590
- onClick: v[2] || (v[2] = ($) => o())
589
+ onClick: v[2] || (v[2] = ($) => l())
591
590
  })
592
591
  ])
593
592
  ]),
594
593
  _: 1
595
594
  })),
596
- (l(!0), h(V, null, P(n(g), ($) => (l(), F(Ue, {
595
+ (o(!0), h(V, null, P(n(g), ($) => (o(), F(Ue, {
597
596
  key: $._id.toString(),
598
597
  group: $,
599
- "on-edit": o
598
+ "on-edit": l
600
599
  }, null, 8, ["group"]))), 128)),
601
600
  p(We, {
602
601
  ref_key: "sheetRef",
@@ -609,5 +608,5 @@ const he = { class: "divide-x flex flex-wrap" }, be = { class: "fm-typo-en-body-
609
608
  }
610
609
  });
611
610
  export {
612
- Ct as default
611
+ xt as default
613
612
  };
@@ -1,24 +1,23 @@
1
- import { defineComponent as P, ref as g, computed as U, onMounted as M, resolveComponent as i, openBlock as l, createElementBlock as f, Fragment as _, createVNode as r, unref as a, createElementVNode as s, withCtx as h, renderList as j, createBlock as w, resolveDynamicComponent as E, toDisplayString as C, createCommentVNode as H, h as q } from "vue";
1
+ import { defineComponent as P, ref as g, computed as U, onMounted as M, resolveComponent as l, openBlock as i, createElementBlock as f, Fragment as _, createVNode as r, unref as a, createElementVNode as s, withCtx as h, renderList as j, createBlock as w, resolveDynamicComponent as E, toDisplayString as b, createCommentVNode as H, h as q } from "vue";
2
2
  import { _ as z } from "./campaign-CpzFl8Vr.js";
3
3
  import { useDialog as G, components as J } from "@feedmepos/ui-library";
4
- import { p as Q } from "./plugins-B_d-WFtN.js";
5
- import { u as W } from "./loading-Cxp7sI5p.js";
6
- import { a as X } from "./app-CxBTTB31.js";
7
- import { u as Y } from "./campaign-B0aXkadj.js";
8
- import { g as F, b as k } from "./dto-BtdVC-Ab.js";
4
+ import { u as Q, p as W } from "./loading-DQaawbHE.js";
5
+ import { a as X } from "./app-DgbDbhL-.js";
6
+ import { u as Y } from "./campaign-BkvrUTEJ.js";
7
+ import { g as F, b as k } from "./dto-YYVhW73A.js";
9
8
  import { _ as Z } from "./ChipMenu.vue_vue_type_script_setup_true_lang-BPpZZNkr.js";
10
- import { _ as ee } from "./EditCampaignSheet.vue_vue_type_script_setup_true_lang-BsbgHsah.js";
11
- import { u as te } from "./template-qlb46PGl.js";
12
- import { c as y } from "./index-BTntbYTS.js";
13
- const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-center justify-between w-full" }, se = { class: "flex gap-8 overflow-x-auto" }, ne = { class: "space-y-8" }, re = { class: "flex w-full gap-4 items-center" }, ie = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, le = { class: "space-y-4" }, ce = { class: "fm-typo-en-body-lg-600" }, me = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, de = { key: 0 }, ue = /* @__PURE__ */ s("div", { class: "text-fm-color-typo-secondary fm-typo-en-body-md-600" }, " No results found ", -1), pe = [
9
+ import { _ as ee } from "./EditCampaignSheet.vue_vue_type_script_setup_true_lang-CUxfXaro.js";
10
+ import { u as te } from "./template-CETJ6lkf.js";
11
+ import { c as y } from "./index-DQC_1tRF.js";
12
+ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-center justify-between w-full" }, se = { class: "flex gap-8 overflow-x-auto" }, ne = { class: "space-y-8" }, re = { class: "flex w-full gap-4 items-center" }, le = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, ie = { class: "space-y-4" }, ce = { class: "fm-typo-en-body-lg-600" }, me = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, de = { key: 0 }, ue = /* @__PURE__ */ s("div", { class: "text-fm-color-typo-secondary fm-typo-en-body-md-600" }, " No results found ", -1), pe = [
14
13
  ue
15
14
  ], fe = /* @__PURE__ */ s("img", {
16
15
  src: z,
17
16
  class: "aspect-square w-[150px]"
18
17
  }, null, -1), ye = /* @__PURE__ */ s("div", { class: "flex flex-col gap-16 text-center" }, [
19
18
  /* @__PURE__ */ s("div", { class: "fm-typo-en-title-sm-800" }, " Create your broadcast campaign "),
20
- /* @__PURE__ */ s("div", { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, " Broadcasts are virtual money that customers can use to pay for their purchases, similar to cash within your store. ")
21
- ], -1), Ve = /* @__PURE__ */ P({
19
+ /* @__PURE__ */ s("div", { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, " Broadcasting allows you to send text messages to all your customers, informing them about new deals, events, or important updates. ")
20
+ ], -1), Ae = /* @__PURE__ */ P({
22
21
  __name: "Broadcast",
23
22
  setup(ge) {
24
23
  const A = {
@@ -26,7 +25,7 @@ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-
26
25
  value: "create",
27
26
  isPrimary: !0,
28
27
  prependIcon: "add"
29
- }, V = te("BROADCAST", G()), R = X(), c = Y(), { global: D, minor: b } = W, L = g((/* @__PURE__ */ new Date()).toISOString()), n = g({
28
+ }, V = te("BROADCAST", G()), R = X(), c = Y(), { global: D, minor: C } = Q, L = g((/* @__PURE__ */ new Date()).toISOString()), n = g({
30
29
  searchKey: "",
31
30
  location: null
32
31
  }), u = U(
@@ -67,7 +66,7 @@ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-
67
66
  }
68
67
  ], v = g();
69
68
  async function x(e) {
70
- await Q.remove(`Are you sure you want to remove ${e.name}?`) && await b(
69
+ await W.remove(`Are you sure you want to remove ${e.name}?`) && await C(
71
70
  async () => {
72
71
  await y.delete(e._id), await c.read("BROADCAST");
73
72
  },
@@ -92,7 +91,7 @@ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-
92
91
  }
93
92
  }
94
93
  async function $(e) {
95
- await b(
94
+ await C(
96
95
  async () => {
97
96
  e.campaign._id ? await y.update(e.campaign._id, e) : await y.create(e), await c.read("BROADCAST");
98
97
  },
@@ -107,8 +106,8 @@ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-
107
106
  await c.read("BROADCAST");
108
107
  });
109
108
  }), (e, o) => {
110
- const m = i("FmPageHead"), d = i("FmSearch"), K = i("FmTable"), S = i("FmButton"), I = i("FmListItem"), O = i("FmList"), N = i("FmCard");
111
- return l(), f(_, null, [
109
+ const m = l("FmPageHead"), d = l("FmSearch"), K = l("FmTable"), S = l("FmButton"), I = l("FmListItem"), O = l("FmList"), N = l("FmCard");
110
+ return i(), f(_, null, [
112
111
  r(m, {
113
112
  title: "Broadcast",
114
113
  actions: a(u).length > 0 ? [A] : [],
@@ -122,7 +121,7 @@ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-
122
121
  placeholder: "search",
123
122
  collapsible: ""
124
123
  }, null, 8, ["modelValue"]),
125
- a(c).campaigns.broadcast && a(c).campaigns.broadcast.length > 0 ? (l(), f(_, { key: 0 }, [
124
+ a(c).campaigns.broadcast && a(c).campaigns.broadcast.length > 0 ? (i(), f(_, { key: 0 }, [
126
125
  s("div", ae, [
127
126
  s("div", se, [
128
127
  r(Z, {
@@ -154,9 +153,9 @@ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-
154
153
  }, null, 8, ["row-data", "search-value"]),
155
154
  r(O, { class: "hidden xs:flex flex-col mx-[-24px]" }, {
156
155
  default: h(() => [
157
- (l(!0), f(_, null, j(a(u).filter(
156
+ (i(!0), f(_, null, j(a(u).filter(
158
157
  (t) => t.name.toLowerCase().includes(a(n).searchKey.toLowerCase())
159
- ), (t) => (l(), w(I, {
158
+ ), (t) => (i(), w(I, {
160
159
  key: t._id.toString(),
161
160
  onClick: (B) => p(t),
162
161
  class: "py-12 px-16 flex items-center justify-between border-b border-fm-color-neutral-gray-100"
@@ -164,12 +163,12 @@ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-
164
163
  default: h(() => [
165
164
  s("div", ne, [
166
165
  s("div", re, [
167
- (l(), w(E(a(F)(t)))),
168
- s("div", ie, C(t.currentReceive ?? 0) + " sent ", 1)
166
+ (i(), w(E(a(F)(t)))),
167
+ s("div", le, b(t.currentReceive ?? 0) + " sent ", 1)
169
168
  ]),
170
- s("div", le, [
171
- s("div", ce, C(t.name), 1),
172
- s("div", me, C(a(k)(t)), 1)
169
+ s("div", ie, [
170
+ s("div", ce, b(t.name), 1),
171
+ s("div", me, b(a(k)(t)), 1)
173
172
  ])
174
173
  ]),
175
174
  r(S, {
@@ -184,8 +183,8 @@ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-
184
183
  ]),
185
184
  _: 1
186
185
  }),
187
- a(u).length == 0 ? (l(), f("div", de, pe)) : H("", !0)
188
- ], 64)) : (l(), w(N, {
186
+ a(u).length == 0 ? (i(), f("div", de, pe)) : H("", !0)
187
+ ], 64)) : (i(), w(N, {
189
188
  key: 1,
190
189
  variant: "outlined",
191
190
  class: "w-full flex flex-col items-center justify-center gap-y-24 p-24"
@@ -213,5 +212,5 @@ const oe = { class: "px-24 flex flex-col gap-y-16" }, ae = { class: "flex items-
213
212
  }
214
213
  });
215
214
  export {
216
- Ve as default
215
+ Ae as default
217
216
  };
@@ -1,38 +1,38 @@
1
- import { R as RuleOperator, _ } from "./index-D2Juhkdw.js";
2
- import { i as isRuleGroup } from "./rule-builder-BIKcA4Bg.js";
1
+ import { R as RuleOperator, _ } from "./index-BhacKx5B.js";
2
+ import { i as isRuleGroup } from "./rule-builder-7GBNrPXt.js";
3
3
  import { defineComponent, resolveComponent, openBlock, createBlock, withCtx, createElementVNode, createElementBlock, Fragment, renderList, createVNode, toDisplayString } from "vue";
4
4
  import { useDialog } from "@feedmepos/ui-library";
5
- import "./index-DDSLx7vu.js";
6
- import { a as F_RUNNABLE_CAMPAIGN_TYPE } from "./index-0GYrZr4L.js";
7
- import "./index-DysVCkrx.js";
8
- import "./index-CK9yJMj7.js";
9
- import "./index-BvnZdJBY.js";
10
- import "./index-8clzk3uX.js";
5
+ import "./index-BsEqtUmY.js";
6
+ import { a as F_RUNNABLE_CAMPAIGN_TYPE } from "./index-CdtrQ9tR.js";
7
+ import "./index-Dd3hrFcQ.js";
8
+ import "./index-FWp9M1yS.js";
9
+ import "./index-oQLJE4Uw.js";
10
+ import "./index-Cfo2A0Se.js";
11
11
  function validateRule(data, r, date) {
12
12
  const rules = new RuleOperator(date ?? /* @__PURE__ */ new Date());
13
13
  function meetConditions(e) {
14
14
  return Object.entries(e.conditions ?? {}).reduce(
15
- (o, [i, t]) => {
16
- const n = e.property ? e.property === "__now" ? rules.ruleNow : _.get(data, e.property) : data;
15
+ (o, [n, t]) => {
16
+ const l = e.property ? e.property === "__now" ? rules.ruleNow : _.get(data, e.property) : data;
17
17
  if (!t)
18
18
  return o;
19
- const l = rules[i](
20
- n,
19
+ const i = rules[n](
20
+ l,
21
21
  t
22
22
  );
23
- return o && l;
23
+ return o && i;
24
24
  },
25
25
  !0
26
26
  );
27
27
  }
28
28
  function evaluateRuleResult(rr, logic) {
29
- const target = Object.entries(rr).reduce((e, [o, i]) => e.replace(RegExp(`\\b${o}\\b`, "g"), i ? "true" : "false"), logic);
29
+ const target = Object.entries(rr).reduce((e, [o, n]) => e.replace(RegExp(`\\b${o}\\b`, "g"), n ? "true" : "false"), logic);
30
30
  return !logic || !!eval(target);
31
31
  }
32
32
  function getRuleResults(e) {
33
- return isRuleGroup(e) ? Object.entries(e.rules).reduce((o, [i, t]) => ({
33
+ return isRuleGroup(e) ? Object.entries(e.rules).reduce((o, [n, t]) => ({
34
34
  ...o,
35
- [i]: isRuleGroup(t) ? evaluateRuleResult(getRuleResults(t), t.logic) : meetConditions(t)
35
+ [n]: isRuleGroup(t) ? evaluateRuleResult(getRuleResults(t), t.logic) : meetConditions(t)
36
36
  }), {}) : {
37
37
  [e.name]: meetConditions(e)
38
38
  };
@@ -42,7 +42,7 @@ function validateRule(data, r, date) {
42
42
  const _hoisted_1 = /* @__PURE__ */ createElementVNode("div", { class: "" }, [
43
43
  /* @__PURE__ */ createElementVNode("div", { class: "fm-typo-en-title-sm-800" }, "Add benefit"),
44
44
  /* @__PURE__ */ createElementVNode("div", { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, " Select the benefit type that you want to reward the selected tier. ")
45
- ], -1), _hoisted_2 = { class: "flex flex-col h-full space-y-24" }, _hoisted_3 = { class: "fm-typo-en-title-sm-800" }, _hoisted_4 = { class: "fm-typo-en-body-lg-400 text-fm-color-typo-secondary" }, _sfc_main = /* @__PURE__ */ defineComponent({
45
+ ], -1), _hoisted_2 = { class: "flex flex-col h-full space-y-24" }, _hoisted_3 = { class: "fm-typo-en-title-sm-600" }, _hoisted_4 = { class: "fm-typo-en-body-lg-400 text-fm-color-typo-secondary" }, _sfc_main = /* @__PURE__ */ defineComponent({
46
46
  __name: "CampaignTypeDialog",
47
47
  props: {
48
48
  onSelect: {
@@ -51,7 +51,7 @@ const _hoisted_1 = /* @__PURE__ */ createElementVNode("div", { class: "" }, [
51
51
  }
52
52
  },
53
53
  setup(e) {
54
- const o = e, i = useDialog(), t = [
54
+ const o = e, n = useDialog(), t = [
55
55
  {
56
56
  title: "Promotion",
57
57
  description: "Special offers or deals made available for a limited time",
@@ -59,48 +59,48 @@ const _hoisted_1 = /* @__PURE__ */ createElementVNode("div", { class: "" }, [
59
59
  },
60
60
  {
61
61
  title: "Voucher",
62
- description: "Special offers or deals made available for a limited time",
62
+ description: "A digital coupon that can be redeemed for a discounts on future purchases.",
63
63
  value: F_RUNNABLE_CAMPAIGN_TYPE.enum.VOUCHER
64
64
  },
65
65
  {
66
66
  title: "Experience",
67
- description: "Special offers or deals made available for a limited time",
67
+ description: "Experience points help customers gain membership tiers.",
68
68
  value: F_RUNNABLE_CAMPAIGN_TYPE.enum.POINT
69
69
  },
70
70
  {
71
71
  title: "Point",
72
- description: "Special offers or deals made available for a limited time",
72
+ description: "Points allow customers to purchase bundle items.",
73
73
  value: F_RUNNABLE_CAMPAIGN_TYPE.enum.COIN
74
74
  },
75
75
  {
76
76
  title: "Game",
77
- description: "Special offers or deals made available for a limited time",
77
+ description: "The game feature adds a fun and encourage customers to engage more.",
78
78
  value: F_RUNNABLE_CAMPAIGN_TYPE.enum.GAME
79
79
  },
80
80
  {
81
81
  title: "Credit",
82
- description: "Special offers or deals made available for a limited time",
82
+ description: "Credits are virtual money that customers can use to pay for their purchases.",
83
83
  value: F_RUNNABLE_CAMPAIGN_TYPE.enum.CREDIT
84
84
  }
85
85
  ];
86
- function n(l) {
87
- i.close(), o.onSelect(l);
86
+ function l(i) {
87
+ n.close(), o.onSelect(i);
88
88
  }
89
- return (l, c) => {
90
- const s = resolveComponent("FmCard");
91
- return openBlock(), createBlock(s, { class: "p-24 space-y-16" }, {
89
+ return (i, c) => {
90
+ const a = resolveComponent("FmCard");
91
+ return openBlock(), createBlock(a, { class: "p-24 space-y-16" }, {
92
92
  default: withCtx(() => [
93
93
  _hoisted_1,
94
94
  createElementVNode("div", _hoisted_2, [
95
- (openBlock(), createElementBlock(Fragment, null, renderList(t, (a) => createVNode(s, {
95
+ (openBlock(), createElementBlock(Fragment, null, renderList(t, (s) => createVNode(a, {
96
96
  variant: "outlined",
97
- key: a.value,
98
- onClick: (d) => n(a.value),
99
- class: "p-16"
97
+ key: s.value,
98
+ onClick: (u) => l(s.value),
99
+ class: "p-16 space-y-8 cursor-pointer"
100
100
  }, {
101
101
  default: withCtx(() => [
102
- createElementVNode("div", _hoisted_3, toDisplayString(a.title), 1),
103
- createElementVNode("div", _hoisted_4, toDisplayString(a.description), 1)
102
+ createElementVNode("div", _hoisted_3, toDisplayString(s.title), 1),
103
+ createElementVNode("div", _hoisted_4, toDisplayString(s.description), 1)
104
104
  ]),
105
105
  _: 2
106
106
  }, 1032, ["onClick"])), 64))