@orion-studios/payload-studio 0.5.0-beta.97 → 0.5.0-beta.99

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.
@@ -1,10 +1,42 @@
1
1
  import { Field, CollectionConfig, GlobalConfig } from 'payload';
2
- 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-CXaTwojP.mjs';
2
+ 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';
3
3
 
4
4
  type ThemeOption = 'light' | 'dark' | 'brand-light' | 'brand-dark';
5
5
  declare const createThemePreferenceField: (defaultTheme?: ThemeOption) => Field;
6
6
  declare const themePreferenceField: Field;
7
7
 
8
+ type StudioSectionRole = 'admin' | 'editor' | 'client';
9
+ type StudioSectionCard = {
10
+ description?: string;
11
+ title: string;
12
+ };
13
+ type StudioSectionComponent = {
14
+ clientProps?: Record<string, unknown>;
15
+ exportName: string;
16
+ path: string;
17
+ };
18
+ type StudioSectionView = {
19
+ Component: StudioSectionComponent;
20
+ path: string;
21
+ };
22
+ type StudioSection = {
23
+ card?: StudioSectionCard;
24
+ href?: string;
25
+ id: string;
26
+ label: string;
27
+ matchPrefixes?: string[];
28
+ roles?: StudioSectionRole[];
29
+ view?: StudioSectionView;
30
+ };
31
+ type ResolvedStudioSection = {
32
+ card?: StudioSectionCard;
33
+ href: string;
34
+ id: string;
35
+ label: string;
36
+ matchPrefixes: string[];
37
+ roles?: StudioSectionRole[];
38
+ };
39
+
8
40
  type StudioGlobalLink = {
9
41
  description?: string;
10
42
  href?: string;
@@ -21,6 +53,7 @@ interface AdminStudioConfig {
21
53
  builderBasePath?: string;
22
54
  collectionSlug?: string;
23
55
  };
56
+ sections?: StudioSection[];
24
57
  }
25
58
  interface AdminConfig {
26
59
  brandName: string;
@@ -87,6 +120,7 @@ declare function configureAdmin(config: AdminConfig): {
87
120
  globalsExtraMatchPrefixes: string[];
88
121
  mediaCollectionSlug: string;
89
122
  pagesCollectionSlug: string;
123
+ sections: ResolvedStudioSection[];
90
124
  };
91
125
  };
92
126
  };
@@ -115,6 +149,7 @@ declare function configureAdmin(config: AdminConfig): {
115
149
  globalsExtraMatchPrefixes: string[];
116
150
  mediaCollectionSlug: string;
117
151
  pagesCollectionSlug: string;
152
+ sections: ResolvedStudioSection[];
118
153
  };
119
154
  } | undefined;
120
155
  };
