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

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 (110) hide show
  1. package/dist/{App-B6glKEk7.js → App-vdoxvLFM.js} +8 -8
  2. package/dist/{AuditLogs-Ber2K2Fb.js → AuditLogs-Dd671Ml7.js} +9 -9
  3. package/dist/{Bin-D8kHjDKf.js → Bin-DCSouVzT.js} +8 -8
  4. package/dist/{Broadcast-B94Y4oee.js → Broadcast-DLwey15I.js} +11 -11
  5. package/dist/{CampaignAnalytic-CyKSu99y.js → CampaignAnalytic-BZdvJVIC.js} +5 -5
  6. package/dist/{CampaignTypeDialog.vue_vue_type_script_setup_true_lang-DGxHk6uY.js → CampaignTypeDialog.vue_vue_type_script_setup_true_lang-Btdm4D7p.js} +6 -6
  7. package/dist/{Card-_K73RBSm.js → Card-BdSNr4Tp.js} +18 -18
  8. package/dist/{Collections-M70J7ALM.js → Collections-C7LD07as.js} +8 -8
  9. package/dist/{Credit-OJ-vdBxc.js → Credit-K-PhmWE7.js} +12 -12
  10. package/dist/{EditCampaignSheet.vue_vue_type_script_setup_true_lang-CN_ojxTj.js → EditCampaignSheet.vue_vue_type_script_setup_true_lang-FNHOOVZ_.js} +31 -31
  11. package/dist/{EffectSheet.vue_vue_type_style_index_0_lang-BxjuxD5K.js → EffectSheet.vue_vue_type_style_index_0_lang-BWLcw_KR.js} +6 -6
  12. package/dist/{Experience-CZADIFzP.js → Experience-8Gq0NycZ.js} +12 -12
  13. package/dist/{FileSaver.min-C8PAW7mn.js → FileSaver.min-CnXhZKnQ.js} +1 -1
  14. package/dist/{Game-B7l9QFSa.js → Game-CXhFxtzj.js} +13 -13
  15. package/dist/{Grab-P5Xj34zP.js → Grab-BCSMdfBr.js} +9 -9
  16. package/dist/{ImageInput.vue_vue_type_script_setup_true_lang-CePnr1uQ.js → ImageInput.vue_vue_type_script_setup_true_lang-CAYpf1jU.js} +1 -1
  17. package/dist/{Index-sWceq11a.js → Index-0yJ1TIGO.js} +10 -10
  18. package/dist/{LocationPicker.vue_vue_type_script_setup_true_lang-5R0M7vsi.js → LocationPicker.vue_vue_type_script_setup_true_lang-BodcWHEk.js} +1 -1
  19. package/dist/{LottieAnimation.vue_vue_type_script_setup_true_lang-ZtTaIPA4.js → LottieAnimation.vue_vue_type_script_setup_true_lang-DGh5fUNE.js} +1 -1
  20. package/dist/{LoyaltyDashboard-CEMcKNoR.js → LoyaltyDashboard-DUKvt3sY.js} +7 -7
  21. package/dist/{MainLayout-DUqXwwWw.js → MainLayout-DQyAxKMU.js} +1 -1
  22. package/dist/{Marketing-DNxDfSaT.js → Marketing-C0RikpQ7.js} +4 -4
  23. package/dist/{MarketingMaterialEdit-Dy8Q_lMy.js → MarketingMaterialEdit-Di_11eIh.js} +6 -6
  24. package/dist/{Member-DyCWkDyy.js → Member-Bl-AuJIa.js} +11 -11
  25. package/dist/{MemberList-0njYsriB.js → MemberList-Bu1vZp5s.js} +25 -25
  26. package/dist/{MemberTransactions-mbyuLAoi.js → MemberTransactions-Bp7EPQNo.js} +1 -1
  27. package/dist/{MessageInput.vue_vue_type_script_setup_true_lang-Bz399HMJ.js → MessageInput.vue_vue_type_script_setup_true_lang-DeaT_Xm4.js} +9 -9
  28. package/dist/{Mission-BOQ9qS6P.js → Mission-B3u3Lx_w.js} +13 -13
  29. package/dist/Overview-BXLInkPv.js +1104 -0
  30. package/dist/{Overview-DdlBonwh.js → Overview-Bgzfp_Tl.js} +18 -18
  31. package/dist/{Point-DnykpwZN.js → Point-BoctHcSe.js} +12 -12
  32. package/dist/{Promotion-DQgG0pq2.js → Promotion-msvxUuSW.js} +13 -13
  33. package/dist/{Queue-BuQk_ZzS.js → Queue-BuxPR4lh.js} +10 -10
  34. package/dist/{Record-CeYLUZzh.js → Record-Cs-hiWHr.js} +9 -9
  35. package/dist/{Review-BVgDaqr4.js → Review-BcEj-NeT.js} +2 -2
  36. package/dist/{ReviewFacebookCallback-Cd5plYuS.js → ReviewFacebookCallback-Baq3lYDf.js} +5 -5
  37. package/dist/{ReviewGoogleCallback-1c9fba3u.js → ReviewGoogleCallback-DpiWSyzD.js} +5 -5
  38. package/dist/{Reward-CbxxhNxM.js → Reward-BIhCVUH-.js} +16 -16
  39. package/dist/{RewardGroup.vue_vue_type_script_setup_true_lang-Mm-QwApd.js → RewardGroup.vue_vue_type_script_setup_true_lang-UrbsUOQb.js} +11 -11
  40. package/dist/{RuleGroup.vue_vue_type_script_setup_true_lang-CtX041Mf.js → RuleGroup.vue_vue_type_script_setup_true_lang-D-gNi6X7.js} +14 -14
  41. package/dist/{Segment-Cb404fiv.js → Segment-CJ3dp0Du.js} +24 -24
  42. package/dist/{SelectItems.vue_vue_type_script_setup_true_lang-r2kYyAJg.js → SelectItems.vue_vue_type_script_setup_true_lang-BQ2EMgUP.js} +2 -2
  43. package/dist/{SendCollectionSheet.vue_vue_type_script_setup_true_lang-DlYRIL1g.js → SendCollectionSheet.vue_vue_type_script_setup_true_lang-C1d1lpqt.js} +12 -12
  44. package/dist/{SendVoucherSheet.vue_vue_type_script_setup_true_lang-Bo8REDQ3.js → SendVoucherSheet.vue_vue_type_script_setup_true_lang-DqEVDhK3.js} +4 -4
  45. package/dist/{Setting-BKNaVe3o.js → Setting-DVhYvXVE.js} +14 -14
  46. package/dist/{SettingAdvertisements-CIb8dJw-.js → SettingAdvertisements-CHydQ7ng.js} +12 -12
  47. package/dist/Settings-DHzLLa4K.js +179 -0
  48. package/dist/{Store-D5DekNIS.js → Store-_Y3hBXzK.js} +21 -21
  49. package/dist/{StoreRewards-CK9cv6PB.js → StoreRewards-BWn2BU0m.js} +15 -15
  50. package/dist/{StoreTransactions.vue_vue_type_script_setup_true_lang-DwFvFUw7.js → StoreTransactions.vue_vue_type_script_setup_true_lang-C63tzKMN.js} +20 -20
  51. package/dist/{TargetLocationInput.vue_vue_type_script_setup_true_lang-XkHaE1oD.js → TargetLocationInput.vue_vue_type_script_setup_true_lang-Doa4H9JC.js} +2 -2
  52. package/dist/{Tier-BsTolJGJ.js → Tier-DViMtkCl.js} +24 -24
  53. package/dist/{Title-CBtGuQ1G.js → Title-BGYaz7my.js} +21 -21
  54. package/dist/{Transaction-l_ijkhP0.js → Transaction-BCGhRDl0.js} +2 -2
  55. package/dist/{UserRuleGroup.vue_vue_type_script_setup_true_lang-B8ZbJYEJ.js → UserRuleGroup.vue_vue_type_script_setup_true_lang-DpH5YWXm.js} +6 -6
  56. package/dist/{Voucher-DKuQkekS.js → Voucher-BrTTNc6r.js} +14 -14
  57. package/dist/{VoucherEditor.vue_vue_type_script_setup_true_lang-BqwXxmaX.js → VoucherEditor.vue_vue_type_script_setup_true_lang-Dpq4WzIc.js} +12 -12
  58. package/dist/{ZodTextField.vue_vue_type_script_setup_true_lang-DYO0crif.js → ZodTextField.vue_vue_type_script_setup_true_lang-BGo58q5X.js} +2 -2
  59. package/dist/{app-BZv3K2Ar.js → app-DNraegzu.js} +1174 -1154
  60. package/dist/app.js +1 -1
  61. package/dist/{business-CQ2PeIc5.js → business-cXZbJF8S.js} +1 -1
  62. package/dist/{campaign-DWJ-1vIs.js → campaign-C1doH_1s.js} +7 -7
  63. package/dist/{campaign-C1qnp7Oy.js → campaign-wqMNOU6b.js} +2 -2
  64. package/dist/{campaign.fn-DwntQh7C.js → campaign.fn-DXio3P61.js} +83 -83
  65. package/dist/{collection.fn-B6lPfVbM.js → collection.fn-BsC8rIYd.js} +2 -2
  66. package/dist/{duplicateCampaign-DCL_NGO0.js → duplicateCampaign-f_tJs2tH.js} +2 -2
  67. package/dist/{effect-DPbpixEB.js → effect-CACluJcx.js} +1 -1
  68. package/dist/{email-addresses-dbgjTH_V.js → email-addresses-COkYUh_g.js} +2 -2
  69. package/dist/{export-BDrvA-Ea.js → export-CHXEKtZZ.js} +3 -3
  70. package/dist/google-C3S8u0mT.js +4 -0
  71. package/dist/{helper-DFaMGL6s.js → helper-HHjY-Adt.js} +1 -1
  72. package/dist/{index-BAyNExOB.js → index-AvL0-p38.js} +1 -1
  73. package/dist/{index-B-ffCrHz.js → index-B0u8xoHU.js} +1 -1
  74. package/dist/{index-DCBkRZPS.js → index-B4-1LpXk.js} +6 -6
  75. package/dist/{index-D48wWXFx.js → index-B73E2SKv.js} +1 -1
  76. package/dist/{index-BaFWAJdR.js → index-BDXxszsL.js} +2 -2
  77. package/dist/{index-BlW2eRWp.js → index-BmVOesYC.js} +2 -2
  78. package/dist/{index-C_tW-UlJ.js → index-C6GCIyfP.js} +3 -3
  79. package/dist/{index-dSJvPERR.js → index-CMbVv73b.js} +1 -1
  80. package/dist/{index-DHwh6RwR.js → index-CQwQH7qe.js} +2 -2
  81. package/dist/{index-JI9xC_zj.js → index-CfZFUdYT.js} +10 -8
  82. package/dist/{index-99sg9bkE.js → index-CsRq9ddQ.js} +1 -1
  83. package/dist/{index-c7lDRguo.js → index-De2lsQfK.js} +1 -1
  84. package/dist/{index-CrOMkbfE.js → index-DrAvYOCk.js} +1 -1
  85. package/dist/{index-hJZ1hw8m.js → index-ElYwTq9E.js} +3 -3
  86. package/dist/{index-CttqAV4U.js → index-UEVu7oHd.js} +1 -1
  87. package/dist/{index.esm2017-CKdWVukX.js → index.esm2017-BXOcPILo.js} +1 -1
  88. package/dist/{loading-BLdUDxXv.js → loading-BZ7Ck-yY.js} +1 -1
  89. package/dist/{lodash-BOzga6Zd.js → lodash-DSnGIIDb.js} +1 -1
  90. package/dist/{membership-B7v23lsV.js → membership-Vq5JO6zX.js} +2 -2
  91. package/dist/{money-Bfgr4ebR.js → money-CgbXuf2f.js} +1 -1
  92. package/dist/{number-D6VAT6Ci.js → number-wzsMi27N.js} +1 -1
  93. package/dist/{objectid-BV5fUbOE.js → objectid-BHJpiO-t.js} +8 -8
  94. package/dist/{plugins-C_OisvGx.js → plugins-KCQ7NW4T.js} +3 -3
  95. package/dist/{reward-BD3vRbNS.js → reward-BLJMexZT.js} +1 -1
  96. package/dist/{rule-DUM3oM3M.js → rule-DfpV-nKb.js} +3 -3
  97. package/dist/{rule-builder-DJelRmN2.js → rule-builder-B7afa19M.js} +1 -1
  98. package/dist/{template-OYwN2C3V.js → template-B_pkV7b2.js} +6 -6
  99. package/dist/{timezone-Bavrvqxg.js → timezone-ImDJv5tQ.js} +1 -1
  100. package/dist/{trigger-DAwlfSzC.js → trigger-BDJgP_o_.js} +5 -5
  101. package/dist/{useMarketingMaterialActions-DNAFAsdY.js → useMarketingMaterialActions-DJ5uFa8A.js} +3 -3
  102. package/dist/{usePagination-BVmlLK1x.js → usePagination-D7bVPh5n.js} +1 -1
  103. package/dist/{user-DwM_VolV.js → user-Cs2mVyti.js} +1 -1
  104. package/dist/{vue-i18n-C-Zawpf_.js → vue-i18n-BAXWivDJ.js} +650 -650
  105. package/dist/{xlsx-DP37ywaz.js → xlsx-bLou7qsN.js} +1 -1
  106. package/dist/{zod-FTYTR20x.js → zod-BCeE9I0g.js} +1 -1
  107. package/package.json +1 -1
  108. package/dist/Overview-BSj2B-aw.js +0 -969
  109. package/dist/Settings-QIrAY-Qb.js +0 -228
  110. package/dist/google-BQK68wbe.js +0 -5
