@mercurjs/admin 2.3.2-canary.0 → 2.3.2-canary.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/{add-campaign-promotions-S4HKMFU7.js → add-campaign-promotions-NZ62V2LH.js} +3 -3
  2. package/dist/{campaign-detail-WPTZDDD5.js → campaign-detail-KZWQLIS5.js} +4 -4
  3. package/dist/{chunk-7PGZV6DQ.js → chunk-3W4T2KGY.js} +1 -1
  4. package/dist/{chunk-VKVK5D2F.js → chunk-4KULFU3V.js} +1 -1
  5. package/dist/{chunk-NKZLCOFU.js → chunk-ADI5XIXM.js} +1 -1
  6. package/dist/{chunk-6ZVRNI5K.js → chunk-AV6HBMRX.js} +1 -1
  7. package/dist/{chunk-7ZY7R6PG.js → chunk-GYHF5XBU.js} +1 -1
  8. package/dist/{chunk-H7HNJFQA.js → chunk-MIVPIACG.js} +1 -1
  9. package/dist/{chunk-NN6PSWE4.js → chunk-OQLWF43Y.js} +5 -1
  10. package/dist/{chunk-6XJUYY6G.js → chunk-PNLDVYCP.js} +1 -1
  11. package/dist/chunk-PVEB24HU.js +208 -0
  12. package/dist/{chunk-N5IUYCUZ.js → chunk-UYQY4B7J.js} +4 -2
  13. package/dist/{collection-list-LM5SH67K.js → collection-list-GMAYML6Z.js} +1 -1
  14. package/dist/index.js +68 -40
  15. package/dist/{order-edit-billing-address-2BSCXUTK.js → order-edit-billing-address-QCVPGEL6.js} +1 -1
  16. package/dist/{order-list-GQ5IOA6I.js → order-list-WGQC2X2L.js} +1 -1
  17. package/dist/pages/index.js +9 -9
  18. package/dist/{product-create-A7774JYE.js → product-create-QS5KIHET.js} +3 -3
  19. package/dist/{product-media-ROKDXANO.js → product-media-UHDJ6RSG.js} +2 -2
  20. package/dist/{product-organization-XS62HARL.js → product-organization-IX5XCZW4.js} +1 -1
  21. package/dist/{product-tag-detail-7P7MI52E.js → product-tag-detail-2YR6TXZI.js} +1 -1
  22. package/dist/{product-tag-list-43NFD36I.js → product-tag-list-3HOXFHMN.js} +1 -1
  23. package/dist/{promotion-detail-4WNHEOG4.js → promotion-detail-ADTUSGD4.js} +3 -3
  24. package/dist/{promotion-list-AJ5NBDZ2.js → promotion-list-MRNS47TP.js} +4 -4
  25. package/dist/{refund-reason-list-R573DHM7.js → refund-reason-list-ODOF3ZLM.js} +1 -1
  26. package/dist/{reset-password-7G75C4RO.js → reset-password-N4LXTU3G.js} +1 -1
  27. package/dist/{return-reason-list-A2RABTGP.js → return-reason-list-AVCC44CH.js} +1 -1
  28. package/dist/{store-details-GOVF3KFW.js → store-details-KI5D4VSI.js} +1 -1
  29. package/dist/{store-edit-W6NHNE3S.js → store-edit-B54LFFLE.js} +2 -2
  30. package/dist/{store-list-OKKZA7VO.js → store-list-3KZCD7UB.js} +1 -1
  31. package/dist/{tax-region-create-P4IKQNTU.js → tax-region-create-DVBIX7IX.js} +1 -1
  32. package/dist/{tax-region-tax-override-create-7O3KDBUJ.js → tax-region-tax-override-create-XZ5BU2FP.js} +1 -1
  33. package/dist/{tax-region-tax-override-edit-SUL5VZ5D.js → tax-region-tax-override-edit-R4EGIUIZ.js} +1 -1
  34. package/dist/{user-invite-WG57KWD3.js → user-invite-WHBNPT4I.js} +127 -27
  35. package/package.json +6 -6
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  usePromotionTableColumns,
3
3
  usePromotionTableQuery
4
- } from "./chunk-7ZY7R6PG.js";
4
+ } from "./chunk-GYHF5XBU.js";
5
5
  import {
6
6
  usePromotionTableFilters
7
7
  } from "./chunk-J4SYK3RT.js";
8
- import "./chunk-NKZLCOFU.js";
8
+ import "./chunk-ADI5XIXM.js";
9
9
  import "./chunk-JHIMVLB2.js";
10
10
  import "./chunk-MDABSESI.js";
11
11
  import "./chunk-FMFVTERD.js";
12
12
  import "./chunk-PHOCVOZ5.js";
13
- import "./chunk-NN6PSWE4.js";
13
+ import "./chunk-OQLWF43Y.js";
14
14
  import "./chunk-TKGWSUEI.js";
15
15
  import {
16
16
  KeyboundForm
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  CAMPAIGN_DETAIL_FIELDS,
3
3
  CampaignDetailPage
4
- } from "./chunk-6ZVRNI5K.js";
4
+ } from "./chunk-AV6HBMRX.js";
5
5
  import "./chunk-WP3B4NEU.js";
6
- import "./chunk-7ZY7R6PG.js";
6
+ import "./chunk-GYHF5XBU.js";
7
7
  import "./chunk-J4SYK3RT.js";
8
8
  import "./chunk-RK5N3XIX.js";
9
- import "./chunk-NKZLCOFU.js";
9
+ import "./chunk-ADI5XIXM.js";
10
10
  import "./chunk-JHIMVLB2.js";
11
11
  import "./chunk-MDABSESI.js";
12
12
  import "./chunk-FMFVTERD.js";
13
13
  import "./chunk-PHOCVOZ5.js";
14
- import "./chunk-NN6PSWE4.js";
14
+ import "./chunk-OQLWF43Y.js";
15
15
  import "./chunk-E74OUNA3.js";
16
16
  import "./chunk-H6MYB7GB.js";
17
17
  import "./chunk-THHRRYRS.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-AJLGY3LQ.js";
4
4
  import {
5
5
  i18n
6
- } from "./chunk-NN6PSWE4.js";
6
+ } from "./chunk-OQLWF43Y.js";
7
7
  import {
8
8
  require_dist
9
9
  } from "./chunk-JEHVUKYB.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  usePromotionTableColumns,
3
3
  usePromotionTableQuery
4
- } from "./chunk-7ZY7R6PG.js";
4
+ } from "./chunk-GYHF5XBU.js";
5
5
  import {
6
6
  usePromotionTableFilters
7
7
  } from "./chunk-J4SYK3RT.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  i18n
3
- } from "./chunk-NN6PSWE4.js";
3
+ } from "./chunk-OQLWF43Y.js";
4
4
 
5
5
  // src/lib/promotions.ts
6
6
  var getPromotionStatusMap = () => ({
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  usePromotionTableColumns,
7
7
  usePromotionTableQuery
8
- } from "./chunk-7ZY7R6PG.js";
8
+ } from "./chunk-GYHF5XBU.js";
9
9
  import {
10
10
  usePromotionTableFilters
11
11
  } from "./chunk-J4SYK3RT.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getPromotionStatus,
3
3
  getPromotionType
4
- } from "./chunk-NKZLCOFU.js";
4
+ } from "./chunk-ADI5XIXM.js";
5
5
  import {
6
6
  TextCell,
7
7
  TextHeader
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  getPromotionStatus,
9
9
  getPromotionType
10
- } from "./chunk-NKZLCOFU.js";
10
+ } from "./chunk-ADI5XIXM.js";
11
11
  import {
12
12
  PROMOTION_DETAIL_BASE_FIELDS
13
13
  } from "./chunk-LXTXP7ZM.js";
