@feedmepos/mf-miniprogram-v2 0.2.8-dev.3 → 0.2.8-dev.5
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.
- package/dist/{App-h0NGA3Bx.js → App-CFKKclWT.js} +2 -2
- package/dist/{BrandFontPicker-sTKNoOX3.js → BrandFontPicker-VX2LAN2w.js} +1 -1
- package/dist/{BrandKitView-DpeuJ5Mj.js → BrandKitView-CB7kcVy2.js} +2 -2
- package/dist/{ControlPlaneView-7i6SXbEK.js → ControlPlaneView-DhAZbPoA.js} +11085 -10070
- package/dist/{EcosystemView-BUG7Dp_e.js → EcosystemView-hqiZRHIC.js} +5 -5
- package/dist/MobileProjectDialog-CZWx6IYl.js +430 -0
- package/dist/MobileProjectsView-BlQQvHCc.js +232 -0
- package/dist/{ModuleCenterView-DdExY27I.js → ModuleCenterView-CY8o1GJG.js} +1 -1
- package/dist/{ModuleDetailView-2ZG2PgWE.js → ModuleDetailView-BuZgg6e0.js} +1 -1
- package/dist/{PagesView-CNnihrLK.js → PagesView-3KDcHMIh.js} +1 -1
- package/dist/{PortalSettingsView-tEQ8--VB.js → PortalSettingsView-BVgkeXpL.js} +2 -2
- package/dist/StatusBadge.vue_vue_type_script_setup_true_lang-DMm_s9ua.js +41 -0
- package/dist/{TemplateCenterView-BjuZj_3I.js → TemplateCenterView-UQ03rcwn.js} +2 -2
- package/dist/{WorkspaceEntryView-aesHR5VT.js → WorkspaceEntryView-BMrZWby1.js} +1 -1
- package/dist/{adminAccess-Bud1ltTs.js → adminAccess-B8pYZwW9.js} +2 -2
- package/dist/app.js +11 -11
- package/dist/{controlPlane--Q2ulw38.js → controlPlane-DR5ykj4d.js} +8 -8
- package/dist/package.json +1 -1
- package/dist/{portalContext-CzdVaxBH.js → portalContext-BKjPuVfn.js} +2 -2
- package/dist/{routes-CJa85dEy.js → routes-i1Lpq1LK.js} +29 -25
- package/dist/style.css +1 -1
- package/dist/{useBrandKit-Cw3bBugv.js → useBrandKit-CKn1fm2o.js} +1 -1
- package/dist/{useModuleCatalog-n2zRBLFf.js → useModuleCatalog-u7EWW11V.js} +2 -2
- package/package.json +1 -1
- package/dist/AppTemplatePicker.vue_vue_type_script_setup_true_lang-BeNabALJ.js +0 -270
- package/dist/MobileProjectsView-DP_MBdDX.js +0 -400
- package/dist/StatusBadge.vue_vue_type_script_setup_true_lang-CMgQ0bd_.js +0 -30
|
@@ -1,400 +0,0 @@
|
|
|
1
|
-
import { defineComponent as O, ref as p, onMounted as Y, resolveComponent as I, openBlock as a, createBlock as P, withCtx as q, createVNode as f, normalizeClass as K, createElementBlock as l, createElementVNode as y, toDisplayString as V, Fragment as $, createCommentVNode as w, computed as E, h as d, withModifiers as L, onScopeDispose as Q, createTextVNode as U, unref as z } from "vue";
|
|
2
|
-
import { useRoute as W, useRouter as X } from "vue-router";
|
|
3
|
-
import { components as Z, useDialog as ee } from "@feedmepos/ui-library";
|
|
4
|
-
import { a as M } from "./routes-CJa85dEy.js";
|
|
5
|
-
import { c as R, e as D, a as te } from "./controlPlane--Q2ulw38.js";
|
|
6
|
-
import { u as ae } from "./portalContext-CzdVaxBH.js";
|
|
7
|
-
import { w as B } from "./portalNavigation-L5VwKlps.js";
|
|
8
|
-
import { _ as oe, p as le } from "./AppTemplatePicker.vue_vue_type_script_setup_true_lang-BeNabALJ.js";
|
|
9
|
-
import { m as se } from "./index-CIJWcl_6.js";
|
|
10
|
-
import { _ as G } from "./_plugin-vue_export-helper-CHgC5LLL.js";
|
|
11
|
-
import { _ as A } from "./StatusBadge.vue_vue_type_script_setup_true_lang-CMgQ0bd_.js";
|
|
12
|
-
const re = ["miniprogram-vue"], ne = {
|
|
13
|
-
key: 0,
|
|
14
|
-
class: "project-dialog__head"
|
|
15
|
-
}, ie = { key: 1 }, ue = { class: "project-dialog__body" }, de = {
|
|
16
|
-
key: 0,
|
|
17
|
-
role: "status"
|
|
18
|
-
}, ce = {
|
|
19
|
-
key: 2,
|
|
20
|
-
class: "portal-error",
|
|
21
|
-
role: "alert"
|
|
22
|
-
}, pe = {
|
|
23
|
-
key: 0,
|
|
24
|
-
class: "project-dialog__note"
|
|
25
|
-
}, me = {
|
|
26
|
-
key: 1,
|
|
27
|
-
class: "portal-error",
|
|
28
|
-
role: "alert"
|
|
29
|
-
}, ve = /* @__PURE__ */ O({
|
|
30
|
-
__name: "MobileProjectDialog",
|
|
31
|
-
props: {
|
|
32
|
-
businessId: {},
|
|
33
|
-
projectId: {},
|
|
34
|
-
initialName: {}
|
|
35
|
-
},
|
|
36
|
-
emits: ["saved", "close"],
|
|
37
|
-
setup(T, { emit: x }) {
|
|
38
|
-
const c = T, m = x, r = p(c.initialName ?? ""), i = p(null), v = p([]), n = !c.projectId, b = p(n), s = p(!1), u = p(""), C = se(), j = p(n ? "template" : "name"), S = p("");
|
|
39
|
-
async function N() {
|
|
40
|
-
var _, o;
|
|
41
|
-
b.value = !0, u.value = "";
|
|
42
|
-
try {
|
|
43
|
-
const k = await R(M.appTemplates());
|
|
44
|
-
v.value = k.templates, i.value = ((_ = k.templates.find((h) => !re.includes(h.id))) == null ? void 0 : _.id) ?? ((o = k.templates[0]) == null ? void 0 : o.id) ?? null;
|
|
45
|
-
} catch (k) {
|
|
46
|
-
u.value = D(k);
|
|
47
|
-
} finally {
|
|
48
|
-
b.value = !1;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
function t() {
|
|
52
|
-
i.value && (j.value = "name");
|
|
53
|
-
}
|
|
54
|
-
function e() {
|
|
55
|
-
j.value = "template";
|
|
56
|
-
}
|
|
57
|
-
async function F() {
|
|
58
|
-
if (!(s.value || !r.value.trim() || r.value.trim().length > 120 || n && !i.value)) {
|
|
59
|
-
s.value = !0, u.value = "";
|
|
60
|
-
try {
|
|
61
|
-
const _ = await R(
|
|
62
|
-
c.projectId ? M.project(c.businessId, c.projectId) : M.projects(c.businessId),
|
|
63
|
-
{
|
|
64
|
-
method: c.projectId ? "PATCH" : "POST",
|
|
65
|
-
body: JSON.stringify({
|
|
66
|
-
name: r.value.trim(),
|
|
67
|
-
...c.projectId ? {} : {
|
|
68
|
-
projectId: C,
|
|
69
|
-
kind: "mobile",
|
|
70
|
-
appTemplate: i.value,
|
|
71
|
-
country: te()
|
|
72
|
-
}
|
|
73
|
-
})
|
|
74
|
-
}
|
|
75
|
-
);
|
|
76
|
-
m("saved", _);
|
|
77
|
-
} catch (_) {
|
|
78
|
-
u.value = D(_);
|
|
79
|
-
} finally {
|
|
80
|
-
s.value = !1;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return Y(() => {
|
|
85
|
-
n && N();
|
|
86
|
-
}), (_, o) => {
|
|
87
|
-
const k = I("FmTextField"), h = I("FmButton"), H = I("FmCard"), J = I("FmForm");
|
|
88
|
-
return a(), P(J, { onValidationSuccess: F }, {
|
|
89
|
-
default: q(() => [
|
|
90
|
-
f(H, {
|
|
91
|
-
class: K(["project-dialog", j.value === "template" ? "project-dialog--wide" : ""])
|
|
92
|
-
}, {
|
|
93
|
-
default: q(() => [
|
|
94
|
-
j.value === "template" ? (a(), l("div", ne, [
|
|
95
|
-
o[5] || (o[5] = y("h2", null, "Choose a template", -1)),
|
|
96
|
-
f(k, {
|
|
97
|
-
modelValue: S.value,
|
|
98
|
-
"onUpdate:modelValue": o[0] || (o[0] = (g) => S.value = g),
|
|
99
|
-
placeholder: "Search",
|
|
100
|
-
disabled: s.value,
|
|
101
|
-
class: "project-dialog__search"
|
|
102
|
-
}, null, 8, ["modelValue", "disabled"])
|
|
103
|
-
])) : (a(), l("h2", ie, V(T.projectId ? "Rename project" : "Name your project"), 1)),
|
|
104
|
-
y("div", ue, [
|
|
105
|
-
j.value === "template" ? (a(), l($, { key: 0 }, [
|
|
106
|
-
b.value ? (a(), l("p", de, "Loading templates…")) : (a(), P(oe, {
|
|
107
|
-
key: 1,
|
|
108
|
-
templates: v.value,
|
|
109
|
-
modelValue: i.value,
|
|
110
|
-
"onUpdate:modelValue": o[1] || (o[1] = (g) => i.value = g),
|
|
111
|
-
search: S.value,
|
|
112
|
-
disabled: s.value,
|
|
113
|
-
onAdvance: t
|
|
114
|
-
}, null, 8, ["templates", "modelValue", "search", "disabled"])),
|
|
115
|
-
u.value ? (a(), l("p", ce, V(u.value), 1)) : w("", !0),
|
|
116
|
-
!v.value.length && !b.value ? (a(), P(h, {
|
|
117
|
-
key: 3,
|
|
118
|
-
label: "Retry loading templates",
|
|
119
|
-
variant: "secondary",
|
|
120
|
-
onClick: N
|
|
121
|
-
})) : w("", !0)
|
|
122
|
-
], 64)) : (a(), l($, { key: 1 }, [
|
|
123
|
-
f(k, {
|
|
124
|
-
modelValue: r.value,
|
|
125
|
-
"onUpdate:modelValue": o[2] || (o[2] = (g) => r.value = g),
|
|
126
|
-
label: "Project name",
|
|
127
|
-
placeholder: "e.g. Summer ordering",
|
|
128
|
-
disabled: s.value,
|
|
129
|
-
rules: [(g) => g.trim().length > 0 && g.trim().length <= 120 || "Enter a name up to 120 characters"]
|
|
130
|
-
}, null, 8, ["modelValue", "disabled", "rules"]),
|
|
131
|
-
n ? (a(), l("p", pe, "Start a separate app from a template. Your live app stays as it is.")) : w("", !0),
|
|
132
|
-
u.value ? (a(), l("p", me, V(u.value), 1)) : w("", !0)
|
|
133
|
-
], 64))
|
|
134
|
-
]),
|
|
135
|
-
y("footer", null, [
|
|
136
|
-
j.value === "template" ? (a(), l($, { key: 0 }, [
|
|
137
|
-
f(h, {
|
|
138
|
-
label: "Cancel",
|
|
139
|
-
variant: "tertiary",
|
|
140
|
-
disabled: s.value,
|
|
141
|
-
onClick: o[3] || (o[3] = (g) => m("close"))
|
|
142
|
-
}, null, 8, ["disabled"]),
|
|
143
|
-
f(h, {
|
|
144
|
-
label: "Next",
|
|
145
|
-
type: "button",
|
|
146
|
-
disabled: b.value || !i.value,
|
|
147
|
-
onClick: t
|
|
148
|
-
}, null, 8, ["disabled"])
|
|
149
|
-
], 64)) : (a(), l($, { key: 1 }, [
|
|
150
|
-
n ? (a(), P(h, {
|
|
151
|
-
key: 0,
|
|
152
|
-
label: "Back",
|
|
153
|
-
variant: "tertiary",
|
|
154
|
-
disabled: s.value,
|
|
155
|
-
onClick: e
|
|
156
|
-
}, null, 8, ["disabled"])) : w("", !0),
|
|
157
|
-
f(h, {
|
|
158
|
-
label: "Cancel",
|
|
159
|
-
variant: "tertiary",
|
|
160
|
-
disabled: s.value,
|
|
161
|
-
onClick: o[4] || (o[4] = (g) => m("close"))
|
|
162
|
-
}, null, 8, ["disabled"]),
|
|
163
|
-
f(h, {
|
|
164
|
-
label: T.projectId ? "Save" : "Create project",
|
|
165
|
-
type: "submit",
|
|
166
|
-
loading: s.value,
|
|
167
|
-
disabled: !r.value.trim() || r.value.trim().length > 120 || n && !i.value
|
|
168
|
-
}, null, 8, ["label", "loading", "disabled"])
|
|
169
|
-
], 64))
|
|
170
|
-
])
|
|
171
|
-
]),
|
|
172
|
-
_: 1
|
|
173
|
-
}, 8, ["class"])
|
|
174
|
-
]),
|
|
175
|
-
_: 1
|
|
176
|
-
});
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
}), be = /* @__PURE__ */ G(ve, [["__scopeId", "data-v-46ec1d0a"]]), ge = { class: "portal-page" }, fe = { class: "portal-page-inner" }, ye = { class: "portal-page-heading" }, _e = {
|
|
180
|
-
key: 0,
|
|
181
|
-
class: "mobile-projects__count"
|
|
182
|
-
}, je = {
|
|
183
|
-
key: 0,
|
|
184
|
-
class: "portal-error",
|
|
185
|
-
role: "alert"
|
|
186
|
-
}, ke = {
|
|
187
|
-
key: 1,
|
|
188
|
-
role: "status"
|
|
189
|
-
}, he = {
|
|
190
|
-
key: 2,
|
|
191
|
-
class: "portal-empty"
|
|
192
|
-
}, we = {
|
|
193
|
-
key: 3,
|
|
194
|
-
class: "rounded-2xl border border-portal-border-default bg-portal-bg-default",
|
|
195
|
-
"aria-label": "Mobile projects"
|
|
196
|
-
}, Ce = /* @__PURE__ */ O({
|
|
197
|
-
__name: "MobileProjectsView",
|
|
198
|
-
setup(T) {
|
|
199
|
-
const { FmButton: x } = Z, c = ae(), m = W(), r = X(), i = ee(), v = p([]), n = p(!0), b = p(""), s = new AbortController();
|
|
200
|
-
async function u() {
|
|
201
|
-
n.value = !0, b.value = "";
|
|
202
|
-
try {
|
|
203
|
-
const t = await R(M.projects(c.businessId.value), {
|
|
204
|
-
signal: s.signal
|
|
205
|
-
});
|
|
206
|
-
v.value = t.projects;
|
|
207
|
-
} catch (t) {
|
|
208
|
-
s.signal.aborted || (b.value = D(t));
|
|
209
|
-
} finally {
|
|
210
|
-
n.value = !1;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
function C(t) {
|
|
214
|
-
i.open({
|
|
215
|
-
title: t ? "Rename project" : "New Mobile project",
|
|
216
|
-
// MobileProjectDialog draws its own header (a step title, plus the
|
|
217
|
-
// template step's search box) and its own Cancel/Next/Back/Create
|
|
218
|
-
// buttons — FmDynamicDialog's default close icon is absolutely
|
|
219
|
-
// positioned in the dialog's own top-right corner regardless of what
|
|
220
|
-
// dialogComponent puts there, so left on it sits on top of the search
|
|
221
|
-
// box instead of a page area with room reserved for it (same fix as
|
|
222
|
-
// PreviewPanel.vue's openLibraryExpandDialog).
|
|
223
|
-
closeButton: !1,
|
|
224
|
-
dialogComponent: be,
|
|
225
|
-
dialogComponentProps: {
|
|
226
|
-
businessId: c.businessId.value,
|
|
227
|
-
projectId: t == null ? void 0 : t.projectId,
|
|
228
|
-
initialName: t == null ? void 0 : t.name,
|
|
229
|
-
onClose: () => i.close(),
|
|
230
|
-
onSaved: (e) => {
|
|
231
|
-
i.close(), t ? u() : r.push(B(e.projectId, "workspace", m.query, { setup: !0 }));
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
function j(t) {
|
|
237
|
-
return new Intl.DateTimeFormat(void 0, { dateStyle: "medium", timeStyle: "short" }).format(new Date(t));
|
|
238
|
-
}
|
|
239
|
-
const S = E(() => [
|
|
240
|
-
{
|
|
241
|
-
id: "project",
|
|
242
|
-
header: () => "Project",
|
|
243
|
-
cell: (t) => {
|
|
244
|
-
const e = t.row.original;
|
|
245
|
-
return d("div", { class: "flex min-w-0 flex-col gap-2" }, [
|
|
246
|
-
d("span", { class: "truncate fm-typo-en-body-md-600 text-portal-text-primary" }, e.name),
|
|
247
|
-
d(
|
|
248
|
-
"span",
|
|
249
|
-
{ class: "fm-typo-en-body-sm-400 text-portal-text-muted", title: e.projectId },
|
|
250
|
-
`…${e.projectId.slice(-6)}`
|
|
251
|
-
)
|
|
252
|
-
]);
|
|
253
|
-
}
|
|
254
|
-
},
|
|
255
|
-
{
|
|
256
|
-
id: "setup",
|
|
257
|
-
header: () => "Setup",
|
|
258
|
-
size: 130,
|
|
259
|
-
enableSorting: !1,
|
|
260
|
-
cell: (t) => d(
|
|
261
|
-
A,
|
|
262
|
-
{ variant: t.row.original.provisioningStatus === "failed" ? "error" : "neutral", size: "sm" },
|
|
263
|
-
() => le(t.row.original.provisioningStatus)
|
|
264
|
-
)
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
id: "live",
|
|
268
|
-
header: () => "Live",
|
|
269
|
-
size: 200,
|
|
270
|
-
enableSorting: !1,
|
|
271
|
-
// Badges only. The muted sentence this replaces ("Unpublished release
|
|
272
|
-
// available") was the one thing in the row set in prose, and prose in a 200px
|
|
273
|
-
// column wraps — which is what made the cell look crowded. The state it
|
|
274
|
-
// carried is worth keeping, so it becomes a second tag rather than going away:
|
|
275
|
-
// it is the only place in this list that shows a merchant they have work built
|
|
276
|
-
// and waiting to go live.
|
|
277
|
-
//
|
|
278
|
-
// Nothing is rendered for a project with no pending release. That is the
|
|
279
|
-
// resting state of most rows, and a tag saying so would be back to filling the
|
|
280
|
-
// column with "nothing happened".
|
|
281
|
-
cell: (t) => {
|
|
282
|
-
const e = t.row.original;
|
|
283
|
-
return d("div", { class: "flex flex-wrap items-center gap-4" }, [
|
|
284
|
-
// "Live project" in a column headed Live said the word twice, and cost the
|
|
285
|
-
// width that made the line below it wrap.
|
|
286
|
-
d(
|
|
287
|
-
A,
|
|
288
|
-
{ variant: e.isLive ? "success" : "neutral", size: "sm" },
|
|
289
|
-
() => e.isLive ? "Live" : "Not live"
|
|
290
|
-
),
|
|
291
|
-
// `=== true` rather than truthiness: the field is optional in the contract,
|
|
292
|
-
// and an absent value means the state is unknown, not that it is false.
|
|
293
|
-
// This endpoint always sends a boolean, so that is a contract-level
|
|
294
|
-
// possibility rather than one a merchant meets.
|
|
295
|
-
e.hasUnpublishedRelease === !0 ? d(
|
|
296
|
-
A,
|
|
297
|
-
{ variant: "warning", size: "sm", title: "A release is built and waiting to be published" },
|
|
298
|
-
() => "Unpublished"
|
|
299
|
-
) : null
|
|
300
|
-
]);
|
|
301
|
-
}
|
|
302
|
-
},
|
|
303
|
-
{
|
|
304
|
-
id: "updatedAt",
|
|
305
|
-
header: () => "Last edited",
|
|
306
|
-
size: 170,
|
|
307
|
-
enableSorting: !1,
|
|
308
|
-
cell: (t) => d("span", { class: "fm-typo-en-body-sm-400 text-portal-text-muted" }, j(t.row.original.updatedAt))
|
|
309
|
-
},
|
|
310
|
-
{
|
|
311
|
-
id: "actions",
|
|
312
|
-
header: () => "",
|
|
313
|
-
size: 340,
|
|
314
|
-
enableSorting: !1,
|
|
315
|
-
cell: (t) => {
|
|
316
|
-
const e = t.row.original;
|
|
317
|
-
return d("div", { class: "flex flex-wrap items-center justify-end gap-4" }, [
|
|
318
|
-
e.provisioningStatus === "ready" ? d(x, {
|
|
319
|
-
icon: "deployed_code",
|
|
320
|
-
variant: "tertiary",
|
|
321
|
-
title: "View releases",
|
|
322
|
-
onClick: L(
|
|
323
|
-
() => r.push(B(e.projectId, "releases", m.query)),
|
|
324
|
-
["stop"]
|
|
325
|
-
)
|
|
326
|
-
}) : null,
|
|
327
|
-
d(x, {
|
|
328
|
-
label: "Rename",
|
|
329
|
-
variant: "tertiary",
|
|
330
|
-
onClick: L(() => C(e), ["stop"])
|
|
331
|
-
}),
|
|
332
|
-
d(x, {
|
|
333
|
-
label: e.provisioningStatus === "ready" ? "Open editor" : "Continue setup",
|
|
334
|
-
variant: "secondary",
|
|
335
|
-
onClick: L(
|
|
336
|
-
() => r.push(B(e.projectId, "workspace", m.query)),
|
|
337
|
-
["stop"]
|
|
338
|
-
)
|
|
339
|
-
})
|
|
340
|
-
]);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
]), N = E(() => !n.value && v.value.length > 0);
|
|
344
|
-
return Y(() => {
|
|
345
|
-
if (u(), m.query.create === "1") {
|
|
346
|
-
const { create: t, ...e } = m.query;
|
|
347
|
-
r.replace({ query: e }), C();
|
|
348
|
-
}
|
|
349
|
-
}), Q(() => s.abort()), (t, e) => {
|
|
350
|
-
const F = I("FmButton"), _ = I("FmTable");
|
|
351
|
-
return a(), l("div", ge, [
|
|
352
|
-
y("div", fe, [
|
|
353
|
-
y("header", ye, [
|
|
354
|
-
y("div", null, [
|
|
355
|
-
e[4] || (e[4] = y("p", { class: "portal-eyebrow" }, "Mobile Ordering", -1)),
|
|
356
|
-
y("h1", null, [
|
|
357
|
-
e[3] || (e[3] = U("Projects ", -1)),
|
|
358
|
-
n.value ? w("", !0) : (a(), l("span", _e, V(v.value.length), 1))
|
|
359
|
-
])
|
|
360
|
-
]),
|
|
361
|
-
N.value ? (a(), P(F, {
|
|
362
|
-
key: 0,
|
|
363
|
-
label: "New project",
|
|
364
|
-
icon: "add",
|
|
365
|
-
onClick: e[0] || (e[0] = (o) => C())
|
|
366
|
-
})) : w("", !0)
|
|
367
|
-
]),
|
|
368
|
-
b.value ? (a(), l("p", je, [
|
|
369
|
-
U(V(b.value) + " ", 1),
|
|
370
|
-
f(F, {
|
|
371
|
-
label: "Retry",
|
|
372
|
-
variant: "tertiary",
|
|
373
|
-
onClick: u
|
|
374
|
-
})
|
|
375
|
-
])) : n.value ? (a(), l("p", ke, "Loading projects…")) : v.value.length ? (a(), l("section", we, [
|
|
376
|
-
f(_, {
|
|
377
|
-
"column-defs": S.value,
|
|
378
|
-
"row-data": v.value,
|
|
379
|
-
"page-size": v.value.length,
|
|
380
|
-
"hide-footer": "",
|
|
381
|
-
"pin-header-row": "",
|
|
382
|
-
onRowClick: e[2] || (e[2] = (o) => z(r).push(z(B)(o.original.projectId, "workspace", z(m).query)))
|
|
383
|
-
}, null, 8, ["column-defs", "row-data", "page-size"])
|
|
384
|
-
])) : (a(), l("section", he, [
|
|
385
|
-
e[5] || (e[5] = y("h2", null, "Your first Mobile project", -1)),
|
|
386
|
-
e[6] || (e[6] = y("p", null, "Create an app from a template to start editing.", -1)),
|
|
387
|
-
f(F, {
|
|
388
|
-
label: "New project",
|
|
389
|
-
icon: "add",
|
|
390
|
-
onClick: e[1] || (e[1] = (o) => C())
|
|
391
|
-
})
|
|
392
|
-
]))
|
|
393
|
-
])
|
|
394
|
-
]);
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
}), Le = /* @__PURE__ */ G(Ce, [["__scopeId", "data-v-66c90eec"]]);
|
|
398
|
-
export {
|
|
399
|
-
Le as default
|
|
400
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { defineComponent as p, computed as a, openBlock as c, createElementBlock as l, normalizeClass as m, renderSlot as i } from "vue";
|
|
2
|
-
const d = /* @__PURE__ */ p({
|
|
3
|
-
__name: "StatusBadge",
|
|
4
|
-
props: {
|
|
5
|
-
variant: { default: "neutral" },
|
|
6
|
-
size: { default: "md" }
|
|
7
|
-
},
|
|
8
|
-
setup(e) {
|
|
9
|
-
const o = e, t = {
|
|
10
|
-
success: "bg-fm-color-system-success-100 text-fm-color-typo-success",
|
|
11
|
-
warning: "bg-fm-color-system-warning-100 text-fm-color-typo-warning",
|
|
12
|
-
error: "bg-fm-color-system-error-100 text-fm-color-typo-error",
|
|
13
|
-
info: "bg-fm-color-system-info-100 text-fm-color-typo-info",
|
|
14
|
-
neutral: "bg-fm-color-neutral-gray-100 text-fm-color-typo-secondary",
|
|
15
|
-
primary: "bg-fm-color-primary text-fm-color-typo-white"
|
|
16
|
-
}, r = {
|
|
17
|
-
xs: "rounded-[4px] px-[4px] py-[2px] text-[10px] leading-[14px] font-medium tracking-[0.2px]",
|
|
18
|
-
sm: "rounded-[4px] px-[6px] py-[4px] text-[12px] leading-[16px] font-medium tracking-[0.24px]",
|
|
19
|
-
md: "rounded-full px-8 py-2 leading-[16px]"
|
|
20
|
-
}, n = a(() => r[o.size]);
|
|
21
|
-
return (s, x) => (c(), l("span", {
|
|
22
|
-
class: m(["inline-flex shrink-0 items-center gap-4", [t[e.variant], n.value]])
|
|
23
|
-
}, [
|
|
24
|
-
i(s.$slots, "default")
|
|
25
|
-
], 2));
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
export {
|
|
29
|
-
d as _
|
|
30
|
-
};
|