@feedmepos/mf-miniprogram-v2 0.2.2-dev.1 → 0.2.2-dev.10

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 (33) hide show
  1. package/dist/App-agMiJ0tU.js +197 -0
  2. package/dist/AppTemplatePicker-C0lZyhK2.js +184 -0
  3. package/dist/BrandFontPicker-BFjp8k2W.js +241 -0
  4. package/dist/BrandKitView-DUbIT3c8.js +249 -0
  5. package/dist/{ControlPlaneView-DmhLvgWt.js → ControlPlaneView-BJ6QP0bK.js} +8156 -7843
  6. package/dist/EcosystemView-BgjtBJy_.js +186 -0
  7. package/dist/{LegacyWorkspaceEntry-7DvIosoj.js → LegacyWorkspaceEntry-opz_kWz9.js} +1 -1
  8. package/dist/MobileProjectsView-DAWuOiCr.js +279 -0
  9. package/dist/{ModuleCenterView-Dqp-2hbL.js → ModuleCenterView-DyMr3iWV.js} +34 -34
  10. package/dist/{ModuleDetailView-cpQ_UfS9.js → ModuleDetailView-BeXK89Cs.js} +49 -49
  11. package/dist/{PagesView-CrVOYOT9.js → PagesView-CegMd6GC.js} +3 -3
  12. package/dist/{PlatformUnavailableView-Cdy-1zpi.js → PlatformUnavailableView-j0_2YBKm.js} +2 -2
  13. package/dist/PortalIcon-DO0VrIoY.js +28 -0
  14. package/dist/{PortalSettingsView-CkW-avwg.js → PortalSettingsView-Bqw8tMZb.js} +5 -5
  15. package/dist/WorkspaceEntryView-e2EUnq9A.js +21 -0
  16. package/dist/app.js +17 -11
  17. package/dist/{controlPlane-wUT1G_Gr.js → controlPlane-CoEgf9BA.js} +9 -9
  18. package/dist/{index-BDHUHtRw.js → index-D5qXvcfE.js} +24 -15
  19. package/dist/package.json +1 -1
  20. package/dist/{portalContext-CTVzkJV7.js → portalContext-C4HL_0kl.js} +2 -2
  21. package/dist/portalNavigation-DOF4Ah49.js +28 -0
  22. package/dist/{routes-L0ady_Wy.js → routes-Boz_WlNM.js} +1 -0
  23. package/dist/style.css +1 -1
  24. package/dist/useBrandKit-BlKlqpo2.js +1020 -0
  25. package/dist/{useModuleCatalog-CD5N246F.js → useModuleCatalog-DqECds3F.js} +3 -3
  26. package/package.json +1 -1
  27. package/dist/App-C-7evg9W.js +0 -216
  28. package/dist/BrandKitView-B8t8RkHr.js +0 -221
  29. package/dist/EcosystemView--S4hk_t4.js +0 -232
  30. package/dist/PortalIcon-D1RqQMzD.js +0 -19
  31. package/dist/WorkspaceEntryView-ZdXuMQoJ.js +0 -21
  32. package/dist/portalNavigation-DKCfwTH8.js +0 -28
  33. package/dist/useBrandKit-CpyR2j6m.js +0 -924
