@streamoid/settings 0.4.2 → 0.4.3

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/index.js CHANGED
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ APP_KEYS: () => APP_KEYS,
23
24
  BillingContent: () => BillingContent,
24
25
  BuyCreditsModal: () => BuyCreditsModal,
25
26
  ConfirmDeleteModal: () => ConfirmDeleteModal,
@@ -2426,6 +2427,24 @@ var svg_rodctpja6f_default = {
2426
2427
  p83fc200: "M2.25 12.25C2.25 6.72715 6.72715 2.25 12.25 2.25C17.7728 2.25 22.25 6.72715 22.25 12.25C22.25 17.7728 17.7728 22.25 12.25 22.25C6.72715 22.25 2.25 17.7728 2.25 12.25Z"
2427
2428
  };
2428
2429
 
2430
+ // src/team-types.ts
2431
+ var APP_KEYS = [
2432
+ "artifax",
2433
+ "photogenix",
2434
+ "returns",
2435
+ "catalogix"
2436
+ ];
2437
+ var DEFAULT_PERMISSIONS = {
2438
+ artifax: true,
2439
+ photogenix: true,
2440
+ catalogix: true,
2441
+ returns: true,
2442
+ canUseCredits: true,
2443
+ canInviteUser: true,
2444
+ role: "admin",
2445
+ catalogixStores: []
2446
+ };
2447
+
2429
2448
  // src/invite-update-modal.tsx
2430
2449
  var import_jsx_runtime10 = require("react/jsx-runtime");
