@orion-studios/payload-studio 0.6.0-beta.10 → 0.6.0-beta.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/admin/client.js +2073 -610
  2. package/dist/admin/client.mjs +2048 -587
  3. package/dist/admin/index.d.mts +2 -2
  4. package/dist/admin/index.d.ts +2 -2
  5. package/dist/admin/index.js +129 -16
  6. package/dist/admin/index.mjs +1 -1
  7. package/dist/admin-app/client.js +2 -4
  8. package/dist/admin-app/client.mjs +1 -1
  9. package/dist/admin-app/index.d.mts +2 -2
  10. package/dist/admin-app/index.d.ts +2 -2
  11. package/dist/admin-app/styles.css +316 -3
  12. package/dist/admin.css +98 -2
  13. package/dist/builder-v2/client.d.mts +18 -0
  14. package/dist/builder-v2/client.d.ts +18 -0
  15. package/dist/builder-v2/client.js +3298 -0
  16. package/dist/builder-v2/client.mjs +3173 -0
  17. package/dist/builder-v2/index.d.mts +242 -0
  18. package/dist/builder-v2/index.d.ts +242 -0
  19. package/dist/builder-v2/index.js +805 -0
  20. package/dist/builder-v2/index.mjs +755 -0
  21. package/dist/builder-v2/styles.css +2365 -0
  22. package/dist/{chunk-KPIX7OSV.mjs → chunk-3ZKXHSG5.mjs} +2 -4
  23. package/dist/{chunk-PF3EBZXF.mjs → chunk-7ZMXZRBP.mjs} +39 -3
  24. package/dist/{chunk-WLOPFFN2.mjs → chunk-JC3UV74N.mjs} +129 -16
  25. package/dist/{chunk-XKUTZ7IU.mjs → chunk-NGLIA2OE.mjs} +53 -2
  26. package/dist/{chunk-OTHERBGX.mjs → chunk-ZADL33R6.mjs} +1 -1
  27. package/dist/{index-CkT_eyhK.d.ts → index-BV0vEGl6.d.ts} +3 -2
  28. package/dist/{index-Cv-6qnrw.d.mts → index-D5zrOdyv.d.mts} +3 -1
  29. package/dist/{index-52HdVLQq.d.ts → index-DAdN56fM.d.ts} +1 -1
  30. package/dist/{index-Bm2SaC3r.d.mts → index-DLfPOqYA.d.mts} +3 -2
  31. package/dist/{index-Crx_MtPw.d.ts → index-Dv-Alx4h.d.ts} +3 -1
  32. package/dist/{index-DEQC3Dwj.d.mts → index-G_uTNffQ.d.mts} +1 -1
  33. package/dist/index.d.mts +4 -4
  34. package/dist/index.d.ts +4 -4
  35. package/dist/index.js +220 -20
  36. package/dist/index.mjs +4 -4
  37. package/dist/nextjs/index.js +39 -3
  38. package/dist/nextjs/index.mjs +2 -2
  39. package/dist/{sitePreviewTypes-BkHCWxNW.d.mts → sitePreviewTypes-BrJwGzJj.d.mts} +1 -1
  40. package/dist/{sitePreviewTypes-BkHCWxNW.d.ts → sitePreviewTypes-BrJwGzJj.d.ts} +1 -1
  41. package/dist/studio-pages/builder.css +66 -5
  42. package/dist/studio-pages/client.js +618 -73
  43. package/dist/studio-pages/client.mjs +641 -96
  44. package/dist/studio-pages/index.d.mts +1 -1
  45. package/dist/studio-pages/index.d.ts +1 -1
  46. package/dist/studio-pages/index.js +91 -4
  47. package/dist/studio-pages/index.mjs +2 -2
  48. package/package.json +23 -3
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("//");
@@ -241,6 +241,7 @@ function configureAdmin(config) {
241
241
  brandPrimary = "#3b82f6",
242
242
  brandSecondary = "#8b5cf6",
243
243
  defaultTheme = "brand-light",
244
+ logoOnDarkUrl,
244
245
  logoUrl,
245
246
  allowThemePreference = false,
246
247
  userSessionDurationSeconds = 60 * 60 * 24
@@ -348,6 +349,49 @@ function configureAdmin(config) {
348
349
  }
349
350
  };
