@feedmepos/mf-brand-app-builder 0.5.38-prod → 0.5.39-dev.1

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 (29) hide show
  1. package/dist/{App-DCqUhB-s.js → App-BkKpBANO.js} +8 -8
  2. package/dist/{AssetsSettings-Do8rt2sU.js → AssetsSettings-DtZ6goQl.js} +22 -22
  3. package/dist/{BrandkitView-DVLf_gps.js → BrandkitView-BHxLHRHQ.js} +7 -7
  4. package/dist/{BuilderView-DhS8KBGx.js → BuilderView-CXfguRqC.js} +880 -869
  5. package/dist/CredentialSettings-3eVBw1x8.js +204 -0
  6. package/dist/{ImageUpload-CMslvGx1.js → ImageUpload-BPKZzWlC.js} +8 -8
  7. package/dist/{LinkButton-DNXBKGCn.js → LinkButton-De-YNclu.js} +1 -1
  8. package/dist/{ListRepeater-BqO9jrcY.js → ListRepeater--jgzApql.js} +1 -1
  9. package/dist/{ManagementSettings-CgEqhej5.js → ManagementSettings-WLFOtGtA.js} +6 -6
  10. package/dist/{ProjectView-DKXRpIC6.js → ProjectView-Bq9eIS_m.js} +175 -163
  11. package/dist/{SettingsView-uft0uKio.js → SettingsView-C6WNydwT.js} +9 -9
  12. package/dist/app-BhQ6s4xM.js +16209 -0
  13. package/dist/app.js +1 -1
  14. package/dist/client/merchant/src/app.d.ts +14 -0
  15. package/dist/client/merchant/src/components/brandkit/ColorSelection.vue.d.ts +2 -2
  16. package/dist/client/merchant/src/composables/useMiniProgramPermission.d.ts +7 -0
  17. package/dist/{dayjs.min-DnbY0e60.js → dayjs.min-26xBDzV6.js} +1 -1
  18. package/dist/{image-S7-2rbQS.js → image-D_Djf1PS.js} +7 -7
  19. package/dist/{index-BpYD24Jn.js → index-BA2J-Ffh.js} +1 -1
  20. package/dist/{index-CPs0rWCO.js → index-Bk6TOZrx.js} +15 -15
  21. package/dist/index-CVVQJJYY.js +134 -0
  22. package/dist/{index-C6_vWPi0.js → index-D0LOMBBD.js} +27 -27
  23. package/dist/{main-e9233fMv.js → main-D3hu_bbz.js} +527 -524
  24. package/dist/package.json +3 -2
  25. package/dist/{useBusinessFeatureFlag-rGPsfDu1.js → useBusinessFeatureFlag-6P4lr8pM.js} +1 -1
  26. package/package.json +3 -2
  27. package/dist/_commonjsHelpers-DaMA6jEr.js +0 -8
  28. package/dist/app-DExf4FOu.js +0 -14226
  29. package/dist/index-CP6_oC8N.js +0 -134