2431
2450
  var T6 = {
@@ -2532,6 +2551,7 @@ function InviteUpdateModal({
2532
2551
  mode,
2533
2552
  userEmail = "email@domain.in",
2534
2553
  stores = [],
2554
+ hiddenApps = [],
2535
2555
  allowSubmitWithoutChanges = false,
2536
2556
  initialPermissions,
2537
2557
  onClose,
@@ -2546,25 +2566,35 @@ function InviteUpdateModal({
2546
2566
  const [role, setRole] = (0, import_react7.useState)("admin");
2547
2567
  const [canUseCredits, setCanUseCredits] = (0, import_react7.useState)(false);
2548
2568
  const [canInviteUser, setCanInviteUser] = (0, import_react7.useState)(false);
2549
- const [artifaxOn, setArtifaxOn] = (0, import_react7.useState)(true);
2550
- const [photogenixOn, setPhotogenixOn] = (0, import_react7.useState)(true);
2551
- const [catalogixOn, setCatalogixOn] = (0, import_react7.useState)(true);
2552
- const [returnsOn, setReturnsOn] = (0, import_react7.useState)(true);
2569
+ const [artifaxOn, setArtifaxOn] = (0, import_react7.useState)(!hiddenApps.includes("artifax"));
2570
+ const [photogenixOn, setPhotogenixOn] = (0, import_react7.useState)(
2571
+ !hiddenApps.includes("photogenix")
2572
+ );
2573
+ const [catalogixOn, setCatalogixOn] = (0, import_react7.useState)(
2574
+ !hiddenApps.includes("catalogix")
2575
+ );
2576
+ const [returnsOn, setReturnsOn] = (0, import_react7.useState)(!hiddenApps.includes("returns"));
2553
2577
  const [storeSearch, setStoreSearch] = (0, import_react7.useState)("");
2554
2578
  const [selectedStores, setSelectedStores] = (0, import_react7.useState)(/* @__PURE__ */ new Set());
2555
2579
  const filteredStores = stores.filter(
2556
2580
  (s) => (s.name || s._id).toLowerCase().includes(storeSearch.toLowerCase())
2557
2581
  );
2582
+ const hiddenKey = [...hiddenApps].sort().join(",");
2558
2583
  (0, import_react7.useEffect)(() => {
2584
+ const hidden = new Set(hiddenKey ? hiddenKey.split(",") : []);
2559
2585
  if (open && initialPermissions) {
2560
2586
  setRole(initialPermissions.role);
2561
2587
  setCanUseCredits(initialPermissions.canUseCredits);
2562
2588
  setCanInviteUser(initialPermissions.canInviteUser);
2563
- setArtifaxOn(initialPermissions.artifax);
2564
- setPhotogenixOn(initialPermissions.photogenix);
2565
- setCatalogixOn(initialPermissions.catalogix);
2566
- setReturnsOn(initialPermissions.returns);
2567
- setSelectedStores(new Set(initialPermissions.catalogixStores));
2589
+ setArtifaxOn(!hidden.has("artifax") && initialPermissions.artifax);
2590
+ setPhotogenixOn(
2591
+ !hidden.has("photogenix") && initialPermissions.photogenix
2592
+ );
2593
+ setCatalogixOn(!hidden.has("catalogix") && initialPermissions.catalogix);
2594
+ setReturnsOn(!hidden.has("returns") && initialPermissions.returns);
2595
+ setSelectedStores(
2596
+ new Set(hidden.has("catalogix") ? [] : initialPermissions.catalogixStores)
2597
+ );
2568
2598
  }
2569
2599
  if (!open) {
2570
2600
  setEmailValue("");
@@ -2572,21 +2602,32 @@ function InviteUpdateModal({
2572
2602
  setRole("admin");
2573
2603
  setCanUseCredits(true);
2574
2604
  setCanInviteUser(true);
2575
- setArtifaxOn(true);
2576
- setPhotogenixOn(true);
2577
- setCatalogixOn(true);
2578
- setReturnsOn(true);
2605
+ setArtifaxOn(!hidden.has("artifax"));
2606
+ setPhotogenixOn(!hidden.has("photogenix"));
2607
+ setCatalogixOn(!hidden.has("catalogix"));
2608
+ setReturnsOn(!hidden.has("returns"));
2579
2609
  setStoreSearch("");
2580
2610
  setSelectedStores(/* @__PURE__ */ new Set());
2581
2611
  }
2582
- }, [open, initialPermissions]);
2612
+ }, [open, initialPermissions, hiddenKey]);
2583
2613
  if (!open) return null;
2584
2614
  const isInvite = mode === "invite";
2585
2615
  const hasEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(emailValue.trim());
2586
- const isSubmitDisabled = isInvite ? !hasEmail : !(allowSubmitWithoutChanges || hasChanges);
2587
2616
  function markChanged() {
2588
2617
  setHasChanges(true);
2589
2618
  }
2619
+ const shownApps = APP_KEYS.filter((key) => !hiddenApps.includes(key));
2620
+ const showsApp = (key) => shownApps.includes(key);
2621
+ const appToggles = {
2622
+ artifax: artifaxOn,
2623
+ photogenix: photogenixOn,
2624
+ returns: returnsOn,
2625
+ catalogix: catalogixOn
2626
+ };
2627
+ const notLastShown = (key) => shownApps[shownApps.length - 1] !== key;
2628
+ const appValue = (key) => role === "admin" || showsApp(key) ? appToggles[key] : false;
2629
+ const grantsNoApp = role === "member" && shownApps.length > 0 && !shownApps.some((key) => appToggles[key]);
2630
+ const isSubmitDisabled = isInvite ? !hasEmail || grantsNoApp : !(allowSubmitWithoutChanges || hasChanges);
2590
2631
  function toggleStore(storeId) {
2591
2632
  setSelectedStores((prev) => {
2592
2633
  const next = new Set(prev);
@@ -2944,7 +2985,7 @@ function InviteUpdateModal({
2944
2985
  ]
2945
2986
  }
2946
2987
  ),
2947
- role !== "admin" && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
2988
+ role !== "admin" && shownApps.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
2948
2989
  "div",
2949
2990
  {
2950
2991
  className: "flex flex-col items-start justify-center shrink-0 w-full",
@@ -2960,8 +3001,8 @@ function InviteUpdateModal({
2960
3001
  borderRadius: T6.r3xl
2961
3002
  },
2962
3003
  children: [
2963
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "shrink-0 w-full relative", children: [
2964
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3004
+ showsApp("artifax") && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "shrink-0 w-full relative", children: [
3005
+ notLastShown("artifax") && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
2965
3006
  "div",
2966
3007
  {
2967
3008
  "aria-hidden": true,
@@ -3054,9 +3095,9 @@ function InviteUpdateModal({
3054
3095
  ]
3055
3096
  }
3056
3097
  ) })
3057
- ] }),
3058
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "shrink-0 w-full relative", children: [
3059
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3098
+ ] }) }),
3099
+ showsApp("photogenix") && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "shrink-0 w-full relative", children: [
3100
+ notLastShown("photogenix") && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3060
3101
  "div",
3061
3102
  {
3062
3103
  "aria-hidden": true,
@@ -3149,234 +3190,179 @@ function InviteUpdateModal({
3149
3190
  ]
3150
3191
  }
3151
3192
  ) })
3152
- ] }),
3153
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "shrink-0 w-full", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-col justify-center size-full", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3193
+ ] }) }),
3194
+ showsApp("returns") && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3154
3195
  "div",