@@ -0,0 +1,1104 @@
1
+ import { defineComponent as O, ref as C, computed as m, resolveComponent as j, openBlock as s, createBlock as E, unref as e, withCtx as V, createVNode as g, normalizeClass as q, createElementVNode as o, toDisplayString as d, createElementBlock as u, Fragment as R, renderList as Q, useModel as H, onMounted as te, isRef as z, createCommentVNode as I, watch as K, withModifiers as $, renderSlot as _, createTextVNode as X, Teleport as ve, createSlots as ge, onUnmounted as fe, normalizeStyle as ee, nextTick as we } from "vue";
2
+ import { h as L } from "./moment-D7p2TMB-.js";
3
+ import { u as T } from "./vue-i18n-BAXWivDJ.js";
4
+ import { _ as pe } 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 ye } from "./business-cXZbJF8S.js";
7
+ import { components as k } from "@feedmepos/ui-library";
8
+ import { g as he } from "./google-C3S8u0mT.js";
9
+ import { r as ae } from "./index-B4-1LpXk.js";
10
+ const be = { class: "fm-typo-en-body-md-600 select-none text-ellipsis overflow-hidden whitespace-nowrap" }, ce = /* @__PURE__ */ O({
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, n = a, l = C(!1), i = m(
37
+ () => {
38
+ var w;
39
+ return ((w = r.items.find((x) => x.value === r.modelValue)) == null ? void 0 : w.label) ?? "";
40
+ }
41
+ );
42
+ function c(w) {
43
+ n("update:model-value", w), l.value = !1;
44
+ }
45
+ return (w, x) => {
46
+ const S = j("FmIcon"), B = j("FmChip"), p = j("FmMenuItem"), b = j("FmMenu");
47
+ return s(), E(b, {
48
+ placement: t.placement,
49
+ "model-value": e(l),
50
+ "close-on-click": !0,
51
+ onMenuChanged: x[0] || (x[0] = (v) => l.value = v)
52
+ }, {
53
+ "menu-button": V(() => [
54
+ g(B, {
55
+ label: `${t.label}${e(i)}`,
56
+ class: q(r.class)
57
+ }, {
58
+ default: V(() => [
59
+ o("div", be, d(t.label) + d(e(i)), 1),
60
+ g(S, {
61
+ name: e(l) ? "keyboard_arrow_up" : "keyboard_arrow_down",
62
+ class: q(r.class),
63
+ outline: "",
64
+ size: "sm"
65
+ }, null, 8, ["name", "class"])
66
+ ]),
67
+ _: 1
68
+ }, 8, ["label", "class"])
69
+ ]),
70
+ default: V(() => [
71
+ (s(!0), u(R, null, Q(t.items, (v) => (s(), E(p, {
72
+ key: v.value,
73
+ value: v.value,
74
+ label: v.label,
75
+ onClick: (f) => c(v.value)
76
+ }, null, 8, ["value", "label", "onClick"]))), 128))
77
+ ]),
78
+ _: 1
79
+ }, 8, ["placement", "model-value"]);
80
+ };
81
+ }
82
+ }), xe = { class: "flex justify-between gap-8" }, Ce = { class: "flex flex-wrap gap-8" }, ke = /* @__PURE__ */ O({
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 } = T(), r = H(t, "source"), n = H(t, "dateFrom"), l = H(t, "dateTo"), i = H(t, "locationId"), c = H(t, "deletedFilter"), w = H(t, "sort"), x = ye(), S = m(() => [
105
+ { label: "Google", value: "google" },
106
+ { label: "FeedMe", value: "feedme" },
107
+ { label: "Feedvibe", value: "feedvibe" }
108
+ ]), B = m(() => [
109
+ ...x.locationOptions.map((M) => ({
110
+ label: M.label,
111
+ value: M.value
112
+ }))
113
+ ]), p = m(() => [
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
+ ]), b = m(() => [
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
+ ]), v = m({
134
+ get: () => r.value ?? [],
135
+ set: (M) => {
136
+ r.value = M.length ? M : null;
137
+ }
138
+ }), f = m({
139
+ get: () => i.value ? [i.value] : [],
140
+ set: (M) => {
141
+ i.value = M.length === 1 && M[0] ? M[0] : "";
142
+ }
143
+ }), y = m({
144
+ get: () => ({
145
+ startDate: n.value ?? void 0,
146
+ endDate: l.value ?? void 0
147
+ }),
148
+ set: (M) => {
149
+ n.value = M.startDate ?? null, l.value = M.endDate ?? null;
150
+ }
151
+ }), P = m(() => x.locations.length > 0);
152
+ return te(() => x.readLocations()), (M, h) => (s(), u("div", xe, [
153
+ o("div", Ce, [
154
+ g(ie, {
155
+ modelValue: e(v),
156
+ "onUpdate:modelValue": h[0] || (h[0] = (U) => z(v) ? v.value = U : null),
157
+ label: `${e(a)("connect.review.filter.source")}: `,
158
+ "show-item-label": !0,
159
+ items: e(S),
160
+ searchable: !1,
161
+ placement: "bottom-start"
162
+ }, null, 8, ["modelValue", "label", "items"]),
163
+ e(P) ? (s(), E(ie, {
164
+ key: 0,
165
+ modelValue: e(f),
166
+ "onUpdate:modelValue": h[1] || (h[1] = (U) => z(f) ? f.value = U : null),
167
+ label: `${e(a)("connect.review.filter.location")}: `,
168
+ "show-item-label": !0,
169
+ items: e(B),
170
+ placement: "bottom-start"
171
+ }, null, 8, ["modelValue", "label", "items"])) : I("", !0),
172
+ g(pe, {
173
+ modelValue: e(y),
174
+ "onUpdate:modelValue": h[2] || (h[2] = (U) => z(y) ? y.value = U : null)
175
+ }, null, 8, ["modelValue"]),
176
+ g(ce, {
177
+ modelValue: c.value,
178
+ "onUpdate:modelValue": h[3] || (h[3] = (U) => c.value = U),
179
+ label: `${e(a)("connect.review.filter.deleted.label")}: `,
180
+ items: e(b),
181
+ placement: "bottom-start"
182
+ }, null, 8, ["modelValue", "label", "items"])
183
+ ]),
184
+ g(ce, {
185
+ modelValue: w.value,
186
+ "onUpdate:modelValue": h[4] || (h[4] = (U) => w.value = U),
187
+ label: `${e(a)("connect.review.filter.sort.label")}: `,
188
+ items: e(p),
189
+ placement: "bottom-start"
190
+ }, null, 8, ["modelValue", "label", "items"])
191
+ ]));
192
+ }
193
+ }), Ae = "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", Ie = { class: "flex h-full flex-col" }, De = { class: "shrink-0 border-b border-fm-color-neutral-gray-200 pb-[12px] pt-18" }, Fe = { class: "flex items-center gap-[10px]" }, Se = { class: "min-w-0 flex-1" }, Me = { class: "fm-typo-en-body-md-600 text-fm-color-neutral-gray-400" }, Be = { class: "flex items-center gap-4" }, Ee = { class: "ml-4 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400" }, Ue = ["title"], Re = { class: "min-h-0 flex-1 overflow-y-auto py-[20px]" }, Ve = { class: "flex flex-col gap-16" }, Oe = {
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
+ }, Qe = { class: "m-0 fm-typo-en-body-md-400 leading-22" }, Ge = { key: 1 }, Pe = { class: "mb-8 fm-typo-en-body-sm-600 uppercase tracking-wide text-fm-color-neutral-gray-400" }, Ye = { class: "flex flex-wrap gap-8" }, ze = ["src", "alt"], qe = { class: "flex flex-col gap-[10px] rounded-xl bg-fm-color-neutral-gray-100 py-[14px] px-[24px]" }, Ne = { class: "flex justify-between gap-12 fm-typo-en-body-sm-400" }, Te = { class: "text-fm-color-neutral-gray-400" }, He = { class: "font-semibold text-fm-color-neutral-gray-400" }, Le = { class: "flex justify-between gap-12 fm-typo-en-body-sm-400" }, Je = { class: "text-fm-color-neutral-gray-400" }, je = { class: "text-right font-semibold text-fm-color-neutral-gray-400" }, Ke = { class: "flex justify-between gap-12 fm-typo-en-body-sm-400" }, Ze = { class: "text-fm-color-neutral-gray-400" }, _e = { class: "font-semibold text-fm-color-neutral-gray-400" }, We = {
197
+ key: 0,
198
+ class: "flex justify-between gap-12 fm-typo-en-body-sm-400"
199
+ }, Xe = { class: "text-fm-color-neutral-gray-400" }, $e = { class: "font-semibold text-fm-color-neutral-gray-400" }, et = {
200
+ key: 1,
201
+ class: "flex justify-between gap-12 fm-typo-en-body-sm-400"
202
+ }, tt = { class: "text-red-700" }, ot = { class: "font-semibold text-red-700" }, lt = { class: "flex justify-between gap-12 fm-typo-en-body-sm-400" }, nt = { class: "text-fm-color-neutral-gray-400" }, at = { class: "font-mono text-xs text-fm-color-neutral-gray-400" }, st = {
203
+ key: 0,
204
+ class: "shrink-0 border-t border-fm-color-neutral-gray-200 py-[12px]"
205
+ }, rt = /* @__PURE__ */ O({
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 } = k, { t: n } = T(), l = t, i = a, c = m({
218
+ get: () => l.modelValue,
219
+ set: (y) => i("update:modelValue", y)
220
+ }), w = m(() => {
221
+ var y;
222
+ return (y = l.review.reviewer) == null ? void 0 : y.name;
223
+ }), x = m(() => {
224
+ if (l.review.source === "google" || l.review.source === "feedme")
225
+ return l.review.starRating;
226
+ if (l.review.source === "feedvibe") return l.review.rating.overall;
227
+ }), S = m(() => l.review.source === "google" || l.review.source === "feedme" || l.review.source === "feedvibe" ? l.review.mediaItems : []), B = m(
228
+ () => L(l.review.createTime).format("D MMM YYYY, hh:mm A")
229
+ ), p = m(
230
+ () => l.review.updateTime ? L(l.review.updateTime).format("D MMM YYYY, hh:mm A") : void 0
231
+ ), b = m(
232
+ () => l.review.deletedAt ? L(l.review.deletedAt).format("D MMM YYYY, hh:mm A") : void 0
233
+ ), v = m(() => {
234
+ if (l.review.source === "google")
235
+ return l.review.originalUrl;
236
+ });
237
+ function f() {
238
+ v.value && window.open(v.value, "_blank", "noopener,noreferrer");
239
+ }
240
+ return (y, P) => {
241
+ const M = j("FmSideSheet");
242
+ return s(), E(M, {
243
+ modelValue: c.value,
244
+ "onUpdate:modelValue": P[1] || (P[1] = (h) => c.value = h),
245
+ "max-width": 560,
246
+ "close-button": !1,
247
+ "dismiss-away": !0
248
+ }, {
249
+ default: V(() => [
250
+ o("div", Ie, [
251
+ o("div", De, [
252
+ o("div", Fe, [
253
+ g(e(k).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
+ o("div", Se, [
260
+ o("div", Me, d(w.value || e(n)("connect.review.detail.anonymous")), 1),
261
+ o("div", Be, [
262
+ (s(), u(R, null, Q(5, (h) => g(e(k).FmIcon, {
263
+ key: h,
264
+ name: "star",
265
+ size: "sm",
266
+ class: q(
267
+ h <= Math.round(x.value || 0) ? "text-fm-color-primary" : "text-fm-color-neutral-gray-200"
268
+ )
269
+ }, null, 8, ["class"])), 64)),
270
+ o("span", Ee, d(B.value), 1)
271
+ ])
272
+ ]),
273
+ o("button", {
274
+ type: "button",
275
+ title: e(n)("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: P[0] || (P[0] = (h) => c.value = !1)
278
+ }, [
279
+ g(e(k).FmIcon, {
280
+ name: "close",
281
+ size: "sm"
282
+ })
283
+ ], 8, Ue)
284
+ ])
285
+ ]),
286
+ o("div", Re, [
287
+ o("div", Ve, [
288
+ b.value ? (s(), u("div", Oe, d(e(n)("connect.review.detail.deleted")), 1)) : I("", !0),
289
+ o("p", Qe, d(t.review.comment || e(n)("connect.review.detail.noComment")), 1),
290
+ S.value.length ? (s(), u("div", Ge, [
291
+ o("div", Pe, d(e(n)("connect.review.detail.photos", { n: S.value.length })), 1),
292
+ o("div", Ye, [
293
+ (s(!0), u(R, null, Q(S.value, (h, U) => (s(), u("div", {
294
+ key: h.externalId || U,
295
+ class: "flex h-[76px] w-[76px] items-center justify-center overflow-hidden rounded-lg bg-fm-color-neutral-gray-100"
296
+ }, [
297
+ o("img", {
298
+ src: h.thumbnailUrl,
299
+ alt: h.thumbnailLabel,
300
+ class: "h-full w-full object-cover"
301
+ }, null, 8, ze)
302
+ ]))), 128))
303
+ ])
304
+ ])) : I("", !0),
305
+ o("div", qe, [
306
+ o("div", Ne, [
307
+ o("span", Te, d(e(n)("connect.review.detail.source")), 1),
308
+ o("span", He, d(t.platformName), 1)
309
+ ]),
310
+ o("div", Le, [
311
+ o("span", Je, d(e(n)("connect.review.detail.outlet")), 1),
312
+ o("span", je, d(t.location || e(n)("connect.review.detail.emptyValue")), 1)
313
+ ]),
314
+ o("div", Ke, [
315
+ o("span", Ze, d(e(n)("connect.review.detail.createTime")), 1),
316
+ o("span", _e, d(B.value), 1)
317
+ ]),
318
+ p.value ? (s(), u("div", We, [
319
+ o("span", Xe, d(e(n)("connect.review.detail.updateTime")), 1),
320
+ o("span", $e, d(p.value), 1)
321
+ ])) : I("", !0),
322
+ b.value ? (s(), u("div", et, [
323
+ o("span", tt, d(e(n)("connect.review.detail.deletedAt")), 1),
324
+ o("span", ot, d(b.value), 1)
325
+ ])) : I("", !0),
326
+ o("div", lt, [
327
+ o("span", nt, d(e(n)("connect.review.detail.referenceId")), 1),
328
+ o("span", at, d(t.referenceId), 1)
329
+ ])
330
+ ])
331
+ ])
332
+ ]),
333
+ v.value ? (s(), u("div", st, [
334
+ g(e(r), {
335
+ variant: "primary",
336
+ size: "md",
337
+ "prepend-icon": "open_in_new",
338
+ label: e(n)("connect.review.detail.openOriginalLink"),
339
+ class: "w-full",
340
+ onClick: f
341
+ }, null, 8, ["label"])
342
+ ])) : I("", !0)
343
+ ])
344
+ ]),
345
+ _: 1
346
+ }, 8, ["modelValue"]);
347
+ };
348
+ }
349
+ }), it = 300, de = /* @__PURE__ */ new Map();
350
+ let ue = Promise.resolve();
351
+ function ct(t) {
352
+ const a = de.get(t);
353
+ if (a) return a;
354
+ const r = ue.then(
355
+ () => new Promise((n) => {
356
+ const l = new Image();
357
+ l.onload = () => n(!0), l.onerror = () => n(!1), l.src = t;
358
+ })
359
+ );
360
+ return de.set(t, r), ue = r.then(
361
+ () => new Promise(
362
+ (n) => setTimeout(n, it)
363
+ )
364
+ ), r;
365
+ }
366
+ const dt = /* @__PURE__ */ O({
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, n = a, l = C();
376
+ return K(
377
+ () => [r.pictureUrl, r.isGoogle],
378
+ async ([i, c]) => {
379
+ l.value = c ? void 0 : i, n("loaded", l.value), c && i && await ct(i) && r.pictureUrl === i && r.isGoogle === c && (l.value = i, n("loaded", i));
380
+ },
381
+ { immediate: !0 }
382
+ ), (i, c) => (s(), E(e(k).FmAvatar, {
383
+ name: l.value ? void 0 : t.name,
384
+ src: l.value,
385
+ size: "md",
386
+ class: "h-40 w-40 shrink-0"
387
+ }, null, 8, ["name", "src"]));
388
+ }
389
+ }), ut = { class: "absolute right-[16px] top-[16px] z-10" }, mt = { class: "flex items-start gap-12" }, vt = { class: "min-w-0 flex flex-col flex-1 gap-8" }, gt = { class: "flex flex-wrap items-start justify-between gap-8" }, ft = { class: "flex min-w-0 flex-wrap items-center gap-x-8 gap-y-4" }, wt = { class: "fm-typo-en-body-md-600 text-fm-color-neutral-gray-400" }, pt = { class: "fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400" }, yt = {
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
+ }, ht = { class: "flex flex-wrap items-center gap-8" }, bt = { class: "inline-flex items-center gap-4 rounded-full bg-fm-color-neutral-gray-100 px-12 py-4" }, xt = ["src", "alt"], Ct = { class: "fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400" }, kt = {
393
+ key: 0,
394
+ class: "fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400"
395
+ }, At = {
396
+ key: 0,
397
+ class: "mt-4"
398
+ }, oe = /* @__PURE__ */ O({
399
+ __name: "ReviewCardTemplate",
400
+ props: {
401
+ review: {},
402
+ logo: {},
403
+ logoAlt: {},
404
+ gap: {},
405
+ onReply: { type: Function }
406
+ },
407
+ setup(t) {
408
+ const { FmButton: a } = k, { t: r } = T(), n = t, l = m(() => {
409
+ var p;
410
+ return (p = n.review.reviewer) == null ? void 0 : p.name;
411
+ }), i = m(() => {
412
+ var p;
413
+ return (p = n.review.reviewer) == null ? void 0 : p.pictureUrl;
414
+ }), c = C(), w = m(() => n.review.restaurantName), x = m(() => {
415
+ switch (n.review.source) {
416
+ case "google":
417
+ return "Google";
418
+ case "facebook":
419
+ return "Facebook";
420
+ case "feedme":
421
+ return "FeedMe";
422
+ case "feedvibe":
423
+ return "Feedvibe";
424
+ }
425
+ }), S = m(
426
+ () => n.review.source === "feedme" ? n.review.billId : n.review.externalId || ""
427
+ ), B = C(!1);
428
+ return (p, b) => (s(), u(R, null, [
429
+ o("div", {
430
+ 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",
431
+ onClick: b[2] || (b[2] = (v) => B.value = !0)
432
+ }, [
433
+ o("div", ut, [
434
+ t.onReply ? (s(), E(e(a), {
435
+ key: 0,
436
+ variant: "primary",
437
+ size: "md",
438
+ "prepend-icon": "reply",
439
+ label: e(r)("connect.review.overview.reply"),
440
+ onClick: b[0] || (b[0] = $((v) => t.onReply(t.review), ["stop"]))
441
+ }, null, 8, ["label"])) : I("", !0)
442
+ ]),
443
+ o("div", mt, [
444
+ g(dt, {
445
+ name: l.value,
446
+ "picture-url": i.value,
447
+ "is-google": t.review.source === "google",
448
+ onLoaded: b[1] || (b[1] = (v) => c.value = v)
449
+ }, null, 8, ["name", "picture-url", "is-google"]),
450
+ o("div", vt, [
451
+ o("div", gt, [
452
+ o("div", ft, [
453
+ o("span", wt, d(l.value || e(r)("connect.review.overview.anonymous")), 1),
454
+ _(p.$slots, "rating"),
455
+ o("span", pt, d(e(L)(t.review.updateTime ?? t.review.createTime).format(
456
+ "D MMM YYYY, hh:mm A"
457
+ )), 1)
458
+ ]),
459
+ t.review.deletedAt ? (s(), u("span", yt, [
460
+ g(e(k).FmTooltip, {
461
+ content: e(r)("connect.review.overview.deletedInfo"),
462
+ "content-class": "max-w-[min(320px,calc(100vw-32px))] whitespace-normal",
463
+ placement: "left"
464
+ }, {
465
+ default: V(() => [
466
+ g(e(k).FmIcon, {
467
+ name: "info",
468
+ outline: "",
469
+ size: "sm"
470
+ })
471
+ ]),
472
+ _: 1
473
+ }, 8, ["content"]),
474
+ X(" " + d(e(r)("connect.review.overview.deleted")), 1)
475
+ ])) : I("", !0)
476
+ ]),
477
+ o("div", ht, [
478
+ o("span", bt, [
479
+ o("img", {
480
+ src: t.logo,
481
+ alt: t.logoAlt || x.value,
482
+ class: "h-16 w-16"
483
+ }, null, 8, xt),
484
+ o("span", Ct, d(x.value), 1)
485
+ ]),
486
+ b[4] || (b[4] = o("span", { class: "text-fm-color-neutral-gray-400" }, "·", -1)),
487
+ w.value ? (s(), u("span", kt, d(w.value), 1)) : I("", !0)
488
+ ]),
489
+ _(p.$slots, "details"),
490
+ _(p.$slots, "comment", {}, () => [
491
+ o("p", {
492
+ class: q(["mt-8 line-clamp-3 fm-typo-en-body-md-400", {
493
+ "italic text-fm-color-neutral-gray-400": !t.review.comment
494
+ }])
495
+ }, d(t.review.comment || e(r)("connect.review.overview.noComment")), 3)
496
+ ]),
497
+ p.$slots.media ? (s(), u("div", At, [
498
+ _(p.$slots, "media")
499
+ ])) : I("", !0)
500
+ ])
501
+ ])
502
+ ]),
503
+ g(rt, {
504
+ modelValue: B.value,
505
+ "onUpdate:modelValue": b[3] || (b[3] = (v) => B.value = v),
506
+ review: t.review,
507
+ "reference-id": S.value,
508
+ location: w.value,
509
+ "platform-name": x.value,
510
+ "reviewer-picture-url": c.value
511
+ }, null, 8, ["modelValue", "review", "reference-id", "location", "platform-name", "reviewer-picture-url"])
512
+ ], 64));
513
+ }
514
+ }), It = {
515
+ key: 0,
516
+ class: "flex items-center gap-4"
517
+ }, Dt = /* @__PURE__ */ O({
518
+ __name: "FacebookReviewCard",
519
+ props: {
520
+ review: {}
521
+ },
522
+ setup(t) {
523
+ const { t: a } = T();
524
+ return (r, n) => (s(), E(oe, {
525
+ review: t.review,
526
+ logo: e(Ae)
527
+ }, {
528
+ rating: V(() => [
529
+ t.review.isPositive != null ? (s(), u("div", It, [
530
+ g(e(k).FmIcon, {
531
+ name: t.review.isPositive ? "thumb_up" : "thumb_down",
532
+ size: "sm",
533
+ class: q(
534
+ t.review.isPositive ? "text-fm-color-typo-success" : "text-fm-color-system-error-500"
535
+ )
536
+ }, null, 8, ["name", "class"]),
537
+ o("span", {
538
+ class: q([
539
+ "fm-typo-en-body-sm-400",
540
+ t.review.isPositive ? "text-fm-color-typo-success" : "text-fm-color-system-error-500"
541
+ ])
542
+ }, d(t.review.isPositive ? e(a)("connect.review.overview.positive") : e(a)("connect.review.overview.negative")), 3)
543
+ ])) : I("", !0)
544
+ ]),
545
+ _: 1
546
+ }, 8, ["review", "logo"]));
547
+ }
548
+ }), Ft = "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", St = {
549
+ key: 0,
550
+ class: "flex flex-wrap gap-8"
551
+ }, Mt = ["onClick"], Bt = ["src", "alt"], Et = {
552
+ key: 0,
553
+ class: "absolute inset-0 flex items-center justify-center bg-black/30"
554
+ }, Ut = ["src"], Rt = ["src", "alt"], se = /* @__PURE__ */ O({
555
+ __name: "ReviewCardMedia",
556
+ props: {
557
+ mediaItems: {}
558
+ },
559
+ setup(t) {
560
+ const a = C(null);
561
+ return (r, n) => t.mediaItems && t.mediaItems.length > 0 ? (s(), u("div", St, [
562
+ (s(!0), u(R, null, Q(t.mediaItems, (l, i) => (s(), u("div", {
563
+ key: i,
564
+ class: "relative w-72 h-72 rounded-lg overflow-hidden border border-fm-color-neutral-gray-200 shrink-0 cursor-pointer hover:opacity-90",
565
+ onClick: $((c) => a.value = l, ["stop"])
566
+ }, [
567
+ o("img", {
568
+ src: l.thumbnailUrl,
569
+ alt: l.thumbnailLabel,
570
+ class: "w-full h-full object-cover"
571
+ }, null, 8, Bt),
572
+ l.videoUrl ? (s(), u("div", Et, [
573
+ g(e(k).FmIcon, {
574
+ name: "play_arrow",
575
+ class: "text-white"
576
+ })
577
+ ])) : I("", !0)
578
+ ], 8, Mt))), 128)),
579
+ (s(), E(ve, { to: "body" }, [
580
+ a.value ? (s(), u("div", {
581
+ key: 0,
582
+ class: "fixed inset-0 z-50 flex items-center justify-center bg-black/80 backdrop-blur-sm",
583
+ onClick: n[2] || (n[2] = (l) => a.value = null)
584
+ }, [
585
+ o("button", {
586
+ class: "absolute top-16 right-16 z-50 p-8 text-white hover:text-fm-color-neutral-gray-300 transition-colors",
587
+ onClick: n[0] || (n[0] = (l) => a.value = null)
588
+ }, [
589
+ g(e(k).FmIcon, {
590
+ name: "close",
591
+ size: "lg"
592
+ })
593
+ ]),
594
+ o("div", {
595
+ class: "relative max-w-[90vw] max-h-[90vh] flex items-center justify-center",
596
+ onClick: n[1] || (n[1] = $(() => {
597
+ }, ["stop"]))
598
+ }, [
599
+ a.value.videoUrl ? (s(), u("video", {
600
+ key: 0,
601
+ src: a.value.videoUrl,
602
+ controls: "",
603
+ autoplay: "",
604
+ class: "max-w-full max-h-[90vh] rounded-lg shadow-lg"
605
+ }, null, 8, Ut)) : (s(), u("img", {
606
+ key: 1,
607
+ src: a.value.thumbnailUrl,
608
+ alt: a.value.thumbnailLabel,
609
+ class: "max-w-full max-h-[90vh] rounded-lg shadow-lg object-contain"
610
+ }, null, 8, Rt))
611
+ ])
612
+ ])) : I("", !0)
613
+ ]))
614
+ ])) : I("", !0);
615
+ }
616
+ }), Vt = { class: "flex items-center gap-4" }, Ot = /* @__PURE__ */ O({
617
+ __name: "FeedmeReviewCard",
618
+ props: {
619
+ review: {}
620
+ },
621
+ setup(t) {
622
+ const a = t, r = m(() => {
623
+ var i, c;
624
+ const l = (c = (i = a.review.reviewer) == null ? void 0 : i.phoneNumber) == null ? void 0 : c.replace(/\D/g, "");
625
+ return l ? `https://wa.me/${l}` : void 0;
626
+ });
627
+ function n() {
628
+ r.value && window.open(r.value, "_blank", "noopener,noreferrer");
629
+ }
630
+ return (l, i) => (s(), E(oe, {
631
+ review: t.review,
632
+ logo: e(Ft),
633
+ "logo-alt": "FeedMe",
634
+ "on-reply": r.value ? n : void 0
635
+ }, {
636
+ rating: V(() => [
637
+ o("div", Vt, [
638
+ (s(), u(R, null, Q(5, (c) => g(e(k).FmIcon, {
639
+ key: c,
640
+ name: "star",
641
+ size: "sm",
642
+ class: q(
643
+ c <= t.review.starRating ? "text-yellow-400" : "text-fm-color-neutral-gray-200"
644
+ )
645
+ }, null, 8, ["class"])), 64))
646
+ ])
647
+ ]),
648
+ media: V(() => [
649
+ g(se, {
650
+ "media-items": t.review.mediaItems
651
+ }, null, 8, ["media-items"])
652
+ ]),
653
+ _: 1
654
+ }, 8, ["review", "logo", "on-reply"]));
655
+ }
656
+ }), Qt = "data:image/png;base64,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", Gt = { class: "flex items-center gap-4" }, Pt = { class: "flex flex-wrap items-center gap-x-8 gap-y-4 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-500" }, Yt = { class: "font-semibold text-fm-color-neutral-gray-400" }, zt = { class: "font-semibold text-fm-color-neutral-gray-400" }, qt = { class: "font-semibold text-fm-color-neutral-gray-400" }, Nt = /* @__PURE__ */ O({
657
+ __name: "FeedvibeReviewCard",
658
+ props: {
659
+ review: {}
660
+ },
661
+ setup(t) {
662
+ const { t: a } = T();
663
+ return (r, n) => (s(), E(oe, {
664
+ review: t.review,
665
+ logo: e(Qt),
666
+ "logo-alt": "Feedvibe",
667
+ gap: "12"
668
+ }, {
669
+ rating: V(() => [
670
+ o("div", Gt, [
671
+ (s(), u(R, null, Q(5, (l) => g(e(k).FmIcon, {
672
+ key: l,
673
+ name: "star",
674
+ size: "sm",
675
+ class: q(
676
+ l <= Math.round(t.review.rating.overall) ? "text-yellow-400" : "text-fm-color-neutral-gray-200"
677
+ )
678
+ }, null, 8, ["class"])), 64))
679
+ ])
680
+ ]),
681
+ details: V(() => [
682
+ o("div", Pt, [
683
+ o("span", null, [
684
+ X(d(e(a)("connect.review.overview.food")) + ": ", 1),
685
+ o("strong", Yt, d(t.review.rating.food) + "/5 ", 1)
686
+ ]),
687
+ n[0] || (n[0] = o("span", { "aria-hidden": "true" }, "|", -1)),
688
+ o("span", null, [
689
+ X(d(e(a)("connect.review.overview.service")) + ": ", 1),
690
+ o("strong", zt, d(t.review.rating.service) + "/5 ", 1)
691
+ ]),
692
+ n[1] || (n[1] = o("span", { "aria-hidden": "true" }, "|", -1)),
693
+ o("span", null, [
694
+ X(d(e(a)("connect.review.overview.atmosphere")) + ": ", 1),
695
+ o("strong", qt, d(t.review.rating.atmosphere) + "/5 ", 1)
696
+ ])
697
+ ])
698
+ ]),
699
+ media: V(() => [
700
+ g(se, {
701
+ "media-items": t.review.mediaItems
702
+ }, null, 8, ["media-items"])
703
+ ]),
704
+ _: 1
705
+ }, 8, ["review", "logo"]));
706
+ }
707
+ }), Tt = { class: "flex items-center gap-4" }, Ht = { class: "mt-8" }, Lt = { class: "line-clamp-3 fm-typo-en-body-md-400" }, Jt = {
708
+ key: 0,
709
+ class: "mt-4 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400"
710
+ }, jt = /* @__PURE__ */ O({
711
+ __name: "GoogleReviewCard",
712
+ props: {
713
+ review: {}
714
+ },
715
+ setup(t) {
716
+ const { t: a } = T(), r = C(!1);
717
+ function n(l) {
718
+ l.originalUrl && window.open(l.originalUrl, "_blank", "noopener,noreferrer");
719
+ }
720
+ return (l, i) => (s(), E(oe, {
721
+ review: t.review,
722
+ logo: e(he),
723
+ "on-reply": t.review.originalUrl ? n : void 0
724
+ }, ge({
725
+ rating: V(() => [
726
+ o("div", Tt, [
727
+ (s(), u(R, null, Q(5, (c) => g(e(k).FmIcon, {
728
+ key: c,
729
+ name: "star",
730
+ size: "sm",
731
+ class: q(
732
+ c <= t.review.starRating ? "text-yellow-400" : "text-fm-color-neutral-gray-200"
733
+ )
734
+ }, null, 8, ["class"])), 64))
735
+ ])
736
+ ]),
737
+ media: V(() => [
738
+ g(se, {
739
+ "media-items": t.review.mediaItems
740
+ }, null, 8, ["media-items"])
741
+ ]),
742
+ _: 2
743
+ }, [
744
+ t.review.translatedComment ? {
745
+ name: "comment",
746
+ fn: V(() => [
747
+ o("div", Ht, [
748
+ o("p", Lt, d(r.value ? t.review.comment : t.review.translatedComment), 1),
749
+ r.value ? I("", !0) : (s(), u("p", Jt, d(e(a)("connect.review.overview.translatedByGoogle")), 1)),
750
+ o("button", {
751
+ type: "button",
752
+ class: "mt-4 border-0 bg-transparent p-0 fm-typo-en-body-sm-600 text-blue-500 hover:underline",
753
+ onClick: i[0] || (i[0] = $((c) => r.value = !r.value, ["stop"]))
754
+ }, d(r.value ? e(a)("connect.review.overview.seeTranslation") : e(a)("connect.review.overview.seeOriginal")), 1)
755
+ ])
756
+ ]),
757
+ key: "0"
758
+ } : void 0
759
+ ]), 1032, ["review", "logo", "on-reply"]));
760
+ }
761
+ }), Kt = /* @__PURE__ */ O({
762
+ __name: "ReviewCard",
763
+ props: {
764
+ review: {}
765
+ },
766
+ setup(t) {
767
+ const a = t, r = m(
768
+ () => a.review.source === "google" ? a.review : null
769
+ ), n = m(
770
+ () => a.review.source === "facebook" ? a.review : null
771
+ ), l = m(
772
+ () => a.review.source === "feedme" ? a.review : null
773
+ ), i = m(
774
+ () => a.review.source === "feedvibe" ? a.review : null
775
+ );
776
+ return (c, w) => r.value ? (s(), E(jt, {
777
+ key: 0,
778
+ review: r.value
779
+ }, null, 8, ["review"])) : n.value ? (s(), E(Dt, {
780
+ key: 1,
781
+ review: n.value
782
+ }, null, 8, ["review"])) : l.value ? (s(), E(Ot, {
783
+ key: 2,
784
+ review: l.value
785
+ }, null, 8, ["review"])) : i.value ? (s(), E(Nt, {
786
+ key: 3,
787
+ review: i.value
788
+ }, null, 8, ["review"])) : I("", !0);
789
+ }
790
+ }), Zt = {
791
+ key: 0,
792
+ class: "flex justify-center py-32"
793
+ }, _t = {
794
+ key: 1,
795
+ class: "flex flex-col items-center justify-center py-48 gap-8"
796
+ }, Wt = { class: "fm-typo-en-body-md-400 text-fm-color-neutral-gray-400" }, Xt = ["data-sentinel"], $t = { class: "flex flex-col gap-12" }, eo = {
797
+ key: 3,
798
+ class: "flex justify-center py-16"
799
+ }, W = 100, le = 20, me = 220, to = /* @__PURE__ */ O({
800
+ __name: "ReviewFeed",
801
+ props: {
802
+ reviews: {},
803
+ loading: { type: Boolean },
804
+ hasMore: { type: Boolean }
805
+ },
806
+ emits: ["loadMore"],
807
+ setup(t, { emit: a }) {
808
+ const { t: r } = T(), n = t, l = a, i = C(0), c = m(
809
+ () => Math.min(i.value + W, n.reviews.length)
810
+ ), w = m(
811
+ () => n.reviews.slice(i.value, c.value)
812
+ ), x = m(() => {
813
+ const D = w.value, A = [];
814
+ for (let F = 0; F < D.length; F += le)
815
+ A.push({
816
+ start: i.value + F,
817
+ items: D.slice(F, F + le)
818
+ });
819
+ return A;
820
+ }), S = m(
821
+ () => i.value * me
822
+ ), B = m(
823
+ () => (n.reviews.length - c.value) * me
824
+ );
825
+ K(
826
+ () => n.reviews.length,
827
+ (D, A) => {
828
+ if (D < A) {
829
+ i.value = 0;
830
+ return;
831
+ }
832
+ i.value + W >= A && (i.value = Math.max(0, D - W));
833
+ }
834
+ );
835
+ const p = C(null), b = C(null), v = C(null), f = C(null), y = C(!1);
836
+ async function P(D, A) {
837
+ var N;
838
+ const F = Math.max(0, n.reviews.length - W), Y = Math.min(Math.max(D - le, 0), F);
839
+ if (Y === i.value || y.value) return;
840
+ y.value = !0;
841
+ const J = A == null ? void 0 : A.getBoundingClientRect().top;
842
+ if (i.value = Y, await we(), A && J !== void 0) {
843
+ const Z = (N = p.value) == null ? void 0 : N.querySelector(`[data-sentinel="${D}"]`);
844
+ Z && window.scrollBy(0, Z.getBoundingClientRect().top - J);
845
+ }
846
+ y.value = !1;
847
+ }
848
+ function M() {
849
+ const D = window.innerHeight, A = [
850
+ { el: b.value, base: 0, span: i.value },
851
+ {
852
+ el: v.value,
853
+ base: c.value,
854
+ span: n.reviews.length - c.value
855
+ }
856
+ ];
857
+ for (const { el: F, base: Y, span: J } of A) {
858
+ if (!F || J <= 0) continue;
859
+ const N = F.getBoundingClientRect();
860
+ if (N.top <= 0 && N.bottom >= D && N.height > 0) {
861
+ const Z = (D / 2 - N.top) / N.height;
862
+ P(Math.floor(Y + Z * J));
863
+ return;
864
+ }
865
+ }
866
+ }
867
+ let h = !1;
868
+ function U() {
869
+ h || (h = !0, requestAnimationFrame(() => {
870
+ h = !1, M();
871
+ }));
872
+ }
873
+ let G = null;
874
+ function re() {
875
+ var D;
876
+ G == null || G.disconnect(), (D = p.value) == null || D.querySelectorAll("[data-sentinel]").forEach((A) => G == null ? void 0 : G.observe(A));
877
+ }
878
+ return te(() => {
879
+ G = new IntersectionObserver((A) => {
880
+ for (const F of A)
881
+ if (F.isIntersecting) {
882
+ const Y = Number(F.target.dataset.sentinel);
883
+ P(Y, F.target);
884
+ }
885
+ }), re(), K([i, () => n.reviews.length], re, {
886
+ flush: "post"
887
+ });
888
+ const D = new IntersectionObserver(
889
+ (A) => {
890
+ A[0].isIntersecting && n.hasMore && !n.loading && l("loadMore");
891
+ },
892
+ { threshold: 0.5 }
893
+ );
894
+ f.value && D.observe(f.value), window.addEventListener("scroll", U, { passive: !0 }), fe(() => {
895
+ G == null || G.disconnect(), D.disconnect(), window.removeEventListener("scroll", U);
896
+ });
897
+ }), (D, A) => (s(), u(R, null, [
898
+ t.loading && t.reviews.length === 0 ? (s(), u("div", Zt, [
899
+ g(e(k).FmIcon, {
900
+ name: "sync",
901
+ size: "xl",
902
+ class: "animate-spin text-fm-color-neutral-gray-400"
903
+ })
904
+ ])) : t.reviews.length === 0 ? (s(), u("div", _t, [
905
+ g(e(k).FmIcon, {
906
+ name: "rate_review",
907
+ size: "xl",
908
+ class: "text-fm-color-neutral-gray-300"
909
+ }),
910
+ o("p", Wt, d(e(r)("connect.review.overview.empty")), 1)
911
+ ])) : (s(), u("div", {
912
+ key: 2,
913
+ ref_key: "listEl",
914
+ ref: p
915
+ }, [
916
+ e(i) > 0 ? (s(), u("div", {
917
+ key: 0,
918
+ ref_key: "topSpacerEl",
919
+ ref: b,
920
+ style: ee({ height: `${e(S)}px` })
921
+ }, null, 4)) : I("", !0),
922
+ (s(!0), u(R, null, Q(e(x), (F) => (s(), u(R, {
923
+ key: F.start
924
+ }, [
925
+ o("div", {
926
+ "data-sentinel": F.start,
927
+ class: "h-1"
928
+ }, null, 8, Xt),
929
+ o("div", $t, [
930
+ (s(!0), u(R, null, Q(F.items, (Y) => (s(), E(Kt, {
931
+ key: Y._id,
932
+ review: Y
933
+ }, null, 8, ["review"]))), 128))
934
+ ])
935
+ ], 64))), 128)),
936
+ e(B) > 0 ? (s(), u("div", {
937
+ key: 1,
938
+ ref_key: "bottomSpacerEl",
939
+ ref: v,
940
+ style: ee({ height: `${e(B)}px` })
941
+ }, null, 4)) : I("", !0)
942
+ ], 512)),
943
+ o("div", {
944
+ ref_key: "sentinel",
945
+ ref: f,
946
+ class: "h-1"
947
+ }, null, 512),
948
+ t.loading && t.reviews.length > 0 ? (s(), u("div", eo, [
949
+ g(e(k).FmIcon, {
950
+ name: "sync",
951
+ size: "md",
952
+ class: "animate-spin text-fm-color-neutral-gray-400"
953
+ })
954
+ ])) : I("", !0)
955
+ ], 64));
956
+ }
957
+ }), oo = { class: "w-1/2 rounded-lg border border-fm-color-neutral-gray-200 bg-white p-5" }, lo = { class: "fm-typo-en-title-md-600 text-fm-color-typo-primary" }, no = { class: "mt-16 grid grid-cols-[minmax(0,1fr)_minmax(140px,0.5fr)] gap-5" }, ao = { class: "mt-12 flex flex-col gap-8" }, so = { class: "w-16 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-500" }, ro = { class: "h-8 flex-1 overflow-hidden rounded-full bg-fm-color-neutral-gray-100" }, io = { class: "w-24 text-right fm-typo-en-body-sm-400 text-fm-color-neutral-gray-500" }, co = { class: "mt-8 flex flex-col items-center" }, uo = { class: "fm-typo-en-display-lg-800 text-fm-color-typo-primary" }, mo = {
958
+ class: "mt-8 flex items-center gap-1",
959
+ "aria-label": "Average rating"
960
+ }, vo = { class: "mt-4 fm-typo-en-body-sm-400 text-fm-color-neutral-gray-400" }, go = /* @__PURE__ */ O({
961
+ __name: "ReviewSummary",
962
+ setup(t) {
963
+ const a = C({
964
+ averageScore: 0,
965
+ total: 0,
966
+ starCounts: [5, 4, 3, 2, 1].map((l) => ({ star: l, count: 0 }))
967
+ }), r = m(() => a.value.averageScore.toFixed(1));
968
+ function n(l) {
969
+ return `${Math.min(Math.max(a.value.averageScore - l + 1, 0), 1) * 100}%`;
970
+ }
971
+ return te(async () => {
972
+ a.value = await ae.getReviewSummary();
973
+ }), (l, i) => (s(), u("div", oo, [
974
+ o("h2", lo, d(l.$t("connect.review.overview.summary")), 1),
975
+ o("div", no, [
976
+ o("div", ao, [
977
+ (s(!0), u(R, null, Q(e(a).starCounts, (c) => (s(), u("div", {
978
+ key: c.star,
979
+ class: "flex items-center gap-8"
980
+ }, [
981
+ o("span", so, d(c.star), 1),
982
+ g(e(k).FmIcon, {
983
+ name: "star",
984
+ size: "sm",
985
+ class: "text-amber-400"
986
+ }),
987
+ o("div", ro, [
988
+ o("div", {
989
+ class: "h-full rounded-full bg-amber-400 transition-[width]",
990
+ style: ee({
991
+ width: `${e(a).total ? c.count / e(a).total * 100 : 0}%`
992
+ })
993
+ }, null, 4)
994
+ ]),
995
+ o("span", io, d(c.count), 1)
996
+ ]))), 128))
997
+ ]),
998
+ o("div", co, [
999
+ o("span", uo, d(e(r)), 1),
1000
+ o("div", mo, [
1001
+ (s(), u(R, null, Q(5, (c) => o("span", {
1002
+ key: c,
1003
+ class: "relative"
1004
+ }, [
1005
+ g(e(k).FmIcon, {
1006
+ name: "star",
1007
+ size: "md",
1008
+ class: "text-fm-color-neutral-gray-200"
1009
+ }),
1010
+ o("span", {
1011
+ class: "absolute inset-y-0 left-0 overflow-hidden",
1012
+ style: ee({ width: n(c) })
1013
+ }, [
1014
+ g(e(k).FmIcon, {
1015
+ name: "star",
1016
+ size: "md",
1017
+ class: "text-amber-400"
1018
+ })
1019
+ ], 4)
1020
+ ])), 64))
1021
+ ]),
1022
+ o("span", vo, " (" + d(e(a).total) + ") ", 1)
1023
+ ])
1024
+ ])
1025
+ ]));
1026
+ }
1027
+ }), fo = { class: "p-24 flex flex-col gap-12" }, ne = 20, Io = /* @__PURE__ */ O({
1028
+ __name: "Overview",
1029
+ setup(t) {
1030
+ const a = C([]), r = C(!1), n = C(!0), l = C(null), i = C(null), c = C(null), w = C(""), x = C("all"), S = C("createTime_desc");
1031
+ K(l, () => {
1032
+ w.value = "";
1033
+ });
1034
+ function B(v) {
1035
+ var f;
1036
+ return {
1037
+ source: ((f = l.value) == null ? void 0 : f.join(",")) || void 0,
1038
+ dateFrom: i.value ? L(i.value).startOf("day").toISOString() : void 0,
1039
+ dateTo: c.value ? L(c.value).endOf("day").toISOString() : void 0,
1040
+ locationId: w.value || void 0,
1041
+ excludeDeleted: x.value === "excludeDeleted" ? !0 : void 0,
1042
+ sort: S.value,
1043
+ limit: ne,
1044
+ skip: v
1045
+ };
1046
+ }
1047
+ async function p() {
1048
+ r.value = !0, n.value = !0;
1049
+ try {
1050
+ const v = await ae.listReviews(B(0));
1051
+ a.value = v, n.value = v.length === ne;
1052
+ } finally {
1053
+ r.value = !1;
1054
+ }
1055
+ }
1056
+ async function b() {
1057
+ if (!(r.value || !n.value)) {
1058
+ r.value = !0;
1059
+ try {
1060
+ const v = await ae.listReviews(B(a.value.length));
1061
+ a.value = [...a.value, ...v], n.value = v.length === ne;
1062
+ } finally {
1063
+ r.value = !1;
1064
+ }
1065
+ }
1066
+ }
1067
+ return K(
1068
+ [
1069
+ l,
1070
+ i,
1071
+ c,
1072
+ w,
1073
+ x,
1074
+ S
1075
+ ],
1076
+ p
1077
+ ), te(p), (v, f) => (s(), u("div", fo, [
1078
+ g(go),
1079
+ g(ke, {
1080
+ source: e(l),
1081
+ "onUpdate:source": f[0] || (f[0] = (y) => z(l) ? l.value = y : null),
1082
+ "date-from": e(i),
1083
+ "onUpdate:dateFrom": f[1] || (f[1] = (y) => z(i) ? i.value = y : null),
1084
+ "date-to": e(c),
1085
+ "onUpdate:dateTo": f[2] || (f[2] = (y) => z(c) ? c.value = y : null),
1086
+ "location-id": e(w),
1087
+ "onUpdate:locationId": f[3] || (f[3] = (y) => z(w) ? w.value = y : null),
1088
+ "deleted-filter": e(x),
1089
+ "onUpdate:deletedFilter": f[4] || (f[4] = (y) => z(x) ? x.value = y : null),
1090
+ sort: e(S),
1091
+ "onUpdate:sort": f[5] || (f[5] = (y) => z(S) ? S.value = y : null)
1092
+ }, null, 8, ["source", "date-from", "date-to", "location-id", "deleted-filter", "sort"]),
1093
+ g(to, {
1094
+ reviews: e(a),
1095
+ loading: e(r),
1096
+ "has-more": e(n),
1097
+ onLoadMore: b
1098
+ }, null, 8, ["reviews", "loading", "has-more"])
1099
+ ]));
1100
+ }
1101
+ });
1102
+ export {
1103
+ Io as default
1104
+ };