@feedmepos/mf-connect 0.1.98-beta.28 → 0.1.98-beta.29

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 (107) hide show
  1. package/dist/{App-vdoxvLFM.js → App-C6SKcn3e.js} +8 -8
  2. package/dist/{AuditLogs-Dd671Ml7.js → AuditLogs-DLanmOme.js} +9 -9
  3. package/dist/{Bin-DCSouVzT.js → Bin-BwPh6VEN.js} +8 -8
  4. package/dist/{Broadcast-DLwey15I.js → Broadcast-Bb8A3hT8.js} +11 -11
  5. package/dist/{CampaignAnalytic-BZdvJVIC.js → CampaignAnalytic-DJdsyWVq.js} +7 -7
  6. package/dist/{CampaignTypeDialog.vue_vue_type_script_setup_true_lang-Btdm4D7p.js → CampaignTypeDialog.vue_vue_type_script_setup_true_lang-CJBuv8_e.js} +6 -6
  7. package/dist/{Card-BdSNr4Tp.js → Card-T39UgpKq.js} +18 -18
  8. package/dist/{Collections-C7LD07as.js → Collections-BgXdN67W.js} +8 -8
  9. package/dist/{Credit-K-PhmWE7.js → Credit-CAXuk9IA.js} +12 -12
  10. package/dist/{EditCampaignSheet.vue_vue_type_script_setup_true_lang-FNHOOVZ_.js → EditCampaignSheet.vue_vue_type_script_setup_true_lang-CtjUO-w-.js} +31 -31
  11. package/dist/{EffectSheet.vue_vue_type_style_index_0_lang-BWLcw_KR.js → EffectSheet.vue_vue_type_style_index_0_lang-DbIFBcTv.js} +6 -6
  12. package/dist/{Experience-8Gq0NycZ.js → Experience-a7VoQ3sI.js} +12 -12
  13. package/dist/{FileSaver.min-CnXhZKnQ.js → FileSaver.min-DRM39Joc.js} +1 -1
  14. package/dist/{Game-CXhFxtzj.js → Game-Jnl9GQUL.js} +13 -13
  15. package/dist/{Grab-BCSMdfBr.js → Grab-BVElbSqe.js} +9 -9
  16. package/dist/{ImageInput.vue_vue_type_script_setup_true_lang-CAYpf1jU.js → ImageInput.vue_vue_type_script_setup_true_lang-Bwe_y-ko.js} +1 -1
  17. package/dist/{Index-0yJ1TIGO.js → Index-CuJAHnS_.js} +10 -10
  18. package/dist/{LocationPicker.vue_vue_type_script_setup_true_lang-BodcWHEk.js → LocationPicker.vue_vue_type_script_setup_true_lang-rO5tkpq-.js} +1 -1
  19. package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-DGh5fUNE.js → LottieAnimation.vue_vue_type_script_setup_true_lang-BJ1RH8SV.js} +1 -1
  20. package/dist/{LoyaltyDashboard-DUKvt3sY.js → LoyaltyDashboard-CoqplSHE.js} +292 -286
  21. package/dist/{MainLayout-DQyAxKMU.js → MainLayout-BzSsNqGq.js} +1 -1
  22. package/dist/{Marketing-C0RikpQ7.js → Marketing-DKYR_3sp.js} +4 -4
  23. package/dist/{MarketingMaterialEdit-Di_11eIh.js → MarketingMaterialEdit-B_G6n15A.js} +6 -6
  24. package/dist/{Member-Bl-AuJIa.js → Member-CKlY8zlf.js} +11 -11
  25. package/dist/{MemberList-Bu1vZp5s.js → MemberList-BTUR8O72.js} +25 -25
  26. package/dist/{MemberTransactions-Bp7EPQNo.js → MemberTransactions-DzIE_P1B.js} +1 -1
  27. package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-DeaT_Xm4.js → MessageInput.vue_vue_type_script_setup_true_lang-DcMfsgZ1.js} +9 -9
  28. package/dist/{MetricInfoTooltip.vue_vue_type_script_setup_true_lang-B1Yj3odA.js → MetricInfoTooltip.vue_vue_type_script_setup_true_lang-Bg_0YlwG.js} +1 -1
  29. package/dist/{Mission-B3u3Lx_w.js → Mission-1ncWxSdf.js} +13 -13
  30. package/dist/{Overview-Bgzfp_Tl.js → Overview-D5sIMjvk.js} +18 -18
  31. package/dist/{Overview-BXLInkPv.js → Overview-DrxddDK9.js} +3 -3
  32. package/dist/{Point-BoctHcSe.js → Point-DC52lE-_.js} +12 -12
  33. package/dist/{Promotion-msvxUuSW.js → Promotion-CRZPLyp7.js} +13 -13
  34. package/dist/{Queue-BuxPR4lh.js → Queue-CxdUed2v.js} +10 -10
  35. package/dist/{Record-Cs-hiWHr.js → Record-DlTP_5Lz.js} +9 -9
  36. package/dist/{Review-BcEj-NeT.js → Review-BEa_KPNl.js} +2 -2
  37. package/dist/{ReviewFacebookCallback-Baq3lYDf.js → ReviewFacebookCallback-Ei_2galU.js} +5 -5
  38. package/dist/{ReviewGoogleCallback-DpiWSyzD.js → ReviewGoogleCallback-BlnsJGH_.js} +5 -5
  39. package/dist/{Reward-BIhCVUH-.js → Reward-kGTnxDld.js} +16 -16
  40. package/dist/{RewardGroup.vue_vue_type_script_setup_true_lang-UrbsUOQb.js → RewardGroup.vue_vue_type_script_setup_true_lang-tLd1yQ-w.js} +11 -11
  41. package/dist/{RuleGroup.vue_vue_type_script_setup_true_lang-D-gNi6X7.js → RuleGroup.vue_vue_type_script_setup_true_lang-CaCtUBR-.js} +14 -14
  42. package/dist/{Segment-CJ3dp0Du.js → Segment-BY6wtjrW.js} +24 -24
  43. package/dist/{SelectItems.vue_vue_type_script_setup_true_lang-BQ2EMgUP.js → SelectItems.vue_vue_type_script_setup_true_lang-DJHRvEFh.js} +2 -2
  44. package/dist/{SendCollectionSheet.vue_vue_type_script_setup_true_lang-C1d1lpqt.js → SendCollectionSheet.vue_vue_type_script_setup_true_lang-Q1UBGIUL.js} +12 -12
  45. package/dist/{SendVoucherSheet.vue_vue_type_script_setup_true_lang-DqEVDhK3.js → SendVoucherSheet.vue_vue_type_script_setup_true_lang-BNIIdyGx.js} +4 -4
  46. package/dist/{Setting-DVhYvXVE.js → Setting-JLxmUT-3.js} +14 -14
  47. package/dist/{SettingAdvertisements-CHydQ7ng.js → SettingAdvertisements-fnPJSM_M.js} +12 -12
  48. package/dist/{Settings-DHzLLa4K.js → Settings-DBfHai7E.js} +5 -5
  49. package/dist/{Store-_Y3hBXzK.js → Store-BImPOOCu.js} +21 -21
  50. package/dist/{StoreRewards-BWn2BU0m.js → StoreRewards-CzQrnnKE.js} +15 -15
  51. package/dist/{StoreTransactions.vue_vue_type_script_setup_true_lang-C63tzKMN.js → StoreTransactions.vue_vue_type_script_setup_true_lang-DE644ZhH.js} +20 -20
  52. package/dist/{TargetLocationInput.vue_vue_type_script_setup_true_lang-Doa4H9JC.js → TargetLocationInput.vue_vue_type_script_setup_true_lang-yO4a7kHx.js} +2 -2
  53. package/dist/{Tier-DViMtkCl.js → Tier-DnfoT21r.js} +24 -24
  54. package/dist/{Title-BGYaz7my.js → Title-C01c9r9E.js} +21 -21
  55. package/dist/{Transaction-BCGhRDl0.js → Transaction-E2WtTU1S.js} +2 -2
  56. package/dist/{UserRuleGroup.vue_vue_type_script_setup_true_lang-DpH5YWXm.js → UserRuleGroup.vue_vue_type_script_setup_true_lang-B_b_EwJ4.js} +6 -6
  57. package/dist/{Voucher-BrTTNc6r.js → Voucher-DHbSKWBZ.js} +14 -14
  58. package/dist/{VoucherEditor.vue_vue_type_script_setup_true_lang-Dpq4WzIc.js → VoucherEditor.vue_vue_type_script_setup_true_lang-Vg5CUiP1.js} +12 -12
  59. package/dist/{ZodTextField.vue_vue_type_script_setup_true_lang-BGo58q5X.js → ZodTextField.vue_vue_type_script_setup_true_lang-CMaT0y_u.js} +2 -2
  60. package/dist/{app-DNraegzu.js → app-CM5BqaSH.js} +236 -236
  61. package/dist/app.js +1 -1
  62. package/dist/{business-cXZbJF8S.js → business-BvnASP7F.js} +1 -1
  63. package/dist/{campaign-C1doH_1s.js → campaign-5Lx-yf4V.js} +7 -7
  64. package/dist/{campaign-wqMNOU6b.js → campaign-C6v_uFcy.js} +2 -2
  65. package/dist/{campaign.fn-DXio3P61.js → campaign.fn-zKWtYRyl.js} +36 -36
  66. package/dist/{collection.fn-BsC8rIYd.js → collection.fn-Dt2pbVyc.js} +2 -2
  67. package/dist/{duplicateCampaign-f_tJs2tH.js → duplicateCampaign-CLhjopho.js} +2 -2
  68. package/dist/{effect-CACluJcx.js → effect-WmiqUsqx.js} +1 -1
  69. package/dist/{email-addresses-COkYUh_g.js → email-addresses-Bp4P9l1W.js} +2 -2
  70. package/dist/{export-CHXEKtZZ.js → export-BUeNaYcV.js} +3 -3
  71. package/dist/{helper-HHjY-Adt.js → helper-DT4JOYil.js} +1 -1
  72. package/dist/{index-CfZFUdYT.js → index-50OcBlYJ.js} +6 -6
  73. package/dist/{index-B73E2SKv.js → index-9_3ZVwqb.js} +1 -1
  74. package/dist/{index-AvL0-p38.js → index-B9vP8FgY.js} +1 -1
  75. package/dist/{index-B0u8xoHU.js → index-CHXZRu1p.js} +1 -1
  76. package/dist/{index-De2lsQfK.js → index-CLpsbDWv.js} +1 -1
  77. package/dist/{index-ElYwTq9E.js → index-CQwWjtRW.js} +3 -3
  78. package/dist/{index-DrAvYOCk.js → index-CSpG45P_.js} +1 -1
  79. package/dist/{index-CsRq9ddQ.js → index-CdOtbg_y.js} +1 -1
  80. package/dist/{index-CMbVv73b.js → index-Cif2BYaH.js} +1 -1
  81. package/dist/{index-BmVOesYC.js → index-DFdzcoYH.js} +2 -2
  82. package/dist/{index-CQwQH7qe.js → index-DqosJEqz.js} +2 -2
  83. package/dist/{index-B4-1LpXk.js → index-FuKsDUKZ.js} +6 -6
  84. package/dist/{index-BDXxszsL.js → index-OmxC3X1w.js} +2 -2
  85. package/dist/{index-C6GCIyfP.js → index-VZ-Z0Zrl.js} +2 -2
  86. package/dist/{index-UEVu7oHd.js → index-c6Rje4su.js} +1 -1
  87. package/dist/{index.esm2017-BXOcPILo.js → index.esm2017-DUMZURZY.js} +1 -1
  88. package/dist/{loading-BZ7Ck-yY.js → loading-CBV3B-Wr.js} +1 -1
  89. package/dist/{lodash-DSnGIIDb.js → lodash-I1sCbRfp.js} +1 -1
  90. package/dist/{membership-Vq5JO6zX.js → membership-BM9sayIX.js} +2 -2
  91. package/dist/{money-CgbXuf2f.js → money-xHXXFSJq.js} +1 -1
  92. package/dist/{number-wzsMi27N.js → number-Bh-Ef6_V.js} +1 -1
  93. package/dist/{objectid-BHJpiO-t.js → objectid-BeEZ-H9e.js} +10 -10
  94. package/dist/{plugins-KCQ7NW4T.js → plugins-CxKwYiFZ.js} +3 -3
  95. package/dist/{reward-BLJMexZT.js → reward-d1AoIumo.js} +1 -1
  96. package/dist/{rule-DfpV-nKb.js → rule-CthdjBtY.js} +3 -3
  97. package/dist/{rule-builder-B7afa19M.js → rule-builder-4aJCfmNr.js} +1 -1
  98. package/dist/{template-B_pkV7b2.js → template-DG0K5ImH.js} +6 -6
  99. package/dist/{timezone-ImDJv5tQ.js → timezone-CL5ViijC.js} +1 -1
  100. package/dist/{trigger-BDJgP_o_.js → trigger-CNIRXSVD.js} +5 -5
  101. package/dist/{useMarketingMaterialActions-DJ5uFa8A.js → useMarketingMaterialActions-BCiSyQIs.js} +3 -3
  102. package/dist/{usePagination-D7bVPh5n.js → usePagination-Dg7LLsT6.js} +1 -1
  103. package/dist/{user-Cs2mVyti.js → user-tT7haw6s.js} +1 -1
  104. package/dist/{vue-i18n-BAXWivDJ.js → vue-i18n-DJ7dtCU4.js} +333 -333
  105. package/dist/{xlsx-bLou7qsN.js → xlsx-DLWH8mFg.js} +1 -1
  106. package/dist/{zod-BCeE9I0g.js → zod-BxXuySeD.js} +1 -1
  107. package/package.json +1 -1