3155
3196
  {
3156
- className: "flex flex-col items-start justify-center w-full",
3157
- style: { padding: T6.sp3xl, gap: T6.sp3xl },
3158
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3197
+ className: "shrink-0 w-full",
3198
+ style: notLastShown("returns") ? { borderBottom: `1px solid ${T6.borderSubtle}` } : void 0,
3199
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-col justify-center size-full", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3159
3200
  "div",
3160
3201
  {
3161
- className: "flex items-center shrink-0 w-full",
3162
- style: { gap: T6.sp3xl },
3163
- children: [
3164
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3165
- "div",
3166
- {
3167
- className: "flex flex-1 min-w-0 items-center",
3168
- style: { gap: T6.spXl },
3169
- children: [
3170
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3171
- "div",
3172
- {
3173
- className: "shrink-0 flex items-center",
3174
- style: {
3175
- background: T6.fillHover,
3176
- borderRadius: T6.rXl,
3177
- padding: T6.spMd
3178
- },
3179
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3180
- import_icons3.SiconArrowLeftRight,
3202
+ className: "flex flex-col items-start justify-center w-full",
3203
+ style: { padding: T6.sp3xl, gap: T6.sp3xl },
3204
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3205
+ "div",
3206
+ {
3207
+ className: "flex items-center shrink-0 w-full",
3208
+ style: { gap: T6.sp3xl },
3209
+ children: [
3210
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3211
+ "div",
3212
+ {
3213
+ className: "flex flex-1 min-w-0 items-center",
3214
+ style: { gap: T6.spXl },
3215
+ children: [
3216
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3217
+ "div",
3181
3218
  {
3182
- className: "w-6 h-6",
3183
- color: T6.primary
3219
+ className: "shrink-0 flex items-center",
3220
+ style: {
3221
+ background: T6.fillHover,
3222
+ borderRadius: T6.rXl,
3223
+ padding: T6.spMd
3224
+ },
3225
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3226
+ import_icons3.SiconArrowLeftRight,
3227
+ {
3228
+ className: "w-6 h-6",
3229
+ color: T6.primary
3230
+ }
3231
+ )
3232
+ }
3233
+ ),
3234
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3235
+ "div",
3236
+ {
3237
+ className: "flex flex-1 min-w-0 flex-col items-start overflow-hidden text-ellipsis whitespace-nowrap",
3238
+ style: { opacity: returnsOn ? 1 : 0.5 },
3239
+ children: [
3240
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3241
+ "p",
3242
+ {
3243
+ className: "w-full overflow-hidden shrink-0",
3244
+ style: {
3245
+ fontFamily: T6.font,
3246
+ fontSize: T6.fsSm,
3247
+ fontWeight: 500,
3248
+ lineHeight: T6.lhSm,
3249
+ color: T6.primary
3250
+ },
3251
+ children: "Returns"
3252
+ }
3253
+ ),
3254
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3255
+ "p",
3256
+ {
3257
+ className: "w-full overflow-hidden shrink-0",
3258
+ style: {
3259
+ fontFamily: T6.font,
3260
+ fontSize: T6.fsXs,
3261
+ fontWeight: 400,
3262
+ lineHeight: T6.lhXs,
3263
+ color: T6.tertiary
3264
+ },
3265
+ children: "Raise SPF claims for Marketplaces"
3266
+ }
3267
+ )
3268
+ ]
3184
3269
  }
3185
3270
  )
3271
+ ]
3272
+ }
3273
+ ),
3274
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3275
+ ToggleSwitch,
3276
+ {
3277
+ active: returnsOn,
3278
+ onClick: () => {
3279
+ setReturnsOn(!returnsOn);
3280
+ markChanged();
3186
3281
  }
3187
- ),
3188
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3189
- "div",
3190
- {
3191
- className: "flex flex-1 min-w-0 flex-col items-start overflow-hidden text-ellipsis whitespace-nowrap",
3192
- style: { opacity: returnsOn ? 1 : 0.5 },
3193
- children: [
3194
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3195
- "p",
3196
- {
3197
- className: "w-full overflow-hidden shrink-0",
3198
- style: {
3199
- fontFamily: T6.font,
3200
- fontSize: T6.fsSm,
3201
- fontWeight: 500,
3202
- lineHeight: T6.lhSm,
3203
- color: T6.primary
3204
- },
3205
- children: "Returns"
3206
- }
3207
- ),
3208
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3209
- "p",
3210
- {
3211
- className: "w-full overflow-hidden shrink-0",
3212
- style: {
3213
- fontFamily: T6.font,
3214
- fontSize: T6.fsXs,
3215
- fontWeight: 400,
3216
- lineHeight: T6.lhXs,
3217
- color: T6.tertiary
3218
- },
3219
- children: "Raise SPF claims for Marketplaces"
3220
- }
3221
- )
3222
- ]
3223
- }
3224
- )
3225
- ]
3226
- }
3227
- ),
3228
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3229
- ToggleSwitch,
3230
- {
3231
- active: returnsOn,
3232
- onClick: () => {
3233
- setReturnsOn(!returnsOn);
3234
- markChanged();
3235
- }
3236
- }
3237
- )
3238
- ]
3282
+ }
3283
+ )
3284
+ ]
3285
+ }
3286
+ )
3239
3287
  }