@@ -0,0 +1,204 @@
1
+ import { defineComponent as B, ref as d, watch as S, resolveComponent as k, createElementBlock as f, openBlock as c, createCommentVNode as w, createBlock as K, renderSlot as D, toDisplayString as F, createElementVNode as m, createVNode as t, Fragment as I } from "vue";
2
+ import { B as P } from "./index-CVVQJJYY.js";
3
+ import { useCoreStore as N, useI18n as $ } from "@feedmepos/mf-common";
4
+ import { K as j } from "./vue-sonner-CBFYmm8_.js";
5
+ const O = { key: 0 }, R = { class: "rounded-md border-2 border-dashed border-fm-color-primary p-16 flex flex-col gap-8 items-center mt-4" }, T = { class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary" }, b = /* @__PURE__ */ B({
6
+ __name: "FileUpload",
7
+ props: {
8
+ label: {},
9
+ modelValue: {},
10
+ accept: {}
11
+ },
12
+ emits: ["update:modelValue"],
13
+ setup(C, { emit: x }) {
14
+ const _ = x, i = d(C.modelValue);
15
+ return S(i, () => {
16
+ _("update:modelValue", i.value);
17
+ }), (s, n) => {
18
+ const y = k("FmDropField"), g = k("FmButton");
19
+ return c(), f("div", null, [
20
+ s.label ? (c(), f("p", O, F(s.label), 1)) : w("", !0),
21
+ i.value ? D(s.$slots, "default", { key: 2 }, () => [
22
+ m("div", R, [
23
+ t(g, {
24
+ variant: "secondary",
25
+ label: "Remove",
26
+ onClick: n[1] || (n[1] = (v) => i.value = void 0)
27
+ }),
28
+ m("p", T, F(i.value.name), 1)
29
+ ])
30
+ ]) : (c(), K(y, {
31
+ key: 1,
32
+ accept: s.accept,
33
+ "max-files": 1,
34
+ onFileUpload: n[0] || (n[0] = (v) => i.value = v)
35
+ }, null, 8, ["accept"]))
36
+ ]);
37
+ };
38
+ }
39
+ }), E = { class: "w-full flex items-center justify-between" }, G = { key: 0 }, J = {
40
+ key: 1,
41
+ class: "relative flex flex-col gap-24"
42
+ }, L = { class: "grid grid-cols-1 lg:grid-cols-2 gap-24" }, q = {
43
+ key: 0,
44
+ class: "space-y-16 p-24 border border-fm-color-neutral-gray-200 rounded-lg bg-white"
45
+ }, z = {
46
+ key: 1,
47
+ class: "space-y-16 p-24 border border-fm-color-neutral-gray-200 rounded-lg bg-white"
48
+ }, H = { class: "grid grid-cols-1 sm:grid-cols-2 gap-16" }, Y = /* @__PURE__ */ B({
49
+ __name: "CredentialSettings",
50
+ setup(C) {
51
+ const x = N(), { t: _ } = $(), l = d(), i = d(), s = d(), n = d(), y = d(), g = d(), v = d(), U = d(!1), V = (a) => new Promise((e, u) => {
52
+ const r = new FileReader();
53
+ r.readAsDataURL(a), r.onload = () => {
54
+ const o = r.result.split(",")[1];
55
+ e(o);
56
+ }, r.onerror = (p) => u(p);
57
+ }), A = async () => {
58
+ U.value = !0, j.promise(
59
+ async () => {
60
+ var e, u, r;
61
+ const a = {
62
+ android: ((e = l.value) == null ? void 0 : e.android) || {},
63
+ ios: ((u = l.value) == null ? void 0 : u.ios) || {},
64
+ ...l.value
65
+ };
66
+ i.value && (a.android.keystore = await V(i.value)), s.value && (a.android.key_properties = await V(
67
+ s.value
68
+ )), n.value && (a.android.service_account_json = await V(
69
+ n.value
70
+ )), y.value && (a.ios.distribution_certificate = await V(
71
+ y.value
72
+ )), g.value && (a.ios.provisioning_profile = await V(
73
+ g.value
74
+ )), v.value && (a.ios.app_store_connect_api_private_key = await V(
75
+ v.value
76
+ )), await P.updateCredentials(
77
+ ((r = x.currentBusiness.value) == null ? void 0 : r.id) || "",
78
+ a
79
+ );
80
+ },
81
+ {
82
+ loading: _("brand.settings.management.toast.saving"),
83
+ success: () => _("brand.settings.management.toast.saved"),
84
+ error: (a) => a.message ?? _("brand.settings.management.toast.errorSaving"),
85
+ finally() {
86
+ U.value = !1;
87
+ }
88
+ }
89
+ );
90
+ };
91
+ return S(
92
+ () => x.currentBusiness.value,
93
+ async (a, e) => {
94
+ a && a._id != (e == null ? void 0 : e._id) && (l.value = await P.getCredentials(a._id).catch((u) => (console.error(u), {
95
+ android: {},
96
+ ios: {}
97
+ })));
98
+ },
99
+ {
100
+ immediate: !0
101
+ }
102
+ ), (a, e) => {
103
+ const u = k("FmButton"), r = k("FmCircularProgress"), p = k("FmTextField");
104
+ return c(), f(I, null, [
105
+ m("div", E, [
106
+ e[11] || (e[11] = m("h2", { class: "fm-typo-en-title-sm-600 text-fm-color-typo-primary" }, " Native Credentials ", -1)),
107
+ t(u, {
108
+ variant: "primary",
109
+ label: "Save Credentials",
110
+ loading: U.value,
111
+ onClick: A
112
+ }, null, 8, ["loading"])
113
+ ]),
114
+ l.value ? (c(), f("div", J, [
115
+ m("div", L, [
116
+ l.value.android ? (c(), f("div", q, [
117
+ e[12] || (e[12] = m("h2", { class: "text-xl font-bold text-fm-color-typo-primary" }, "Android", -1)),
118
+ t(p, {
119
+ modelValue: l.value.android.package_name,
120
+ "onUpdate:modelValue": e[0] || (e[0] = (o) => l.value.android.package_name = o),
121
+ label: "Package Name",
122
+ placeholder: "com.example.app"
123
+ }, null, 8, ["modelValue"]),
124
+ t(b, {
125
+ label: "Upload Keystore (.jks or .keystore)",
126
+ accept: ".jks,.keystore",
127
+ "max-files": 1,
128
+ modelValue: i.value,
129
+ "onUpdate:modelValue": e[1] || (e[1] = (o) => i.value = o)
130
+ }, null, 8, ["modelValue"]),
131
+ t(b, {
132
+ label: "Upload Key Properties (key.properties)",
133
+ accept: ".properties",
134
+ "max-files": 1,
135
+ modelValue: s.value,
136
+ "onUpdate:modelValue": e[2] || (e[2] = (o) => s.value = o)
137
+ }, null, 8, ["modelValue"]),
138
+ t(b, {
139
+ label: "Upload Service Account JSON (Google Play)",
140
+ accept: ".json",
141
+ "max-files": 1,
142
+ modelValue: n.value,
143
+ "onUpdate:modelValue": e[3] || (e[3] = (o) => n.value = o)
144
+ }, null, 8, ["modelValue"])
145
+ ])) : w("", !0),
146
+ l.value.ios ? (c(), f("div", z, [
147
+ e[13] || (e[13] = m("h2", { class: "text-xl font-bold text-fm-color-typo-primary" }, "iOS", -1)),
148
+ m("div", H, [
149
+ t(p, {
150
+ modelValue: l.value.ios.bundle_id,
151
+ "onUpdate:modelValue": e[4] || (e[4] = (o) => l.value.ios.bundle_id = o),
152
+ label: "Bundle ID",
153
+ placeholder: "com.example.app"
154
+ }, null, 8, ["modelValue"]),
155
+ t(p, {
156
+ modelValue: l.value.ios.password,
157
+ "onUpdate:modelValue": e[5] || (e[5] = (o) => l.value.ios.password = o),
158
+ label: "Certificate Password",
159
+ type: "password"
160
+ }, null, 8, ["modelValue"])
161
+ ]),
162
+ t(p, {
163
+ modelValue: l.value.ios.provisioning_profile_uuid,
164
+ "onUpdate:modelValue": e[6] || (e[6] = (o) => l.value.ios.provisioning_profile_uuid = o),
165
+ label: "Provisioning Profile UUID (Optional)"
166
+ }, null, 8, ["modelValue"]),
167
+ t(p, {
168
+ modelValue: l.value.ios.app_store_connect_api_key_id,
169
+ "onUpdate:modelValue": e[7] || (e[7] = (o) => l.value.ios.app_store_connect_api_key_id = o),
170
+ label: "App Store Connect API Key ID"
171
+ }, null, 8, ["modelValue"]),
172
+ t(b, {
173
+ label: "Upload Distribution Certificate (.p12)",
174
+ accept: ".p12",
175
+ "max-files": 1,
176
+ modelValue: y.value,
177
+ "onUpdate:modelValue": e[8] || (e[8] = (o) => y.value = o)
178
+ }, null, 8, ["modelValue"]),
179
+ t(b, {
180
+ label: "Upload Provisioning Profile (.mobileprovision)",
181
+ accept: ".mobileprovision",
182
+ "max-files": 1,
183
+ modelValue: g.value,
184
+ "onUpdate:modelValue": e[9] || (e[9] = (o) => g.value = o)
185
+ }, null, 8, ["modelValue"]),
186
+ t(b, {
187
+ label: "Upload App Store Connect API Private Key (.p8)",
188
+ accept: ".p8",
189
+ "max-files": 1,
190
+ modelValue: v.value,
191
+ "onUpdate:modelValue": e[10] || (e[10] = (o) => v.value = o)
192
+ }, null, 8, ["modelValue"])
193
+ ])) : w("", !0)
194
+ ])
195
+ ])) : (c(), f("div", G, [
196
+ t(r)
197
+ ]))
198
+ ], 64);
199
+ };
200
+ }
201
+ });
202
+ export {
203
+ Y as default
204
+ };
@@ -1,7 +1,7 @@
1
- import { defineComponent as y, ref as b, resolveComponent as w, createElementBlock as r, openBlock as s, createVNode as c, createCommentVNode as d, Fragment as C, createElementVNode as i, unref as u } from "vue";
2
- import { r as g, I as h } from "./image-S7-2rbQS.js";
1
+ import { defineComponent as y, ref as b, resolveComponent as w, createElementBlock as r, openBlock as s, createVNode as c, createCommentVNode as f, Fragment as C, createElementVNode as i, unref as u } from "vue";
2
+ import { r as g, I as h } from "./image-D_Djf1PS.js";
3
3
  import { useCoreStore as I } from "@feedmepos/mf-common";
