@bison-lab/payload-core 3.25.0 → 3.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -3,7 +3,7 @@ import { A as ThemeLibraryColorDoc, C as THEME_IDENTITY_SLUG, D as ThemeDoc, E a
3
3
  import { a as NAVIGATION_FOOTER_DB_NAME, c as NavigationBar, d as NavigationHeader, i as NAVIGATION_FEATURE, l as NavigationDoc, n as CreateNavigationOptions, o as NAVIGATION_FOOTER_SLUG, r as NAVIGATION_DB_NAME, s as NAVIGATION_SLUG, t as getNavigation, u as NavigationFooter } from "./published-BtEiv0lH.mjs";
4
4
  import { ThemeConfig } from "@bison-lab/tokens";
5
5
  import * as payload$1 from "payload";
6
- import { Access, Block, CheckboxField, CollectionAfterChangeHook, CollectionBeforeChangeHook, CollectionConfig, CollectionSlug, Field, GlobalConfig, ImageSize, Payload, PayloadRequest, Plugin, UploadCollectionSlug } from "payload";
6
+ import { Access, Block, CheckboxField, CollectionAfterChangeHook, CollectionBeforeChangeHook, CollectionBeforeValidateHook, CollectionConfig, CollectionSlug, Field, GlobalConfig, ImageSize, Payload, PayloadRequest, Plugin, UploadCollectionSlug } from "payload";
7
7
 
8
8
  //#region src/seo/plugin.d.ts
9
9
  /**
@@ -514,6 +514,20 @@ declare function validateFeaturesMatrix(value: unknown, extras?: readonly Featur
514
514
  declare function featureGroupLabel(group: string): string;
515
515
  //#endregion
516
516
  //#region src/collections/pages.d.ts
517
+ /** Standing copy on the Layout field — same job as the hero description. */
518
+ declare const LAYOUT_DESCRIPTION = "Every page needs at least one section below the hero. A page cannot be published without one.";
519
+ /** Field error when Publish is clicked with an empty body. */
520
+ declare const LAYOUT_REQUIRED_MESSAGE = "Add at least one section. A page cannot be published without one.";
521
+ /**
522
+ * Toast label for that error. Payload's envelope is always
523
+ * "The following field is invalid: {label}", so the label has to name the fix.
524
+ */
525
+ declare const LAYOUT_REQUIRED_LABEL = "Layout \u2014 add a section";
526
+ /**
527
+ * Drafts may be empty. Publish with no section is refused here so the toast
528
+ * names the fix — Payload's built-in minRows toast only says "Content → Layout".
529
+ */
530
+ declare const requireLayoutOnPublish: CollectionBeforeValidateHook;
517
531
  interface PagesOptions {
518
532
  /**
519
533
  * What a page may open with. One row, so this is the site's hero variants,
@@ -537,6 +551,12 @@ interface PagesOptions {
537
551
  * site's committed `importMap.js`. Omit it for Payload's own button.
538
552
  */
539
553
  previewButton?: string;
554
+ /**
555
+ * Standing folder roots (`patients`, `providers`). Shown on Parent even
556
+ * when no CMS page lives under them. Often the same paths `isReservedSlug`
557
+ * refuses as leaf pages.
558
+ */
559
+ folderRoots?: string[];
540
560
  }
541
561
  /**
542
562
  * CMS-managed pages: one required hero, then a reorderable body of sections.
@@ -544,6 +564,7 @@ interface PagesOptions {
544
564
  * code-owned, which is why the blocks are an argument.
545
565
  */
546
566
  declare function createPages({
567
+ folderRoots,
547
568
  heroBlocks,
548
569
  isReservedSlug,
549
570
  layoutBlocks,
@@ -606,6 +627,10 @@ declare function createMedia({
606
627
  //#endregion
607
628
  //#region src/fields/slug.d.ts
608
629
  declare const SLUG_FIELD = "@bison-lab/payload-core/admin#SlugField";
630
+ declare const PAGE_TITLE_CELL = "@bison-lab/payload-core/admin#PageTitleCell";
631
+ /** Sentinel the Parent control writes while the editor is naming a new folder. */
632
+ declare const NEW_FOLDER_PARENT = "__new__";
633
+ declare const EXISTING_PARENT_MESSAGE = "That folder is already in the list. Pick it from the list.";
609
634
  declare const SLUG_UNLOCK_WARNING = "This page is live. Changing the address will send visitors from the old URL to the new one.";
610
635
  interface SlugFieldOptions {
611
636
  /** The collection the field sits on — what the duplicate check searches. */
@@ -616,12 +641,30 @@ interface SlugFieldOptions {
616
641
  * those are is knowable only to the site, so it arrives as an option.
617
642
  */
618
643
  isReserved: (slug: string) => boolean;
644
+ /**
645
+ * Standing folder roots the site owns in code (`patients`, `providers`).
646
+ * They appear on Parent even when no CMS page lives under them.
647
+ */
648
+ folderRoots?: string[];
619
649
  }
620
650
  /**
621
651
  * A stored slug from whatever was typed: NFKD, hyphenated, slash segments
622
652
  * kept, so `Café / About Us` becomes `cafe/about-us`.
623
653
  */
624
654
  declare function normalizeSlug(value: string): string;
655
+ /** The folder prefix Parent stores. `__new__` resolves through `newFolder`. */
656
+ declare function parentPrefix(parent: string | null | undefined, newFolder?: string | null): string;
657
+ /** Last segment of a stored slug — the title leaf once a folder is set. */
658
+ declare function slugLeaf(slug: string): string;
659
+ /**
660
+ * Address from a parent prefix and a title (or an existing leaf). Title-follow
661
+ * uses this so a folder is not wiped when the title changes.
662
+ */
663
+ declare function composeSlug(parent: string | null | undefined, title: string, newFolder?: string | null): string;
664
+ /** Prefixes that exist only because a child slug lives under them. */
665
+ declare function inferredFolders(slugs: string[]): string[];
666
+ /** Slash count after the first segment — how far to indent a list row. */
667
+ declare function slugDepth(slug: string): number;
625
668
  /**
626
669
  * Locks the slug on first publish and remembers the live path so a later
627
670
  * change can write a redirect. Unlock is a one-save flag and is cleared here.
@@ -635,7 +678,8 @@ declare const lockSlugOnPublish: CollectionBeforeChangeHook;
635
678
  */
636
679
  declare function slugField({
637
680
  collection,
638
- isReserved
681
+ isReserved,
682
+ folderRoots
639
683
  }: SlugFieldOptions): Field[];
640
684
  //#endregion
641
685
  //#region src/plugins/redirects.d.ts
@@ -863,5 +907,5 @@ declare function roleDescription(role: string, matrix?: readonly RoleRow[]): str
863
907
  */
864
908
  declare function resetRolesMatrix(current: unknown): RoleRow[];
865
909
  //#endregion
866
- export { ADMIN_NAV, ADMIN_NAV_ENTITY_FIELD, ADMIN_NAV_ITEM_ROW_LABEL, ADMIN_NAV_ROW_LABEL, ADMIN_NAV_SLUG, type AdminNavConfig, type AdminNavDoc, type AdminNavGroup, type AdminNavItem, type AdminNavVisibleEntities, BRAND_ASSETS_MIME_TYPES, BRAND_ASSETS_SLUG, CAPABILITIES, CAPABILITY_FEATURES, type Capability, type ColorTokenHit, type ColorUsage, type ColorUsagesList, type ColorUsagesOption, type CreateBrandAssetsOptions, type CreateFeaturesOptions, type CreateNavigationOptions, type CreateRolesOptions, type CreateThemeOptions, DEFAULT_ROLE_GRANTS, DEFAULT_ROLE_MATRIX, DESCRIPTION_LENGTH, DEVELOPER_DESCRIPTION, DOCUMENT_CREATE_NEW, DOCUMENT_TITLE_ACTIONS, DUPLICATE_ROLE_NAME_MESSAGE, DUPLICATE_ROLE_SLUG_MESSAGE, type EditableTheme, FEATURES_MATRIX_FIELD, FEATURES_SLUG, FEATURE_GROUPS, FEATURE_GROUP_LABELS, type FeatureExtra, type FeatureGroupId, type FeatureRow, type FeaturesDoc, INVALID_ROLE_NAME_MESSAGE, LAST_ADMIN_DELETE_MESSAGE, LAST_ADMIN_DEMOTE_MESSAGE, LAST_USERS_TICK_MESSAGE, LOOK_FIELD, type LookFieldMode, type LookFieldOptions, type LookOption, MISSING_PACKAGE_FEATURES_MESSAGE, MISSING_SEED_ROLES_MESSAGE, type MaybeUser, type MediaId, type MediaOptions, NAVIGATION_DB_NAME, NAVIGATION_FEATURE, NAVIGATION_FOOTER_DB_NAME, NAVIGATION_FOOTER_SLUG, NAVIGATION_SLUG, type NavigationBar, type NavigationDoc, type NavigationFooter, type NavigationHeader, PACKAGE_FEATURES, PACKAGE_FEATURE_SLUGS, PAGE_EDITOR_SYSTEM_KEYS, type PackageFeature, type PackageFeatureSlug, type PageEditorSystemKey, type PagesOptions, REDIRECTS_SLUG, ROLES, ROLES_FIELD, ROLES_FIELD_DESCRIPTION, ROLES_GLOBAL_DESCRIPTION, ROLES_GRANTS_FIELD, ROLES_MATRIX_FIELD, ROLES_ROW_LABEL, ROLES_SLUG, ROLE_LABELS, ROLE_NAME_FIELD, ROLE_SLUG_FIELD, type ResolveAdminNavArgs, type ResolvedThemeIdentity, type Role, type RoleExtra, type RoleRow, type RolesDoc, SHARE_IMAGE_SIZE, SLUG_FIELD, SLUG_UNLOCK_WARNING, SYSTEM_COLOR_KEYS, type SeoDoc, type SeoImageDoc, type SeoImageSize, type SeoImageValue, type SeoMeta, type SeoPluginOptions, type SlugFieldOptions, type SystemColorKey, THEME_APPEARANCE_FIELD, THEME_APPEARANCE_SLUG, THEME_COLORS_SLUG, THEME_COLOR_FIELD, THEME_COLOR_SCALE_FIELD, THEME_CONTRAST_REPORT, THEME_DOCUMENT_CONTROLS, THEME_FEATURE_SLUGS, THEME_FONT_FIELD, THEME_GREY_SCALE_FIELD, THEME_IDENTITY_FALLBACK, THEME_IDENTITY_SLUG, THEME_LIBRARY_FIELD, THEME_PAIRING_FIELD, THEME_PREVIEW_BREAKPOINTS, THEME_PUBLISH_FIELD, THEME_SAVE_BUTTON, THEME_SECTION_HEADING, THEME_SLUG, THEME_TYPOGRAPHY_SLUG, type ThemeChild, type ThemeColorDoc, type ThemeDoc, type ThemeIdentityFallback, type ThemeLibraryColorDoc, type ThemeUploadDoc, type UsersOptions, adminNav, adminOnlyApiTab, allowedFeaturesForUser, applyRoleSlugsFromNames, authenticatedOrPublished, canManageBrand, canManageContent, canPublish, canUseFeature, colorTokenField, createAdminNav, createBrandAssets, createFeatures, createMedia, createNavigation, createPages, createRedirects, createRoles, createTheme, createUsers, defaultFeaturesFieldValue, defaultRolesFieldValue, deleteLibraryColor, developerOnlyAccess, documentCreateNew, documentTitle, documentTitleActions, featureCatalogue, featureGroupLabel, findColorTokens, findColorUsages, firstImageIn, getFeaturesMatrix, getNavigation, getRolesMatrix, hasCapability, hasFeature, hasGrant, hasRole, headerCtaEnabled, hideUnlessDeveloper, hideUnlessFeature, isAdmin, isAdminOrSelf, isAuthenticated, isDeveloper, isDeveloperTab, isFeatureGroupId, isFeatureSlug, isLockedFeature, isPackageFeatureSlug, isPrivilegedRole, isRole, isRoleName, isRoleSlug, lockSlugOnPublish, lookField, noIndexField, normalizeSlug, normalizeStoredRoles, pageEditorLooks, pageEditorTokens, parseFeaturesMatrix, parseRolesMatrix, persistThemeChild, publishThemeChild, recordPublishedSlugRedirect, redirectPath, resetRolesMatrix, resolveAdminNav, resolveThemeIdentity, rewriteColorToken, rewriteColorTokens, rewriteColorUsages, roleDescription, roleLabel, roleSelectOptions, sanitizeRoleNameInput, sanitizeSvg, seedFeatures, seedRoleRows, seedRoles, seedTheme, seoPlugin, slugField, slugifyRoleName, stampFeatureCatalogue, storedRoles, themeColorKeys, themeLibraryFromDoc, titleTemplate, truncateAtWord, validateFeaturesMatrix, validateHeaderCta, validateRolesMatrix, writePublishedSlugRedirect };
910
+ export { ADMIN_NAV, ADMIN_NAV_ENTITY_FIELD, ADMIN_NAV_ITEM_ROW_LABEL, ADMIN_NAV_ROW_LABEL, ADMIN_NAV_SLUG, type AdminNavConfig, type AdminNavDoc, type AdminNavGroup, type AdminNavItem, type AdminNavVisibleEntities, BRAND_ASSETS_MIME_TYPES, BRAND_ASSETS_SLUG, CAPABILITIES, CAPABILITY_FEATURES, type Capability, type ColorTokenHit, type ColorUsage, type ColorUsagesList, type ColorUsagesOption, type CreateBrandAssetsOptions, type CreateFeaturesOptions, type CreateNavigationOptions, type CreateRolesOptions, type CreateThemeOptions, DEFAULT_ROLE_GRANTS, DEFAULT_ROLE_MATRIX, DESCRIPTION_LENGTH, DEVELOPER_DESCRIPTION, DOCUMENT_CREATE_NEW, DOCUMENT_TITLE_ACTIONS, DUPLICATE_ROLE_NAME_MESSAGE, DUPLICATE_ROLE_SLUG_MESSAGE, EXISTING_PARENT_MESSAGE, type EditableTheme, FEATURES_MATRIX_FIELD, FEATURES_SLUG, FEATURE_GROUPS, FEATURE_GROUP_LABELS, type FeatureExtra, type FeatureGroupId, type FeatureRow, type FeaturesDoc, INVALID_ROLE_NAME_MESSAGE, LAST_ADMIN_DELETE_MESSAGE, LAST_ADMIN_DEMOTE_MESSAGE, LAST_USERS_TICK_MESSAGE, LAYOUT_DESCRIPTION, LAYOUT_REQUIRED_LABEL, LAYOUT_REQUIRED_MESSAGE, LOOK_FIELD, type LookFieldMode, type LookFieldOptions, type LookOption, MISSING_PACKAGE_FEATURES_MESSAGE, MISSING_SEED_ROLES_MESSAGE, type MaybeUser, type MediaId, type MediaOptions, NAVIGATION_DB_NAME, NAVIGATION_FEATURE, NAVIGATION_FOOTER_DB_NAME, NAVIGATION_FOOTER_SLUG, NAVIGATION_SLUG, NEW_FOLDER_PARENT, type NavigationBar, type NavigationDoc, type NavigationFooter, type NavigationHeader, PACKAGE_FEATURES, PACKAGE_FEATURE_SLUGS, PAGE_EDITOR_SYSTEM_KEYS, PAGE_TITLE_CELL, type PackageFeature, type PackageFeatureSlug, type PageEditorSystemKey, type PagesOptions, REDIRECTS_SLUG, ROLES, ROLES_FIELD, ROLES_FIELD_DESCRIPTION, ROLES_GLOBAL_DESCRIPTION, ROLES_GRANTS_FIELD, ROLES_MATRIX_FIELD, ROLES_ROW_LABEL, ROLES_SLUG, ROLE_LABELS, ROLE_NAME_FIELD, ROLE_SLUG_FIELD, type ResolveAdminNavArgs, type ResolvedThemeIdentity, type Role, type RoleExtra, type RoleRow, type RolesDoc, SHARE_IMAGE_SIZE, SLUG_FIELD, SLUG_UNLOCK_WARNING, SYSTEM_COLOR_KEYS, type SeoDoc, type SeoImageDoc, type SeoImageSize, type SeoImageValue, type SeoMeta, type SeoPluginOptions, type SlugFieldOptions, type SystemColorKey, THEME_APPEARANCE_FIELD, THEME_APPEARANCE_SLUG, THEME_COLORS_SLUG, THEME_COLOR_FIELD, THEME_COLOR_SCALE_FIELD, THEME_CONTRAST_REPORT, THEME_DOCUMENT_CONTROLS, THEME_FEATURE_SLUGS, THEME_FONT_FIELD, THEME_GREY_SCALE_FIELD, THEME_IDENTITY_FALLBACK, THEME_IDENTITY_SLUG, THEME_LIBRARY_FIELD, THEME_PAIRING_FIELD, THEME_PREVIEW_BREAKPOINTS, THEME_PUBLISH_FIELD, THEME_SAVE_BUTTON, THEME_SECTION_HEADING, THEME_SLUG, THEME_TYPOGRAPHY_SLUG, type ThemeChild, type ThemeColorDoc, type ThemeDoc, type ThemeIdentityFallback, type ThemeLibraryColorDoc, type ThemeUploadDoc, type UsersOptions, adminNav, adminOnlyApiTab, allowedFeaturesForUser, applyRoleSlugsFromNames, authenticatedOrPublished, canManageBrand, canManageContent, canPublish, canUseFeature, colorTokenField, composeSlug, createAdminNav, createBrandAssets, createFeatures, createMedia, createNavigation, createPages, createRedirects, createRoles, createTheme, createUsers, defaultFeaturesFieldValue, defaultRolesFieldValue, deleteLibraryColor, developerOnlyAccess, documentCreateNew, documentTitle, documentTitleActions, featureCatalogue, featureGroupLabel, findColorTokens, findColorUsages, firstImageIn, getFeaturesMatrix, getNavigation, getRolesMatrix, hasCapability, hasFeature, hasGrant, hasRole, headerCtaEnabled, hideUnlessDeveloper, hideUnlessFeature, inferredFolders, isAdmin, isAdminOrSelf, isAuthenticated, isDeveloper, isDeveloperTab, isFeatureGroupId, isFeatureSlug, isLockedFeature, isPackageFeatureSlug, isPrivilegedRole, isRole, isRoleName, isRoleSlug, lockSlugOnPublish, lookField, noIndexField, normalizeSlug, normalizeStoredRoles, pageEditorLooks, pageEditorTokens, parentPrefix, parseFeaturesMatrix, parseRolesMatrix, persistThemeChild, publishThemeChild, recordPublishedSlugRedirect, redirectPath, requireLayoutOnPublish, resetRolesMatrix, resolveAdminNav, resolveThemeIdentity, rewriteColorToken, rewriteColorTokens, rewriteColorUsages, roleDescription, roleLabel, roleSelectOptions, sanitizeRoleNameInput, sanitizeSvg, seedFeatures, seedRoleRows, seedRoles, seedTheme, seoPlugin, slugDepth, slugField, slugLeaf, slugifyRoleName, stampFeatureCatalogue, storedRoles, themeColorKeys, themeLibraryFromDoc, titleTemplate, truncateAtWord, validateFeaturesMatrix, validateHeaderCta, validateRolesMatrix, writePublishedSlugRedirect };
867
911
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/seo/plugin.ts","../src/seo/fields.ts","../src/seo/share-image.ts","../src/seo/text.ts","../src/theme/global.ts","../src/brand-assets/collection.ts","../src/brand-assets/sanitize.ts","../src/theme/seed.ts","../src/theme/preview.ts","../src/theme/publish.ts","../src/theme/fields.ts","../src/roles/types.ts","../src/roles/global.ts","../src/roles/seed.ts","../src/roles/fields.ts","../src/features/types.ts","../src/features/global.ts","../src/features/seed.ts","../src/features/fields.ts","../src/roles/access.ts","../src/features/access.ts","../src/features/matrix.ts","../src/collections/pages.ts","../src/collections/users.ts","../src/collections/media.ts","../src/fields/slug.ts","../src/plugins/redirects.ts","../src/admin-nav/global.ts","../src/admin-nav/plugin.ts","../src/admin-nav/types.ts","../src/admin-nav/resolve.ts","../src/admin-nav/fields.ts","../src/navigation/global.ts","../src/navigation/link.ts","../src/plugins/admin-only-api-tab.ts","../src/plugins/document-title-actions.ts","../src/admin/document-controls.ts","../src/roles/matrix.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/seo/plugin.ts","../src/seo/fields.ts","../src/seo/share-image.ts","../src/seo/text.ts","../src/theme/global.ts","../src/brand-assets/collection.ts","../src/brand-assets/sanitize.ts","../src/theme/seed.ts","../src/theme/preview.ts","../src/theme/publish.ts","../src/theme/fields.ts","../src/roles/types.ts","../src/roles/global.ts","../src/roles/seed.ts","../src/roles/fields.ts","../src/features/types.ts","../src/features/global.ts","../src/features/seed.ts","../src/features/fields.ts","../src/roles/access.ts","../src/features/access.ts","../src/features/matrix.ts","../src/collections/pages.ts","../src/collections/users.ts","../src/collections/media.ts","../src/fields/slug.ts","../src/plugins/redirects.ts","../src/admin-nav/global.ts","../src/admin-nav/plugin.ts","../src/admin-nav/types.ts","../src/admin-nav/resolve.ts","../src/admin-nav/fields.ts","../src/navigation/global.ts","../src/navigation/link.ts","../src/plugins/admin-only-api-tab.ts","../src/plugins/document-title-actions.ts","../src/admin/document-controls.ts","../src/roles/matrix.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1755,7 +1755,36 @@ async function seedFeatures(payload, extras = []) {
1755
1755
  //#endregion
1756
1756
  //#region src/fields/slug.ts
1757
1757
  const SLUG_FIELD = "@bison-lab/payload-core/admin#SlugField";
1758
+ const PAGE_TITLE_CELL = "@bison-lab/payload-core/admin#PageTitleCell";
1759
+ /** Sentinel the Parent control writes while the editor is naming a new folder. */
1760
+ const NEW_FOLDER_PARENT = "__new__";
1761
+ const EXISTING_PARENT_MESSAGE = "That folder is already in the list. Pick it from the list.";
1758
1762
  const SLUG_UNLOCK_WARNING = "This page is live. Changing the address will send visitors from the old URL to the new one.";
1763
+ async function allSlugs({ collection, id, req }) {
1764
+ if (typeof req?.payload?.find !== "function") return [];
1765
+ const where = {};
1766
+ if (id !== void 0) where.id = { not_equals: id };
1767
+ const query = {
1768
+ collection,
1769
+ depth: 0,
1770
+ limit: 500,
1771
+ overrideAccess: true,
1772
+ pagination: false,
1773
+ req,
1774
+ where
1775
+ };
1776
+ const [live, drafts] = await Promise.all([req.payload.find(query), req.payload.find({
1777
+ ...query,
1778
+ draft: true
1779
+ })]);
1780
+ return [...live.docs, ...drafts.docs].flatMap((doc) => typeof doc.slug === "string" && doc.slug ? [doc.slug] : []);
1781
+ }
1782
+ async function existingParents(prefix, args) {
1783
+ if (new Set((args.folderRoots ?? []).map(normalizeSlug).filter(Boolean)).has(prefix)) return true;
1784
+ const slugs = await allSlugs(args);
1785
+ if (slugs.includes(prefix)) return true;
1786
+ return inferredFolders(slugs).includes(prefix);
1787
+ }
1759
1788
  function slugifySegment(segment) {
1760
1789
  return segment.normalize("NFKD").replace(/\p{M}/gu, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
1761
1790
  }
@@ -1766,6 +1795,52 @@ function slugifySegment(segment) {
1766
1795
  function normalizeSlug(value) {
1767
1796
  return value.split("/").map(slugifySegment).filter(Boolean).join("/");
1768
1797
  }
1798
+ /** The folder prefix Parent stores. `__new__` resolves through `newFolder`. */
1799
+ function parentPrefix(parent, newFolder) {
1800
+ if (parent === "__new__") return normalizeSlug(newFolder ?? "");
1801
+ return typeof parent === "string" ? normalizeSlug(parent) : "";
1802
+ }
1803
+ /** Last segment of a stored slug — the title leaf once a folder is set. */
1804
+ function slugLeaf(slug) {
1805
+ const parts = normalizeSlug(slug).split("/");
1806
+ return parts[parts.length - 1] ?? "";
1807
+ }
1808
+ /**
1809
+ * Address from a parent prefix and a title (or an existing leaf). Title-follow
1810
+ * uses this so a folder is not wiped when the title changes.
1811
+ */
1812
+ function composeSlug(parent, title, newFolder) {
1813
+ const prefix = parentPrefix(parent, newFolder);
1814
+ const leaf = slugifySegment(title);
1815
+ return prefix ? `${prefix}/${leaf}` : leaf;
1816
+ }
1817
+ /** Prefixes that exist only because a child slug lives under them. */
1818
+ function inferredFolders(slugs) {
1819
+ const folders = /* @__PURE__ */ new Set();
1820
+ for (const slug of slugs) {
1821
+ const parts = normalizeSlug(slug).split("/");
1822
+ for (let i = 1; i < parts.length; i += 1) folders.add(parts.slice(0, i).join("/"));
1823
+ }
1824
+ return [...folders].sort();
1825
+ }
1826
+ /** Slash count after the first segment — how far to indent a list row. */
1827
+ function slugDepth(slug) {
1828
+ const normalized = normalizeSlug(slug);
1829
+ if (!normalized) return 0;
1830
+ return normalized.split("/").length - 1;
1831
+ }
1832
+ function resolvePrefix(...sources) {
1833
+ let parent;
1834
+ let newFolder;
1835
+ for (const source of sources) {
1836
+ if (parent === void 0 && typeof source?.parent === "string") parent = source.parent;
1837
+ if (newFolder === void 0 && typeof source?.newFolder === "string") newFolder = source.newFolder;
1838
+ }
1839
+ return {
1840
+ parent,
1841
+ newFolder
1842
+ };
1843
+ }
1769
1844
  function isLockedDoc(doc) {
1770
1845
  return Boolean(doc?.slugLocked || doc?.publishedSlug);
1771
1846
  }
@@ -1837,7 +1912,7 @@ function hiddenCheckbox(name, label) {
1837
1912
  * `validate` is the message under the field; `beforeChange` is the enforcement
1838
1913
  * on a draft save, where Payload skips field validation.
1839
1914
  */
1840
- function slugField({ collection, isReserved }) {
1915
+ function slugField({ collection, isReserved, folderRoots = [] }) {
1841
1916
  const validate = async (value, options) => {
1842
1917
  try {
1843
1918
  const builtIn = await validations.text(value, options);
@@ -1850,44 +1925,79 @@ function slugField({ collection, isReserved }) {
1850
1925
  req: options.req
1851
1926
  }) ?? true;
1852
1927
  };
1928
+ const slug = {
1929
+ name: "slug",
1930
+ type: "text",
1931
+ required: true,
1932
+ unique: true,
1933
+ access: { update: slugUpdateAccess(collection) },
1934
+ admin: {
1935
+ description: "Path under the site root, no leading slash: \"about-us\" or \"patients/stories\".",
1936
+ components: { Field: SLUG_FIELD },
1937
+ custom: { folderRoots }
1938
+ },
1939
+ hooks: {
1940
+ beforeValidate: [({ data, originalDoc, siblingData, value }) => {
1941
+ const title = typeof data?.title === "string" ? data.title : "";
1942
+ const { parent, newFolder } = resolvePrefix(siblingData, data, originalDoc);
1943
+ if (!isLockedDoc(originalDoc) && !isUnlocking(data) && !isUnlocking(siblingData) && title) return composeSlug(parent, title, newFolder);
1944
+ if ((isUnlocking(data) || isUnlocking(siblingData)) && (parent !== void 0 || newFolder)) return composeSlug(parent, typeof value === "string" && value ? slugLeaf(value) : title ? slugifySegment(title) : "", newFolder);
1945
+ return typeof value === "string" ? normalizeSlug(value) : value;
1946
+ }],
1947
+ beforeChange: [async ({ data, originalDoc, req, value }) => {
1948
+ if (typeof value !== "string") return value;
1949
+ const problem = await slugProblem(value, {
1950
+ collection,
1951
+ id: originalDoc?.id ?? data?.id,
1952
+ isReserved,
1953
+ req
1954
+ });
1955
+ if (problem) throw new ValidationError({
1956
+ collection,
1957
+ errors: [{
1958
+ message: problem,
1959
+ path: "slug"
1960
+ }],
1961
+ req
1962
+ }, req?.t);
1963
+ return value;
1964
+ }]
1965
+ },
1966
+ validate
1967
+ };
1853
1968
  return [
1854
1969
  {
1855
- name: "slug",
1970
+ name: "parent",
1856
1971
  type: "text",
1857
- required: true,
1858
- unique: true,
1972
+ defaultValue: "",
1859
1973
  access: { update: slugUpdateAccess(collection) },
1860
- admin: {
1861
- description: "Path under the site root, no leading slash: \"about-us\" or \"patients/stories\".",
1862
- components: { Field: SLUG_FIELD }
1863
- },
1864
- hooks: {
1865
- beforeValidate: [({ data, originalDoc, siblingData, value }) => {
1866
- const title = typeof data?.title === "string" ? data.title : "";
1867
- if (!isLockedDoc(originalDoc) && !isUnlocking(data) && !isUnlocking(siblingData) && title) return normalizeSlug(title);
1868
- return typeof value === "string" ? normalizeSlug(value) : value;
1869
- }],
1870
- beforeChange: [async ({ data, originalDoc, req, value }) => {
1871
- if (typeof value !== "string") return value;
1872
- const problem = await slugProblem(value, {
1873
- collection,
1874
- id: originalDoc?.id ?? data?.id,
1875
- isReserved,
1876
- req
1877
- });
1878
- if (problem) throw new ValidationError({
1879
- collection,
1880
- errors: [{
1881
- message: problem,
1882
- path: "slug"
1883
- }],
1884
- req
1885
- }, req?.t);
1886
- return value;
1887
- }]
1888
- },
1889
- validate
1974
+ admin: { hidden: true },
1975
+ hooks: { beforeValidate: [({ data, originalDoc, siblingData, value }) => {
1976
+ const { newFolder } = resolvePrefix(siblingData, data, originalDoc);
1977
+ if (value === "__new__") return parentPrefix(NEW_FOLDER_PARENT, newFolder);
1978
+ return typeof value === "string" ? normalizeSlug(value) : "";
1979
+ }] },
1980
+ validate: async (value, options) => {
1981
+ const { newFolder } = resolvePrefix(options.siblingData, options.data);
1982
+ if (value !== "__new__" && !newFolder) return true;
1983
+ const prefix = parentPrefix(NEW_FOLDER_PARENT, newFolder);
1984
+ if (!prefix) return true;
1985
+ return await existingParents(prefix, {
1986
+ collection,
1987
+ folderRoots,
1988
+ id: options.id,
1989
+ isReserved,
1990
+ req: options.req
1991
+ }) ? EXISTING_PARENT_MESSAGE : true;
1992
+ }
1993
+ },
1994
+ {
1995
+ name: "newFolder",
1996
+ type: "text",
1997
+ admin: { hidden: true },
1998
+ access: { update: slugUpdateAccess(collection) }
1890
1999
  },
2000
+ slug,
1891
2001
  hiddenCheckbox("slugLocked", "Slug locked"),
1892
2002
  hiddenCheckbox("slugUnlock", "Unlock slug"),
1893
2003
  {
@@ -1900,6 +2010,36 @@ function slugField({ collection, isReserved }) {
1900
2010
  }
1901
2011
  //#endregion
1902
2012
  //#region src/collections/pages.ts
2013
+ /** Standing copy on the Layout field — same job as the hero description. */
2014
+ const LAYOUT_DESCRIPTION = "Every page needs at least one section below the hero. A page cannot be published without one.";
2015
+ /** Field error when Publish is clicked with an empty body. */
2016
+ const LAYOUT_REQUIRED_MESSAGE = "Add at least one section. A page cannot be published without one.";
2017
+ /**
2018
+ * Toast label for that error. Payload's envelope is always
2019
+ * "The following field is invalid: {label}", so the label has to name the fix.
2020
+ */
2021
+ const LAYOUT_REQUIRED_LABEL = "Layout — add a section";
2022
+ function layoutRows(data, originalDoc) {
2023
+ if (data && "layout" in data && data.layout !== void 0) return Array.isArray(data.layout) ? data.layout : [];
2024
+ return Array.isArray(originalDoc?.layout) ? originalDoc.layout : [];
2025
+ }
2026
+ /**
2027
+ * Drafts may be empty. Publish with no section is refused here so the toast
2028
+ * names the fix — Payload's built-in minRows toast only says "Content → Layout".
2029
+ */
2030
+ const requireLayoutOnPublish = ({ collection, data, originalDoc, req }) => {
2031
+ if (!data || data._status !== "published") return data;
2032
+ if (layoutRows(data, originalDoc).length >= 1) return data;
2033
+ throw new ValidationError({
2034
+ collection: typeof collection?.slug === "string" ? collection.slug : "pages",
2035
+ errors: [{
2036
+ label: LAYOUT_REQUIRED_LABEL,
2037
+ message: LAYOUT_REQUIRED_MESSAGE,
2038
+ path: "layout"
2039
+ }],
2040
+ req
2041
+ }, req?.t);
2042
+ };
1903
2043
  /**
1904
2044
  * Content to create or save a draft; Publish to publish or edit a live
1905
2045
  * page. Without Publish, update is constrained to `_status: draft`.
@@ -1914,11 +2054,12 @@ const pagesUpdate = async (args) => {
1914
2054
  * The CMS owns copy and the order of sections; what a section looks like is
1915
2055
  * code-owned, which is why the blocks are an argument.
1916
2056
  */
1917
- function createPages({ heroBlocks, isReservedSlug, layoutBlocks, previewPath, previewButton }) {
2057
+ function createPages({ folderRoots, heroBlocks, isReservedSlug, layoutBlocks, previewPath, previewButton }) {
1918
2058
  const [defaultHero] = heroBlocks;
1919
2059
  if (!defaultHero) throw new Error("createPages needs at least one hero block");
1920
2060
  return {
1921
2061
  slug: "pages",
2062
+ defaultSort: "slug",
1922
2063
  admin: {
1923
2064
  useAsTitle: "title",
1924
2065
  group: "Content",
@@ -1943,15 +2084,20 @@ function createPages({ heroBlocks, isReservedSlug, layoutBlocks, previewPath, pr
1943
2084
  drafts: { autosave: { interval: 375 } },
1944
2085
  maxPerDoc: 50
1945
2086
  },
1946
- hooks: { beforeChange: [lockSlugOnPublish] },
2087
+ hooks: {
2088
+ beforeValidate: [requireLayoutOnPublish],
2089
+ beforeChange: [lockSlugOnPublish]
2090
+ },
1947
2091
  fields: [
1948
2092
  {
1949
2093
  name: "title",
1950
2094
  type: "text",
1951
- required: true
2095
+ required: true,
2096
+ admin: { components: { Cell: PAGE_TITLE_CELL } }
1952
2097
  },
1953
2098
  ...slugField({
1954
2099
  collection: "pages",
2100
+ folderRoots,
1955
2101
  isReserved: isReservedSlug
1956
2102
  }),
1957
2103
  {
@@ -1973,7 +2119,8 @@ function createPages({ heroBlocks, isReservedSlug, layoutBlocks, previewPath, pr
1973
2119
  labels: {
1974
2120
  singular: "Section",
1975
2121
  plural: "Sections"
1976
- }
2122
+ },
2123
+ admin: { description: LAYOUT_DESCRIPTION }
1977
2124
  }
1978
2125
  ]
1979
2126
  };
@@ -2866,6 +3013,6 @@ const documentTitleActions = definePlugin({
2866
3013
  plugin: ({ config }) => withTitleActions(config)
2867
3014
  });
2868
3015
  //#endregion
2869
- export { ADMIN_NAV, ADMIN_NAV_ENTITY_FIELD, ADMIN_NAV_ITEM_ROW_LABEL, ADMIN_NAV_ROW_LABEL, ADMIN_NAV_SLUG, BRAND_ASSETS_MIME_TYPES, BRAND_ASSETS_SLUG, CAPABILITIES, CAPABILITY_FEATURES, DEFAULT_ROLE_GRANTS, DEFAULT_ROLE_MATRIX, DESCRIPTION_LENGTH, DEVELOPER_DESCRIPTION, DOCUMENT_CREATE_NEW, DOCUMENT_TITLE_ACTIONS, DUPLICATE_ROLE_NAME_MESSAGE, DUPLICATE_ROLE_SLUG_MESSAGE, FEATURES_MATRIX_FIELD, FEATURES_SLUG, FEATURE_GROUPS, FEATURE_GROUP_LABELS, INVALID_ROLE_NAME_MESSAGE, LAST_ADMIN_DELETE_MESSAGE, LAST_ADMIN_DEMOTE_MESSAGE, LAST_USERS_TICK_MESSAGE, LOOK_FIELD, MISSING_PACKAGE_FEATURES_MESSAGE, MISSING_SEED_ROLES_MESSAGE, NAVIGATION_DB_NAME, NAVIGATION_FEATURE, NAVIGATION_FOOTER_DB_NAME, NAVIGATION_FOOTER_SLUG, NAVIGATION_SLUG, PACKAGE_FEATURES, PACKAGE_FEATURE_SLUGS, PAGE_EDITOR_SYSTEM_KEYS, REDIRECTS_SLUG, ROLES, ROLES_FIELD, ROLES_FIELD_DESCRIPTION, ROLES_GLOBAL_DESCRIPTION, ROLES_GRANTS_FIELD, ROLES_MATRIX_FIELD, ROLES_ROW_LABEL, ROLES_SLUG, ROLE_LABELS, ROLE_NAME_FIELD, ROLE_SLUG_FIELD, SHARE_IMAGE_SIZE, SLUG_FIELD, SLUG_UNLOCK_WARNING, SYSTEM_COLOR_KEYS, THEME_APPEARANCE_FIELD, THEME_APPEARANCE_SLUG, THEME_COLORS_SLUG, THEME_COLOR_FIELD, THEME_COLOR_SCALE_FIELD, THEME_CONTRAST_REPORT, THEME_DOCUMENT_CONTROLS, THEME_FEATURE_SLUGS, THEME_FONT_FIELD, THEME_GREY_SCALE_FIELD, THEME_IDENTITY_FALLBACK, THEME_IDENTITY_SLUG, THEME_LIBRARY_FIELD, THEME_PAIRING_FIELD, THEME_PREVIEW_BREAKPOINTS, THEME_PUBLISH_FIELD, THEME_SAVE_BUTTON, THEME_SECTION_HEADING, THEME_SLUG, THEME_TYPOGRAPHY_SLUG, adminNav, adminOnlyApiTab, allowedFeaturesForUser, applyRoleSlugsFromNames, authenticatedOrPublished, canManageBrand, canManageContent, canPublish, canUseFeature, colorTokenField, createAdminNav, createBrandAssets, createFeatures, createMedia, createNavigation, createPages, createRedirects, createRoles, createTheme, createUsers, defaultFeaturesFieldValue, defaultRolesFieldValue, deleteLibraryColor, developerOnlyAccess, documentCreateNew, documentTitle, documentTitleActions, featureCatalogue, featureGroupLabel, findColorTokens, findColorUsages, firstImageIn, getFeaturesMatrix, getNavigation, getRolesMatrix, hasCapability, hasFeature, hasGrant, hasRole, headerCtaEnabled, hideUnlessDeveloper, hideUnlessFeature, isAdmin, isAdminOrSelf, isAuthenticated, isDeveloper, isDeveloperTab, isFeatureGroupId, isFeatureSlug, isLockedFeature, isPackageFeatureSlug, isPrivilegedRole, isRole, isRoleName, isRoleSlug, lockSlugOnPublish, lookField, noIndexField, normalizeSlug, normalizeStoredRoles, pageEditorLooks, pageEditorTokens, parseFeaturesMatrix, parseRolesMatrix, persistThemeChild, publishThemeChild, recordPublishedSlugRedirect, redirectPath, resetRolesMatrix, resolveAdminNav, resolveThemeIdentity, rewriteColorToken, rewriteColorTokens, rewriteColorUsages, roleDescription, roleLabel, roleSelectOptions, sanitizeRoleNameInput, sanitizeSvg, seedFeatures, seedRoleRows, seedRoles, seedTheme, seoPlugin, slugField, slugifyRoleName, stampFeatureCatalogue, storedRoles, themeColorKeys, themeLibraryFromDoc, titleTemplate, truncateAtWord, validateFeaturesMatrix, validateHeaderCta, validateRolesMatrix, writePublishedSlugRedirect };
3016
+ export { ADMIN_NAV, ADMIN_NAV_ENTITY_FIELD, ADMIN_NAV_ITEM_ROW_LABEL, ADMIN_NAV_ROW_LABEL, ADMIN_NAV_SLUG, BRAND_ASSETS_MIME_TYPES, BRAND_ASSETS_SLUG, CAPABILITIES, CAPABILITY_FEATURES, DEFAULT_ROLE_GRANTS, DEFAULT_ROLE_MATRIX, DESCRIPTION_LENGTH, DEVELOPER_DESCRIPTION, DOCUMENT_CREATE_NEW, DOCUMENT_TITLE_ACTIONS, DUPLICATE_ROLE_NAME_MESSAGE, DUPLICATE_ROLE_SLUG_MESSAGE, EXISTING_PARENT_MESSAGE, FEATURES_MATRIX_FIELD, FEATURES_SLUG, FEATURE_GROUPS, FEATURE_GROUP_LABELS, INVALID_ROLE_NAME_MESSAGE, LAST_ADMIN_DELETE_MESSAGE, LAST_ADMIN_DEMOTE_MESSAGE, LAST_USERS_TICK_MESSAGE, LAYOUT_DESCRIPTION, LAYOUT_REQUIRED_LABEL, LAYOUT_REQUIRED_MESSAGE, LOOK_FIELD, MISSING_PACKAGE_FEATURES_MESSAGE, MISSING_SEED_ROLES_MESSAGE, NAVIGATION_DB_NAME, NAVIGATION_FEATURE, NAVIGATION_FOOTER_DB_NAME, NAVIGATION_FOOTER_SLUG, NAVIGATION_SLUG, NEW_FOLDER_PARENT, PACKAGE_FEATURES, PACKAGE_FEATURE_SLUGS, PAGE_EDITOR_SYSTEM_KEYS, PAGE_TITLE_CELL, REDIRECTS_SLUG, ROLES, ROLES_FIELD, ROLES_FIELD_DESCRIPTION, ROLES_GLOBAL_DESCRIPTION, ROLES_GRANTS_FIELD, ROLES_MATRIX_FIELD, ROLES_ROW_LABEL, ROLES_SLUG, ROLE_LABELS, ROLE_NAME_FIELD, ROLE_SLUG_FIELD, SHARE_IMAGE_SIZE, SLUG_FIELD, SLUG_UNLOCK_WARNING, SYSTEM_COLOR_KEYS, THEME_APPEARANCE_FIELD, THEME_APPEARANCE_SLUG, THEME_COLORS_SLUG, THEME_COLOR_FIELD, THEME_COLOR_SCALE_FIELD, THEME_CONTRAST_REPORT, THEME_DOCUMENT_CONTROLS, THEME_FEATURE_SLUGS, THEME_FONT_FIELD, THEME_GREY_SCALE_FIELD, THEME_IDENTITY_FALLBACK, THEME_IDENTITY_SLUG, THEME_LIBRARY_FIELD, THEME_PAIRING_FIELD, THEME_PREVIEW_BREAKPOINTS, THEME_PUBLISH_FIELD, THEME_SAVE_BUTTON, THEME_SECTION_HEADING, THEME_SLUG, THEME_TYPOGRAPHY_SLUG, adminNav, adminOnlyApiTab, allowedFeaturesForUser, applyRoleSlugsFromNames, authenticatedOrPublished, canManageBrand, canManageContent, canPublish, canUseFeature, colorTokenField, composeSlug, createAdminNav, createBrandAssets, createFeatures, createMedia, createNavigation, createPages, createRedirects, createRoles, createTheme, createUsers, defaultFeaturesFieldValue, defaultRolesFieldValue, deleteLibraryColor, developerOnlyAccess, documentCreateNew, documentTitle, documentTitleActions, featureCatalogue, featureGroupLabel, findColorTokens, findColorUsages, firstImageIn, getFeaturesMatrix, getNavigation, getRolesMatrix, hasCapability, hasFeature, hasGrant, hasRole, headerCtaEnabled, hideUnlessDeveloper, hideUnlessFeature, inferredFolders, isAdmin, isAdminOrSelf, isAuthenticated, isDeveloper, isDeveloperTab, isFeatureGroupId, isFeatureSlug, isLockedFeature, isPackageFeatureSlug, isPrivilegedRole, isRole, isRoleName, isRoleSlug, lockSlugOnPublish, lookField, noIndexField, normalizeSlug, normalizeStoredRoles, pageEditorLooks, pageEditorTokens, parentPrefix, parseFeaturesMatrix, parseRolesMatrix, persistThemeChild, publishThemeChild, recordPublishedSlugRedirect, redirectPath, requireLayoutOnPublish, resetRolesMatrix, resolveAdminNav, resolveThemeIdentity, rewriteColorToken, rewriteColorTokens, rewriteColorUsages, roleDescription, roleLabel, roleSelectOptions, sanitizeRoleNameInput, sanitizeSvg, seedFeatures, seedRoleRows, seedRoles, seedTheme, seoPlugin, slugDepth, slugField, slugLeaf, slugifyRoleName, stampFeatureCatalogue, storedRoles, themeColorKeys, themeLibraryFromDoc, titleTemplate, truncateAtWord, validateFeaturesMatrix, validateHeaderCta, validateRolesMatrix, writePublishedSlugRedirect };
2870
3017
 
2871
3018
  //# sourceMappingURL=index.mjs.map