@@ -153,6 +188,7 @@ declare const createSocialMediaGlobal: (options?: CreateSocialMediaGlobalOptions
153
188
  type index_AdminConfig = AdminConfig;
154
189
  type index_CreateSocialMediaConnectionsFieldOptions = CreateSocialMediaConnectionsFieldOptions;
155
190
  type index_CreateSocialMediaGlobalOptions = CreateSocialMediaGlobalOptions;
191
+ type index_ResolvedStudioSection = ResolvedStudioSection;
156
192
  declare const index_SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM: typeof SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM;
157
193
  declare const index_SOCIAL_MEDIA_ICON_OPTIONS: typeof SOCIAL_MEDIA_ICON_OPTIONS;
158
194
  declare const index_SOCIAL_MEDIA_PLATFORMS: typeof SOCIAL_MEDIA_PLATFORMS;
@@ -163,6 +199,11 @@ declare const index_SocialMediaIconOption: typeof SocialMediaIconOption;
163
199
  declare const index_SocialMediaPlatform: typeof SocialMediaPlatform;
164
200
  declare const index_SocialMediaProfileData: typeof SocialMediaProfileData;
165
201
  declare const index_SocialMediaProfilesData: typeof SocialMediaProfilesData;
202
+ type index_StudioSection = StudioSection;
203
+ type index_StudioSectionCard = StudioSectionCard;
204
+ type index_StudioSectionComponent = StudioSectionComponent;
205
+ type index_StudioSectionRole = StudioSectionRole;
206
+ type index_StudioSectionView = StudioSectionView;
166
207
  declare const index_configureAdmin: typeof configureAdmin;
167
208
  declare const index_createHeaderNavItemsField: typeof createHeaderNavItemsField;
168
209
  declare const index_createSocialMediaConnectionsField: typeof createSocialMediaConnectionsField;
@@ -172,7 +213,7 @@ declare const index_socialMediaConnectionsField: typeof socialMediaConnectionsFi
172
213
  declare const index_themePreferenceField: typeof themePreferenceField;
173
214
  declare const index_withTooltips: typeof withTooltips;
174
215
  declare namespace index {
175
- export { type index_AdminConfig as AdminConfig, type index_CreateSocialMediaConnectionsFieldOptions as CreateSocialMediaConnectionsFieldOptions, type index_CreateSocialMediaGlobalOptions as CreateSocialMediaGlobalOptions, index_SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM as SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM, index_SOCIAL_MEDIA_ICON_OPTIONS as SOCIAL_MEDIA_ICON_OPTIONS, index_SOCIAL_MEDIA_PLATFORMS as SOCIAL_MEDIA_PLATFORMS, index_SOCIAL_MEDIA_PLATFORM_LABELS as SOCIAL_MEDIA_PLATFORM_LABELS, index_SocialMediaGlobalData as SocialMediaGlobalData, index_SocialMediaIconLibrary as SocialMediaIconLibrary, index_SocialMediaIconOption as SocialMediaIconOption, index_SocialMediaPlatform as SocialMediaPlatform, index_SocialMediaProfileData as SocialMediaProfileData, index_SocialMediaProfilesData as SocialMediaProfilesData, index_configureAdmin as configureAdmin, index_createHeaderNavItemsField as createHeaderNavItemsField, index_createSocialMediaConnectionsField as createSocialMediaConnectionsField, index_createSocialMediaGlobal as createSocialMediaGlobal, index_createThemePreferenceField as createThemePreferenceField, index_socialMediaConnectionsField as socialMediaConnectionsField, index_themePreferenceField as themePreferenceField, index_withTooltips as withTooltips };
216
+ export { type index_AdminConfig as AdminConfig, type index_CreateSocialMediaConnectionsFieldOptions as CreateSocialMediaConnectionsFieldOptions, type index_CreateSocialMediaGlobalOptions as CreateSocialMediaGlobalOptions, type index_ResolvedStudioSection as ResolvedStudioSection, index_SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM as SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM, index_SOCIAL_MEDIA_ICON_OPTIONS as SOCIAL_MEDIA_ICON_OPTIONS, index_SOCIAL_MEDIA_PLATFORMS as SOCIAL_MEDIA_PLATFORMS, index_SOCIAL_MEDIA_PLATFORM_LABELS as SOCIAL_MEDIA_PLATFORM_LABELS, index_SocialMediaGlobalData as SocialMediaGlobalData, index_SocialMediaIconLibrary as SocialMediaIconLibrary, index_SocialMediaIconOption as SocialMediaIconOption, index_SocialMediaPlatform as SocialMediaPlatform, index_SocialMediaProfileData as SocialMediaProfileData, index_SocialMediaProfilesData as SocialMediaProfilesData, type index_StudioSection as StudioSection, type index_StudioSectionCard as StudioSectionCard, type index_StudioSectionComponent as StudioSectionComponent, type index_StudioSectionRole as StudioSectionRole, type index_StudioSectionView as StudioSectionView, index_configureAdmin as configureAdmin, index_createHeaderNavItemsField as createHeaderNavItemsField, index_createSocialMediaConnectionsField as createSocialMediaConnectionsField, index_createSocialMediaGlobal as createSocialMediaGlobal, index_createThemePreferenceField as createThemePreferenceField, index_socialMediaConnectionsField as socialMediaConnectionsField, index_themePreferenceField as themePreferenceField, index_withTooltips as withTooltips };
176
217
  }
177
218
 
178
- export { type AdminConfig as A, type CreateSocialMediaConnectionsFieldOptions as C, type CreateSocialMediaGlobalOptions as a, createHeaderNavItemsField as b, configureAdmin as c, createSocialMediaConnectionsField as d, createSocialMediaGlobal as e, createThemePreferenceField as f, index as i, socialMediaConnectionsField as s, themePreferenceField as t, withTooltips as w };
219
+ export { type AdminConfig as A, type CreateSocialMediaConnectionsFieldOptions as C, type ResolvedStudioSection as R, type StudioSection as S, type CreateSocialMediaGlobalOptions as a, type StudioSectionCard as b, type StudioSectionComponent as c, type StudioSectionRole as d, type StudioSectionView as e, configureAdmin as f, createHeaderNavItemsField as g, createSocialMediaConnectionsField as h, index as i, createSocialMediaGlobal as j, createThemePreferenceField as k, socialMediaConnectionsField as s, themePreferenceField as t, withTooltips as w };
@@ -1,6 +1,6 @@
1
1
  import * as payload from 'payload';
2
2
  import { Payload } from 'payload';
3
- import { S as SocialMediaGlobalData, a as SocialMediaPlatform } from './socialMedia-CXaTwojP.mjs';
3
+ import { S as SocialMediaGlobalData, a as SocialMediaPlatform } from './socialMedia-C05Iy-SV.mjs';
4
4
 
5
5
  declare const WEBSITE_CONTENT_TAG = "website-content";
6
6
  declare function createPayloadClient(config: any): () => Promise<payload.BasePayload>;
@@ -1,6 +1,6 @@
1
1
  import * as payload from 'payload';
2
2
  import { Payload } from 'payload';
3
- import { S as SocialMediaGlobalData, a as SocialMediaPlatform } from './socialMedia-CXaTwojP.js';
3
+ import { S as SocialMediaGlobalData, a as SocialMediaPlatform } from './socialMedia-C05Iy-SV.js';
4
4
 
5
5
  declare const WEBSITE_CONTENT_TAG = "website-content";
6
6
  declare function createPayloadClient(config: any): () => Promise<payload.BasePayload>;
package/dist/index.d.mts CHANGED
@@ -1,10 +1,10 @@
1
- export { i as admin } from './index-CodQ-io_.mjs';
1
+ export { i as admin } from './index-BnoqmQDP.mjs';
2
2
  export { i as adminApp } from './index-ZbOx4OCF.mjs';
3
3
  export { i as blocks } from './index-CluwY0ZQ.mjs';
4
- export { i as nextjs } from './index-CW02UDzl.mjs';
4
+ export { i as nextjs } from './index-D8BNfUJb.mjs';
5
5
  export { i as studio } from './index-BIwu3qIH.mjs';
6
6
  export { i as studioPages } from './index-R7hA134j.mjs';
7
7
  import 'payload';
8
- import './socialMedia-CXaTwojP.mjs';
8
+ import './socialMedia-C05Iy-SV.mjs';
9
9
  import 'react/jsx-runtime';
10
10
  import 'react';
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- export { i as admin } from './index-D8RxRIh3.js';
1
+ export { i as admin } from './index-CTpik6fR.js';
2
2
  export { i as adminApp } from './index-ZbOx4OCF.js';
3
3
  export { i as blocks } from './index-CluwY0ZQ.js';
4
- export { i as nextjs } from './index-BBUjXVqQ.js';
4
+ export { i as nextjs } from './index-DD_E2UfJ.js';
5
5
  export { i as studio } from './index-BIwu3qIH.js';
6
6
  export { i as studioPages } from './index-vjrjy0P4.js';
7
7
  import 'payload';
8
- import './socialMedia-CXaTwojP.js';
8
+ import './socialMedia-C05Iy-SV.js';
9
9
  import 'react/jsx-runtime';
10
10
  import 'react';
package/dist/index.js CHANGED
@@ -79,6 +79,113 @@ var createThemePreferenceField = (defaultTheme = "brand-light") => ({
79
79
  });
80
80
  var themePreferenceField = createThemePreferenceField("brand-light");
81
81
 
82
+ // src/shared/studioSections.ts
83
+ var studioRoles = /* @__PURE__ */ new Set(["admin", "editor", "client"]);
84
+ var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
85
+ var isAbsoluteExternalURL = (value) => /^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(value) || value.startsWith("//");
86
+ var normalizePathLikeValue = (value) => {
87
+ const trimmed = value.trim();
88
+ if (!trimmed) {
89
+ return "";
90
+ }
91
+ if (isAbsoluteExternalURL(trimmed)) {
92
+ return trimmed;
93
+ }
94
+ const withLeadingSlash = trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
95
+ const normalized = withLeadingSlash.replace(/\/+$/, "");
96
+ return normalized || "/";
97
+ };
98
+ var normalizeStringArray = (value) => {
99
+ if (!Array.isArray(value)) {
100
+ return [];
101
+ }
102
+ return value.filter((entry) => typeof entry === "string").map((entry) => normalizePathLikeValue(entry)).filter((entry) => entry.length > 0);
103
+ };
104
+ var normalizeRoles = (value) => {
105
+ if (!Array.isArray(value)) {
106
+ return void 0;
107
+ }
108
+ const roles = value.filter((entry) => typeof entry === "string" && studioRoles.has(entry));
109
+ return roles.length > 0 ? roles : void 0;
110
+ };
111
+ var normalizeCard = (value) => {
112
+ if (!isRecord(value) || typeof value.title !== "string") {
113
+ return void 0;
114
+ }
115
+ const title = value.title.trim();
116
+ if (!title) {
117
+ return void 0;
118
+ }
119
+ return {
120
+ title,
121
+ ...typeof value.description === "string" && value.description.trim().length > 0 ? { description: value.description.trim() } : {}
122
+ };
123
+ };
124
+ var resolveStudioSections = (value) => {
125
+ if (!Array.isArray(value)) {
126
+ return [];
127
+ }
128
+ const sections = [];
129
+ const seen = /* @__PURE__ */ new Set();
130
+ for (const entry of value) {
131
+ if (!isRecord(entry) || typeof entry.id !== "string" || typeof entry.label !== "string") {
132
+ continue;
133
+ }
134
+ const id = entry.id.trim();
135
+ const label = entry.label.trim();
136
+ if (!id || !label || seen.has(id)) {
137
+ continue;
138
+ }
139
+ const href = typeof entry.href === "string" && entry.href.trim().length > 0 ? normalizePathLikeValue(entry.href) : isRecord(entry.view) && typeof entry.view.path === "string" ? normalizePathLikeValue(entry.view.path) : "";
140
+ if (!href) {
141
+ continue;
142
+ }
143
+ const matchPrefixes = Array.from(/* @__PURE__ */ new Set([href, ...normalizeStringArray(entry.matchPrefixes)]));
144
+ sections.push({
145
+ id,
146
+ label,
147
+ href,
148
+ matchPrefixes,
149
+ ...normalizeRoles(entry.roles) ? { roles: normalizeRoles(entry.roles) } : {},
150
+ ...normalizeCard(entry.card) ? { card: normalizeCard(entry.card) } : {}
151
+ });
152
+ seen.add(id);
153
+ }
154
+ return sections;
155
+ };
156
+ var resolveStudioSectionViews = (value) => {
157
+ if (!Array.isArray(value)) {
158
+ return {};
159
+ }
160
+ const views = {};
161
+ for (const entry of value) {
162
+ if (!isRecord(entry) || typeof entry.id !== "string" || !isRecord(entry.view)) {
163
+ continue;
164
+ }
165
+ const id = entry.id.trim();
166
+ const view = entry.view;
167
+ const component = isRecord(view.Component) ? view.Component : null;
168
+ if (!id || typeof view.path !== "string" || !component || typeof component.exportName !== "string" || typeof component.path !== "string") {
169
+ continue;
170
+ }
171
+ const path2 = normalizePathLikeValue(view.path);
172
+ const componentPath = component.path.trim();
173
+ const exportName = component.exportName.trim();
174
+ if (!path2 || !componentPath || !exportName) {
175
+ continue;
176
+ }
177
+ views[id] = {
178
+ path: path2,
179
+ Component: {
180
+ exportName,
181
+ path: componentPath,
182
+ ...isRecord(component.clientProps) ? { clientProps: component.clientProps } : {}
183
+ }
184
+ };
185
+ }
186
+ return views;
187
+ };
188
+
82
189
  // src/admin/helpers/configureAdmin.ts
83
190
  var import_meta = {};
84
191
  function getPkgDistDir() {
@@ -125,6 +232,8 @@ function configureAdmin(config) {
125
232
  href: contactFormStudioPath
126
233
  };
127
234
  });