3240
- )
3288
+ ) })
3241
3289
  }
3242
- ) }) }),
3243
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "shrink-0 w-full", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-col justify-center size-full", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3290
+ ) }),
3291
+ showsApp("catalogix") && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3244
3292
  "div",
3245
3293
  {
3246
- className: "flex flex-col items-start justify-center w-full",
3247
- style: { padding: T6.sp3xl, gap: T6.sp3xl },
3248
- children: [
3249
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3250
- "div",
3251
- {
3252
- className: "flex items-center shrink-0 w-full",
3253
- style: { gap: T6.sp3xl },
3254
- children: [
3255
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3256
- "div",
3257
- {
3258
- className: "flex flex-1 min-w-0 items-center",
3259
- style: { gap: T6.spXl },
3260
- children: [
3261
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3262
- "div",
3263
- {
3264
- className: "shrink-0 flex items-center",
3265
- style: {
3266
- background: T6.fillHover,
3267
- borderRadius: T6.rXl,
3268
- padding: T6.spMd
3269
- },
3270
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3271
- import_icons3.SiconArtifacts,
3272
- {
3273
- className: "w-6 h-6",
3274
- color: T6.primary
3275
- }
3276
- )
3277
- }
3278
- ),
3279
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3280
- "div",
3281
- {
3282
- className: "flex flex-1 min-w-0 flex-col items-start overflow-hidden text-ellipsis whitespace-nowrap",
3283
- style: { opacity: catalogixOn ? 1 : 0.5 },
3284
- children: [
3285
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3286
- "p",
3287
- {
3288
- className: "w-full overflow-hidden shrink-0",
3289
- style: {
3290
- fontFamily: T6.font,
3291
- fontSize: T6.fsSm,
3292
- fontWeight: 500,
3293
- lineHeight: T6.lhSm,
3294
- color: T6.primary
3295
- },
3296
- children: "Catalogix"
3297
- }
3298
- ),
3299
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3300
- "p",
3301
- {
3302
- className: "w-full overflow-hidden shrink-0",
3303
- style: {
3304
- fontFamily: T6.font,
3305
- fontSize: T6.fsXs,
3306
- fontWeight: 400,
3307
- lineHeight: T6.lhXs,
3308
- color: T6.tertiary
3309
- },
3310
- children: "Centralized product and asset management for every storefront"
3311
- }
3312
- )
3313
- ]
3314
- }
3315
- )
3316
- ]
3317
- }
3318
- ),
3319
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3320
- ToggleSwitch,
3321
- {
3322
- active: catalogixOn,
3323
- onClick: () => {
3324
- setCatalogixOn(!catalogixOn);
3325
- markChanged();
3326
- }
3327
- }
3328
- )
3329
- ]
3330
- }
3331
- ),
3332
- catalogixOn && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3333
- "div",
3334
- {
3335
- className: "shrink-0 w-full",
3336
- style: {
3337
- background: T6.canvasBase,
3338
- borderRadius: T6.r3xl
3339
- },
3340
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3294
+ className: "shrink-0 w-full",
3295
+ style: notLastShown("catalogix") ? { borderBottom: `1px solid ${T6.borderSubtle}` } : void 0,
3296
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-col justify-center size-full", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3297
+ "div",
3298
+ {
3299
+ className: "flex flex-col items-start justify-center w-full",
3300
+ style: { padding: T6.sp3xl, gap: T6.sp3xl },
3301
+ children: [
3302
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3341
3303
  "div",
3342
3304
  {
3343
- className: "flex flex-col items-start w-full",
3344
- style: { padding: T6.sp3xl, gap: T6.spMd },
3305
+ className: "flex items-center shrink-0 w-full",
3306
+ style: { gap: T6.sp3xl },
3345
3307
  children: [
3346
3308
  /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3347
3309
  "div",
3348
3310
  {
3349
- className: "flex items-center justify-center shrink-0 w-full",
3350
- style: { gap: T6.spMd },
3311
+ className: "flex flex-1 min-w-0 items-center",
3312
+ style: { gap: T6.spXl },
3351
3313
  children: [
3352
3314
  /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3353
- "p",
3315
+ "div",
3354
3316
  {
3355
- className: "flex-1 min-w-0 overflow-hidden whitespace-nowrap",
3317
+ className: "shrink-0 flex items-center",
3356
3318
  style: {
3357
- fontFamily: T6.font,
3358
- fontSize: T6.fsSm,
3359
- fontWeight: 400,
3360
- lineHeight: T6.lhSm,
3361
- color: T6.primary
3319
+ background: T6.fillHover,
3320
+ borderRadius: T6.rXl,
3321
+ padding: T6.spMd
3362
3322
  },
3363
- children: "Store access"
3323
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3324
+ import_icons3.SiconArtifacts,
3325
+ {
3326
+ className: "w-6 h-6",
3327
+ color: T6.primary
3328
+ }
3329
+ )
3364
3330
  }
3365
3331
  ),
3366
3332
  /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3367
- "p",
3333
+ "div",
3368
3334
  {
3369
- className: "shrink-0 overflow-hidden text-right",
3370
- style: {
3371
- fontFamily: T6.font,
3372
- fontSize: T6.fsXs,
3373
- fontWeight: 400,
3374
- lineHeight: T6.lhXs,
3375
- color: T6.muted
3376
- },
3335
+ className: "flex flex-1 min-w-0 flex-col items-start overflow-hidden text-ellipsis whitespace-nowrap",
3336
+ style: { opacity: catalogixOn ? 1 : 0.5 },
3377
3337
  children: [
3378
- selectedStores.size,
3379
- " Selected"
3338
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3339
+ "p",
3340
+ {
3341
+ className: "w-full overflow-hidden shrink-0",
3342
+ style: {
3343
+ fontFamily: T6.font,
3344
+ fontSize: T6.fsSm,
3345
+ fontWeight: 500,
3346
+ lineHeight: T6.lhSm,
3347
+ color: T6.primary
3348
+ },
3349
+ children: "Catalogix"
3350
+ }
3351
+ ),
3352
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3353
+ "p",
3354
+ {
3355
+ className: "w-full overflow-hidden shrink-0",
3356
+ style: {
3357
+ fontFamily: T6.font,
3358
+ fontSize: T6.fsXs,
3359
+ fontWeight: 400,
3360
+ lineHeight: T6.lhXs,
3361
+ color: T6.tertiary
3362
+ },
3363
+ children: "Centralized product and asset management for every storefront"
3364
+ }
3365
+ )
3380
3366
  ]
3381
3367
  }
3382
3368
  )
@@ -3384,27 +3370,42 @@ function InviteUpdateModal({
3384
3370
  }
3385
3371
  ),
3386
3372
  /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3387
- "div",
3373
+ ToggleSwitch,
3388
3374
  {
3389
- className: "shrink-0 w-full",
3390
- style: {
3391
- background: T6.fillPlus,
3392
- height: 48,
3393
- borderRadius: T6.r3xl
3394
- },
3395
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-row items-center size-full", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3375
+ active: catalogixOn,
3376
+ onClick: () => {
3377
+ setCatalogixOn(!catalogixOn);
3378
+ markChanged();
3379
+ }
3380
+ }
3381
+ )
3382
+ ]
3383
+ }
3384
+ ),
3385
+ catalogixOn && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3386
+ "div",
3387
+ {
3388
+ className: "shrink-0 w-full",
3389
+ style: {
3390
+ background: T6.canvasBase,
3391
+ borderRadius: T6.r3xl
3392
+ },
3393
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3394
+ "div",
3395
+ {
3396
+ className: "flex flex-col items-start w-full",
3397
+ style: { padding: T6.sp3xl, gap: T6.spMd },
3398
+ children: [
3399
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3396
3400
  "div",
3397
3401
  {
3398
- className: "flex items-center relative size-full",
3399
- style: {
3400
- padding: T6.spXl,
3401
- gap: T6.sp3xl
3402
- },
3402
+ className: "flex items-center justify-center shrink-0 w-full",
3403
+ style: { gap: T6.spMd },
3403
3404
  children: [
3404
3405
  /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3405
- "input",
3406
+ "p",
3406
3407
  {
3407
- className: "flex-1 min-w-0 bg-transparent border-none outline-none",
3408
+ className: "flex-1 min-w-0 overflow-hidden whitespace-nowrap",
3408
3409
  style: {
3409
3410
  fontFamily: T6.font,
3410
3411
  fontSize: T6.fsSm,
@@ -3412,97 +3413,153 @@ function InviteUpdateModal({
3412
3413
  lineHeight: T6.lhSm,
3413
3414
  color: T6.primary
3414
3415
  },
3415
- placeholder: "Search stores...",
3416
- value: storeSearch,
3417
- onChange: (e) => setStoreSearch(e.target.value)
3416
+ children: "Store access"
3418
3417
  }
3419
3418
  ),
3420
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3421
- import_icons3.SiconSearch,
3422
- {
3423
- className: "w-6 h-6",
3424
- color: T6.primary
3425
- }
3426
- )
3427
- ]
3428
- }
3429
- ) })
3430
- }
3431
- ),
3432
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3433
- "div",
3434
- {
3435
- className: "shrink-0 w-full",
3436
- style: {
3437
- background: T6.fillPlus,
3438
- borderRadius: T6.r3xl
3439
- },
3440
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3441
- "div",
3442
- {
3443
- className: "flex flex-col items-start w-full",
3444
- style: {
3445
- padding: T6.sp3xl,
3446
- gap: T6.spXl
3447
- },
3448
- children: [
3449
- filteredStores.map((store) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3450
- "div",
3451
- {
3452
- className: "flex items-center shrink-0 w-full cursor-pointer",
3453
- style: { gap: T6.spMd },
3454
- onClick: () => toggleStore(store._id),
3455
- children: [
3456
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3457
- "p",
3458
- {
3459
- className: "flex-1 min-w-0",
3460
- style: {
3461
- fontFamily: T6.font,
3462
- fontSize: T6.fsSm,
3463
- fontWeight: 400,
3464
- lineHeight: T6.lhSm,
3465
- color: T6.primary
3466
- },
3467
- children: store.name || store._id
3468
- }
3469
- ),
3470
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3471
- CheckboxSvg,
3472
- {
3473
- checked: selectedStores.has(store._id)
3474
- }
3475
- )
3476
- ]
3477
- },
3478
- store._id
3479
- )),
3480
- filteredStores.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3419
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3481
3420
  "p",
