@riverbankcms/sdk 0.74.0 → 0.75.0
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/{PreviewEditorSidebar-5XL7M3OM.mjs → PreviewEditorSidebar-U2IHCBYN.mjs} +3 -3
- package/dist/{PreviewEditorUI-ZDFRDJID.mjs → PreviewEditorUI-ZGH2RQNP.mjs} +3 -3
- package/dist/SdkPreviewModeRuntime-MTUGBTLQ.mjs +8 -0
- package/dist/_dts/api/src/cache-tags.d.ts +22 -0
- package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
- package/dist/_dts/api/src/endpoints.d.ts +24 -24
- package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +2 -1
- package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +4 -1
- package/dist/_dts/blocks/src/client/booking-form.d.ts +2 -0
- package/dist/_dts/blocks/src/client/carousel.d.ts +1 -0
- package/dist/_dts/blocks/src/client/course-registration.d.ts +2 -0
- package/dist/_dts/blocks/src/client/events.d.ts +4 -0
- package/dist/_dts/blocks/src/client/form.d.ts +2 -0
- package/dist/_dts/blocks/src/client/header.d.ts +1 -0
- package/dist/_dts/blocks/src/client/location-map.d.ts +1 -0
- package/dist/_dts/blocks/src/client/newsletter-form.d.ts +2 -0
- package/dist/_dts/blocks/src/client/shop.d.ts +6 -0
- package/dist/_dts/blocks/src/lib/video.d.ts +2 -0
- package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +21 -1
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/events/index.d.ts +3 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/header-section.client.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/header-section.server.d.ts +1 -0
- package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +5 -0
- package/dist/_dts/preview-next/src/client/preview/SiteChromeEditableSurface.d.ts +12 -2
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
- package/dist/_dts/sdk/src/rendering/islands/deferredVideoEmbeds.d.ts +2 -0
- package/dist/_dts/sdk/src/rendering/server.d.ts +3 -0
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/{chunk-YY7K3QD2.mjs → chunk-BGMNDF6T.mjs} +7 -7
- package/dist/{chunk-2MIWNFJM.mjs → chunk-GFE74WRD.mjs} +309 -84
- package/dist/{chunk-CEQBBLMJ.mjs → chunk-RWXQBRQZ.mjs} +1 -1
- package/dist/{chunk-7RX72SK2.mjs → chunk-VX7B5VAC.mjs} +36 -25
- package/dist/{chunk-YRJKZEQ3.mjs → chunk-Z7JLNTJR.mjs} +1 -1
- package/dist/{chunk-CBD47MTM.mjs → chunk-ZSHFGFUG.mjs} +2 -2
- package/dist/cli/index.mjs +3395 -3753
- package/dist/client/{accordion-ZZVXWV3N.mjs → accordion-T2UD2ZTH.mjs} +1 -1
- package/dist/client/bookingForm-GUP75FKN.mjs +3022 -0
- package/dist/client/bookings.mjs +19 -10
- package/dist/client/{carousel-25WK2H7G.mjs → carousel-2NQA6V57.mjs} +3 -2
- package/dist/client/cart-5TFIAFDS.mjs +18 -0
- package/dist/client/checkout-TP4WAHZE.mjs +18 -0
- package/dist/client/chunk-2PHQZ666.mjs +383 -0
- package/dist/client/chunk-3DCJ45Z2.mjs +36 -0
- package/dist/client/chunk-3PEDD5KJ.mjs +146 -0
- package/dist/client/chunk-CY2ZTSE5.mjs +204 -0
- package/dist/client/chunk-F7LHOKEH.mjs +146 -0
- package/dist/client/{chunk-6VGXRE34.mjs → chunk-FU2QRZMX.mjs} +6 -6
- package/dist/client/chunk-I2MMZO53.mjs +6 -0
- package/dist/client/chunk-II7O4XN3.mjs +2206 -0
- package/dist/client/chunk-M3L3KYYR.mjs +1181 -0
- package/dist/client/chunk-NWOUL6JY.mjs +1378 -0
- package/dist/client/chunk-OJPZEZU2.mjs +31 -0
- package/dist/client/chunk-RTZ3JKKX.mjs +178 -0
- package/dist/client/chunk-TQ5MSPDX.mjs +74 -0
- package/dist/client/chunk-VUAOE3AG.mjs +5592 -0
- package/dist/client/chunk-WJXXNDSE.mjs +245 -0
- package/dist/client/chunk-YLMKMCSJ.mjs +86 -0
- package/dist/client/chunk-ZLMS67RR.mjs +106 -0
- package/dist/client/client.mjs +51626 -52074
- package/dist/client/courseRegistration-5DPU6PDY.mjs +1737 -0
- package/dist/client/{eventCalendar-X6GIPYFM.mjs → eventCalendar-F3GZGTEF.mjs} +13 -2
- package/dist/client/{eventCombined-EZUOPM3G.mjs → eventCombined-BQOB6QMY.mjs} +13 -2
- package/dist/client/eventDetails-PEM2EJWE.mjs +25 -0
- package/dist/client/{eventListing-HEFGAETC.mjs → eventListing-YMIQPVME.mjs} +13 -2
- package/dist/client/{eventRegistration-3LCP2V3P.mjs → eventRegistration-4I6ZNDUF.mjs} +13 -2
- package/dist/client/form-ZJVAYZ6G.mjs +300 -0
- package/dist/client/headerSection-TOT5MGTF.mjs +729 -0
- package/dist/client/hooks.mjs +49 -33
- package/dist/client/locationMap-J66NZREU.mjs +227 -0
- package/dist/client/newsletterForm-ET2XUMRO.mjs +208 -0
- package/dist/client/productDetail-C2XIH7C5.mjs +18 -0
- package/dist/client/productList-T2AZLFTP.mjs +18 -0
- package/dist/client/rendering/client.mjs +11763 -12445
- package/dist/client/rendering/islands.mjs +98 -21
- package/dist/client/rendering.mjs +46778 -47229
- package/dist/client/shop-UZ6IUZXD.mjs +20 -0
- package/dist/preview-next/before-render.mjs +37 -25
- package/dist/preview-next/client/runtime.mjs +5 -5
- package/dist/preview-next/middleware.mjs +37 -25
- package/dist/{sdk-runtime-OHNONZ5U.mjs → sdk-runtime-JCUQM63Y.mjs} +6 -6
- package/dist/server/components.mjs +409 -266
- package/dist/server/config-validation.mjs +49 -33
- package/dist/server/config.mjs +49 -33
- package/dist/server/data.mjs +49 -33
- package/dist/server/index.mjs +45 -33
- package/dist/server/next.mjs +405 -262
- package/dist/server/page-converter.mjs +12 -8
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +493 -265
- package/dist/server/rendering.mjs +411 -268
- package/dist/server/routing.mjs +49 -33
- package/dist/server/server.mjs +50 -34
- package/dist/server/theme-bridge.mjs +5 -0
- package/dist/styles/index.css +5 -0
- package/package.json +2 -1
- package/dist/SdkPreviewModeRuntime-CRYNDSPL.mjs +0 -8
- package/dist/client/bookingForm-4X77HKDS.mjs +0 -34
- package/dist/client/cart-JWD2VRFU.mjs +0 -11
- package/dist/client/checkout-V7KYGWL7.mjs +0 -11
- package/dist/client/chunk-5IYGMTUE.mjs +0 -18614
- package/dist/client/chunk-RKCFVIMS.mjs +0 -26
- package/dist/client/courseRegistration-O6ZPK4YT.mjs +0 -29
- package/dist/client/eventDetails-3WODIXET.mjs +0 -14
- package/dist/client/form-AKXQMY6Z.mjs +0 -85
- package/dist/client/headerSection-5KHCMU6B.mjs +0 -12
- package/dist/client/locationMap-7HIADW76.mjs +0 -14
- package/dist/client/newsletterForm-5N4YTMU3.mjs +0 -60
- package/dist/client/productDetail-IZUA7ZP3.mjs +0 -11
- package/dist/client/productList-KWIIJE6I.mjs +0 -11
- package/dist/client/shop-XZQFRQWZ.mjs +0 -13
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { ApiRequestError } from './chunk-
|
|
2
|
+
import { ApiRequestError } from './chunk-VX7B5VAC.mjs';
|
|
3
3
|
import { __commonJS, __export, __toESM, __require } from './chunk-XGB3TDIC.mjs';
|
|
4
4
|
import * as React63 from 'react';
|
|
5
5
|
import React63__default, { forwardRef, createElement, createContext, useRef, useMemo, useEffect, useState, useCallback, useImperativeHandle, useLayoutEffect, useContext, memo, createRef, Component as Component$1, useDebugValue, useId as useId$1, useSyncExternalStore, isValidElement, cloneElement, useReducer, startTransition } from 'react';
|
|
@@ -30415,6 +30415,9 @@ function validationContext(options = {}) {
|
|
|
30415
30415
|
function formatFieldPath(path) {
|
|
30416
30416
|
return path.map((segment) => String(segment)).join(".");
|
|
30417
30417
|
}
|
|
30418
|
+
function toZodIssuePath(path) {
|
|
30419
|
+
return [...path];
|
|
30420
|
+
}
|
|
30418
30421
|
function fieldIssueToMessage(issue2) {
|
|
30419
30422
|
switch (issue2.kind) {
|
|
30420
30423
|
case "required":
|
|
@@ -30543,6 +30546,9 @@ function deriveFieldValidationPlan(field, path = [field.id]) {
|
|
|
30543
30546
|
return assertNever4(field);
|
|
30544
30547
|
}
|
|
30545
30548
|
}
|
|
30549
|
+
function deriveFieldValidationPlans(fields3, parentPath = []) {
|
|
30550
|
+
return fields3.map((field) => deriveFieldValidationPlan(field, [...parentPath, field.id]));
|
|
30551
|
+
}
|
|
30546
30552
|
function commonConstraints(required, ...specific) {
|
|
30547
30553
|
return required ? [{ kind: "required" }, ...specific] : [...specific];
|
|
30548
30554
|
}
|
|
@@ -30558,9 +30564,19 @@ function makePlan(kind, valueKind, field, path, required, constraints) {
|
|
|
30558
30564
|
fieldType: field.type,
|
|
30559
30565
|
path,
|
|
30560
30566
|
required,
|
|
30567
|
+
visibility: fieldVisibility(field),
|
|
30561
30568
|
constraints
|
|
30562
30569
|
};
|
|
30563
30570
|
}
|
|
30571
|
+
function fieldVisibility(field) {
|
|
30572
|
+
if (field.ui?.hidden) {
|
|
30573
|
+
return { kind: "hidden" };
|
|
30574
|
+
}
|
|
30575
|
+
if (field.visibleRoles && field.visibleRoles.length > 0) {
|
|
30576
|
+
return { kind: "roleRestricted", roles: field.visibleRoles };
|
|
30577
|
+
}
|
|
30578
|
+
return { kind: "visible" };
|
|
30579
|
+
}
|
|
30564
30580
|
function withRepeaterItemConstraints(field, constraints) {
|
|
30565
30581
|
const next = [...constraints];
|
|
30566
30582
|
if (typeof field.minItems === "number") next.push({ kind: "minItems", minimum: field.minItems });
|
|
@@ -30574,7 +30590,7 @@ function deriveRepeatedItemVariants(field, parentPath) {
|
|
|
30574
30590
|
}));
|
|
30575
30591
|
}
|
|
30576
30592
|
function deriveNestedFieldPlans(fields3, parentPath) {
|
|
30577
|
-
return fields3
|
|
30593
|
+
return deriveFieldValidationPlans(fields3, parentPath);
|
|
30578
30594
|
}
|
|
30579
30595
|
function getRepeaterFields(field) {
|
|
30580
30596
|
const fields3 = field.polymorphic && field.itemTypes ? Object.values(field.itemTypes).flatMap((itemType) => itemType.fields) : field.schema?.fields ?? [];
|
|
@@ -30600,6 +30616,71 @@ function resolveSelectConstraintSource(field) {
|
|
|
30600
30616
|
return assertNever4(source);
|
|
30601
30617
|
}
|
|
30602
30618
|
}
|
|
30619
|
+
function normalizeStoredContentValues(plans, content, options = {}) {
|
|
30620
|
+
if (!content || typeof content !== "object" || Array.isArray(content)) {
|
|
30621
|
+
return {};
|
|
30622
|
+
}
|
|
30623
|
+
const planMap = new Map(plans.map((plan) => [plan.fieldId, plan]));
|
|
30624
|
+
const normalized = {};
|
|
30625
|
+
const ctx = validationContext(options);
|
|
30626
|
+
for (const [key, value] of Object.entries(content)) {
|
|
30627
|
+
const plan = planMap.get(key);
|
|
30628
|
+
normalized[key] = plan ? normalizeStoredFieldValueWithContext(plan, value, ctx) : value;
|
|
30629
|
+
}
|
|
30630
|
+
return normalized;
|
|
30631
|
+
}
|
|
30632
|
+
function normalizeStoredFieldValueWithContext(plan, value, ctx) {
|
|
30633
|
+
if (value === null && !plan.required) {
|
|
30634
|
+
return void 0;
|
|
30635
|
+
}
|
|
30636
|
+
switch (plan.kind) {
|
|
30637
|
+
case "group":
|
|
30638
|
+
return normalizeStoredObjectChildren(plan.children, value, childValidationContext(plan, ctx));
|
|
30639
|
+
case "repeater":
|
|
30640
|
+
return normalizeStoredRepeaterItems(plan, value, ctx);
|
|
30641
|
+
case "string":
|
|
30642
|
+
case "number":
|
|
30643
|
+
case "boolean":
|
|
30644
|
+
case "richText":
|
|
30645
|
+
case "media":
|
|
30646
|
+
case "link":
|
|
30647
|
+
case "select":
|
|
30648
|
+
case "passthrough":
|
|
30649
|
+
return normalizeFieldValue(plan, value, ctx);
|
|
30650
|
+
default:
|
|
30651
|
+
return assertNever4(plan);
|
|
30652
|
+
}
|
|
30653
|
+
}
|
|
30654
|
+
function normalizeStoredObjectChildren(children, value, ctx) {
|
|
30655
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
30656
|
+
return value;
|
|
30657
|
+
}
|
|
30658
|
+
const normalized = { ...value };
|
|
30659
|
+
for (const child of children) {
|
|
30660
|
+
normalized[child.fieldId] = normalizeStoredFieldValueWithContext(
|
|
30661
|
+
child,
|
|
30662
|
+
normalized[child.fieldId],
|
|
30663
|
+
ctx
|
|
30664
|
+
);
|
|
30665
|
+
}
|
|
30666
|
+
return normalized;
|
|
30667
|
+
}
|
|
30668
|
+
function normalizeStoredRepeaterItems(plan, value, ctx) {
|
|
30669
|
+
if (!Array.isArray(value)) {
|
|
30670
|
+
return value;
|
|
30671
|
+
}
|
|
30672
|
+
return value.map((item) => {
|
|
30673
|
+
if (!item || typeof item !== "object" || Array.isArray(item)) {
|
|
30674
|
+
return item;
|
|
30675
|
+
}
|
|
30676
|
+
const itemRecord = item;
|
|
30677
|
+
const fields3 = plan.repeatedItemVariants ? plan.repeatedItemVariants.find((variant) => variant.typeId === itemRecord._type)?.fields : plan.repeatedItemPlan;
|
|
30678
|
+
if (!fields3) {
|
|
30679
|
+
return item;
|
|
30680
|
+
}
|
|
30681
|
+
return normalizeStoredObjectChildren(fields3, itemRecord, ctx);
|
|
30682
|
+
});
|
|
30683
|
+
}
|
|
30603
30684
|
function normalizeFieldValue(plan, value, ctx) {
|
|
30604
30685
|
switch (plan.kind) {
|
|
30605
30686
|
case "number":
|
|
@@ -30854,16 +30935,19 @@ function fieldPlanToZod(plan, options = {}) {
|
|
|
30854
30935
|
const ctx = validationContext(options);
|
|
30855
30936
|
return z.any().transform((value) => normalizeFieldValue(plan, value, ctx)).superRefine((value, zodCtx) => {
|
|
30856
30937
|
for (const validationIssue of validateNormalizedFieldValue(plan, value, ctx)) {
|
|
30857
|
-
addFieldIssueToZodContext(zodCtx, validationIssue);
|
|
30938
|
+
addFieldIssueToZodContext(zodCtx, validationIssue, plan.path);
|
|
30858
30939
|
}
|
|
30859
30940
|
});
|
|
30860
30941
|
}
|
|
30861
|
-
function addFieldIssueToZodContext(zodCtx, validationIssue) {
|
|
30942
|
+
function addFieldIssueToZodContext(zodCtx, validationIssue, rootPath) {
|
|
30862
30943
|
const message2 = fieldIssueToMessage(validationIssue);
|
|
30944
|
+
const path = relativeZodIssuePath(validationIssue.path, rootPath);
|
|
30945
|
+
const issuePath = path.length > 0 ? { path: toZodIssuePath(path) } : {};
|
|
30863
30946
|
switch (validationIssue.kind) {
|
|
30864
30947
|
case "required":
|
|
30865
30948
|
if (validationIssue.emptyOrigin) {
|
|
30866
30949
|
zodCtx.addIssue({
|
|
30950
|
+
...issuePath,
|
|
30867
30951
|
code: "too_small",
|
|
30868
30952
|
origin: validationIssue.emptyOrigin,
|
|
30869
30953
|
minimum: 1,
|
|
@@ -30872,10 +30956,11 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
|
|
|
30872
30956
|
});
|
|
30873
30957
|
return;
|
|
30874
30958
|
}
|
|
30875
|
-
zodCtx.addIssue({ code: "invalid_type", expected: "nonoptional", message: message2 });
|
|
30959
|
+
zodCtx.addIssue({ ...issuePath, code: "invalid_type", expected: "nonoptional", message: message2 });
|
|
30876
30960
|
return;
|
|
30877
30961
|
case "tooLong":
|
|
30878
30962
|
zodCtx.addIssue({
|
|
30963
|
+
...issuePath,
|
|
30879
30964
|
code: "too_big",
|
|
30880
30965
|
origin: "string",
|
|
30881
30966
|
maximum: validationIssue.maximum,
|
|
@@ -30884,7 +30969,7 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
|
|
|
30884
30969
|
});
|
|
30885
30970
|
return;
|
|
30886
30971
|
case "invalidOption":
|
|
30887
|
-
zodCtx.addIssue({ code: "invalid_value", values: [], message: message2 });
|
|
30972
|
+
zodCtx.addIssue({ ...issuePath, code: "invalid_value", values: [], message: message2 });
|
|
30888
30973
|
return;
|
|
30889
30974
|
case "wrongType":
|
|
30890
30975
|
case "invalidEmail":
|
|
@@ -30901,12 +30986,72 @@ function addFieldIssueToZodContext(zodCtx, validationIssue) {
|
|
|
30901
30986
|
case "invalidMedia":
|
|
30902
30987
|
case "invalidLink":
|
|
30903
30988
|
case "invalidReference":
|
|
30904
|
-
zodCtx.addIssue({ code: "custom", message: message2 });
|
|
30989
|
+
zodCtx.addIssue({ ...issuePath, code: "custom", message: message2 });
|
|
30905
30990
|
return;
|
|
30906
30991
|
default:
|
|
30907
30992
|
assertNever4(validationIssue);
|
|
30908
30993
|
}
|
|
30909
30994
|
}
|
|
30995
|
+
function relativeZodIssuePath(path, rootPath) {
|
|
30996
|
+
return startsWithFieldPath(path, rootPath) ? path.slice(rootPath.length) : path;
|
|
30997
|
+
}
|
|
30998
|
+
function resolveFieldValidationDescriptor(plans, path) {
|
|
30999
|
+
const plan = findFieldValidationPlan(plans, path);
|
|
31000
|
+
return plan ? fieldValidationDescriptor(plan) : null;
|
|
31001
|
+
}
|
|
31002
|
+
function findFieldValidationPlan(plans, path) {
|
|
31003
|
+
for (const plan of plans) {
|
|
31004
|
+
if (sameFieldPath(plan.path, path)) {
|
|
31005
|
+
return plan;
|
|
31006
|
+
}
|
|
31007
|
+
const nested = findNestedFieldValidationPlan(plan, path);
|
|
31008
|
+
if (nested) {
|
|
31009
|
+
return nested;
|
|
31010
|
+
}
|
|
31011
|
+
}
|
|
31012
|
+
return null;
|
|
31013
|
+
}
|
|
31014
|
+
function findNestedFieldValidationPlan(plan, path) {
|
|
31015
|
+
switch (plan.kind) {
|
|
31016
|
+
case "group":
|
|
31017
|
+
return findFieldValidationPlan(plan.children, path);
|
|
31018
|
+
case "repeater": {
|
|
31019
|
+
const index2 = path[plan.path.length];
|
|
31020
|
+
if (typeof index2 !== "number") {
|
|
31021
|
+
return null;
|
|
31022
|
+
}
|
|
31023
|
+
const childPlans = plan.repeatedItemVariants ? plan.repeatedItemVariants.flatMap((variant) => variant.fields) : plan.repeatedItemPlan ?? [];
|
|
31024
|
+
const materialized = childPlans.map(
|
|
31025
|
+
(childPlan) => materializeRepeaterItemPlan(childPlan, plan.path, index2)
|
|
31026
|
+
);
|
|
31027
|
+
return findFieldValidationPlan(materialized, path);
|
|
31028
|
+
}
|
|
31029
|
+
case "string":
|
|
31030
|
+
case "number":
|
|
31031
|
+
case "boolean":
|
|
31032
|
+
case "richText":
|
|
31033
|
+
case "media":
|
|
31034
|
+
case "link":
|
|
31035
|
+
case "select":
|
|
31036
|
+
case "passthrough":
|
|
31037
|
+
return null;
|
|
31038
|
+
default:
|
|
31039
|
+
return assertNever4(plan);
|
|
31040
|
+
}
|
|
31041
|
+
}
|
|
31042
|
+
function fieldValidationDescriptor(plan) {
|
|
31043
|
+
return {
|
|
31044
|
+
path: plan.path,
|
|
31045
|
+
fieldPath: formatFieldPath(plan.path),
|
|
31046
|
+
fieldId: plan.fieldId,
|
|
31047
|
+
label: plan.label,
|
|
31048
|
+
fieldType: plan.fieldType,
|
|
31049
|
+
visibility: plan.visibility
|
|
31050
|
+
};
|
|
31051
|
+
}
|
|
31052
|
+
function sameFieldPath(left, right) {
|
|
31053
|
+
return left.length === right.length && left.every((segment, index2) => segment === right[index2]);
|
|
31054
|
+
}
|
|
30910
31055
|
function compilePattern(pattern) {
|
|
30911
31056
|
try {
|
|
30912
31057
|
return new RegExp(pattern);
|
|
@@ -30981,24 +31126,33 @@ function preprocessEmptyValues(content) {
|
|
|
30981
31126
|
}
|
|
30982
31127
|
return result;
|
|
30983
31128
|
}
|
|
30984
|
-
function deriveContentZodFromManifest(manifestOrFields, options = {}) {
|
|
30985
|
-
const shape = {};
|
|
30986
|
-
const fields3 = Array.isArray(manifestOrFields) ? manifestOrFields : manifestOrFields.fields ?? [];
|
|
30987
|
-
for (const field of fields3) {
|
|
30988
|
-
shape[field.id] = buildFieldSchema(field, options);
|
|
30989
|
-
}
|
|
30990
|
-
return z.object(shape).catchall(z.unknown()).passthrough();
|
|
30991
|
-
}
|
|
30992
31129
|
function createManifestValidator(manifestOrFields, options = {}) {
|
|
30993
31130
|
const isDraft = options.mode === "draft";
|
|
30994
|
-
const
|
|
31131
|
+
const plans = derivePlansFromManifestOrFields(manifestOrFields);
|
|
31132
|
+
const baseSchema = deriveContentZodFromPlans(plans, options);
|
|
30995
31133
|
if (isDraft) {
|
|
30996
|
-
return z.preprocess(
|
|
31134
|
+
return z.preprocess(
|
|
31135
|
+
(content) => preprocessEmptyValues(
|
|
31136
|
+
normalizeStoredContentValues(plans, content, options)
|
|
31137
|
+
),
|
|
31138
|
+
baseSchema
|
|
31139
|
+
);
|
|
30997
31140
|
}
|
|
30998
|
-
return
|
|
31141
|
+
return z.preprocess(
|
|
31142
|
+
(content) => normalizeStoredContentValues(plans, content, options),
|
|
31143
|
+
baseSchema
|
|
31144
|
+
);
|
|
30999
31145
|
}
|
|
31000
|
-
function
|
|
31001
|
-
|
|
31146
|
+
function deriveContentZodFromPlans(plans, options) {
|
|
31147
|
+
const shape = {};
|
|
31148
|
+
for (const plan of plans) {
|
|
31149
|
+
shape[plan.fieldId] = fieldPlanToZod(plan, options);
|
|
31150
|
+
}
|
|
31151
|
+
return z.object(shape).catchall(z.unknown()).passthrough();
|
|
31152
|
+
}
|
|
31153
|
+
function derivePlansFromManifestOrFields(manifestOrFields) {
|
|
31154
|
+
const fields3 = Array.isArray(manifestOrFields) ? manifestOrFields : manifestOrFields.fields ?? [];
|
|
31155
|
+
return deriveFieldValidationPlans(fields3);
|
|
31002
31156
|
}
|
|
31003
31157
|
|
|
31004
31158
|
// ../blocks/src/system/manifest/variantKey.ts
|
|
@@ -49037,7 +49191,7 @@ var cardStylingFields = [
|
|
|
49037
49191
|
description: "Text for the event action button",
|
|
49038
49192
|
required: false,
|
|
49039
49193
|
multiline: false,
|
|
49040
|
-
defaultValue: "
|
|
49194
|
+
defaultValue: "Book now",
|
|
49041
49195
|
maxLength: 40
|
|
49042
49196
|
}
|
|
49043
49197
|
];
|
|
@@ -49528,6 +49682,7 @@ var eventRegistrationBlockDefinition = {
|
|
|
49528
49682
|
limit: "50",
|
|
49529
49683
|
// Get more events for selection
|
|
49530
49684
|
stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
|
|
49685
|
+
readProfile: "registration",
|
|
49531
49686
|
// When rendering on an event content entry page, scope the list to that entry so
|
|
49532
49687
|
// the wizard always includes the current event (and avoids stale cached "all events" responses).
|
|
49533
49688
|
entryId: { $bind: { from: "$root.contentEntry._entryId", fallback: "" } }
|
|
@@ -50449,7 +50604,7 @@ var eventSpotlightLayout = [
|
|
|
50449
50604
|
columns: { $bind: { from: "content.columns", fallback: "3" } },
|
|
50450
50605
|
cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
|
|
50451
50606
|
buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
|
|
50452
|
-
buttonText: { $bind: { from: "content.buttonText", fallback: "
|
|
50607
|
+
buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
|
|
50453
50608
|
ctaLabel: { $bind: { from: "content.ctaLabel" } },
|
|
50454
50609
|
ctaUrl: { $bind: { from: "content.ctaUrl", transforms: [{ id: "links.resolve" }] } },
|
|
50455
50610
|
showVenue: { $bind: { from: "content.showVenue" } },
|
|
@@ -50493,7 +50648,8 @@ var eventSpotlightBlockDefinition = {
|
|
|
50493
50648
|
siteId: { $bind: { from: "$root.siteId" } },
|
|
50494
50649
|
limit: { $bind: { from: "content.maxEvents", fallback: "3" } },
|
|
50495
50650
|
stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
|
|
50496
|
-
detailLevel: "listing"
|
|
50651
|
+
detailLevel: "listing",
|
|
50652
|
+
readProfile: "spotlight"
|
|
50497
50653
|
},
|
|
50498
50654
|
mode: "server"
|
|
50499
50655
|
}
|
|
@@ -50985,7 +51141,7 @@ var COLUMN_CLASSES = {
|
|
|
50985
51141
|
};
|
|
50986
51142
|
function getContainerClass(layout, columns) {
|
|
50987
51143
|
if (layout === "compact") {
|
|
50988
|
-
return "rb-flex rb-flex-col rb-gap-2";
|
|
51144
|
+
return "event-listing-compact-container rb-flex rb-flex-col rb-gap-2";
|
|
50989
51145
|
}
|
|
50990
51146
|
if (layout === "stack") {
|
|
50991
51147
|
return "rb-flex rb-flex-col rb-gap-6";
|
|
@@ -51116,7 +51272,7 @@ function formatEventPrice(event) {
|
|
|
51116
51272
|
}
|
|
51117
51273
|
function resolveEventCta(event, buttonText) {
|
|
51118
51274
|
const { isFull: isSoldOut } = getEventAvailability(event);
|
|
51119
|
-
const defaultButtonText = event.kind === "course_session" ? "
|
|
51275
|
+
const defaultButtonText = event.kind === "course_session" ? "Book course" : "Book now";
|
|
51120
51276
|
const effectiveButtonText = buttonText ?? defaultButtonText;
|
|
51121
51277
|
if (isSoldOut) {
|
|
51122
51278
|
return { label: "Sold out", href: event.path, hidden: true };
|
|
@@ -52703,7 +52859,7 @@ var eventListingBlockRuntime = defineProgressiveBlockRuntime({
|
|
|
52703
52859
|
containerClass: getContainerClass(layout, source.columns ?? "3"),
|
|
52704
52860
|
cardVariant: source.cardVariant ?? "default",
|
|
52705
52861
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
52706
|
-
buttonText: source.buttonText ?? "
|
|
52862
|
+
buttonText: source.buttonText ?? "Book now",
|
|
52707
52863
|
showVenue: source.showVenue ?? true,
|
|
52708
52864
|
showMap: source.showMap ?? true,
|
|
52709
52865
|
showCapacity: source.showCapacity ?? true,
|
|
@@ -52934,7 +53090,7 @@ var eventListingLayout = [
|
|
|
52934
53090
|
loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
|
|
52935
53091
|
cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
|
|
52936
53092
|
buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
|
|
52937
|
-
buttonText: { $bind: { from: "content.buttonText", fallback: "
|
|
53093
|
+
buttonText: { $bind: { from: "content.buttonText", fallback: "Book now" } },
|
|
52938
53094
|
showVenue: { $bind: { from: "content.showVenue" } },
|
|
52939
53095
|
showMap: { $bind: { from: "content.showMap" } },
|
|
52940
53096
|
showCapacity: { $bind: { from: "content.showCapacity" } },
|
|
@@ -52984,6 +53140,7 @@ var eventListingBlockDefinition = {
|
|
|
52984
53140
|
limit: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
|
|
52985
53141
|
stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
|
|
52986
53142
|
detailLevel: "listing",
|
|
53143
|
+
readProfile: { $bind: { from: "content.layout", fallback: "listing-card" } },
|
|
52987
53144
|
kind: { $bind: { from: "content.kind" } },
|
|
52988
53145
|
eventSurface: { $bind: { from: "content.eventSurface" } },
|
|
52989
53146
|
eventPresets: {
|
|
@@ -53115,7 +53272,7 @@ function buildEventCalendarDisplay(source) {
|
|
|
53115
53272
|
),
|
|
53116
53273
|
filterVenueId: normalizeEventVenueId(source.filterVenueId),
|
|
53117
53274
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
53118
|
-
buttonText: source.buttonText ?? "
|
|
53275
|
+
buttonText: source.buttonText ?? "Book now",
|
|
53119
53276
|
showVenue: source.showVenue ?? true,
|
|
53120
53277
|
showMap: source.showMap ?? true,
|
|
53121
53278
|
showCapacity: source.showCapacity ?? true,
|
|
@@ -53323,7 +53480,7 @@ var eventCalendarLayout = [
|
|
|
53323
53480
|
$bind: { from: "content.buttonVariant", fallback: "primary" }
|
|
53324
53481
|
},
|
|
53325
53482
|
buttonText: {
|
|
53326
|
-
$bind: { from: "content.buttonText", fallback: "
|
|
53483
|
+
$bind: { from: "content.buttonText", fallback: "Book now" }
|
|
53327
53484
|
},
|
|
53328
53485
|
emptyMessage: { $bind: { from: "content.emptyMessage" } }
|
|
53329
53486
|
})
|
|
@@ -53777,6 +53934,7 @@ var eventCalendarBlockDefinition = {
|
|
|
53777
53934
|
limit: 100,
|
|
53778
53935
|
stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
|
|
53779
53936
|
detailLevel: "listing",
|
|
53937
|
+
readProfile: { $bind: { from: "content.variant", fallback: "listing-card" } },
|
|
53780
53938
|
// Pass filter params if configured
|
|
53781
53939
|
kind: { $bind: { from: "content.kind" } },
|
|
53782
53940
|
eventSurface: { $bind: { from: "content.eventSurface" } },
|
|
@@ -59802,9 +59960,9 @@ function getEmbedUrl(info) {
|
|
|
59802
59960
|
const kind = info.kind ?? "p";
|
|
59803
59961
|
return `https://www.instagram.com/${kind}/${info.id}/embed`;
|
|
59804
59962
|
}
|
|
59805
|
-
default:
|
|
59806
|
-
return "";
|
|
59807
59963
|
}
|
|
59964
|
+
const exhaustive = info.provider;
|
|
59965
|
+
return exhaustive;
|
|
59808
59966
|
}
|
|
59809
59967
|
function getThumbnailUrl(info) {
|
|
59810
59968
|
switch (info.provider) {
|
|
@@ -59814,9 +59972,20 @@ function getThumbnailUrl(info) {
|
|
|
59814
59972
|
return `https://vumbnail.com/${info.id}.jpg`;
|
|
59815
59973
|
case "instagram":
|
|
59816
59974
|
return "";
|
|
59817
|
-
default:
|
|
59818
|
-
return "";
|
|
59819
59975
|
}
|
|
59976
|
+
const exhaustive = info.provider;
|
|
59977
|
+
return exhaustive;
|
|
59978
|
+
}
|
|
59979
|
+
function getVideoEmbedLoadingStrategy(provider) {
|
|
59980
|
+
switch (provider) {
|
|
59981
|
+
case "youtube":
|
|
59982
|
+
case "vimeo":
|
|
59983
|
+
return "native-lazy";
|
|
59984
|
+
case "instagram":
|
|
59985
|
+
return "defer-until-near-viewport";
|
|
59986
|
+
}
|
|
59987
|
+
const exhaustive = provider;
|
|
59988
|
+
return exhaustive;
|
|
59820
59989
|
}
|
|
59821
59990
|
function getVideoEmbed(url) {
|
|
59822
59991
|
const info = parseVideoUrl(url);
|
|
@@ -59871,35 +60040,43 @@ var VideoEmbedNode = ({
|
|
|
59871
60040
|
);
|
|
59872
60041
|
}
|
|
59873
60042
|
const title = getVideoTitle(embedInfo);
|
|
59874
|
-
|
|
60043
|
+
const loadingStrategy = getVideoEmbedLoadingStrategy(embedInfo.provider);
|
|
60044
|
+
const shouldDeferSrc = loadingStrategy === "defer-until-near-viewport";
|
|
60045
|
+
return /* @__PURE__ */ jsx("div", { ...rest, children: /* @__PURE__ */ jsxs(
|
|
59875
60046
|
"div",
|
|
59876
60047
|
{
|
|
59877
60048
|
className,
|
|
60049
|
+
"data-rb-video-embed-wrapper": shouldDeferSrc ? "true" : void 0,
|
|
59878
60050
|
style: {
|
|
59879
60051
|
...style2,
|
|
59880
60052
|
aspectRatio: resolvedAspectRatio,
|
|
59881
60053
|
position: "relative",
|
|
59882
60054
|
width: "100%"
|
|
59883
60055
|
},
|
|
59884
|
-
children:
|
|
59885
|
-
|
|
59886
|
-
|
|
59887
|
-
|
|
59888
|
-
|
|
59889
|
-
|
|
59890
|
-
|
|
59891
|
-
|
|
59892
|
-
|
|
59893
|
-
|
|
59894
|
-
|
|
59895
|
-
|
|
59896
|
-
|
|
59897
|
-
|
|
59898
|
-
|
|
59899
|
-
|
|
59900
|
-
|
|
59901
|
-
|
|
59902
|
-
|
|
60056
|
+
children: [
|
|
60057
|
+
/* @__PURE__ */ jsx(
|
|
60058
|
+
"iframe",
|
|
60059
|
+
{
|
|
60060
|
+
src: shouldDeferSrc ? void 0 : embedInfo.embedUrl,
|
|
60061
|
+
title,
|
|
60062
|
+
loading: "lazy",
|
|
60063
|
+
"data-rb-video-embed-deferred": shouldDeferSrc ? "true" : void 0,
|
|
60064
|
+
"data-rb-video-embed-src": shouldDeferSrc ? embedInfo.embedUrl : void 0,
|
|
60065
|
+
style: {
|
|
60066
|
+
position: "absolute",
|
|
60067
|
+
top: 0,
|
|
60068
|
+
left: 0,
|
|
60069
|
+
width: "100%",
|
|
60070
|
+
height: "100%",
|
|
60071
|
+
border: "none"
|
|
60072
|
+
},
|
|
60073
|
+
allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
|
|
60074
|
+
referrerPolicy: "no-referrer-when-downgrade",
|
|
60075
|
+
allowFullScreen: true
|
|
60076
|
+
}
|
|
60077
|
+
),
|
|
60078
|
+
shouldDeferSrc ? /* @__PURE__ */ jsx("noscript", { children: /* @__PURE__ */ jsx("a", { href: embedInfo.url, children: "View on Instagram" }) }) : null
|
|
60079
|
+
]
|
|
59903
60080
|
}
|
|
59904
60081
|
) });
|
|
59905
60082
|
};
|
|
@@ -59914,9 +60091,9 @@ function getVideoTitle(info) {
|
|
|
59914
60091
|
const label = kind === "reel" ? "reel" : kind === "tv" ? "video" : "post";
|
|
59915
60092
|
return `Instagram ${label} ${info.id}`;
|
|
59916
60093
|
}
|
|
59917
|
-
default:
|
|
59918
|
-
return "Embedded video";
|
|
59919
60094
|
}
|
|
60095
|
+
const exhaustive = info.provider;
|
|
60096
|
+
return exhaustive;
|
|
59920
60097
|
}
|
|
59921
60098
|
function getAspectRatio(propAspectRatio, style2) {
|
|
59922
60099
|
const styleAspectRatio = style2?.aspectRatio;
|
|
@@ -60159,10 +60336,15 @@ var HeaderSectionNode = ({
|
|
|
60159
60336
|
blockId,
|
|
60160
60337
|
children,
|
|
60161
60338
|
className,
|
|
60339
|
+
"data-preview-site-chrome-surface": previewSiteChromeSurface,
|
|
60162
60340
|
...rest
|
|
60163
60341
|
}) => {
|
|
60164
60342
|
const { wrapperClasses, sectionClasses } = splitPositioningClasses(className);
|
|
60165
|
-
const wrapperClassName =
|
|
60343
|
+
const wrapperClassName = [
|
|
60344
|
+
"block-site-header",
|
|
60345
|
+
wrapperClasses,
|
|
60346
|
+
previewSiteChromeSurface ? "group/site-chrome rb-relative" : ""
|
|
60347
|
+
].filter(Boolean).join(" ");
|
|
60166
60348
|
const asProp = rest.as;
|
|
60167
60349
|
const styleProp = rest.style;
|
|
60168
60350
|
const backgroundProp = typeof rest.background === "string" ? rest.background : void 0;
|
|
@@ -60178,6 +60360,7 @@ var HeaderSectionNode = ({
|
|
|
60178
60360
|
"data-block": "site-header",
|
|
60179
60361
|
"data-block-kind": "block.site-header",
|
|
60180
60362
|
"data-block-id": blockId ?? void 0,
|
|
60363
|
+
"data-preview-site-chrome-surface": previewSiteChromeSurface,
|
|
60181
60364
|
children: [
|
|
60182
60365
|
/* @__PURE__ */ jsx(IslandPropsScript, { value: { enabled: hasShrinkClasses(className) } }),
|
|
60183
60366
|
/* @__PURE__ */ jsx(
|
|
@@ -61810,7 +61993,7 @@ var EventSpotlight = ({
|
|
|
61810
61993
|
columns = "3",
|
|
61811
61994
|
cardVariant = "default",
|
|
61812
61995
|
buttonVariant = "primary",
|
|
61813
|
-
buttonText = "
|
|
61996
|
+
buttonText = "Book now",
|
|
61814
61997
|
ctaLabel,
|
|
61815
61998
|
ctaUrl,
|
|
61816
61999
|
showVenue = true,
|
|
@@ -61956,7 +62139,7 @@ function buildEventCombinedDisplay(source) {
|
|
|
61956
62139
|
showMap: source.showMap ?? true,
|
|
61957
62140
|
showCapacity: source.showCapacity ?? true,
|
|
61958
62141
|
buttonVariant: source.buttonVariant ?? "primary",
|
|
61959
|
-
buttonText: source.buttonText ?? "
|
|
62142
|
+
buttonText: source.buttonText ?? "Book now",
|
|
61960
62143
|
emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
|
|
61961
62144
|
};
|
|
61962
62145
|
}
|
|
@@ -78456,6 +78639,11 @@ var containerResponsiveThemeCss = `/*
|
|
|
78456
78639
|
* Dense row layout for event-calendar compact list mode
|
|
78457
78640
|
* ============================================================================= */
|
|
78458
78641
|
|
|
78642
|
+
:where(.theme-scope) .event-listing-compact-container {
|
|
78643
|
+
width: min(100%, 56rem);
|
|
78644
|
+
margin-inline: auto;
|
|
78645
|
+
}
|
|
78646
|
+
|
|
78459
78647
|
:where(.theme-scope) .event-compact-row {
|
|
78460
78648
|
display: flex;
|
|
78461
78649
|
align-items: center;
|
|
@@ -80403,16 +80591,24 @@ function validateBlockManifestIssues(manifest, values, mode) {
|
|
|
80403
80591
|
return result.error.issues.map(withNormalizedManifestMessage);
|
|
80404
80592
|
}
|
|
80405
80593
|
function validateBlockManifest(manifest, values, mode) {
|
|
80594
|
+
const plans = getManifestValidationCacheEntry(manifest).plans;
|
|
80406
80595
|
return validateBlockManifestIssues(manifest, values, mode).map((issue2) => {
|
|
80407
80596
|
const path = normalizeIssuePath(issue2.path);
|
|
80597
|
+
const fieldDescriptor = resolveFieldValidationDescriptor(plans, path);
|
|
80408
80598
|
return {
|
|
80409
80599
|
code: issue2.code,
|
|
80410
80600
|
path,
|
|
80411
80601
|
fieldPath: normalizePathString(path),
|
|
80602
|
+
fieldDescriptor,
|
|
80603
|
+
isFieldVisibleInSidebar: isValidationFieldVisibleInSidebar(fieldDescriptor),
|
|
80412
80604
|
message: issue2.message
|
|
80413
80605
|
};
|
|
80414
80606
|
});
|
|
80415
80607
|
}
|
|
80608
|
+
function isValidationFieldVisibleInSidebar(descriptor) {
|
|
80609
|
+
if (!descriptor) return true;
|
|
80610
|
+
return descriptor.visibility.kind === "visible";
|
|
80611
|
+
}
|
|
80416
80612
|
function normalizeManifestIssueMessage(issue2) {
|
|
80417
80613
|
switch (issue2.code) {
|
|
80418
80614
|
case "invalid_type":
|
|
@@ -80431,8 +80627,8 @@ function normalizeManifestIssueMessage(issue2) {
|
|
|
80431
80627
|
}
|
|
80432
80628
|
}
|
|
80433
80629
|
function getManifestValidation(manifest, mode) {
|
|
80434
|
-
const cached =
|
|
80435
|
-
const existing = cached
|
|
80630
|
+
const cached = getManifestValidationCacheEntry(manifest);
|
|
80631
|
+
const existing = cached.validators[mode];
|
|
80436
80632
|
if (existing) {
|
|
80437
80633
|
return existing;
|
|
80438
80634
|
}
|
|
@@ -80440,10 +80636,19 @@ function getManifestValidation(manifest, mode) {
|
|
|
80440
80636
|
allowNull: false,
|
|
80441
80637
|
mode
|
|
80442
80638
|
});
|
|
80443
|
-
|
|
80444
|
-
|
|
80445
|
-
|
|
80446
|
-
|
|
80639
|
+
cached.validators[mode] = created;
|
|
80640
|
+
return created;
|
|
80641
|
+
}
|
|
80642
|
+
function getManifestValidationCacheEntry(manifest) {
|
|
80643
|
+
const cached = manifestValidationCache.get(manifest);
|
|
80644
|
+
if (cached) {
|
|
80645
|
+
return cached;
|
|
80646
|
+
}
|
|
80647
|
+
const created = {
|
|
80648
|
+
plans: deriveFieldValidationPlans(manifest.fields ?? []),
|
|
80649
|
+
validators: {}
|
|
80650
|
+
};
|
|
80651
|
+
manifestValidationCache.set(manifest, created);
|
|
80447
80652
|
return created;
|
|
80448
80653
|
}
|
|
80449
80654
|
function normalizeIssuePath(path) {
|
|
@@ -82031,6 +82236,8 @@ function deriveBlockedPublishPlan({
|
|
|
82031
82236
|
if (!firstError) {
|
|
82032
82237
|
return { type: "allowed" };
|
|
82033
82238
|
}
|
|
82239
|
+
const focusError = validationErrors.find((error) => error.isFieldVisibleInSidebar) ?? firstError;
|
|
82240
|
+
const focusFieldPath = focusError.isFieldVisibleInSidebar ? focusError.fieldPath || null : null;
|
|
82034
82241
|
return {
|
|
82035
82242
|
type: "blocked",
|
|
82036
82243
|
invalidBlockIds,
|
|
@@ -82039,8 +82246,8 @@ function deriveBlockedPublishPlan({
|
|
|
82039
82246
|
reveal: "show-validation"
|
|
82040
82247
|
})),
|
|
82041
82248
|
focusTarget: {
|
|
82042
|
-
blockId:
|
|
82043
|
-
fieldPath:
|
|
82249
|
+
blockId: focusError.blockId,
|
|
82250
|
+
fieldPath: focusFieldPath
|
|
82044
82251
|
},
|
|
82045
82252
|
message: invalidBlockIds.length === 1 ? {
|
|
82046
82253
|
type: "single-invalid-block",
|
|
@@ -82099,9 +82306,12 @@ function validateAllBlocks(uiStore) {
|
|
|
82099
82306
|
blockId: snapshot.id,
|
|
82100
82307
|
blockKind: snapshot.meta.kind,
|
|
82101
82308
|
fieldPath: issue2.fieldPath,
|
|
82309
|
+
fieldDescriptor: issue2.fieldDescriptor,
|
|
82310
|
+
isFieldVisibleInSidebar: issue2.isFieldVisibleInSidebar,
|
|
82102
82311
|
fieldLabel: getFieldLabelFromManifest(
|
|
82103
82312
|
definition.manifest,
|
|
82104
|
-
issue2.path
|
|
82313
|
+
issue2.path,
|
|
82314
|
+
issue2.fieldDescriptor
|
|
82105
82315
|
),
|
|
82106
82316
|
message: issue2.message
|
|
82107
82317
|
});
|
|
@@ -82110,7 +82320,8 @@ function validateAllBlocks(uiStore) {
|
|
|
82110
82320
|
}
|
|
82111
82321
|
return errors;
|
|
82112
82322
|
}
|
|
82113
|
-
function getFieldLabelFromManifest(manifest, path) {
|
|
82323
|
+
function getFieldLabelFromManifest(manifest, path, descriptor) {
|
|
82324
|
+
if (descriptor) return descriptor.label;
|
|
82114
82325
|
if (path.length === 0) return "Unknown field";
|
|
82115
82326
|
const fieldId = path[0];
|
|
82116
82327
|
if (typeof fieldId !== "string") return String(fieldId);
|
|
@@ -106052,7 +106263,7 @@ var DEFAULT_VALUE_BUILDERS = {
|
|
|
106052
106263
|
contentTypeSelect: getContentTypeSelectFieldDefault,
|
|
106053
106264
|
entryPicker: getEntryPickerFieldDefault
|
|
106054
106265
|
};
|
|
106055
|
-
function
|
|
106266
|
+
function buildFieldSchema(field, ctx) {
|
|
106056
106267
|
const builder = SCHEMA_BUILDERS[field.type];
|
|
106057
106268
|
if (!builder) {
|
|
106058
106269
|
console.warn(`No schema builder registered for field type: ${field.type}`);
|
|
@@ -106158,10 +106369,10 @@ function isFieldVisible(field, role) {
|
|
|
106158
106369
|
function buildValidationSchema(fields3) {
|
|
106159
106370
|
const shape = {};
|
|
106160
106371
|
const ctx = {
|
|
106161
|
-
getFieldSchema: (field) =>
|
|
106372
|
+
getFieldSchema: (field) => buildFieldSchema(field, ctx)
|
|
106162
106373
|
};
|
|
106163
106374
|
for (const field of fields3) {
|
|
106164
|
-
shape[field.id] =
|
|
106375
|
+
shape[field.id] = buildFieldSchema(field, ctx);
|
|
106165
106376
|
}
|
|
106166
106377
|
return z.object(shape).catchall(z.unknown()).passthrough();
|
|
106167
106378
|
}
|
|
@@ -109380,6 +109591,7 @@ function clearBookingFieldError(errors, fieldId) {
|
|
|
109380
109591
|
function createInitialBookingFlowReducerState(input) {
|
|
109381
109592
|
const initialData = input.initialData ?? {};
|
|
109382
109593
|
return {
|
|
109594
|
+
phase: "editing",
|
|
109383
109595
|
currentStepId: "service-selection",
|
|
109384
109596
|
selectedServiceId: toOptionalAppointmentServiceId(
|
|
109385
109597
|
toOptionalString(initialData.serviceId) ?? input.defaultServiceId
|
|
@@ -109400,8 +109612,7 @@ function createInitialBookingFlowReducerState(input) {
|
|
|
109400
109612
|
),
|
|
109401
109613
|
altchaSolution: null,
|
|
109402
109614
|
validationErrors: createEmptyBookingValidationErrors(),
|
|
109403
|
-
feedback: { kind: "none" }
|
|
109404
|
-
isSubmitting: false
|
|
109615
|
+
feedback: { kind: "none" }
|
|
109405
109616
|
};
|
|
109406
109617
|
}
|
|
109407
109618
|
function collectInitialFieldValues(initialData) {
|
|
@@ -109528,8 +109739,15 @@ function bookingFlowReducer(state, event) {
|
|
|
109528
109739
|
case "validation-errors-set":
|
|
109529
109740
|
return { ...state, validationErrors: event.errors };
|
|
109530
109741
|
case "feedback-set":
|
|
109531
|
-
return {
|
|
109742
|
+
return {
|
|
109743
|
+
...state,
|
|
109744
|
+
phase: event.feedback.kind === "success" ? "completed" : "editing",
|
|
109745
|
+
feedback: event.feedback
|
|
109746
|
+
};
|
|
109532
109747
|
case "availability-selection-invalidated":
|
|
109748
|
+
if (state.phase !== "editing") {
|
|
109749
|
+
return state;
|
|
109750
|
+
}
|
|
109533
109751
|
return {
|
|
109534
109752
|
...state,
|
|
109535
109753
|
currentStepId: "datetime-selection",
|
|
@@ -109543,11 +109761,11 @@ function bookingFlowReducer(state, event) {
|
|
|
109543
109761
|
validationErrors: clearBookingFormError(state.validationErrors)
|
|
109544
109762
|
};
|
|
109545
109763
|
case "feedback-cleared":
|
|
109546
|
-
return { ...state, feedback: { kind: "none" } };
|
|
109764
|
+
return { ...state, phase: "editing", feedback: { kind: "none" } };
|
|
109547
109765
|
case "submission-started":
|
|
109548
|
-
return { ...state,
|
|
109766
|
+
return { ...state, phase: "submitting" };
|
|
109549
109767
|
case "submission-finished":
|
|
109550
|
-
return { ...state,
|
|
109768
|
+
return state.phase === "submitting" ? { ...state, phase: "editing" } : state;
|
|
109551
109769
|
case "reset":
|
|
109552
109770
|
return event.initial;
|
|
109553
109771
|
default:
|
|
@@ -109982,8 +110200,8 @@ function toHeadlessEligibleAppointmentPackage(appointmentPackage) {
|
|
|
109982
110200
|
};
|
|
109983
110201
|
}
|
|
109984
110202
|
function resolveHeadlessBookingStatus(input) {
|
|
109985
|
-
if (input.
|
|
109986
|
-
if (input.feedback.kind === "success") {
|
|
110203
|
+
if (input.phase === "submitting") return { tag: "submitting" };
|
|
110204
|
+
if (input.phase === "completed" && input.feedback.kind === "success") {
|
|
109987
110205
|
return {
|
|
109988
110206
|
tag: "success",
|
|
109989
110207
|
resourceName: input.feedback.resourceName
|
|
@@ -110142,6 +110360,7 @@ function useHeadlessBookingFlow(options) {
|
|
|
110142
110360
|
[availableDates]
|
|
110143
110361
|
);
|
|
110144
110362
|
useEffect(() => {
|
|
110363
|
+
if (state.phase !== "editing") return;
|
|
110145
110364
|
const canEvaluateDate = availabilityDatesQuery.ok && Boolean(availableDatesLoadedRange) && !isLoadingDates && !datesError;
|
|
110146
110365
|
const canEvaluateSlot = !state.selectedSlot || availabilitySlotsQuery.ok && hasLoadedSlots && !isLoadingSlots && !slotsError;
|
|
110147
110366
|
if (!canEvaluateDate || !canEvaluateSlot) return;
|
|
@@ -110167,6 +110386,7 @@ function useHeadlessBookingFlow(options) {
|
|
|
110167
110386
|
isLoadingSlots,
|
|
110168
110387
|
slotViews,
|
|
110169
110388
|
slotsError,
|
|
110389
|
+
state.phase,
|
|
110170
110390
|
state.selectedDate,
|
|
110171
110391
|
state.selectedSlot
|
|
110172
110392
|
]);
|
|
@@ -110327,7 +110547,7 @@ function useHeadlessBookingFlow(options) {
|
|
|
110327
110547
|
const submitBooking = useCallback(
|
|
110328
110548
|
async (submitOptions) => {
|
|
110329
110549
|
const latest = latestRef.current;
|
|
110330
|
-
if (submittingRef.current || latest.state.
|
|
110550
|
+
if (submittingRef.current || latest.state.phase === "submitting") {
|
|
110331
110551
|
return {
|
|
110332
110552
|
ok: false,
|
|
110333
110553
|
reason: "blocked",
|
|
@@ -110523,7 +110743,7 @@ function useHeadlessBookingFlow(options) {
|
|
|
110523
110743
|
const spamProtectionEnabled = options.spamProtectionEnabled ?? isSpamProtectionEnabled();
|
|
110524
110744
|
const status = resolveHeadlessBookingStatus({
|
|
110525
110745
|
feedback: state.feedback,
|
|
110526
|
-
|
|
110746
|
+
phase: state.phase
|
|
110527
110747
|
});
|
|
110528
110748
|
const view = resolveHeadlessBookingView({
|
|
110529
110749
|
form: options.form,
|
|
@@ -120057,6 +120277,7 @@ var HeaderSectionNode2 = ({
|
|
|
120057
120277
|
pathBase,
|
|
120058
120278
|
children,
|
|
120059
120279
|
className: originalClassName,
|
|
120280
|
+
"data-preview-site-chrome-surface": previewSiteChromeSurface,
|
|
120060
120281
|
...restProps
|
|
120061
120282
|
}) => {
|
|
120062
120283
|
const rootRef = useRef(null);
|
|
@@ -120064,7 +120285,11 @@ var HeaderSectionNode2 = ({
|
|
|
120064
120285
|
() => splitPositioningClasses(originalClassName),
|
|
120065
120286
|
[originalClassName]
|
|
120066
120287
|
);
|
|
120067
|
-
const wrapperClassName =
|
|
120288
|
+
const wrapperClassName = [
|
|
120289
|
+
"block-site-header",
|
|
120290
|
+
wrapperClasses,
|
|
120291
|
+
previewSiteChromeSurface ? "group/site-chrome rb-relative" : ""
|
|
120292
|
+
].filter(Boolean).join(" ");
|
|
120068
120293
|
const hasShrinkClasses2 = useMemo(
|
|
120069
120294
|
() => Boolean(sectionClasses?.includes("rb-header-shrink")),
|
|
120070
120295
|
[sectionClasses]
|
|
@@ -120097,6 +120322,7 @@ var HeaderSectionNode2 = ({
|
|
|
120097
120322
|
"data-block-content": blockContent ? "true" : void 0,
|
|
120098
120323
|
"data-fragment-registry": fragmentRegistry2 ? "true" : void 0,
|
|
120099
120324
|
"data-path-base": typeof pathBase === "string" ? pathBase : void 0,
|
|
120325
|
+
"data-preview-site-chrome-surface": previewSiteChromeSurface,
|
|
120100
120326
|
children: /* @__PURE__ */ jsx(
|
|
120101
120327
|
Section_default,
|
|
120102
120328
|
{
|
|
@@ -121537,7 +121763,7 @@ var EventCombinedClient = ({
|
|
|
121537
121763
|
showCapacity,
|
|
121538
121764
|
// Styling
|
|
121539
121765
|
buttonVariant = "primary",
|
|
121540
|
-
buttonText = "
|
|
121766
|
+
buttonText = "Book now",
|
|
121541
121767
|
emptyMessage = "No upcoming events scheduled.",
|
|
121542
121768
|
className
|
|
121543
121769
|
}) => {
|
|
@@ -162940,7 +163166,6 @@ var PreviewRichTextEditorInner = ({
|
|
|
162940
163166
|
toolbarTone: "dark",
|
|
162941
163167
|
toolbarPortalToChrome: false,
|
|
162942
163168
|
hideToolbar: true,
|
|
162943
|
-
onClick: () => editor?.chain().focus().run(),
|
|
162944
163169
|
renderContent: (content) => /* @__PURE__ */ jsx(
|
|
162945
163170
|
"div",
|
|
162946
163171
|
{
|