4
- import "./main-e9233fMv.js";
4
+ import "./main-D3hu_bbz.js";
5
5
  import { _ as $ } from "./Icon.vue_vue_type_style_index_0_lang-BcRjQndc.js";
6
6
  import { C as k } from "./CircularProgress-DdblYCtV.js";
7
7
  import { v as F } from "./v4-CKwdnpQf.js";
@@ -22,12 +22,12 @@ const B = { class: "w-full h-[210px] relative" }, P = { class: "absolute z-[1] t
22
22
  o
23
23
  ).then((m) => {
24
24
  var p;
25
- const l = `https://image.feedme.cc/business/${a.currentBusiness.value._id}/${m.imagePath}`;
25
+ const l = `https://image.feedmedev.cc/business/${a.currentBusiness.value._id}/${m.imagePath}`;
26
26
  e.context.node.input(l);
27
27
  const n = new Image();
28
28
  (p = e.context) != null && p.ignoreUpdate || (n.onload = () => {
29
- var f;
30
- ((f = e.context.node.at("$root")) == null ? void 0 : f._value).containerStyles.height = `${Math.min(n.height, 400)}px`;
29
+ var d;
30
+ ((d = e.context.node.at("$root")) == null ? void 0 : d._value).containerStyles.height = `${Math.min(n.height, 400)}px`;
31
31
  }), n.src = g(l);
32
32
  }).finally(() => t.value = !1);
