@orion-studios/payload-studio 0.6.0-beta.11 → 0.6.0-beta.12

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.
@@ -1289,9 +1289,9 @@ function Logo({ brandName = "Orion Studio", logoOnDarkUrl, logoUrl } = {}) {
1289
1289
  const branding = useSiteBranding(brandName, logoUrl, logoOnDarkUrl);
1290
1290
  const resolvedName = branding.siteName || brandName;
1291
1291
  const resolvedLogo = branding.logoUrl || logoUrl || null;
1292
- const resolvedLogoOnDark = branding.logoOnDarkUrl || logoOnDarkUrl || resolvedLogo;
1292
+ const resolvedLogoOnDark = branding.logoOnDarkUrl || logoOnDarkUrl || resolvedLogo || "";
1293
1293
  const hasDarkLogoVariant = Boolean(
1294
- resolvedLogo && resolvedLogoOnDark && resolvedLogoOnDark.trim().length > 0 && resolvedLogoOnDark !== resolvedLogo
1294
+ resolvedLogo && resolvedLogoOnDark.trim().length > 0 && resolvedLogoOnDark !== resolvedLogo
1295
1295
  );
1296
1296
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
1297
1297
  "div",
@@ -2574,7 +2574,7 @@ var navItemIsActive = (pathname, item) => {
2574
2574
  };
2575
2575
 
2576
2576
  // src/shared/studioSections.ts
2577
- var studioRoles = /* @__PURE__ */ new Set(["admin", "editor", "client"]);
2577
+ var studioRoles = /* @__PURE__ */ new Set(["admin", "developer", "editor", "client"]);
2578
2578
  var studioIcons = new Set(adminNavIcons);
2579
2579
  var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
2580
2580
  var isAbsoluteExternalURL2 = (value) => /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(value) || value.startsWith("//");
@@ -2772,7 +2772,7 @@ var buildStudioNavItems = (props, adminBasePath) => {
2772
2772
  icon: "tools",
2773
2773
  label: "Admin Tools",
2774
2774
  matchPrefixes: [toolsPath, resolveAdminPath(adminBasePath, "/collections/users")],
2775
- roles: ["admin"]
2775
+ roles: ["admin", "developer"]
2776
2776
  };
2777
2777
  const extensionItems = sections.map((section) => ({
2778
2778
  href: resolveAdminPath(adminBasePath, section.href),
@@ -3213,9 +3213,9 @@ var import_react16 = require("react");
3213
3213
  var import_link = __toESM(require("next/link"));
3214
3214
  var import_jsx_runtime21 = require("react/jsx-runtime");
3215
3215
  var SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1e3;
3216
- var isRole = (value) => value === "admin" || value === "editor" || value === "client";
3217
- var canReviewForms = (role) => role === "admin" || role === "editor";
3218
- var canCreatePages = (role) => role === "admin" || role === "editor";
3216
+ var isRole = (value) => value === "admin" || value === "client" || value === "developer" || value === "editor";
3217
+ var canReviewForms = (role) => role === "admin" || role === "developer" || role === "editor";
3218
+ var canCreatePages = (role) => role === "admin" || role === "developer" || role === "editor";
3219
3219
  var canAccess = (role, roles) => {
3220
3220
  if (!roles || roles.length === 0) {
3221
3221
  return true;
@@ -3691,7 +3691,7 @@ function AdminStudioDashboardClient({
3691
3691
  label: "Manage Media",
3692
3692
  tone: "ghost"
3693
3693
  });
3694
- if (role === "admin") {
3694
+ if (role === "admin" || role === "developer") {
3695
3695
  actions.push({
3696
3696
  description: "Manage users, roles, and fallback tools.",
3697
3697
  href: toolsPath,
@@ -3970,7 +3970,7 @@ var buildSectionLinks = (adminBasePath, sections, formsEnabled, globalsBasePath)
3970
3970
  href: resolveAdminPath2(adminBasePath, "/tools"),
3971
3971
  id: "admin-tools",
3972
3972
  label: "Admin Tools",
3973
- roles: ["admin"]
3973
+ roles: ["admin", "developer"]
3974
3974
  }
3975
3975
  ];
3976
3976
  const seen = /* @__PURE__ */ new Set();
@@ -4040,10 +4040,10 @@ var import_react17 = require("react");
4040
4040
  var import_link2 = __toESM(require("next/link"));
4041
4041
  var import_ui5 = require("@payloadcms/ui");
4042
4042
  var import_jsx_runtime23 = require("react/jsx-runtime");
4043
- var isAdmin = (user) => {
4043
+ var hasAdminAccess = (user) => {
4044
4044
  if (!user || typeof user !== "object") return false;
4045
4045
  const role = user.role;
4046
- return typeof role === "string" && role === "admin";
4046
+ return typeof role === "string" && (role === "admin" || role === "developer");
4047
4047
  };
4048
4048
  var getPropString3 = (props, key, fallback) => {
4049
4049
  if (!props || typeof props !== "object") return fallback;
@@ -4106,7 +4106,7 @@ function AdminStudioPagesListView(props) {
4106
4106
  return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StudioSectionLayout, { navProps: props, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
4107
4107
  AdminPage,
4108
4108
  {
4109
- actions: isAdmin(user) ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_link2.default, { className: "orion-admin-action-button", href: newPagePath, children: "New Page" }) : null,
4109
+ actions: hasAdminAccess(user) ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_link2.default, { className: "orion-admin-action-button", href: newPagePath, children: "New Page" }) : null,
4110
4110
  breadcrumbs: [
4111
4111
  { label: "Dashboard", href: adminBasePath },
4112
4112
  { label: "Pages" }
@@ -4141,10 +4141,10 @@ function AdminStudioPagesListView(props) {
4141
4141
  var import_react18 = require("react");
4142
4142
  var import_ui6 = require("@payloadcms/ui");
4143
4143
  var import_jsx_runtime24 = require("react/jsx-runtime");
4144
- var isAdmin2 = (user) => {
4144
+ var hasAdminAccess2 = (user) => {
4145
4145
  if (!user || typeof user !== "object") return false;
4146
4146
  const role = user.role;
4147
- return typeof role === "string" && role === "admin";
4147
+ return typeof role === "string" && (role === "admin" || role === "developer");
4148
4148
  };
4149
4149
  var isEditor = (user) => {
4150
4150
  if (!user || typeof user !== "object") return false;
@@ -4202,7 +4202,7 @@ function AdminStudioPageEditView(props) {
4202
4202
  }
4203
4203
  setDidResolvePathFallback(true);
4204
4204
  }, [pageIDFromParams]);
4205
- const canPublish = isAdmin2(user) || isEditor(user);
4205
+ const canPublish = hasAdminAccess2(user) || isEditor(user);
4206
4206
  const refreshUnpublishedState = async (id) => {
4207
4207
  try {
4208
4208
  const response = await fetch(
@@ -4495,7 +4495,7 @@ var getPropString5 = (props, key, fallback) => {
4495
4495
  var canManagePages = (user) => {
4496
4496
  if (!user || typeof user !== "object") return false;
4497
4497
  const role = user.role;
4498
- return role === "admin" || role === "editor";
4498
+ return role === "admin" || role === "developer" || role === "editor";
4499
4499
  };
4500
4500
  var slugify = (value) => value.toLowerCase().trim().replace(/[^a-z0-9\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-");
4501
4501
  function AdminStudioNewPageView(props) {
@@ -4517,7 +4517,7 @@ function AdminStudioNewPageView(props) {
4517
4517
  title: "New Page",
4518
4518
  children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "orion-admin-card", children: [
4519
4519
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("strong", { children: "Access denied" }),
4520
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: "This section is restricted to administrator and editor accounts." })
4520
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: "This section is restricted to administrator, developer, and editor accounts." })
4521
4521
  ] })
4522
4522
  }
4523
4523
  ) });
@@ -7531,17 +7531,17 @@ var FORM_TONE_OVERRIDES = {
7531
7531
  var IDENTITY_KEYS = /* @__PURE__ */ new Set(["contactEmail", "email", "firstName", "lastName", "name"]);
7532
7532
  var RESPONSE_FIELD_PREVIEW_LIMIT = 3;
7533
7533
  var RESPONSE_SCROLL_THRESHOLD = 3;
7534
- var isAdmin3 = (user) => {
7534
+ var hasAdminAccess3 = (user) => {
7535
7535
  if (!user || typeof user !== "object") return false;
7536
7536
  const role = user.role;
7537
- return typeof role === "string" && role === "admin";
7537
+ return typeof role === "string" && (role === "admin" || role === "developer");
7538
7538
  };
7539
7539
  var isEditor2 = (user) => {
7540
7540
  if (!user || typeof user !== "object") return false;
7541
7541
  const role = user.role;
7542
7542
  return typeof role === "string" && role === "editor";
7543
7543
  };
7544
- var canReviewForms2 = (user) => isAdmin3(user) || isEditor2(user);
7544
+ var canReviewForms2 = (user) => hasAdminAccess3(user) || isEditor2(user);
7545
7545
  var getPropString13 = (props, key, fallback) => {
7546
7546
  if (!props || typeof props !== "object") return fallback;
7547
7547
  const direct = props[key];
@@ -8024,11 +8024,11 @@ function AdminStudioFormsView(props) {
8024
8024
  var import_react32 = require("react");
8025
8025
  var import_ui12 = require("@payloadcms/ui");
8026
8026
  var import_jsx_runtime41 = require("react/jsx-runtime");
8027
- var userRoles = ["admin", "client", "editor"];
8028
- var isAdmin4 = (user) => {
8027
+ var userRoles = ["admin", "client", "developer", "editor"];
8028
+ var hasAdminAccess4 = (user) => {
8029
8029
  if (!user || typeof user !== "object") return false;
8030
8030
  const role = user.role;
8031
- return typeof role === "string" && role === "admin";
8031
+ return typeof role === "string" && (role === "admin" || role === "developer");
8032
8032
  };
8033
8033
  var normalizeRole = (value) => userRoles.includes(value) ? value : "editor";
8034
8034
  function AdminStudioToolsView(props) {
@@ -8040,7 +8040,7 @@ function AdminStudioToolsView(props) {
8040
8040
  const [savedMessage, setSavedMessage] = (0, import_react32.useState)(null);
8041
8041
  const [createSubmitting, setCreateSubmitting] = (0, import_react32.useState)(false);
8042
8042
  const [updatingUserID, setUpdatingUserID] = (0, import_react32.useState)(null);
8043
- if (!isAdmin4(user)) {
8043
+ if (!hasAdminAccess4(user)) {
8044
8044
  return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(StudioSectionLayout, { navProps: props, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
8045
8045
  AdminPage,
8046
8046
  {
@@ -8052,7 +8052,7 @@ function AdminStudioToolsView(props) {
8052
8052
  title: "Admin Tools",
8053
8053
  children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "orion-admin-card", children: [
8054
8054
  /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("strong", { children: "Access denied" }),
8055
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { children: "This section is restricted to administrator accounts." })
8055
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { children: "This section is restricted to administrator and developer accounts." })
8056
8056
  ] })
8057
8057
  }
8058
8058
  ) });
@@ -99,9 +99,9 @@ function Logo({ brandName = "Orion Studio", logoOnDarkUrl, logoUrl } = {}) {
99
99
  const branding = useSiteBranding(brandName, logoUrl, logoOnDarkUrl);
100
100
  const resolvedName = branding.siteName || brandName;
101
101
  const resolvedLogo = branding.logoUrl || logoUrl || null;
102
- const resolvedLogoOnDark = branding.logoOnDarkUrl || logoOnDarkUrl || resolvedLogo;
102
+ const resolvedLogoOnDark = branding.logoOnDarkUrl || logoOnDarkUrl || resolvedLogo || "";
103
103
  const hasDarkLogoVariant = Boolean(
104
- resolvedLogo && resolvedLogoOnDark && resolvedLogoOnDark.trim().length > 0 && resolvedLogoOnDark !== resolvedLogo
104
+ resolvedLogo && resolvedLogoOnDark.trim().length > 0 && resolvedLogoOnDark !== resolvedLogo
105
105
  );
106
106
  return /* @__PURE__ */ jsxs(
107
107
  "div",
@@ -1353,7 +1353,7 @@ var useAdminBasePath = (fallback = DEFAULT_ADMIN_BASE_PATH) => {
1353
1353
  };
1354
1354
 
1355
1355
  // src/shared/studioSections.ts
1356
- var studioRoles = /* @__PURE__ */ new Set(["admin", "editor", "client"]);
1356
+ var studioRoles = /* @__PURE__ */ new Set(["admin", "developer", "editor", "client"]);
1357
1357
  var studioIcons = new Set(adminNavIcons);
1358
1358
  var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
1359
1359
  var isAbsoluteExternalURL2 = (value) => /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(value) || value.startsWith("//");
@@ -1551,7 +1551,7 @@ var buildStudioNavItems = (props, adminBasePath) => {
1551
1551
  icon: "tools",
1552
1552
  label: "Admin Tools",
1553
1553
  matchPrefixes: [toolsPath, resolveAdminPath(adminBasePath, "/collections/users")],
1554
- roles: ["admin"]
1554
+ roles: ["admin", "developer"]
1555
1555
  };
1556
1556
  const extensionItems = sections.map((section) => ({
1557
1557
  href: resolveAdminPath(adminBasePath, section.href),
@@ -1844,9 +1844,9 @@ import { startTransition, useEffect as useEffect7, useMemo as useMemo3, useState
1844
1844
  import Link from "next/link";
1845
1845
  import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
1846
1846
  var SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1e3;
1847
- var isRole = (value) => value === "admin" || value === "editor" || value === "client";
1848
- var canReviewForms = (role) => role === "admin" || role === "editor";
1849
- var canCreatePages = (role) => role === "admin" || role === "editor";
1847
+ var isRole = (value) => value === "admin" || value === "client" || value === "developer" || value === "editor";
1848
+ var canReviewForms = (role) => role === "admin" || role === "developer" || role === "editor";
1849
+ var canCreatePages = (role) => role === "admin" || role === "developer" || role === "editor";
1850
1850
  var canAccess = (role, roles) => {
1851
1851
  if (!roles || roles.length === 0) {
1852
1852
  return true;
@@ -2322,7 +2322,7 @@ function AdminStudioDashboardClient({
2322
2322
  label: "Manage Media",
2323
2323
  tone: "ghost"
2324
2324
  });
2325
- if (role === "admin") {
2325
+ if (role === "admin" || role === "developer") {
2326
2326
  actions.push({
2327
2327
  description: "Manage users, roles, and fallback tools.",
2328
2328
  href: toolsPath,
@@ -2601,7 +2601,7 @@ var buildSectionLinks = (adminBasePath, sections, formsEnabled, globalsBasePath)
2601
2601
  href: resolveAdminPath2(adminBasePath, "/tools"),
2602
2602
  id: "admin-tools",
2603
2603
  label: "Admin Tools",
2604
- roles: ["admin"]
2604
+ roles: ["admin", "developer"]
2605
2605
  }
2606
2606
  ];
2607
2607
  const seen = /* @__PURE__ */ new Set();
@@ -2671,10 +2671,10 @@ import { useEffect as useEffect8, useMemo as useMemo4, useState as useState8 } f
2671
2671
  import Link2 from "next/link";
2672
2672
  import { useAuth as useAuth3 } from "@payloadcms/ui";
2673
2673
  import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
2674
- var isAdmin = (user) => {
2674
+ var hasAdminAccess = (user) => {
2675
2675
  if (!user || typeof user !== "object") return false;
2676
2676
  const role = user.role;
2677
- return typeof role === "string" && role === "admin";
2677
+ return typeof role === "string" && (role === "admin" || role === "developer");
2678
2678
  };
2679
2679
  var getPropString3 = (props, key, fallback) => {
2680
2680
  if (!props || typeof props !== "object") return fallback;
@@ -2737,7 +2737,7 @@ function AdminStudioPagesListView(props) {
2737
2737
  return /* @__PURE__ */ jsx18(StudioSectionLayout, { navProps: props, children: /* @__PURE__ */ jsxs15(
2738
2738
  AdminPage,
2739
2739
  {
2740
- actions: isAdmin(user) ? /* @__PURE__ */ jsx18(Link2, { className: "orion-admin-action-button", href: newPagePath, children: "New Page" }) : null,
2740
+ actions: hasAdminAccess(user) ? /* @__PURE__ */ jsx18(Link2, { className: "orion-admin-action-button", href: newPagePath, children: "New Page" }) : null,
2741
2741
  breadcrumbs: [
2742
2742
  { label: "Dashboard", href: adminBasePath },
2743
2743
  { label: "Pages" }
@@ -2772,10 +2772,10 @@ function AdminStudioPagesListView(props) {
2772
2772
  import { useEffect as useEffect9, useMemo as useMemo5, useRef as useRef3, useState as useState9 } from "react";
2773
2773
  import { SetStepNav, toast, useAuth as useAuth4 } from "@payloadcms/ui";
2774
2774
  import { Fragment as Fragment4, jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
2775
- var isAdmin2 = (user) => {
2775
+ var hasAdminAccess2 = (user) => {
2776
2776
  if (!user || typeof user !== "object") return false;
2777
2777
  const role = user.role;
2778
- return typeof role === "string" && role === "admin";
2778
+ return typeof role === "string" && (role === "admin" || role === "developer");
2779
2779
  };
2780
2780
  var isEditor = (user) => {
2781
2781
  if (!user || typeof user !== "object") return false;
@@ -2833,7 +2833,7 @@ function AdminStudioPageEditView(props) {
2833
2833
  }
2834
2834
  setDidResolvePathFallback(true);
2835
2835
  }, [pageIDFromParams]);
2836
- const canPublish = isAdmin2(user) || isEditor(user);
2836
+ const canPublish = hasAdminAccess2(user) || isEditor(user);
2837
2837
  const refreshUnpublishedState = async (id) => {
2838
2838
  try {
2839
2839
  const response = await fetch(
@@ -3126,7 +3126,7 @@ var getPropString5 = (props, key, fallback) => {
3126
3126
  var canManagePages = (user) => {
3127
3127
  if (!user || typeof user !== "object") return false;
3128
3128
  const role = user.role;
3129
- return role === "admin" || role === "editor";
3129
+ return role === "admin" || role === "developer" || role === "editor";
3130
3130
  };
3131
3131
  var slugify = (value) => value.toLowerCase().trim().replace(/[^a-z0-9\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-");
3132
3132
  function AdminStudioNewPageView(props) {
@@ -3148,7 +3148,7 @@ function AdminStudioNewPageView(props) {
3148
3148
  title: "New Page",
3149
3149
  children: /* @__PURE__ */ jsxs17("div", { className: "orion-admin-card", children: [
3150
3150
  /* @__PURE__ */ jsx20("strong", { children: "Access denied" }),
3151
- /* @__PURE__ */ jsx20("span", { children: "This section is restricted to administrator and editor accounts." })
3151
+ /* @__PURE__ */ jsx20("span", { children: "This section is restricted to administrator, developer, and editor accounts." })
3152
3152
  ] })
3153
3153
  }
3154
3154
  ) });
@@ -5205,17 +5205,17 @@ var FORM_TONE_OVERRIDES = {
5205
5205
  var IDENTITY_KEYS = /* @__PURE__ */ new Set(["contactEmail", "email", "firstName", "lastName", "name"]);
5206
5206
  var RESPONSE_FIELD_PREVIEW_LIMIT = 3;
5207
5207
  var RESPONSE_SCROLL_THRESHOLD = 3;
5208
- var isAdmin3 = (user) => {
5208
+ var hasAdminAccess3 = (user) => {
5209
5209
  if (!user || typeof user !== "object") return false;
5210
5210
  const role = user.role;
5211
- return typeof role === "string" && role === "admin";
5211
+ return typeof role === "string" && (role === "admin" || role === "developer");
5212
5212
  };
5213
5213
  var isEditor2 = (user) => {
5214
5214
  if (!user || typeof user !== "object") return false;
5215
5215
  const role = user.role;
5216
5216
  return typeof role === "string" && role === "editor";
5217
5217
  };
5218
- var canReviewForms2 = (user) => isAdmin3(user) || isEditor2(user);
5218
+ var canReviewForms2 = (user) => hasAdminAccess3(user) || isEditor2(user);
5219
5219
  var getPropString13 = (props, key, fallback) => {
5220
5220
  if (!props || typeof props !== "object") return fallback;
5221
5221
  const direct = props[key];
@@ -5698,11 +5698,11 @@ function AdminStudioFormsView(props) {
5698
5698
  import { useEffect as useEffect18, useState as useState19 } from "react";
5699
5699
  import { useAuth as useAuth7 } from "@payloadcms/ui";
5700
5700
  import { jsx as jsx30, jsxs as jsxs27 } from "react/jsx-runtime";
5701
- var userRoles = ["admin", "client", "editor"];
5702
- var isAdmin4 = (user) => {
5701
+ var userRoles = ["admin", "client", "developer", "editor"];
5702
+ var hasAdminAccess4 = (user) => {
5703
5703
  if (!user || typeof user !== "object") return false;
5704
5704
  const role = user.role;
5705
- return typeof role === "string" && role === "admin";
5705
+ return typeof role === "string" && (role === "admin" || role === "developer");
5706
5706
  };
5707
5707
  var normalizeRole = (value) => userRoles.includes(value) ? value : "editor";
5708
5708
  function AdminStudioToolsView(props) {
@@ -5714,7 +5714,7 @@ function AdminStudioToolsView(props) {
5714
5714
  const [savedMessage, setSavedMessage] = useState19(null);
5715
5715
  const [createSubmitting, setCreateSubmitting] = useState19(false);
5716
5716
  const [updatingUserID, setUpdatingUserID] = useState19(null);
5717
- if (!isAdmin4(user)) {
5717
+ if (!hasAdminAccess4(user)) {
5718
5718
  return /* @__PURE__ */ jsx30(StudioSectionLayout, { navProps: props, children: /* @__PURE__ */ jsx30(
5719
5719
  AdminPage,
5720
5720
  {
@@ -5726,7 +5726,7 @@ function AdminStudioToolsView(props) {
5726
5726
  title: "Admin Tools",
5727
5727
  children: /* @__PURE__ */ jsxs27("div", { className: "orion-admin-card", children: [
5728
5728
  /* @__PURE__ */ jsx30("strong", { children: "Access denied" }),
5729
- /* @__PURE__ */ jsx30("span", { children: "This section is restricted to administrator accounts." })
5729
+ /* @__PURE__ */ jsx30("span", { children: "This section is restricted to administrator and developer accounts." })
5730
5730
  ] })
5731
5731
  }
5732
5732
  ) });
@@ -1,4 +1,4 @@
1
- export { A as AdminConfig, a as AdminStudioConfig, b as AdminStudioFooterPreviewConfig, c as AdminStudioHeaderPreviewConfig, d as AdminStudioSitePreviewConfig, C as CreateSocialMediaConnectionsFieldOptions, e as CreateSocialMediaGlobalOptions, R as ResolvedStudioDashboardPanel, f as ResolvedStudioSection, S as StudioDashboardPanel, g as StudioDashboardPanelSpan, h as StudioGlobalLink, j as StudioSection, k as StudioSectionCard, l as StudioSectionComponent, m as StudioSectionRole, n as StudioSectionView, o as configureAdmin, p as createHeaderNavItemsField, q as createSocialMediaConnectionsField, r as createSocialMediaGlobal, s as createThemePreferenceField, t as socialMediaConnectionsField, u as themePreferenceField, w as withTooltips } from '../index-Xt3Ep8WV.mjs';
1
+ export { A as AdminConfig, a as AdminStudioConfig, b as AdminStudioFooterPreviewConfig, c as AdminStudioHeaderPreviewConfig, d as AdminStudioSitePreviewConfig, C as CreateSocialMediaConnectionsFieldOptions, e as CreateSocialMediaGlobalOptions, R as ResolvedStudioDashboardPanel, f as ResolvedStudioSection, S as StudioDashboardPanel, g as StudioDashboardPanelSpan, h as StudioGlobalLink, j as StudioSection, k as StudioSectionCard, l as StudioSectionComponent, m as StudioSectionRole, n as StudioSectionView, o as configureAdmin, p as createHeaderNavItemsField, q as createSocialMediaConnectionsField, r as createSocialMediaGlobal, s as createThemePreferenceField, t as socialMediaConnectionsField, u as themePreferenceField, w as withTooltips } from '../index-DLfPOqYA.mjs';
2
2
  export { b as SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM, c as SOCIAL_MEDIA_ICON_OPTIONS, d as SOCIAL_MEDIA_PLATFORMS, e as SOCIAL_MEDIA_PLATFORM_LABELS, S as SocialMediaGlobalData, f as SocialMediaIconLibrary, g as SocialMediaIconOption, a as SocialMediaPlatform, h as SocialMediaProfileData, i as SocialMediaProfilesData } from '../socialMedia-C05Iy-SV.mjs';
3
3
  import 'payload';
4
- import '../sitePreviewTypes-BkHCWxNW.mjs';
4
+ import '../sitePreviewTypes-BrJwGzJj.mjs';
@@ -1,4 +1,4 @@
1
- export { A as AdminConfig, a as AdminStudioConfig, b as AdminStudioFooterPreviewConfig, c as AdminStudioHeaderPreviewConfig, d as AdminStudioSitePreviewConfig, C as CreateSocialMediaConnectionsFieldOptions, e as CreateSocialMediaGlobalOptions, R as ResolvedStudioDashboardPanel, f as ResolvedStudioSection, S as StudioDashboardPanel, g as StudioDashboardPanelSpan, h as StudioGlobalLink, j as StudioSection, k as StudioSectionCard, l as StudioSectionComponent, m as StudioSectionRole, n as StudioSectionView, o as configureAdmin, p as createHeaderNavItemsField, q as createSocialMediaConnectionsField, r as createSocialMediaGlobal, s as createThemePreferenceField, t as socialMediaConnectionsField, u as themePreferenceField, w as withTooltips } from '../index-yhpAgqDS.js';
1
+ export { A as AdminConfig, a as AdminStudioConfig, b as AdminStudioFooterPreviewConfig, c as AdminStudioHeaderPreviewConfig, d as AdminStudioSitePreviewConfig, C as CreateSocialMediaConnectionsFieldOptions, e as CreateSocialMediaGlobalOptions, R as ResolvedStudioDashboardPanel, f as ResolvedStudioSection, S as StudioDashboardPanel, g as StudioDashboardPanelSpan, h as StudioGlobalLink, j as StudioSection, k as StudioSectionCard, l as StudioSectionComponent, m as StudioSectionRole, n as StudioSectionView, o as configureAdmin, p as createHeaderNavItemsField, q as createSocialMediaConnectionsField, r as createSocialMediaGlobal, s as createThemePreferenceField, t as socialMediaConnectionsField, u as themePreferenceField, w as withTooltips } from '../index-BV0vEGl6.js';
2
2
  export { b as SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM, c as SOCIAL_MEDIA_ICON_OPTIONS, d as SOCIAL_MEDIA_PLATFORMS, e as SOCIAL_MEDIA_PLATFORM_LABELS, S as SocialMediaGlobalData, f as SocialMediaIconLibrary, g as SocialMediaIconOption, a as SocialMediaPlatform, h as SocialMediaProfileData, i as SocialMediaProfilesData } from '../socialMedia-C05Iy-SV.js';
3
3
  import 'payload';
4
- import '../sitePreviewTypes-BkHCWxNW.js';
4
+ import '../sitePreviewTypes-BrJwGzJj.js';
@@ -81,7 +81,7 @@ var adminNavIcons = [
81
81
  ];
82
82
 
83
83
  // src/shared/studioSections.ts
84
- var studioRoles = /* @__PURE__ */ new Set(["admin", "editor", "client"]);
84
+ var studioRoles = /* @__PURE__ */ new Set(["admin", "developer", "editor", "client"]);
85
85
  var studioIcons = new Set(adminNavIcons);
86
86
  var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
87
87
  var isAbsoluteExternalURL = (value) => /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(value) || value.startsWith("//");
@@ -7,7 +7,7 @@ import {
7
7
  socialMediaConnectionsField,
8
8
  themePreferenceField,
9
9
  withTooltips
10
- } from "../chunk-T4OH6KI6.mjs";
10
+ } from "../chunk-XZQILJK3.mjs";
11
11
  import "../chunk-W2UOCJDX.mjs";
12
12
  import {
13
13
  SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM,
@@ -1,4 +1,4 @@
1
- export { A as AdminBreadcrumbs, a as AdminNavInput, b as AdminNavLinkItem, c as AdminPage, d as AdminPageLinkOption, e as AdminPageRecord, M as MediaDetailPanelProps, f as MediaListItemProps, N as NestedNavItem, g as NestedNavItemInput, h as NestedNavTree, j as buildAdminPageLinkOptions, k as buildNestedNavTree, l as getAdminNavRows, n as normalizeAdminNavInputs, m as normalizeNestedNavItems, p as parseAdminHeaderNavFromForm } from '../index-DEQC3Dwj.mjs';
2
- export { A as AdminBreadcrumbItem, a as AdminNavIcon, b as AdminNavItem, c as AdminRole, S as SiteFooterPreviewData, d as SiteHeaderPreviewData, e as SitePreviewLink, f as SitePreviewLocationSummary, g as SitePreviewSocialLink, n as navItemIsActive, r as roleCanAccessNav } from '../sitePreviewTypes-BkHCWxNW.mjs';
1
+ export { A as AdminBreadcrumbs, a as AdminNavInput, b as AdminNavLinkItem, c as AdminPage, d as AdminPageLinkOption, e as AdminPageRecord, M as MediaDetailPanelProps, f as MediaListItemProps, N as NestedNavItem, g as NestedNavItemInput, h as NestedNavTree, j as buildAdminPageLinkOptions, k as buildNestedNavTree, l as getAdminNavRows, n as normalizeAdminNavInputs, m as normalizeNestedNavItems, p as parseAdminHeaderNavFromForm } from '../index-G_uTNffQ.mjs';
2
+ export { A as AdminBreadcrumbItem, a as AdminNavIcon, b as AdminNavItem, c as AdminRole, S as SiteFooterPreviewData, d as SiteHeaderPreviewData, e as SitePreviewLink, f as SitePreviewLocationSummary, g as SitePreviewSocialLink, n as navItemIsActive, r as roleCanAccessNav } from '../sitePreviewTypes-BrJwGzJj.mjs';
3
3
  import 'react/jsx-runtime';
4
4
  import 'react';
@@ -1,4 +1,4 @@
1
- export { A as AdminBreadcrumbs, a as AdminNavInput, b as AdminNavLinkItem, c as AdminPage, d as AdminPageLinkOption, e as AdminPageRecord, M as MediaDetailPanelProps, f as MediaListItemProps, N as NestedNavItem, g as NestedNavItemInput, h as NestedNavTree, j as buildAdminPageLinkOptions, k as buildNestedNavTree, l as getAdminNavRows, n as normalizeAdminNavInputs, m as normalizeNestedNavItems, p as parseAdminHeaderNavFromForm } from '../index-52HdVLQq.js';
2
- export { A as AdminBreadcrumbItem, a as AdminNavIcon, b as AdminNavItem, c as AdminRole, S as SiteFooterPreviewData, d as SiteHeaderPreviewData, e as SitePreviewLink, f as SitePreviewLocationSummary, g as SitePreviewSocialLink, n as navItemIsActive, r as roleCanAccessNav } from '../sitePreviewTypes-BkHCWxNW.js';
1
+ export { A as AdminBreadcrumbs, a as AdminNavInput, b as AdminNavLinkItem, c as AdminPage, d as AdminPageLinkOption, e as AdminPageRecord, M as MediaDetailPanelProps, f as MediaListItemProps, N as NestedNavItem, g as NestedNavItemInput, h as NestedNavTree, j as buildAdminPageLinkOptions, k as buildNestedNavTree, l as getAdminNavRows, n as normalizeAdminNavInputs, m as normalizeNestedNavItems, p as parseAdminHeaderNavFromForm } from '../index-DAdN56fM.js';
2
+ export { A as AdminBreadcrumbItem, a as AdminNavIcon, b as AdminNavItem, c as AdminRole, S as SiteFooterPreviewData, d as SiteHeaderPreviewData, e as SitePreviewLink, f as SitePreviewLocationSummary, g as SitePreviewSocialLink, n as navItemIsActive, r as roleCanAccessNav } from '../sitePreviewTypes-BrJwGzJj.js';
3
3
  import 'react/jsx-runtime';
4
4
  import 'react';
@@ -53,7 +53,7 @@ var createThemePreferenceField = (defaultTheme = "brand-light") => ({
53
53
  var themePreferenceField = createThemePreferenceField("brand-light");
54
54
 
55
55
  // src/shared/studioSections.ts
56
- var studioRoles = /* @__PURE__ */ new Set(["admin", "editor", "client"]);
56
+ var studioRoles = /* @__PURE__ */ new Set(["admin", "developer", "editor", "client"]);
57
57
  var studioIcons = new Set(adminNavIcons);
58
58
  var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
59
59
  var isAbsoluteExternalURL = (value) => /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(value) || value.startsWith("//");
@@ -1,12 +1,12 @@
1
1
  import { Field, CollectionConfig, GlobalConfig } from 'payload';
2
- import { a as AdminNavIcon, e as SitePreviewLink, f as SitePreviewLocationSummary } from './sitePreviewTypes-BkHCWxNW.js';
2
+ import { a as AdminNavIcon, e as SitePreviewLink, f as SitePreviewLocationSummary } from './sitePreviewTypes-BrJwGzJj.js';
3
3
  import { a as SocialMediaPlatform, b as SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM, c as SOCIAL_MEDIA_ICON_OPTIONS, d as SOCIAL_MEDIA_PLATFORMS, e as SOCIAL_MEDIA_PLATFORM_LABELS, S as SocialMediaGlobalData, f as SocialMediaIconLibrary, g as SocialMediaIconOption, h as SocialMediaProfileData, i as SocialMediaProfilesData } from './socialMedia-C05Iy-SV.js';
4
4
 
5
5
  type ThemeOption = 'light' | 'dark' | 'brand-light' | 'brand-dark';
6
6
  declare const createThemePreferenceField: (defaultTheme?: ThemeOption) => Field;
7
7
  declare const themePreferenceField: Field;
8
8
 
9
- type StudioSectionRole = 'admin' | 'editor' | 'client';
9
+ type StudioSectionRole = 'admin' | 'developer' | 'editor' | 'client';
10
10
  type StudioSectionCard = {
11
11
  description?: string;
12
12
  title: string;
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { A as AdminBreadcrumbItem, a as AdminNavIcon, b as AdminNavItem, c as AdminRole, S as SiteFooterPreviewData, d as SiteHeaderPreviewData, e as SitePreviewLink, f as SitePreviewLocationSummary, g as SitePreviewSocialLink, n as navItemIsActive, r as roleCanAccessNav } from './sitePreviewTypes-BkHCWxNW.js';
2
+ import { A as AdminBreadcrumbItem, a as AdminNavIcon, b as AdminNavItem, c as AdminRole, S as SiteFooterPreviewData, d as SiteHeaderPreviewData, e as SitePreviewLink, f as SitePreviewLocationSummary, g as SitePreviewSocialLink, n as navItemIsActive, r as roleCanAccessNav } from './sitePreviewTypes-BrJwGzJj.js';
3
3
  import { ReactNode } from 'react';
4
4
 
5
5
  type AdminBreadcrumbsProps = {
@@ -1,12 +1,12 @@
1
1
  import { Field, CollectionConfig, GlobalConfig } from 'payload';
2
- import { a as AdminNavIcon, e as SitePreviewLink, f as SitePreviewLocationSummary } from './sitePreviewTypes-BkHCWxNW.mjs';
2
+ import { a as AdminNavIcon, e as SitePreviewLink, f as SitePreviewLocationSummary } from './sitePreviewTypes-BrJwGzJj.mjs';
3
3
  import { a as SocialMediaPlatform, b as SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM, c as SOCIAL_MEDIA_ICON_OPTIONS, d as SOCIAL_MEDIA_PLATFORMS, e as SOCIAL_MEDIA_PLATFORM_LABELS, S as SocialMediaGlobalData, f as SocialMediaIconLibrary, g as SocialMediaIconOption, h as SocialMediaProfileData, i as SocialMediaProfilesData } from './socialMedia-C05Iy-SV.mjs';
4
4
 
5
5
  type ThemeOption = 'light' | 'dark' | 'brand-light' | 'brand-dark';
6
6
  declare const createThemePreferenceField: (defaultTheme?: ThemeOption) => Field;
7
7
  declare const themePreferenceField: Field;
8
8
 
9
- type StudioSectionRole = 'admin' | 'editor' | 'client';
9
+ type StudioSectionRole = 'admin' | 'developer' | 'editor' | 'client';
10
10
  type StudioSectionCard = {
11
11
  description?: string;
12
12
  title: string;
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { A as AdminBreadcrumbItem, a as AdminNavIcon, b as AdminNavItem, c as AdminRole, S as SiteFooterPreviewData, d as SiteHeaderPreviewData, e as SitePreviewLink, f as SitePreviewLocationSummary, g as SitePreviewSocialLink, n as navItemIsActive, r as roleCanAccessNav } from './sitePreviewTypes-BkHCWxNW.mjs';
2
+ import { A as AdminBreadcrumbItem, a as AdminNavIcon, b as AdminNavItem, c as AdminRole, S as SiteFooterPreviewData, d as SiteHeaderPreviewData, e as SitePreviewLink, f as SitePreviewLocationSummary, g as SitePreviewSocialLink, n as navItemIsActive, r as roleCanAccessNav } from './sitePreviewTypes-BrJwGzJj.mjs';
3
3
  import { ReactNode } from 'react';
4
4
 
5
5
  type AdminBreadcrumbsProps = {
package/dist/index.d.mts CHANGED
@@ -1,11 +1,11 @@
1
- export { i as admin } from './index-Xt3Ep8WV.mjs';
2
- export { i as adminApp } from './index-DEQC3Dwj.mjs';
1
+ export { i as admin } from './index-DLfPOqYA.mjs';
2
+ export { i as adminApp } from './index-G_uTNffQ.mjs';
3
3
  export { i as blocks } from './index-CluwY0ZQ.mjs';
4
4
  export { i as nextjs } from './index-D8BNfUJb.mjs';
5
5
  export { i as studio } from './index-DWmudwDm.mjs';
6
6
  export { i as studioPages } from './index-Cv-6qnrw.mjs';
7
7
  import 'payload';
8
- import './sitePreviewTypes-BkHCWxNW.mjs';
8
+ import './sitePreviewTypes-BrJwGzJj.mjs';
9
9
  import './socialMedia-C05Iy-SV.mjs';
10
10
  import 'react/jsx-runtime';
11
11
  import 'react';
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- export { i as admin } from './index-yhpAgqDS.js';
2
- export { i as adminApp } from './index-52HdVLQq.js';
1
+ export { i as admin } from './index-BV0vEGl6.js';
2
+ export { i as adminApp } from './index-DAdN56fM.js';
3
3
  export { i as blocks } from './index-CluwY0ZQ.js';
4
4
  export { i as nextjs } from './index-DD_E2UfJ.js';
5
5
  export { i as studio } from './index-DWmudwDm.js';
6
6
  export { i as studioPages } from './index-Crx_MtPw.js';
7
7
  import 'payload';
8
- import './sitePreviewTypes-BkHCWxNW.js';
8
+ import './sitePreviewTypes-BrJwGzJj.js';
9
9
  import './socialMedia-C05Iy-SV.js';
10
10
  import 'react/jsx-runtime';
11
11
  import 'react';
package/dist/index.js CHANGED
@@ -107,7 +107,7 @@ var navItemIsActive = (pathname, item) => {
107
107
  };
108
108
 
109
109
  // src/shared/studioSections.ts
110
- var studioRoles = /* @__PURE__ */ new Set(["admin", "editor", "client"]);
110
+ var studioRoles = /* @__PURE__ */ new Set(["admin", "developer", "editor", "client"]);
111
111
  var studioIcons = new Set(adminNavIcons);
112
112
  var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
113
113
  var isAbsoluteExternalURL = (value) => /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(value) || value.startsWith("//");
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  admin_exports
3
- } from "./chunk-T4OH6KI6.mjs";
3
+ } from "./chunk-XZQILJK3.mjs";
4
4
  import {
5
5
  admin_app_exports
6
6
  } from "./chunk-RKTIFEUY.mjs";
@@ -1,4 +1,4 @@
1
- type AdminRole = 'admin' | 'editor' | 'client';
1
+ type AdminRole = 'admin' | 'developer' | 'editor' | 'client';
2
2
  declare const adminNavIcons: readonly ["dashboard", "pages", "forms", "globals", "media", "tools", "account", "analytics"];
3
3
  type AdminNavIcon = (typeof adminNavIcons)[number];
4
4
  type AdminNavItem = {
@@ -1,4 +1,4 @@
1
- type AdminRole = 'admin' | 'editor' | 'client';
1
+ type AdminRole = 'admin' | 'developer' | 'editor' | 'client';
2
2
  declare const adminNavIcons: readonly ["dashboard", "pages", "forms", "globals", "media", "tools", "account", "analytics"];
3
3
  type AdminNavIcon = (typeof adminNavIcons)[number];
4
4
  type AdminNavItem = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orion-studios/payload-studio",
3
- "version": "0.6.0-beta.11",
3
+ "version": "0.6.0-beta.12",
4
4
  "description": "Base CMS, builder, and custom admin toolkit for Orion Studios websites",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",