@@ -1,17 +1,17 @@
1
- import { defineComponent as L, resolveComponent as _, openBlock as l, createBlock as A, withCtx as D, createElementVNode as t, createVNode as p, unref as f, createTextVNode as te, createElementBlock as u, Fragment as F, renderList as B, normalizeClass as I, toDisplayString as d, createCommentVNode as U, normalizeStyle as ze, computed as w, ref as x, watch as ge, onMounted as qe, nextTick as Ye } from "vue";
1
+ import { defineComponent as I, resolveComponent as _, openBlock as l, createBlock as L, withCtx as D, createElementVNode as t, createVNode as u, unref as f, createTextVNode as te, createElementBlock as p, Fragment as F, renderList as B, normalizeClass as A, toDisplayString as d, createCommentVNode as U, normalizeStyle as He, computed as w, ref as x, watch as ge, onMounted as ze, nextTick as Ye } from "vue";
2
2
  import { h as he } from "./moment-D7p2TMB-.js";
3
- import { g as R, S as je, b as Ge, c as Je } from "./index-BmVOesYC.js";
3
+ import { g as R, S as je, b as Ge, c as Je } from "./index-DFdzcoYH.js";
4
4
  import { RouterLink as Me, useRouter as Ke } from "vue-router";
5
- import { c as We } from "./index-CMbVv73b.js";
6
- import { _ as T } from "./MetricInfoTooltip.vue_vue_type_script_setup_true_lang-B1Yj3odA.js";
5
+ import { c as We } from "./index-Cif2BYaH.js";
6
+ import { _ as T } from "./MetricInfoTooltip.vue_vue_type_script_setup_true_lang-Bg_0YlwG.js";
7
7
  import { _ as Qe } from "./FilterChip.vue_vue_type_script_setup_true_lang-DaU-9GzO.js";
8
8
  import { _ as xe } from "./DateRangeChip.vue_vue_type_script_setup_true_lang-eIoPtgO5.js";
9
- import { u as Xe } from "./loading-BZ7Ck-yY.js";
10
- import { u as Ze } from "./business-cXZbJF8S.js";
11
- import { C as _e } from "./timezone-ImDJv5tQ.js";
9
+ import { u as Xe } from "./loading-CBV3B-Wr.js";
10
+ import { u as Ze } from "./business-BvnASP7F.js";
11
+ import { C as _e } from "./timezone-CL5ViijC.js";
12
12
  import { useCoreStore as et } from "@feedmepos/mf-common";