350
351
  };
352
+ const attachStudioEditRedirectToCollection = (collection, options) => {
353
+ if (!studioEnabled) {
354
+ return collection;
355
+ }
356
+ const collectionWithBreadcrumb = attachStudioBackBreadcrumbToCollection(collection);
357
+ const existingViews = collectionWithBreadcrumb.admin?.components?.views;
358
+ const existingEditViews = existingViews?.edit;
359
+ const hasCustomEditView = Boolean(
360
+ existingEditViews?.root || existingEditViews?.default && typeof existingEditViews.default === "object" && existingEditViews.default.Component
361
+ );
362
+ if (hasCustomEditView) {
363
+ return collectionWithBreadcrumb;
364
+ }
365
+ return {
366
+ ...collectionWithBreadcrumb,
367
+ admin: {
368
+ ...collectionWithBreadcrumb.admin,
369
+ components: {
370
+ ...collectionWithBreadcrumb.admin?.components,
371
+ views: {
372
+ ...existingViews,
373
+ edit: {
374
+ ...existingEditViews,
375
+ default: {
376
+ ...typeof existingEditViews?.default === "object" ? existingEditViews.default : {},
377
+ Component: {
378
+ exportName: "StudioDocumentRedirect",
379
+ path: clientPath,
380
+ clientProps: {
381
+ description: options.description,
382
+ ...options.emptyHref ? { emptyHref: options.emptyHref } : {},
383
+ ...options.emptyLabel ? { emptyLabel: options.emptyLabel } : {},
384
+ pathBase: options.pathBase,
385
+ title: options.title
386
+ }
387
+ }
388
+ }
389
+ }
390
+ }
391
+ }
392
+ }
393
+ };
394
+ };
351
395
  return {
352
396
  admin: {
353
397
  css: cssPath,
@@ -365,6 +409,7 @@ function configureAdmin(config) {
365
409
  path: clientPath,
366
410
  clientProps: {
367
411
  brandName,
412
+ logoOnDarkUrl,
368
413
  logoUrl
369
414
  }
370
415
  },
@@ -373,6 +418,7 @@ function configureAdmin(config) {
373
418
  path: clientPath,
374
419
  clientProps: {
375
420
  brandName,
421
+ logoOnDarkUrl,
376
422
  logoUrl
377
423
  }
378
424
  }
@@ -387,6 +433,7 @@ function configureAdmin(config) {
387
433
  },
388
434
  ...studioEnabled ? {
389
435
  studioGlobals: {
436
+ exact: true,
390
437
  path: globalsBasePath,
391
438
  Component: {
392
439
  exportName: "AdminStudioGlobalsView",
@@ -398,10 +445,11 @@ function configureAdmin(config) {
398
445
  }
399
446
  }
400
447
  },
401
- studioPages: {
402
- path: pagesBasePath,
448
+ studioPageNew: {
449
+ exact: true,
450
+ path: `${pagesBasePath}/new`,
403
451
  Component: {
404
- exportName: "AdminStudioPagesListView",
452
+ exportName: "AdminStudioNewPageView",
405
453
  path: clientPath,
406
454
  clientProps: {
407
455
  ...studioNavClientProps,
@@ -410,6 +458,7 @@ function configureAdmin(config) {
410
458
  }
411
459
  },
412
460
  studioPageEditor: {
461
+ exact: true,
413
462
  path: `${pagesBasePath}/:id`,
414
463
  Component: {
415
464
  exportName: "AdminStudioPageEditView",
@@ -420,10 +469,11 @@ function configureAdmin(config) {
420
469
  }
421
470
  }
422
471
  },
423
- studioPageNew: {
424
- path: `${pagesBasePath}/new`,
472
+ studioPages: {
473
+ exact: true,
474
+ path: pagesBasePath,
425
475
  Component: {
426
- exportName: "AdminStudioNewPageView",
476
+ exportName: "AdminStudioPagesListView",
427
477
  path: clientPath,
428
478
  clientProps: {
429
479
  ...studioNavClientProps,
@@ -432,6 +482,7 @@ function configureAdmin(config) {
432
482
  }
433
483
  },
434
484
  studioContactForm: {
485
+ exact: true,
435
486
  path: contactFormStudioPath,
436
487
  Component: {
437
488
  exportName: "AdminStudioContactFormView",
@@ -444,7 +495,47 @@ function configureAdmin(config) {
444
495
  }
445
496
  },
446
497
  ...formsEnabled ? {
498
+ studioFormSubmission: {
499
+ exact: true,
500
+ path: `${formsBasePath}/submissions/:id`,
501
+ Component: {
502
+ exportName: "AdminStudioFormSubmissionView",
503
+ path: clientPath,
504
+ clientProps: {
505
+ ...studioNavClientProps,
506
+ formsCollectionSlug,
507
+ formSubmissionsCollectionSlug,
508
+ formUploadsCollectionSlug
509
+ }
510
+ }
511
+ },
512
+ studioFormUpload: {
513
+ exact: true,
514
+ path: `${formsBasePath}/uploads/:id`,
515
+ Component: {
516
+ exportName: "AdminStudioFormUploadView",
517
+ path: clientPath,
518
+ clientProps: {
519
+ ...studioNavClientProps,
520
+ formUploadsCollectionSlug
521
+ }
522
+ }
523
+ },
524
+ studioFormDetail: {
525
+ exact: true,
526
+ path: `${formsBasePath}/:id`,
527
+ Component: {
528
+ exportName: "AdminStudioFormDetailView",
529
+ path: clientPath,
530
+ clientProps: {
531
+ ...studioNavClientProps,
532
+ formsCollectionSlug,
533
+ formSubmissionsCollectionSlug
534
+ }
535
+ }
536
+ },
447
537
  studioForms: {
538
+ exact: true,
448
539
  path: formsBasePath,
449
540
  Component: {
450
541
  exportName: "AdminStudioFormsView",
@@ -458,10 +549,11 @@ function configureAdmin(config) {
458
549
  }
459
550
  }
460
551
  } : {},
461
- studioMedia: {
462
- path: mediaBasePath,
552
+ studioMediaItem: {
553
+ exact: true,
554
+ path: `${mediaBasePath}/:id`,
463
555
  Component: {
464
- exportName: "AdminStudioMediaView",
556
+ exportName: "AdminStudioMediaItemView",
465
557
  path: clientPath,
466
558
  clientProps: {
467
559
  ...studioNavClientProps,
@@ -469,10 +561,11 @@ function configureAdmin(config) {
469
561
  }
470
562
  }
471
563
  },
472
- studioMediaItem: {
473
- path: `${mediaBasePath}/:id`,
564
+ studioMedia: {
565
+ exact: true,
566
+ path: mediaBasePath,
474
567
  Component: {
475
- exportName: "AdminStudioMediaItemView",
568
+ exportName: "AdminStudioMediaView",
476
569
  path: clientPath,
477
570
  clientProps: {
478
571
  ...studioNavClientProps,
@@ -481,6 +574,7 @@ function configureAdmin(config) {
481
574
  }
482
575
  },
483
576
  studioTools: {
577
+ exact: true,
484
578
  path: toolsBasePath,
485
579
  Component: {
486
580
  exportName: "AdminStudioToolsView",
@@ -525,6 +619,7 @@ function configureAdmin(config) {
525
619
  path: clientPath,
526
620
  clientProps: {
527
621
  brandName,
622
+ logoOnDarkUrl,
528
623
  logoUrl
529
624
  }
530
625
  }
@@ -633,13 +728,31 @@ function configureAdmin(config) {
633
728
  return attachStudioBackBreadcrumbToCollection(mediaCollection);
634
729
  },
635
730
  wrapFormsCollection(formsCollection) {
636
- return attachStudioBackBreadcrumbToCollection(formsCollection);
731
+ return attachStudioEditRedirectToCollection(formsCollection, {
732
+ description: "Redirecting to the Studio form workspace.",
733
+ emptyHref: formsBasePath,
734
+ emptyLabel: "Open Forms",
735
+ pathBase: formsBasePath,
736
+ title: "Opening Form..."
737
+ });
637
738
  },
638
739
  wrapFormSubmissionsCollection(formSubmissionsCollection) {
639
- return attachStudioBackBreadcrumbToCollection(formSubmissionsCollection);
740
+ return attachStudioEditRedirectToCollection(formSubmissionsCollection, {
741
+ description: "Redirecting to the Studio submission workspace.",
742
+ emptyHref: formsBasePath,
743
+ emptyLabel: "Open Forms",
744
+ pathBase: `${formsBasePath}/submissions`,
745
+ title: "Opening Submission..."
746
+ });
640
747
  },
641
748
  wrapFormUploadsCollection(formUploadsCollection) {
642
- return attachStudioBackBreadcrumbToCollection(formUploadsCollection);
749
+ return attachStudioEditRedirectToCollection(formUploadsCollection, {
750
+ description: "Redirecting to the Studio upload workspace.",
751
+ emptyHref: formsBasePath,
752
+ emptyLabel: "Open Forms",
753
+ pathBase: `${formsBasePath}/uploads`,
754
+ title: "Opening Upload..."
755
+ });
643
756
  },
644
757
  wrapGlobals(globals2) {
645
758
  const labelMap = {
@@ -3580,7 +3693,9 @@ var defaultBuilderBlockSettingsV2 = {
3580
3693
  },
3581
3694
  typography: {
3582
3695
  bodyAlign: "left",
3696
+ bodySizePt: null,
3583
3697
  headingAlign: "left",
3698
+ headingSizePt: null,
3584
3699
  letterSpacingPreset: "normal",
3585
3700
  lineHeightPreset: "normal",
3586
3701
  maxTextWidth: "auto"
@@ -3609,7 +3724,9 @@ var defaultBuilderItemSettingsV2 = {
3609
3724
  },
3610
3725
  typography: {
3611
3726
  bodyAlign: "left",
3727
+ bodySizePt: null,
3612
3728
  headingAlign: "left",
3729
+ headingSizePt: null,
3613
3730
  letterSpacingPreset: "normal",
3614
3731
  lineHeightPreset: "normal",
3615
3732
  maxTextWidth: "auto"
@@ -3639,6 +3756,7 @@ var defaultBuilderThemeTokens = {
3639
3756
 
3640
3757
  // src/studio-pages/builder/adapters/settingsV2.ts
3641
3758
  var isRecord3 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
3759
+ var isTextAlign = (value) => value === "left" || value === "center" || value === "right" || value === "justify";
3642
3760
  var parsePercent = (value) => {
3643
3761
  if (typeof value === "number" && Number.isFinite(value)) {
3644
3762
  return Math.max(0, Math.min(100, value));
@@ -3663,6 +3781,18 @@ var parsePixel = (value) => {
3663
3781
  }
3664
3782
  return null;
3665
3783
  };
3784
+ var parsePoint = (value) => {
3785
+ if (typeof value === "number" && Number.isFinite(value)) {
3786
+ return Math.max(6, Math.min(120, Math.round(value)));
3787
+ }
3788
+ if (typeof value === "string" && value.trim().length > 0) {
3789
+ const parsed = Number(value);
3790
+ if (Number.isFinite(parsed)) {
3791
+ return Math.max(6, Math.min(120, Math.round(parsed)));
3792
+ }
3793
+ }
3794
+ return null;
3795
+ };
3666
3796
  var mergeSettings = (defaults, input) => {
3667
3797
  if (!isRecord3(input)) {
3668
3798
  return structuredClone(defaults);
@@ -3681,6 +3811,10 @@ var mergeSettings = (defaults, input) => {
3681
3811
  };
3682
3812
  var legacyBlockToV2Settings = (block) => {
3683
3813
  const current = structuredClone(defaultBuilderBlockSettingsV2);
3814
+ if (block.blockType === "hero" && block.variant === "centered") {
3815
+ current.typography.headingAlign = "center";
3816
+ current.typography.bodyAlign = "center";
3817
+ }
3684
3818
  current.layout.contentWidth = block.contentWidth === "narrow" || block.contentWidth === "content" || block.contentWidth === "wide" || block.contentWidth === "full" || block.contentWidth === "inherit" ? block.contentWidth : current.layout.contentWidth;
3685
3819
  current.layout.sectionPaddingX = block.sectionPaddingX === "none" || block.sectionPaddingX === "sm" || block.sectionPaddingX === "md" || block.sectionPaddingX === "lg" || block.sectionPaddingX === "inherit" ? block.sectionPaddingX : current.layout.sectionPaddingX;
3686
3820
  current.layout.sectionPaddingY = block.sectionPaddingY === "none" || block.sectionPaddingY === "sm" || block.sectionPaddingY === "lg" ? block.sectionPaddingY : current.layout.sectionPaddingY;
@@ -3717,15 +3851,28 @@ var legacyBlockToV2Settings = (block) => {
3717
3851
  current.media.positionX = parsePercent(block.imagePositionX ?? block.backgroundImagePositionX);
3718
3852
  current.media.positionY = parsePercent(block.imagePositionY ?? block.backgroundImagePositionY);
3719
3853
  current.media.height = parsePixel(block.imageHeight);
3720
- current.typography.headingAlign = block.textHeadingAlign === "left" || block.textHeadingAlign === "center" || block.textHeadingAlign === "right" || block.textHeadingAlign === "justify" ? block.textHeadingAlign : current.typography.headingAlign;
3721
- current.typography.bodyAlign = block.textBodyAlign === "left" || block.textBodyAlign === "center" || block.textBodyAlign === "right" || block.textBodyAlign === "justify" ? block.textBodyAlign : current.typography.bodyAlign;
3854
+ current.typography.headingAlign = isTextAlign(block.textHeadingAlign) ? block.textHeadingAlign : current.typography.headingAlign;
3855
+ current.typography.bodyAlign = isTextAlign(block.textBodyAlign) ? block.textBodyAlign : current.typography.bodyAlign;
3856
+ current.typography.headingSizePt = parsePoint(block.textHeadingSizePt);
3857
+ current.typography.bodySizePt = parsePoint(block.textBodySizePt);
3722
3858
  current.typography.maxTextWidth = block.textMaxWidth === "auto" || block.textMaxWidth === "sm" || block.textMaxWidth === "md" || block.textMaxWidth === "lg" || block.textMaxWidth === "full" ? block.textMaxWidth : current.typography.maxTextWidth;
3723
3859
  current.typography.lineHeightPreset = block.textLineHeightPreset === "tight" || block.textLineHeightPreset === "normal" || block.textLineHeightPreset === "relaxed" ? block.textLineHeightPreset : current.typography.lineHeightPreset;
3724
3860
  current.typography.letterSpacingPreset = block.textLetterSpacingPreset === "tight" || block.textLetterSpacingPreset === "normal" || block.textLetterSpacingPreset === "relaxed" ? block.textLetterSpacingPreset : current.typography.letterSpacingPreset;
3725
3861
  current.advanced.editCopyInPanel = Boolean(block.editCopyInPanel ?? current.advanced.editCopyInPanel);
3726
3862
  current.advanced.customClassName = typeof block.customClassName === "string" ? block.customClassName : current.advanced.customClassName;
3727
3863
  current.advanced.hideOnMobile = Boolean(block.hideOnMobile ?? current.advanced.hideOnMobile);
3728
- return mergeSettings(current, block.settings);
3864
+ const settings = mergeSettings(current, block.settings);
3865
+ if (block.blockType === "hero") {
3866
+ const top = settings.layout.paddingTopPt;
3867
+ const bottom = settings.layout.paddingBottomPt;
3868
+ const hasLegacyLinkedHeroPadding = settings.layout.linkVerticalPadding !== false && (top === null || typeof top === "undefined" || top === 30) && (bottom === null || typeof bottom === "undefined" || bottom === 30 || bottom === 20);
3869
+ if (hasLegacyLinkedHeroPadding) {
3870
+ settings.layout.linkVerticalPadding = false;
3871
+ settings.layout.paddingTopPt = 30;
3872
+ settings.layout.paddingBottomPt = 20;
3873
+ }
3874
+ }
3875
+ return settings;
3729
3876
  };
3730
3877
  var v2SettingsToLegacyBlock = (blockWithSettings) => {
3731
3878
  const settings = legacyBlockToV2Settings(blockWithSettings);
@@ -3751,6 +3898,8 @@ var v2SettingsToLegacyBlock = (blockWithSettings) => {
3751
3898
  next.contentGradientAngle = settings.appearance.contentGradientAngle;
3752
3899
  next.textHeadingAlign = settings.typography.headingAlign;
3753
3900
  next.textBodyAlign = settings.typography.bodyAlign;
3901
+ next.textHeadingSizePt = settings.typography.headingSizePt;
3902
+ next.textBodySizePt = settings.typography.bodySizePt;
3754
3903
  next.textMaxWidth = settings.typography.maxTextWidth;
3755
3904
  next.textLineHeightPreset = settings.typography.lineHeightPreset;
3756
3905
  next.textLetterSpacingPreset = settings.typography.letterSpacingPreset;
@@ -4174,8 +4323,52 @@ var alignOptions = [
4174
4323
  { label: "Right", value: "right" },
4175
4324
  { label: "Justify", value: "justify" }
4176
4325
  ];
4177
- var layoutFieldSet = [];
4326
+ var layoutFieldSet = [
4327
+ {
4328
+ group: "layout",
4329
+ key: "settings.layout.linkVerticalPadding",
4330
+ label: "Link Top/Bottom Padding",
4331
+ tags: ["spacing", "padding", "vertical"],
4332
+ type: "checkbox"
4333
+ },
4334
+ {
4335
+ group: "layout",
4336
+ key: "settings.layout.paddingTopPt",
4337
+ label: "Top Padding (pt)",
4338
+ max: 240,
4339
+ min: 0,
4340
+ tags: ["spacing", "padding", "top"],
4341
+ type: "number"
4342
+ },
4343
+ {
4344
+ group: "layout",
4345
+ key: "settings.layout.paddingBottomPt",
4346
+ label: "Bottom Padding (pt)",
4347
+ max: 240,
4348
+ min: 0,
4349
+ tags: ["spacing", "padding", "bottom"],
4350
+ type: "number"
4351
+ }
4352
+ ];
4178
4353
  var typographyFieldSet = [
4354
+ {
4355
+ group: "typography",
4356
+ key: "settings.typography.headingSizePt",
4357
+ label: "Heading Text Size (pt)",
4358
+ max: 120,
4359
+ min: 6,
4360
+ tags: ["text", "size", "heading", "font"],
4361
+ type: "number"
4362
+ },
4363
+ {
4364
+ group: "typography",
4365
+ key: "settings.typography.bodySizePt",
4366
+ label: "Body Text Size (pt)",
4367
+ max: 72,
4368
+ min: 6,
4369
+ tags: ["text", "size", "body", "paragraph", "font"],
4370
+ type: "number"
4371
+ },
4179
4372
  {
4180
4373
  group: "typography",
4181
4374
  key: "settings.typography.headingAlign",
@@ -4392,6 +4585,13 @@ var inspectorDefinitionByBlockType = {
4392
4585
  { group: "basics", inlineEditable: true, key: "kicker", label: "Kicker", type: "text" },
4393
4586
  { group: "basics", inlineEditable: true, key: "headline", label: "Headline", type: "text" },
4394
4587
  { group: "basics", inlineEditable: true, key: "subheadline", label: "Subheadline", type: "textarea" },
4588
+ {
4589
+ group: "basics",
4590
+ key: "settings.marquee.itemsText",
4591
+ label: "Scrolling Bar Options",
4592
+ tags: ["marquee", "scrolling", "bar", "categories"],
4593
+ type: "textarea"
4594
+ },
4395
4595
  {
4396
4596
  group: "basics",
4397
4597
  key: "variant",
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  admin_exports
3
- } from "./chunk-WLOPFFN2.mjs";
3
+ } from "./chunk-JC3UV74N.mjs";
4
4
  import {
5
5
  admin_app_exports
6
6
  } from "./chunk-RKTIFEUY.mjs";
@@ -10,13 +10,13 @@ import {
10
10
  } from "./chunk-JQAHXYAM.mjs";
11
11
  import {
12
12
  nextjs_exports
13
- } from "./chunk-OTHERBGX.mjs";
13
+ } from "./chunk-ZADL33R6.mjs";
14
14
  import "./chunk-ZTXJG4K5.mjs";
15
15
  import {
16
16
  studio_pages_exports
17
- } from "./chunk-XKUTZ7IU.mjs";
17
+ } from "./chunk-NGLIA2OE.mjs";
18
18
  import "./chunk-OQSEJXC4.mjs";
19
- import "./chunk-PF3EBZXF.mjs";
19
+ import "./chunk-7ZMXZRBP.mjs";
20
20
  import {
21
21
  studio_exports
22
22
  } from "./chunk-ADIIWIYL.mjs";
@@ -127,7 +127,9 @@ var defaultBuilderBlockSettingsV2 = {
127
127
  },
128
128
  typography: {
129
129
  bodyAlign: "left",
130
+ bodySizePt: null,
130
131
  headingAlign: "left",
132
+ headingSizePt: null,
131
133
  letterSpacingPreset: "normal",
132
134
  lineHeightPreset: "normal",
133
135
  maxTextWidth: "auto"
@@ -156,7 +158,9 @@ var defaultBuilderItemSettingsV2 = {
156
158
  },
157
159
  typography: {
158
160
  bodyAlign: "left",
161
+ bodySizePt: null,
159
162
  headingAlign: "left",
163
+ headingSizePt: null,
160
164
  letterSpacingPreset: "normal",
161
165
  lineHeightPreset: "normal",
162
166
  maxTextWidth: "auto"
@@ -166,6 +170,7 @@ var defaultBuilderItemSettingsV2 = {
166
170
 
167
171
  // src/studio-pages/builder/adapters/settingsV2.ts
168
172
  var isRecord2 = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
173
+ var isTextAlign = (value) => value === "left" || value === "center" || value === "right" || value === "justify";
169
174
  var parsePercent = (value) => {
170
175
  if (typeof value === "number" && Number.isFinite(value)) {
171
176
  return Math.max(0, Math.min(100, value));
@@ -190,6 +195,18 @@ var parsePixel = (value) => {
190
195
  }
191
196
  return null;
192
197
  };
198
+ var parsePoint = (value) => {
199
+ if (typeof value === "number" && Number.isFinite(value)) {
200
+ return Math.max(6, Math.min(120, Math.round(value)));
201
+ }
202
+ if (typeof value === "string" && value.trim().length > 0) {
203
+ const parsed = Number(value);
204
+ if (Number.isFinite(parsed)) {
205
+ return Math.max(6, Math.min(120, Math.round(parsed)));
206
+ }
207
+ }
208
+ return null;
209
+ };
193
210
  var mergeSettings = (defaults, input) => {
194
211
  if (!isRecord2(input)) {
195
212
  return structuredClone(defaults);
@@ -208,6 +225,10 @@ var mergeSettings = (defaults, input) => {
208
225
  };
209
226
  var legacyBlockToV2Settings = (block) => {
210
227
  const current = structuredClone(defaultBuilderBlockSettingsV2);
228
+ if (block.blockType === "hero" && block.variant === "centered") {
229
+ current.typography.headingAlign = "center";
230
+ current.typography.bodyAlign = "center";
231
+ }
211
232
  current.layout.contentWidth = block.contentWidth === "narrow" || block.contentWidth === "content" || block.contentWidth === "wide" || block.contentWidth === "full" || block.contentWidth === "inherit" ? block.contentWidth : current.layout.contentWidth;
212
233
  current.layout.sectionPaddingX = block.sectionPaddingX === "none" || block.sectionPaddingX === "sm" || block.sectionPaddingX === "md" || block.sectionPaddingX === "lg" || block.sectionPaddingX === "inherit" ? block.sectionPaddingX : current.layout.sectionPaddingX;
213
234
  current.layout.sectionPaddingY = block.sectionPaddingY === "none" || block.sectionPaddingY === "sm" || block.sectionPaddingY === "lg" ? block.sectionPaddingY : current.layout.sectionPaddingY;
@@ -244,15 +265,28 @@ var legacyBlockToV2Settings = (block) => {
244
265
  current.media.positionX = parsePercent(block.imagePositionX ?? block.backgroundImagePositionX);
245
266
  current.media.positionY = parsePercent(block.imagePositionY ?? block.backgroundImagePositionY);
246
267
  current.media.height = parsePixel(block.imageHeight);
247
- current.typography.headingAlign = block.textHeadingAlign === "left" || block.textHeadingAlign === "center" || block.textHeadingAlign === "right" || block.textHeadingAlign === "justify" ? block.textHeadingAlign : current.typography.headingAlign;
248
- current.typography.bodyAlign = block.textBodyAlign === "left" || block.textBodyAlign === "center" || block.textBodyAlign === "right" || block.textBodyAlign === "justify" ? block.textBodyAlign : current.typography.bodyAlign;
268
+ current.typography.headingAlign = isTextAlign(block.textHeadingAlign) ? block.textHeadingAlign : current.typography.headingAlign;
269
+ current.typography.bodyAlign = isTextAlign(block.textBodyAlign) ? block.textBodyAlign : current.typography.bodyAlign;
270
+ current.typography.headingSizePt = parsePoint(block.textHeadingSizePt);
271
+ current.typography.bodySizePt = parsePoint(block.textBodySizePt);
249
272
  current.typography.maxTextWidth = block.textMaxWidth === "auto" || block.textMaxWidth === "sm" || block.textMaxWidth === "md" || block.textMaxWidth === "lg" || block.textMaxWidth === "full" ? block.textMaxWidth : current.typography.maxTextWidth;
250
273
  current.typography.lineHeightPreset = block.textLineHeightPreset === "tight" || block.textLineHeightPreset === "normal" || block.textLineHeightPreset === "relaxed" ? block.textLineHeightPreset : current.typography.lineHeightPreset;
251
274
  current.typography.letterSpacingPreset = block.textLetterSpacingPreset === "tight" || block.textLetterSpacingPreset === "normal" || block.textLetterSpacingPreset === "relaxed" ? block.textLetterSpacingPreset : current.typography.letterSpacingPreset;
252
275
  current.advanced.editCopyInPanel = Boolean(block.editCopyInPanel ?? current.advanced.editCopyInPanel);
253
276
  current.advanced.customClassName = typeof block.customClassName === "string" ? block.customClassName : current.advanced.customClassName;
254
277
  current.advanced.hideOnMobile = Boolean(block.hideOnMobile ?? current.advanced.hideOnMobile);
255
- return mergeSettings(current, block.settings);
278
+ const settings = mergeSettings(current, block.settings);
279
+ if (block.blockType === "hero") {
280
+ const top = settings.layout.paddingTopPt;
281
+ const bottom = settings.layout.paddingBottomPt;
282
+ const hasLegacyLinkedHeroPadding = settings.layout.linkVerticalPadding !== false && (top === null || typeof top === "undefined" || top === 30) && (bottom === null || typeof bottom === "undefined" || bottom === 30 || bottom === 20);
283
+ if (hasLegacyLinkedHeroPadding) {
284
+ settings.layout.linkVerticalPadding = false;
285
+ settings.layout.paddingTopPt = 30;
286
+ settings.layout.paddingBottomPt = 20;
287
+ }
288
+ }
289
+ return settings;
256
290
  };
257
291
  var v2SettingsToLegacyBlock = (blockWithSettings) => {
258
292
  const settings = legacyBlockToV2Settings(blockWithSettings);
@@ -278,6 +312,8 @@ var v2SettingsToLegacyBlock = (blockWithSettings) => {
278
312
  next.contentGradientAngle = settings.appearance.contentGradientAngle;
279
313
  next.textHeadingAlign = settings.typography.headingAlign;
280
314
  next.textBodyAlign = settings.typography.bodyAlign;
315
+ next.textHeadingSizePt = settings.typography.headingSizePt;
316
+ next.textBodySizePt = settings.typography.bodySizePt;
281
317
  next.textMaxWidth = settings.typography.maxTextWidth;
282
318
  next.textLineHeightPreset = settings.typography.lineHeightPreset;
283
319
  next.textLetterSpacingPreset = settings.typography.letterSpacingPreset;
@@ -5,9 +5,9 @@ import {
5
5
  createSiteQueries,
6
6
  resolveMedia,
7
7
  resolveSocialMediaLinks
8
- } from "../chunk-OTHERBGX.mjs";
8
+ } from "../chunk-ZADL33R6.mjs";
9
9
  import "../chunk-ZTXJG4K5.mjs";
10
- import "../chunk-PF3EBZXF.mjs";
10
+ import "../chunk-7ZMXZRBP.mjs";
11
11
  import "../chunk-ADIIWIYL.mjs";
12
12
  import "../chunk-6BWS3CLP.mjs";
13
13
  export {
@@ -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 = {