3482
3421
  {
3422
+ className: "shrink-0 overflow-hidden text-right",
3483
3423
  style: {
3484
3424
  fontFamily: T6.font,
3485
- fontSize: T6.fsSm,
3425
+ fontSize: T6.fsXs,
3486
3426
  fontWeight: 400,
3487
- lineHeight: T6.lhSm,
3427
+ lineHeight: T6.lhXs,
3488
3428
  color: T6.muted
3489
3429
  },
3490
- children: "No stores found"
3430
+ children: [
3431
+ selectedStores.size,
3432
+ " Selected"
3433
+ ]
3491
3434
  }
3492
3435
  )
3493
3436
  ]
3494
3437
  }
3438
+ ),
3439
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3440
+ "div",
3441
+ {
3442
+ className: "shrink-0 w-full",
3443
+ style: {
3444
+ background: T6.fillPlus,
3445
+ height: 48,
3446
+ borderRadius: T6.r3xl
3447
+ },
3448
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-row items-center size-full", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3449
+ "div",
3450
+ {
3451
+ className: "flex items-center relative size-full",
3452
+ style: {
3453
+ padding: T6.spXl,
3454
+ gap: T6.sp3xl
3455
+ },
3456
+ children: [
3457
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3458
+ "input",
3459
+ {
3460
+ className: "flex-1 min-w-0 bg-transparent border-none outline-none",
3461
+ style: {
3462
+ fontFamily: T6.font,
3463
+ fontSize: T6.fsSm,
3464
+ fontWeight: 400,
3465
+ lineHeight: T6.lhSm,
3466
+ color: T6.primary
3467
+ },
3468
+ placeholder: "Search stores...",
3469
+ value: storeSearch,
3470
+ onChange: (e) => setStoreSearch(e.target.value)
3471
+ }
3472
+ ),
3473
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3474
+ import_icons3.SiconSearch,
3475
+ {
3476
+ className: "w-6 h-6",
3477
+ color: T6.primary
3478
+ }
3479
+ )
3480
+ ]
3481
+ }
3482
+ ) })
3483
+ }
3484
+ ),
3485
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3486
+ "div",
3487
+ {
3488
+ className: "shrink-0 w-full",
3489
+ style: {
3490
+ background: T6.fillPlus,
3491
+ borderRadius: T6.r3xl
3492
+ },
3493
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3494
+ "div",
3495
+ {
3496
+ className: "flex flex-col items-start w-full",
3497
+ style: {
3498
+ padding: T6.sp3xl,
3499
+ gap: T6.spXl
3500
+ },
3501
+ children: [
3502
+ filteredStores.map((store) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
3503
+ "div",
3504
+ {
3505
+ className: "flex items-center shrink-0 w-full cursor-pointer",
3506
+ style: { gap: T6.spMd },
3507
+ onClick: () => toggleStore(store._id),
3508
+ children: [
3509
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3510
+ "p",
3511
+ {
3512
+ className: "flex-1 min-w-0",
3513
+ style: {
3514
+ fontFamily: T6.font,
3515
+ fontSize: T6.fsSm,
3516
+ fontWeight: 400,
3517
+ lineHeight: T6.lhSm,
3518
+ color: T6.primary
3519
+ },
3520
+ children: store.name || store._id
3521
+ }
3522
+ ),
3523
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3524
+ CheckboxSvg,
3525
+ {
3526
+ checked: selectedStores.has(
3527
+ store._id
3528
+ )
3529
+ }
3530
+ )
3531
+ ]
3532
+ },
3533
+ store._id
3534
+ )),
3535
+ filteredStores.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3536
+ "p",
3537
+ {
3538
+ style: {
3539
+ fontFamily: T6.font,
3540
+ fontSize: T6.fsSm,
3541
+ fontWeight: 400,
3542
+ lineHeight: T6.lhSm,
3543
+ color: T6.muted
3544
+ },
3545
+ children: "No stores found"
3546
+ }
3547
+ )
3548
+ ]
3549
+ }
3550
+ )
3551
+ }
3495
3552
  )
