@feedmepos/mf-connect 0.1.98-beta.32 → 0.1.98-beta.33

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 (108) hide show
  1. package/dist/{App-CNxXYDQA.js → App-BzP4ANeh.js} +8 -8
  2. package/dist/{AuditLogs-1BQil5oX.js → AuditLogs-BpcnCI8a.js} +9 -9
  3. package/dist/{Bin-aAMGXyy9.js → Bin-hSXtsfix.js} +8 -8
  4. package/dist/{Broadcast-D5bqpEmf.js → Broadcast-DHwGme0F.js} +11 -11
  5. package/dist/{CampaignAnalytic-CN2WcXYn.js → CampaignAnalytic-BomZiIFX.js} +700 -540
  6. package/dist/{CampaignTypeDialog.vue_vue_type_script_setup_true_lang-D9GfSdXq.js → CampaignTypeDialog.vue_vue_type_script_setup_true_lang-Xqim4PO6.js} +6 -6
  7. package/dist/{Card-DfEuS5gl.js → Card-BIEIPnhZ.js} +18 -18
  8. package/dist/{Collections-1OTkyEYN.js → Collections-DdkTsIMO.js} +8 -8
  9. package/dist/{Credit-qCK-zP2Y.js → Credit-BrWVE-Ns.js} +12 -12
  10. package/dist/{EditCampaignSheet.vue_vue_type_script_setup_true_lang-9NWM4yOR.js → EditCampaignSheet.vue_vue_type_script_setup_true_lang-DRYCbJ2f.js} +31 -31
  11. package/dist/{EffectSheet.vue_vue_type_style_index_0_lang-Dnhei4AU.js → EffectSheet.vue_vue_type_style_index_0_lang-BRCY7r6g.js} +6 -6
  12. package/dist/{Experience-BBU56znM.js → Experience-DzVyQQZb.js} +12 -12
  13. package/dist/{FileSaver.min-D_mPZjeB.js → FileSaver.min-C1kxXI3X.js} +1 -1
  14. package/dist/{Game-B9mElf85.js → Game-F9QKoXmJ.js} +13 -13
  15. package/dist/{Grab-CbsGHZfG.js → Grab-DhZEtiki.js} +9 -9
  16. package/dist/{ImageInput.vue_vue_type_script_setup_true_lang-VL01SI_I.js → ImageInput.vue_vue_type_script_setup_true_lang-BIXh13LB.js} +1 -1
  17. package/dist/{Index-CZIwtF0k.js → Index-CwbfDHOo.js} +10 -10
  18. package/dist/{LocationPicker.vue_vue_type_script_setup_true_lang-juzVYVi0.js → LocationPicker.vue_vue_type_script_setup_true_lang-D0Ce5XjD.js} +1 -1
  19. package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-Br92n7M3.js → LottieAnimation.vue_vue_type_script_setup_true_lang-BvGqZc8W.js} +1 -1
  20. package/dist/{LoyaltyDashboard-DjkNjh1M.js → LoyaltyDashboard-3CjWlcj4.js} +7 -7
  21. package/dist/{MainLayout-BHdPdHlp.js → MainLayout-DYz8doEH.js} +1 -1
  22. package/dist/{Marketing-CQdgWswq.js → Marketing-D0mdsyK7.js} +4 -4
  23. package/dist/{MarketingMaterialEdit-jzSiHrVn.js → MarketingMaterialEdit-CML9DeVJ.js} +6 -6
  24. package/dist/{Member-CdnKnmuC.js → Member-DxAW9XEp.js} +11 -11
  25. package/dist/{MemberList-nA2eRYW6.js → MemberList-Dxn0uH5R.js} +25 -25
  26. package/dist/{MemberTransactions-BHALSRqB.js → MemberTransactions-BNnvejpI.js} +1 -1
  27. package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-TXiPUFjM.js → MessageInput.vue_vue_type_script_setup_true_lang-CN939tr-.js} +9 -9
  28. package/dist/{Mission-B0aReKMJ.js → Mission-C--va02t.js} +13 -13
  29. package/dist/{Overview-CIB61CBG.js → Overview-C2XLYFpa.js} +18 -18
  30. package/dist/Overview-DJ9BK5_B.js +1280 -0
  31. package/dist/{Point-BgUEcVbF.js → Point-D84j4tsw.js} +12 -12
  32. package/dist/{Promotion-CBHfk3xI.js → Promotion-BwHVBqyP.js} +13 -13
  33. package/dist/{Queue-DdQHEsaR.js → Queue-CXfsYVGY.js} +10 -10
  34. package/dist/{Record-BkLjJ-kq.js → Record-BnFV2Kfn.js} +9 -9
  35. package/dist/{Review-Cxa2Bi2q.js → Review-Cy9mhf0P.js} +2 -2
  36. package/dist/{ReviewFacebookCallback-BhSWj_BK.js → ReviewFacebookCallback-wkMeADAI.js} +5 -5
  37. package/dist/{ReviewGoogleCallback-DlKlinv4.js → ReviewGoogleCallback-4uIYK7vQ.js} +5 -5
  38. package/dist/{Reward-1_9Thzxv.js → Reward-CH0MGkc4.js} +16 -16
  39. package/dist/{RewardGroup.vue_vue_type_script_setup_true_lang-D-pu0qTL.js → RewardGroup.vue_vue_type_script_setup_true_lang-CxFWFyMB.js} +11 -11
  40. package/dist/{RuleGroup.vue_vue_type_script_setup_true_lang-C55MTCd6.js → RuleGroup.vue_vue_type_script_setup_true_lang-CPcHgR2s.js} +14 -14
  41. package/dist/{Segment-CbuM0oqp.js → Segment-CteQKaCP.js} +24 -24
  42. package/dist/{SelectItems.vue_vue_type_script_setup_true_lang-DTw26WFe.js → SelectItems.vue_vue_type_script_setup_true_lang-D0PMI67B.js} +2 -2
  43. package/dist/{SendCollectionSheet.vue_vue_type_script_setup_true_lang-ChIeh5kM.js → SendCollectionSheet.vue_vue_type_script_setup_true_lang-CvcwukaT.js} +12 -12
  44. package/dist/{SendVoucherSheet.vue_vue_type_script_setup_true_lang-BtRbHWrt.js → SendVoucherSheet.vue_vue_type_script_setup_true_lang-CpPqlqkS.js} +4 -4
  45. package/dist/{Setting-D6XLdUHo.js → Setting-b7vdKxsE.js} +14 -14
  46. package/dist/{SettingAdvertisements-CROGLyf0.js → SettingAdvertisements-CeUU6mee.js} +12 -12
  47. package/dist/{Settings-DgJFEIpt.js → Settings-Cspyqgb2.js} +5 -5
  48. package/dist/{Store-DDojtoEi.js → Store-BZeHKYtn.js} +21 -21
  49. package/dist/{StoreRewards-BTVhqRbW.js → StoreRewards-Dy1BgLHb.js} +15 -15
  50. package/dist/{StoreTransactions.vue_vue_type_script_setup_true_lang-BxCy3Fk5.js → StoreTransactions.vue_vue_type_script_setup_true_lang-BCJNfQuz.js} +386 -445
  51. package/dist/{TargetLocationInput.vue_vue_type_script_setup_true_lang-y2NxEq4f.js → TargetLocationInput.vue_vue_type_script_setup_true_lang-lN9kgRHm.js} +2 -2
  52. package/dist/{Tier-BWVosUHF.js → Tier-CfeSjVzG.js} +24 -24
  53. package/dist/{Title-Dcu9e-na.js → Title-Dd0VfDsZ.js} +21 -21
  54. package/dist/{Transaction-B0V2qZBQ.js → Transaction-Cn4HCYbk.js} +2 -2
  55. package/dist/{UserRuleGroup.vue_vue_type_script_setup_true_lang-CE1HmXwU.js → UserRuleGroup.vue_vue_type_script_setup_true_lang-k22zXcWo.js} +6 -6
  56. package/dist/{Voucher-u2IJaAHw.js → Voucher-BMsNd7sf.js} +14 -14
  57. package/dist/{VoucherEditor.vue_vue_type_script_setup_true_lang-DlCEICsf.js → VoucherEditor.vue_vue_type_script_setup_true_lang-CyW_E0MM.js} +12 -12
  58. package/dist/{ZodTextField.vue_vue_type_script_setup_true_lang-BqcVNJY1.js → ZodTextField.vue_vue_type_script_setup_true_lang-CXotPMas.js} +2 -2
  59. package/dist/{app-J_0SevWd.js → app--6V27Xve.js} +115 -65
  60. package/dist/app.js +1 -1
  61. package/dist/{business-CsYOIMmN.js → business-nVaVFZGb.js} +1 -1
  62. package/dist/{campaign-CEuSGs0P.js → campaign--jBBFmQu.js} +2 -2
  63. package/dist/{campaign-B7AmOe4b.js → campaign-DgJsqzJg.js} +7 -7
  64. package/dist/{campaign.fn-i8dPJ25D.js → campaign.fn-fBXDaSf5.js} +103 -103
  65. package/dist/{collection.fn-BQ8wuiDD.js → collection.fn-D4SjJWTX.js} +2 -2
  66. package/dist/{duplicateCampaign-CU-vJAMn.js → duplicateCampaign-CPnYCBOM.js} +2 -2
  67. package/dist/{effect-CdiluX3c.js → effect-CuYJPO5p.js} +1 -1
  68. package/dist/{email-addresses-CRks2VoS.js → email-addresses-C71AgV2g.js} +2 -2
  69. package/dist/{export-BzO_R_tT.js → export-CHfRZgIC.js} +3 -3
  70. package/dist/{helper-DQ1hga5s.js → helper-bInfPoQn.js} +1 -1
  71. package/dist/{index-Ci4w7iLa.js → index-AbaPEf3f.js} +1 -1
  72. package/dist/{index-MjBzQEFO.js → index-BCvZlp8V.js} +2 -2
  73. package/dist/{index-B09Leh3n.js → index-BFp7wPDQ.js} +13 -8
  74. package/dist/{index-DtlnuU5Q.js → index-BdVRV0Uo.js} +3 -3
  75. package/dist/{index-DJUdhmNI.js → index-BhSNKMmE.js} +1 -1
  76. package/dist/{index-C_fi9WV2.js → index-BjMXhhKX.js} +1 -1
  77. package/dist/{index-DQGjv4xY.js → index-Bu0UXDcs.js} +2 -2
  78. package/dist/{index-BsnVJG1F.js → index-C5x5verS.js} +1 -1
  79. package/dist/{index-0O1t0S4q.js → index-CZnCT0JW.js} +1 -1
  80. package/dist/{index-CCEi8Zf_.js → index-CvXDh_9e.js} +1 -1
  81. package/dist/{index-BmpKqhfv.js → index-DbkjgIcu.js} +2 -2
  82. package/dist/{index-D_7zLq-s.js → index-Dg6Y8V04.js} +1 -1
  83. package/dist/{index-CUhcefIe.js → index-DsVX_eu4.js} +2 -2
  84. package/dist/{index-BXOpGbAX.js → index-SDUQ4lT7.js} +23 -16
  85. package/dist/{index-yrH8x1-i.js → index-_qMPm1Id.js} +1 -1
  86. package/dist/{index.esm2017-BIjrnzt3.js → index.esm2017-B8Xmmdgt.js} +1 -1
  87. package/dist/{loading-Oo_J76T6.js → loading-DwFh75tl.js} +1 -1
  88. package/dist/{lodash-D_m_JBgX.js → lodash-CQmJmgPY.js} +1 -1
  89. package/dist/{membership-BzicPSED.js → membership-icvHuN-E.js} +2 -2
  90. package/dist/{money-D_TgioqX.js → money-DO-0ll4Z.js} +1 -1
  91. package/dist/{number-C69W9t0P.js → number-CfClXkWG.js} +1 -1
  92. package/dist/{objectid-8WROvPOV.js → objectid-DJtSRNpZ.js} +10 -10
  93. package/dist/{plugins-DU_sWFOn.js → plugins-DbM9cBpV.js} +3 -3
  94. package/dist/{reward-gUVChY_n.js → reward-_WEJOjeK.js} +1 -1
  95. package/dist/{rule-DN1rfxVA.js → rule-CnGtzN59.js} +3 -3
  96. package/dist/{rule-builder-BnU36OpM.js → rule-builder-BI39gFZ3.js} +1 -1
  97. package/dist/{template-BOXPK0-P.js → template-BVSD0fwv.js} +6 -6
  98. package/dist/{timezone-CV5vHYYz.js → timezone-BQL7KOlp.js} +1 -1
  99. package/dist/transaction.fn-B29pIyoD.js +64 -0
  100. package/dist/{trigger-GP4mC5kc.js → trigger-4sAq1aTV.js} +5 -5
  101. package/dist/{useMarketingMaterialActions-CC06kGq3.js → useMarketingMaterialActions-DZyZM3sd.js} +3 -3
  102. package/dist/{usePagination-BjV6asuC.js → usePagination-CeW8ywoy.js} +1 -1
  103. package/dist/{user-B_1Zm_6U.js → user-C1uF3KES.js} +1 -1
  104. package/dist/{vue-i18n-CGoM6XkW.js → vue-i18n-BxqLfiiU.js} +252 -252
  105. package/dist/{xlsx-yGcEutsz.js → xlsx-DK1wx9F2.js} +440 -440
  106. package/dist/{zod-BtYgzWyF.js → zod-DhUrVGS5.js} +1 -1
  107. package/package.json +1 -1
  108. package/dist/Overview-DeeB3zo1.js +0 -1117