@@ -15666,7 +15666,11 @@ var en_default = {
15666
15666
  },
15667
15667
  deleteUserWarning: "You are about to delete the user {{name}}. This action cannot be undone.",
15668
15668
  deleteUserSuccess: "User {{name}} was successfully removed.",
15669
- invite: "Invite"
15669
+ invite: "Invite",
15670
+ inviteRolesTooltip: "If no role is selected, the user will be invited with a superuser role."
15671
+ },
15672
+ roles: {
15673
+ domain: "Roles"
15670
15674
  },
15671
15675
  marketplace: {
15672
15676
  domain: "Marketplace",
@@ -10,7 +10,7 @@ import {
10
10
  decorateVariantsWithDefaultValues,
11
11
  generateVariantsFromAttributes,
12
12
  normalizeProductFormValues
13
- } from "./chunk-7PGZV6DQ.js";
13
+ } from "./chunk-3W4T2KGY.js";
14
14
  import {
15
15
  HandleInput
16
16
  } from "./chunk-HJ56YXBU.js";
@@ -0,0 +1,208 @@
1
+ import {
2
+ fetchQuery,
3
+ sdk
4
+ } from "./chunk-DTGEFKK4.js";
5
+
6
+ // src/providers/feature-flag-provider/index.tsx
7
+ import { createContext, useCallback, useContext, useMemo } from "react";
8
+
9
+ // src/hooks/api/feature-flags.tsx
10
+ import { useQuery } from "@tanstack/react-query";
11
+ var useFeatureFlags = () => {
12
+ return useQuery({
13
+ queryKey: ["admin", "feature-flags"],
14
+ queryFn: async () => {
15
+ const response = await fetchQuery("/admin/feature-flags", {
16
+ method: "GET"
17
+ });
18
+ return response.feature_flags;
19
+ },
20
+ staleTime: 5 * 60 * 1e3,
21
+ gcTime: 10 * 60 * 1e3
22
+ });
23
+ };
24
+
25
+ // src/providers/feature-flag-provider/index.tsx
26
+ import { jsx } from "react/jsx-runtime";
27
+ var FeatureFlagContext = createContext(null);
28
+ var useFeatureFlag = (flag) => {
29
+ const context = useContext(FeatureFlagContext);
30
+ if (!context) {
31
+ return false;
32
+ }
33
+ return context.isFeatureEnabled(flag);
34
+ };
35
+ var FeatureFlagProvider = ({
36
+ children
37
+ }) => {
38
+ const { data: flags = {}, isLoading } = useFeatureFlags();
39
+ const isFeatureEnabled = useCallback(
40
+ (flag) => {
41
+ return flags[flag] === true;
42
+ },
43
+ [flags]
44
+ );
45
+ const value = useMemo(
46
+ () => ({ flags, isLoading, isFeatureEnabled }),
47
+ [flags, isLoading, isFeatureEnabled]
48
+ );
49
+ return /* @__PURE__ */ jsx(FeatureFlagContext.Provider, { value, children });
50
+ };
51
+
52
+ // src/providers/permissions-provider/permissions-context.tsx
53
+ import { createContext as createContext2 } from "react";
54
+ var PermissionsContext = createContext2(null);
55
+
56
+ // src/providers/permissions-provider/permissions-provider.tsx
57
+ import { useCallback as useCallback2, useMemo as useMemo2 } from "react";
58
+
59
+ // src/lib/permissions/constants.ts
60
+ var OPERATION_IMPLICATIONS = {
61
+ read: ["read"],
62
+ create: ["create"],
63
+ update: ["update"],
64
+ delete: ["delete"],
65
+ "*": ["read", "create", "update", "delete", "*"]
66
+ };
67
+
68
+ // src/lib/permissions/utils.ts
69
+ function parsePermission(permission) {
70
+ const parts = permission.split(":");
71
+ if (parts.length !== 2) {
72
+ return null;
73
+ }
74
+ const [resource, operation] = parts;
75
+ return {
76
+ resource,
77
+ operation
78
+ };
79
+ }
80
+ function buildPermission(resource, operation) {
81
+ return `${resource}:${operation}`;
82
+ }
83
+
84
+ // src/providers/permissions-provider/permissions-provider.tsx
85
+ import { jsx as jsx2 } from "react/jsx-runtime";
86
+ var PermissionsProvider = ({
87
+ policy,
88
+ isLoading = false,
89
+ isRbacEnabled = true,
90
+ children
91
+ }) => {
92
+ const permissionsMap = useMemo2(() => {
93
+ const index = /* @__PURE__ */ Object.create(null);
94
+ for (const granted of policy?.permissions ?? []) {
95
+ const parsed = parsePermission(granted);
96
+ if (!parsed) {
97
+ continue;
98
+ }
99
+ const { resource, operation } = parsed;
100
+ const impliedOperations = OPERATION_IMPLICATIONS[operation] || [operation];
101
+ for (const impliedOperation of impliedOperations) {
102
+ index[buildPermission(resource, impliedOperation)] = true;
103
+ }
104
+ }
105
+ return index;
106
+ }, [policy]);
107
+ const hasPermission = useCallback2(
108
+ (permission) => {
109
+ if (!isRbacEnabled) {
110
+ return true;
111
+ }
112
+ return !!permissionsMap[permission];
113
+ },
114
+ [isRbacEnabled, permissionsMap]
115
+ );
116
+ const hasAnyPermission = useCallback2(
117
+ (permissions) => {
118
+ if (!isRbacEnabled) {
119
+ return true;
120
+ }
121
+ if (!permissions?.length) {
122
+ return false;
123
+ }
124
+ return permissions.some(hasPermission);
125
+ },
126
+ [isRbacEnabled, hasPermission]
127
+ );
128
+ const hasAllPermissions = useCallback2(
129
+ (permissions) => {
130
+ if (!isRbacEnabled) {
131
+ return true;
132
+ }
133
+ if (!permissions?.length) {
134
+ return false;
135
+ }
136
+ return permissions.every(hasPermission);
137
+ },
138
+ [isRbacEnabled, hasPermission]
139
+ );
140
+ const can = useCallback2(
141
+ (resource, operation) => {
142
+ if (!isRbacEnabled) {
143
+ return true;
144
+ }
145
+ return !!permissionsMap[buildPermission(resource, operation)];
146
+ },
147
+ [isRbacEnabled, permissionsMap]
148
+ );
149
+ const value = useMemo2(
150
+ () => ({
151
+ policy,
152
+ isLoading,
153
+ hasPermission,
154
+ hasAnyPermission,
155
+ hasAllPermissions,
156
+ can
157
+ }),
158
+ [policy, isLoading, hasPermission, hasAnyPermission, hasAllPermissions, can]
159
+ );
160
+ return /* @__PURE__ */ jsx2(PermissionsContext.Provider, { value, children });
161
+ };
162
+
163
+ // src/providers/permissions-provider/use-permissions.tsx
164
+ import { useContext as useContext2 } from "react";
165
+ var usePermissions = () => {
166
+ const context = useContext2(PermissionsContext);
167
+ if (!context) {
168
+ throw new Error(
169
+ "usePermissions must be used within a PermissionsProvider"
170
+ );
171
+ }
172
+ return context;
173
+ };
174
+
175
+ // src/hooks/api/rbac-roles.tsx
176
+ import { useQuery as useQuery2 } from "@tanstack/react-query";
177
+ var ME_PERMISSIONS_QUERY_KEY = ["rbac_me_permissions"];
178
+ var mePermissionsQueryKey = ME_PERMISSIONS_QUERY_KEY;
179
+ var useMePermissions = (options) => {
180
+ return useQuery2({
181
+ queryFn: () => sdk.admin.rbac.me.permissions.query(
182
+ {}
183
+ ),
184
+ queryKey: mePermissionsQueryKey,
185
+ staleTime: 5 * 60 * 1e3,
186
+ ...options
187
+ });
188
+ };
189
+ var ASSIGNABLE_ROLES_QUERY_KEY = ["rbac_assignable_roles"];
190
+ var useRbacAssignableRoles = (query, options) => {
191
+ return useQuery2({
192
+ queryFn: () => sdk.admin.rbac.roles.assignable.query({
193
+ ...query
194
+ }),
195
+ queryKey: [...ASSIGNABLE_ROLES_QUERY_KEY, query],
196
+ staleTime: 5 * 60 * 1e3,
197
+ ...options
198
+ });
199
+ };
200
+
201
+ export {
202
+ useFeatureFlag,
203
+ FeatureFlagProvider,
204
+ PermissionsProvider,
205
+ usePermissions,
206
+ useMePermissions,
207
+ useRbacAssignableRoles
208
+ };
@@ -5,7 +5,8 @@ import {
5
5
  // src/hooks/table/query/use-user-invite-table-query.tsx
6
6
  var useUserInviteTableQuery = ({
7
7
  prefix,
8
- pageSize = 20
8
+ pageSize = 20,
9
+ fields
9
10
  }) => {
10
11
  const queryObject = useQueryParams(
11
12
  ["offset", "q", "order", "created_at", "updated_at"],
@@ -18,7 +19,8 @@ var useUserInviteTableQuery = ({
18
19
  order,
19
20
  created_at: created_at ? JSON.parse(created_at) : void 0,
20
21
  updated_at: updated_at ? JSON.parse(updated_at) : void 0,
21
- q
22
+ q,
23
+ fields
22
24
  };
23
25
  return {
24
26
  searchParams,
@@ -15,7 +15,7 @@ import "./chunk-ANDTD5VV.js";
15
15
  import "./chunk-MG4GKUJW.js";
16
16
  import "./chunk-AYVH6Q5O.js";
17
17
  import "./chunk-VOHEQ7B5.js";
18
- import "./chunk-N5IUYCUZ.js";
18
+ import "./chunk-UYQY4B7J.js";
19
19
  import "./chunk-7SVLKK6Q.js";
20
20
  import "./chunk-GR6JUIRU.js";
21
21
  import "./chunk-GRH7C3QN.js";
package/dist/index.js CHANGED
@@ -3,6 +3,12 @@ import {
3
3
  taxRegionLoader
4
4
  } from "./chunk-ASFCRSBA.js";
5
5
  import "./chunk-QR3GYYX6.js";
6
+ import {
7
+ FeatureFlagProvider,
8
+ PermissionsProvider,
9
+ useFeatureFlag,
10
+ useMePermissions
11
+ } from "./chunk-PVEB24HU.js";
6
12
  import {
7
13
  isClientError
8
14
  } from "./chunk-C6SUTRP2.js";
@@ -24,7 +30,7 @@ import {
24
30
  } from "./chunk-KDE4HKH2.js";
25
31
  import {
26
32
  I18n
27
- } from "./chunk-NN6PSWE4.js";
33
+ } from "./chunk-OQLWF43Y.js";
28
34
  import {
29
35
  SwitchBox
30
36
  } from "./chunk-2EME4AWX.js";
@@ -1528,18 +1534,40 @@ import { Outlet as Outlet4 } from "react-router-dom";
1528
1534
 
1529
1535
  // src/components/authentication/protected-route/protected-route.tsx
1530
1536
  import { Spinner as Spinner2 } from "@medusajs/icons";
1537
+ import { useMemo as useMemo4 } from "react";
1531
1538
  import { Navigate, Outlet, useLocation as useLocation3 } from "react-router-dom";
1532
1539
  import { jsx as jsx6 } from "react/jsx-runtime";
1533
1540
  var ProtectedRoute = () => {
1534
- const { user, isLoading } = useMe();
1535
1541
  const location = useLocation3();
1536
- if (isLoading) {
1542
+ const isRbacEnabled = useFeatureFlag("rbac");
1543
+ const { user, isLoading: isLoadingUser } = useMe();
1544
+ const { data: permissionsResponse, isLoading: isLoadingPermissions } = useMePermissions({
1545
+ // Don't fetch permissions until we know the user is authenticated.
1546
+ enabled: !!user && isRbacEnabled
1547
+ });
1548
+ const policy = useMemo4(() => {
1549
+ if (!permissionsResponse) {
1550
+ return null;
1551
+ }
1552
+ return {
1553
+ permissions: permissionsResponse.permissions
1554
+ };
1555
+ }, [permissionsResponse]);
1556
+ if (isLoadingUser) {
1537
1557
  return /* @__PURE__ */ jsx6("div", { className: "flex min-h-screen items-center justify-center", children: /* @__PURE__ */ jsx6(Spinner2, { className: "text-ui-fg-interactive animate-spin" }) });
1538
1558
  }
1539
1559
  if (!user) {
1540
1560
  return /* @__PURE__ */ jsx6(Navigate, { to: "/login", state: { from: location }, replace: true });
1541
1561
  }
1542
- return /* @__PURE__ */ jsx6(SidebarProvider, { children: /* @__PURE__ */ jsx6(SearchProvider, { children: /* @__PURE__ */ jsx6(Outlet, {}) }) });
1562
+ return /* @__PURE__ */ jsx6(
1563
+ PermissionsProvider,
1564
+ {
1565
+ policy,
1566
+ isLoading: isLoadingPermissions,
1567
+ isRbacEnabled,
1568
+ children: /* @__PURE__ */ jsx6(SidebarProvider, { children: /* @__PURE__ */ jsx6(SearchProvider, { children: /* @__PURE__ */ jsx6(Outlet, {}) }) })
1569
+ }
1570
+ );
1543
1571
  };
1544
1572
 
1545
1573
  // src/components/layout/main-layout/main-layout.tsx
@@ -3269,7 +3297,7 @@ var PublicLayout = () => {
3269
3297
  };
3270
3298
 
3271
3299
  // src/components/layout/settings-layout/settings-layout.tsx
3272
- import { useEffect as useEffect10, useMemo as useMemo4, useState as useState12 } from "react";
3300
+ import { useEffect as useEffect10, useMemo as useMemo5, useState as useState12 } from "react";
3273
3301
  import { ArrowUturnLeft as ArrowUturnLeft2, MinusMini } from "@medusajs/icons";
3274
3302
  import { Divider as Divider2, IconButton as IconButton6, Text as Text8, clx as clx7 } from "@medusajs/ui";
3275
3303
  import { Collapsible as RadixCollapsible2 } from "radix-ui";
@@ -3289,7 +3317,7 @@ var extensionNavItems = customSettingsItems.sort((a, b) => (a.rank ?? 0) - (b.ra
3289
3317
  }));
3290
3318
  var useSettingRoutes = () => {
3291
3319
  const { t: t2 } = useTranslation10();
3292
- return useMemo4(
3320
+ return useMemo5(
3293
3321
  () => [
3294
3322
  {
3295
3323
  label: t2("marketplace.domain"),
@@ -3346,7 +3374,7 @@ var useSettingRoutes = () => {
3346
3374
  };
3347
3375
  var useDeveloperRoutes = () => {
3348
3376
  const { t: t2 } = useTranslation10();
3349
- return useMemo4(
3377
+ return useMemo5(
3350
3378
  () => [
3351
3379
  {
3352
3380
  label: t2("apiKeyManagement.domain.publishable"),
@@ -3362,7 +3390,7 @@ var useDeveloperRoutes = () => {
3362
3390
  };
3363
3391
  var useMyAccountRoutes = () => {
3364
3392
  const { t: t2 } = useTranslation10();
3365
- return useMemo4(
3393
+ return useMemo5(
3366
3394
  () => [
3367
3395
  {
3368
3396
  label: t2("profile.domain"),
@@ -3518,7 +3546,7 @@ function getRouteMap({
3518
3546
  children: [
3519
3547
  {
3520
3548
  path: "create",
3521
- lazy: () => import("./product-create-A7774JYE.js")
3549
+ lazy: () => import("./product-create-QS5KIHET.js")
3522
3550
  },
3523
3551
  {
3524
3552
  path: "bulk-edit",
@@ -3574,7 +3602,7 @@ function getRouteMap({
3574
3602
  },
3575
3603
  {
3576
3604
  path: "organization",
3577
- lazy: () => import("./product-organization-XS62HARL.js")
3605
+ lazy: () => import("./product-organization-IX5XCZW4.js")
3578
3606
  },
3579
3607
  {
3580
3608
  path: "shipping-profile",
@@ -3582,7 +3610,7 @@ function getRouteMap({
3582
3610
  },
3583
3611
  {
3584
3612
  path: "media",
3585
- lazy: () => import("./product-media-ROKDXANO.js")
3613
+ lazy: () => import("./product-media-UHDJ6RSG.js")
3586
3614
  },
3587
3615
  {
3588
3616
  path: "variants/create",
@@ -3704,7 +3732,7 @@ function getRouteMap({
3704
3732
  children: [
3705
3733
  {
3706
3734
  path: "",
3707
- lazy: () => import("./order-list-GQ5IOA6I.js")
3735
+ lazy: () => import("./order-list-WGQC2X2L.js")
3708
3736
  },
3709
3737
  {
3710
3738
  path: ":id",
@@ -3757,7 +3785,7 @@ function getRouteMap({
3757
3785
  },
3758
3786
  {
3759
3787
  path: "billing-address",
3760
- lazy: () => import("./order-edit-billing-address-2BSCXUTK.js")
3788
+ lazy: () => import("./order-edit-billing-address-QCVPGEL6.js")
3761
3789
  },
3762
3790
  {
3763
3791
  path: "metadata/edit",
@@ -3778,7 +3806,7 @@ function getRouteMap({
3778
3806
  children: [
3779
3807
  {
3780
3808
  path: "",
3781
- lazy: () => import("./promotion-list-AJ5NBDZ2.js")
3809
+ lazy: () => import("./promotion-list-MRNS47TP.js")
3782
3810
  },
3783
3811
  {
3784
3812
  path: "create",
@@ -3787,7 +3815,7 @@ function getRouteMap({
3787
3815
  {
3788
3816
  path: ":id",
3789
3817
  lazy: async () => {
3790
- const { Breadcrumb, loader } = await import("./promotion-detail-4WNHEOG4.js");
3818
+ const { Breadcrumb, loader } = await import("./promotion-detail-ADTUSGD4.js");
3791
3819
  return {
3792
3820
  Component: Outlet4,
3793
3821
  loader,
@@ -3799,7 +3827,7 @@ function getRouteMap({
3799
3827
  children: [
3800
3828
  {
3801
3829
  path: "",
3802
- lazy: () => import("./promotion-detail-4WNHEOG4.js"),
3830
+ lazy: () => import("./promotion-detail-ADTUSGD4.js"),
3803
3831
  children: [
3804
3832
  {
3805
3833
  path: "edit",
@@ -3838,7 +3866,7 @@ function getRouteMap({
3838
3866
  {
3839
3867
  path: ":id",
3840
3868
  lazy: async () => {
3841
- const { Breadcrumb, loader } = await import("./campaign-detail-WPTZDDD5.js");
3869
+ const { Breadcrumb, loader } = await import("./campaign-detail-KZWQLIS5.js");
3842
3870
  return {
3843
3871
  Component: Outlet4,
3844
3872
  loader,
@@ -3850,7 +3878,7 @@ function getRouteMap({
3850
3878
  children: [
3851
3879
  {
3852
3880
  path: "",
3853
- lazy: () => import("./campaign-detail-WPTZDDD5.js"),
3881
+ lazy: () => import("./campaign-detail-KZWQLIS5.js"),
3854
3882
  children: [
3855
3883
  {
3856
3884
  path: "edit",
@@ -3866,7 +3894,7 @@ function getRouteMap({
3866
3894
  },
3867
3895
  {
3868
3896
  path: "add-promotions",
3869
- lazy: () => import("./add-campaign-promotions-S4HKMFU7.js")
3897
+ lazy: () => import("./add-campaign-promotions-NZ62V2LH.js")
3870
3898
  }
3871
3899
  ]
3872
3900
  }
@@ -3926,7 +3954,7 @@ function getRouteMap({
3926
3954
  children: [
3927
3955
  {
3928
3956
  path: "",
3929
- lazy: () => import("./collection-list-LM5SH67K.js"),
3957
+ lazy: () => import("./collection-list-GMAYML6Z.js"),
3930
3958
  children: [
3931
3959
  {
3932
3960
  path: "create",
@@ -4162,7 +4190,7 @@ function getRouteMap({
4162
4190
  children: [
4163
4191
  {
4164
4192
  path: "",
4165
- lazy: () => import("./store-list-OKKZA7VO.js"),
4193
+ lazy: () => import("./store-list-3KZCD7UB.js"),
4166
4194
  children: [
4167
4195
  {
4168
4196
  path: "create",
@@ -4177,7 +4205,7 @@ function getRouteMap({
4177
4205
  {
4178
4206
  path: ":id",
4179
4207
  lazy: async () => {
4180
- const { Breadcrumb } = await import("./store-details-GOVF3KFW.js");
4208
+ const { Breadcrumb } = await import("./store-details-KI5D4VSI.js");
4181
4209
  return {
4182
4210
  Component: Outlet4,
4183
4211
  handle: {
@@ -4188,11 +4216,11 @@ function getRouteMap({
4188
4216
  children: [
4189
4217
  {
4190
4218
  path: "",
4191
- lazy: () => import("./store-details-GOVF3KFW.js"),
4219
+ lazy: () => import("./store-details-KI5D4VSI.js"),
4192
4220
  children: [
4193
4221
  {
4194
4222
  path: "edit",
4195
- lazy: () => import("./store-edit-W6NHNE3S.js")
4223
+ lazy: () => import("./store-edit-B54LFFLE.js")
4196
4224
  },
4197
4225
  {
4198
4226
  path: "edit-address",
@@ -4612,7 +4640,7 @@ function getRouteMap({
4612
4640
  children: [
4613
4641
  {
4614
4642
  path: "invite",
4615
- lazy: () => import("./user-invite-WG57KWD3.js")
4643
+ lazy: () => import("./user-invite-WHBNPT4I.js")
4616
4644
  }
4617
4645
  ]
4618
4646
  },
@@ -4894,7 +4922,7 @@ function getRouteMap({
4894
4922
  children: [
4895
4923
  {
4896
4924
  path: "",
4897
- lazy: () => import("./product-tag-list-43NFD36I.js"),
4925
+ lazy: () => import("./product-tag-list-3HOXFHMN.js"),
4898
4926
  children: [
4899
4927
  {
4900
4928
  path: "create",
@@ -4905,7 +4933,7 @@ function getRouteMap({
4905
4933
  {
4906
4934
  path: ":id",
4907
4935
  lazy: async () => {
4908
- const { Breadcrumb, loader } = await import("./product-tag-detail-7P7MI52E.js");
4936
+ const { Breadcrumb, loader } = await import("./product-tag-detail-2YR6TXZI.js");
4909
4937
  return {
4910
4938
  Component: Outlet4,
4911
4939
  loader,
@@ -4917,7 +4945,7 @@ function getRouteMap({
4917
4945
  children: [
4918
4946
  {
4919
4947
  path: "",
4920
- lazy: () => import("./product-tag-detail-7P7MI52E.js"),
4948
+ lazy: () => import("./product-tag-detail-2YR6TXZI.js"),
4921
4949
  children: [
4922
4950
  {
4923
4951
  path: "edit",
@@ -5156,7 +5184,7 @@ function getRouteMap({
5156
5184
  children: [
5157
5185
  {
5158
5186
  path: "create",
5159
- lazy: () => import("./tax-region-create-P4IKQNTU.js")
5187
+ lazy: () => import("./tax-region-create-DVBIX7IX.js")
5160
5188
  }
5161
5189
  ]
5162
5190
  },
@@ -5187,11 +5215,11 @@ function getRouteMap({
5187
5215
  },
5188
5216
  {
5189
5217
  path: "overrides/create",
5190
- lazy: () => import("./tax-region-tax-override-create-7O3KDBUJ.js")
5218
+ lazy: () => import("./tax-region-tax-override-create-XZ5BU2FP.js")
5191
5219
  },
5192
5220
  {
5193
5221
  path: "overrides/:tax_rate_id/edit",
5194
- lazy: () => import("./tax-region-tax-override-edit-SUL5VZ5D.js")
5222
+ lazy: () => import("./tax-region-tax-override-edit-R4EGIUIZ.js")
5195
5223
  },
5196
5224
  {
5197
5225
  path: "tax-rates/create",
@@ -5234,11 +5262,11 @@ function getRouteMap({
5234
5262
  },
5235
5263
  {
5236
5264
  path: "overrides/create",
5237
- lazy: () => import("./tax-region-tax-override-create-7O3KDBUJ.js")
5265
+ lazy: () => import("./tax-region-tax-override-create-XZ5BU2FP.js")
5238
5266
  },
5239
5267
  {
5240
5268
  path: "overrides/:tax_rate_id/edit",
5241
- lazy: () => import("./tax-region-tax-override-edit-SUL5VZ5D.js")
5269
+ lazy: () => import("./tax-region-tax-override-edit-R4EGIUIZ.js")
5242
5270
  }
5243
5271
  ]
5244
5272
  }
@@ -5257,7 +5285,7 @@ function getRouteMap({
5257
5285
  children: [
5258
5286
  {
5259
5287
  path: "",
5260
- lazy: () => import("./return-reason-list-A2RABTGP.js"),
5288
+ lazy: () => import("./return-reason-list-AVCC44CH.js"),
5261
5289
  children: [
5262
5290
  {
5263
5291
  path: "create",
@@ -5285,7 +5313,7 @@ function getRouteMap({
5285
5313
  children: [
5286
5314
  {
5287
5315
  path: "",
5288
- lazy: () => import("./refund-reason-list-R573DHM7.js"),
5316
+ lazy: () => import("./refund-reason-list-ODOF3ZLM.js"),
5289
5317
  children: [
5290
5318
  {
5291
5319
  path: "create",
@@ -5322,7 +5350,7 @@ function getRouteMap({
5322
5350
  },
5323
5351
  {
5324
5352
  path: "/reset-password",
5325
- lazy: () => import("./reset-password-7G75C4RO.js")
5353
+ lazy: () => import("./reset-password-N4LXTU3G.js")
5326
5354
  },
5327
5355
  {
5328
5356
  path: "/invite",
@@ -5341,17 +5369,17 @@ function getRouteMap({
5341
5369
  }
5342
5370
 
5343
5371
  // src/app.tsx
5344
- import { useMemo as useMemo5 } from "react";
5372
+ import { useMemo as useMemo6 } from "react";
5345
5373
  import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
5346
5374
  function App() {
5347
- const routes = useMemo5(() => {
5375
+ const routes = useMemo6(() => {
5348
5376
  return {
5349
5377
  settingsRoutes: createRouteMap(getRoutesByType(customRoutes, "settings")),
5350
5378
  mainRoutes: createRouteMap(getRoutesByType(customRoutes, "main")),
5351
5379
  publicRoutes: createRouteMap(getRoutesByType(customRoutes, "public"))
5352
5380
  };
5353
5381
  }, []);
5354
- return /* @__PURE__ */ jsx18(TooltipProvider, { children: /* @__PURE__ */ jsx18(HelmetProvider, { children: /* @__PURE__ */ jsx18(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx18(ThemeProvider, { children: /* @__PURE__ */ jsxs11(
5382
+ return /* @__PURE__ */ jsx18(TooltipProvider, { children: /* @__PURE__ */ jsx18(HelmetProvider, { children: /* @__PURE__ */ jsx18(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx18(ThemeProvider, { children: /* @__PURE__ */ jsx18(FeatureFlagProvider, { children: /* @__PURE__ */ jsxs11(
5355
5383
  ExtensionProvider,
5356
5384
  {
5357
5385
  widgets,
@@ -5370,7 +5398,7 @@ function App() {
5370
5398
  /* @__PURE__ */ jsx18(Toaster, {})
5371
5399
  ]
5372
5400
  }
5373
- ) }) }) }) });
5401
+ ) }) }) }) }) });
5374
5402
  }
5375
5403
  export {
5376
5404
  ActionMenu,
@@ -9,7 +9,7 @@ import "./chunk-FMFVTERD.js";
9
9
  import "./chunk-JRTZWK77.js";
10
10
  import {
11
11
  i18n
12
- } from "./chunk-NN6PSWE4.js";
12
+ } from "./chunk-OQLWF43Y.js";
13
13
  import "./chunk-TKGWSUEI.js";
14
14
  import {
15
15
  KeyboundForm
@@ -6,7 +6,7 @@ import "./chunk-ANDTD5VV.js";
6
6
  import "./chunk-MG4GKUJW.js";
7
7
  import "./chunk-AYVH6Q5O.js";
8
8
  import "./chunk-VOHEQ7B5.js";
9
- import "./chunk-N5IUYCUZ.js";
9
+ import "./chunk-UYQY4B7J.js";
10
10
  import "./chunk-7SVLKK6Q.js";
11
11
  import "./chunk-GR6JUIRU.js";
12
12
  import "./chunk-GRH7C3QN.js";
@@ -196,12 +196,12 @@ import {
196
196
  import "../chunk-RKFEXC2J.js";
197
197
  import {
198
198
  CampaignDetailPage
199
- } from "../chunk-6ZVRNI5K.js";
199
+ } from "../chunk-AV6HBMRX.js";
200
200
  import "../chunk-WP3B4NEU.js";
201
201
  import {
202
202
  PromotionListPage
203
- } from "../chunk-VKVK5D2F.js";
204
- import "../chunk-7ZY7R6PG.js";
203
+ } from "../chunk-4KULFU3V.js";
204
+ import "../chunk-GYHF5XBU.js";
205
205
  import "../chunk-J4SYK3RT.js";
206
206
  import {
207
207
  CreatePromotionSchema,
@@ -212,10 +212,10 @@ import "../chunk-BGI4CCBX.js";
212
212
  import "../chunk-54TMLQH3.js";
213
213
  import {
214
214
  PromotionDetailPage
215
- } from "../chunk-H7HNJFQA.js";
215
+ } from "../chunk-MIVPIACG.js";
216
216
  import "../chunk-QLOJNFUE.js";
217
217
  import "../chunk-RK5N3XIX.js";
218
- import "../chunk-NKZLCOFU.js";
218
+ import "../chunk-ADI5XIXM.js";
219
219
  import "../chunk-MAEP2UCK.js";
220
220
  import "../chunk-HFCJJJKP.js";
221
221
  import "../chunk-6Q2JZ5YN.js";
@@ -252,7 +252,7 @@ import "../chunk-ANDTD5VV.js";
252
252
  import "../chunk-MG4GKUJW.js";
253
253
  import "../chunk-AYVH6Q5O.js";
254
254
  import "../chunk-VOHEQ7B5.js";
255
- import "../chunk-N5IUYCUZ.js";
255
+ import "../chunk-UYQY4B7J.js";
256
256
  import "../chunk-7SVLKK6Q.js";
257
257
  import "../chunk-GR6JUIRU.js";
258
258
  import "../chunk-GRH7C3QN.js";
@@ -302,12 +302,12 @@ import "../chunk-DB6ANJBO.js";
302
302
  import "../chunk-PHOCVOZ5.js";
303
303
  import {
304
304
  ProductCreatePage
305
- } from "../chunk-6XJUYY6G.js";
305
+ } from "../chunk-PNLDVYCP.js";
306
306
  import "../chunk-IIFQ7KYL.js";
307
307
  import "../chunk-32URSQ4F.js";
308
308
  import {
309
309
  ProductCreateSchema
310
- } from "../chunk-7PGZV6DQ.js";
310
+ } from "../chunk-3W4T2KGY.js";
311
311
  import "../chunk-HJ56YXBU.js";
312
312
  import "../chunk-AJLGY3LQ.js";
313
313
  import "../chunk-SMQT3ZNO.js";
@@ -320,7 +320,7 @@ import "../chunk-SR3DYN52.js";
320
320
  import "../chunk-FREUYHMS.js";
321
321
  import "../chunk-VSLHL2AZ.js";
322
322
  import "../chunk-KDE4HKH2.js";
323
- import "../chunk-NN6PSWE4.js";
323
+ import "../chunk-OQLWF43Y.js";
324
324
  import "../chunk-2EME4AWX.js";
325
325
  import "../chunk-LO2ZWQGL.js";
326
326
  import "../chunk-SNRPCOU4.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  ProductCreate
3
- } from "./chunk-6XJUYY6G.js";
3
+ } from "./chunk-PNLDVYCP.js";
4
4
  import "./chunk-IIFQ7KYL.js";
5
5
  import "./chunk-32URSQ4F.js";
6
- import "./chunk-7PGZV6DQ.js";
6
+ import "./chunk-3W4T2KGY.js";
7
7
  import "./chunk-HJ56YXBU.js";
8
8
  import "./chunk-AJLGY3LQ.js";
9
9
  import "./chunk-SMQT3ZNO.js";
@@ -16,7 +16,7 @@ import "./chunk-SR3DYN52.js";
16
16
  import "./chunk-FREUYHMS.js";
17
17
  import "./chunk-VSLHL2AZ.js";
18
18
  import "./chunk-KDE4HKH2.js";
19
- import "./chunk-NN6PSWE4.js";
19
+ import "./chunk-OQLWF43Y.js";
20
20
  import "./chunk-2EME4AWX.js";
21
21
  import "./chunk-SNRPCOU4.js";
22
22
  import "./chunk-IQPN4PZJ.js";
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-32URSQ4F.js";
4
4
  import {
5
5
  EditProductMediaSchema
6
- } from "./chunk-7PGZV6DQ.js";
6
+ } from "./chunk-3W4T2KGY.js";
7
7
  import "./chunk-AJLGY3LQ.js";
8
8
  import "./chunk-SMQT3ZNO.js";
9
9
  import "./chunk-VSLHL2AZ.js";
10
- import "./chunk-NN6PSWE4.js";
10
+ import "./chunk-OQLWF43Y.js";
11
11
  import "./chunk-TKGWSUEI.js";
12
12
  import {
13
13
  KeyboundForm
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-SR3DYN52.js";
11
11
  import {
12
12
  i18n
13
- } from "./chunk-NN6PSWE4.js";
13
+ } from "./chunk-OQLWF43Y.js";
14
14
  import {
15
15
  SwitchBox
16
16
  } from "./chunk-2EME4AWX.js";
@@ -29,7 +29,7 @@ import "./chunk-ANDTD5VV.js";
29
29
  import "./chunk-MG4GKUJW.js";
30
30
  import "./chunk-AYVH6Q5O.js";
31
31
  import "./chunk-VOHEQ7B5.js";
32
- import "./chunk-N5IUYCUZ.js";
32
+ import "./chunk-UYQY4B7J.js";
33
33
  import "./chunk-7SVLKK6Q.js";
34
34
  import "./chunk-GR6JUIRU.js";
35
35
  import "./chunk-GRH7C3QN.js";
@@ -29,7 +29,7 @@ import "./chunk-ANDTD5VV.js";
29
29
  import "./chunk-MG4GKUJW.js";
30
30
  import "./chunk-AYVH6Q5O.js";
31
31
  import "./chunk-VOHEQ7B5.js";
32
- import "./chunk-N5IUYCUZ.js";
32
+ import "./chunk-UYQY4B7J.js";
33
33
  import "./chunk-7SVLKK6Q.js";
34
34
  import "./chunk-GR6JUIRU.js";
35
35
  import "./chunk-GRH7C3QN.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  PromotionDetailPage
3
- } from "./chunk-H7HNJFQA.js";
3
+ } from "./chunk-MIVPIACG.js";
4
4
  import "./chunk-QLOJNFUE.js";
5
5
  import "./chunk-RK5N3XIX.js";
6
- import "./chunk-NKZLCOFU.js";
6
+ import "./chunk-ADI5XIXM.js";
7
7
  import {
8
8
  PROMOTION_DETAIL_BASE_FIELDS,
9
9
  promotionLoader
@@ -11,7 +11,7 @@ import {
11
11
  import "./chunk-QDPLZDMX.js";
12
12
  import "./chunk-XSX255FK.js";
13
13
  import "./chunk-FMFVTERD.js";
14
- import "./chunk-NN6PSWE4.js";
14
+ import "./chunk-OQLWF43Y.js";
15
15
  import "./chunk-E74OUNA3.js";
16
16
  import "./chunk-H6MYB7GB.js";
17
17
  import "./chunk-MEQLWAZC.js";
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  PromotionListPage
3
- } from "./chunk-VKVK5D2F.js";
4
- import "./chunk-7ZY7R6PG.js";
3
+ } from "./chunk-4KULFU3V.js";
4
+ import "./chunk-GYHF5XBU.js";
5
5
  import "./chunk-J4SYK3RT.js";
6
- import "./chunk-NKZLCOFU.js";
6
+ import "./chunk-ADI5XIXM.js";
7
7
  import "./chunk-JHIMVLB2.js";
8
8
  import "./chunk-MDABSESI.js";
9
9
  import "./chunk-FMFVTERD.js";
10
10
  import "./chunk-PHOCVOZ5.js";
11
- import "./chunk-NN6PSWE4.js";
11
+ import "./chunk-OQLWF43Y.js";
12
12
  import "./chunk-E74OUNA3.js";
13
13
  import "./chunk-H6MYB7GB.js";
14
14
  import "./chunk-THHRRYRS.js";
@@ -20,7 +20,7 @@ import "./chunk-ANDTD5VV.js";
20
20
  import "./chunk-MG4GKUJW.js";
21
21
  import "./chunk-AYVH6Q5O.js";
22
22
  import "./chunk-VOHEQ7B5.js";
23
- import "./chunk-N5IUYCUZ.js";
23
+ import "./chunk-UYQY4B7J.js";
24
24
  import "./chunk-7SVLKK6Q.js";
25
25
  import "./chunk-GR6JUIRU.js";
26
26
  import "./chunk-GRH7C3QN.js";
@@ -5,7 +5,7 @@ import "./chunk-U2EI2ZLM.js";
5
5
  import "./chunk-FMFVTERD.js";
6
6
  import {
7
7
  i18n
8
- } from "./chunk-NN6PSWE4.js";
8
+ } from "./chunk-OQLWF43Y.js";
9
9
  import {
10
10
  Form
11
11
  } from "./chunk-3QSRE5LS.js";
@@ -23,7 +23,7 @@ import "./chunk-ANDTD5VV.js";
23
23
  import "./chunk-MG4GKUJW.js";
24
24
  import "./chunk-AYVH6Q5O.js";
25
25
  import "./chunk-VOHEQ7B5.js";
26
- import "./chunk-N5IUYCUZ.js";
26
+ import "./chunk-UYQY4B7J.js";
27
27
  import "./chunk-7SVLKK6Q.js";
28
28
  import "./chunk-GR6JUIRU.js";
29
29
  import "./chunk-GRH7C3QN.js";
@@ -14,7 +14,7 @@ import "./chunk-ANDTD5VV.js";
14
14
  import "./chunk-MG4GKUJW.js";
15
15
  import "./chunk-AYVH6Q5O.js";
16
16
  import "./chunk-VOHEQ7B5.js";
17
- import "./chunk-N5IUYCUZ.js";
17
+ import "./chunk-UYQY4B7J.js";
18
18
  import "./chunk-7SVLKK6Q.js";
19
19
  import "./chunk-GR6JUIRU.js";
20
20
  import "./chunk-GRH7C3QN.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  MediaSchema
3
- } from "./chunk-7PGZV6DQ.js";
3
+ } from "./chunk-3W4T2KGY.js";
4
4
  import {
5
5
  HandleInput
6
6
  } from "./chunk-HJ56YXBU.js";
@@ -9,7 +9,7 @@ import "./chunk-SMQT3ZNO.js";
9
9
  import {
10
10
  FileUpload
11
11
  } from "./chunk-VSLHL2AZ.js";
12
- import "./chunk-NN6PSWE4.js";
12
+ import "./chunk-OQLWF43Y.js";
13
13
  import {
14
14
  SwitchBox
15
15
  } from "./chunk-2EME4AWX.js";
@@ -13,7 +13,7 @@ import "./chunk-ANDTD5VV.js";
13
13
  import "./chunk-MG4GKUJW.js";
14
14
  import "./chunk-AYVH6Q5O.js";
15
15
  import "./chunk-VOHEQ7B5.js";
16
- import "./chunk-N5IUYCUZ.js";
16
+ import "./chunk-UYQY4B7J.js";
17
17
  import "./chunk-7SVLKK6Q.js";
18
18
  import "./chunk-GR6JUIRU.js";
19
19
  import "./chunk-GRH7C3QN.js";
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-SR3DYN52.js";
20
20
  import {
21
21
  i18n
22
- } from "./chunk-NN6PSWE4.js";
22
+ } from "./chunk-OQLWF43Y.js";
23
23
  import "./chunk-TKGWSUEI.js";
24
24
  import {
25
25
  KeyboundForm
@@ -36,7 +36,7 @@ import "./chunk-ANDTD5VV.js";
36
36
  import "./chunk-MG4GKUJW.js";
37
37
  import "./chunk-AYVH6Q5O.js";
38
38
  import "./chunk-VOHEQ7B5.js";
39
- import "./chunk-N5IUYCUZ.js";
39
+ import "./chunk-UYQY4B7J.js";
40
40
  import "./chunk-7SVLKK6Q.js";
41
41
  import "./chunk-GR6JUIRU.js";
42
42
  import "./chunk-GRH7C3QN.js";
@@ -36,7 +36,7 @@ import "./chunk-ANDTD5VV.js";
36
36
  import "./chunk-MG4GKUJW.js";
37
37
  import "./chunk-AYVH6Q5O.js";
38
38
  import "./chunk-VOHEQ7B5.js";
39
- import "./chunk-N5IUYCUZ.js";
39
+ import "./chunk-UYQY4B7J.js";
40
40
  import "./chunk-7SVLKK6Q.js";
41
41
  import "./chunk-GR6JUIRU.js";
42
42
  import "./chunk-GRH7C3QN.js";
@@ -1,9 +1,20 @@
1
+ import {
2
+ useFeatureFlag,
3
+ usePermissions,
4
+ useRbacAssignableRoles
5
+ } from "./chunk-PVEB24HU.js";
1
6
  import {
2
7
  isFetchError
3
8
  } from "./chunk-C6SUTRP2.js";
9
+ import {
10
+ ListSummary
11
+ } from "./chunk-4F5GP7J7.js";
4
12
  import {
5
13
  useUserInviteTableQuery
6
- } from "./chunk-N5IUYCUZ.js";
14
+ } from "./chunk-UYQY4B7J.js";
15
+ import {
16
+ Combobox
17
+ } from "./chunk-SR3DYN52.js";
7
18
  import {
8
19
  KeyboundForm
9
20
  } from "./chunk-SITRHMZZ.js";
@@ -64,7 +75,8 @@ import { Trans, useTranslation } from "react-i18next";
64
75
  import * as zod from "zod";
65
76
  import { jsx, jsxs } from "react/jsx-runtime";
66
77
  var InviteUserSchema = zod.object({
67
- email: zod.string().email()
78
+ email: zod.string().email(),
79
+ roles: zod.array(zod.string()).optional()
68
80
  });
69
81
  var PAGE_SIZE = 10;
70
82
  var PREFIX = "usr_invite";
@@ -79,15 +91,47 @@ var getBaseUrl = () => {
79
91
  var INVITE_URL = `${window.location.origin}${getBaseUrl()}/invite?token=`;
80
92
  var InviteUserForm = () => {
81
93
  const { t } = useTranslation();
94
+ const isRbacEnabled = useFeatureFlag("rbac");
95
+ const { hasPermission } = usePermissions();
96
+ const canReadRbacRoles = hasPermission("rbac_role:read");
97
+ const showRbacRolesField = isRbacEnabled && canReadRbacRoles;
82
98
  const form = useForm({
83
99
  defaultValues: {
84
- email: ""
100
+ email: "",
101
+ roles: []
85
102
  },
86
103
  resolver: zodResolver(InviteUserSchema)
87
104
  });
105
+ const { data: assignableData, isPending: isRolesLoading } = useRbacAssignableRoles(
106
+ { limit: 200, order: "name" },
107
+ { enabled: showRbacRolesField }
108
+ );
109
+ const roleOptions = useMemo(() => {
110
+ return (assignableData?.roles ?? []).map((role) => ({
111
+ label: role.name,
112
+ value: role.id
113
+ }));
114
+ }, [assignableData?.roles]);
115
+ const inviteFields = useMemo(() => {
116
+ if (!showRbacRolesField) {
117
+ return void 0;
118
+ }
119
+ return [
120
+ "id",
121
+ "email",
122
+ "accepted",
123
+ "token",
124
+ "expires_at",
125
+ "created_at",
126
+ "updated_at",
127
+ "rbac_roles.id",
128
+ "rbac_roles.name"
129
+ ].join(",");
130
+ }, [showRbacRolesField]);
88
131
  const { raw, searchParams } = useUserInviteTableQuery({
89
132
  prefix: PREFIX,
90
- pageSize: PAGE_SIZE
133
+ pageSize: PAGE_SIZE,
134
+ fields: inviteFields
91
135
  });
92
136
  const {
93
137
  invites,
@@ -96,7 +140,7 @@ var InviteUserForm = () => {
96
140
  isError,
97
141
  error
98
142
  } = useInvites(searchParams);
99
- const columns = useColumns();
143
+ const columns = useColumns({ isRbacEnabled: showRbacRolesField });
100
144
  const { table } = useDataTable({
101
145
  data: invites ?? [],
102
146
  columns,
@@ -109,7 +153,13 @@ var InviteUserForm = () => {
109
153
  const { mutateAsync, isPending } = useCreateInvite();
110
154
  const handleSubmit = form.handleSubmit(async (values) => {
111
155
  try {
112
- await mutateAsync({ email: values.email });
156
+ const payload = {
157
+ email: values.email
158
+ };
159
+ if (showRbacRolesField && values.roles?.length) {
160
+ payload.roles = values.roles;
161
+ }
162
+ await mutateAsync(payload);
113
163
  form.reset();
114
164
  } catch (error2) {
115
165
  if (isFetchError(error2) && error2.status === 400) {
@@ -165,26 +215,63 @@ var InviteUserForm = () => {
165
215
  className: "flex flex-col gap-y-4",
166
216
  "data-testid": "user-invite-form-email-section",
167
217
  children: [
168
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsx(
169
- Form.Field,
170
- {
171
- control: form.control,
172
- name: "email",
173
- render: ({ field }) => {
174
- return /* @__PURE__ */ jsxs(Form.Item, { "data-testid": "user-invite-form-email-item", children: [
175
- /* @__PURE__ */ jsx(Form.Label, { "data-testid": "user-invite-form-email-label", children: t("fields.email") }),
176
- /* @__PURE__ */ jsx(Form.Control, { "data-testid": "user-invite-form-email-control", children: /* @__PURE__ */ jsx(
177
- Input,
178
- {
179
- ...field,
180
- "data-testid": "user-invite-form-email-input"
181
- }
182
- ) }),
183
- /* @__PURE__ */ jsx(Form.ErrorMessage, { "data-testid": "user-invite-form-email-error" })
184
- ] });
218
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
219
+ /* @__PURE__ */ jsx(
220
+ Form.Field,
221
+ {
222
+ control: form.control,
223
+ name: "email",
224
+ render: ({ field }) => {
225
+ return /* @__PURE__ */ jsxs(Form.Item, { "data-testid": "user-invite-form-email-item", children: [
226
+ /* @__PURE__ */ jsx(Form.Label, { "data-testid": "user-invite-form-email-label", children: t("fields.email") }),
227
+ /* @__PURE__ */ jsx(Form.Control, { "data-testid": "user-invite-form-email-control", children: /* @__PURE__ */ jsx(
228
+ Input,
229
+ {
230
+ ...field,
231
+ "data-testid": "user-invite-form-email-input"
232
+ }
233
+ ) }),
234
+ /* @__PURE__ */ jsx(Form.ErrorMessage, { "data-testid": "user-invite-form-email-error" })
235
+ ] });
236
+ }
185
237
  }
186
- }
187
- ) }),
238
+ ),
239
+ showRbacRolesField && /* @__PURE__ */ jsx(
240
+ Form.Field,
241
+ {
242
+ control: form.control,
243
+ name: "roles",
244
+ render: ({ field }) => {
245
+ return /* @__PURE__ */ jsxs(Form.Item, { "data-testid": "user-invite-form-roles-item", children: [
246
+ /* @__PURE__ */ jsx(
247
+ Form.Label,
248
+ {
249
+ optional: true,
250
+ tooltip: t("users.inviteRolesTooltip"),
251
+ "data-testid": "user-invite-form-roles-label",
252
+ children: t("roles.domain")
253
+ }
254
+ ),
255
+ /* @__PURE__ */ jsx(Form.Control, { "data-testid": "user-invite-form-roles-control", children: /* @__PURE__ */ jsx(
256
+ Combobox,
257
+ {
258
+ ...field,
259
+ value: field.value ?? [],
260
+ onChange: (value) => {
261
+ field.onChange(value ?? []);
262
+ },
263
+ options: roleOptions,
264
+ placeholder: t("labels.selectValues"),
265
+ disabled: isRolesLoading,
266
+ "data-testid": "user-invite-form-roles-input"
267
+ }
268
+ ) }),
269
+ /* @__PURE__ */ jsx(Form.ErrorMessage, { "data-testid": "user-invite-form-roles-error" })
270
+ ] });
271
+ }
272
+ }
273
+ )
274
+ ] }),
188
275
  /* @__PURE__ */ jsx("div", { className: "flex items-center justify-end", children: /* @__PURE__ */ jsx(
189
276
  Button,
190
277
  {
@@ -306,7 +393,7 @@ var InviteActions = ({ invite }) => {
306
393
  );
307
394
  };
308
395
  var columnHelper = createColumnHelper();
309
- var useColumns = () => {
396
+ var useColumns = ({ isRbacEnabled }) => {
310
397
  const { t } = useTranslation();
311
398
  return useMemo(
312
399
  () => [
@@ -316,6 +403,19 @@ var useColumns = () => {
316
403
  return getValue();
317
404
  }
318
405
  }),
406
+ ...isRbacEnabled ? [
407
+ columnHelper.display({
408
+ id: "roles",
409
+ header: t("roles.domain"),
410
+ cell: ({ row }) => {
411
+ const roleNames = row.original.rbac_roles?.map((role) => role.name) ?? [];
412
+ if (!roleNames.length) {
413
+ return /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "-" });
414
+ }
415
+ return /* @__PURE__ */ jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsx(ListSummary, { inline: true, n: 1, list: roleNames }) });
416
+ }
417
+ })
418
+ ] : [],
319
419
  columnHelper.accessor("accepted", {
320
420
  header: t("fields.status"),
321
421
  cell: ({ getValue, row }) => {
@@ -382,7 +482,7 @@ var useColumns = () => {
382
482
  cell: ({ row }) => /* @__PURE__ */ jsx(InviteActions, { invite: row.original })
383
483
  })
384
484
  ],
385
- [t]
485
+ [t, isRbacEnabled]
386
486
  );
387
487
  };
388
488
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mercurjs/admin",
3
- "version": "2.3.2-canary.0",
3
+ "version": "2.3.2-canary.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/mercurjs/mercur",
@@ -34,8 +34,8 @@
34
34
  "lint": "oxlint --max-warnings 0"
35
35
  },
36
36
  "dependencies": {
37
- "@mercurjs/dashboard-shared": "2.3.2-canary.0",
38
- "@mercurjs/client": "2.3.2-canary.0",
37
+ "@mercurjs/dashboard-shared": "2.3.2-canary.1",
38
+ "@mercurjs/client": "2.3.2-canary.1",
39
39
  "@ariakit/react": "^0.4.15",
40
40
  "@babel/runtime": "^8.0.0",
41
41
  "@dnd-kit/core": "^6.1.0",
@@ -88,8 +88,8 @@
88
88
  "tsup": "^8.0.2",
89
89
  "typescript": "5.9.3",
90
90
  "@medusajs/types": "2.18.0",
91
- "@mercurjs/core": "2.3.2-canary.0",
92
- "@mercurjs/dashboard-sdk": "2.3.2-canary.0",
93
- "@mercurjs/types": "2.3.2-canary.0"
91
+ "@mercurjs/core": "2.3.2-canary.1",
92
+ "@mercurjs/dashboard-sdk": "2.3.2-canary.1",
93
+ "@mercurjs/types": "2.3.2-canary.1"
94
94
  }
95
95
  }