3496
- }
3497
- )
3498
- ]
3553
+ ]
3554
+ }
3555
+ )
3499
3556
  }
3500
3557
  )
3501
- }
3502
- )
3503
- ]
3558
+ ]
3559
+ }
3560
+ ) })
3504
3561
  }
3505
- ) }) })
3562
+ ) })
3506
3563
  ]
3507
3564
  }
3508
3565
  )
@@ -3549,11 +3606,15 @@ function InviteUpdateModal({
3549
3606
  role,
3550
3607
  canUseCredits,
3551
3608
  canInviteUser,
3552
- artifax: artifaxOn,
3553
- photogenix: photogenixOn,
3554
- catalogix: catalogixOn,
3555
- returns: returnsOn,
3556
- catalogixStores: Array.from(selectedStores)
3609
+ artifax: appValue("artifax"),
3610
+ photogenix: appValue("photogenix"),
3611
+ catalogix: appValue("catalogix"),
3612
+ returns: appValue("returns"),
3613
+ // Stores ride on Catalogix, so they follow it: a
3614
+ // hidden Catalogix grants no app and therefore no
3615
+ // storefronts. Keeping them would leave a member
3616
+ // scoped to stores in a product they cannot open.
3617
+ catalogixStores: role === "admin" || showsApp("catalogix") ? Array.from(selectedStores) : []
3557
3618
  };
3558
3619
  if (isInvite && onInvite) {
3559
3620
  onInvite(perms, emailValue.trim());
@@ -4306,7 +4367,8 @@ function TeamsContent({
4306
4367
  onInviteOpenChange,
4307
4368
  workspaceName,
4308
4369
  workspaceImageUrl,
4309
- organizationName
4370
+ organizationName,
4371
+ hiddenApps
4310
4372
  } = {}) {
4311
4373
  const { auth, api, organization, workspace, toast } = useSettingsAdapters();
4312
4374
  const user = auth.user;
@@ -4778,6 +4840,7 @@ function TeamsContent({
4778
4840
  mode: modal.mode,
4779
4841
  userEmail: modal.target?.userEmail,
4780
4842
  stores: allStores,
4843
+ hiddenApps,
4781
4844
  allowSubmitWithoutChanges: modal.target?.kind === "invite",
4782
4845
  initialPermissions: currentMemberPermissions,
4783
4846
  onClose: closeModal,
@@ -11079,19 +11142,22 @@ function ReferralTab() {
11079
11142
  function SettingsContent({
11080
11143
  adapters,
11081
11144
  activeTab = "profile",
11082
- onClose
11145
+ onClose,
11146
+ hiddenApps
11083
11147
  }) {
11084
11148
  return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SettingsAdaptersProvider, { adapters, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
11085
11149
  SettingsContentInner,
11086
11150
  {
11087
11151
  activeTab,
11088
- onClose: onClose ?? adapters.navigation.close
11152
+ onClose: onClose ?? adapters.navigation.close,
11153
+ hiddenApps
11089
11154
  }
11090
11155
  ) });
11091
11156
  }
11092
11157
  function SettingsContentInner({
11093
11158
  activeTab,
11094
- onClose
11159
+ onClose,
11160
+ hiddenApps
11095
11161
  }) {
11096
11162
  const {
11097
11163
  auth: _auth,
@@ -11759,7 +11825,8 @@ function SettingsContentInner({
11759
11825
  onInviteOpenChange: setTeamInviteOpen,
11760
11826
  workspaceName: workspaceScopeName,
11761
11827
  workspaceImageUrl: currentWorkspaceData?.imageUrl,
11762
- organizationName: organizationScopeName
11828
+ organizationName: organizationScopeName,
11829
+ hiddenApps
11763
11830
  }
11764
11831
  ) }),
11765
11832
  activeTab === "workspaceList" && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
@@ -11898,15 +11965,3 @@ function SettingsContentInner({
11898
11965
  }
11899
11966
  );
11900
11967
  }
11901
-
11902
- // src/team-types.ts
11903
- var DEFAULT_PERMISSIONS = {
11904
- artifax: true,
11905
- photogenix: true,
11906
- catalogix: true,
11907
- returns: true,
11908
- canUseCredits: true,
11909
- canInviteUser: true,
11910
- role: "admin",
11911
- catalogixStores: []
11912
- };