13
- import { m as V } from "./index-AvL0-p38.js";
14
- import { t as tt } from "./money-CgbXuf2f.js";
13
+ import { m as V } from "./index-B9vP8FgY.js";
14
+ import { t as tt } from "./money-xHXXFSJq.js";
15
15
  const rt = { class: "flex items-center mb-14" }, st = {
16
16
  key: 0,
17
17
  class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary py-10"
@@ -21,10 +21,10 @@ const rt = { class: "flex items-center mb-14" }, st = {
21
21
  }, at = {
22
22
  key: 2,
23
23
  class: "flex flex-col"
24
- }, nt = { class: "flex-1 min-w-0" }, it = { class: "fm-typo-en-body-sm-600 whitespace-nowrap overflow-hidden text-ellipsis" }, lt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-2" }, dt = { class: "text-right flex-shrink-0" }, ct = { class: "fm-typo-en-body-lg-600" }, mt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-2" }, ut = {
24
+ }, nt = { class: "flex-1 min-w-0" }, it = { class: "fm-typo-en-body-sm-600 whitespace-nowrap overflow-hidden text-ellipsis" }, lt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-2" }, dt = { class: "text-right flex-shrink-0" }, ct = { class: "fm-typo-en-body-lg-600" }, mt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-2" }, pt = {
25
25
  key: 3,
26
26
  class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary py-10"
27
- }, pt = /* @__PURE__ */ L({
27
+ }, ut = /* @__PURE__ */ I({
28
28
  __name: "CampaignActivityList",
29
29
  props: {
30
30
  campaigns: {},
@@ -32,16 +32,16 @@ const rt = { class: "flex items-center mb-14" }, st = {
32
32
  error: { type: Boolean }
33
33
  },
34
34
  setup(e) {
35
- return (o, r) => {
35
+ return (s, r) => {
36
36
  const n = _("FmCard");
37
- return l(), A(n, {
37
+ return l(), L(n, {
38
38
  variant: "outlined",
39
39
  class: "p-24"
40
40
  }, {
41
41
  default: D(() => [
42
42
  t("div", rt, [
43
43
  r[1] || (r[1] = t("div", { class: "flex-1 fm-typo-en-body-md-600" }, "Recent campaigns", -1)),
44
- p(f(Me), {
44
+ u(f(Me), {
45
45
  to: "/campaign",
46
46
  class: "fm-typo-en-body-sm-600 text-fm-color-primary no-underline"
47
47
  }, {
@@ -51,24 +51,24 @@ const rt = { class: "flex items-center mb-14" }, st = {
51
51
  _: 1
52
52
  })
53
53
  ]),
54
- e.loading ? (l(), u("div", st, " Loading campaigns. ")) : e.error ? (l(), u("div", ot, " Unable to load campaigns. ")) : e.campaigns.length ? (l(), u("div", at, [
55
- (l(!0), u(F, null, B(e.campaigns, (s) => (l(), u("div", {
56
- key: s.id,
54
+ e.loading ? (l(), p("div", st, " Loading campaigns. ")) : e.error ? (l(), p("div", ot, " Unable to load campaigns. ")) : e.campaigns.length ? (l(), p("div", at, [
55
+ (l(!0), p(F, null, B(e.campaigns, (o) => (l(), p("div", {
56
+ key: o.id,
57
57
  class: "flex items-start gap-10 py-10 border-b border-fm-color-neutral-gray-100 last:border-b-0"
58
58
  }, [
59
59
  t("div", {
60
- class: I(["w-7 h-7 rounded-full bg-current flex-shrink-0 mt-5", s.statusClass])
60
+ class: A(["w-7 h-7 rounded-full bg-current flex-shrink-0 mt-5", o.statusClass])
61
61
  }, null, 2),
62
62
  t("div", nt, [
63
- t("div", it, d(s.name), 1),
64
- t("div", lt, d(s.type), 1)
63
+ t("div", it, d(o.name), 1),
64
+ t("div", lt, d(o.type), 1)
65
65
  ]),
66
66
  t("div", dt, [
67
- t("div", ct, d(s.metric), 1),
68
- t("div", mt, d(s.metricLabel), 1)
67
+ t("div", ct, d(o.metric), 1),
68
+ t("div", mt, d(o.metricLabel), 1)
69
69
  ])
70
70
  ]))), 128))
71
- ])) : (l(), u("div", ut, " No campaigns are available for this location. "))
71
+ ])) : (l(), p("div", pt, " No campaigns are available for this location. "))
72
72
  ]),
73
73
  _: 1
74
74
  });
@@ -77,56 +77,56 @@ const rt = { class: "flex items-center mb-14" }, st = {
77
77
  }), ft = { class: "flex items-center gap-8" }, bt = { class: "w-[30px] h-[30px] bg-fm-color-primary-oats flex items-center justify-center flex-shrink-0 fm-corner-radius-md" }, yt = { class: "bg-fm-color-primary-oats p-14 fm-corner-radius-md" }, vt = { class: "fm-typo-en-body-md-600 mb-6" }, gt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, ht = { class: "flex flex-col gap-6" }, xt = { class: "border-t border-fm-color-neutral-gray-100 pt-12 flex flex-col gap-3" }, _t = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, wt = {
78
78
  key: 1,
79
79
  class: "bg-fm-color-neutral-gray-100 rounded-10 p-14 fm-typo-en-body-sm-400 text-fm-color-typo-secondary"
80
- }, Mt = /* @__PURE__ */ L({
80
+ }, Mt = /* @__PURE__ */ I({
81
81
  __name: "InsightPanel",
82
82
  props: {
83
83
  insight: {}
84
84
  },
85
85
  emits: ["navigate"],
86
- setup(e, { emit: o }) {
87
- const r = o;
88
- return (n, s) => {
86
+ setup(e, { emit: s }) {
87
+ const r = s;
88
+ return (n, o) => {
89
89
  const i = _("FmIcon"), m = _("FmButton"), b = _("FmCard");
90
- return l(), A(b, {
90
+ return l(), L(b, {
91
91
  variant: "outlined",
92
92
  class: "p-24 flex flex-col gap-14"
93
93
  }, {
94
94
  default: D(() => [
95
95
  t("div", ft, [
96
96
  t("div", bt, [
97
- p(i, {
97
+ u(i, {
98
98
  name: "info",
99
99
  outline: "",
100
100
  size: "sm",
101
101
  class: "!text-fm-color-primary"
102
102
  })
103
103
  ]),
104
- s[1] || (s[1] = t("div", { class: "fm-typo-en-body-md-600" }, "Action insight", -1))
104
+ o[1] || (o[1] = t("div", { class: "fm-typo-en-body-md-600" }, "Action insight", -1))
105
105
  ]),
106
- e.insight ? (l(), u(F, { key: 0 }, [
106
+ e.insight ? (l(), p(F, { key: 0 }, [
107
107
  t("div", yt, [
108
108
  t("div", vt, d(e.insight.title), 1),
109
109
  t("div", gt, d(e.insight.body), 1)
110
110
  ]),
111
111
  t("div", ht, [
112
- s[2] || (s[2] = t("div", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary uppercase tracking-wide mb-1" }, " Suggested action ", -1)),
113
- p(m, {
112
+ o[2] || (o[2] = t("div", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary uppercase tracking-wide mb-1" }, " Suggested action ", -1)),
113
+ u(m, {
114
114
  label: e.insight.action.label,
115
115
  "append-icon": "arrow_forward",
116
116
  class: "!justify-between",
117
- onClick: s[0] || (s[0] = (y) => r("navigate", e.insight.action.path))
117
+ onClick: o[0] || (o[0] = (y) => r("navigate", e.insight.action.path))
118
118
  }, null, 8, ["label"])
119
119
  ]),
120
120
  t("div", xt, [
121
- s[3] || (s[3] = t("div", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary uppercase tracking-wide mb-1" }, " Supporting signal ", -1)),
122
- (l(!0), u(F, null, B(e.insight.signals, (y) => (l(), u("li", {
121
+ o[3] || (o[3] = t("div", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary uppercase tracking-wide mb-1" }, " Supporting signal ", -1)),
122
+ (l(!0), p(F, null, B(e.insight.signals, (y) => (l(), p("li", {
123
123
  key: y.text,
124
124
  class: "flex items-start gap-7"
125
125
  }, [
126
126
  t("ul", _t, d(y.text), 1)
127
127
  ]))), 128))
128
128
  ])
129
- ], 64)) : (l(), u("div", wt, " More member activity is needed before a clear action can be suggested. "))
129
+ ], 64)) : (l(), p("div", wt, " More member activity is needed before a clear action can be suggested. "))
130
130
  ]),
131
131
  _: 1
132
132
  });
@@ -135,16 +135,16 @@ const rt = { class: "flex items-center mb-14" }, st = {
135
135
  }), St = { class: "grid grid-cols-5 xs:grid-cols-2 gap-12" }, Rt = { class: "flex items-center gap-8" }, Ct = { class: "w-[30px] h-[30px] rounded-8 bg-[#FFF6EE] flex items-center justify-center flex-shrink-0" }, $t = { class: "fm-typo-en-body-sm-600 text-fm-color-typo-secondary flex-1 min-w-0" }, Ft = { class: "fm-typo-en-title-sm-800 text-fm-color-typo-primary whitespace-nowrap overflow-hidden text-ellipsis" }, Dt = {
136
136
  key: 0,
137
137
  class: "text-fm-color-typo-success fm-typo-en-body-sm-600 -mt-4"
138
- }, kt = { class: "flex items-center gap-4 flex-wrap" }, Pt = /* @__PURE__ */ L({
138
+ }, kt = { class: "flex items-center gap-4 flex-wrap" }, Pt = /* @__PURE__ */ I({
139
139
  __name: "KpiStrip",
140
140
  props: {
141
141
  kpis: {}
142
142
  },
143
143
  setup(e) {
144
- return (o, r) => {
145
- const n = _("FmIcon"), s = _("FmCard");
146
- return l(), u("section", St, [
147
- (l(!0), u(F, null, B(e.kpis, (i) => (l(), A(s, {
144
+ return (s, r) => {
145
+ const n = _("FmIcon"), o = _("FmCard");
146
+ return l(), p("section", St, [
147
+ (l(!0), p(F, null, B(e.kpis, (i) => (l(), L(o, {
148
148
  key: i.label,
149
149
  variant: "outlined",
150
150
  class: "flex flex-col gap-8 p-16 min-w-0 overflow-hidden"
@@ -152,7 +152,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
152
152
  default: D(() => [
153
153
  t("div", Rt, [
154
154
  t("div", Ct, [
155
- p(n, {
155
+ u(n, {
156
156
  name: i.icon,
157
157
  outline: "",
158
158
  size: "sm",
@@ -160,21 +160,21 @@ const rt = { class: "flex items-center mb-14" }, st = {
160
160
  }, null, 8, ["name"])
161
161
  ]),
162
162
  t("span", $t, d(i.label), 1),
163
- p(T, {
163
+ u(T, {
164
164
  description: i.description
165
165
  }, null, 8, ["description"])
166
166
  ]),
167
167
  t("div", Ft, d(i.value), 1),
168
- i.sub ? (l(), u("div", Dt, d(i.sub), 1)) : U("", !0),
168
+ i.sub ? (l(), p("div", Dt, d(i.sub), 1)) : U("", !0),
169
169
  t("div", kt, [
170
- i.delta !== "0%" && i.delta !== "0pp" ? (l(), A(n, {
170
+ i.delta !== "0%" && i.delta !== "0pp" ? (l(), L(n, {
171
171
  key: 0,
172
172
  name: i.trendUp ? "trending_up" : "trending_down",
173
173
  size: "xs",
174
- class: I(i.deltaClass)
174
+ class: A(i.deltaClass)
175
175
  }, null, 8, ["name", "class"])) : U("", !0),
176
176
  t("span", {
177
- class: I(["fm-typo-en-body-sm-600", i.deltaClass])
177
+ class: A(["fm-typo-en-body-sm-600", i.deltaClass])
178
178
  }, d(i.delta), 3),
179
179
  r[0] || (r[0] = t("span", { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary" }, "vs prev", -1))
180
180
  ])
@@ -184,7 +184,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
184
184
  ]);
185
185
  };
186
186
  }
187
- }), At = { class: "flex flex-col gap-4" }, It = ["onClick"], Lt = { class: "fm-typo-en-body-sm-600" }, Ot = { class: "fm-typo-en-body-md-600 min-w-[38px] text-right" }, Bt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary min-w-[34px] text-right" }, Tt = { class: "mt-14 pt-12 border-t border-fm-color-neutral-gray-100 fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, Nt = /* @__PURE__ */ L({
187
+ }), Lt = { class: "flex flex-col gap-4" }, At = ["onClick"], It = { class: "fm-typo-en-body-sm-600" }, Ot = { class: "fm-typo-en-body-md-600 min-w-[38px] text-right" }, Bt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary min-w-[34px] text-right" }, Tt = { class: "mt-14 pt-12 border-t border-fm-color-neutral-gray-100 fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, Et = /* @__PURE__ */ I({
188
188
  __name: "LifecycleSegments",
189
189
  props: {
190
190
  segments: {},
@@ -192,11 +192,11 @@ const rt = { class: "flex items-center mb-14" }, st = {
192
192
  interactive: { type: Boolean, default: !0 }
193
193
  },
194
194
  emits: ["select"],
195
- setup(e, { emit: o }) {
196
- const r = e, n = o;
197
- return (s, i) => {
195
+ setup(e, { emit: s }) {
196
+ const r = e, n = s;
197
+ return (o, i) => {
198
198
  const m = _("FmProgressBar"), b = _("FmCard");
199
- return l(), A(b, {
199
+ return l(), L(b, {
200
200
  variant: "outlined",
201
201
  class: "p-24"
202
202
  }, {
@@ -204,24 +204,24 @@ const rt = { class: "flex items-center mb-14" }, st = {
204
204
  i[0] || (i[0] = t("div", { class: "flex items-center mb-16" }, [
205
205
  t("div", { class: "flex-1 fm-typo-en-body-md-600" }, "Member lifecycle")
206
206
  ], -1)),
207
- t("div", At, [
208
- (l(!0), u(F, null, B(r.segments, (y) => (l(), u("div", {
207
+ t("div", Lt, [
208
+ (l(!0), p(F, null, B(r.segments, (y) => (l(), p("div", {
209
209
  key: y.id,
210
- class: I([
210
+ class: A([
211
211
  "flex items-center gap-9 px-6 py-3 -mx-6 rounded-8",
212
212
  r.interactive ? "cursor-pointer hover:bg-fm-color-neutral-gray-100/50" : "cursor-default"
213
213
  ]),
214
214
  onClick: (v) => r.interactive && n("select", y.id)
215
215
  }, [
216
216
  t("div", {
217
- class: I(["flex w-[90px] flex-shrink-0 items-center gap-3", y.labelClass])
217
+ class: A(["flex w-[90px] flex-shrink-0 items-center gap-3", y.labelClass])
218
218
  }, [
219
- t("span", Lt, d(y.label), 1),
220
- p(T, {
219
+ t("span", It, d(y.label), 1),
220
+ u(T, {
221
221
  description: y.description
222
222
  }, null, 8, ["description"])
223
223
  ], 2),
224
- p(m, {
224
+ u(m, {
225
225
  class: "flex-1",
226
226
  value: y.barPct,
227
227
  color: y.barColor,
@@ -229,7 +229,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
229
229
  }, null, 8, ["value", "color"]),
230
230
  t("span", Ot, d(y.countStr), 1),
231
231
  t("span", Bt, d(y.pctStr), 1)
232
- ], 10, It))), 128))
232
+ ], 10, At))), 128))
233
233
  ]),
234
234
  t("div", Tt, d(r.summary), 1)
235
235
  ]),
@@ -237,16 +237,16 @@ const rt = { class: "flex items-center mb-14" }, st = {
237
237
  });
238
238
  };
239
239
  }
240
- }), Et = { class: "flex items-start gap-8 mb-12" }, Ut = { class: "flex-1" }, Vt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, Ht = {
240
+ }), Nt = { class: "flex items-start gap-8 mb-12" }, Ut = { class: "flex-1" }, Vt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, qt = {
241
241
  key: 0,
242
242
  class: "flex items-start pl-[152px] xs:pl-0 xs:justify-center"
243
- }, zt = { class: "flex flex-col items-start" }, qt = { class: "flex items-center gap-8" }, Yt = {
243
+ }, Ht = { class: "flex flex-col items-start" }, zt = { class: "flex items-center gap-8" }, Yt = {
244
244
  key: 0,
245
245
  class: "fm-typo-en-body-sm-600 text-fm-color-typo-warning bg-fm-color-system-warning-100 px-8 py-[2px] rounded-xxxl whitespace-nowrap"
246
246
  }, jt = ["onClick"], Gt = { class: "min-w-0" }, Jt = { class: "flex items-center gap-3 fm-typo-en-body-sm-600" }, Kt = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary mt-4" }, Wt = { class: "min-w-0 text-right" }, Qt = { class: "fm-typo-en-body-lg-600" }, Xt = {
247
247
  key: 0,
248
248
  class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary"
249
- }, Zt = { class: "mt-12 pt-12 border-t border-fm-color-neutral-gray-100" }, er = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary text-right" }, tr = /* @__PURE__ */ L({
249
+ }, Zt = { class: "mt-12 pt-12 border-t border-fm-color-neutral-gray-100" }, er = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary text-right" }, tr = /* @__PURE__ */ I({
250
250
  __name: "MemberFunnel",
251
251
  props: {
252
252
  stages: {},
@@ -254,56 +254,56 @@ const rt = { class: "flex items-center mb-14" }, st = {
254
254
  interactive: { type: Boolean, default: !0 }
255
255
  },
256
256
  emits: ["select"],
257
- setup(e, { emit: o }) {
258
- const r = e, n = o;
259
- function s(i) {
257
+ setup(e, { emit: s }) {
258
+ const r = e, n = s;
259
+ function o(i) {
260
260
  r.interactive && n("select", i);
261
261
  }
262
262
  return (i, m) => {
263
263
  const b = _("FmProgressBar"), y = _("FmCard");
264
- return l(), A(y, {
264
+ return l(), L(y, {
265
265
  variant: "outlined",
266
266
  class: "p-24"
267
267
  }, {
268
268
  default: D(() => [
269
- t("div", Et, [
269
+ t("div", Nt, [
270
270
  t("div", Ut, [
271
271
  m[0] || (m[0] = t("div", { class: "fm-typo-en-body-md-600" }, "Member funnel", -1)),
272
272
  t("div", Vt, d(r.interactive ? "Strict member-only · visitors excluded · click any stage to drill down" : "Strict member-only · visitors excluded"), 1)
273
273
  ])
274
274
  ]),
275
- (l(!0), u(F, null, B(e.stages, (v, M) => (l(), u("div", {
275
+ (l(!0), p(F, null, B(e.stages, (v, M) => (l(), p("div", {
276
276
  key: v.id
277
277
  }, [
278
- v.hasDropLine ? (l(), u("div", Ht, [
279
- t("div", zt, [
278
+ v.hasDropLine ? (l(), p("div", qt, [
279
+ t("div", Ht, [
280
280
  m[1] || (m[1] = t("div", { class: "w-[1px] h-[4px] bg-fm-color-neutral-gray-100 ml-[9px]" }, null, -1)),
281
- t("div", qt, [
281
+ t("div", zt, [
282
282
  t("span", {
283
- class: I(["fm-typo-en-body-sm-600 px-8 py-[2px] rounded-xxxl whitespace-nowrap", v.dropClass])
283
+ class: A(["fm-typo-en-body-sm-600 px-8 py-[2px] rounded-xxxl whitespace-nowrap", v.dropClass])
284
284
  }, d(v.conversionStr), 3),
285
- v.isBiggestDrop ? (l(), u("span", Yt, " biggest drop ")) : U("", !0)
285
+ v.isBiggestDrop ? (l(), p("span", Yt, " biggest drop ")) : U("", !0)
286
286
  ]),
287
287
  m[2] || (m[2] = t("div", { class: "w-[1px] h-[4px] bg-fm-color-neutral-gray-100 ml-[9px]" }, null, -1))
288
288
  ])
289
289
  ])) : U("", !0),
290
290
  t("div", {
291
- class: I([
291
+ class: A([
292
292
  "grid grid-cols-[140px_minmax(0,1fr)_72px] xs:grid-cols-[minmax(0,1fr)_auto] items-center gap-x-12 gap-y-8 py-4 px-8 -mx-8 rounded-md",
293
293
  r.interactive ? "cursor-pointer hover:bg-fm-color-neutral-gray-100/50" : ""
294
294
  ]),
295
- onClick: (S) => s(v.id)
295
+ onClick: (S) => o(v.id)
296
296
  }, [
297
297
  t("div", Gt, [
298
298
  t("div", Jt, [
299
299
  t("span", null, d(v.label), 1),
300
- p(T, {
300
+ u(T, {
301
301
  description: v.description
302
302
  }, null, 8, ["description"])
303
303
  ]),
304
304
  t("div", Kt, d(v.desc), 1)
305
305
  ]),
306
- p(b, {
306
+ u(b, {
307
307
  class: "min-w-0 xs:col-span-2 xs:row-start-2",
308
308
  value: v.barWidthPct,
309
309
  color: v.barColor,
@@ -311,7 +311,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
311
311
  }, null, 8, ["value", "color"]),
312
312
  t("div", Wt, [
313
313
  t("div", Qt, d(v.countStr), 1),
314
- v.hasConvRate ? (l(), u("div", Xt, d(v.convRateLabel), 1)) : U("", !0)
314
+ v.hasConvRate ? (l(), p("div", Xt, d(v.convRateLabel), 1)) : U("", !0)
315
315
  ])
316
316
  ], 10, jt)
317
317
  ]))), 128)),
@@ -323,22 +323,22 @@ const rt = { class: "flex items-center mb-14" }, st = {
323
323
  });
324
324
  };
325
325
  }
326
- }), rr = { class: "flex items-center gap-3 fm-typo-en-body-md-600 mb-4" }, sr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mb-16" }, or = { class: "grid grid-cols-2 xs:grid-cols-1 gap-16" }, ar = { class: "fm-typo-en-title-sm-800" }, nr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, ir = { class: "fm-typo-en-title-sm-800" }, lr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, dr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-8" }, cr = { class: "mt-16 pt-12 border-t border-fm-color-neutral-gray-100 fm-typo-en-body-sm-400" }, mr = /* @__PURE__ */ L({
326
+ }), rr = { class: "flex items-center gap-3 fm-typo-en-body-md-600 mb-4" }, sr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mb-16" }, or = { class: "grid grid-cols-2 xs:grid-cols-1 gap-16" }, ar = { class: "fm-typo-en-title-sm-800" }, nr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, ir = { class: "fm-typo-en-title-sm-800" }, lr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-4" }, dr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary mt-8" }, cr = { class: "mt-16 pt-12 border-t border-fm-color-neutral-gray-100 fm-typo-en-body-sm-400" }, mr = /* @__PURE__ */ I({
327
327
  __name: "MemberSpendComparison",
328
328
  props: {
329
329
  spend: {}
330
330
  },
331
331
  setup(e) {
332
- return (o, r) => {
333
- const n = _("FmProgressBar"), s = _("FmCard");
334
- return l(), A(s, {
332
+ return (s, r) => {
333
+ const n = _("FmProgressBar"), o = _("FmCard");
334
+ return l(), L(o, {
335
335
  variant: "outlined",
336
336
  class: "p-24"
337
337
  }, {
338
338
  default: D(() => [
339
339
  t("div", rr, [
340
340
  r[0] || (r[0] = t("span", null, "Member vs. non-member spend", -1)),
341
- p(T, {
341
+ u(T, {
342
342
  description: e.spend.description
343
343
  }, null, 8, ["description"])
344
344
  ]),
@@ -361,7 +361,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
361
361
  t("div", lr, " avg " + d(e.spend.avgNonMemberSaleFmt) + " / order ", 1)
362
362
  ])
363
363
  ]),
364
- p(n, {
364
+ u(n, {
365
365
  class: "mt-16",
366
366
  value: e.spend.memberSharePct,
367
367
  color: "primary",
@@ -374,7 +374,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
374
374
  });
375
375
  };
376
376
  }
377
- }), ur = { class: "flex items-center mb-16" }, pr = {
377
+ }), pr = { class: "flex items-center mb-16" }, ur = {
378
378
  key: 0,
379
379
  class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary"
380
380
  }, fr = {
@@ -383,7 +383,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
383
383
  }, br = { class: "grid grid-cols-3 gap-10 mb-16" }, yr = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary mb-4 flex items-center gap-3" }, vr = { class: "fm-typo-en-title-sm-800" }, gr = { class: "flex flex-col gap-9" }, hr = { class: "flex-1 fm-typo-en-body-sm-400 whitespace-nowrap overflow-hidden text-ellipsis" }, xr = { class: "flex flex-shrink-0 items-center gap-3 fm-typo-en-body-sm-600 text-fm-color-typo-secondary" }, _r = { class: "w-[48px] h-4 bg-fm-color-neutral-gray-100 rounded-2 overflow-hidden flex-shrink-0" }, wr = {
384
384
  key: 3,
385
385
  class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary"
386
- }, Mr = /* @__PURE__ */ L({
386
+ }, Mr = /* @__PURE__ */ I({
387
387
  __name: "RewardPerformance",
388
388
  props: {
389
389
  kpis: {},
@@ -393,16 +393,16 @@ const rt = { class: "flex items-center mb-14" }, st = {
393
393
  error: { type: Boolean }
394
394
  },
395
395
  setup(e) {
396
- return (o, r) => {
396
+ return (s, r) => {
397
397
  const n = _("FmCard");
398
- return l(), A(n, {
398
+ return l(), L(n, {
399
399
  variant: "outlined",
400
400
  class: "p-24"
401
401
  }, {
402
402
  default: D(() => [
403
- t("div", ur, [
403
+ t("div", pr, [
404
404
  r[1] || (r[1] = t("div", { class: "flex-1 fm-typo-en-body-md-600" }, "Reward usage health", -1)),
405
- p(f(Me), {
405
+ u(f(Me), {
406
406
  to: "/reward",
407
407
  class: "fm-typo-en-body-sm-600 text-fm-color-primary no-underline"
408
408
  }, {
@@ -412,94 +412,94 @@ const rt = { class: "flex items-center mb-14" }, st = {
412
412
  _: 1
413
413
  })
414
414
  ]),
415
- e.loading ? (l(), u("div", pr, " Loading reward usage data. ")) : e.error ? (l(), u("div", fr, " Unable to load reward usage data. ")) : e.hasData ? (l(), u(F, { key: 2 }, [
415
+ e.loading ? (l(), p("div", ur, " Loading reward usage data. ")) : e.error ? (l(), p("div", fr, " Unable to load reward usage data. ")) : e.hasData ? (l(), p(F, { key: 2 }, [
416
416
  t("div", br, [
417
- (l(!0), u(F, null, B(e.kpis, (s) => (l(), u("div", {
418
- key: s.label,
417
+ (l(!0), p(F, null, B(e.kpis, (o) => (l(), p("div", {
418
+ key: o.label,
419
419
  class: "bg-[#FAFAFA] rounded-10 p-12"
420
420
  }, [
421
421
  t("div", yr, [
422
- t("span", null, d(s.label), 1),
423
- p(T, {
424
- description: s.description
422
+ t("span", null, d(o.label), 1),
423
+ u(T, {
424
+ description: o.description
425
425
  }, null, 8, ["description"])
426
426
  ]),
427
- t("div", vr, d(s.value), 1),
428
- s.delta ? (l(), u("div", {
427
+ t("div", vr, d(o.value), 1),
428
+ o.delta ? (l(), p("div", {
429
429
  key: 0,
430
- class: I(["fm-typo-en-body-sm-600 mt-3", s.deltaClass])
431
- }, d(s.delta), 3)) : U("", !0)
430
+ class: A(["fm-typo-en-body-sm-600 mt-3", o.deltaClass])
431
+ }, d(o.delta), 3)) : U("", !0)
432
432
  ]))), 128))
433
433
  ]),
434
434
  r[3] || (r[3] = t("div", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary uppercase tracking-wide mb-10" }, " Top used rewards ", -1)),
435
435
  t("div", gr, [
436
- (l(!0), u(F, null, B(e.topRewards, (s) => (l(), u("div", {
437
- key: s.name,
436
+ (l(!0), p(F, null, B(e.topRewards, (o) => (l(), p("div", {
437
+ key: o.name,
438
438
  class: "flex items-center gap-9"
439
439
  }, [
440
440
  r[2] || (r[2] = t("div", { class: "w-6 h-6 rounded-2 bg-fm-color-primary flex-shrink-0" }, null, -1)),
441
- t("span", hr, d(s.name), 1),
441
+ t("span", hr, d(o.name), 1),
442
442
  t("span", xr, [
443
- te(d(s.count) + " ", 1),
444
- p(T, {
445
- description: s.description
443
+ te(d(o.count) + " ", 1),
444
+ u(T, {
445
+ description: o.description
446
446
  }, null, 8, ["description"])
447
447
  ]),
448
448
  t("div", _r, [
449
449
  t("div", {
450
450
  class: "h-full bg-fm-color-primary rounded-2",
451
- style: ze({ width: s.barPct + "%" })
451
+ style: He({ width: o.barPct + "%" })
452
452
  }, null, 4)
453
453
  ])
454
454
  ]))), 128))
455
455
  ])
456
- ], 64)) : (l(), u("div", wr, " No reward usage data is available for this period. "))
456
+ ], 64)) : (l(), p("div", wr, " No reward usage data is available for this period. "))
457
457
  ]),
458
458
  _: 1
459
459
  });
460
460
  };
461
461
  }
462
- }), Sr = { class: "mb-6 flex items-center gap-3 fm-typo-en-body-md-600" }, Rr = { class: "flex items-baseline gap-10 mb-14 flex-wrap" }, Cr = { class: "fm-typo-en-title-lg-800" }, $r = /* @__PURE__ */ L({
462
+ }), Sr = { class: "mb-6 flex items-center gap-3 fm-typo-en-body-md-600" }, Rr = { class: "flex items-baseline gap-10 mb-14 flex-wrap" }, Cr = { class: "fm-typo-en-title-lg-800" }, $r = /* @__PURE__ */ I({
463
463
  __name: "SalesTrendChart",
464
464
  props: {
465
465
  sales: {}
466
466
  },
467
467
  setup(e) {
468
- const o = e, r = w(() => [
468
+ const s = e, r = w(() => [
469
469
  {
470
470
  label: "This period",
471
- data: o.sales.series,
471
+ data: s.sales.series,
472
472
  color: "#FF7823",
473
473
  fill: !0
474
474
  },
475
475
  {
476
476
  label: "Prev. period",
477
- data: o.sales.prevSeries,
477
+ data: s.sales.prevSeries,
478
478
  color: "#B2B3B6",
479
479
  dash: !0
480
480
  }
481
481
  ]), n = { display: !1 };
482
- return (s, i) => {
482
+ return (o, i) => {
483
483
  const m = _("FmLineChart"), b = _("FmCard");
484
- return l(), A(b, {
484
+ return l(), L(b, {
485
485
  variant: "outlined",
486
486
  class: "p-24"
487
487
  }, {
488
488
  default: D(() => [
489
489
  t("div", Sr, [
490
490
  i[0] || (i[0] = t("span", null, "Member sales trend", -1)),
491
- p(T, {
491
+ u(T, {
492
492
  description: e.sales.description
493
493
  }, null, 8, ["description"])
494
494
  ]),
495
495
  t("div", Rr, [
496
496
  t("span", Cr, d(e.sales.totalFmt), 1),
497
497
  t("span", {
498
- class: I(["fm-typo-en-body-sm-600 px-9 py-3 rounded-full whitespace-nowrap", e.sales.deltaClass])
498
+ class: A(["fm-typo-en-body-sm-600 px-9 py-3 rounded-full whitespace-nowrap", e.sales.deltaClass])
499
499
  }, d(e.sales.deltaStr), 3),
500
500
  i[1] || (i[1] = t("span", { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary" }, "vs prev. period", -1))
501
501
  ]),
502
- p(m, {
502
+ u(m, {
503
503
  datasets: f(r),
504
504
  "x-axis": { categories: e.sales.comparisonCategories },
505
505
  "x-cfg": n,
@@ -603,7 +603,7 @@ const rt = { class: "flex items-center mb-14" }, st = {
603
603
  )
604
604
  );
605
605
  }
606
- }, g = {
606
+ }, h = {
607
607
  totalMembers: "Distinct members recorded through the end of the selected period; the start date does not reduce this total.",
608
608
  activeMembers: "Distinct members with a completed member purchase or voucher redemption during the selected period.",
609
609
  memberSales: "Sum of nettTotal from member-linked bills included in the selected period.",
@@ -613,22 +613,22 @@ const rt = { class: "flex items-center mb-14" }, st = {
613
613
  repeatMembers: "Purchase members who also had purchase history before the selected period.",
614
614
  funnelRewardRedeemers: "Repeat members with counted reward activity in the selected period.",
615
615
  newlyJoined: "Members whose join date falls within the selected period.",
616
- frequent: "Existing members with at least two completed member bills in the selected period.",
617
- infrequent: "Existing members with exactly one completed member bill in the selected period.",
618
- atRisk: "Existing members with no selected-period purchase but a completed purchase in the prior 60 calendar days.",
619
- dormant: "Existing members with no selected-period purchase and no completed purchase in the prior 60 calendar days.",
616
+ frequent: "Existing members with repeated completed member bills in the selected period.",
617
+ infrequent: "Existing members with limited completed member bills in the selected period.",
618
+ atRisk: "Existing members with no selected-period purchase but a recent completed purchase.",
619
+ dormant: "Existing members with no selected-period purchase and no recent completed purchase.",
620
620
  memberSalesTrend: "Daily member nett sales for the selected period compared with the selected comparison period.",
621
- rewardRedeemers: "Distinct members who used a counted VOUCHER, CREDIT, or COIN reward during the selected period; anonymous usage is excluded from the member count.",
621
+ rewardRedeemers: "Distinct members who used a counted VOUCHER, CREDIT, or POINT reward during the selected period; anonymous usage is excluded from the member count.",
622
622
  redemptionRate: "Reward redeemers divided by active members, where active members are members with purchase or reward activity during the selected period.",
623
623
  averageRewardUses: "Counted reward-use transactions divided by distinct reward redeemers.",
624
624
  memberSpendComparison: "Shows the value members bring — use it to make the case for growing membership"
625
625
  };
626
- function Fr(e, o, r = /* @__PURE__ */ new Date()) {
627
- const n = V.tz(r, o).endOf("day"), s = n.clone().startOf("day");
628
- return s.startOf("month"), [s.toISOString(), n.toISOString()];
626
+ function Fr(e, s, r = /* @__PURE__ */ new Date()) {
627
+ const n = V.tz(r, s).endOf("day"), o = n.clone().startOf("day");
628
+ return o.startOf("month"), [o.toISOString(), n.toISOString()];
629
629
  }
630
- function Dr(e, o) {
631
- return e.length ? e : o;
630
+ function Dr(e, s) {
631
+ return e.length ? e : s;
632
632
  }
633
633
  function kr(e) {
634
634
  return {
@@ -642,8 +642,8 @@ function kr(e) {
642
642
  };
643
643
  }
644
644
  function we(e) {
645
- const [o, r] = e, n = V(r).diff(V(o)), s = V(o).subtract(1, "millisecond");
646
- return [s.clone().subtract(n, "milliseconds").toISOString(), s.toISOString()];
645
+ const [s, r] = e, n = V(r).diff(V(s)), o = V(s).subtract(1, "millisecond");
646
+ return [o.clone().subtract(n, "milliseconds").toISOString(), o.toISOString()];
647
647
  }
648
648
  const J = (e) => ({
649
649
  total: 0,
@@ -663,7 +663,7 @@ const J = (e) => ({
663
663
  prev: Array(e).fill(0)
664
664
  });
665
665
  J(20), J(7), J(30), J(12);
666
- const re = (e, o) => o ? Math.round(e / o * 1e3) / 10 : 0, Pr = (e, o) => o ? Math.round((e - o) / o * 1e3) / 10 : 0, H = (e) => e >= 1e3 ? (e / 1e3).toFixed(1).replace(/\.0$/, "") + "k" : String(e), O = (e, o) => tt(e).set({ currency: o }).toFormat(!0), Ar = [
666
+ const re = (e, s) => s ? Math.round(e / s * 1e3) / 10 : 0, Pr = (e, s) => s ? Math.round((e - s) / s * 1e3) / 10 : 0, q = (e) => e >= 1e3 ? (e / 1e3).toFixed(1).replace(/\.0$/, "") + "k" : String(e), O = (e, s) => tt(e).set({ currency: s }).toFormat(!0), Lr = [
667
667
  "neutral-black",
668
668
  "primary",
669
669
  "#FF9C52",
@@ -679,17 +679,17 @@ const re = (e, o) => o ? Math.round(e / o * 1e3) / 10 : 0, Pr = (e, o) => o ? Ma
679
679
  text: "text-fm-color-typo-warning",
680
680
  bg: "bg-fm-color-system-warning-100"
681
681
  };
682
- function Ir(e) {
682
+ function Ar(e) {
683
683
  return e === 0 ? "text-fm-color-typo-secondary" : e > 0 ? se.text : Se.text;
684
684
  }
685
- function Lr(e) {
686
- const o = [
685
+ function Ir(e) {
686
+ const s = [
687
687
  {
688
688
  id: "total",
689
689
  label: "Total members",
690
690
  count: e.totalMembers,
691
691
  desc: "All members through period end",
692
- description: g.totalMembers,
692
+ description: h.totalMembers,
693
693
  denom: null
694
694
  },
695
695
  {
@@ -697,7 +697,7 @@ function Lr(e) {
697
697
  label: "Active members",
698
698
  count: e.activeMembers,
699
699
  desc: "Purchase or reward activity",
700
- description: g.activeMembers,
700
+ description: h.activeMembers,
701
701
  denom: e.totalMembers
702
702
  },
703
703
  {
@@ -705,7 +705,7 @@ function Lr(e) {
705
705
  label: "Purchase members",
706
706
  count: e.purchasingMembers,
707
707
  desc: "At least 1 completed order",
708
- description: g.purchasingMembers,
708
+ description: h.purchasingMembers,
709
709
  denom: e.activeMembers
710
710
  },
711
711
  {
@@ -713,7 +713,7 @@ function Lr(e) {
713
713
  label: "Repeat members",
714
714
  count: e.repeatMembers,
715
715
  desc: "Had prior order history",
716
- description: g.repeatMembers,
716
+ description: h.repeatMembers,
717
717
  denom: e.purchasingMembers
718
718
  },
719
719
  {
@@ -721,30 +721,30 @@ function Lr(e) {
721
721
  label: "Reward redeemers",
722
722
  count: e.rewardRedeemers,
723
723
  desc: "Repeat member used reward",
724
- description: g.funnelRewardRedeemers,
724
+ description: h.funnelRewardRedeemers,
725
725
  denom: e.repeatMembers
726
726
  }
727
- ], r = o.map(
727
+ ], r = s.map(
728
728
  (m, b) => b === 0 || !m.denom ? null : re(m.count, m.denom)
729
729
  );
730
- let n = null, s = 100;
730
+ let n = null, o = 100;
731
731
  return e.totalMembers > 0 && r.forEach((m, b) => {
732
- b > 0 && m !== null && m < s && (s = m, n = b);
732
+ b > 0 && m !== null && m < o && (o = m, n = b);
733
733
  }), {
734
- funnelStages: o.map((m, b) => {
734
+ funnelStages: s.map((m, b) => {
735
735
  const y = r[b], v = b === n;
736
736
  return {
737
737
  id: m.id,
738
738
  label: m.label,
739
739
  desc: m.desc,
740
740
  description: m.description,
741
- countStr: H(m.count),
741
+ countStr: q(m.count),
742
742
  conversionStr: y != null ? `${y}% convert` : "",
743
743
  convRateLabel: y != null ? `${y}% of prev` : "",
744
744
  hasConvRate: b > 0,
745
745
  hasDropLine: b > 0,
746
746
  isBiggestDrop: v,
747
- barColor: Ar[b] ?? "#FFD0A3",
747
+ barColor: Lr[b] ?? "#FFD0A3",
748
748
  barWidthPct: e.totalMembers > 0 && m.count > 0 ? Math.max(re(m.count, e.totalMembers), 1) : 0,
749
749
  dropClass: v ? `${oe.text} bg-[#FFF0E2]` : "text-fm-color-typo-secondary bg-fm-color-neutral-gray-100"
750
750
  };
@@ -755,12 +755,12 @@ function Lr(e) {
755
755
  };
756
756
  }
757
757
  function Or(e) {
758
- const { funnelStages: o, funnelFootnote: r } = Lr(e);
759
- return { funnelStages: o, funnelFootnote: r };
758
+ const { funnelStages: s, funnelFootnote: r } = Ir(e);
759
+ return { funnelStages: s, funnelFootnote: r };
760
760
  }
761
761
  const Br = 10;
762
762
  function Tr(e) {
763
- const o = [
763
+ const s = [
764
764
  {
765
765
  source: e.totalMembers,
766
766
  target: e.activeMembers,
@@ -803,8 +803,8 @@ function Tr(e) {
803
803
  }
804
804
  ];
805
805
  let r = null;
806
- for (const s of o)
807
- s.source < Br || s.target >= s.source || (!r || s.target / s.source < r.target / r.source) && (r = s);
806
+ for (const o of s)
807
+ o.source < Br || o.target >= o.source || (!r || o.target / o.source < r.target / r.source) && (r = o);
808
808
  if (!r) return null;
809
809
  const n = Math.round(r.target / r.source * 1e3) / 10;
810
810
  return {
@@ -818,7 +818,7 @@ function Tr(e) {
818
818
  ]
819
819
  };
820
820
  }
821
- const Nr = {
821
+ const Er = {
822
822
  VOUCHER: "Voucher",
823
823
  PROMOTION: "Promotion",
824
824
  POINT: "Experience",
@@ -828,7 +828,7 @@ const Nr = {
828
828
  REWARD_POOL: "Reward pool",
829
829
  GAME: "Game",
830
830
  MISSION: "Mission"
831
- }, Er = {
831
+ }, Nr = {
832
832
  active: { label: "Active", class: se.text },
833
833
  expired: { label: "Ended", class: "text-fm-color-typo-tertiary" },
834
834
  upcoming: { label: "Upcoming", class: oe.text }
@@ -836,15 +836,15 @@ const Nr = {
836
836
  function Ur(e) {
837
837
  return e.type !== "MEMBERSHIP";
838
838
  }
839
- function Vr(e, o) {
839
+ function Vr(e, s) {
840
840
  var r;
841
- return !o.length || !((r = e.targetLocation) != null && r.length) ? !0 : e.targetLocation.some(
842
- (n) => o.includes(n.toString())
841
+ return !s.length || !((r = e.targetLocation) != null && r.length) ? !0 : e.targetLocation.some(
842
+ (n) => s.includes(n.toString())
843
843
  );
844
844
  }
845
- function Hr(e) {
846
- var o;
847
- if (((o = e.timeframeOptions) == null ? void 0 : o.type) === "timeframe") {
845
+ function qr(e) {
846
+ var s;
847
+ if (((s = e.timeframeOptions) == null ? void 0 : s.type) === "timeframe") {
848
848
  const r = V();
849
849
  return r.isBetween(
850
850
  e.timeframeOptions.start ?? r.clone().subtract(1, "d"),
@@ -853,51 +853,51 @@ function Hr(e) {
853
853
  }
854
854
  return "active";
855
855
  }
856
- function zr(e, o) {
856
+ function Hr(e, s) {
857
857
  return e.filter(Ur).filter(
858
- (r) => Vr(r, o)
858
+ (r) => Vr(r, s)
859
859
  ).map((r) => {
860
- const n = Hr(r), s = Er[n], i = r.type === "BROADCAST";
860
+ const n = qr(r), o = Nr[n], i = r.type === "BROADCAST";
861
861
  return {
862
862
  id: r._id.toString(),
863
863
  name: r.name,
864
- type: Nr[r.type] ?? r.type,
865
- status: s.label,
866
- metric: i ? String(r.currentReceive ?? 0) : s.label,
864
+ type: Er[r.type] ?? r.type,
865
+ status: o.label,
866
+ metric: i ? String(r.currentReceive ?? 0) : o.label,
867
867
  metricLabel: i ? "Messages sent" : "Status",
868
- statusClass: s.class
868
+ statusClass: o.class
869
869
  };
870
870
  }).sort(
871
871
  (r, n) => +(n.status === "Active") - +(r.status === "Active")
872
872
  ).slice(0, 4);
873
873
  }
874
- function qr(e, o) {
874
+ function zr(e, s) {
875
875
  return {
876
876
  categories: e.categories,
877
877
  prevCategories: e.prevCategories,
878
878
  comparisonCategories: e.categories.map(
879
- (r, n) => [r, e.prevCategories[n]].filter(Boolean).map((s) => V(s).format("DD/MM/YYYY")).join(" vs ")
879
+ (r, n) => [r, e.prevCategories[n]].filter(Boolean).map((o) => V(o).format("DD/MM/YYYY")).join(" vs ")
880
880
  ),
881
881
  series: e.series,
882
882
  prevSeries: e.prevSeries,
883
- description: g.memberSalesTrend,
884
- totalFmt: O(e.memberSales, o),
883
+ description: h.memberSalesTrend,
884
+ totalFmt: O(e.memberSales, s),
885
885
  deltaStr: `${e.deltaPct > 0 ? "+" : ""}${e.deltaPct}%`,
886
- deltaClass: Ir(e.deltaPct)
886
+ deltaClass: Ar(e.deltaPct)
887
887
  };
888
888
  }
889
- function Yr(e, o, r, n) {
890
- return !e.memberOrders && !e.nonMemberOrders ? "No completed orders were recorded in this period." : r === 0 && o > 0 ? "Members account for all tracked spend in this period." : o === 0 && r > 0 ? "Non-members account for all tracked spend in this period." : n > 0 ? `Members spend ${n}% more per order than non-members. Converting more walk-ins to members is a direct lever on sales.` : n < 0 ? `Non-members spend ${Math.abs(n)}% more per order than members. Converting more walk-ins to members can increase member-linked sales.` : "Members and non-members have the same average order value in this period.";
889
+ function Yr(e, s, r, n) {
890
+ return !e.memberOrders && !e.nonMemberOrders ? "No completed orders were recorded in this period." : r === 0 && s > 0 ? "Members account for all tracked spend in this period." : s === 0 && r > 0 ? "Non-members account for all tracked spend in this period." : n > 0 ? `Members spend ${n}% more per order than non-members. Converting more walk-ins to members is a direct lever on sales.` : n < 0 ? `Non-members spend ${Math.abs(n)}% more per order than members. Converting more walk-ins to members can increase member-linked sales.` : "Members and non-members have the same average order value in this period.";
891
891
  }
892
- function jr(e, o) {
893
- const r = e.memberOrders ? e.memberSales / e.memberOrders : 0, n = e.nonMemberOrders ? e.nonMemberSales / e.nonMemberOrders : 0, s = e.memberSales + e.nonMemberSales, i = Pr(r, n);
892
+ function jr(e, s) {
893
+ const r = e.memberOrders ? e.memberSales / e.memberOrders : 0, n = e.nonMemberOrders ? e.nonMemberSales / e.nonMemberOrders : 0, o = e.memberSales + e.nonMemberSales, i = Pr(r, n);
894
894
  return {
895
- description: g.memberSpendComparison,
896
- memberSalesFmt: O(e.memberSales, o),
897
- nonMemberSalesFmt: O(e.nonMemberSales, o),
898
- avgMemberSaleFmt: O(r, o),
899
- avgNonMemberSaleFmt: O(n, o),
900
- memberSharePct: re(e.memberSales, s),
895
+ description: h.memberSpendComparison,
896
+ memberSalesFmt: O(e.memberSales, s),
897
+ nonMemberSalesFmt: O(e.nonMemberSales, s),
898
+ avgMemberSaleFmt: O(r, s),
899
+ avgNonMemberSaleFmt: O(n, s),
900
+ memberSharePct: re(e.memberSales, o),
901
901
  avgGapPct: i,
902
902
  summary: Yr(
903
903
  e,
@@ -908,12 +908,18 @@ function jr(e, o) {
908
908
  };
909
909
  }
910
910
  function Gr(e) {
911
- const o = [
911
+ const s = e.criteria ? {
912
+ ...h,
913
+ frequent: `Existing members with at least ${e.criteria.frequentMinBills} completed member bills in the selected period.`,
914
+ infrequent: `Existing members with 1 to ${e.criteria.frequentMinBills - 1} completed member bills in the selected period.`,
915
+ atRisk: `Existing members with no selected-period purchase but a completed purchase in the prior ${e.criteria.atRiskLookbackDays} calendar days.`,
916
+ dormant: `Existing members with no selected-period purchase and no completed purchase in the prior ${e.criteria.atRiskLookbackDays} calendar days.`
917
+ } : h, r = [
912
918
  {
913
919
  id: "new",
914
920
  label: "Newly joined",
915
921
  count: e.newlyJoined,
916
- description: g.newlyJoined,
922
+ description: h.newlyJoined,
917
923
  labelClass: se.text,
918
924
  barColor: "typo-success"
919
925
  },
@@ -921,7 +927,7 @@ function Gr(e) {
921
927
  id: "frequent",
922
928
  label: "Frequent",
923
929
  count: e.frequent,
924
- description: g.frequent,
930
+ description: s.frequent,
925
931
  labelClass: "text-fm-color-primary",
926
932
  barColor: "primary"
927
933
  },
@@ -929,7 +935,7 @@ function Gr(e) {
929
935
  id: "infrequent",
930
936
  label: "Infrequent",
931
937
  count: e.infrequent,
932
- description: g.infrequent,
938
+ description: s.infrequent,
933
939
  labelClass: "text-fm-color-typo-secondary",
934
940
  barColor: "neutral-gray-300"
935
941
  },
@@ -937,7 +943,7 @@ function Gr(e) {
937
943
  id: "at-risk",
938
944
  label: "At-risk",
939
945
  count: e.atRisk,
940
- description: g.atRisk,
946
+ description: s.atRisk,
941
947
  labelClass: oe.text,
942
948
  barColor: "#FFC746"
943
949
  },
@@ -945,19 +951,19 @@ function Gr(e) {
945
951
  id: "dormant",
946
952
  label: "Dormant",
947
953
  count: e.dormant,
948
- description: g.dormant,
954
+ description: s.dormant,
949
955
  labelClass: Se.text,
950
956
  barColor: "#FFCFCC"
951
957
  }
952
- ], r = Math.max(...o.map((s) => s.count), 1);
958
+ ], n = Math.max(...r.map((i) => i.count), 1);
953
959
  return {
954
- lifecycleSegs: o.map((s) => ({
955
- ...s,
956
- barPct: Math.round(s.count / r * 100),
957
- pctStr: `${e.totalMembers ? Math.round(s.count / e.totalMembers * 100) : 0}%`,
958
- countStr: H(s.count)
960
+ lifecycleSegs: r.map((i) => ({
961
+ ...i,
962
+ barPct: Math.round(i.count / n * 100),
963
+ pctStr: `${e.totalMembers ? Math.round(i.count / e.totalMembers * 100) : 0}%`,
964
+ countStr: q(i.count)
959
965
  })),
960
- lifecycleSummary: `${H(
966
+ lifecycleSummary: `${q(
961
967
  e.atRisk + e.dormant
962
968
  )} members are at-risk or dormant`
963
969
  };
@@ -965,13 +971,13 @@ function Gr(e) {
965
971
  function Jr(e) {
966
972
  return Gr(e);
967
973
  }
968
- function Kr(e, o) {
969
- return e.displayUnit === "uses" ? `${H(e.displayValue)} ${e.displayValue === 1 ? "use" : "uses"}` : e.type === "COIN" ? `${H(e.displayValue)} pts` : O(e.displayValue, o);
974
+ function Kr(e, s) {
975
+ return e.displayUnit === "uses" ? `${q(e.displayValue)} ${e.displayValue === 1 ? "use" : "uses"}` : e.type === "COIN" ? `${q(e.displayValue)} pts` : O(e.displayValue, s);
970
976
  }
971
977
  function Wr(e) {
972
- return e.displayUnit === "uses" ? "Counted voucher-use transactions for this reward during the selected period." : `Total ${e.type.toLowerCase()} amount used for this reward during the selected period.`;
978
+ return e.displayUnit === "uses" ? "Counted voucher-use transactions for this reward during the selected period." : `Total ${e.type === "COIN" ? "point" : e.type.toLowerCase()} amount used for this reward during the selected period.`;
973
979
  }
974
- function Qr(e, o) {
980
+ function Qr(e, s) {
975
981
  const r = Math.max(
976
982
  ...e.topRewards.map((n) => n.usageCount),
977
983
  1
@@ -980,32 +986,32 @@ function Qr(e, o) {
980
986
  rewardKpis: [
981
987
  {
982
988
  label: "Reward redeemers",
983
- value: H(e.rewardRedeemers),
984
- description: g.rewardRedeemers
989
+ value: q(e.rewardRedeemers),
990
+ description: h.rewardRedeemers
985
991
  },
986
992
  {
987
993
  label: "Redemption rate",
988
994
  value: `${e.redemptionRatePct}%`,
989
- description: g.redemptionRate
995
+ description: h.redemptionRate
990
996
  },
991
997
  {
992
998
  label: "Avg reward uses",
993
999
  value: `${e.averageRewardUsesPerRedeemer}x`,
994
- description: g.averageRewardUses
1000
+ description: h.averageRewardUses
995
1001
  }
996
1002
  ],
997
1003
  topRewards: e.topRewards.map((n) => ({
998
1004
  name: n.name,
999
- count: Kr(n, o),
1005
+ count: Kr(n, s),
1000
1006
  description: Wr(n),
1001
1007
  barPct: n.usageCount ? Math.round(n.usageCount / r * 100) : 0
1002
1008
  }))
1003
1009
  };
1004
1010
  }
1005
- const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex items-center justify-between gap-8 flex-wrap" }, es = { class: "flex items-center gap-8 flex-wrap" }, ts = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary -mt-8 text-right" }, rs = { class: "grid grid-cols-[3fr_2fr] xs:grid-cols-1 gap-16 items-start" }, ss = { class: "grid grid-cols-2 xs:grid-cols-1 gap-16" }, gs = /* @__PURE__ */ L({
1011
+ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex items-center justify-between gap-8 flex-wrap" }, es = { class: "flex items-center gap-8 flex-wrap" }, ts = { class: "fm-typo-en-body-sm-400 text-fm-color-typo-tertiary -mt-8 text-right" }, rs = { class: "grid grid-cols-[3fr_2fr] xs:grid-cols-1 gap-16 items-start" }, ss = { class: "grid grid-cols-2 xs:grid-cols-1 gap-16" }, gs = /* @__PURE__ */ I({
1006
1012
  __name: "LoyaltyDashboard",
1007
1013
  setup(e) {
1008
- const o = Ze(), r = et(), n = Ke(), { global: s, minor: i } = Xe, m = w(
1014
+ const s = Ze(), r = et(), n = Ke(), { global: o, minor: i } = Xe, m = w(
1009
1015
  () => _e[r.currentCountry.value || "MY"] ?? _e.MY
1010
1016
  ), b = w(
1011
1017
  () => Je.Country.getCountry(r.currentCountry.value || "MY").currency.code
@@ -1017,7 +1023,7 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
1017
1023
  endDate: v
1018
1024
  }), S = x(
1019
1025
  me(we([y, v]))
1020
- ), z = x({ location: [] }), K = x(o.locations.length > 0), ae = x(!1), ne = x(0), ie = x({}), q = x(null), le = x(null), de = x(null), ce = x(null), W = x(null), Y = x(!1), j = x(!1), Q = x([]), X = x(!1), Z = x(!1);
1026
+ ), H = x({ location: [] }), K = x(s.locations.length > 0), ae = x(!1), ne = x(0), ie = x({}), z = x(null), le = x(null), de = x(null), ce = x(null), W = x(null), Y = x(!1), j = x(!1), Q = x([]), X = x(!1), Z = x(!1);
1021
1027
  function me([a, c]) {
1022
1028
  return { startDate: a, endDate: c };
1023
1029
  }
@@ -1026,9 +1032,9 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
1026
1032
  we([a.startDate, a.endDate])
1027
1033
  ));
1028
1034
  });
1029
- const ue = w(
1035
+ const pe = w(
1030
1036
  () => Or(
1031
- q.value ?? {
1037
+ z.value ?? {
1032
1038
  totalMembers: 0,
1033
1039
  activeMembers: 0,
1034
1040
  purchasingMembers: 0,
@@ -1036,7 +1042,7 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
1036
1042
  rewardRedeemers: 0
1037
1043
  }
1038
1044
  )
1039
- ), pe = w(
1045
+ ), ue = w(
1040
1046
  () => Jr(
1041
1047
  le.value ?? {
1042
1048
  totalMembers: 0,
@@ -1048,20 +1054,20 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
1048
1054
  }
1049
1055
  )
1050
1056
  ), Re = w(
1051
- () => qr(
1057
+ () => zr(
1052
1058
  de.value ?? {
1053
1059
  categories: [""],
1054
1060
  prevCategories: [""],
1055
1061
  series: [0],
1056
1062
  prevSeries: [0],
1057
- description: g.memberSalesTrend,
1063
+ description: h.memberSalesTrend,
1058
1064
  memberSales: 0,
1059
1065
  deltaPct: 0
1060
1066
  },
1061
1067
  b.value
1062
1068
  )
1063
1069
  ), Ce = w(
1064
- () => q.value ? Tr(q.value) : null
1070
+ () => z.value ? Tr(z.value) : null
1065
1071
  ), ee = w(
1066
1072
  () => W.value ? Qr(W.value, b.value) : null
1067
1073
  ), $e = w(
@@ -1075,60 +1081,60 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
1075
1081
  b.value
1076
1082
  )
1077
1083
  ), Fe = w(
1078
- () => zr(Q.value, z.value.location)
1084
+ () => Hr(Q.value, H.value.location)
1079
1085
  ), De = w(() => {
1080
1086
  const a = ie.value;
1081
1087
  return [
1082
1088
  {
1083
1089
  label: "Total members",
1084
1090
  value: be(a.totalMembers ?? 0),
1085
- description: g.totalMembers,
1091
+ description: h.totalMembers,
1086
1092
  icon: "group",
1087
1093
  delta: "0%"
1088
1094
  },
1089
1095
  {
1090
1096
  label: "Active members",
1091
1097
  value: be(a.activeMembers ?? 0),
1092
- description: g.activeMembers,
1098
+ description: h.activeMembers,
1093
1099
  icon: "bolt",
1094
1100
  delta: "0%"
1095
1101
  },
1096
1102
  {
1097
1103
  label: "Member sales",
1098
1104
  value: O(a.memberSales ?? 0, b.value),
1099
- description: g.memberSales,
1105
+ description: h.memberSales,
1100
1106
  icon: "payments",
1101
1107
  delta: "0%"
1102
1108
  },
1103
1109
  {
1104
1110
  label: "Repeat rate",
1105
1111
  value: ye(a.repeatRatePct ?? 0),
1106
- description: g.repeatRate,
1112
+ description: h.repeatRate,
1107
1113
  icon: "repeat",
1108
1114
  delta: "0pp"
1109
1115
  },
1110
1116
  {
1111
1117
  label: "Voucher redemption rate",
1112
1118
  value: ye(a.voucherRedemptionRatePct ?? 0),
1113
- description: g.voucherRedemptionRate,
1119
+ description: h.voucherRedemptionRate,
1114
1120
  icon: "redeem",
1115
1121
  delta: "0pp"
1116
1122
  }
1117
1123
  ].map(
1118
- (h) => ({
1119
- ...h,
1124
+ (g) => ({
1125
+ ...g,
1120
1126
  sub: null,
1121
1127
  deltaClass: "text-fm-color-typo-secondary",
1122
1128
  trendUp: !0
1123
1129
  })
1124
1130
  );
1125
1131
  }), ke = w(
1126
- () => o.locations.map((a) => a._id.toString())
1132
+ () => s.locations.map((a) => a._id.toString())
1127
1133
  );
1128
1134
  function fe(a) {
1129
1135
  return !a.startDate || !a.endDate ? "" : `${he(a.startDate).format("D MMM")} – ${he(a.endDate).format("D MMM YYYY")}`;
1130
1136
  }
1131
- const Pe = w(() => fe(M.value)), Ae = w(
1137
+ const Pe = w(() => fe(M.value)), Le = w(
1132
1138
  () => fe(S.value)
1133
1139
  );
1134
1140
  function be(a) {
@@ -1137,18 +1143,18 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
1137
1143
  function ye(a) {
1138
1144
  return `${Math.round(a * 10) / 10}%`;
1139
1145
  }
1140
- function Ie(a) {
1146
+ function Ae(a) {
1141
1147
  if (a && typeof a == "object" && "value" in a && Number.isFinite(Number(a.value)))
1142
1148
  return Number(a.value);
1143
1149
  }
1144
- function Le() {
1150
+ function Ie() {
1145
1151
  return !M.value.startDate || !M.value.endDate || !S.value.startDate || !S.value.endDate || !K.value ? null : kr({
1146
1152
  dateRange: [M.value.startDate, M.value.endDate],
1147
1153
  compareDateRange: [
1148
1154
  S.value.startDate,
1149
1155
  S.value.endDate
1150
1156
  ],
1151
- selectedLocationIds: z.value.location,
1157
+ selectedLocationIds: H.value.location,
1152
1158
  locationIds: ke.value,
1153
1159
  timezone: m.value
1154
1160
  });
@@ -1156,20 +1162,20 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
1156
1162
  function k(a) {
1157
1163
  return a === ne.value;
1158
1164
  }
1159
- async function N(a, c, h) {
1165
+ async function E(a, c, g) {
1160
1166
  try {
1161
- await a(c, h);
1162
- } catch (E) {
1163
- if (k(h)) throw E;
1167
+ await a(c, g);
1168
+ } catch (N) {
1169
+ if (k(g)) throw N;
1164
1170
  }
1165
1171
  }
1166
1172
  async function Oe(a, c) {
1167
1173
  const [
1168
- h,
1169
- E,
1174
+ g,
1175
+ N,
1170
1176
  G,
1171
1177
  P,
1172
- He
1178
+ qe
1173
1179
  ] = await Promise.all([
1174
1180
  $.readTotalMembers(a),
1175
1181
  $.readActiveMembers(a),
@@ -1178,37 +1184,37 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
1178
1184
  $.readVoucherRedemptionRate(a)
1179
1185
  ]);
1180
1186
  k(c) && (ie.value = {
1181
- totalMembers: Ie(h),
1182
- activeMembers: E.activeMembers,
1187
+ totalMembers: Ae(g),
1188
+ activeMembers: N.activeMembers,
1183
1189
  memberSales: G.memberSales,
1184
1190
  repeatRatePct: P.repeatRatePct,
1185
- voucherRedemptionRatePct: He.voucherRedemptionRatePct
1191
+ voucherRedemptionRatePct: qe.voucherRedemptionRatePct
1186
1192
  });
1187
1193
  }
1188
1194
  async function Be(a, c) {
1189
- const h = await $.readMemberFunnel(a);
1190
- k(c) && (q.value = h);
1195
+ const g = await $.readMemberFunnel(a);
1196
+ k(c) && (z.value = g);
1191
1197
  }
1192
1198
  async function Te(a, c) {
1193
- const h = await $.readMemberLifecycle(a);
1194
- k(c) && (le.value = h);
1195
- }
1196
- async function Ne(a, c) {
1197
- const h = await $.readMemberSalesTrend(a);
1198
- k(c) && (de.value = h);
1199
+ const g = await $.readMemberLifecycle(a);
1200
+ k(c) && (le.value = g);
1199
1201
  }
1200
1202
  async function Ee(a, c) {
1201
- const h = await $.readMemberSpendComparison(a);
1202
- k(c) && (ce.value = h);
1203
+ const g = await $.readMemberSalesTrend(a);
1204
+ k(c) && (de.value = g);
1205
+ }
1206
+ async function Ne(a, c) {
1207
+ const g = await $.readMemberSpendComparison(a);
1208
+ k(c) && (ce.value = g);
1203
1209
  }
1204
1210
  async function Ue(a, c) {
1205
1211
  Y.value = !0, j.value = !1;
1206
1212
  try {
1207
- const h = await $.readRewardUsageHealth(a);
1213
+ const g = await $.readRewardUsageHealth(a);
1208
1214
  if (!k(c)) return;
1209
- W.value = h;
1210
- } catch (h) {
1211
- throw k(c) && (j.value = !0), h;
1215
+ W.value = g;
1216
+ } catch (g) {
1217
+ throw k(c) && (j.value = !0), g;
1212
1218
  } finally {
1213
1219
  k(c) && (Y.value = !1);
1214
1220
  }
@@ -1230,104 +1236,104 @@ const Xr = { class: "px-24 flex flex-col gap-16 pb-24" }, Zr = { class: "flex it
1230
1236
  }
1231
1237
  }
1232
1238
  function ve() {
1233
- const a = ++ne.value, c = Le();
1239
+ const a = ++ne.value, c = Ie();
1234
1240
  if (!c) {
1235
1241
  Y.value = !1, j.value = !1;
1236
1242
  return;
1237
1243
  }
1238
1244
  i(
1239
- () => N(Oe, c, a)
1245
+ () => E(Oe, c, a)
1240
1246
  ).catch(() => {
1241
1247
  }), i(
1242
- () => N(Be, c, a)
1248
+ () => E(Be, c, a)
1243
1249
  ).catch(() => {
1244
1250
  }), i(
1245
- () => N(Te, c, a)
1251
+ () => E(Te, c, a)
1246
1252
  ).catch(() => {
1247
1253
  }), i(
1248
- () => N(Ne, c, a)
1254
+ () => E(Ee, c, a)
1249
1255
  ).catch(() => {
1250
1256
  }), i(
1251
- () => N(
1252
- Ee,
1257
+ () => E(
1258
+ Ne,
1253
1259
  c,
1254
1260
  a
1255
1261
  )
1256
1262
  ).catch(() => {
1257
1263
  }), i(
1258
- () => N(Ue, c, a)
1264
+ () => E(Ue, c, a)
1259
1265
  ).catch(() => {
1260
1266
  });
1261
1267
  }
1262
- return ge([M, S, () => z.value.location], () => {
1268
+ return ge([M, S, () => H.value.location], () => {
1263
1269
  ae.value && ve();
1264
- }), qe(async () => {
1265
- await s(async () => {
1266
- K.value || await o.readLocations(), K.value = !0;
1270
+ }), ze(async () => {
1271
+ await o(async () => {
1272
+ K.value || await s.readLocations(), K.value = !0;
1267
1273
  }), await Ye(), ae.value = !0, ve(), Ve().catch(() => {
1268
1274
  Q.value = [];
1269
1275
  });
1270
1276
  }), (a, c) => {
1271
- var E, G;
1272
- const h = _("FmPageHead");
1273
- return l(), u(F, null, [
1274
- p(h, { title: "Analytic" }),
1277
+ var N, G;
1278
+ const g = _("FmPageHead");
1279
+ return l(), p(F, null, [
1280
+ u(g, { title: "Analytic" }),
1275
1281
  t("div", Xr, [
1276
1282
  t("div", Zr, [
1277
- p(Qe, {
1283
+ u(Qe, {
1278
1284
  label: "Location: ",
1279
1285
  "right-icon": "keyboard_arrow_down",
1280
- modelValue: f(z).location,
1281
- "onUpdate:modelValue": c[0] || (c[0] = (P) => f(z).location = P),
1286
+ modelValue: f(H).location,
1287
+ "onUpdate:modelValue": c[0] || (c[0] = (P) => f(H).location = P),
1282
1288
  icon: "storefront",
1283
1289
  "show-item-label": !0,
1284
- items: f(o).locationOptions
1290
+ items: f(s).locationOptions
1285
1291
  }, null, 8, ["modelValue", "items"]),
1286
1292
  t("div", es, [
1287
- p(xe, {
1293
+ u(xe, {
1288
1294
  "model-value": f(M),
1289
1295
  "onUpdate:modelValue": c[1] || (c[1] = (P) => M.value = P)
1290
1296
  }, null, 8, ["model-value"]),
1291
1297
  c[4] || (c[4] = t("span", { class: "fm-typo-en-body-sm-600 text-fm-color-typo-tertiary" }, "vs", -1)),
1292
- p(xe, {
1298
+ u(xe, {
1293
1299
  "model-value": f(S),
1294
1300
  "onUpdate:modelValue": c[2] || (c[2] = (P) => S.value = P)
1295
1301
  }, null, 8, ["model-value"])
1296
1302
  ])
1297
1303
  ]),
1298
- t("div", ts, d(f(Pe)) + " · vs. " + d(f(Ae)), 1),
1299
- p(Pt, { kpis: f(De) }, null, 8, ["kpis"]),
1304
+ t("div", ts, d(f(Pe)) + " · vs. " + d(f(Le)), 1),
1305
+ u(Pt, { kpis: f(De) }, null, 8, ["kpis"]),
1300
1306
  t("section", rs, [
1301
- p(tr, {
1302
- stages: f(ue).funnelStages,
1303
- footnote: f(ue).funnelFootnote,
1307
+ u(tr, {
1308
+ stages: f(pe).funnelStages,
1309
+ footnote: f(pe).funnelFootnote,
1304
1310
  interactive: !1
1305
1311
  }, null, 8, ["stages", "footnote"]),
1306
- p(Mt, {
1312
+ u(Mt, {
1307
1313
  insight: f(Ce),
1308
1314
  onNavigate: c[3] || (c[3] = (P) => f(n).push(P))
1309
1315
  }, null, 8, ["insight"])
1310
1316
  ]),
1311
1317
  t("section", ss, [
1312
- p(Nt, {
1313
- segments: f(pe).lifecycleSegs,
1314
- summary: f(pe).lifecycleSummary,
1318
+ u(Et, {
1319
+ segments: f(ue).lifecycleSegs,
1320
+ summary: f(ue).lifecycleSummary,
1315
1321
  interactive: !1
1316
1322
  }, null, 8, ["segments", "summary"]),
1317
- p(Mr, {
1318
- kpis: ((E = f(ee)) == null ? void 0 : E.rewardKpis) ?? [],
1323
+ u(Mr, {
1324
+ kpis: ((N = f(ee)) == null ? void 0 : N.rewardKpis) ?? [],
1319
1325
  "top-rewards": ((G = f(ee)) == null ? void 0 : G.topRewards) ?? [],
1320
1326
  "has-data": !!f(ee),
1321
1327
  loading: f(Y),
1322
1328
  error: f(j)
1323
1329
  }, null, 8, ["kpis", "top-rewards", "has-data", "loading", "error"]),
1324
- p($r, { sales: f(Re) }, null, 8, ["sales"]),
1325
- p(pt, {
1330
+ u($r, { sales: f(Re) }, null, 8, ["sales"]),
1331
+ u(ut, {
1326
1332
  campaigns: f(Fe),
1327
1333
  loading: f(X),
1328
1334
  error: f(Z)
1329
1335
  }, null, 8, ["campaigns", "loading", "error"]),
1330
- p(mr, { spend: f($e) }, null, 8, ["spend"])
1336
+ u(mr, { spend: f($e) }, null, 8, ["spend"])
1331
1337
  ])
1332
1338
  ])
1333
1339
  ], 64);