235
+ const studioSections = resolveStudioSections(config.studio?.sections || []);
236
+ const studioSectionViews = resolveStudioSectionViews(config.studio?.sections || []);
128
237
  let cssPath;
129
238
  const pkgDist = getPkgDistDir();
130
239
  const sourceCssPath = import_path.default.resolve(pkgDist, "admin.css");
@@ -157,7 +266,8 @@ function configureAdmin(config) {
157
266
  globalsBasePath: "/studio-globals",
158
267
  globalsExtraMatchPrefixes: [contactFormStudioPath],
159
268
  mediaCollectionSlug,
160
- pagesCollectionSlug
269
+ pagesCollectionSlug,
270
+ sections: studioSections
161
271
  }
162
272
  }
163
273
  } : {},
@@ -190,7 +300,8 @@ function configureAdmin(config) {
190
300
  globalsBasePath: "/studio-globals",
191
301
  globalsExtraMatchPrefixes: [contactFormStudioPath],
192
302
  mediaCollectionSlug,
193
- pagesCollectionSlug
303
+ pagesCollectionSlug,
304
+ sections: studioSections
194
305
  }
195
306
  }
196
307
  },
@@ -216,7 +327,16 @@ function configureAdmin(config) {
216
327
  globalsBasePath: "/studio-globals"
217
328
  }