33
33
  }
@@ -60,10 +60,10 @@ const B = { class: "w-full h-[210px] relative" }, P = { class: "absolute z-[1] t
60
60
  class: "!text-[16px] text-fm-color-typo-white"
61
61
  })
62
62
  ])
63
- ], 64)) : d("", !0),
63
+ ], 64)) : f("", !0),
64
64
  t.value ? (s(), r("div", z, [
65
65
  c(u(k))
66
- ])) : d("", !0)
66
+ ])) : f("", !0)
67
67
  ]);
68
68
  };
69
69
  }
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as I, ref as f, computed as k, onBeforeMount as L, resolveComponent as c, createBlock as v, openBlock as u, withCtx as m, createElementVNode as a, createVNode as r, createElementBlock as x, Fragment as M, renderList as F, toDisplayString as P, withModifiers as R } from "vue";
2
2
  import { B as y } from "./BaDivider-Cp9gfB4r.js";
3
3
  import { _ as W } from "./Icon.vue_vue_type_style_index_0_lang-BcRjQndc.js";
4
- import { u as $ } from "./index-CPs0rWCO.js";
4
+ import { u as $ } from "./index-Bk6TOZrx.js";
5
5
  import "@feedmepos/mf-common";
6
6
  const j = {
7
7
  key: 1,
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as b, resolveComponent as y, createBlock as s, openBlock as c, unref as u, withCtx as i, createElementBlock as m, Fragment as x, renderList as g, createElementVNode as p, createVNode as n, resolveDynamicComponent as F } from "vue";
2
- import { F as f } from "./app-DExf4FOu.js";
2
+ import { F as f } from "./app-BhQ6s4xM.js";
3
3
  const h = { class: "flex justify-end gap-4 items-center w-full py-16 px-12 border-b" }, z = { class: "flex flex-col gap-4 w-full p-12" }, I = /* @__PURE__ */ b({
4
4
  __name: "ListRepeater",
5
5
  props: {
@@ -1,8 +1,8 @@
1
1
  import { defineComponent as F, ref as _, computed as I, watch as V, resolveComponent as d, createElementBlock as b, openBlock as p, createElementVNode as o, createVNode as m, toDisplayString as B, unref as l, createBlock as q, createCommentVNode as T, withCtx as A } from "vue";
2
2
  import { useCoreStore as R, useI18n as N } from "@feedmepos/mf-common";
3
- import { B as g } from "./index-CP6_oC8N.js";
3
+ import { B as g } from "./index-CVVQJJYY.js";
4
4
  import { K as x } from "./vue-sonner-CBFYmm8_.js";
5
- import { r as D, I as j } from "./image-S7-2rbQS.js";
5
+ import { r as D, I as j } from "./image-D_Djf1PS.js";
6
6
  import { useSnackbar as E } from "@feedmepos/ui-library";
7
7
  const K = new RegExp(/^[a-z0-9][a-z0-9\-]{4,}[a-z0-9]$/), L = [
8
8
  "brand",
@@ -510,7 +510,7 @@ const K = new RegExp(/^[a-z0-9][a-z0-9\-]{4,}[a-z0-9]$/), L = [
510
510
  url: "",
511
511
  thumbnail: ""
512
512
  }), z = I(
513
- () => "https://{slug}.feedme.vip".replace("https://{slug}", "")
513
+ () => "https://{slug}.feedmedev.vip".replace("https://{slug}", "")
514
514
  );
515
515
  function f(t) {
516
516
  var n;
@@ -525,7 +525,7 @@ const K = new RegExp(/^[a-z0-9][a-z0-9\-]{4,}[a-z0-9]$/), L = [
525
525
  function C() {
526
526
  var t;
527
527
  navigator.clipboard.writeText(
528
- "https://{slug}.feedme.vip".replace(
528
+ "https://{slug}.feedmedev.vip".replace(
529
529
  "{slug}",
530
530
  f((t = e.currentBusiness.value) == null ? void 0 : t.url)
531
531
  )
@@ -603,9 +603,9 @@ const K = new RegExp(/^[a-z0-9][a-z0-9\-]{4,}[a-z0-9]$/), L = [
603
603
  await g.updateBusinessProfile(e.currentBusiness.value._id, {
604
604
  name: s.value.name,
605
605
  url: s.value.url,
606
- thumbnail: `https://image.feedme.cc/business/${e.currentBusiness.value._id}/${u.imagePath}`,
606
+ thumbnail: `https://image.feedmedev.cc/business/${e.currentBusiness.value._id}/${u.imagePath}`,
607
607
  coverPhoto: e.currentBusiness.value.coverPhoto
608
- }), e.currentBusiness.value.thumbnail = `https://image.feedme.cc/business/${e.currentBusiness.value._id}/${u.imagePath}`, s.value.thumbnail = `https://image.feedme.cc/business/${e.currentBusiness.value._id}/${u.imagePath}`;
608
+ }), e.currentBusiness.value.thumbnail = `https://image.feedmedev.cc/business/${e.currentBusiness.value._id}/${u.imagePath}`, s.value.thumbnail = `https://image.feedmedev.cc/business/${e.currentBusiness.value._id}/${u.imagePath}`;
609
609
  });
610
610
  }
611
611
  return V(