@burdenoff/microfe-store 2026.514.1 → 2026.518.2
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/StoreRoot.js +4 -4
- package/dist/StoreRoutes.js +122 -120
- package/dist/StoreRoutes.js.map +1 -1
- package/dist/components/InstallAppModal.js +79 -69
- package/dist/components/InstallAppModal.js.map +1 -1
- package/dist/components/cart/CartDrawer.js +26 -8
- package/dist/components/cart/CartDrawer.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +1 -1
- package/dist/hooks/useBackendCart.js +1 -11
- package/dist/hooks/useBackendCart.js.map +1 -1
- package/dist/index.js +6 -6
- package/dist/pages/CartPage.js +4 -4
- package/dist/pages/InstalledAppsPage.js +11 -11
- package/dist/pages/MarketplaceHomePage.js +282 -258
- package/dist/pages/MarketplaceHomePage.js.map +1 -1
- package/package.json +1 -1
package/dist/StoreRoot.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StoreProvider as e } from "./providers/StoreProvider.js";
|
|
2
2
|
import { STORE_PERMISSIONS as t, useStorePermissions as n } from "./hooks/useStorePermissions.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { StoreRoutes as r } from "./StoreRoutes.js";
|
|
4
|
+
import { useCart as i } from "./hooks/useCart.js";
|
|
5
5
|
import { useEffect as a, useMemo as o } from "react";
|
|
6
6
|
import { ErrorBoundary as s } from "@burdenoff/fe-libs/shared/components";
|
|
7
7
|
import { FeatureFlagProvider as c } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
@@ -27,7 +27,7 @@ var x = (t) => {
|
|
|
27
27
|
})
|
|
28
28
|
});
|
|
29
29
|
}, S = ({ registerNavItems: e, registerFooterItems: s, basePath: c = "/" }) => {
|
|
30
|
-
let { itemCount: x } =
|
|
30
|
+
let { itemCount: x } = i(), { permissions: S, hasPermission: C } = n(), { t: w } = l(), T = S.canPublish, E = C(t.EARNINGS_READ);
|
|
31
31
|
a(() => {
|
|
32
32
|
if (!e) return;
|
|
33
33
|
let t = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`), n = [
|
|
@@ -131,7 +131,7 @@ var x = (t) => {
|
|
|
131
131
|
}], [w]);
|
|
132
132
|
return a(() => {
|
|
133
133
|
if (s) return s(D);
|
|
134
|
-
}, [s, D]), /* @__PURE__ */ b(
|
|
134
|
+
}, [s, D]), /* @__PURE__ */ b(r, {});
|
|
135
135
|
};
|
|
136
136
|
//#endregion
|
|
137
137
|
export { x as StoreRoot };
|
package/dist/StoreRoutes.js
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
import { useStore as e } from "./providers/StoreProvider.js";
|
|
2
2
|
import { STORE_PERMISSIONS as t, useStorePermissions as n } from "./hooks/useStorePermissions.js";
|
|
3
3
|
import { AccessDenied as r, PageLoadingFallback as i } from "./components/RouteGuards.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { Navigate as d, Route as f, Routes as p } from "react-router-dom";
|
|
4
|
+
import { Suspense as a, lazy as o } from "react";
|
|
5
|
+
import { FeatureGate as s } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
6
|
+
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
7
|
+
import { Navigate as u, Route as d, Routes as f } from "react-router-dom";
|
|
9
8
|
//#region src/StoreRoutes.tsx
|
|
10
|
-
var m =
|
|
9
|
+
var p = o(() => import("./pages/MarketplaceHomePage.js").then((e) => ({ default: e.MarketplaceHomePage }))), m = o(() => import("./pages/InstalledAppsPage.js").then((e) => ({ default: e.InstalledAppsPage }))), h = o(() => import("./pages/ProductDetailPage.js").then((e) => ({ default: e.ProductDetailPage }))), g = o(() => import("./pages/CartPage.js").then((e) => ({ default: e.CartPage }))), _ = o(() => import("./pages/OrdersPage.js").then((e) => ({ default: e.OrdersPage }))), v = o(() => import("./pages/PublisherSubmitPage.js").then((e) => ({ default: e.PublisherSubmitPage }))), y = o(() => import("./pages/MyLicensesPage.js").then((e) => ({ default: e.MyLicensesPage }))), b = o(() => import("./pages/OrderConfirmationPage.js").then((e) => ({ default: e.OrderConfirmationPage }))), x = o(() => import("./pages/PublisherDashboardPage.js").then((e) => ({ default: e.PublisherDashboardPage }))), S = o(() => import("./pages/PublisherSubmissionsPage.js").then((e) => ({ default: e.PublisherSubmissionsPage }))), C = o(() => import("./pages/PublisherRevenuePage.js").then((e) => ({ default: e.PublisherRevenuePage }))), w = o(() => import("./pages/ProductCategoryPage.js").then((e) => ({ default: e.ProductCategoryPage }))), T = o(() => import("./pages/SearchResultsPage.js").then((e) => ({ default: e.SearchResultsPage }))), E = o(() => import("./pages/AppDetailPage.js").then((e) => ({ default: e.AppDetailPage }))), D = o(() => import("./pages/AppSettingsPage.js").then((e) => ({ default: e.AppSettingsPage }))), O = o(() => import("./pages/ProductReviewsPage.js").then((e) => ({ default: e.ProductReviewsPage }))), k = o(() => import("./pages/StoresPage.js").then((e) => ({ default: e.StoresPage })));
|
|
11
10
|
function A({ title: e, featureFlag: t }) {
|
|
12
|
-
return /* @__PURE__ */
|
|
11
|
+
return /* @__PURE__ */ c("div", {
|
|
13
12
|
className: "flex min-h-[400px] items-center justify-center p-6",
|
|
14
|
-
children: /* @__PURE__ */
|
|
13
|
+
children: /* @__PURE__ */ l("div", {
|
|
15
14
|
className: "max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm",
|
|
16
|
-
children: [/* @__PURE__ */
|
|
15
|
+
children: [/* @__PURE__ */ l("h2", {
|
|
17
16
|
className: "text-lg font-semibold text-foreground",
|
|
18
17
|
children: [e, " is not enabled"]
|
|
19
|
-
}), /* @__PURE__ */
|
|
18
|
+
}), /* @__PURE__ */ l("p", {
|
|
20
19
|
className: "mt-2 text-sm text-muted-foreground",
|
|
21
20
|
children: [
|
|
22
21
|
"Ask an administrator to enable the ",
|
|
23
|
-
/* @__PURE__ */
|
|
22
|
+
/* @__PURE__ */ c("span", {
|
|
24
23
|
className: "font-mono",
|
|
25
24
|
children: t
|
|
26
25
|
}),
|
|
@@ -32,247 +31,250 @@ function A({ title: e, featureFlag: t }) {
|
|
|
32
31
|
});
|
|
33
32
|
}
|
|
34
33
|
function j({ title: e, featureFlag: t, allowed: n, isLoading: a, children: o }) {
|
|
35
|
-
return a ? /* @__PURE__ */
|
|
34
|
+
return a ? /* @__PURE__ */ c(i, {}) : /* @__PURE__ */ c(s, {
|
|
36
35
|
flag: t,
|
|
37
36
|
defaultValue: !0,
|
|
38
|
-
fallback: /* @__PURE__ */
|
|
37
|
+
fallback: /* @__PURE__ */ c(A, {
|
|
39
38
|
title: e,
|
|
40
39
|
featureFlag: t
|
|
41
40
|
}),
|
|
42
|
-
children: n ? o : /* @__PURE__ */
|
|
41
|
+
children: n ? o : /* @__PURE__ */ c(r, {})
|
|
43
42
|
});
|
|
44
43
|
}
|
|
45
44
|
var M = () => {
|
|
46
|
-
let { basePath: r } = e(), { permissions:
|
|
47
|
-
return /* @__PURE__ */
|
|
48
|
-
/* @__PURE__ */
|
|
45
|
+
let { basePath: r } = e(), { permissions: o, hasPermission: s, isLoading: A } = n();
|
|
46
|
+
return /* @__PURE__ */ l(f, { children: [
|
|
47
|
+
/* @__PURE__ */ c(d, {
|
|
49
48
|
index: !0,
|
|
50
|
-
element: /* @__PURE__ */
|
|
49
|
+
element: /* @__PURE__ */ c(u, {
|
|
51
50
|
to: "marketplace",
|
|
52
51
|
replace: !0
|
|
53
52
|
})
|
|
54
53
|
}),
|
|
55
|
-
/* @__PURE__ */
|
|
54
|
+
/* @__PURE__ */ c(d, {
|
|
56
55
|
path: "marketplace",
|
|
57
|
-
element: /* @__PURE__ */
|
|
56
|
+
element: /* @__PURE__ */ c(j, {
|
|
58
57
|
title: "Marketplace",
|
|
59
58
|
featureFlag: "store.marketplace",
|
|
60
|
-
allowed:
|
|
59
|
+
allowed: o.canBrowse,
|
|
61
60
|
isLoading: A,
|
|
62
|
-
children: /* @__PURE__ */
|
|
61
|
+
children: /* @__PURE__ */ c(a, {
|
|
62
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
63
|
+
children: /* @__PURE__ */ c(p, {})
|
|
64
|
+
})
|
|
63
65
|
})
|
|
64
66
|
}),
|
|
65
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ c(d, {
|
|
66
68
|
path: "marketplace/category/:categorySlug",
|
|
67
|
-
element: /* @__PURE__ */
|
|
69
|
+
element: /* @__PURE__ */ c(j, {
|
|
68
70
|
title: "Marketplace",
|
|
69
71
|
featureFlag: "store.marketplace",
|
|
70
|
-
allowed:
|
|
72
|
+
allowed: o.canBrowse,
|
|
71
73
|
isLoading: A,
|
|
72
|
-
children: /* @__PURE__ */
|
|
73
|
-
fallback: /* @__PURE__ */
|
|
74
|
-
children: /* @__PURE__ */
|
|
74
|
+
children: /* @__PURE__ */ c(a, {
|
|
75
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
76
|
+
children: /* @__PURE__ */ c(w, {})
|
|
75
77
|
})
|
|
76
78
|
})
|
|
77
79
|
}),
|
|
78
|
-
/* @__PURE__ */
|
|
80
|
+
/* @__PURE__ */ c(d, {
|
|
79
81
|
path: "marketplace/search",
|
|
80
|
-
element: /* @__PURE__ */
|
|
82
|
+
element: /* @__PURE__ */ c(j, {
|
|
81
83
|
title: "Marketplace",
|
|
82
84
|
featureFlag: "store.marketplace",
|
|
83
|
-
allowed:
|
|
85
|
+
allowed: o.canBrowse,
|
|
84
86
|
isLoading: A,
|
|
85
|
-
children: /* @__PURE__ */
|
|
86
|
-
fallback: /* @__PURE__ */
|
|
87
|
-
children: /* @__PURE__ */
|
|
87
|
+
children: /* @__PURE__ */ c(a, {
|
|
88
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
89
|
+
children: /* @__PURE__ */ c(T, {})
|
|
88
90
|
})
|
|
89
91
|
})
|
|
90
92
|
}),
|
|
91
|
-
/* @__PURE__ */
|
|
93
|
+
/* @__PURE__ */ c(d, {
|
|
92
94
|
path: "marketplace/product/:productId",
|
|
93
|
-
element: /* @__PURE__ */
|
|
95
|
+
element: /* @__PURE__ */ c(j, {
|
|
94
96
|
title: "Marketplace",
|
|
95
97
|
featureFlag: "store.marketplace",
|
|
96
|
-
allowed:
|
|
98
|
+
allowed: o.canBrowse,
|
|
97
99
|
isLoading: A,
|
|
98
|
-
children: /* @__PURE__ */
|
|
99
|
-
fallback: /* @__PURE__ */
|
|
100
|
-
children: /* @__PURE__ */
|
|
100
|
+
children: /* @__PURE__ */ c(a, {
|
|
101
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
102
|
+
children: /* @__PURE__ */ c(h, {})
|
|
101
103
|
})
|
|
102
104
|
})
|
|
103
105
|
}),
|
|
104
|
-
/* @__PURE__ */
|
|
106
|
+
/* @__PURE__ */ c(d, {
|
|
105
107
|
path: "cart",
|
|
106
|
-
element: /* @__PURE__ */
|
|
108
|
+
element: /* @__PURE__ */ c(j, {
|
|
107
109
|
title: "Cart",
|
|
108
110
|
featureFlag: "store.cart",
|
|
109
|
-
allowed:
|
|
111
|
+
allowed: o.canPurchase,
|
|
110
112
|
isLoading: A,
|
|
111
|
-
children: /* @__PURE__ */
|
|
112
|
-
fallback: /* @__PURE__ */
|
|
113
|
-
children: /* @__PURE__ */
|
|
113
|
+
children: /* @__PURE__ */ c(a, {
|
|
114
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
115
|
+
children: /* @__PURE__ */ c(g, {})
|
|
114
116
|
})
|
|
115
117
|
})
|
|
116
118
|
}),
|
|
117
|
-
/* @__PURE__ */
|
|
119
|
+
/* @__PURE__ */ c(d, {
|
|
118
120
|
path: "orders/:orderId/confirmation",
|
|
119
|
-
element: /* @__PURE__ */
|
|
121
|
+
element: /* @__PURE__ */ c(j, {
|
|
120
122
|
title: "Order confirmation",
|
|
121
123
|
featureFlag: "store.orders",
|
|
122
|
-
allowed:
|
|
124
|
+
allowed: o.canPurchase,
|
|
123
125
|
isLoading: A,
|
|
124
|
-
children: /* @__PURE__ */
|
|
125
|
-
fallback: /* @__PURE__ */
|
|
126
|
-
children: /* @__PURE__ */
|
|
126
|
+
children: /* @__PURE__ */ c(a, {
|
|
127
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
128
|
+
children: /* @__PURE__ */ c(b, {})
|
|
127
129
|
})
|
|
128
130
|
})
|
|
129
131
|
}),
|
|
130
|
-
/* @__PURE__ */
|
|
132
|
+
/* @__PURE__ */ c(d, {
|
|
131
133
|
path: "orders",
|
|
132
|
-
element: /* @__PURE__ */
|
|
134
|
+
element: /* @__PURE__ */ c(j, {
|
|
133
135
|
title: "Orders",
|
|
134
136
|
featureFlag: "store.orders",
|
|
135
|
-
allowed:
|
|
137
|
+
allowed: o.canPurchase,
|
|
136
138
|
isLoading: A,
|
|
137
|
-
children: /* @__PURE__ */
|
|
138
|
-
fallback: /* @__PURE__ */
|
|
139
|
-
children: /* @__PURE__ */
|
|
139
|
+
children: /* @__PURE__ */ c(a, {
|
|
140
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
141
|
+
children: /* @__PURE__ */ c(_, {})
|
|
140
142
|
})
|
|
141
143
|
})
|
|
142
144
|
}),
|
|
143
|
-
/* @__PURE__ */
|
|
145
|
+
/* @__PURE__ */ c(d, {
|
|
144
146
|
path: "installed",
|
|
145
|
-
element: /* @__PURE__ */
|
|
147
|
+
element: /* @__PURE__ */ c(j, {
|
|
146
148
|
title: "Installed apps",
|
|
147
149
|
featureFlag: "store.installed",
|
|
148
|
-
allowed:
|
|
150
|
+
allowed: o.canInstall,
|
|
149
151
|
isLoading: A,
|
|
150
|
-
children: /* @__PURE__ */
|
|
151
|
-
fallback: /* @__PURE__ */
|
|
152
|
-
children: /* @__PURE__ */
|
|
152
|
+
children: /* @__PURE__ */ c(a, {
|
|
153
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
154
|
+
children: /* @__PURE__ */ c(m, {})
|
|
153
155
|
})
|
|
154
156
|
})
|
|
155
157
|
}),
|
|
156
|
-
/* @__PURE__ */
|
|
158
|
+
/* @__PURE__ */ c(d, {
|
|
157
159
|
path: "installed/:installationId",
|
|
158
|
-
element: /* @__PURE__ */
|
|
160
|
+
element: /* @__PURE__ */ c(j, {
|
|
159
161
|
title: "Installed apps",
|
|
160
162
|
featureFlag: "store.installed",
|
|
161
|
-
allowed:
|
|
163
|
+
allowed: o.canInstall,
|
|
162
164
|
isLoading: A,
|
|
163
|
-
children: /* @__PURE__ */
|
|
164
|
-
fallback: /* @__PURE__ */
|
|
165
|
-
children: /* @__PURE__ */
|
|
165
|
+
children: /* @__PURE__ */ c(a, {
|
|
166
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
167
|
+
children: /* @__PURE__ */ c(E, {})
|
|
166
168
|
})
|
|
167
169
|
})
|
|
168
170
|
}),
|
|
169
|
-
/* @__PURE__ */
|
|
171
|
+
/* @__PURE__ */ c(d, {
|
|
170
172
|
path: "installed/:installationId/settings",
|
|
171
|
-
element: /* @__PURE__ */
|
|
173
|
+
element: /* @__PURE__ */ c(j, {
|
|
172
174
|
title: "Installed apps",
|
|
173
175
|
featureFlag: "store.installed",
|
|
174
|
-
allowed:
|
|
176
|
+
allowed: o.canInstall,
|
|
175
177
|
isLoading: A,
|
|
176
|
-
children: /* @__PURE__ */
|
|
177
|
-
fallback: /* @__PURE__ */
|
|
178
|
-
children: /* @__PURE__ */
|
|
178
|
+
children: /* @__PURE__ */ c(a, {
|
|
179
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
180
|
+
children: /* @__PURE__ */ c(D, {})
|
|
179
181
|
})
|
|
180
182
|
})
|
|
181
183
|
}),
|
|
182
|
-
/* @__PURE__ */
|
|
184
|
+
/* @__PURE__ */ c(d, {
|
|
183
185
|
path: "licenses",
|
|
184
|
-
element: /* @__PURE__ */
|
|
186
|
+
element: /* @__PURE__ */ c(j, {
|
|
185
187
|
title: "Licenses",
|
|
186
188
|
featureFlag: "store.licenses",
|
|
187
|
-
allowed:
|
|
189
|
+
allowed: o.canManageLicenses,
|
|
188
190
|
isLoading: A,
|
|
189
|
-
children: /* @__PURE__ */
|
|
190
|
-
fallback: /* @__PURE__ */
|
|
191
|
-
children: /* @__PURE__ */
|
|
191
|
+
children: /* @__PURE__ */ c(a, {
|
|
192
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
193
|
+
children: /* @__PURE__ */ c(y, {})
|
|
192
194
|
})
|
|
193
195
|
})
|
|
194
196
|
}),
|
|
195
|
-
/* @__PURE__ */
|
|
197
|
+
/* @__PURE__ */ c(d, {
|
|
196
198
|
path: "stores",
|
|
197
|
-
element: /* @__PURE__ */
|
|
199
|
+
element: /* @__PURE__ */ c(j, {
|
|
198
200
|
title: "Stores",
|
|
199
201
|
featureFlag: "store.stores",
|
|
200
|
-
allowed:
|
|
202
|
+
allowed: o.canBrowse,
|
|
201
203
|
isLoading: A,
|
|
202
|
-
children: /* @__PURE__ */
|
|
203
|
-
fallback: /* @__PURE__ */
|
|
204
|
-
children: /* @__PURE__ */
|
|
204
|
+
children: /* @__PURE__ */ c(a, {
|
|
205
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
206
|
+
children: /* @__PURE__ */ c(k, {})
|
|
205
207
|
})
|
|
206
208
|
})
|
|
207
209
|
}),
|
|
208
|
-
/* @__PURE__ */
|
|
210
|
+
/* @__PURE__ */ c(d, {
|
|
209
211
|
path: "publisher",
|
|
210
|
-
element: /* @__PURE__ */
|
|
212
|
+
element: /* @__PURE__ */ c(j, {
|
|
211
213
|
title: "Publisher portal",
|
|
212
214
|
featureFlag: "store.publisher-portal",
|
|
213
|
-
allowed:
|
|
215
|
+
allowed: o.canPublish,
|
|
214
216
|
isLoading: A,
|
|
215
|
-
children: /* @__PURE__ */
|
|
216
|
-
fallback: /* @__PURE__ */
|
|
217
|
-
children: /* @__PURE__ */
|
|
217
|
+
children: /* @__PURE__ */ c(a, {
|
|
218
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
219
|
+
children: /* @__PURE__ */ c(x, {})
|
|
218
220
|
})
|
|
219
221
|
})
|
|
220
222
|
}),
|
|
221
|
-
/* @__PURE__ */
|
|
223
|
+
/* @__PURE__ */ c(d, {
|
|
222
224
|
path: "publisher/submit",
|
|
223
|
-
element: /* @__PURE__ */
|
|
225
|
+
element: /* @__PURE__ */ c(j, {
|
|
224
226
|
title: "Publisher portal",
|
|
225
227
|
featureFlag: "store.publisher-portal",
|
|
226
|
-
allowed:
|
|
228
|
+
allowed: o.canPublish,
|
|
227
229
|
isLoading: A,
|
|
228
|
-
children: /* @__PURE__ */
|
|
229
|
-
fallback: /* @__PURE__ */
|
|
230
|
-
children: /* @__PURE__ */
|
|
230
|
+
children: /* @__PURE__ */ c(a, {
|
|
231
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
232
|
+
children: /* @__PURE__ */ c(v, {})
|
|
231
233
|
})
|
|
232
234
|
})
|
|
233
235
|
}),
|
|
234
|
-
/* @__PURE__ */
|
|
236
|
+
/* @__PURE__ */ c(d, {
|
|
235
237
|
path: "publisher/submissions",
|
|
236
|
-
element: /* @__PURE__ */
|
|
238
|
+
element: /* @__PURE__ */ c(j, {
|
|
237
239
|
title: "Publisher portal",
|
|
238
240
|
featureFlag: "store.publisher-portal",
|
|
239
|
-
allowed:
|
|
241
|
+
allowed: o.canPublish,
|
|
240
242
|
isLoading: A,
|
|
241
|
-
children: /* @__PURE__ */
|
|
242
|
-
fallback: /* @__PURE__ */
|
|
243
|
-
children: /* @__PURE__ */
|
|
243
|
+
children: /* @__PURE__ */ c(a, {
|
|
244
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
245
|
+
children: /* @__PURE__ */ c(S, {})
|
|
244
246
|
})
|
|
245
247
|
})
|
|
246
248
|
}),
|
|
247
|
-
/* @__PURE__ */
|
|
249
|
+
/* @__PURE__ */ c(d, {
|
|
248
250
|
path: "publisher/revenue",
|
|
249
|
-
element: /* @__PURE__ */
|
|
251
|
+
element: /* @__PURE__ */ c(j, {
|
|
250
252
|
title: "Publisher revenue",
|
|
251
253
|
featureFlag: "store.publisher-portal.revenue",
|
|
252
|
-
allowed:
|
|
254
|
+
allowed: s(t.EARNINGS_READ),
|
|
253
255
|
isLoading: A,
|
|
254
|
-
children: /* @__PURE__ */
|
|
255
|
-
fallback: /* @__PURE__ */
|
|
256
|
-
children: /* @__PURE__ */
|
|
256
|
+
children: /* @__PURE__ */ c(a, {
|
|
257
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
258
|
+
children: /* @__PURE__ */ c(C, {})
|
|
257
259
|
})
|
|
258
260
|
})
|
|
259
261
|
}),
|
|
260
|
-
/* @__PURE__ */
|
|
262
|
+
/* @__PURE__ */ c(d, {
|
|
261
263
|
path: "publisher/product/:productId/reviews",
|
|
262
|
-
element: /* @__PURE__ */
|
|
264
|
+
element: /* @__PURE__ */ c(j, {
|
|
263
265
|
title: "Publisher portal",
|
|
264
266
|
featureFlag: "store.publisher-portal",
|
|
265
|
-
allowed:
|
|
267
|
+
allowed: o.canPublish,
|
|
266
268
|
isLoading: A,
|
|
267
|
-
children: /* @__PURE__ */
|
|
268
|
-
fallback: /* @__PURE__ */
|
|
269
|
-
children: /* @__PURE__ */
|
|
269
|
+
children: /* @__PURE__ */ c(a, {
|
|
270
|
+
fallback: /* @__PURE__ */ c(i, {}),
|
|
271
|
+
children: /* @__PURE__ */ c(O, {})
|
|
270
272
|
})
|
|
271
273
|
})
|
|
272
274
|
}),
|
|
273
|
-
/* @__PURE__ */
|
|
275
|
+
/* @__PURE__ */ c(d, {
|
|
274
276
|
path: "*",
|
|
275
|
-
element: /* @__PURE__ */
|
|
277
|
+
element: /* @__PURE__ */ c(u, {
|
|
276
278
|
to: `${r}/marketplace`,
|
|
277
279
|
replace: !0
|
|
278
280
|
})
|
package/dist/StoreRoutes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreRoutes.js","names":[],"sources":["../src/StoreRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type FC, type ReactNode } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useStore } from './providers/StoreProvider';\nimport { useStorePermissions, STORE_PERMISSIONS } from './hooks/useStorePermissions';\nimport { AccessDenied, PageLoadingFallback } from './components/RouteGuards';\n\n// Eager loaded - main entry point\nimport { MarketplaceHomePage } from './pages/MarketplaceHomePage';\n\n// Lazy loaded pages\nconst InstalledAppsPage = lazy(() =>\n import('./pages/InstalledAppsPage').then((m) => ({ default: m.InstalledAppsPage }))\n);\nconst ProductDetailPage = lazy(() =>\n import('./pages/ProductDetailPage').then((m) => ({ default: m.ProductDetailPage }))\n);\nconst CartPage = lazy(() => import('./pages/CartPage').then((m) => ({ default: m.CartPage })));\nconst OrdersPage = lazy(() =>\n import('./pages/OrdersPage').then((m) => ({ default: m.OrdersPage }))\n);\nconst PublisherSubmitPage = lazy(() =>\n import('./pages/PublisherSubmitPage').then((m) => ({ default: m.PublisherSubmitPage }))\n);\nconst MyLicensesPage = lazy(() =>\n import('./pages/MyLicensesPage').then((m) => ({ default: m.MyLicensesPage }))\n);\nconst OrderConfirmationPage = lazy(() =>\n import('./pages/OrderConfirmationPage').then((m) => ({ default: m.OrderConfirmationPage }))\n);\nconst PublisherDashboardPage = lazy(() =>\n import('./pages/PublisherDashboardPage').then((m) => ({ default: m.PublisherDashboardPage }))\n);\nconst PublisherSubmissionsPage = lazy(() =>\n import('./pages/PublisherSubmissionsPage').then((m) => ({ default: m.PublisherSubmissionsPage }))\n);\nconst PublisherRevenuePage = lazy(() =>\n import('./pages/PublisherRevenuePage').then((m) => ({ default: m.PublisherRevenuePage }))\n);\nconst ProductCategoryPage = lazy(() =>\n import('./pages/ProductCategoryPage').then((m) => ({ default: m.ProductCategoryPage }))\n);\nconst SearchResultsPage = lazy(() =>\n import('./pages/SearchResultsPage').then((m) => ({ default: m.SearchResultsPage }))\n);\nconst AppDetailPage = lazy(() =>\n import('./pages/AppDetailPage').then((m) => ({ default: m.AppDetailPage }))\n);\nconst AppSettingsPage = lazy(() =>\n import('./pages/AppSettingsPage').then((m) => ({ default: m.AppSettingsPage }))\n);\nconst ProductReviewsPage = lazy(() =>\n import('./pages/ProductReviewsPage').then((m) => ({ default: m.ProductReviewsPage }))\n);\nconst StoresPage = lazy(() =>\n import('./pages/StoresPage').then((m) => ({ default: m.StoresPage }))\n);\n\nfunction FeatureDisabled({ title, featureFlag }: { title: string; featureFlag: string }) {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-muted-foreground\">\n Ask an administrator to enable the <span className=\"font-mono\">{featureFlag}</span>{' '}\n feature flag for this organization.\n </p>\n </div>\n </div>\n );\n}\n\ninterface StoreRouteGateProps {\n title: string;\n featureFlag: string;\n allowed: boolean;\n isLoading: boolean;\n children: ReactNode;\n}\n\nfunction StoreRouteGate({ title, featureFlag, allowed, isLoading, children }: StoreRouteGateProps) {\n if (isLoading) {\n return <PageLoadingFallback />;\n }\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {allowed ? children : <AccessDenied />}\n </FeatureGate>\n );\n}\n\n/**\n * StoreRoutes component\n *\n * Internal routing for the Store microfrontend. Every route is gated by both\n * a live feature flag (via FeatureGate) and an RBAC permission check so that\n * features can be toggled per-org without a deployment.\n *\n * Flag namespace: store.*\n */\nexport const StoreRoutes: FC = () => {\n const { basePath } = useStore();\n const { permissions, hasPermission, isLoading } = useStorePermissions();\n\n return (\n <Routes>\n {/* Default redirect */}\n <Route index element={<Navigate to=\"marketplace\" replace />} />\n\n {/* Marketplace */}\n <Route\n path=\"marketplace\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <MarketplaceHomePage />\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/category/:categorySlug\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductCategoryPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/search\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <SearchResultsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/product/:productId\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Cart */}\n <Route\n path=\"cart\"\n element={\n <StoreRouteGate\n title=\"Cart\"\n featureFlag=\"store.cart\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <CartPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Orders */}\n <Route\n path=\"orders/:orderId/confirmation\"\n element={\n <StoreRouteGate\n title=\"Order confirmation\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrderConfirmationPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"orders\"\n element={\n <StoreRouteGate\n title=\"Orders\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrdersPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Installed Apps */}\n <Route\n path=\"installed\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <InstalledAppsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId/settings\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppSettingsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Licenses */}\n <Route\n path=\"licenses\"\n element={\n <StoreRouteGate\n title=\"Licenses\"\n featureFlag=\"store.licenses\"\n allowed={permissions.canManageLicenses}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MyLicensesPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Multi-store browsing */}\n <Route\n path=\"stores\"\n element={\n <StoreRouteGate\n title=\"Stores\"\n featureFlag=\"store.stores\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <StoresPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Publisher Portal */}\n <Route\n path=\"publisher\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherDashboardPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submit\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmitPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submissions\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmissionsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/revenue\"\n element={\n <StoreRouteGate\n title=\"Publisher revenue\"\n featureFlag=\"store.publisher-portal.revenue\"\n allowed={hasPermission(STORE_PERMISSIONS.EARNINGS_READ)}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherRevenuePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/product/:productId/reviews\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductReviewsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Catch-all redirect */}\n <Route path=\"*\" element={<Navigate to={`${basePath}/marketplace`} replace />} />\n </Routes>\n );\n};\n"],"mappings":";;;;;;;;;AAWA,IAAM,IAAoB,QACxB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CACpF,EACK,IAAoB,QACxB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CACpF,EACK,IAAW,QAAW,OAAO,uBAAoB,MAAM,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EACxF,IAAa,QACjB,OAAO,yBAAsB,MAAM,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CACtE,EACK,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAiB,QACrB,OAAO,6BAA0B,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAC9E,EACK,IAAwB,QAC5B,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC5F,EACK,IAAyB,QAC7B,OAAO,qCAAkC,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAC9F,EACK,IAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,IAAuB,QAC3B,OAAO,mCAAgC,MAAM,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAC1F,EACK,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAoB,QACxB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CACpF,EACK,IAAgB,QACpB,OAAO,4BAAyB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5E,EACK,IAAkB,QACtB,OAAO,8BAA2B,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAChF,EACK,IAAqB,QACzB,OAAO,iCAA8B,MAAM,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACtF,EACK,IAAa,QACjB,OAAO,yBAAsB,MAAM,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CACtE;AAED,SAAS,EAAgB,EAAE,UAAO,kBAAuD;AACvF,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CAAuD,GAAM,kBAAoB;OACjF,kBAAC,KAAD;IAAG,WAAU;cAAb;KAAkD;KACb,kBAAC,QAAD;MAAM,WAAU;gBAAa;MAAmB,CAAA;KAAC;KAAI;KAEtF;MACA;;EACF,CAAA;;AAYV,SAAS,EAAe,EAAE,UAAO,gBAAa,YAAS,cAAW,eAAiC;AAIjG,QAHI,IACK,kBAAC,GAAD,EAAuB,CAAA,GAG9B,kBAAC,GAAD;EACE,MAAM;EACN,cAAA;EACA,UAAU,kBAAC,GAAD;GAAwB;GAAoB;GAAe,CAAA;YAEpE,IAAU,IAAW,kBAAC,GAAD,EAAgB,CAAA;EAC1B,CAAA;;AAalB,IAAa,UAAwB;CACnC,IAAM,EAAE,gBAAa,GAAU,EACzB,EAAE,gBAAa,kBAAe,iBAAc,GAAqB;AAEvE,QACE,kBAAC,GAAD,EAAA,UAAA;EAEE,kBAAC,GAAD;GAAO,OAAA;GAAM,SAAS,kBAAC,GAAD;IAAU,IAAG;IAAc,SAAA;IAAU,CAAA;GAAI,CAAA;EAG/D,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD,EAAuB,CAAA;IACR,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAuB,CAAA;KACd,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAY,CAAA;KACH,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAyB,CAAA;KAChB,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAc,CAAA;KACL,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAiB,CAAA;KACR,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAmB,CAAA;KACV,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAkB,CAAA;KACT,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAc,CAAA;KACL,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAA0B,CAAA;KACjB,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAuB,CAAA;KACd,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAA4B,CAAA;KACnB,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAc,EAAkB,cAAc;IAC5C;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAwB,CAAA;KACf,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAsB,CAAA;KACb,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GAAO,MAAK;GAAI,SAAS,kBAAC,GAAD;IAAU,IAAI,GAAG,EAAS;IAAe,SAAA;IAAU,CAAA;GAAI,CAAA;EACzE,EAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"StoreRoutes.js","names":[],"sources":["../src/StoreRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type FC, type ReactNode } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useStore } from './providers/StoreProvider';\nimport { useStorePermissions, STORE_PERMISSIONS } from './hooks/useStorePermissions';\nimport { AccessDenied, PageLoadingFallback } from './components/RouteGuards';\n\n// Lazy loaded pages\nconst MarketplaceHomePage = lazy(() =>\n import('./pages/MarketplaceHomePage').then((m) => ({ default: m.MarketplaceHomePage }))\n);\nconst InstalledAppsPage = lazy(() =>\n import('./pages/InstalledAppsPage').then((m) => ({ default: m.InstalledAppsPage }))\n);\nconst ProductDetailPage = lazy(() =>\n import('./pages/ProductDetailPage').then((m) => ({ default: m.ProductDetailPage }))\n);\nconst CartPage = lazy(() => import('./pages/CartPage').then((m) => ({ default: m.CartPage })));\nconst OrdersPage = lazy(() =>\n import('./pages/OrdersPage').then((m) => ({ default: m.OrdersPage }))\n);\nconst PublisherSubmitPage = lazy(() =>\n import('./pages/PublisherSubmitPage').then((m) => ({ default: m.PublisherSubmitPage }))\n);\nconst MyLicensesPage = lazy(() =>\n import('./pages/MyLicensesPage').then((m) => ({ default: m.MyLicensesPage }))\n);\nconst OrderConfirmationPage = lazy(() =>\n import('./pages/OrderConfirmationPage').then((m) => ({ default: m.OrderConfirmationPage }))\n);\nconst PublisherDashboardPage = lazy(() =>\n import('./pages/PublisherDashboardPage').then((m) => ({ default: m.PublisherDashboardPage }))\n);\nconst PublisherSubmissionsPage = lazy(() =>\n import('./pages/PublisherSubmissionsPage').then((m) => ({ default: m.PublisherSubmissionsPage }))\n);\nconst PublisherRevenuePage = lazy(() =>\n import('./pages/PublisherRevenuePage').then((m) => ({ default: m.PublisherRevenuePage }))\n);\nconst ProductCategoryPage = lazy(() =>\n import('./pages/ProductCategoryPage').then((m) => ({ default: m.ProductCategoryPage }))\n);\nconst SearchResultsPage = lazy(() =>\n import('./pages/SearchResultsPage').then((m) => ({ default: m.SearchResultsPage }))\n);\nconst AppDetailPage = lazy(() =>\n import('./pages/AppDetailPage').then((m) => ({ default: m.AppDetailPage }))\n);\nconst AppSettingsPage = lazy(() =>\n import('./pages/AppSettingsPage').then((m) => ({ default: m.AppSettingsPage }))\n);\nconst ProductReviewsPage = lazy(() =>\n import('./pages/ProductReviewsPage').then((m) => ({ default: m.ProductReviewsPage }))\n);\nconst StoresPage = lazy(() =>\n import('./pages/StoresPage').then((m) => ({ default: m.StoresPage }))\n);\n\nfunction FeatureDisabled({ title, featureFlag }: { title: string; featureFlag: string }) {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-muted-foreground\">\n Ask an administrator to enable the <span className=\"font-mono\">{featureFlag}</span>{' '}\n feature flag for this organization.\n </p>\n </div>\n </div>\n );\n}\n\ninterface StoreRouteGateProps {\n title: string;\n featureFlag: string;\n allowed: boolean;\n isLoading: boolean;\n children: ReactNode;\n}\n\nfunction StoreRouteGate({ title, featureFlag, allowed, isLoading, children }: StoreRouteGateProps) {\n if (isLoading) {\n return <PageLoadingFallback />;\n }\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {allowed ? children : <AccessDenied />}\n </FeatureGate>\n );\n}\n\n/**\n * StoreRoutes component\n *\n * Internal routing for the Store microfrontend. Every route is gated by both\n * a live feature flag (via FeatureGate) and an RBAC permission check so that\n * features can be toggled per-org without a deployment.\n *\n * Flag namespace: store.*\n */\nexport const StoreRoutes: FC = () => {\n const { basePath } = useStore();\n const { permissions, hasPermission, isLoading } = useStorePermissions();\n\n return (\n <Routes>\n {/* Default redirect */}\n <Route index element={<Navigate to=\"marketplace\" replace />} />\n\n {/* Marketplace */}\n <Route\n path=\"marketplace\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MarketplaceHomePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/category/:categorySlug\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductCategoryPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/search\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <SearchResultsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/product/:productId\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Cart */}\n <Route\n path=\"cart\"\n element={\n <StoreRouteGate\n title=\"Cart\"\n featureFlag=\"store.cart\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <CartPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Orders */}\n <Route\n path=\"orders/:orderId/confirmation\"\n element={\n <StoreRouteGate\n title=\"Order confirmation\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrderConfirmationPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"orders\"\n element={\n <StoreRouteGate\n title=\"Orders\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrdersPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Installed Apps */}\n <Route\n path=\"installed\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <InstalledAppsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId/settings\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppSettingsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Licenses */}\n <Route\n path=\"licenses\"\n element={\n <StoreRouteGate\n title=\"Licenses\"\n featureFlag=\"store.licenses\"\n allowed={permissions.canManageLicenses}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MyLicensesPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Multi-store browsing */}\n <Route\n path=\"stores\"\n element={\n <StoreRouteGate\n title=\"Stores\"\n featureFlag=\"store.stores\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <StoresPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Publisher Portal */}\n <Route\n path=\"publisher\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherDashboardPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submit\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmitPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submissions\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmissionsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/revenue\"\n element={\n <StoreRouteGate\n title=\"Publisher revenue\"\n featureFlag=\"store.publisher-portal.revenue\"\n allowed={hasPermission(STORE_PERMISSIONS.EARNINGS_READ)}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherRevenuePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/product/:productId/reviews\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductReviewsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Catch-all redirect */}\n <Route path=\"*\" element={<Navigate to={`${basePath}/marketplace`} replace />} />\n </Routes>\n );\n};\n"],"mappings":";;;;;;;;AAQA,IAAM,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAoB,QACxB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CACpF,EACK,IAAoB,QACxB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CACpF,EACK,IAAW,QAAW,OAAO,uBAAoB,MAAM,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EACxF,IAAa,QACjB,OAAO,yBAAsB,MAAM,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CACtE,EACK,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAiB,QACrB,OAAO,6BAA0B,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAC9E,EACK,IAAwB,QAC5B,OAAO,oCAAiC,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC5F,EACK,IAAyB,QAC7B,OAAO,qCAAkC,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAC9F,EACK,IAA2B,QAC/B,OAAO,uCAAoC,MAAM,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAClG,EACK,IAAuB,QAC3B,OAAO,mCAAgC,MAAM,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAC1F,EACK,IAAsB,QAC1B,OAAO,kCAA+B,MAAM,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,CACxF,EACK,IAAoB,QACxB,OAAO,gCAA6B,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CACpF,EACK,IAAgB,QACpB,OAAO,4BAAyB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC5E,EACK,IAAkB,QACtB,OAAO,8BAA2B,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAChF,EACK,IAAqB,QACzB,OAAO,iCAA8B,MAAM,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CACtF,EACK,IAAa,QACjB,OAAO,yBAAsB,MAAM,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CACtE;AAED,SAAS,EAAgB,EAAE,UAAO,kBAAuD;AACvF,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CAAuD,GAAM,kBAAoB;OACjF,kBAAC,KAAD;IAAG,WAAU;cAAb;KAAkD;KACb,kBAAC,QAAD;MAAM,WAAU;gBAAa;MAAmB,CAAA;KAAC;KAAI;KAEtF;MACA;;EACF,CAAA;;AAYV,SAAS,EAAe,EAAE,UAAO,gBAAa,YAAS,cAAW,eAAiC;AAIjG,QAHI,IACK,kBAAC,GAAD,EAAuB,CAAA,GAG9B,kBAAC,GAAD;EACE,MAAM;EACN,cAAA;EACA,UAAU,kBAAC,GAAD;GAAwB;GAAoB;GAAe,CAAA;YAEpE,IAAU,IAAW,kBAAC,GAAD,EAAgB,CAAA;EAC1B,CAAA;;AAalB,IAAa,UAAwB;CACnC,IAAM,EAAE,gBAAa,GAAU,EACzB,EAAE,gBAAa,kBAAe,iBAAc,GAAqB;AAEvE,QACE,kBAAC,GAAD,EAAA,UAAA;EAEE,kBAAC,GAAD;GAAO,OAAA;GAAM,SAAS,kBAAC,GAAD;IAAU,IAAG;IAAc,SAAA;IAAU,CAAA;GAAI,CAAA;EAG/D,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAuB,CAAA;KACd,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAuB,CAAA;KACd,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAY,CAAA;KACH,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAyB,CAAA;KAChB,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAc,CAAA;KACL,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAiB,CAAA;KACR,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAmB,CAAA;KACV,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAkB,CAAA;KACT,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAc,CAAA;KACL,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAA0B,CAAA;KACjB,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAuB,CAAA;KACd,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAA4B,CAAA;KACnB,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAc,EAAkB,cAAc;IAC5C;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAwB,CAAA;KACf,CAAA;IACI,CAAA;GAEnB,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SACE,kBAAC,GAAD;IACE,OAAM;IACN,aAAY;IACZ,SAAS,EAAY;IACV;cAEX,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAuB,CAAA;eACzC,kBAAC,GAAD,EAAsB,CAAA;KACb,CAAA;IACI,CAAA;GAEnB,CAAA;EAGF,kBAAC,GAAD;GAAO,MAAK;GAAI,SAAS,kBAAC,GAAD;IAAU,IAAI,GAAG,EAAS;IAAe,SAAA;IAAU,CAAA;GAAI,CAAA;EACzE,EAAA,CAAA"}
|