218
329
  }
219
- }
330
+ },
331
+ ...Object.fromEntries(
332
+ Object.entries(studioSectionViews).map(([id, view]) => [
333
+ id,
334
+ {
335
+ path: view.path,
336
+ Component: view.Component
337
+ }
338
+ ])
339
+ )
220
340
  } : {}
221
341
  },
222
342
  providers: [
@@ -429,35 +549,51 @@ var SOCIAL_MEDIA_PLATFORMS = [
429
549
  var SOCIAL_MEDIA_ICON_OPTIONS = {
430
550
  facebook: [
431
551
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:facebook" },
432
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:facebook-f" }
552
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:facebook-f" },
553
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-facebook" },
554
+ { label: "Remix Icons", library: "remix-icons", value: "ri:facebook-fill" }
433
555
  ],
434
556
  instagram: [
435
557
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:instagram" },
436
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:instagram" }
558
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:instagram" },
559
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-instagram" },
560
+ { label: "Remix Icons", library: "remix-icons", value: "ri:instagram-fill" }
437
561
  ],
438
562
  x: [
439
563
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:x" },
440
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:x-twitter" }
564
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:x-twitter" },
565
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-x" },
566
+ { label: "Remix Icons", library: "remix-icons", value: "ri:twitter-x-fill" }
441
567
  ],
442
568
  linkedin: [
443
569
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:linkedin" },
444
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:linkedin-in" }
570
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:linkedin-in" },
571
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-linkedin" },
572
+ { label: "Remix Icons", library: "remix-icons", value: "ri:linkedin-fill" }
445
573
  ],
446
574
  youtube: [
447
575
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:youtube" },
448
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:youtube" }
576
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:youtube" },
577
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-youtube" },
578
+ { label: "Remix Icons", library: "remix-icons", value: "ri:youtube-fill" }
449
579
  ],
450
580
  tiktok: [
451
581
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:tiktok" },
452
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:tiktok" }
582
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:tiktok" },
583
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-tiktok" },
584
+ { label: "Remix Icons", library: "remix-icons", value: "ri:tiktok-fill" }
453
585
  ],
454
586
  pinterest: [
455
587
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:pinterest" },
456
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:pinterest-p" }
588
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:pinterest-p" },
589
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-pinterest" },
590
+ { label: "Remix Icons", library: "remix-icons", value: "ri:pinterest-fill" }
457
591
  ],
458
592
  snapchat: [
459
593
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:snapchat" },
460
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:snapchat" }
594
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:snapchat" },
595
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-snapchat" },
596
+ { label: "Remix Icons", library: "remix-icons", value: "ri:snapchat-fill" }
461
597
  ]
462
598
  };
463
599
  var SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM = SOCIAL_MEDIA_PLATFORMS.reduce(
@@ -2718,7 +2854,7 @@ var withImageUploadOptimization = (collection, options = {}) => {
2718
2854
  };
2719
2855
 
2720
2856
  // src/studio/index.ts
2721
- var isRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
2857
+ var isRecord2 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
2722
2858
  var makeIssue = (message, path2, code = "studio.invalid") => ({
2723
2859
  code,
2724
2860
  message,
@@ -2733,7 +2869,7 @@ var createEmptyStudioDocument = (title) => ({
2733
2869
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2734
2870
  });
2735
2871
  function assertStudioDocumentV1(input) {
2736
- if (!isRecord(input)) {
2872
+ if (!isRecord2(input)) {
2737
2873
  throw new Error("Studio document must be an object");
2738
2874
  }
2739
2875
  if (input.schemaVersion !== 1) {
@@ -2743,7 +2879,7 @@ function assertStudioDocumentV1(input) {
2743
2879
  throw new Error("Studio document nodes must be an array");
2744
2880
  }
2745
2881
  const nodes = input.nodes.map((node, index) => {
2746
- if (!isRecord(node)) {
2882
+ if (!isRecord2(node)) {
2747
2883
  throw new Error(`Node at index ${index} must be an object`);
2748
2884
  }
2749
2885
  if (typeof node.id !== "string" || node.id.length === 0) {
@@ -2752,7 +2888,7 @@ function assertStudioDocumentV1(input) {
2752
2888
  if (typeof node.type !== "string" || node.type.length === 0) {
2753
2889
  throw new Error(`Node at index ${index} has invalid type`);
2754
2890
  }
2755
- if (!isRecord(node.data)) {
2891
+ if (!isRecord2(node.data)) {
2756
2892
  throw new Error(`Node at index ${index} has invalid data`);
2757
2893
  }
2758
2894
  return {
@@ -2762,7 +2898,7 @@ function assertStudioDocumentV1(input) {
2762
2898
  };
2763
2899
  });
2764
2900
  return {
2765
- metadata: isRecord(input.metadata) ? input.metadata : void 0,
2901
+ metadata: isRecord2(input.metadata) ? input.metadata : void 0,
2766
2902
  schemaVersion: 1,
2767
2903
  title: typeof input.title === "string" ? input.title : void 0,
2768
2904
  nodes,
@@ -2840,7 +2976,7 @@ function migrateStudioDocument(value, migrations) {
2840
2976
  const sorted = [...migrations].sort((a, b) => a.fromVersion - b.fromVersion);
2841
2977
  let current = value;
2842
2978
  for (const migration of sorted) {
2843
- if (!isRecord(current) || current.schemaVersion !== migration.fromVersion) {
2979
+ if (!isRecord2(current) || current.schemaVersion !== migration.fromVersion) {
2844
2980
  continue;
2845
2981
  }
2846
2982
  current = migration.migrate(current);
@@ -2962,7 +3098,7 @@ var defaultBuilderThemeTokens = {
2962
3098
  };
2963
3099
 
2964
3100
  // src/studio-pages/builder/adapters/settingsV2.ts
2965
- var isRecord2 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
3101
+ var isRecord3 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
2966
3102
  var parsePercent = (value) => {
2967
3103
  if (typeof value === "number" && Number.isFinite(value)) {
2968
3104
  return Math.max(0, Math.min(100, value));
@@ -2988,12 +3124,12 @@ var parsePixel = (value) => {
2988
3124
  return null;
2989
3125
  };
2990
3126
  var mergeSettings = (defaults, input) => {
2991
- if (!isRecord2(input)) {
3127
+ if (!isRecord3(input)) {
2992
3128
  return structuredClone(defaults);
2993
3129
  }
2994
3130
  const next = structuredClone(defaults);
2995
3131
  for (const [key, value] of Object.entries(input)) {
2996
- if (isRecord2(value) && isRecord2(next[key])) {
3132
+ if (isRecord3(value) && isRecord3(next[key])) {
2997
3133
  next[key] = mergeSettings(next[key], value);
2998
3134
  continue;
2999
3135
  }
@@ -3096,7 +3232,7 @@ var v2SettingsToLegacyBlock = (blockWithSettings) => {
3096
3232
  next.imagePosition = settings.media.position;
3097
3233
  }
3098
3234
  if (Array.isArray(next.items)) {
3099
- next.items = next.items.map((rawItem) => isRecord2(rawItem) ? v2SettingsToLegacyItem(rawItem) : rawItem);
3235
+ next.items = next.items.map((rawItem) => isRecord3(rawItem) ? v2SettingsToLegacyItem(rawItem) : rawItem);
3100
3236
  }
3101
3237
  return next;
3102
3238
  };
@@ -3136,19 +3272,19 @@ var migrateBlockToSettingsV2 = (block) => {
3136
3272
  }
3137
3273
  return {
3138
3274
  ...withLegacyMirrors,
3139
- items: withLegacyMirrors.items.map((rawItem) => isRecord2(rawItem) ? v2SettingsToLegacyItem(rawItem) : rawItem)
3275
+ items: withLegacyMirrors.items.map((rawItem) => isRecord3(rawItem) ? v2SettingsToLegacyItem(rawItem) : rawItem)
3140
3276
  };
3141
3277
  };
3142
3278
 
3143
3279
  // src/studio-pages/builder/settings-v2/themeTokens.ts
3144
- var isRecord3 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
3280
+ var isRecord4 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
3145
3281
  var merge = (base, next) => {
3146
- if (!next || !isRecord3(next)) {
3282
+ if (!next || !isRecord4(next)) {
3147
3283
  return base;
3148
3284
  }
3149
3285
  const merged = { ...base };
3150
3286
  for (const [key, value] of Object.entries(next)) {
3151
- if (isRecord3(value) && isRecord3(merged[key])) {
3287
+ if (isRecord4(value) && isRecord4(merged[key])) {
3152
3288
  merged[key] = merge(merged[key], value);
3153
3289
  continue;
3154
3290
  }
@@ -3613,9 +3749,9 @@ var inspectorDefinitionByBlockType = {
3613
3749
  var import_jsx_runtime6 = require("react/jsx-runtime");
3614
3750
 
3615
3751
  // src/studio-pages/migrations.ts
3616
- var isRecord4 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
3752
+ var isRecord5 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
3617
3753
  var assertPageStudioDocumentV1 = (value) => {
3618
- if (!isRecord4(value)) {
3754
+ if (!isRecord5(value)) {
3619
3755
  throw new Error("Studio document must be an object");
3620
3756
  }
3621
3757
  if (value.schemaVersion !== 1) {
@@ -3625,7 +3761,7 @@ var assertPageStudioDocumentV1 = (value) => {
3625
3761
  throw new Error("Studio document nodes must be an array");
3626
3762
  }
3627
3763
  const nodes = value.nodes.map((node, index) => {
3628
- if (!isRecord4(node)) {
3764
+ if (!isRecord5(node)) {
3629
3765
  throw new Error(`Node at index ${index} must be an object`);
3630
3766
  }
3631
3767
  if (typeof node.id !== "string" || node.id.length === 0) {
@@ -3634,7 +3770,7 @@ var assertPageStudioDocumentV1 = (value) => {
3634
3770
  if (typeof node.type !== "string" || node.type.length === 0) {
3635
3771
  throw new Error(`Node at index ${index} has invalid type`);
3636
3772
  }
3637
- if (!isRecord4(node.data)) {
3773
+ if (!isRecord5(node.data)) {
3638
3774
  throw new Error(`Node at index ${index} has invalid data`);
3639
3775
  }
3640
3776
  return {
@@ -3644,7 +3780,7 @@ var assertPageStudioDocumentV1 = (value) => {
3644
3780
  };
3645
3781
  });
3646
3782
  return {
3647
- metadata: isRecord4(value.metadata) ? value.metadata : void 0,
3783
+ metadata: isRecord5(value.metadata) ? value.metadata : void 0,
3648
3784
  nodes,
3649
3785
  schemaVersion: 1,
3650
3786
  title: typeof value.title === "string" ? value.title : void 0,
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  admin_exports
3
- } from "./chunk-YJPNN3O3.mjs";
3
+ } from "./chunk-74XFAVXU.mjs";
4
4
  import {
5
5
  admin_app_exports
6
6
  } from "./chunk-XVH5SCBD.mjs";
@@ -9,8 +9,8 @@ import {
9
9
  } from "./chunk-XK3K5GRP.mjs";
10
10
  import {
11
11
  nextjs_exports
12
- } from "./chunk-CKEUQCDC.mjs";
13
- import "./chunk-ZFJJQ4YK.mjs";
12
+ } from "./chunk-XHWQJUX5.mjs";
13
+ import "./chunk-ZTXJG4K5.mjs";
14
14
  import {
15
15
  studio_exports
16
16
  } from "./chunk-ADIIWIYL.mjs";
@@ -1,3 +1,3 @@
1
- export { F as FooterData, H as HeaderData, R as ResolvedSocialMediaLink, S as SiteNavItem, a as SiteSettingsData, W as WEBSITE_CONTENT_TAG, c as createPageQueries, b as createPayloadClient, d as createSiteQueries, r as resolveMedia, e as resolveSocialMediaLinks } from '../index-CW02UDzl.mjs';
2
- export { S as SocialMediaGlobalData } from '../socialMedia-CXaTwojP.mjs';
1
+ export { F as FooterData, H as HeaderData, R as ResolvedSocialMediaLink, S as SiteNavItem, a as SiteSettingsData, W as WEBSITE_CONTENT_TAG, c as createPageQueries, b as createPayloadClient, d as createSiteQueries, r as resolveMedia, e as resolveSocialMediaLinks } from '../index-D8BNfUJb.mjs';
2
+ export { S as SocialMediaGlobalData } from '../socialMedia-C05Iy-SV.mjs';
3
3
  import 'payload';
@@ -1,3 +1,3 @@
1
- export { F as FooterData, H as HeaderData, R as ResolvedSocialMediaLink, S as SiteNavItem, a as SiteSettingsData, W as WEBSITE_CONTENT_TAG, c as createPageQueries, b as createPayloadClient, d as createSiteQueries, r as resolveMedia, e as resolveSocialMediaLinks } from '../index-BBUjXVqQ.js';
2
- export { S as SocialMediaGlobalData } from '../socialMedia-CXaTwojP.js';
1
+ export { F as FooterData, H as HeaderData, R as ResolvedSocialMediaLink, S as SiteNavItem, a as SiteSettingsData, W as WEBSITE_CONTENT_TAG, c as createPageQueries, b as createPayloadClient, d as createSiteQueries, r as resolveMedia, e as resolveSocialMediaLinks } from '../index-DD_E2UfJ.js';
2
+ export { S as SocialMediaGlobalData } from '../socialMedia-C05Iy-SV.js';
3
3
  import 'payload';
@@ -1298,35 +1298,51 @@ var SOCIAL_MEDIA_PLATFORMS = [
1298
1298
  var SOCIAL_MEDIA_ICON_OPTIONS = {
1299
1299
  facebook: [
1300
1300
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:facebook" },
1301
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:facebook-f" }
1301
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:facebook-f" },
1302
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-facebook" },
1303
+ { label: "Remix Icons", library: "remix-icons", value: "ri:facebook-fill" }
1302
1304
  ],
1303
1305
  instagram: [
1304
1306
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:instagram" },
1305
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:instagram" }
1307
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:instagram" },
1308
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-instagram" },
1309
+ { label: "Remix Icons", library: "remix-icons", value: "ri:instagram-fill" }
1306
1310
  ],
1307
1311
  x: [
1308
1312
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:x" },
1309
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:x-twitter" }
1313
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:x-twitter" },
1314
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-x" },
1315
+ { label: "Remix Icons", library: "remix-icons", value: "ri:twitter-x-fill" }
1310
1316
  ],
1311
1317
  linkedin: [
1312
1318
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:linkedin" },
1313
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:linkedin-in" }
1319
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:linkedin-in" },
1320
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-linkedin" },
1321
+ { label: "Remix Icons", library: "remix-icons", value: "ri:linkedin-fill" }
1314
1322
  ],
1315
1323
  youtube: [
1316
1324
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:youtube" },
1317
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:youtube" }
1325
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:youtube" },
1326
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-youtube" },
1327
+ { label: "Remix Icons", library: "remix-icons", value: "ri:youtube-fill" }
1318
1328
  ],
1319
1329
  tiktok: [
1320
1330
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:tiktok" },
1321
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:tiktok" }
1331
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:tiktok" },
1332
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-tiktok" },
1333
+ { label: "Remix Icons", library: "remix-icons", value: "ri:tiktok-fill" }
1322
1334
  ],
1323
1335
  pinterest: [
1324
1336
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:pinterest" },
1325
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:pinterest-p" }
1337
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:pinterest-p" },
1338
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-pinterest" },
1339
+ { label: "Remix Icons", library: "remix-icons", value: "ri:pinterest-fill" }
1326
1340
  ],
1327
1341
  snapchat: [
1328
1342
  { label: "Simple Icons", library: "simple-icons", value: "simple-icons:snapchat" },
1329
- { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:snapchat" }
1343
+ { label: "Font Awesome Brands", library: "font-awesome-brands", value: "fa6-brands:snapchat" },
1344
+ { label: "Tabler Brands", library: "tabler-brands", value: "tabler:brand-snapchat" },
1345
+ { label: "Remix Icons", library: "remix-icons", value: "ri:snapchat-fill" }
1330
1346
  ]
1331
1347
  };
1332
1348
  var SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM = SOCIAL_MEDIA_PLATFORMS.reduce(
@@ -5,8 +5,8 @@ import {
5
5
  createSiteQueries,
6
6
  resolveMedia,
7
7
  resolveSocialMediaLinks
8
- } from "../chunk-CKEUQCDC.mjs";
9
- import "../chunk-ZFJJQ4YK.mjs";
8
+ } from "../chunk-XHWQJUX5.mjs";
9
+ import "../chunk-ZTXJG4K5.mjs";
10
10
  import "../chunk-ADIIWIYL.mjs";
11
11
  import "../chunk-C4J35SPJ.mjs";
12
12
  import "../chunk-SIL2J5MF.mjs";
@@ -1,5 +1,5 @@
1
1
  type SocialMediaPlatform = 'facebook' | 'instagram' | 'x' | 'linkedin' | 'youtube' | 'tiktok' | 'pinterest' | 'snapchat';
2
- type SocialMediaIconLibrary = 'simple-icons' | 'font-awesome-brands';
2
+ type SocialMediaIconLibrary = 'simple-icons' | 'font-awesome-brands' | 'tabler-brands' | 'remix-icons';
3
3
  type SocialMediaIconOption = {
4
4
  label: string;
5
5
  library: SocialMediaIconLibrary;
@@ -15,7 +15,7 @@ type SocialMediaGlobalData = {
15
15
  };
16
16
  declare const SOCIAL_MEDIA_PLATFORM_LABELS: Record<SocialMediaPlatform, string>;
17
17
  declare const SOCIAL_MEDIA_PLATFORMS: SocialMediaPlatform[];
18
- declare const SOCIAL_MEDIA_ICON_OPTIONS: Record<SocialMediaPlatform, [SocialMediaIconOption, SocialMediaIconOption]>;
18
+ declare const SOCIAL_MEDIA_ICON_OPTIONS: Record<SocialMediaPlatform, SocialMediaIconOption[]>;
19
19
  declare const SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM: Record<SocialMediaPlatform, string>;
20
20
 
21
21
  export { type SocialMediaGlobalData as S, type SocialMediaPlatform as a, SOCIAL_MEDIA_DEFAULT_ICON_BY_PLATFORM as b, SOCIAL_MEDIA_ICON_OPTIONS as c, SOCIAL_MEDIA_PLATFORMS as d, SOCIAL_MEDIA_PLATFORM_LABELS as e, type SocialMediaIconLibrary as f, type SocialMediaIconOption as g, type SocialMediaProfileData as h, type SocialMediaProfilesData as i };