@@ -0,0 +1,1280 @@
1
+ import { defineComponent as Y, ref as x, computed as f, resolveComponent as _, openBlock as s, createBlock as R, unref as e, withCtx as U, createVNode as v, normalizeClass as P, createElementVNode as l, toDisplayString as u, createElementBlock as d, Fragment as V, renderList as Q, useModel as H, onMounted as oe, isRef as z, createCommentVNode as C, watch as j, withModifiers as W, renderSlot as $, createTextVNode as Z, Teleport as ge, createSlots as fe, onUnmounted as we, normalizeStyle as te, nextTick as pe } from "vue";
2
+ import { h as L } from "./moment-D7p2TMB-.js";
3
+ import { u as q } from "./vue-i18n-BxqLfiiU.js";
4
+ import { _ as ye } from "./DateRangeChip.vue_vue_type_script_setup_true_lang-eIoPtgO5.js";
5
+ import { _ as ie } from "./FilterChip.vue_vue_type_script_setup_true_lang-DaU-9GzO.js";
6
+ import { u as he } from "./business-nVaVFZGb.js";
7
+ import { components as M, useSnackbar as be } from "@feedmepos/ui-library";
8
+ import { g as xe } from "./google-C3S8u0mT.js";
9
+ import { r as le } from "./index-SDUQ4lT7.js";
10
+ const ke = { class: "fm-typo-en-body-md-600 select-none text-ellipsis overflow-hidden whitespace-nowrap" }, ce = /* @__PURE__ */ Y({
11
+ __name: "SortChip",
12
+ props: {
13
+ modelValue: {
14
+ type: String,
15
+ required: !0
16
+ },
17
+ items: {
18
+ type: Array,
19
+ required: !0
20
+ },
21
+ label: {
22
+ type: String,
23
+ default: "Sort by: "
24
+ },
25
+ placement: {
26
+ type: String,
27
+ default: "bottom-end"
28
+ },
29
+ class: {
30
+ type: String,
31
+ default: "text-fm-color-neutral-gray-400 cursor-pointer"
32
+ }
33
+ },
34
+ emits: ["update:model-value"],
35
+ setup(t, { emit: a }) {
36
+ const r = t, o = a, n = x(!1), c = f(
37
+ () => {
38
+ var w;
39
+ return ((w = r.items.find((p) => p.value === r.modelValue)) == null ? void 0 : w.label) ?? "";
40
+ }
41
+ );
42
+ function i(w) {
43
+ o("update:model-value", w), n.value = !1;
44
+ }
45
+ return (w, p) => {
46
+ const A = _("FmIcon"), F = _("FmChip"), I = _("FmMenuItem"), S = _("FmMenu");
47
+ return s(), R(S, {
48
+ placement: t.placement,
49
+ "model-value": e(n),
50
+ "close-on-click": !0,
51
+ onMenuChanged: p[0] || (p[0] = (m) => n.value = m)
52
+ }, {
53
+ "menu-button": U(() => [
54
+ v(F, {
55
+ label: `${t.label}${e(c)}`,
56
+ class: P(r.class)
57
+ }, {
58
+ default: U(() => [
59
+ l("div", ke, u(t.label) + u(e(c)), 1),
60
+ v(A, {
61
+ name: e(n) ? "keyboard_arrow_up" : "keyboard_arrow_down",
62
+ class: P(r.class),
63
+ outline: "",
64
+ size: "sm"
65
+ }, null, 8, ["name", "class"])
66
+ ]),
67
+ _: 1
68
+ }, 8, ["label", "class"])
69
+ ]),
70
+ default: U(() => [
71
+ (s(!0), d(V, null, Q(t.items, (m) => (s(), R(I, {
72
+ key: m.value,
73
+ value: m.value,
74
+ label: m.label,
75
+ onClick: (g) => i(m.value)
76
+ }, null, 8, ["value", "label", "onClick"]))), 128))
77
+ ]),
78
+ _: 1
79
+ }, 8, ["placement", "model-value"]);
80
+ };
81
+ }
82
+ }), Ce = { class: "flex justify-between gap-8" }, Ae = { class: "flex flex-wrap gap-8" }, Ie = /* @__PURE__ */ Y({
83
+ __name: "ReviewListingController",
84
+ props: {
85
+ source: {
86
+ required: !0
87
+ },
88
+ sourceModifiers: {},
89
+ dateFrom: { required: !0 },
90
+ dateFromModifiers: {},
91
+ dateTo: { required: !0 },
92
+ dateToModifiers: {},
93
+ locationId: { required: !0 },
94
+ locationIdModifiers: {},
95
+ deletedFilter: {
96
+ required: !0
97
+ },
98
+ deletedFilterModifiers: {},
99
+ sort: { required: !0 },
100
+ sortModifiers: {}
101
+ },
102
+ emits: ["update:source", "update:dateFrom", "update:dateTo", "update:locationId", "update:deletedFilter", "update:sort"],
103
+ setup(t) {
104
+ const { t: a } = q(), r = H(t, "source"), o = H(t, "dateFrom"), n = H(t, "dateTo"), c = H(t, "locationId"), i = H(t, "deletedFilter"), w = H(t, "sort"), p = he(), A = f(() => [
105
+ { label: "Google", value: "google" },
106
+ { label: "FeedMe", value: "feedme" },
107
+ { label: "Feedvibe", value: "feedvibe" }
108
+ ]), F = f(() => [
109
+ ...p.locationOptions.map((b) => ({
110
+ label: b.label,
111
+ value: b.value
112
+ }))
113
+ ]), I = f(() => [
114
+ {
115
+ label: a("connect.review.filter.sort.createTime_desc"),
116
+ value: "createTime_desc"
117
+ },
118
+ {
119
+ label: a("connect.review.filter.sort.createTime_asc"),
120
+ value: "createTime_asc"
121
+ },
122
+ { label: a("connect.review.filter.sort.rating_asc"), value: "rating_asc" },
123
+ { label: a("connect.review.filter.sort.rating_desc"), value: "rating_desc" }
124
+ ]), S = f(() => [
125
+ {
126
+ label: a("connect.review.filter.deleted.all"),
127
+ value: "all"
128
+ },
129
+ {
130
+ label: a("connect.review.filter.deleted.exclude"),
131
+ value: "excludeDeleted"
132
+ }
133
+ ]), m = f({
134
+ get: () => r.value ?? [],
135
+ set: (b) => {
136
+ r.value = b.length ? b : null;
137
+ }
138
+ }), g = f({
139
+ get: () => c.value ? [c.value] : [],
140
+ set: (b) => {
141
+ c.value = b.length === 1 && b[0] ? b[0] : "";
142
+ }
143
+ }), y = f({
144
+ get: () => ({
145
+ startDate: o.value ?? void 0,
146
+ endDate: n.value ?? void 0
147
+ }),
148
+ set: (b) => {
149
+ o.value = b.startDate ?? null, n.value = b.endDate ?? null;
150
+ }
151
+ }), G = f(() => p.locations.length > 0);
152
+ return oe(() => p.readLocations()), (b, h) => (s(), d("div", Ce, [
153
+ l("div", Ae, [
154
+ v(ie, {
155
+ modelValue: e(m),
156
+ "onUpdate:modelValue": h[0] || (h[0] = (B) => z(m) ? m.value = B : null),
157
+ label: `${e(a)("connect.review.filter.source")}: `,
158
+ "show-item-label": !0,
159
+ items: e(A),
160
+ searchable: !1,
161
+ placement: "bottom-start"
162
+ }, null, 8, ["modelValue", "label", "items"]),
163
+ e(G) ? (s(), R(ie, {
164
+ key: 0,
165
+ modelValue: e(g),
166
+ "onUpdate:modelValue": h[1] || (h[1] = (B) => z(g) ? g.value = B : null),
167
+ label: `${e(a)("connect.review.filter.location")}: `,
168
+ "show-item-label": !0,
169
+ items: e(F),
170
+ placement: "bottom-start"
171
+ }, null, 8, ["modelValue", "label", "items"])) : C("", !0),
172
+ v(ye, {
173
+ modelValue: e(y),
174
+ "onUpdate:modelValue": h[2] || (h[2] = (B) => z(y) ? y.value = B : null)
175
+ }, null, 8, ["modelValue"]),
176
+ v(ce, {
177
+ modelValue: i.value,
178
+ "onUpdate:modelValue": h[3] || (h[3] = (B) => i.value = B),
179
+ label: `${e(a)("connect.review.filter.deleted.label")}: `,
180
+ items: e(S),
181
+ placement: "bottom-start"
182
+ }, null, 8, ["modelValue", "label", "items"])
183
+ ]),
184
+ v(ce, {
185
+ modelValue: w.value,
186
+ "onUpdate:modelValue": h[4] || (h[4] = (B) => w.value = B),
187
+ label: `${e(a)("connect.review.filter.sort.label")}: `,
188
+ items: e(I),
189
+ placement: "bottom-start"
190
+ }, null, 8, ["modelValue", "label", "items"])
191
+ ]));
192
+ }
193
+ }), De = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='%231877F2'%3e%3cpath%20d='M24%2012.073c0-6.627-5.373-12-12-12s-12%205.373-12%2012c0%205.99%204.388%2010.954%2010.125%2011.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007%201.792-4.669%204.533-4.669%201.312%200%202.686.235%202.686.235v2.953H15.83c-1.491%200-1.956.925-1.956%201.874v2.25h3.328l-.532%203.47h-2.796v8.385C19.612%2023.027%2024%2018.062%2024%2012.073z'/%3e%3c/svg%3e", Me = { class: "flex h-full flex-col" }, Fe = { class: "shrink-0 border-b border-fm-color-neutral-gray-200 pb-[12px] pt-18" }, Se = { class: "flex items-center gap-[10px]" }, Be = { class: "min-w-0 flex-1" }, Ee = { class: "fm-typo-en-body-md-600 text-fm-color-neutral-gray-400" }, Re = { class: "flex items-center gap-4" }, Ue = { class: "ml-4 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400" }, Ve = ["title"], Ye = { class: "min-h-0 flex-1 overflow-y-auto py-[20px]" }, Oe = { class: "flex flex-col gap-16" }, Qe = {
194
+ key: 0,
195
+ class: "rounded-lg border border-red-200 bg-red-50 px-12 py-8 fm-typo-en-body-sm-600 text-red-700"
196
+ }, Ge = { class: "m-0 fm-typo-en-body-md-400 leading-22" }, Pe = { key: 1 }, Te = { class: "mb-8 fm-typo-en-body-sm-600 uppercase tracking-wide text-fm-color-neutral-gray-400" }, ze = { class: "flex flex-wrap gap-8" }, Le = ["src", "alt"], Ne = { class: "flex flex-col gap-[10px] rounded-xl bg-fm-color-neutral-gray-100 py-[14px] px-[24px]" }, qe = { class: "flex justify-between gap-12 fm-typo-en-body-sm-400" }, He = { class: "text-fm-color-neutral-gray-400" }, je = { class: "font-semibold text-fm-color-neutral-gray-400" }, Je = { class: "flex justify-between gap-12 fm-typo-en-body-sm-400" }, Ke = { class: "text-fm-color-neutral-gray-400" }, _e = { class: "text-right font-semibold text-fm-color-neutral-gray-400" }, Ze = { class: "flex justify-between gap-12 fm-typo-en-body-sm-400" }, We = { class: "text-fm-color-neutral-gray-400" }, Xe = { class: "font-semibold text-fm-color-neutral-gray-400" }, $e = {
197
+ key: 0,
198
+ class: "flex justify-between gap-12 fm-typo-en-body-sm-400"
199
+ }, et = { class: "text-fm-color-neutral-gray-400" }, tt = { class: "font-semibold text-fm-color-neutral-gray-400" }, lt = {
200
+ key: 1,
201
+ class: "flex justify-between gap-12 fm-typo-en-body-sm-400"
202
+ }, ot = { class: "text-red-700" }, nt = { class: "font-semibold text-red-700" }, at = { class: "flex justify-between gap-12 fm-typo-en-body-sm-400" }, st = { class: "text-fm-color-neutral-gray-400" }, rt = { class: "font-mono text-xs text-fm-color-neutral-gray-400" }, it = {
203
+ key: 0,
204
+ class: "shrink-0 border-t border-fm-color-neutral-gray-200 py-[12px]"
205
+ }, ct = /* @__PURE__ */ Y({
206
+ __name: "ReviewDetailSheet",
207
+ props: {
208
+ modelValue: { type: Boolean },
209
+ review: {},
210
+ referenceId: {},
211
+ location: {},
212
+ platformName: {},
213
+ reviewerPictureUrl: {}
214
+ },
215
+ emits: ["update:modelValue"],
216
+ setup(t, { emit: a }) {
217
+ const { FmButton: r } = M, { t: o } = q(), n = t, c = a, i = f({
218
+ get: () => n.modelValue,
219
+ set: (y) => c("update:modelValue", y)
220
+ }), w = f(() => {
221
+ var y;
222
+ return (y = n.review.reviewer) == null ? void 0 : y.name;
223
+ }), p = f(() => {
224
+ if (n.review.source === "google" || n.review.source === "feedme")
225
+ return n.review.starRating;
226
+ if (n.review.source === "feedvibe") return n.review.rating.overall;
227
+ }), A = f(() => n.review.source === "google" || n.review.source === "feedme" || n.review.source === "feedvibe" ? n.review.mediaItems : []), F = f(
228
+ () => L(n.review.createTime).format("D MMM YYYY, hh:mm A")
229
+ ), I = f(
230
+ () => n.review.updateTime ? L(n.review.updateTime).format("D MMM YYYY, hh:mm A") : void 0
231
+ ), S = f(
232
+ () => n.review.deletedAt ? L(n.review.deletedAt).format("D MMM YYYY, hh:mm A") : void 0
233
+ ), m = f(() => {
234
+ if (n.review.source === "google")
235
+ return n.review.originalUrl;
236
+ });
237
+ function g() {
238
+ m.value && window.open(m.value, "_blank", "noopener,noreferrer");
239
+ }
240
+ return (y, G) => {
241
+ const b = _("FmSideSheet");
242
+ return s(), R(b, {
243
+ modelValue: i.value,
244
+ "onUpdate:modelValue": G[1] || (G[1] = (h) => i.value = h),
245
+ "max-width": 560,
246
+ "close-button": !1,
247
+ "dismiss-away": !0
248
+ }, {
249
+ default: U(() => [
250
+ l("div", Me, [
251
+ l("div", Fe, [
252
+ l("div", Se, [
253
+ v(e(M).FmAvatar, {
254
+ name: t.reviewerPictureUrl ? void 0 : w.value,
255
+ src: t.reviewerPictureUrl,
256
+ size: "md",
257
+ class: "h-40 w-40 shrink-0"
258
+ }, null, 8, ["name", "src"]),
259
+ l("div", Be, [
260
+ l("div", Ee, u(w.value || e(o)("connect.review.detail.anonymous")), 1),
261
+ l("div", Re, [
262
+ (s(), d(V, null, Q(5, (h) => v(e(M).FmIcon, {
263
+ key: h,
264
+ name: "star",
265
+ size: "sm",
266
+ class: P(
267
+ h <= Math.round(p.value || 0) ? "text-fm-color-primary" : "text-fm-color-neutral-gray-200"
268
+ )
269
+ }, null, 8, ["class"])), 64)),
270
+ l("span", Ue, u(F.value), 1)
271
+ ])
272
+ ]),
273
+ l("button", {
274
+ type: "button",
275
+ title: e(o)("connect.review.detail.close"),
276
+ class: "flex h-[30px] w-[30px] items-center justify-center rounded-lg border-0 bg-transparent text-fm-color-neutral-gray-400 hover:bg-fm-color-neutral-gray-100",
277
+ onClick: G[0] || (G[0] = (h) => i.value = !1)
278
+ }, [
279
+ v(e(M).FmIcon, {
280
+ name: "close",
281
+ size: "sm"
282
+ })
283
+ ], 8, Ve)
284
+ ])
285
+ ]),
286
+ l("div", Ye, [
287
+ l("div", Oe, [
288
+ S.value ? (s(), d("div", Qe, u(e(o)("connect.review.detail.deleted")), 1)) : C("", !0),
289
+ l("p", Ge, u(t.review.comment || e(o)("connect.review.detail.noComment")), 1),
290
+ A.value.length ? (s(), d("div", Pe, [
291
+ l("div", Te, u(e(o)("connect.review.detail.photos", { n: A.value.length })), 1),
292
+ l("div", ze, [
293
+ (s(!0), d(V, null, Q(A.value, (h, B) => (s(), d("div", {
294
+ key: h.externalId || B,
295
+ class: "flex h-[76px] w-[76px] items-center justify-center overflow-hidden rounded-lg bg-fm-color-neutral-gray-100"
296
+ }, [
297
+ l("img", {
298
+ src: h.thumbnailUrl,
299
+ alt: h.thumbnailLabel,
300
+ class: "h-full w-full object-cover"
301
+ }, null, 8, Le)
302
+ ]))), 128))
303
+ ])
304
+ ])) : C("", !0),
305
+ l("div", Ne, [
306
+ l("div", qe, [
307
+ l("span", He, u(e(o)("connect.review.detail.source")), 1),
308
+ l("span", je, u(t.platformName), 1)
309
+ ]),
310
+ l("div", Je, [
311
+ l("span", Ke, u(e(o)("connect.review.detail.outlet")), 1),
312
+ l("span", _e, u(t.location || e(o)("connect.review.detail.emptyValue")), 1)
313
+ ]),
314
+ l("div", Ze, [
315
+ l("span", We, u(e(o)("connect.review.detail.createTime")), 1),
316
+ l("span", Xe, u(F.value), 1)
317
+ ]),
318
+ I.value ? (s(), d("div", $e, [
319
+ l("span", et, u(e(o)("connect.review.detail.updateTime")), 1),
320
+ l("span", tt, u(I.value), 1)
321
+ ])) : C("", !0),
322
+ S.value ? (s(), d("div", lt, [
323
+ l("span", ot, u(e(o)("connect.review.detail.deletedAt")), 1),
324
+ l("span", nt, u(S.value), 1)
325
+ ])) : C("", !0),
326
+ l("div", at, [
327
+ l("span", st, u(e(o)("connect.review.detail.referenceId")), 1),
328
+ l("span", rt, u(t.referenceId), 1)
329
+ ])
330
+ ])
331
+ ])
332
+ ]),
333
+ m.value ? (s(), d("div", it, [
334
+ v(e(r), {
335
+ variant: "primary",
336
+ size: "md",
337
+ "prepend-icon": "open_in_new",
338
+ label: e(o)("connect.review.detail.openOriginalLink"),
339
+ class: "w-full",
340
+ onClick: g
341
+ }, null, 8, ["label"])
342
+ ])) : C("", !0)
343
+ ])
344
+ ]),
345
+ _: 1
346
+ }, 8, ["modelValue"]);
347
+ };
348
+ }
349
+ }), ut = 300, ue = /* @__PURE__ */ new Map();
350
+ let de = Promise.resolve();
351
+ function dt(t) {
352
+ const a = ue.get(t);
353
+ if (a) return a;
354
+ const r = de.then(
355
+ () => new Promise((o) => {
356
+ const n = new Image();
357
+ n.onload = () => o(!0), n.onerror = () => o(!1), n.src = t;
358
+ })
359
+ );
360
+ return ue.set(t, r), de = r.then(
361
+ () => new Promise(
362
+ (o) => setTimeout(o, ut)
363
+ )
364
+ ), r;
365
+ }
366
+ const ve = /* @__PURE__ */ Y({
367
+ __name: "ReviewerProfileImage",
368
+ props: {
369
+ name: {},
370
+ pictureUrl: {},
371
+ isGoogle: { type: Boolean }
372
+ },
373
+ emits: ["loaded"],
374
+ setup(t, { emit: a }) {
375
+ const r = t, o = a, n = x();
376
+ return j(
377
+ () => [r.pictureUrl, r.isGoogle],
378
+ async ([c, i]) => {
379
+ n.value = i ? void 0 : c, o("loaded", n.value), i && c && await dt(c) && r.pictureUrl === c && r.isGoogle === i && (n.value = c, o("loaded", c));
380
+ },
381
+ { immediate: !0 }
382
+ ), (c, i) => (s(), R(e(M).FmAvatar, {
383
+ name: n.value ? void 0 : t.name,
384
+ src: n.value,
385
+ size: "md",
386
+ class: "h-40 w-40 shrink-0"
387
+ }, null, 8, ["name", "src"]));
388
+ }
389
+ }), mt = { class: "absolute right-[16px] top-[16px] z-10 flex gap-8" }, vt = { class: "flex items-start gap-12" }, gt = { class: "min-w-0 flex flex-col flex-1 gap-8" }, ft = { class: "flex flex-wrap items-start justify-between gap-8" }, wt = { class: "flex min-w-0 flex-wrap items-center gap-x-8 gap-y-4" }, pt = { class: "fm-typo-en-body-md-600 text-fm-color-neutral-gray-400" }, yt = { class: "fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400" }, ht = {
390
+ key: 0,
391
+ class: "inline-flex items-center gap-4 rounded-full bg-red-100 px-8 py-4 fm-typo-en-body-sm-600 text-red-700"
392
+ }, bt = { class: "flex flex-wrap items-center gap-8" }, xt = { class: "inline-flex items-center gap-4 rounded-full bg-fm-color-neutral-gray-100 px-12 py-4" }, kt = ["src", "alt"], Ct = { class: "fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400" }, At = {
393
+ key: 0,
394
+ class: "fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400"
395
+ }, It = {
396
+ key: 0,
397
+ class: "rounded-lg bg-fm-color-neutral-gray-100 px-12 py-8"
398
+ }, Dt = { class: "mb-4 flex items-center justify-between gap-8 fm-typo-en-body-sm-600 text-fm-color-neutral-gray-400" }, Mt = { class: "font-normal" }, Ft = { class: "m-0 whitespace-pre-line fm-typo-en-body-sm-400" }, St = {
399
+ key: 1,
400
+ class: "mt-4"
401
+ }, ne = /* @__PURE__ */ Y({
402
+ __name: "ReviewCardTemplate",
403
+ props: {
404
+ review: {},
405
+ logo: {},
406
+ logoAlt: {},
407
+ gap: {},
408
+ originalLink: {},
409
+ onReply: { type: Function }
410
+ },
411
+ setup(t) {
412
+ const { FmButton: a } = M, { t: r } = q(), o = t, n = f(() => {
413
+ var m;
414
+ return (m = o.review.reviewer) == null ? void 0 : m.name;
415
+ }), c = f(() => {
416
+ var m;
417
+ return (m = o.review.reviewer) == null ? void 0 : m.pictureUrl;
418
+ }), i = x(), w = f(() => o.review.restaurantName), p = f(() => {
419
+ if (o.review.source === "google" || o.review.source === "feedme")
420
+ return o.review.reply;
421
+ }), A = f(() => {
422
+ switch (o.review.source) {
423
+ case "google":
424
+ return "Google";
425
+ case "facebook":
426
+ return "Facebook";
427
+ case "feedme":
428
+ return "FeedMe";
429
+ case "feedvibe":
430
+ return "Feedvibe";
431
+ }
432
+ }), F = f(
433
+ () => o.review.source === "feedme" ? o.review.billId : o.review.externalId || ""
434
+ );
435
+ function I() {
436
+ o.originalLink && window.open(o.originalLink, "_blank", "noopener,noreferrer");
437
+ }
438
+ const S = x(!1);
439
+ return (m, g) => (s(), d(V, null, [
440
+ l("div", {
441
+ class: "relative cursor-pointer rounded-xl border border-fm-color-neutral-gray-200 bg-white p-16 transition-colors hover:border-fm-color-neutral-gray-300",
442
+ onClick: g[2] || (g[2] = (y) => S.value = !0)
443
+ }, [
444
+ l("div", mt, [
445
+ t.originalLink ? (s(), R(e(a), {
446
+ key: 0,
447
+ variant: "secondary",
448
+ size: "md",
449
+ "prepend-icon": "open_in_new",
450
+ label: e(r)("connect.review.overview.originalLink"),
451
+ onClick: W(I, ["stop"])
452
+ }, null, 8, ["label"])) : C("", !0),
453
+ t.onReply ? (s(), R(e(a), {
454
+ key: 1,
455
+ variant: "primary",
456
+ size: "md",
457
+ "prepend-icon": "reply",
458
+ label: e(r)("connect.review.overview.reply"),
459
+ onClick: g[0] || (g[0] = W((y) => t.onReply(t.review), ["stop"]))
460
+ }, null, 8, ["label"])) : C("", !0)
461
+ ]),
462
+ l("div", vt, [
463
+ v(ve, {
464
+ name: n.value,
465
+ "picture-url": c.value,
466
+ "is-google": t.review.source === "google",
467
+ onLoaded: g[1] || (g[1] = (y) => i.value = y)
468
+ }, null, 8, ["name", "picture-url", "is-google"]),
469
+ l("div", gt, [
470
+ l("div", ft, [
471
+ l("div", wt, [
472
+ l("span", pt, u(n.value || e(r)("connect.review.overview.anonymous")), 1),
473
+ $(m.$slots, "rating"),
474
+ l("span", yt, u(e(L)(t.review.updateTime ?? t.review.createTime).format(
475
+ "D MMM YYYY, hh:mm A"
476
+ )), 1)
477
+ ]),
478
+ t.review.deletedAt ? (s(), d("span", ht, [
479
+ v(e(M).FmTooltip, {
480
+ content: e(r)("connect.review.overview.deletedInfo"),
481
+ "content-class": "max-w-[min(320px,calc(100vw-32px))] whitespace-normal",
482
+ placement: "left"
483
+ }, {
484
+ default: U(() => [
485
+ v(e(M).FmIcon, {
486
+ name: "info",
487
+ outline: "",
488
+ size: "sm"
489
+ })
490
+ ]),
491
+ _: 1
492
+ }, 8, ["content"]),
493
+ Z(" " + u(e(r)("connect.review.overview.deleted")), 1)
494
+ ])) : C("", !0)
495
+ ]),
496
+ l("div", bt, [
497
+ l("span", xt, [
498
+ l("img", {
499
+ src: t.logo,
500
+ alt: t.logoAlt || A.value,
501
+ class: "h-16 w-16"
502
+ }, null, 8, kt),
503
+ l("span", Ct, u(A.value), 1)
504
+ ]),
505
+ g[4] || (g[4] = l("span", { class: "text-fm-color-neutral-gray-400" }, "·", -1)),
506
+ w.value ? (s(), d("span", At, u(w.value), 1)) : C("", !0)
507
+ ]),
508
+ $(m.$slots, "details"),
509
+ $(m.$slots, "comment", {}, () => [
510
+ l("p", {
511
+ class: P(["mt-8 line-clamp-3 fm-typo-en-body-md-400", {
512
+ "italic text-fm-color-neutral-gray-400": !t.review.comment
513
+ }])
514
+ }, u(t.review.comment || e(r)("connect.review.overview.noComment")), 3)
515
+ ]),
516
+ p.value ? (s(), d("div", It, [
517
+ l("div", Dt, [
518
+ l("span", null, u(e(r)("connect.review.overview.reply")), 1),
519
+ l("span", Mt, u(e(L)(p.value.updateTime).format("D MMM YYYY, hh:mm A")), 1)
520
+ ]),
521
+ l("p", Ft, u(p.value.comment), 1)
522
+ ])) : C("", !0),
523
+ m.$slots.media ? (s(), d("div", St, [
524
+ $(m.$slots, "media")
525
+ ])) : C("", !0)
526
+ ])
527
+ ])
528
+ ]),
529
+ v(ct, {
530
+ modelValue: S.value,
531
+ "onUpdate:modelValue": g[3] || (g[3] = (y) => S.value = y),
532
+ review: t.review,
533
+ "reference-id": F.value,
534
+ location: w.value,
535
+ "platform-name": A.value,
536
+ "reviewer-picture-url": i.value
537
+ }, null, 8, ["modelValue", "review", "reference-id", "location", "platform-name", "reviewer-picture-url"])
538
+ ], 64));
539
+ }
540
+ }), Bt = {
541
+ key: 0,
542
+ class: "flex items-center gap-4"
543
+ }, Et = /* @__PURE__ */ Y({
544
+ __name: "FacebookReviewCard",
545
+ props: {
546
+ review: {}
547
+ },
548
+ setup(t) {
549
+ const { t: a } = q();
550
+ return (r, o) => (s(), R(ne, {
551
+ review: t.review,
552
+ logo: e(De)
553
+ }, {
554
+ rating: U(() => [
555
+ t.review.isPositive != null ? (s(), d("div", Bt, [
556
+ v(e(M).FmIcon, {
557
+ name: t.review.isPositive ? "thumb_up" : "thumb_down",
558
+ size: "sm",
559
+ class: P(
560
+ t.review.isPositive ? "text-fm-color-typo-success" : "text-fm-color-system-error-500"
561
+ )
562
+ }, null, 8, ["name", "class"]),
563
+ l("span", {
564
+ class: P([
565
+ "fm-typo-en-body-sm-400",
566
+ t.review.isPositive ? "text-fm-color-typo-success" : "text-fm-color-system-error-500"
567
+ ])
568
+ }, u(t.review.isPositive ? e(a)("connect.review.overview.positive") : e(a)("connect.review.overview.negative")), 3)
569
+ ])) : C("", !0)
570
+ ]),
571
+ _: 1
572
+ }, 8, ["review", "logo"]));
573
+ }
574
+ }), Rt = "data:image/svg+xml,%3csvg%20width='388'%20height='388'%20viewBox='0%200%20388%20388'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M239.449%200H148.553C66.5106%200%200.00195312%2066.5086%200.00195312%20148.551V239.447C0.00195312%20321.489%2066.5106%20387.998%20148.553%20387.998H239.449C321.491%20387.998%20388%20321.489%20388%20239.447V148.551C388%2066.5086%20321.491%200%20239.449%200Z'%20fill='url(%23paint0_linear_feedme_logo)'%20/%3e%3cmask%20id='mask0_feedme_logo'%20style='mask-type:luminance'%20maskUnits='userSpaceOnUse'%20x='0'%20y='0'%20width='388'%20height='388'%3e%3cpath%20d='M239.447%200H148.551C66.5086%200%200%2066.5086%200%20148.551V239.447C0%20321.489%2066.5086%20387.998%20148.551%20387.998H239.447C321.49%20387.998%20387.998%20321.489%20387.998%20239.447V148.551C387.998%2066.5086%20321.49%200%20239.447%200Z'%20fill='white'%20/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_feedme_logo)'%3e%3cpath%20d='M82.587%20258.589V258.76C83.2747%20264.893%2084.1917%20271.598%2085.3953%20278.648L101.271%20392.296H127.462V253.946C127.462%20241.395%20137.033%20231.194%20148.839%20231.194H150.329C162.135%20231.194%20171.706%20241.395%20171.706%20253.946V392.296H216.352V253.946C216.352%20241.395%20225.923%20231.194%20237.729%20231.194H239.219C251.025%20231.194%20260.596%20241.395%20260.596%20253.946V392.296H286.959L302.835%20277.788C303.981%20271.025%20304.841%20264.549%20305.471%20258.589V258.187C307.649%20238.759%20307.649%20225.061%20307.649%20225.061C307.649%20182.938%20290.054%20148.264%20252.286%20119.78C241.97%20112.043%20233.029%20100.466%20232.17%2075.7079C232.17%2075.7079%20229.705%2012.9519%20253.719%20-33.7568H134.339C158.353%2012.9519%20155.888%2075.7079%20155.888%2075.7079C155.029%20100.409%20146.088%20111.986%20135.772%20119.78C97.9465%20148.321%2080.4092%20182.938%2080.4092%20225.061C80.4092%20225.061%2080.4092%20238.873%2082.587%20258.474V258.589Z'%20fill='white'%20/%3e%3c/g%3e%3cdefs%3e%3clinearGradient%20id='paint0_linear_feedme_logo'%20x1='43.5013'%20y1='344.556'%20x2='344.501'%20y2='43.5567'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20stop-color='%23FF5D53'%20/%3e%3cstop%20offset='1'%20stop-color='%23FCA23E'%20/%3e%3c/linearGradient%3e%3c/defs%3e%3c/svg%3e", Ut = {
575
+ key: 0,
576
+ class: "flex flex-wrap gap-8"
577
+ }, Vt = ["onClick"], Yt = ["src", "alt"], Ot = {
578
+ key: 0,
579
+ class: "absolute inset-0 flex items-center justify-center bg-black/30"
580
+ }, Qt = ["src"], Gt = ["src", "alt"], ae = /* @__PURE__ */ Y({
581
+ __name: "ReviewCardMedia",
582
+ props: {
583
+ mediaItems: {}
584
+ },
585
+ setup(t) {
586
+ const a = x(null);
587
+ return (r, o) => t.mediaItems && t.mediaItems.length > 0 ? (s(), d("div", Ut, [
588
+ (s(!0), d(V, null, Q(t.mediaItems, (n, c) => (s(), d("div", {
589
+ key: c,
590
+ class: "relative w-72 h-72 rounded-lg overflow-hidden border border-fm-color-neutral-gray-200 shrink-0 cursor-pointer hover:opacity-90",
591
+ onClick: W((i) => a.value = n, ["stop"])
592
+ }, [
593
+ l("img", {
594
+ src: n.thumbnailUrl,
595
+ alt: n.thumbnailLabel,
596
+ class: "w-full h-full object-cover"
597
+ }, null, 8, Yt),
598
+ n.videoUrl ? (s(), d("div", Ot, [
599
+ v(e(M).FmIcon, {
600
+ name: "play_arrow",
601
+ class: "text-white"
602
+ })
603
+ ])) : C("", !0)
604
+ ], 8, Vt))), 128)),
605
+ (s(), R(ge, { to: "body" }, [
606
+ a.value ? (s(), d("div", {
607
+ key: 0,
608
+ class: "fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm",
609
+ onClick: o[2] || (o[2] = (n) => a.value = null)
610
+ }, [
611
+ l("button", {
612
+ class: "absolute top-16 right-16 z-50 p-8 text-white hover:text-fm-color-neutral-gray-300 transition-colors",
613
+ onClick: o[0] || (o[0] = (n) => a.value = null)
614
+ }, [
615
+ v(e(M).FmIcon, {
616
+ name: "close",
617
+ size: "lg"
618
+ })
619
+ ]),
620
+ l("div", {
621
+ class: "relative max-w-[90vw] max-h-[90vh] flex items-center justify-center",
622
+ onClick: o[1] || (o[1] = W(() => {
623
+ }, ["stop"]))
624
+ }, [
625
+ a.value.videoUrl ? (s(), d("video", {
626
+ key: 0,
627
+ src: a.value.videoUrl,
628
+ controls: "",
629
+ autoplay: "",
630
+ class: "max-w-full max-h-[90vh] rounded-lg shadow-lg"
631
+ }, null, 8, Qt)) : (s(), d("img", {
632
+ key: 1,
633
+ src: a.value.thumbnailUrl,
634
+ alt: a.value.thumbnailLabel,
635
+ class: "max-w-full max-h-[90vh] rounded-lg shadow-lg object-contain"
636
+ }, null, 8, Gt))
637
+ ])
638
+ ])) : C("", !0)
639
+ ]))
640
+ ])) : C("", !0);
641
+ }
642
+ }), Pt = { class: "flex items-center gap-4" }, Tt = /* @__PURE__ */ Y({
643
+ __name: "FeedmeReviewCard",
644
+ props: {
645
+ review: {}
646
+ },
647
+ setup(t) {
648
+ const a = t, r = f(() => {
649
+ var c, i;
650
+ const n = (i = (c = a.review.reviewer) == null ? void 0 : c.phoneNumber) == null ? void 0 : i.replace(/\D/g, "");
651
+ return n ? `https://wa.me/${n}` : void 0;
652
+ });
653
+ function o() {
654
+ r.value && window.open(r.value, "_blank", "noopener,noreferrer");
655
+ }
656
+ return (n, c) => (s(), R(ne, {
657
+ review: t.review,
658
+ logo: e(Rt),
659
+ "logo-alt": "FeedMe",
660
+ "on-reply": r.value ? o : void 0
661
+ }, {
662
+ rating: U(() => [
663
+ l("div", Pt, [
664
+ (s(), d(V, null, Q(5, (i) => v(e(M).FmIcon, {
665
+ key: i,
666
+ name: "star",
667
+ size: "sm",
668
+ class: P(
669
+ i <= t.review.starRating ? "text-yellow-400" : "text-fm-color-neutral-gray-200"
670
+ )
671
+ }, null, 8, ["class"])), 64))
672
+ ])
673
+ ]),
674
+ media: U(() => [
675
+ v(ae, {
676
+ "media-items": t.review.mediaItems
677
+ }, null, 8, ["media-items"])
678
+ ]),
679
+ _: 1
680
+ }, 8, ["review", "logo", "on-reply"]));
681
+ }
682
+ }), zt = "data:image/png;base64,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", Lt = { class: "flex items-center gap-4" }, Nt = { class: "flex flex-wrap items-center gap-x-8 gap-y-4 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-500" }, qt = { class: "font-semibold text-fm-color-neutral-gray-400" }, Ht = { class: "font-semibold text-fm-color-neutral-gray-400" }, jt = { class: "font-semibold text-fm-color-neutral-gray-400" }, Jt = /* @__PURE__ */ Y({
683
+ __name: "FeedvibeReviewCard",
684
+ props: {
685
+ review: {}
686
+ },
687
+ setup(t) {
688
+ const { t: a } = q();
689
+ return (r, o) => (s(), R(ne, {
690
+ review: t.review,
691
+ logo: e(zt),
692
+ "logo-alt": "Feedvibe",
693
+ gap: "12"
694
+ }, {
695
+ rating: U(() => [
696
+ l("div", Lt, [
697
+ (s(), d(V, null, Q(5, (n) => v(e(M).FmIcon, {
698
+ key: n,
699
+ name: "star",
700
+ size: "sm",
701
+ class: P(
702
+ n <= Math.round(t.review.rating.overall) ? "text-yellow-400" : "text-fm-color-neutral-gray-200"
703
+ )
704
+ }, null, 8, ["class"])), 64))
705
+ ])
706
+ ]),
707
+ details: U(() => [
708
+ l("div", Nt, [
709
+ l("span", null, [
710
+ Z(u(e(a)("connect.review.overview.food")) + ": ", 1),
711
+ l("strong", qt, u(t.review.rating.food) + "/5 ", 1)
712
+ ]),
713
+ o[0] || (o[0] = l("span", { "aria-hidden": "true" }, "|", -1)),
714
+ l("span", null, [
715
+ Z(u(e(a)("connect.review.overview.service")) + ": ", 1),
716
+ l("strong", Ht, u(t.review.rating.service) + "/5 ", 1)
717
+ ]),
718
+ o[1] || (o[1] = l("span", { "aria-hidden": "true" }, "|", -1)),
719
+ l("span", null, [
720
+ Z(u(e(a)("connect.review.overview.atmosphere")) + ": ", 1),
721
+ l("strong", jt, u(t.review.rating.atmosphere) + "/5 ", 1)
722
+ ])
723
+ ])
724
+ ]),
725
+ media: U(() => [
726
+ v(ae, {
727
+ "media-items": t.review.mediaItems
728
+ }, null, 8, ["media-items"])
729
+ ]),
730
+ _: 1
731
+ }, 8, ["review", "logo"]));
732
+ }
733
+ }), Kt = { class: "flex flex-col gap-16" }, _t = { class: "rounded-lg bg-fm-color-neutral-gray-100 px-16 py-12" }, Zt = { class: "flex items-start gap-12" }, Wt = { class: "min-w-0 flex-1" }, Xt = { class: "mb-4 flex flex-wrap items-center gap-x-8 gap-y-4" }, $t = { class: "fm-typo-en-body-sm-600 text-fm-color-neutral-gray-400" }, el = { class: "flex items-center gap-2" }, tl = { class: "fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400" }, ll = {
734
+ key: 0,
735
+ class: "mt-8"
736
+ }, ol = {
737
+ key: 0,
738
+ class: "m-0 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400"
739
+ }, nl = { class: "flex w-full justify-end gap-8" }, al = /* @__PURE__ */ Y({
740
+ __name: "GoogleReplyDialog",
741
+ props: {
742
+ modelValue: { type: Boolean },
743
+ review: {}
744
+ },
745
+ emits: ["update:modelValue", "replied"],
746
+ setup(t, { emit: a }) {
747
+ const { FmButton: r, FmDialog: o, FmIcon: n, FmTextarea: c } = M, i = t, w = a, { t: p } = q(), A = be(), F = x(""), I = x(!1);
748
+ j(
749
+ () => i.modelValue,
750
+ (b) => {
751
+ var h;
752
+ b && (F.value = ((h = i.review.reply) == null ? void 0 : h.comment) ?? "");
753
+ }
754
+ );
755
+ const S = f(() => {
756
+ var b;
757
+ return !!((b = i.review.reply) != null && b.comment);
758
+ }), m = f(
759
+ () => I.value || !F.value.trim()
760
+ ), g = f(
761
+ () => {
762
+ var b;
763
+ return ((b = i.review.reviewer) == null ? void 0 : b.name) || p("connect.review.overview.anonymous");
764
+ }
765
+ );
766
+ async function y() {
767
+ if (!m.value) {
768
+ I.value = !0;
769
+ try {
770
+ const b = await le.replyToGoogleReview(
771
+ i.review._id,
772
+ F.value.trim()
773
+ );
774
+ i.review.reply = b, A.open({
775
+ type: "success",
776
+ message: p("connect.review.overview.replyDialog.success")
777
+ }), w("update:modelValue", !1), w("replied");
778
+ } catch {
779
+ A.open({
780
+ type: "error",
781
+ message: p("connect.review.overview.replyDialog.failed")
782
+ });
783
+ } finally {
784
+ I.value = !1;
785
+ }
786
+ }
787
+ }
788
+ function G() {
789
+ I.value || w("update:modelValue", !1);
790
+ }
791
+ return (b, h) => (s(), R(e(o), {
792
+ "model-value": t.modelValue,
793
+ "max-width": "560px",
794
+ "onUpdate:modelValue": h[1] || (h[1] = (B) => w("update:modelValue", B))
795
+ }, {
796
+ "dialog-header": U(() => [
797
+ Z(u(e(p)("connect.review.overview.replyDialog.title")), 1)
798
+ ]),
799
+ "dialog-footer": U(() => [
800
+ l("div", nl, [
801
+ v(e(r), {
802
+ variant: "tertiary",
803
+ label: e(p)("connect.common.cancel"),
804
+ disabled: I.value,
805
+ onClick: G
806
+ }, null, 8, ["label", "disabled"]),
807
+ v(e(r), {
808
+ variant: "primary",
809
+ label: S.value ? e(p)("connect.common.save") : e(p)("connect.review.overview.replyDialog.postReply"),
810
+ loading: I.value,
811
+ disabled: m.value,
812
+ onClick: y
813
+ }, null, 8, ["label", "loading", "disabled"])
814
+ ])
815
+ ]),
816
+ default: U(() => {
817
+ var B, O, J, D;
818
+ return [
819
+ l("div", Kt, [
820
+ l("div", _t, [
821
+ l("div", Zt, [
822
+ v(ve, {
823
+ name: (B = t.review.reviewer) == null ? void 0 : B.name,
824
+ "picture-url": (O = t.review.reviewer) == null ? void 0 : O.pictureUrl,
825
+ "is-google": t.review.source === "google"
826
+ }, null, 8, ["name", "picture-url", "is-google"]),
827
+ l("div", Wt, [
828
+ l("div", Xt, [
829
+ l("span", $t, u(g.value), 1),
830
+ l("div", el, [
831
+ (s(), d(V, null, Q(5, (k) => v(e(n), {
832
+ key: k,
833
+ name: "star",
834
+ size: "sm",
835
+ class: P(
836
+ k <= t.review.starRating ? "text-yellow-400" : "text-fm-color-neutral-gray-200"
837
+ )
838
+ }, null, 8, ["class"])), 64))
839
+ ]),
840
+ l("span", tl, u(e(L)(t.review.updateTime ?? t.review.createTime).format(
841
+ "D MMM YYYY"
842
+ )), 1)
843
+ ]),
844
+ l("p", {
845
+ class: P(["m-0 line-clamp-3 fm-typo-en-body-sm-400", {
846
+ "italic text-fm-color-neutral-gray-400": !t.review.comment
847
+ }])
848
+ }, u(t.review.comment || e(p)("connect.review.overview.noComment")), 3),
849
+ (J = t.review.mediaItems) != null && J.length ? (s(), d("div", ll, [
850
+ v(ae, {
851
+ "media-items": t.review.mediaItems
852
+ }, null, 8, ["media-items"])
853
+ ])) : C("", !0)
854
+ ])
855
+ ])
856
+ ]),
857
+ v(e(c), {
858
+ modelValue: F.value,
859
+ "onUpdate:modelValue": h[0] || (h[0] = (k) => F.value = k),
860
+ label: e(p)("connect.review.overview.replyDialog.yourReply"),
861
+ placeholder: e(p)("connect.review.overview.replyDialog.placeholder"),
862
+ "max-length": 4096,
863
+ "show-word-count": "",
864
+ autofocus: ""
865
+ }, null, 8, ["modelValue", "label", "placeholder"]),
866
+ S.value && ((D = t.review.reply) != null && D.updateTime) ? (s(), d("p", ol, u(e(p)("connect.review.overview.replyDialog.lastUpdated", {
867
+ time: e(L)(t.review.reply.updateTime).format("D MMM YYYY, hh:mm A")
868
+ })), 1)) : C("", !0)
869
+ ])
870
+ ];
871
+ }),
872
+ _: 1
873
+ }, 8, ["model-value"]));
874
+ }
875
+ }), sl = { class: "flex items-center gap-4" }, rl = { class: "mt-8" }, il = { class: "line-clamp-3 fm-typo-en-body-md-400" }, cl = {
876
+ key: 0,
877
+ class: "mt-4 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400"
878
+ }, ul = /* @__PURE__ */ Y({
879
+ __name: "GoogleReviewCard",
880
+ props: {
881
+ review: {}
882
+ },
883
+ setup(t) {
884
+ const { t: a } = q(), r = x(!1), o = x(!1);
885
+ function n() {
886
+ o.value = !0;
887
+ }
888
+ return (c, i) => (s(), d(V, null, [
889
+ v(ne, {
890
+ review: t.review,
891
+ logo: e(xe),
892
+ "original-link": t.review.originalUrl,
893
+ "on-reply": n
894
+ }, fe({
895
+ rating: U(() => [
896
+ l("div", sl, [
897
+ (s(), d(V, null, Q(5, (w) => v(e(M).FmIcon, {
898
+ key: w,
899
+ name: "star",
900
+ size: "sm",
901
+ class: P(
902
+ w <= t.review.starRating ? "text-yellow-400" : "text-fm-color-neutral-gray-200"
903
+ )
904
+ }, null, 8, ["class"])), 64))
905
+ ])
906
+ ]),
907
+ media: U(() => [
908
+ v(ae, {
909
+ "media-items": t.review.mediaItems
910
+ }, null, 8, ["media-items"])
911
+ ]),
912
+ _: 2
913
+ }, [
914
+ t.review.translatedComment ? {
915
+ name: "comment",
916
+ fn: U(() => [
917
+ l("div", rl, [
918
+ l("p", il, u(r.value ? t.review.comment : t.review.translatedComment), 1),
919
+ r.value ? C("", !0) : (s(), d("p", cl, u(e(a)("connect.review.overview.translatedByGoogle")), 1)),
920
+ l("button", {
921
+ type: "button",
922
+ class: "mt-4 border-0 bg-transparent p-0 fm-typo-en-body-sm-600 text-blue-500 hover:underline",
923
+ onClick: i[0] || (i[0] = W((w) => r.value = !r.value, ["stop"]))
924
+ }, u(r.value ? e(a)("connect.review.overview.seeTranslation") : e(a)("connect.review.overview.seeOriginal")), 1)
925
+ ])
926
+ ]),
927
+ key: "0"
928
+ } : void 0
929
+ ]), 1032, ["review", "logo", "original-link"]),
930
+ v(al, {
931
+ modelValue: o.value,
932
+ "onUpdate:modelValue": i[1] || (i[1] = (w) => o.value = w),
933
+ review: t.review
934
+ }, null, 8, ["modelValue", "review"])
935
+ ], 64));
936
+ }
937
+ }), dl = /* @__PURE__ */ Y({
938
+ __name: "ReviewCard",
939
+ props: {
940
+ review: {}
941
+ },
942
+ setup(t) {
943
+ const a = t, r = f(
944
+ () => a.review.source === "google" ? a.review : null
945
+ ), o = f(
946
+ () => a.review.source === "facebook" ? a.review : null
947
+ ), n = f(
948
+ () => a.review.source === "feedme" ? a.review : null
949
+ ), c = f(
950
+ () => a.review.source === "feedvibe" ? a.review : null
951
+ );
952
+ return (i, w) => r.value ? (s(), R(ul, {
953
+ key: 0,
954
+ review: r.value
955
+ }, null, 8, ["review"])) : o.value ? (s(), R(Et, {
956
+ key: 1,
957
+ review: o.value
958
+ }, null, 8, ["review"])) : n.value ? (s(), R(Tt, {
959
+ key: 2,
960
+ review: n.value
961
+ }, null, 8, ["review"])) : c.value ? (s(), R(Jt, {
962
+ key: 3,
963
+ review: c.value
964
+ }, null, 8, ["review"])) : C("", !0);
965
+ }
966
+ }), ml = {
967
+ key: 0,
968
+ class: "flex justify-center py-32"
969
+ }, vl = {
970
+ key: 1,
971
+ class: "flex flex-col items-center justify-center py-48 gap-8"
972
+ }, gl = { class: "fm-typo-en-body-md-400 text-fm-color-neutral-gray-400" }, fl = ["data-sentinel"], wl = { class: "flex flex-col gap-12" }, pl = {
973
+ key: 3,
974
+ class: "flex justify-center py-16"
975
+ }, ee = 100, se = 20, me = 220, yl = /* @__PURE__ */ Y({
976
+ __name: "ReviewFeed",
977
+ props: {
978
+ reviews: {},
979
+ loading: { type: Boolean },
980
+ hasMore: { type: Boolean }
981
+ },
982
+ emits: ["loadMore"],
983
+ setup(t, { emit: a }) {
984
+ const { t: r } = q(), o = t, n = a, c = x(0), i = f(
985
+ () => Math.min(c.value + ee, o.reviews.length)
986
+ ), w = f(
987
+ () => o.reviews.slice(c.value, i.value)
988
+ ), p = f(() => {
989
+ const D = w.value, k = [];
990
+ for (let E = 0; E < D.length; E += se)
991
+ k.push({
992
+ start: c.value + E,
993
+ items: D.slice(E, E + se)
994
+ });
995
+ return k;
996
+ }), A = f(
997
+ () => c.value * me
998
+ ), F = f(
999
+ () => (o.reviews.length - i.value) * me
1000
+ );
1001
+ j(
1002
+ () => o.reviews.length,
1003
+ (D, k) => {
1004
+ if (D < k) {
1005
+ c.value = 0;
1006
+ return;
1007
+ }
1008
+ c.value + ee >= k && (c.value = Math.max(0, D - ee));
1009
+ }
1010
+ );
1011
+ const I = x(null), S = x(null), m = x(null), g = x(null), y = x(!1);
1012
+ async function G(D, k) {
1013
+ var N;
1014
+ const E = Math.max(0, o.reviews.length - ee), T = Math.min(Math.max(D - se, 0), E);
1015
+ if (T === c.value || y.value) return;
1016
+ y.value = !0;
1017
+ const K = k == null ? void 0 : k.getBoundingClientRect().top;
1018
+ if (c.value = T, await pe(), k && K !== void 0) {
1019
+ const X = (N = I.value) == null ? void 0 : N.querySelector(`[data-sentinel="${D}"]`);
1020
+ X && window.scrollBy(0, X.getBoundingClientRect().top - K);
1021
+ }
1022
+ y.value = !1;
1023
+ }
1024
+ function b() {
1025
+ const D = window.innerHeight, k = [
1026
+ { el: S.value, base: 0, span: c.value },
1027
+ {
1028
+ el: m.value,
1029
+ base: i.value,
1030
+ span: o.reviews.length - i.value
1031
+ }
1032
+ ];
1033
+ for (const { el: E, base: T, span: K } of k) {
1034
+ if (!E || K <= 0) continue;
1035
+ const N = E.getBoundingClientRect();
1036
+ if (N.top <= 0 && N.bottom >= D && N.height > 0) {
1037
+ const X = (D / 2 - N.top) / N.height;
1038
+ G(Math.floor(T + X * K));
1039
+ return;
1040
+ }
1041
+ }
1042
+ }
1043
+ let h = !1;
1044
+ function B() {
1045
+ h || (h = !0, requestAnimationFrame(() => {
1046
+ h = !1, b();
1047
+ }));
1048
+ }
1049
+ let O = null;
1050
+ function J() {
1051
+ var D;
1052
+ O == null || O.disconnect(), (D = I.value) == null || D.querySelectorAll("[data-sentinel]").forEach((k) => O == null ? void 0 : O.observe(k));
1053
+ }
1054
+ return oe(() => {
1055
+ O = new IntersectionObserver((k) => {
1056
+ for (const E of k)
1057
+ if (E.isIntersecting) {
1058
+ const T = Number(E.target.dataset.sentinel);
1059
+ G(T, E.target);
1060
+ }
1061
+ }), J(), j([c, () => o.reviews.length], J, {
1062
+ flush: "post"
1063
+ });
1064
+ const D = new IntersectionObserver(
1065
+ (k) => {
1066
+ k[0].isIntersecting && o.hasMore && !o.loading && n("loadMore");
1067
+ },
1068
+ { threshold: 0.5 }
1069
+ );
1070
+ g.value && D.observe(g.value), window.addEventListener("scroll", B, { passive: !0 }), we(() => {
1071
+ O == null || O.disconnect(), D.disconnect(), window.removeEventListener("scroll", B);
1072
+ });
1073
+ }), (D, k) => (s(), d(V, null, [
1074
+ t.loading && t.reviews.length === 0 ? (s(), d("div", ml, [
1075
+ v(e(M).FmIcon, {
1076
+ name: "sync",
1077
+ size: "xl",
1078
+ class: "animate-spin text-fm-color-neutral-gray-400"
1079
+ })
1080
+ ])) : t.reviews.length === 0 ? (s(), d("div", vl, [
1081
+ v(e(M).FmIcon, {
1082
+ name: "rate_review",
1083
+ size: "xl",
1084
+ class: "text-fm-color-neutral-gray-300"
1085
+ }),
1086
+ l("p", gl, u(e(r)("connect.review.overview.empty")), 1)
1087
+ ])) : (s(), d("div", {
1088
+ key: 2,
1089
+ ref_key: "listEl",
1090
+ ref: I
1091
+ }, [
1092
+ e(c) > 0 ? (s(), d("div", {
1093
+ key: 0,
1094
+ ref_key: "topSpacerEl",
1095
+ ref: S,
1096
+ style: te({ height: `${e(A)}px` })
1097
+ }, null, 4)) : C("", !0),
1098
+ (s(!0), d(V, null, Q(e(p), (E) => (s(), d(V, {
1099
+ key: E.start
1100
+ }, [
1101
+ l("div", {
1102
+ "data-sentinel": E.start,
1103
+ class: "h-1"
1104
+ }, null, 8, fl),
1105
+ l("div", wl, [
1106
+ (s(!0), d(V, null, Q(E.items, (T) => (s(), R(dl, {
1107
+ key: T._id,
1108
+ review: T
1109
+ }, null, 8, ["review"]))), 128))
1110
+ ])
1111
+ ], 64))), 128)),
1112
+ e(F) > 0 ? (s(), d("div", {
1113
+ key: 1,
1114
+ ref_key: "bottomSpacerEl",
1115
+ ref: m,
1116
+ style: te({ height: `${e(F)}px` })
1117
+ }, null, 4)) : C("", !0)
1118
+ ], 512)),
1119
+ l("div", {
1120
+ ref_key: "sentinel",
1121
+ ref: g,
1122
+ class: "h-1"
1123
+ }, null, 512),
1124
+ t.loading && t.reviews.length > 0 ? (s(), d("div", pl, [
1125
+ v(e(M).FmIcon, {
1126
+ name: "sync",
1127
+ size: "md",
1128
+ class: "animate-spin text-fm-color-neutral-gray-400"
1129
+ })
1130
+ ])) : C("", !0)
1131
+ ], 64));
1132
+ }
1133
+ }), hl = { class: "w-1/2 rounded-lg border border-fm-color-neutral-gray-200 bg-white p-5" }, bl = { class: "fm-typo-en-title-md-600 text-fm-color-typo-primary" }, xl = { class: "mt-16 grid grid-cols-[minmax(0,1fr)_minmax(140px,0.5fr)] gap-5" }, kl = { class: "mt-12 flex flex-col gap-8" }, Cl = { class: "w-16 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-500" }, Al = { class: "h-8 flex-1 overflow-hidden rounded-full bg-fm-color-neutral-gray-100" }, Il = { class: "w-24 text-right fm-typo-en-body-sm-400 text-fm-color-neutral-gray-500" }, Dl = { class: "mt-8 flex flex-col items-center" }, Ml = { class: "fm-typo-en-display-lg-800 text-fm-color-typo-primary" }, Fl = {
1134
+ class: "mt-8 flex items-center gap-1",
1135
+ "aria-label": "Average rating"
1136
+ }, Sl = { class: "mt-4 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400" }, Bl = /* @__PURE__ */ Y({
1137
+ __name: "ReviewSummary",
1138
+ setup(t) {
1139
+ const a = x({
1140
+ averageScore: 0,
1141
+ total: 0,
1142
+ starCounts: [5, 4, 3, 2, 1].map((n) => ({ star: n, count: 0 }))
1143
+ }), r = f(() => a.value.averageScore.toFixed(1));
1144
+ function o(n) {
1145
+ return `${Math.min(Math.max(a.value.averageScore - n + 1, 0), 1) * 100}%`;
1146
+ }
1147
+ return oe(async () => {
1148
+ a.value = await le.getReviewSummary();
1149
+ }), (n, c) => (s(), d("div", hl, [
1150
+ l("h2", bl, u(n.$t("connect.review.overview.summary")), 1),
1151
+ l("div", xl, [
1152
+ l("div", kl, [
1153
+ (s(!0), d(V, null, Q(e(a).starCounts, (i) => (s(), d("div", {
1154
+ key: i.star,
1155
+ class: "flex items-center gap-8"
1156
+ }, [
1157
+ l("span", Cl, u(i.star), 1),
1158
+ v(e(M).FmIcon, {
1159
+ name: "star",
1160
+ size: "sm",
1161
+ class: "text-amber-400"
1162
+ }),
1163
+ l("div", Al, [
1164
+ l("div", {
1165
+ class: "h-full rounded-full bg-amber-400 transition-[width]",
1166
+ style: te({
1167
+ width: `${e(a).total ? i.count / e(a).total * 100 : 0}%`
1168
+ })
1169
+ }, null, 4)
1170
+ ]),
1171
+ l("span", Il, u(i.count), 1)
1172
+ ]))), 128))
1173
+ ]),
1174
+ l("div", Dl, [
1175
+ l("span", Ml, u(e(r)), 1),
1176
+ l("div", Fl, [
1177
+ (s(), d(V, null, Q(5, (i) => l("span", {
1178
+ key: i,
1179
+ class: "relative"
1180
+ }, [
1181
+ v(e(M).FmIcon, {
1182
+ name: "star",
1183
+ size: "md",
1184
+ class: "text-fm-color-neutral-gray-200"
1185
+ }),
1186
+ l("span", {
1187
+ class: "absolute inset-y-0 left-0 overflow-hidden",
1188
+ style: te({ width: o(i) })
1189
+ }, [
1190
+ v(e(M).FmIcon, {
1191
+ name: "star",
1192
+ size: "md",
1193
+ class: "text-amber-400"
1194
+ })
1195
+ ], 4)
1196
+ ])), 64))
1197
+ ]),
1198
+ l("span", Sl, " (" + u(e(a).total) + ") ", 1)
1199
+ ])
1200
+ ])
1201
+ ]));
1202
+ }
1203
+ }), El = { class: "p-24 flex flex-col gap-12" }, re = 20, zl = /* @__PURE__ */ Y({
1204
+ __name: "Overview",
1205
+ setup(t) {
1206
+ const a = x([]), r = x(!1), o = x(!0), n = x(null), c = x(null), i = x(null), w = x(""), p = x("all"), A = x("createTime_desc");
1207
+ j(n, () => {
1208
+ w.value = "";
1209
+ });
1210
+ function F(m) {
1211
+ var g;
1212
+ return {
1213
+ source: ((g = n.value) == null ? void 0 : g.join(",")) || void 0,
1214
+ dateFrom: c.value ? L(c.value).startOf("day").toISOString() : void 0,
1215
+ dateTo: i.value ? L(i.value).endOf("day").toISOString() : void 0,
1216
+ locationId: w.value || void 0,
1217
+ excludeDeleted: p.value === "excludeDeleted" ? !0 : void 0,
1218
+ sort: A.value,
1219
+ limit: re,
1220
+ skip: m
1221
+ };
1222
+ }
1223
+ async function I() {
1224
+ r.value = !0, o.value = !0;
1225
+ try {
1226
+ const m = await le.listReviews(F(0));
1227
+ a.value = m, o.value = m.length === re;
1228
+ } finally {
1229
+ r.value = !1;
1230
+ }
1231
+ }
1232
+ async function S() {
1233
+ if (!(r.value || !o.value)) {
1234
+ r.value = !0;
1235
+ try {
1236
+ const m = await le.listReviews(F(a.value.length));
1237
+ a.value = [...a.value, ...m], o.value = m.length === re;
1238
+ } finally {
1239
+ r.value = !1;
1240
+ }
1241
+ }
1242
+ }
1243
+ return j(
1244
+ [
1245
+ n,
1246
+ c,
1247
+ i,
1248
+ w,
1249
+ p,
1250
+ A
1251
+ ],
1252
+ I
1253
+ ), oe(I), (m, g) => (s(), d("div", El, [
1254
+ v(Bl),
1255
+ v(Ie, {
1256
+ source: e(n),
1257
+ "onUpdate:source": g[0] || (g[0] = (y) => z(n) ? n.value = y : null),
1258
+ "date-from": e(c),
1259
+ "onUpdate:dateFrom": g[1] || (g[1] = (y) => z(c) ? c.value = y : null),
1260
+ "date-to": e(i),
1261
+ "onUpdate:dateTo": g[2] || (g[2] = (y) => z(i) ? i.value = y : null),
1262
+ "location-id": e(w),
1263
+ "onUpdate:locationId": g[3] || (g[3] = (y) => z(w) ? w.value = y : null),
1264
+ "deleted-filter": e(p),
1265
+ "onUpdate:deletedFilter": g[4] || (g[4] = (y) => z(p) ? p.value = y : null),
1266
+ sort: e(A),
1267
+ "onUpdate:sort": g[5] || (g[5] = (y) => z(A) ? A.value = y : null)
1268
+ }, null, 8, ["source", "date-from", "date-to", "location-id", "deleted-filter", "sort"]),
1269
+ v(yl, {
1270
+ reviews: e(a),
1271
+ loading: e(r),
1272
+ "has-more": e(o),
1273
+ onLoadMore: S
1274
+ }, null, 8, ["reviews", "loading", "has-more"])
1275
+ ]));
1276
+ }
1277
+ });
1278
+ export {
1279
+ zl as default
1280
+ };