@@ -0,0 +1,197 @@
1
+ import { defineComponent as j, computed as y, ref as P, onMounted as z, onBeforeUnmount as K, resolveComponent as f, openBlock as s, createElementBlock as i, Fragment as S, createElementVNode as a, normalizeClass as M, createVNode as t, renderList as w, unref as l, withCtx as u, toDisplayString as d, createCommentVNode as N, createBlock as V } from "vue";
2
+ import { useRoute as A, RouterView as O } from "vue-router";
3
+ import { useCoreStore as $ } from "@feedmepos/mf-common";
4
+ import { P as v } from "./PortalIcon-DO0VrIoY.js";
5
+ import { p as D } from "./portalContext-C4HL_0kl.js";
6
+ import { p as c } from "./portalNavigation-DOF4Ah49.js";
7
+ import { r as q, w as B } from "./localPreference-DneUpUrQ.js";
8
+ import { _ as G } from "./_plugin-vue_export-helper-CHgC5LLL.js";
9
+ const Q = {
10
+ class: "portal-sidebar",
11
+ "aria-label": "Mini Program navigation"
12
+ }, U = ["aria-expanded", "aria-label"], H = {
13
+ id: "miniprogram-navigation",
14
+ class: "portal-nav"
15
+ }, J = { class: "portal-nav-label" }, W = { class: "portal-nav-label" }, X = { class: "portal-main" }, Y = {
16
+ key: 0,
17
+ class: "portal-breadcrumb",
18
+ "aria-label": "Breadcrumb"
19
+ }, Z = {
20
+ id: "miniprogram-content",
21
+ class: "portal-content",
22
+ tabindex: "-1"
23
+ }, ee = {
24
+ key: 0,
25
+ class: "portal-empty"
26
+ }, ae = {
27
+ key: 1,
28
+ class: "portal-loading",
29
+ role: "status"
30
+ }, le = {
31
+ key: 2,
32
+ class: "portal-empty",
33
+ role: "alert"
34
+ }, oe = /* @__PURE__ */ j({
35
+ __name: "App",
36
+ setup(te) {
37
+ const r = A(), k = $(), n = D(), p = y(() => r.name === "miniprogram-v2-project"), b = P(
38
+ q(
39
+ "mpv2:portal-collapsed",
40
+ typeof window < "u" && window.matchMedia("(max-width: 1000px)").matches
41
+ )
42
+ ), g = P(q("mpv2:editor-collapsed", !0)), _ = y(() => p.value ? g.value : b.value), h = y(
43
+ () => {
44
+ var C;
45
+ return p.value ? (C = n.context.value) == null ? void 0 : C.project.name : String(r.meta.title ?? "Ecosystem");
46
+ }
47
+ ), F = [
48
+ { name: "miniprogram-v2-ecosystem", label: "Ecosystem", icon: "ecosystem" },
49
+ { name: "miniprogram-v2-brand-kit", label: "Brand Kit", icon: "brand" },
50
+ { name: "miniprogram-v2-pages", label: "Pages", icon: "pages" }
51
+ ], I = y(() => ({ name: "miniprogram-v2-mobile-projects", query: c(r.query) }));
52
+ let x = !1;
53
+ z(() => {
54
+ x = k.hideSidebar.value, k.hideSidebar.value = !0;
55
+ }), K(() => {
56
+ k.hideSidebar.value = x;
57
+ });
58
+ function L() {
59
+ p.value ? (g.value = !g.value, B("mpv2:editor-collapsed", g.value)) : (b.value = !b.value, B("mpv2:portal-collapsed", b.value));
60
+ }
61
+ return (C, e) => {
62
+ const m = f("RouterLink"), R = f("FmIcon"), E = f("FmCircularProgress"), T = f("FmButton");
63
+ return s(), i(S, null, [
64
+ e[12] || (e[12] = a("link", {
65
+ href: "https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@24,400,0..1,0",
66
+ rel: "stylesheet"
67
+ }, null, -1)),
68
+ a("div", {
69
+ class: M(["mpv2-app portal-shell", { "portal-shell--collapsed": _.value }])
70
+ }, [
71
+ e[11] || (e[11] = a("a", {
72
+ class: "portal-skip",
73
+ href: "#miniprogram-content"
74
+ }, "Skip to content", -1)),
75
+ a("aside", Q, [
76
+ a("button", {
77
+ class: "portal-sidebar-toggle",
78
+ type: "button",
79
+ "aria-expanded": !_.value,
80
+ "aria-controls": "miniprogram-navigation",
81
+ "aria-label": _.value ? "Expand navigation" : "Collapse navigation",
82
+ onClick: L
83
+ }, [
84
+ t(v, { name: "collapse" }),
85
+ e[0] || (e[0] = a("span", { class: "portal-nav-label" }, "Mini Program", -1))
86
+ ], 8, U),
87
+ a("nav", H, [
88
+ (s(), i(S, null, w(F, (o) => t(m, {
89
+ key: o.name,
90
+ to: { name: o.name, query: l(c)(l(r).query) },
91
+ class: "portal-nav-item",
92
+ title: o.label,
93
+ "aria-label": o.label,
94
+ "aria-current": l(r).name === o.name ? "page" : void 0
95
+ }, {
96
+ default: u(() => [
97
+ t(v, {
98
+ name: o.icon
99
+ }, null, 8, ["name"]),
100
+ a("span", J, d(o.label), 1)
101
+ ]),
102
+ _: 2
103
+ }, 1032, ["to", "title", "aria-label", "aria-current"])), 64)),
104
+ e[3] || (e[3] = a("p", { class: "portal-nav-caption" }, "Platforms", -1)),
105
+ t(m, {
106
+ to: I.value,
107
+ class: M(["portal-nav-item", { "router-link-active": p.value }]),
108
+ title: "Mobile Ordering",
109
+ "aria-label": "Mobile Ordering",
110
+ "aria-current": p.value ? "page" : void 0
111
+ }, {
112
+ default: u(() => [
113
+ t(v, { name: "mobile" }),
114
+ e[1] || (e[1] = a("span", { class: "portal-nav-label" }, "Mobile Ordering", -1))
115
+ ]),
116
+ _: 1
117
+ }, 8, ["to", "class", "aria-current"]),
118
+ (s(), i(S, null, w(["tablet", "kiosk"], (o) => t(m, {
119
+ key: o,
120
+ to: { name: `miniprogram-v2-${o}`, query: l(c)(l(r).query) },
121
+ class: "portal-nav-item",
122
+ title: o === "tablet" ? "Tablet" : "Kiosk",
123
+ "aria-label": o === "tablet" ? "Tablet" : "Kiosk"
124
+ }, {
125
+ default: u(() => [
126
+ t(v, { name: o }, null, 8, ["name"]),
127
+ a("span", W, d(o === "tablet" ? "Tablet" : "Kiosk"), 1)
128
+ ]),
129
+ _: 2
130
+ }, 1032, ["to", "title", "aria-label"])), 64)),
131
+ e[4] || (e[4] = a("div", { class: "portal-nav-divider" }, null, -1)),
132
+ t(m, {
133
+ to: { name: "miniprogram-v2-module-center", query: l(c)(l(r).query) },
134
+ class: M(["portal-nav-item", { "router-link-active": l(r).name === "miniprogram-v2-module-detail" }]),
135
+ title: "Module library",
136
+ "aria-label": "Module library"
137
+ }, {
138
+ default: u(() => [
139
+ t(R, {
140
+ name: "widgets",
141
+ size: "md"
142
+ }),
143
+ e[2] || (e[2] = a("span", { class: "portal-nav-label" }, "Module library", -1))
144
+ ]),
145
+ _: 1
146
+ }, 8, ["to", "class"])
147
+ ]),
148
+ t(m, {
149
+ to: { name: "miniprogram-v2-settings", query: l(c)(l(r).query) },
150
+ class: "portal-nav-item portal-settings-link",
151
+ title: "Settings",
152
+ "aria-label": "Settings"
153
+ }, {
154
+ default: u(() => [
155
+ t(v, { name: "settings" }),
156
+ e[5] || (e[5] = a("span", { class: "portal-nav-label" }, "Settings", -1))
157
+ ]),
158
+ _: 1
159
+ }, 8, ["to"])
160
+ ]),
161
+ a("div", X, [
162
+ p.value ? N("", !0) : (s(), i("header", Y, [
163
+ a("span", null, d(l(n).businessName.value), 1),
164
+ e[6] || (e[6] = a("span", { "aria-hidden": "true" }, "/", -1)),
165
+ a("span", null, d(h.value), 1),
166
+ e[7] || (e[7] = a("div", {
167
+ id: "portal-page-actions",
168
+ class: "portal-page-actions"
169
+ }, null, -1))
170
+ ])),
171
+ a("div", Z, [
172
+ l(n).businessId.value ? l(n).loading.value ? (s(), i("div", ae, [
173
+ t(E, { size: "xl" }),
174
+ e[9] || (e[9] = a("span", null, "Loading your Mini Program…", -1))
175
+ ])) : l(n).error.value ? (s(), i("section", le, [
176
+ e[10] || (e[10] = a("h1", null, "Could not open this Mini Program", -1)),
177
+ a("p", null, d(l(n).error.value), 1),
178
+ t(T, {
179
+ label: "Try again",
180
+ onClick: l(n).refresh
181
+ }, null, 8, ["onClick"])
182
+ ])) : (s(), V(l(O), {
183
+ key: `${l(n).businessId.value}:${l(r).params.projectId ?? String(l(r).name)}`
184
+ })) : (s(), i("section", ee, [...e[8] || (e[8] = [
185
+ a("h1", null, "Select a business", -1),
186
+ a("p", null, "Choose a business in the Portal header to open its Mini Program.", -1)
187
+ ])]))
188
+ ])
189
+ ])
190
+ ], 2)
191
+ ], 64);
192
+ };
193
+ }
194
+ }), ve = /* @__PURE__ */ G(oe, [["__scopeId", "data-v-4e1d3418"]]);
195
+ export {
196
+ ve as default
197
+ };
@@ -0,0 +1,184 @@
1
+ import { defineComponent as W, computed as h, openBlock as e, createElementBlock as r, createStaticVNode as v, createCommentVNode as m, ref as J, createElementVNode as l, Fragment as S, renderList as K, normalizeClass as g, toDisplayString as b, createVNode as E } from "vue";
2
+ import { _ as T } from "./_plugin-vue_export-helper-CHgC5LLL.js";
3
+ const F = {
4
+ key: 0,
5
+ viewBox: "0 0 56 96",
6
+ class: "h-[72px] w-[42px] shrink-0 rounded-[6px] border border-portal-border-default bg-portal-bg-default",
7
+ "aria-hidden": "true",
8
+ focusable: "false"
9
+ }, Y = {
10
+ key: 0,
11
+ fill: "currentColor",
12
+ class: "text-fm-color-neutral-gray-300"
13
+ }, A = {
14
+ key: 1,
15
+ fill: "currentColor",
16
+ class: "text-fm-color-neutral-gray-300"
17
+ }, Z = {
18
+ key: 2,
19
+ fill: "currentColor",
20
+ class: "text-fm-color-neutral-gray-300"
21
+ }, I = /* @__PURE__ */ W({
22
+ __name: "AppTemplateThumbnail",
23
+ props: {
24
+ restaurantStyle: {}
25
+ },
26
+ setup(d) {
27
+ const y = d, i = h(
28
+ () => y.restaurantStyle === "qsr" || y.restaurantStyle === "coffee" || y.restaurantStyle === "tea"
29
+ );
30
+ return (U, c) => i.value ? (e(), r("svg", F, [
31
+ d.restaurantStyle === "qsr" ? (e(), r("g", Y, [...c[0] || (c[0] = [
32
+ v('<rect x="6" y="7" width="44" height="6" rx="3"></rect><rect x="6" y="18" width="19" height="18" rx="2"></rect><rect x="31" y="18" width="19" height="18" rx="2"></rect><rect x="6" y="40" width="19" height="18" rx="2"></rect><rect x="31" y="40" width="19" height="18" rx="2"></rect><rect x="6" y="62" width="19" height="18" rx="2"></rect><rect x="31" y="62" width="19" height="18" rx="2"></rect><rect x="6" y="85" width="44" height="7" rx="3.5" class="text-fm-color-neutral-gray-400"></rect>', 8)
33
+ ])])) : d.restaurantStyle === "coffee" ? (e(), r("g", A, [...c[1] || (c[1] = [
34
+ v('<rect x="6" y="7" width="44" height="30" rx="3"></rect><rect x="6" y="43" width="26" height="4" rx="2"></rect><rect x="6" y="53" width="44" height="12" rx="2"></rect><rect x="6" y="69" width="44" height="12" rx="2"></rect><rect x="6" y="87" width="18" height="4" rx="2"></rect>', 5)
35
+ ])])) : (e(), r("g", Z, [...c[2] || (c[2] = [
36
+ v('<rect x="6" y="7" width="44" height="5" rx="2.5"></rect><rect x="6" y="17" width="44" height="9" rx="2"></rect><rect x="6" y="28" width="9" height="4" rx="2" class="text-fm-color-neutral-gray-400"></rect><rect x="18" y="28" width="9" height="4" rx="2" class="text-fm-color-neutral-gray-400"></rect><rect x="30" y="28" width="9" height="4" rx="2" class="text-fm-color-neutral-gray-400"></rect><rect x="6" y="38" width="44" height="9" rx="2"></rect><rect x="6" y="49" width="9" height="4" rx="2" class="text-fm-color-neutral-gray-400"></rect><rect x="18" y="49" width="9" height="4" rx="2" class="text-fm-color-neutral-gray-400"></rect><rect x="6" y="59" width="44" height="9" rx="2"></rect><rect x="6" y="70" width="9" height="4" rx="2" class="text-fm-color-neutral-gray-400"></rect><rect x="18" y="70" width="9" height="4" rx="2" class="text-fm-color-neutral-gray-400"></rect><rect x="30" y="70" width="9" height="4" rx="2" class="text-fm-color-neutral-gray-400"></rect><rect x="6" y="80" width="44" height="9" rx="2"></rect>', 13)
37
+ ])]))
38
+ ])) : m("", !0);
39
+ }
40
+ }), p = "data:image/png;base64,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", L = {
41
+ key: 0,
42
+ class: "rounded-lg border border-portal-border-default bg-portal-bg-default p-16"
43
+ }, P = { class: "mt-12 flex items-start gap-16" }, N = { class: "min-w-0 max-w-[480px] shrink-0" }, O = {
44
+ key: 0,
45
+ class: "m-0 mb-8 fm-typo-en-body-sm-600 uppercase tracking-wide text-portal-text-muted"
46
+ }, R = { class: "flex flex-col gap-8" }, j = ["aria-checked", "disabled", "onClick", "onMouseenter", "onFocus"], C = {
47
+ key: 0,
48
+ class: "h-[6px] w-[6px] rounded-full bg-portal-bg-default"
49
+ }, G = { class: "min-w-0 max-w-[640px] flex-1" }, B = { class: "flex flex-wrap items-center gap-8" }, H = { class: "fm-typo-en-body-md-600 text-portal-text-primary" }, z = {
50
+ key: 0,
51
+ class: "rounded-full bg-portal-bg-canvas px-8 py-[2px] fm-typo-en-body-sm-400 text-portal-text-muted"
52
+ }, M = { class: "mt-4 block fm-typo-en-body-sm-400 text-portal-text-muted" }, D = { class: "sticky top-16 min-w-0 flex-1" }, _ = { class: "overflow-hidden rounded-lg border border-portal-border-default bg-fm-color-neutral-gray-50 p-12" }, $ = {
53
+ key: 0,
54
+ class: "m-0 mt-8"
55
+ }, tt = { class: "preview-strip flex snap-x snap-mandatory gap-8 overflow-x-auto rounded-md" }, et = ["src", "alt"], rt = { class: "m-0 mt-6 flex items-center justify-between fm-typo-en-body-sm-400 text-portal-text-muted" }, lt = { key: 0 }, ot = {
56
+ key: 1,
57
+ class: "m-0 mt-8 flex min-h-[96px] w-full items-center justify-center rounded-md border border-dashed border-fm-color-neutral-gray-300 p-12 text-center fm-typo-en-body-sm-400 text-portal-text-muted"
58
+ }, st = /* @__PURE__ */ W({
59
+ __name: "AppTemplatePicker",
60
+ props: {
61
+ templates: {},
62
+ modelValue: {},
63
+ disabled: { type: Boolean }
64
+ },
65
+ emits: ["update:modelValue"],
66
+ setup(d, { emit: y }) {
67
+ const i = d, U = y, c = h(() => i.templates.length > 1), X = {
68
+ qsr: [p, p, p],
69
+ coffee: [p, p, p],
70
+ tea: [p, p, p]
71
+ }, k = J(null), q = h(() => {
72
+ const a = k.value ?? i.modelValue;
73
+ return (a ? i.templates.find((o) => o.id === a) : void 0) ?? i.templates.find((o) => o.default) ?? i.templates[0] ?? null;
74
+ }), V = h(() => {
75
+ var t;
76
+ const a = (t = q.value) == null ? void 0 : t.restaurantStyle;
77
+ return a ? X[a] : null;
78
+ });
79
+ function x(a) {
80
+ k.value = a;
81
+ }
82
+ const w = h(() => {
83
+ const a = [], t = /* @__PURE__ */ new Map();
84
+ for (const o of i.templates) {
85
+ if (!o.industries.length) {
86
+ a.push(o);
87
+ continue;
88
+ }
89
+ for (const n of o.industries) {
90
+ const u = t.get(n) ?? [];
91
+ u.push(o), t.set(n, u);
92
+ }
93
+ }
94
+ return [
95
+ ...a.length ? [{ label: null, templates: a }] : [],
96
+ ...[...t.entries()].sort(([o], [n]) => o.localeCompare(n)).map(([o, n]) => ({ label: o, templates: n }))
97
+ ];
98
+ });
99
+ function Q(a) {
100
+ i.disabled || U("update:modelValue", a);
101
+ }
102
+ return (a, t) => {
103
+ var o;
104
+ return c.value ? (e(), r("section", L, [
105
+ t[4] || (t[4] = l("p", { class: "m-0 fm-typo-en-body-md-600 text-portal-text-primary" }, "App template", -1)),
106
+ t[5] || (t[5] = l("p", { class: "m-0 mt-4 fm-typo-en-body-sm-400 text-portal-text-muted" }, " The starting code for this merchant's app. This cannot be changed after setup. ", -1)),
107
+ l("div", P, [
108
+ l("div", N, [
109
+ (e(!0), r(S, null, K(w.value, (n, u) => (e(), r("div", {
110
+ key: n.label ?? "__general",
111
+ role: "radiogroup",
112
+ "aria-label": "App template",
113
+ class: g(u === 0 ? "" : "mt-16")
114
+ }, [
115
+ n.label ? (e(), r("p", O, b(n.label), 1)) : m("", !0),
116
+ l("div", R, [
117
+ (e(!0), r(S, null, K(n.templates, (s) => (e(), r("button", {
118
+ key: s.id,
119
+ type: "button",
120
+ role: "radio",
121
+ "aria-checked": d.modelValue === s.id,
122
+ disabled: d.disabled,
123
+ class: g([
124
+ "flex w-full cursor-pointer items-start gap-12 rounded-lg border p-12 text-left transition disabled:cursor-not-allowed disabled:opacity-60",
125
+ d.modelValue === s.id ? "border-fm-color-primary bg-fm-color-primary-50" : "border-fm-color-neutral-gray-200 bg-fm-color-neutral-white hover:border-fm-color-neutral-gray-300"
126
+ ]),
127
+ onClick: (f) => Q(s.id),
128
+ onMouseenter: (f) => x(s.id),
129
+ onMouseleave: t[0] || (t[0] = (f) => x(null)),
130
+ onFocus: (f) => x(s.id),
131
+ onBlur: t[1] || (t[1] = (f) => x(null))
132
+ }, [
133
+ l("span", {
134
+ class: g([
135
+ "mt-[2px] flex h-16 w-16 shrink-0 items-center justify-center rounded-full border",
136
+ d.modelValue === s.id ? "border-fm-color-primary bg-fm-color-primary" : "border-fm-color-neutral-gray-300 bg-fm-color-neutral-white"
137
+ ])
138
+ }, [
139
+ d.modelValue === s.id ? (e(), r("span", C)) : m("", !0)
140
+ ], 2),
141
+ E(I, {
142
+ "restaurant-style": s.restaurantStyle
143
+ }, null, 8, ["restaurant-style"]),
144
+ l("span", G, [
145
+ l("span", B, [
146
+ l("span", H, b(s.label), 1),
147
+ s.default ? (e(), r("span", z, " Default ")) : m("", !0)
148
+ ]),
149
+ l("span", M, b(s.description), 1)
150
+ ])
151
+ ], 42, j))), 128))
152
+ ])
153
+ ], 2))), 128))
154
+ ]),
155
+ l("aside", D, [
156
+ l("div", _, [
157
+ t[3] || (t[3] = l("p", { class: "m-0 fm-typo-en-body-sm-600 text-portal-text-primary" }, "App preview", -1)),
158
+ (o = V.value) != null && o.length ? (e(), r("figure", $, [
159
+ l("div", tt, [
160
+ (e(!0), r(S, null, K(V.value, (n, u) => {
161
+ var s;
162
+ return e(), r("img", {
163
+ key: u,
164
+ src: n,
165
+ alt: `${((s = q.value) == null ? void 0 : s.label) ?? "App template"} preview ${u + 1} of ${V.value.length}`,
166
+ class: "w-[85%] shrink-0 snap-start rounded-md bg-portal-bg-default object-contain"
167
+ }, null, 8, et);
168
+ }), 128))
169
+ ]),
170
+ l("figcaption", rt, [
171
+ t[2] || (t[2] = l("span", null, "Preview illustration · not a live screenshot", -1)),
172
+ V.value.length > 1 ? (e(), r("span", lt, b(V.value.length) + " screens", 1)) : m("", !0)
173
+ ])
174
+ ])) : (e(), r("p", ot, " Preview not available — check the built app for the real result. "))
175
+ ])
176
+ ])
177
+ ])
178
+ ])) : m("", !0);
179
+ };
180
+ }
181
+ }), dt = /* @__PURE__ */ T(st, [["__scopeId", "data-v-000984a6"]]);
182
+ export {
183
+ dt as A
184
+ };
@@ -0,0 +1,241 @@
1
+ import { defineComponent as te, ref as n, computed as F, watch as G, resolveComponent as I, openBlock as s, createElementBlock as u, withKeys as L, withModifiers as N, createElementVNode as a, toDisplayString as k, createVNode as P, withCtx as J, normalizeStyle as E, withDirectives as K, vModelText as q, Fragment as S, renderList as oe, createCommentVNode as v, unref as T, createBlock as ae, createTextVNode as W, nextTick as le } from "vue";
2
+ import { G as V, f as ne, b as p, l as se } from "./useBrandKit-BlKlqpo2.js";
3
+ import { _ as re } from "./_plugin-vue_export-helper-CHgC5LLL.js";
4
+ const xe = "data:image/png;base64,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", ue = ["onKeydown"], ie = { class: "font-picker__label" }, de = ["disabled", "aria-label", "aria-expanded"], ce = ["onKeydown", "aria-label"], ve = {
5
+ key: 0,
6
+ class: "font-picker__muted"
7
+ }, me = ["aria-pressed", "onClick"], pe = { key: 0 }, fe = { key: 1 }, Ae = {
8
+ key: 0,
9
+ class: "font-picker__muted",
10
+ role: "status"
11
+ }, ge = { class: "font-picker__preview" }, be = { class: "font-picker__muted" }, ke = {
12
+ key: 0,
13
+ class: "font-picker__muted",
14
+ role: "status"
15
+ }, we = {
16
+ key: 1,
17
+ class: "font-picker__muted"
18
+ }, ye = {
19
+ key: 0,
20
+ class: "font-picker__muted"
21
+ }, he = /* @__PURE__ */ te({
22
+ __name: "BrandFontPicker",
23
+ props: {
24
+ modelValue: {},
25
+ label: {},
26
+ disabled: { type: Boolean }
27
+ },
28
+ emits: ["update:modelValue"],
29
+ setup(d, { emit: H }) {
30
+ const f = d, j = H, Y = n(), w = n(), B = n(), D = n(360), O = n(), U = n(), m = n(!1), y = n(""), l = n(""), X = n("The quick brown fox jumps over the lazy dog. 0123456789"), c = n({}), A = F(
31
+ () => [
32
+ { name: "App default", value: "", group: "Defaults" },
33
+ { name: "System font", value: "system-ui, sans-serif", group: "Defaults" },
34
+ ...V.map((e) => ({ name: e, value: ne(e), group: "Google Fonts" }))
35
+ ].filter((e) => e.name.toLowerCase().includes(y.value.trim().toLowerCase()))
36
+ ), h = F(() => p(f.modelValue || "")), M = F(() => p(l.value)), R = F(
37
+ () => !!l.value && !V.some((e) => e === M.value) && l.value !== "system-ui, sans-serif"
38
+ );
39
+ async function C(e) {
40
+ if (!(!V.some((t) => t === e) || c.value[e] === "loaded")) {
41
+ c.value[e] = "loading";
42
+ try {
43
+ await se(e), c.value[e] = "loaded";
44
+ } catch {
45
+ c.value[e] = "error";
46
+ }
47
+ }
48
+ }
49
+ G(h, (e) => void C(e), { immediate: !0 }), G(A, (e) => {
50
+ m.value && e.forEach((t) => void C(t.name));
51
+ }), G(
52
+ () => f.disabled,
53
+ (e) => {
54
+ e && Z();
55
+ }
56
+ ), G(() => f.modelValue, Z);
57
+ async function _(e) {
58
+ var t, r;
59
+ m.value = e, e && (D.value = Math.max(320, ((t = Y.value) == null ? void 0 : t.getBoundingClientRect().width) || 360), l.value = f.modelValue || "", y.value = "", m.value = !0, A.value.forEach((i) => void C(i.name)), await le(), (r = U.value) == null || r.focus());
60
+ }
61
+ function Z() {
62
+ var e;
63
+ m.value = !1, (e = B.value) == null || e.hide();
64
+ }
65
+ function z() {
66
+ var e;
67
+ Z(), (e = O.value) == null || e.focus();
68
+ }
69
+ function $() {
70
+ f.disabled || (j("update:modelValue", l.value.trim()), z());
71
+ }
72
+ function Q(e) {
73
+ var r, i;
74
+ const t = e.relatedTarget;
75
+ t && !((r = Y.value) != null && r.contains(t)) && !((i = w.value) != null && i.contains(t)) && Z();
76
+ }
77
+ function ee(e) {
78
+ var x, o;
79
+ if (!["ArrowDown", "ArrowUp", "Home", "End"].includes(e.key)) return;
80
+ const t = [...((x = w.value) == null ? void 0 : x.querySelectorAll("[data-font-option]")) || []];
81
+ if (!t.length) return;
82
+ e.preventDefault();
83
+ const r = t.indexOf(document.activeElement), i = e.key === "Home" ? 0 : e.key === "End" ? t.length - 1 : (r + (e.key === "ArrowDown" ? 1 : -1) + t.length) % t.length;
84
+ (o = t[i]) == null || o.focus();
85
+ }
86
+ return (e, t) => {
87
+ const r = I("FmIcon"), i = I("FmButton"), x = I("FmPopover");
88
+ return s(), u("div", {
89
+ ref_key: "root",
90
+ ref: Y,
91
+ class: "font-picker",
92
+ onFocusout: Q,
93
+ onKeydown: L(N(z, ["stop", "prevent"]), ["esc"])
94
+ }, [
95
+ a("span", ie, k(d.label), 1),
96
+ P(x, {
97
+ ref_key: "popover",
98
+ ref: B,
99
+ "show-popover": m.value,
100
+ disabled: d.disabled,
101
+ onPopoverChanged: _
102
+ }, {
103
+ "popover-button": J(() => [
104
+ a("button", {
105
+ ref_key: "trigger",
106
+ ref: O,
107
+ type: "button",
108
+ class: "font-picker__trigger",
109
+ disabled: d.disabled,
110
+ "aria-label": `${d.label} font: ${h.value}`,
111
+ "aria-haspopup": "dialog",
112
+ "aria-expanded": m.value
113
+ }, [
114
+ a("span", {
115
+ style: E({ fontFamily: d.modelValue || "inherit" })
116
+ }, k(h.value), 5),
117
+ P(r, {
118
+ name: "expand_more",
119
+ size: "sm"
120
+ })
121
+ ], 8, de)
122
+ ]),
123
+ default: J(() => [
124
+ a("div", {
125
+ ref_key: "menu",
126
+ ref: w,
127
+ class: "font-picker__menu",
128
+ style: E({ width: `${D.value}px` }),
129
+ onFocusout: Q,
130
+ onKeydown: L(N(z, ["stop", "prevent"]), ["esc"]),
131
+ role: "dialog",
132
+ "aria-label": `Choose ${d.label.toLowerCase()} font`
133
+ }, [
134
+ t[7] || (t[7] = a("span", { class: "font-picker__muted" }, "Fonts available", -1)),
135
+ K(a("input", {
136
+ ref_key: "search",
137
+ ref: U,
138
+ "onUpdate:modelValue": t[0] || (t[0] = (o) => y.value = o),
139
+ type: "search",
140
+ placeholder: "Search fonts",
141
+ "aria-label": "Search fonts",
142
+ class: "font-picker__input",
143
+ onKeydown: t[1] || (t[1] = L(N((o) => {
144
+ var g, b;
145
+ return (b = (g = w.value) == null ? void 0 : g.querySelector("[data-font-option]")) == null ? void 0 : b.focus();
146
+ }, ["prevent"]), ["down"]))
147
+ }, null, 544), [
148
+ [q, y.value]
149
+ ]),
150
+ a("div", {
151
+ class: "font-picker__options",
152
+ onKeydown: ee
153
+ }, [
154
+ (s(!0), u(S, null, oe(A.value, (o, g) => {
155
+ var b;
156
+ return s(), u(S, {
157
+ key: o.name
158
+ }, [
159
+ g === 0 || ((b = A.value[g - 1]) == null ? void 0 : b.group) !== o.group ? (s(), u("p", ve, k(o.group), 1)) : v("", !0),
160
+ a("button", {
161
+ type: "button",
162
+ "data-font-option": "",
163
+ class: "font-picker__option",
164
+ "aria-pressed": T(p)(l.value) === T(p)(o.value),
165
+ onClick: (Me) => l.value = o.value
166
+ }, [
167
+ a("span", {
168
+ style: E({ fontFamily: o.value || "inherit" })
169
+ }, k(o.name), 5),
170
+ c.value[o.name] === "loading" ? (s(), u("small", pe, "Loading…")) : c.value[o.name] === "error" ? (s(), u("small", fe, "Preview unavailable")) : v("", !0),
171
+ T(p)(l.value) === T(p)(o.value) ? (s(), ae(r, {
172
+ key: 2,
173
+ name: "check",
174
+ size: "sm"
175
+ })) : v("", !0)
176
+ ], 8, me)
177
+ ], 64);
178
+ }), 128)),
179
+ A.value.length ? v("", !0) : (s(), u("p", Ae, "No fonts found. Try another name."))
180
+ ], 32),
181
+ a("div", ge, [
182
+ a("label", be, [
183
+ W("Preview · " + k(M.value) + " ", 1),
184
+ K(a("textarea", {
185
+ "onUpdate:modelValue": t[2] || (t[2] = (o) => X.value = o),
186
+ rows: "2",
187
+ "aria-label": "Font preview text",
188
+ style: E({ fontFamily: l.value || "inherit" })
189
+ }, null, 4), [
190
+ [q, X.value]
191
+ ])
192
+ ]),
193
+ c.value[M.value] === "error" ? (s(), u("p", ke, [
194
+ t[5] || (t[5] = W(" Font preview could not load. Showing a fallback font. ", -1)),
195
+ a("button", {
196
+ type: "button",
197
+ class: "font-picker__retry",
198
+ onClick: t[3] || (t[3] = (o) => C(M.value))
199
+ }, "Retry")
200
+ ])) : v("", !0),
201
+ a("details", null, [
202
+ t[6] || (t[6] = a("summary", null, "Custom font stack", -1)),
203
+ K(a("input", {
204
+ "onUpdate:modelValue": t[4] || (t[4] = (o) => l.value = o),
205
+ class: "font-picker__input",
206
+ "aria-label": "Custom font stack",
207
+ placeholder: "App default",
208
+ spellcheck: "false"
209
+ }, null, 512), [
210
+ [q, l.value]
211
+ ])
212
+ ]),
213
+ R.value ? (s(), u("p", we, "Custom fonts preview only if installed or already loaded.")) : v("", !0)
214
+ ]),
215
+ a("footer", null, [
216
+ P(i, {
217
+ label: "Cancel",
218
+ variant: "tertiary",
219
+ size: "md",
220
+ onClick: z
221
+ }),
222
+ P(i, {
223
+ label: "Apply",
224
+ size: "md",
225
+ disabled: d.disabled,
226
+ onClick: $
227
+ }, null, 8, ["disabled"])
228
+ ])
229
+ ], 44, ce)
230
+ ]),
231
+ _: 1
232
+ }, 8, ["show-popover", "disabled"]),
233
+ c.value[h.value] === "error" ? (s(), u("p", ye, " Preview unavailable; showing a fallback font. ")) : v("", !0)
234
+ ], 40, ue);
235
+ };
236
+ }
237
+ }), Fe = /* @__PURE__ */ re(he, [["__scopeId", "data-v-c563c57c"]]);
238
+ export {
239
+ Fe as B,
240
+ xe as _
241
+ };